diff options
Diffstat (limited to 'engines/hopkins/script.cpp')
-rw-r--r-- | engines/hopkins/script.cpp | 139 |
1 files changed, 71 insertions, 68 deletions
diff --git a/engines/hopkins/script.cpp b/engines/hopkins/script.cpp index 6167ac4c23..df8c077611 100644 --- a/engines/hopkins/script.cpp +++ b/engines/hopkins/script.cpp @@ -65,8 +65,6 @@ int ScriptManager::handleOpcode(const byte *dataP) { mesgId = 639; if (mesgId == 8) mesgId = 637; - if (mesgId == 53) - mesgId = 644; if (mesgId == 557) mesgId = 636; if (mesgId == 51) @@ -99,8 +97,6 @@ int ScriptManager::handleOpcode(const byte *dataP) { mesgId = 646; if (mesgId == 604) mesgId = 647; - if (mesgId == 51) - mesgId = 644; if (mesgId == 607) mesgId = 650; if (mesgId == 605) @@ -201,64 +197,70 @@ int ScriptManager::handleOpcode(const byte *dataP) { opcodeType = 1; break; case MKTAG24('S', 'T', 'P'): - if (!_vm->_objectsMan->_disableFl) { - _vm->_objectsMan->_twoCharactersFl = false; - _vm->_objectsMan->_characterPos.x = READ_LE_INT16(dataP + 6); - _vm->_objectsMan->_characterPos.y = READ_LE_INT16(dataP + 8); - _vm->_objectsMan->_startSpriteIndex = dataP[5]; - if (_vm->_objectsMan->_changeHeadFl) { - if (_vm->_globals->_saveData->_data[svField354] == 1 - && _vm->_globals->_saveData->_cloneHopkins._pos.x && _vm->_globals->_saveData->_cloneHopkins._pos.y - && _vm->_globals->_saveData->_cloneHopkins._startSpriteIndex && _vm->_globals->_saveData->_cloneHopkins._location) { - - _vm->_objectsMan->_characterPos = _vm->_globals->_saveData->_cloneHopkins._pos; - _vm->_objectsMan->_startSpriteIndex = _vm->_globals->_saveData->_cloneHopkins._startSpriteIndex; - } - if (_vm->_globals->_saveData->_data[svField356] == 1 - && _vm->_globals->_saveData->_samantha._pos.x && _vm->_globals->_saveData->_samantha._pos.y - && _vm->_globals->_saveData->_samantha._startSpriteIndex && _vm->_globals->_saveData->_samantha._location) { - _vm->_objectsMan->_characterPos = _vm->_globals->_saveData->_samantha._pos; - _vm->_objectsMan->_startSpriteIndex = _vm->_globals->_saveData->_samantha._startSpriteIndex; - } - if (_vm->_globals->_saveData->_data[svField357] == 1 - && _vm->_globals->_saveData->_realHopkins._pos.x && _vm->_globals->_saveData->_realHopkins._pos.y - && _vm->_globals->_saveData->_realHopkins._startSpriteIndex && _vm->_globals->_saveData->_realHopkins._location) { - _vm->_objectsMan->_characterPos = _vm->_globals->_saveData->_realHopkins._pos; - _vm->_objectsMan->_startSpriteIndex = _vm->_globals->_saveData->_realHopkins._startSpriteIndex; - } + if (!_vm->_objectsMan->_disableFl) { + // HACK: This piece of code is a replacement to the missing STE opcode when entering the FBI lab. + if (_vm->_globals->_curRoomNum == 10) { + _vm->_globals->_prevScreenId = _vm->_globals->_screenId; + _vm->_globals->_saveData->_data[svLastPrevScreenId] = _vm->_globals->_screenId; + _vm->_globals->_screenId = _vm->_globals->_saveData->_data[svLastScreenId] = 10; + } + _vm->_objectsMan->_twoCharactersFl = false; + _vm->_objectsMan->_characterPos.x = READ_LE_INT16(dataP + 6); + _vm->_objectsMan->_characterPos.y = READ_LE_INT16(dataP + 8); + _vm->_objectsMan->_startSpriteIndex = dataP[5]; + if (_vm->_objectsMan->_changeHeadFl) { + if (_vm->_globals->_saveData->_data[svField354] == 1 + && _vm->_globals->_saveData->_cloneHopkins._pos.x && _vm->_globals->_saveData->_cloneHopkins._pos.y + && _vm->_globals->_saveData->_cloneHopkins._startSpriteIndex && _vm->_globals->_saveData->_cloneHopkins._location) { + + _vm->_objectsMan->_characterPos = _vm->_globals->_saveData->_cloneHopkins._pos; + _vm->_objectsMan->_startSpriteIndex = _vm->_globals->_saveData->_cloneHopkins._startSpriteIndex; } if (_vm->_globals->_saveData->_data[svField356] == 1 - && _vm->_globals->_saveData->_realHopkins._location == _vm->_globals->_screenId) { - _vm->_objectsMan->addStaticSprite( - _vm->_objectsMan->_headSprites, - _vm->_globals->_saveData->_realHopkins._pos, - 1, - 2, - _vm->_globals->_saveData->_realHopkins._zoomFactor, - false, - 34, - 190); - _vm->_objectsMan->animateSprite(1); - _vm->_objectsMan->_twoCharactersFl = true; + && _vm->_globals->_saveData->_samantha._pos.x && _vm->_globals->_saveData->_samantha._pos.y + && _vm->_globals->_saveData->_samantha._startSpriteIndex && _vm->_globals->_saveData->_samantha._location) { + _vm->_objectsMan->_characterPos = _vm->_globals->_saveData->_samantha._pos; + _vm->_objectsMan->_startSpriteIndex = _vm->_globals->_saveData->_samantha._startSpriteIndex; } if (_vm->_globals->_saveData->_data[svField357] == 1 - && _vm->_globals->_saveData->_data[svField355] == 1 - && _vm->_globals->_saveData->_samantha._location == _vm->_globals->_screenId) { - _vm->_objectsMan->addStaticSprite( - _vm->_objectsMan->_headSprites, - _vm->_globals->_saveData->_samantha._pos, - 1, - 3, - _vm->_globals->_saveData->_samantha._zoomFactor, - false, - 20, - 127); - _vm->_objectsMan->animateSprite(1); - _vm->_objectsMan->_twoCharactersFl = true; + && _vm->_globals->_saveData->_realHopkins._pos.x && _vm->_globals->_saveData->_realHopkins._pos.y + && _vm->_globals->_saveData->_realHopkins._startSpriteIndex && _vm->_globals->_saveData->_realHopkins._location) { + _vm->_objectsMan->_characterPos = _vm->_globals->_saveData->_realHopkins._pos; + _vm->_objectsMan->_startSpriteIndex = _vm->_globals->_saveData->_realHopkins._startSpriteIndex; } } - opcodeType = 1; - _vm->_objectsMan->_changeHeadFl = false; + if (_vm->_globals->_saveData->_data[svField356] == 1 + && _vm->_globals->_saveData->_realHopkins._location == _vm->_globals->_screenId) { + _vm->_objectsMan->addStaticSprite( + _vm->_objectsMan->_headSprites, + _vm->_globals->_saveData->_realHopkins._pos, + 1, + 2, + _vm->_globals->_saveData->_realHopkins._zoomFactor, + false, + 34, + 190); + _vm->_objectsMan->animateSprite(1); + _vm->_objectsMan->_twoCharactersFl = true; + } + if (_vm->_globals->_saveData->_data[svField357] == 1 + && _vm->_globals->_saveData->_data[svField355] == 1 + && _vm->_globals->_saveData->_samantha._location == _vm->_globals->_screenId) { + _vm->_objectsMan->addStaticSprite( + _vm->_objectsMan->_headSprites, + _vm->_globals->_saveData->_samantha._pos, + 1, + 3, + _vm->_globals->_saveData->_samantha._zoomFactor, + false, + 20, + 127); + _vm->_objectsMan->animateSprite(1); + _vm->_objectsMan->_twoCharactersFl = true; + } + } + opcodeType = 1; + _vm->_objectsMan->_changeHeadFl = false; break; case MKTAG24('S', 'T', 'E'): if (!_vm->_objectsMan->_disableFl) { @@ -585,7 +587,7 @@ int ScriptManager::handleOpcode(const byte *dataP) { if (!_vm->_globals->_censorshipFl) { _vm->_soundMan->_specialSoundNum = 16; _vm->_graphicsMan->_fadingFl = true; - _vm->_animMan->playAnim("EGORGE.ANM", 50, 28, 500); + _vm->_animMan->playAnim("EGORGE.ANM", "EGORGE.ANM", 50, 28, 500); _vm->_soundMan->_specialSoundNum = 0; } _vm->_animMan->loadAnim("ASCEN"); @@ -726,7 +728,7 @@ int ScriptManager::handleOpcode(const byte *dataP) { _vm->_animMan->playSequence("grenade.SEQ", 1, 32, 100, false, false); _vm->_soundMan->_specialSoundNum = 0; _vm->_graphicsMan->_fadingFl = true; - _vm->_animMan->playAnim("CREVE17.ANM", 24, 24, 200); + _vm->_animMan->playAnim("CREVE17.ANM", "CREVE17.ANM", 24, 24, 200); _vm->_soundMan->removeSample(1); _vm->_soundMan->removeSample(2); _vm->_soundMan->removeSample(3); @@ -953,7 +955,7 @@ int ScriptManager::handleOpcode(const byte *dataP) { case 56: _vm->_globals->_characterSpriteBuf = _vm->_fileIO->loadFile("HOPFEM.SPR"); - _vm->_globals->_characterType = 1; + _vm->_globals->_characterType = CHARACTER_HOPKINS_CLONE; _vm->_globals->_saveData->_data[svAlternateSpriteFl] = 1; _vm->_globals->loadCharacterData(); _vm->_objectsMan->_sprite[0]._deltaX = 28; @@ -963,7 +965,7 @@ int ScriptManager::handleOpcode(const byte *dataP) { case 57: _vm->_globals->_characterSpriteBuf = _vm->_fileIO->loadFile("PERSO.SPR"); - _vm->_globals->_characterType = 0; + _vm->_globals->_characterType = CHARACTER_HOPKINS; _vm->_globals->_saveData->_data[svAlternateSpriteFl] = 0; _vm->_globals->loadCharacterData(); _vm->_objectsMan->_sprite[0]._deltaX = 34; @@ -1071,6 +1073,7 @@ int ScriptManager::handleOpcode(const byte *dataP) { _vm->_soundMan->playWav(2); playFl = true; } + break; case 6: playFl = false; break; @@ -1395,7 +1398,7 @@ int ScriptManager::handleOpcode(const byte *dataP) { _vm->_globals->_introSpeechOffFl = true; _vm->_talkMan->startAnimatedCharacterDialogue("tourist1.pe2"); _vm->_globals->_introSpeechOffFl = false; - _vm->_animMan->playAnim2("T421.ANM", 100, 14, 500); + _vm->_animMan->playAnim2("T421A.ANM", "T421.ANM", 100, 14, 500); _vm->_events->refreshScreenAndEvents(); _vm->_events->refreshScreenAndEvents(); _vm->_events->refreshScreenAndEvents(); @@ -1957,7 +1960,7 @@ int ScriptManager::handleOpcode(const byte *dataP) { _vm->_animMan->playSequence("SECRET2.SEQ", 1, 12, 100, false, true); _vm->_soundMan->_specialSoundNum = 0; _vm->_graphicsMan->_noFadingFl = true; - _vm->_graphicsMan->fadeOutLong(); + _vm->_graphicsMan->fadeOutShort(); for (int i = 1; i <= 39; i++) { if (_vm->shouldQuit()) @@ -2326,7 +2329,7 @@ int ScriptManager::handleOpcode(const byte *dataP) { if (!_vm->getIsDemo()) { _vm->_graphicsMan->_fadingFl = true; _vm->_graphicsMan->_fadeDefaultSpeed = 1; - _vm->_animMan->playAnim("BOMBE1A.ANM", 100, 18, 100); + _vm->_animMan->playAnim("BOMBE1A.ANM", "BOMBE1.ANM", 100, 18, 100); } _vm->_graphicsMan->loadImage("BOMBEB"); _vm->_graphicsMan->setColorPercentage(252, 100, 100, 100); @@ -2352,7 +2355,7 @@ int ScriptManager::handleOpcode(const byte *dataP) { _vm->_objectsMan->setAndPlayAnim(3, 0, 16, true); _vm->_soundMan->_specialSoundNum = 199; _vm->_graphicsMan->_fadingFl = true; - _vm->_animMan->playAnim("BOMBE2A.ANM", 50, 14, 500); + _vm->_animMan->playAnim("BOMBE2A.ANM", "BOMBE2.ANM", 50, 14, 500); _vm->_soundMan->_specialSoundNum = 0; memset(_vm->_graphicsMan->_frontBuffer, 0, 614400); _vm->_graphicsMan->_noFadingFl = true; @@ -2363,7 +2366,7 @@ int ScriptManager::handleOpcode(const byte *dataP) { _vm->_graphicsMan->fastDisplay(_vm->_globals->_levelSpriteBuf, 513, 163, 7, false); _vm->_objectsMan->setAndPlayAnim(1, 0, 16, true); _vm->_soundMan->_specialSoundNum = 199; - _vm->_animMan->playAnim("BOMBE2A.ANM", 50, 14, 500); + _vm->_animMan->playAnim("BOMBE2A.ANM", "BOMBE2.ANM", 50, 14, 500); _vm->_soundMan->_specialSoundNum = 0; _vm->_graphicsMan->_noFadingFl = true; memset(_vm->_graphicsMan->_frontBuffer, 0, 614400); @@ -2376,7 +2379,7 @@ int ScriptManager::handleOpcode(const byte *dataP) { _vm->_graphicsMan->fadeOutShort(); _vm->_soundMan->_specialSoundNum = 199; _vm->_graphicsMan->_fadingFl = true; - _vm->_animMan->playAnim("BOMBE2A.ANM", 50, 14, 500); + _vm->_animMan->playAnim("BOMBE2A.ANM", "BOMBE2.ANM", 50, 14, 500); _vm->_soundMan->_specialSoundNum = 0; _vm->_graphicsMan->_noFadingFl = true; memset(_vm->_graphicsMan->_frontBuffer, 0, 614400); @@ -2387,7 +2390,7 @@ int ScriptManager::handleOpcode(const byte *dataP) { _vm->_graphicsMan->fastDisplay(_vm->_globals->_levelSpriteBuf, 513, 163, 7, false); _vm->_objectsMan->setAndPlayAnim(6, 0, 16, true); if ((_vm->getPlatform() != Common::kPlatformWindows) || !_vm->getIsDemo()) { - _vm->_animMan->playAnim("BOMBE3A.ANM", 50, 14, 500); + _vm->_animMan->playAnim("BOMBE3A.ANM", "BOMBE3.ANM", 50, 14, 500); memset(_vm->_graphicsMan->_frontBuffer, 0, 614400); } _vm->_globals->_exitId = 6; @@ -2397,7 +2400,7 @@ int ScriptManager::handleOpcode(const byte *dataP) { // Display bomb plan if (!_vm->getIsDemo()) { memcpy(_vm->_graphicsMan->_oldPalette, _vm->_graphicsMan->_palette, 769); - _vm->_animMan->playAnim2("PLAN.ANM", 50, 10, 800); + _vm->_animMan->playAnim2("PLAN.ANM", "PLAN.ANM", 50, 10, 800); } _vm->_graphicsMan->resetDirtyRects(); break; |