diff options
-rw-r--r-- | scumm/smush/insane.cpp | 93 |
1 files changed, 90 insertions, 3 deletions
diff --git a/scumm/smush/insane.cpp b/scumm/smush/insane.cpp index c4e7792d58..15f02e04ad 100644 --- a/scumm/smush/insane.cpp +++ b/scumm/smush/insane.cpp @@ -1361,13 +1361,14 @@ void Insane::blah(void) { if (!smlayer_isSoundRunning(87)) smlayer_startSound1(87); + _scumm->_sound->processSoundQues(); + _scumm->parseEvents(); _scumm->processKbd(); _scumm->setActorRedrawFlags(); _scumm->resetActorBgs(); _scumm->processActors(); - _scumm->_sound->processSoundQues(); _scumm->drawDirtyScreenParts(); _scumm->_system->update_screen(); @@ -1487,6 +1488,10 @@ void Insane::readState(void) { _actor[0].inventory[INV_DUST] = readArray(_numberArray, 55) != 0; // Dust _actor[0].inventory[INV_HAND] = 1; // Boot _actor[0].inventory[INV_BOOT] = 1; // Hand + + for (int i = 0; i < 7; i++) // PATCH + _actor[0].inventory[i] = 1; + _smlayer_room = readArray(_numberArray, 320); _smlayer_room2 = readArray(_numberArray, 321); _val55d = readArray(_numberArray, 322); @@ -2704,8 +2709,87 @@ void Insane::postCase10(byte *renderBitmap, int32 codecparam, int32 setupsan12, void Insane::postCase12(byte *renderBitmap, int32 codecparam, int32 setupsan12, int32 setupsan13, int32 curFrame, int32 maxFrame) { - // FIXME: implement - warning("stub Insane::postCase12(...)"); + if (_actor[1].y <= 200) { + initScene(3); + _actor[1].y = 200; + + switch (_currEnemy) { + case EN_ROTT2: + actorsReaction(true); + + if (_enemy[1].field_8 <= 1) + prepareScenePropScene(scenePropIdx[32], 0, 1); + else + prepareScenePropScene(scenePropIdx[33], 0, 1); + break; + case EN_ROTT3: + actorsReaction(true); + + if (_enemy[1].field_8 <= 1) + prepareScenePropScene(scenePropIdx[25], 0, 1); + break; + case EN_VULTF1: + actorsReaction(true); + + if (_enemy[1].field_8 <= 1) + prepareScenePropScene(scenePropIdx[2], 0, 1); + break; + case EN_VULTF2: + actorsReaction(true); + + if (_enemy[1].field_8 <= 1) + prepareScenePropScene(scenePropIdx[9], 0, 1); + else + prepareScenePropScene(scenePropIdx[16], 0, 1); + break; + case EN_VULTM2: + actorsReaction(true); + + prepareScenePropScene(scenePropIdx[18], 0, 1); + _val39_ = false; + break; + case EN_TORQUE: + actorsReaction(false); + setWordInString(_numberArray, 1, _val51d); + smush_setToFinish(); + break; + case EN_ROTT1: + case EN_VULTM1: + case EN_CAVEFISH: + default: + actorsReaction(true); + break; + } + } else { + switch (_currEnemy) { + case EN_VULTM2: + if (_enemy[EN_VULTM2].field_8 <= 1) + actorsReaction(false); + else + actorsReaction(true); + break; + case EN_TORQUE: + actorsReaction(false); + if (_actor[1].y != 300) + prepareScenePropScene(scenePropIdx[57], 1, 0); + break; + default: + actorsReaction(true); + } + _actor[1].y -= (_actor[1].y - 200) / 20 + 1; + } + + checkEnemyLoose(false); + + if (curFrame == 0) + smlayer_setFluPalette(_smush_roadrashRip, 0); + + if (curFrame >= maxFrame) + smush_rewindCurrentSan(1088, -1, -1); + + _val119_ = 0; + _val120_ = 0; + _continueFrame = curFrame; } void Insane::postCase23(byte *renderBitmap, int32 codecparam, int32 setupsan12, @@ -5333,6 +5417,9 @@ void Insane::smush_setupSanFile(const char *filename, int32 offset) { debug(0, "smush_setupSanFile(%s, %d)", filename, offset); _player->seekSan(filename, _scumm->getGameDataPath(), offset); + + _scumm->_imuseDigital->pause(false); + _scumm->_sound->pauseBundleMusic(false); } } |