diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/m4/animation.cpp | 3 | ||||
-rw-r--r-- | engines/m4/mads_anim.cpp | 56 | ||||
-rw-r--r-- | engines/m4/mads_anim.h | 1 |
3 files changed, 49 insertions, 11 deletions
diff --git a/engines/m4/animation.cpp b/engines/m4/animation.cpp index 9b6d5d1a6f..1d9b1161c2 100644 --- a/engines/m4/animation.cpp +++ b/engines/m4/animation.cpp @@ -328,6 +328,7 @@ void MadsAnimation::update() { // Handle starting any sound for this frame AnimMiscEntry &misc = _miscEntries[_currentFrame]; +printf("frame %d delay %d\n", _currentFrame, misc.numTicks); if (misc.soundNum) _vm->_sound->playSound(misc.soundNum); @@ -449,6 +450,8 @@ void MadsAnimation::setCurrentFrame(int frameNumber) { _currentFrame = frameNumber; _oldFrameEntry = 0; _freeFlag = false; + + _nextScrollTimer = _nextFrameTimer = _madsVm->_currentTimer; } void MadsAnimation::load1(int frameNumber) { diff --git a/engines/m4/mads_anim.cpp b/engines/m4/mads_anim.cpp index c618ae57cc..c2e9ea4eee 100644 --- a/engines/m4/mads_anim.cpp +++ b/engines/m4/mads_anim.cpp @@ -459,7 +459,8 @@ AnimviewView::AnimviewView(MadsM4Engine *vm): _transition = kTransitionNone; _activeAnimation = NULL; _bgLoadFlag = true; - + _startFrame = -1; + reset(); // Set up system palette colors @@ -536,6 +537,9 @@ void AnimviewView::updateState() { return; } + // Reset flags + _startFrame = -1; + readNextCommand(); } @@ -543,7 +547,15 @@ void AnimviewView::updateState() { } void AnimviewView::readNextCommand() { +static bool tempFlag = true;//****DEBUG - Temporarily allow me to skip several intro scenes **** + while (!_script->eos() && !_script->err()) { + if (!tempFlag) { + tempFlag = true; + strncpy(_currentLine, _script->readLine().c_str(), 79); + strncpy(_currentLine, _script->readLine().c_str(), 79); + } + strncpy(_currentLine, _script->readLine().c_str(), 79); // Process any switches on the line @@ -581,6 +593,9 @@ void AnimviewView::readNextCommand() { _activeAnimation = new MadsAnimation(_vm, this); _activeAnimation->initialise(_currentLine, flags, &_backgroundSurface, &_codeSurface); + if (_startFrame != -1) + _activeAnimation->setCurrentFrame(_startFrame); + _spriteSlots.fullRefresh(); /* // Handle scene transition @@ -634,6 +649,7 @@ return; Switches are: (taken from the help of the original executable) -b Toggle background load status off/on. -c:char Specify sound card id letter. + -f:num Specify a specific starting frame number -g Stay in graphics mode on exit. -h[:ex] Disable EMS/XMS high memory support. -i Switch sound interrupts mode off/on. @@ -677,21 +693,39 @@ void AnimviewView::processCommand() { str_upper(commandStr); char *param = commandStr; - if (!strncmp(commandStr, "B", 1)) { + switch (commandStr[0]) { + case 'B': // Toggle background load flag _bgLoadFlag = !_bgLoadFlag; - } else if (!strncmp(commandStr, "X", 1)) { - //printf("X "); - } else if (!strncmp(commandStr, "W", 1)) { - //printf("W "); - } else if (!strncmp(commandStr, "R", 1)) { - param = param + 2; - //printf("R:%s ", param); - } else if (!strncmp(commandStr, "O", 1)) { + break; + + case 'F': + // Start animation at a specific frame + ++param; + assert(*param == ':'); + _startFrame = atoi(++param); + break; + + case 'O': param = param + 2; //printf("O:%i ", atoi(param)); _transition = atoi(param); - } else { + break; + + case 'R': + param = param + 2; + //printf("R:%s ", param); + break; + + case 'W': + //printf("W "); + break; + + case 'X': + //printf("X "); + break; + + default: error("Unknown response command: '%s'", commandStr); } } diff --git a/engines/m4/mads_anim.h b/engines/m4/mads_anim.h index f18fe46f48..78cc8727f8 100644 --- a/engines/m4/mads_anim.h +++ b/engines/m4/mads_anim.h @@ -91,6 +91,7 @@ private: int _transition; MadsAnimation *_activeAnimation; bool _bgLoadFlag; + int _startFrame; void reset(); void readNextCommand(); |