aboutsummaryrefslogtreecommitdiff
path: root/engines/hopkins/script.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/hopkins/script.cpp')
-rw-r--r--engines/hopkins/script.cpp139
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;