[Scummvm-git-logs] scummvm master -> cd8446ad4500447b218d1701adac7b882c998b13
sev-
sev at scummvm.org
Sat Feb 8 14:17:06 UTC 2020
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
cd8446ad45 DIRECTOR: Made number of channels dynamic
Commit: cd8446ad4500447b218d1701adac7b882c998b13
https://github.com/scummvm/scummvm/commit/cd8446ad4500447b218d1701adac7b882c998b13
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-02-08T13:10:11+01:00
Commit Message:
DIRECTOR: Made number of channels dynamic
Changed paths:
engines/director/director.h
engines/director/frame.cpp
engines/director/frame.h
engines/director/lingo/lingo-events.cpp
engines/director/lingo/lingo.cpp
engines/director/score.cpp
engines/director/score.h
diff --git a/engines/director/director.h b/engines/director/director.h
index 3695532..67e802c 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -31,8 +31,6 @@
#include "engines/engine.h"
#include "director/types.h"
-#define CHANNEL_COUNT 30
-
namespace Common {
class MacResManager;
class SeekableReadStream;
diff --git a/engines/director/frame.cpp b/engines/director/frame.cpp
index b72e0b4..8e06ef9 100644
--- a/engines/director/frame.cpp
+++ b/engines/director/frame.cpp
@@ -37,7 +37,7 @@
namespace Director {
-Frame::Frame(DirectorEngine *vm) {
+Frame::Frame(DirectorEngine *vm, int numChannels) {
_vm = vm;
_transDuration = 0;
_transType = kTransNone;
@@ -45,6 +45,8 @@ Frame::Frame(DirectorEngine *vm) {
_transChunkSize = 0;
_tempo = 0;
+ _numChannels = numChannels;
+
_sound1 = 0;
_sound2 = 0;
_soundType1 = 0;
@@ -56,7 +58,7 @@ Frame::Frame(DirectorEngine *vm) {
_palette = NULL;
- _sprites.resize(CHANNEL_COUNT + 1);
+ _sprites.resize(_numChannels + 1);
for (uint16 i = 0; i < _sprites.size(); i++) {
Sprite *sp = new Sprite();
@@ -66,6 +68,7 @@ Frame::Frame(DirectorEngine *vm) {
Frame::Frame(const Frame &frame) {
_vm = frame._vm;
+ _numChannels = frame._numChannels;
_actionId = frame._actionId;
_transArea = frame._transArea;
_transDuration = frame._transDuration;
@@ -82,9 +85,9 @@ Frame::Frame(const Frame &frame) {
debugC(1, kDebugLoading, "Frame. action: %d transType: %d transDuration: %d", _actionId, _transType, _transDuration);
- _sprites.resize(CHANNEL_COUNT + 1);
+ _sprites.resize(_numChannels + 1);
- for (uint16 i = 0; i < CHANNEL_COUNT + 1; i++) {
+ for (uint16 i = 0; i < _numChannels + 1; i++) {
_sprites[i] = new Sprite(*frame._sprites[i]);
}
}
@@ -190,7 +193,7 @@ void Frame::readChannels(Common::ReadStreamEndian *stream) {
}
}
- for (int i = 0; i < CHANNEL_COUNT; i++) {
+ for (int i = 0; i < _numChannels; i++) {
Sprite &sprite = *_sprites[i + 1];
if (_vm->getVersion() <= 4) {
@@ -578,7 +581,7 @@ void Frame::playTransition(Score *score) {
}
void Frame::renderSprites(Graphics::ManagedSurface &surface, bool renderTrail) {
- for (uint16 i = 0; i < CHANNEL_COUNT; i++) {
+ for (uint16 i = 0; i < _numChannels; i++) {
if (_sprites[i]->_enabled) {
if ((_sprites[i]->_trails == 0 && renderTrail) || (_sprites[i]->_trails == 1 && !renderTrail))
continue;
diff --git a/engines/director/frame.h b/engines/director/frame.h
index 970e8a4..fde5432 100644
--- a/engines/director/frame.h
+++ b/engines/director/frame.h
@@ -63,7 +63,7 @@ struct FrameEntity {
class Frame {
public:
- Frame(DirectorEngine *vm);
+ Frame(DirectorEngine *vm, int numChannels);
Frame(const Frame &frame);
~Frame();
void readChannels(Common::ReadStreamEndian *stream);
@@ -95,6 +95,7 @@ private:
void addDrawRect(uint16 entityId, Common::Rect &rect);
public:
+ int _numChannels;
byte _channelData[kChannelDataSize];
uint8 _actionId;
uint8 _transDuration;
diff --git a/engines/director/lingo/lingo-events.cpp b/engines/director/lingo/lingo-events.cpp
index cc4d040..9184f8f 100644
--- a/engines/director/lingo/lingo-events.cpp
+++ b/engines/director/lingo/lingo-events.cpp
@@ -258,7 +258,7 @@ void Lingo::processSpriteEvent(LEvent event) {
Frame *currentFrame = score->_frames[score->getCurrentFrame()];
if (event == kEventBeginSprite) {
// TODO: Check if this is also possibly a kSpriteScript?
- for (uint16 i = 0; i < CHANNEL_COUNT; i++)
+ for (uint16 i = 0; i < score->_numChannelsDisplayed; i++)
if (currentFrame->_sprites[i]->_enabled)
processEvent(event, kCastScript, currentFrame->_sprites[i]->_scriptId);
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 13e5c3a..c2ad108 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -589,7 +589,7 @@ void Lingo::runTests() {
}
void Lingo::executeImmediateScripts(Frame *frame) {
- for (uint16 i = 0; i < CHANNEL_COUNT; i++) {
+ for (uint16 i = 0; i < _vm->getCurrentScore()->_numChannelsDisplayed; i++) {
if (_vm->getCurrentScore()->_immediateActions.contains(frame->_sprites[i]->_scriptId)) {
g_lingo->processEvent(kEventMouseUp, kFrameScript, frame->_sprites[i]->_scriptId);
}
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 603a399..04ffc05 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -100,6 +100,8 @@ Score::Score(DirectorEngine *vm) {
_loadedStxts = nullptr;
_loadedCast = nullptr;
+
+ _numChannelsDisplayed = 0;
}
void Score::setArchive(Archive *archive) {
@@ -414,22 +416,23 @@ void Score::loadFrames(Common::SeekableSubReadStreamEndian &stream) {
uint32 size = stream.readUint32();
size -= 4;
- if (_vm->getVersion() == 4) {
+ if (_vm->getVersion() < 4) {
+ _numChannelsDisplayed = 30;
+ } else if (_vm->getVersion() == 4) {
uint32 frame1Offset = stream.readUint32();
uint32 numFrames = stream.readUint32();
uint16 version = stream.readUint16();
uint16 spriteRecordSize = stream.readUint16();
uint16 numChannels = stream.readUint16();
- uint16 numChannelsDisplayed;
size -= 14;
if (version > 13) {
- numChannelsDisplayed = stream.readUint16();
+ _numChannelsDisplayed = stream.readUint16();
} else {
if (version <= 7) // Director5
- numChannelsDisplayed = 28;
+ _numChannelsDisplayed = 48;
else
- numChannelsDisplayed = 120; // D6
+ _numChannelsDisplayed = 120; // D6
stream.readUint16(); // Skip
}
@@ -437,7 +440,7 @@ void Score::loadFrames(Common::SeekableSubReadStreamEndian &stream) {
size -= 2;
warning("STUB: Score::loadFrames. frame1Offset: %x numFrames: %x version: %x spriteRecordSize: %x numChannels: %x numChannelsDisplayed: %x",
- frame1Offset, numFrames, version, spriteRecordSize, numChannels, numChannelsDisplayed);
+ frame1Offset, numFrames, version, spriteRecordSize, numChannels, _numChannelsDisplayed);
// Unknown, some bytes - constant (refer to contuinity).
} else if (_vm->getVersion() > 4) {
//what data is up the top of D5 VWSC?
@@ -476,7 +479,7 @@ void Score::loadFrames(Common::SeekableSubReadStreamEndian &stream) {
uint16 channelSize;
uint16 channelOffset;
- Frame *initial = new Frame(_vm);
+ Frame *initial = new Frame(_vm, _numChannelsDisplayed);
// Push a frame at frame#0 position.
// This makes all indexing simpler
_frames.push_back(initial);
@@ -493,7 +496,7 @@ void Score::loadFrames(Common::SeekableSubReadStreamEndian &stream) {
debugC(kDebugLoading, 8, "++++++++++ score frame %d (frameSize %d) size %d", _frames.size(), frameSize, size);
if (frameSize > 0) {
- Frame *frame = new Frame(_vm);
+ Frame *frame = new Frame(_vm, _numChannelsDisplayed);
size -= frameSize;
frameSize -= 2;
diff --git a/engines/director/score.h b/engines/director/score.h
index f8b7bf3..7545880 100644
--- a/engines/director/score.h
+++ b/engines/director/score.h
@@ -147,6 +147,8 @@ public:
uint16 _castIDoffset;
+ int _numChannelsDisplayed;
+
private:
uint16 _versionMinor;
uint16 _versionMajor;
More information about the Scummvm-git-logs
mailing list