diff --git a/engines/trecision/logic.cpp b/engines/trecision/logic.cpp index 9ec4ddbebd1..00f4f80d394 100644 --- a/engines/trecision/logic.cpp +++ b/engines/trecision/logic.cpp @@ -30,7 +30,6 @@ #include "trecision/nl/struct.h" #include "trecision/logic.h" -#include "trecision/graphics.h" #include "trecision/trecision.h" #include "trecision/video.h" @@ -264,10 +263,10 @@ void LogicManager::initScript() { _vm->_scriptFrame[f]._u32Param = oENTRANCE2E; } -void LogicManager::setRoom(uint16 r, bool b) { +void LogicManager::setRoom(uint16 r, bool altRoomFl) { switch (r) { case r21: - if (!b) { + if (!altRoomFl) { read3D("21.3d"); _vm->_room[r21]._flag &= ~OBJFLAG_EXTRA; setPosition(14); @@ -327,7 +326,7 @@ void LogicManager::setRoom(uint16 r, bool b) { } break; case r24: - if (!b) { + if (!altRoomFl) { read3D("24.3d"); _vm->_room[r24]._flag &= ~OBJFLAG_EXTRA; _vm->_obj[oPASSAGE24]._position = 3; @@ -346,7 +345,7 @@ void LogicManager::setRoom(uint16 r, bool b) { break; case r2A: - if (!b) { + if (!altRoomFl) { read3D("2A.3d"); _vm->_room[r2A]._flag &= ~OBJFLAG_EXTRA; _vm->_obj[oDUMMY2A2]._mode |= OBJMODE_OBJSTATUS; @@ -359,7 +358,7 @@ void LogicManager::setRoom(uint16 r, bool b) { } break; case r2B: - if (!b) { + if (!altRoomFl) { read3D("2B.3d"); _vm->_room[r2B]._flag &= ~OBJFLAG_EXTRA; _vm->_obj[oPORTA2B]._mode |= OBJMODE_OBJSTATUS; @@ -372,7 +371,7 @@ void LogicManager::setRoom(uint16 r, bool b) { } break; case r2E: - if (!b) { + if (!altRoomFl) { _vm->_obj[oCATWALKA2E]._nbox = BACKGROUND; _vm->_obj[oCATWALKA2E]._position = 2; _vm->_obj[oCATWALKA2E]._anim = a2E2PRIMAPALLONTANANDO; @@ -400,7 +399,7 @@ void LogicManager::setRoom(uint16 r, bool b) { } break; case r2GV: - if (!b) { + if (!altRoomFl) { _vm->_obj[oVIADOTTO2GV]._position = 7; _vm->_obj[oVIADOTTO2GV]._anim = a2G7ATTRAVERSAPONTICELLO; read3D("2GV.3d"); @@ -415,6 +414,280 @@ void LogicManager::setRoom(uint16 r, bool b) { } } +void LogicManager::endChangeRoom() { + // Specific management of magnetic fields + if ((_vm->_curRoom == r2E) && (_vm->_obj[oPULSANTEADS2D]._mode & OBJMODE_OBJSTATUS)) { + _vm->_animMgr->_animTab[aBKG2E]._flag |= SMKANIM_OFF1; + _vm->_obj[oCAMPO2E]._mode &= ~OBJMODE_OBJSTATUS; + _vm->_obj[oCARTELLOA2E]._mode &= ~OBJMODE_OBJSTATUS; + _vm->_obj[oCARTELLOS2E]._mode |= OBJMODE_OBJSTATUS; + } else if ((_vm->_curRoom == r2E) && (_vm->_obj[oPULSANTEADA2D]._mode & OBJMODE_OBJSTATUS)) { + _vm->_animMgr->_animTab[aBKG2E]._flag &= ~SMKANIM_OFF1; + _vm->_obj[oCAMPO2E]._mode |= OBJMODE_OBJSTATUS; + _vm->_obj[oCARTELLOA2E]._mode |= OBJMODE_OBJSTATUS; + _vm->_obj[oCARTELLOS2E]._mode &= ~OBJMODE_OBJSTATUS; + } + + if ((_vm->_curRoom == r2C) && (_vm->_obj[oPULSANTEACS2D]._mode & OBJMODE_OBJSTATUS)) { + _vm->_animMgr->_animTab[aBKG2C]._flag |= SMKANIM_OFF1; + _vm->_obj[oCAMPO2C]._mode &= ~OBJMODE_OBJSTATUS; + _vm->_obj[oCARTELLOA2C]._mode &= ~OBJMODE_OBJSTATUS; + _vm->_obj[oCARTELLOS2C]._mode |= OBJMODE_OBJSTATUS; + } else if ((_vm->_curRoom == r2C) && (_vm->_obj[oPULSANTEACA2D]._mode & OBJMODE_OBJSTATUS)) { + _vm->_animMgr->_animTab[aBKG2C]._flag &= ~SMKANIM_OFF1; + _vm->_obj[oCAMPO2C]._mode |= OBJMODE_OBJSTATUS; + _vm->_obj[oCARTELLOS2C]._mode &= ~OBJMODE_OBJSTATUS; + _vm->_obj[oCARTELLOA2C]._mode |= OBJMODE_OBJSTATUS; + } + + if ((_vm->_curRoom == r28) && (_vm->_obj[oPULSANTEBBS2D]._mode & OBJMODE_OBJSTATUS)) { + _vm->_animMgr->_animTab[aBKG28]._flag |= SMKANIM_OFF2; + _vm->_obj[oCESPUGLIO28]._anim = a283; + _vm->_obj[oSERPENTETM28]._mode |= OBJMODE_OBJSTATUS; + _vm->_obj[oSERPENTEAM28]._mode |= OBJMODE_OBJSTATUS; + RegenRoom(); + } else if ((_vm->_curRoom == r28) && (_vm->_obj[oPULSANTEBBA2D]._mode & OBJMODE_OBJSTATUS)) { + _vm->_animMgr->_animTab[aBKG28]._flag &= ~SMKANIM_OFF2; + _vm->_obj[oCESPUGLIO28]._anim = a282; + _vm->_obj[oSERPENTETM28]._mode &= ~OBJMODE_OBJSTATUS; + _vm->_obj[oSERPENTEAM28]._mode &= ~OBJMODE_OBJSTATUS; + RegenRoom(); + } + + if ((_vm->_curRoom == r28) && (_vm->_obj[oPULSANTEABS2D]._mode & OBJMODE_OBJSTATUS)) { + _vm->_animMgr->_animTab[aBKG28]._flag |= (SMKANIM_OFF1 | SMKANIM_OFF3); + _vm->_obj[oCAMPO28]._mode &= ~OBJMODE_OBJSTATUS; + _vm->_obj[oCARTELLOA28]._mode &= ~OBJMODE_OBJSTATUS; + _vm->_obj[oCARTELLOS28]._mode |= OBJMODE_OBJSTATUS; + read3D("282.3d"); + } else if ((_vm->_curRoom == r28) && (_vm->_obj[oPULSANTEABA2D]._mode & OBJMODE_OBJSTATUS)) { + _vm->_animMgr->_animTab[aBKG28]._flag &= ~(SMKANIM_OFF1 | SMKANIM_OFF3); + _vm->_obj[oCAMPO28]._mode |= OBJMODE_OBJSTATUS; + _vm->_obj[oCARTELLOA28]._mode |= OBJMODE_OBJSTATUS; + _vm->_obj[oCARTELLOS28]._mode &= ~OBJMODE_OBJSTATUS; + } + // End of specific management for the magnetic fields + + // Actions + if ((_vm->_curRoom == r12) && ((_vm->_oldRoom == r13) || (_vm->_oldRoom == r16))) + StartCharacterAction(a1213ARRIVACONASCENSORE, 0, 0, 0); + else if ((_vm->_curRoom == r16) && ((_vm->_oldRoom == r13) || (_vm->_oldRoom == r12))) + StartCharacterAction(a1617SCENDECONASCENSORE, 0, 0, 0); + else if ((_vm->_curRoom == r13) && (_vm->_oldRoom == r12)) + StartCharacterAction(a1315ARRIVAASCENSOREALTOENTRA, 0, 0, 0); + else if ((_vm->_curRoom == r13) && (_vm->_oldRoom == r16)) + StartCharacterAction(a1314ARRIVAASCENSOREDABASSO, 0, 0, 0); + else if ((_vm->_curRoom == r14) && (_vm->_oldRoom == r13)) + StartCharacterAction(a1414ENTERROOM, 0, 0, 0); + else if ((_vm->_curRoom == r18) && (_vm->_oldRoom == r17) && !(_vm->_room[r18]._flag & OBJFLAG_DONE)) + StartCharacterAction(a186GUARDAPIAZZA, 0, 0, 0); + else if ((_vm->_curRoom == r18) && (_vm->_oldRoom == r19)) + StartCharacterAction(a189ENTRADALCLUB, 0, 0, 0); + else if ((_vm->_curRoom == r1A) && (_vm->_oldRoom == r18) && (_vm->_room[r1A]._flag & OBJFLAG_DONE)) { + StartCharacterAction(a1A5ENTRA, 0, 0, 0); + _vm->_animMgr->_animTab[aBKG1A]._flag |= SMKANIM_OFF1; + } else if ((_vm->_curRoom == r1C) && (_vm->_oldRoom == r1B)) + StartCharacterAction(a1C1ENTRACUNICOLO, 0, 0, 0); + else if ((_vm->_curRoom == r1B) && (_vm->_oldRoom == r1C)) + StartCharacterAction(a1B11ESCETOMBINO, 0, 0, 0); + else if ((_vm->_curRoom == r1D) && (_vm->_oldRoom == r1B) && (_vm->_obj[oDONNA1D]._mode & OBJMODE_OBJSTATUS)) { + StartCharacterAction(a1D1SCENDESCALE, 0, 1, 0); + _vm->_actor->_lim[0] = 60; + _vm->_actor->_lim[2] = 240; + } else if ((_vm->_curRoom == r1D) && (_vm->_oldRoom == r1B) && !(_vm->_obj[oDONNA1D]._mode & OBJMODE_OBJSTATUS)) { + StartCharacterAction(a1D12SCENDESCALA, 0, 1, 0); + _vm->_actor->_lim[0] = 60; + _vm->_actor->_lim[2] = 240; + } else if ((_vm->_curRoom == r1B) && (_vm->_oldRoom == r1D)) + StartCharacterAction(a1B4ESCEBOTOLA, 0, 0, 0); + else if ((_vm->_curRoom == r1B) && (_vm->_oldRoom == r18) && (_vm->_animMgr->_animTab[aBKG1B]._flag & SMKANIM_OFF1)) + StartCharacterAction(a1B12SCAPPATOPO, 0, 0, 0); + else if ((_vm->_curRoom == r24) && (_vm->_oldRoom == r2H)) + StartCharacterAction(a242, 0, 0, 0); + else if ((_vm->_curRoom == r25) && (_vm->_oldRoom == r2A)) + StartCharacterAction(a257, 0, 0, 0); + else if ((_vm->_curRoom == r28) && (_vm->_oldRoom == r27)) + StartCharacterAction(aWALKIN, 0, 0, 0); + else if ((_vm->_curRoom == r29) && (_vm->_oldRoom == r2A)) + StartCharacterAction(a298ESCEBOTOLA, 0, 0, 0); + else if ((_vm->_curRoom == r29L) && (_vm->_oldRoom == r2A)) + StartCharacterAction(a2910ESCEBOTOLA, 0, 0, 0); + else if ((_vm->_curRoom == r2A) && (_vm->_oldRoom == r25)) + StartCharacterAction(aWALKIN, 0, 0, 0); + else if ((_vm->_curRoom == r2A) && ((_vm->_oldRoom == r29) || (_vm->_oldRoom == r29L))) + StartCharacterAction(aWALKIN, 0, 0, 0); + else if ((_vm->_curRoom == r2B) && (_vm->_oldRoom == r2A)) + StartCharacterAction(a2B2ESCEPOZZO, 0, 2, 0); + else if ((_vm->_curRoom == r2H) && (_vm->_oldRoom == r24)) + StartCharacterAction(a2H1ARRIVA, 0, 0, 0); + else if ((_vm->_curRoom == r2E) && (_vm->_oldRoom == r2F)) + StartCharacterAction(a2E5SECONDAPARRIVANDO, 0, 0, 0); + else if ((_vm->_curRoom == r2F) && (_vm->_oldRoom == r2E)) + StartCharacterAction(aWALKIN, 0, 0, 0); + else if ((_vm->_curRoom == r23B) && (_vm->_oldRoom == r21)) + StartCharacterAction(aWALKIN, 0, 0, 0); + else if ((_vm->_curRoom == r23A) && (_vm->_oldRoom == r21) && (_vm->_room[r23A]._flag & OBJFLAG_DONE)) + StartCharacterAction(aWALKIN, 0, 0, 0); + else if ((_vm->_curRoom == r23A) && (_vm->_oldRoom == r21) && (!(_vm->_room[r23A]._flag & OBJFLAG_DONE))) + _vm->_flagShowCharacter = false; + else if ((_vm->_curRoom == r21) && ((_vm->_oldRoom == r23A) || (_vm->_oldRoom == r23B))) + StartCharacterAction(aWALKIN, 0, 0, 0); + else if ((_vm->_curRoom == r2BL) || (_vm->_curRoom == r36F) || (_vm->_curRoom == r41D) || (_vm->_curRoom == r49M) || (_vm->_curRoom == r4CT) || + (_vm->_curRoom == r58T) || (_vm->_curRoom == r58M) || (_vm->_curRoom == r59L) || (_vm->_curRoom == rSYS) || + (_vm->_curRoom == r12CU) || (_vm->_curRoom == r13CU)) { // Screens without inventory + _vm->_flagShowCharacter = false; + _vm->_flagCharacterExists = false; + _vm->_flagInventoryLocked = true; + } else if ((_vm->_curRoom == r31P) || (_vm->_curRoom == r35P)) { // Screens with inventory + _vm->_flagShowCharacter = false; + _vm->_flagCharacterExists = false; + } else if ((_vm->_curRoom == r2F) && (_vm->_oldRoom == r31)) + StartCharacterAction(a2F4ESCEASCENSORE, 0, 0, 0); + else if ((_vm->_curRoom == r31) && (_vm->_oldRoom == r2F)) + StartCharacterAction(a3114ESCEPASSAGGIO, 0, 0, 0); + else if ((_vm->_curRoom == r31) && !(_vm->_room[r31]._flag & OBJFLAG_DONE)) + setPosition(14); + else if ((_vm->_curRoom == r32) && (_vm->_oldRoom == r31)) + StartCharacterAction(a321SALEMONTACARICHI, 0, 0, 0); + else if ((_vm->_curRoom == r33) && (_vm->_oldRoom == r32) && (_vm->_obj[oBRUCIATURA33]._mode & OBJMODE_OBJSTATUS)) + StartCharacterAction(a3311SALESCALE, 0, 0, 0); + else if ((_vm->_curRoom == r33) && (_vm->_oldRoom == r32) && !(_vm->_obj[oBRUCIATURA33]._mode & OBJMODE_OBJSTATUS)) + StartCharacterAction(a3313CHIUDEBOTOLA, 0, 0, 0); + else if ((_vm->_curRoom == r32) && (_vm->_oldRoom == r33)) + StartCharacterAction(a325SCENDESCALE, 0, 0, 0); + else if ((_vm->_curRoom == r36) && (_vm->_oldRoom == r35)) + StartCharacterAction(a361ESCEASCENSORE, 0, 0, 0); + else if ((_vm->_curRoom == r35) && (_vm->_oldRoom == r36)) + StartCharacterAction(a3515ESCEASCENSORE, 0, 0, 0); + else if ((_vm->_curRoom == r44) && (_vm->_oldRoom == r45 || _vm->_oldRoom == r45S) && !(_vm->_inventoryObj[iDISLOCATORE]._flag & OBJFLAG_EXTRA)) + StartCharacterAction(a445, 0, 0, 0); + else if ((_vm->_curRoom == r45 || _vm->_curRoom == r45S) && (_vm->_oldRoom == r44) && !(_vm->_inventoryObj[iDISLOCATORE]._flag & OBJFLAG_EXTRA)) + StartCharacterAction(a457, 0, 0, 0); + else if ((_vm->_curRoom == r46) && (_vm->_oldRoom == r47 || _vm->_oldRoom == r48 || _vm->_oldRoom == r49) && !(_vm->_inventoryObj[iDISLOCATORE]._flag & OBJFLAG_EXTRA)) + StartCharacterAction(aWALKIN, 0, 0, 0); + else if ((_vm->_curRoom == r47) && (_vm->_oldRoom == r46) && !(_vm->_inventoryObj[iDISLOCATORE]._flag & OBJFLAG_EXTRA)) + StartCharacterAction(a476, 0, 0, 0); + else if ((_vm->_curRoom == r48) && (_vm->_oldRoom == r46) && !(_vm->_inventoryObj[iDISLOCATORE]._flag & OBJFLAG_EXTRA)) + StartCharacterAction(a485, 0, 0, 0); + else if ((_vm->_curRoom == r49) && (_vm->_oldRoom == r46) && !(_vm->_inventoryObj[iDISLOCATORE]._flag & OBJFLAG_EXTRA)) + StartCharacterAction(a494, 0, 0, 0); + else if ((_vm->_curRoom == r54) && (_vm->_oldRoom == r53)) { + StartCharacterAction(a5411, 0, 11, 0); + _vm->_inventoryObj[iLASER35]._examine = 1599; + } else if ((_vm->_oldRoom == r41D) && (_vm->_inventoryObj[iDISLOCATORE]._flag & OBJFLAG_EXTRA)) { + setPosition(30); + drawCharacter(CALCPOINTS); + } + + // FullMotion + if ((_vm->_curRoom == r17) && (_vm->_oldRoom == r16)) { + PlayDialog(dF171); + WaitSoundFadEnd(); + } else if ((_vm->_curRoom == r16) && (_vm->_oldRoom == r17)) { + PlayDialog(dF161); + WaitSoundFadEnd(); + _vm->removeIcon(iFOGLIO14); + } else if ((_vm->_curRoom == r21) && (_vm->_oldRoom == r1C)) { + PlayDialog(dF1C1); + WaitSoundFadEnd(); + } else if ((_vm->_curRoom == r23B) && (_vm->_oldRoom == r23A)) { + PlayDialog(dF231); + WaitSoundFadEnd(); + _vm->removeIcon(iMAPPA17); + } else if ((_vm->_curRoom == r29L) && (_vm->_oldRoom == r29)) { + PlayDialog(dF291); + WaitSoundFadEnd(); + } else if ((_vm->_curRoom == r2GV) && (_vm->_oldRoom == r2G)) { + PlayDialog(dF2G2); + WaitSoundFadEnd(); + } else if ((_vm->_curRoom == r31) && (_vm->_oldRoom == r32) && (_vm->_room[r32]._flag & OBJFLAG_EXTRA)) { + PlayDialog(dF321); + _vm->_flagShowCharacter = false; + WaitSoundFadEnd(); + _vm->_room[r32]._flag &= ~OBJFLAG_EXTRA; + } else if ((_vm->_curRoom == r19) && !(_vm->_room[r19]._flag & OBJFLAG_DONE)) { + _vm->playScript(s19EVA); + _vm->_flagNoPaintScreen = false; + _vm->clearText(); + _vm->redrawString(); + WaitSoundFadEnd(); + } + // CHECKME: This check is identical to the 3rd one, thus it's always false + else if ((_vm->_curRoom == r21) && (/*!( _room[_vm->_curRoom]._flag & OBJFLAG_DONE ) || */ (_vm->_oldRoom == r1C))) { + setPosition(10); + TendIn(); + _vm->_flagNoPaintScreen = false; + _vm->clearText(); + _vm->redrawString(); + } else if ((_vm->_curRoom == r46) && (_vm->_oldRoom == r43) && !(_vm->_inventoryObj[iDISLOCATORE]._flag & OBJFLAG_EXTRA)) { + PlayDialog(dF431); + WaitSoundFadEnd(); + } else if ((_vm->_curRoom == r45S) && (_vm->_oldRoom == r45) && !(_vm->_inventoryObj[iDISLOCATORE]._flag & OBJFLAG_EXTRA)) { + PlayDialog(dF451); + WaitSoundFadEnd(); + } else if ((_vm->_curRoom == r4A) && (_vm->_oldRoom == r49) && !(_vm->_inventoryObj[iDISLOCATORE]._flag & OBJFLAG_EXTRA)) { + PlayDialog(dF491); + WaitSoundFadEnd(); + } else if ((_vm->_curRoom == r4A) && (_vm->_oldRoom == r41D) && (_vm->_inventoryObj[iDISLOCATORE]._flag & OBJFLAG_EXTRA) && (_vm->_obj[ocHELLEN4A]._mode & OBJMODE_OBJSTATUS)) { + WaitSoundFadEnd(); + PlayDialog(dC4A1); + } else if ((_vm->_curRoom == r4P) && (_vm->_oldRoom == r4O) && !(_vm->_room[r4P]._flag & OBJFLAG_DONE)) { + PlayDialog(dF4PI); + _vm->_flagShowCharacter = false; + WaitSoundFadEnd(); + } else if ((_vm->_curRoom == r51) && (_vm->_oldRoom == r4CT)) { + PlayDialog(dF4C1); + _vm->_flagShowCharacter = false; + WaitSoundFadEnd(); + } else if ((_vm->_curRoom == r1A) && (_vm->_oldRoom == r18)) { + if (!(_vm->_room[r1A]._flag & OBJFLAG_DONE)) { + PlayDialog(dF1A1); + WaitSoundFadEnd(); + _vm->_obj[oTOPO1C]._flag |= OBJFLAG_TAKE; + _vm->_obj[oTOPO1C]._anim = a1C3RACCOGLIETOPO; + } else { + TendIn(); + _vm->_flagNoPaintScreen = false; + _vm->redrawString(); + } + } else { + TendIn(); + _vm->_flagNoPaintScreen = false; + _vm->clearText(); + _vm->redrawString(); + } + + // Sentence + if ((_vm->_curRoom == r17) && (_vm->_oldRoom == r18) && !(_vm->_room[r17]._flag & OBJFLAG_DONE) && (_vm->_obj[oRETE17]._mode & OBJMODE_OBJSTATUS)) + CharacterSay(189); + + if (((_vm->_curRoom == r12CU) || (_vm->_curRoom == r13CU)) && _vm->_closeUpObj && _vm->_obj[_vm->_closeUpObj]._examine) + CharacterSay(_vm->_obj[_vm->_closeUpObj]._examine); + else if ((_vm->_curRoom == r23A) && (_vm->_oldRoom == r21) && !(_vm->_room[r23A]._flag & OBJFLAG_DONE)) { + _vm->_flagShowCharacter = true; + StartCharacterAction(aWALKIN, 0, 0, 361); + } else if ((_vm->_curRoom == r24) && !(_vm->_room[r24]._flag & OBJFLAG_DONE)) + CharacterSay(381); + else if ((_vm->_curRoom == r2G) && !(_vm->_room[r2G]._flag & OBJFLAG_DONE)) + CharacterSay(688); + else if ((_vm->_curRoom == r4C) && (_vm->_oldRoom == r4CT)) + CharacterSay(1163); + else if ((_vm->_curRoom == r41) && (_vm->_oldRoom == r36) && !(_vm->_room[r41]._flag & OBJFLAG_DONE)) + CharacterSay(900); + else if ((_vm->_curRoom == r58) && (_vm->_obj[oGUARDIA58]._mode & OBJMODE_OBJSTATUS) && (_vm->_obj[oGUARDIA58]._anim)) { + _vm->_curObj = oGUARDIA58; + doEvent(MC_MOUSE, ME_MRIGHT, MP_DEFAULT, 372, 335 + TOP, 0, oGUARDIA58); + } else if ((_vm->_curRoom == r59L)) + CharacterSay(1394); + else if ((_vm->_curRoom == r58) && (_vm->_oldRoom == r58T)) + CharacterSay(1368); + else if ((_vm->_curRoom == r5A) && !(_vm->_room[r5A]._flag & OBJFLAG_DONE)) + CharacterSay(1408); + else if ((_vm->_curRoom == rSYS) && (_vm->_oldRoom == rSYS)) + _vm->_logicMgr->DoSys(o00LOAD); + _vm->_inventoryObj[iDISLOCATORE]._flag &= ~OBJFLAG_EXTRA; +} + void LogicManager::initInventory() { _vm->_inventorySize = 0; _vm->_inventory[_vm->_inventorySize++] = iBANCONOTE; @@ -3600,7 +3873,7 @@ void LogicManager::doMouseLeftRight() { if (GAMEAREA(_vm->_curMessage->_u16Param2) && !_vm->_flagUseWithStarted && (_vm->_curObj != oSNAKEU52)) { StartCharacterAction(a526, 0, 1, 0); _vm->_obj[oSCAVO51]._anim = a516; - memcpy(&_vm->_snake52, _vm->_curMessage, sizeof(_vm->_snake52)); + _vm->_snake52.set(_vm->_curMessage); return; } } diff --git a/engines/trecision/logic.h b/engines/trecision/logic.h index c0a334abd4a..a43aff687b5 100644 --- a/engines/trecision/logic.h +++ b/engines/trecision/logic.h @@ -61,7 +61,9 @@ public: void initScript(); void initInventory(); - void setRoom(uint16 r, bool b); + void setRoom(uint16 r, bool altRoomFl); + void endChangeRoom(); + void useInventoryWithInventory(bool *updateInv, bool *printSentence); void useInventoryWithScreen(bool *updateInv, bool *printSentence); bool useScreenWithScreen(); diff --git a/engines/trecision/nl/classes.cpp b/engines/trecision/nl/classes.cpp index a1c3b051771..ce7c5a2cd9a 100644 --- a/engines/trecision/nl/classes.cpp +++ b/engines/trecision/nl/classes.cpp @@ -358,7 +358,7 @@ void doSystem() { if (g_vm->_curMessage->_u16Param2) StartCharacterAction(g_vm->_curMessage->_u16Param2, 0, 0, 0); - AtEndChangeRoom(); + g_vm->_logicMgr->endChangeRoom(); g_vm->_room[g_vm->_curRoom]._flag |= OBJFLAG_DONE; // Visited drawCharacter(CALCPOINTS); // for right _actorPos entrance diff --git a/engines/trecision/nl/do.cpp b/engines/trecision/nl/do.cpp index 529a1666b74..9c3b7dae086 100644 --- a/engines/trecision/nl/do.cpp +++ b/engines/trecision/nl/do.cpp @@ -341,291 +341,19 @@ bool AtMouseClick(uint16 curObj) { return retVal; } -/* -----------------26/11/97 10.37------------------- - * AtEndChangeRoom - * --------------------------------------------------*/ -void AtEndChangeRoom() { - // Specific management of magnetic fields - if ((g_vm->_curRoom == r2E) && (g_vm->_obj[oPULSANTEADS2D]._mode & OBJMODE_OBJSTATUS)) { - g_vm->_animMgr->_animTab[aBKG2E]._flag |= SMKANIM_OFF1; - g_vm->_obj[oCAMPO2E]._mode &= ~OBJMODE_OBJSTATUS; - g_vm->_obj[oCARTELLOA2E]._mode &= ~OBJMODE_OBJSTATUS; - g_vm->_obj[oCARTELLOS2E]._mode |= OBJMODE_OBJSTATUS; - } else if ((g_vm->_curRoom == r2E) && (g_vm->_obj[oPULSANTEADA2D]._mode & OBJMODE_OBJSTATUS)) { - g_vm->_animMgr->_animTab[aBKG2E]._flag &= ~SMKANIM_OFF1; - g_vm->_obj[oCAMPO2E]._mode |= OBJMODE_OBJSTATUS; - g_vm->_obj[oCARTELLOA2E]._mode |= OBJMODE_OBJSTATUS; - g_vm->_obj[oCARTELLOS2E]._mode &= ~OBJMODE_OBJSTATUS; - } - if ((g_vm->_curRoom == r2C) && (g_vm->_obj[oPULSANTEACS2D]._mode & OBJMODE_OBJSTATUS)) { - g_vm->_animMgr->_animTab[aBKG2C]._flag |= SMKANIM_OFF1; - g_vm->_obj[oCAMPO2C]._mode &= ~OBJMODE_OBJSTATUS; - g_vm->_obj[oCARTELLOA2C]._mode &= ~OBJMODE_OBJSTATUS; - g_vm->_obj[oCARTELLOS2C]._mode |= OBJMODE_OBJSTATUS; - } else if ((g_vm->_curRoom == r2C) && (g_vm->_obj[oPULSANTEACA2D]._mode & OBJMODE_OBJSTATUS)) { - g_vm->_animMgr->_animTab[aBKG2C]._flag &= ~SMKANIM_OFF1; - g_vm->_obj[oCAMPO2C]._mode |= OBJMODE_OBJSTATUS; - g_vm->_obj[oCARTELLOS2C]._mode &= ~OBJMODE_OBJSTATUS; - g_vm->_obj[oCARTELLOA2C]._mode |= OBJMODE_OBJSTATUS; - } - if ((g_vm->_curRoom == r28) && (g_vm->_obj[oPULSANTEBBS2D]._mode & OBJMODE_OBJSTATUS)) { - g_vm->_animMgr->_animTab[aBKG28]._flag |= SMKANIM_OFF2; - g_vm->_obj[oCESPUGLIO28]._anim = a283; - g_vm->_obj[oSERPENTETM28]._mode |= OBJMODE_OBJSTATUS; - g_vm->_obj[oSERPENTEAM28]._mode |= OBJMODE_OBJSTATUS; - RegenRoom(); - } else if ((g_vm->_curRoom == r28) && (g_vm->_obj[oPULSANTEBBA2D]._mode & OBJMODE_OBJSTATUS)) { - g_vm->_animMgr->_animTab[aBKG28]._flag &= ~SMKANIM_OFF2; - g_vm->_obj[oCESPUGLIO28]._anim = a282; - g_vm->_obj[oSERPENTETM28]._mode &= ~OBJMODE_OBJSTATUS; - g_vm->_obj[oSERPENTEAM28]._mode &= ~OBJMODE_OBJSTATUS; - RegenRoom(); - } - if ((g_vm->_curRoom == r28) && (g_vm->_obj[oPULSANTEABS2D]._mode & OBJMODE_OBJSTATUS)) { - g_vm->_animMgr->_animTab[aBKG28]._flag |= (SMKANIM_OFF1 | SMKANIM_OFF3); - g_vm->_obj[oCAMPO28]._mode &= ~OBJMODE_OBJSTATUS; - g_vm->_obj[oCARTELLOA28]._mode &= ~OBJMODE_OBJSTATUS; - g_vm->_obj[oCARTELLOS28]._mode |= OBJMODE_OBJSTATUS; - read3D("282.3d"); - } else if ((g_vm->_curRoom == r28) && (g_vm->_obj[oPULSANTEABA2D]._mode & OBJMODE_OBJSTATUS)) { - g_vm->_animMgr->_animTab[aBKG28]._flag &= ~(SMKANIM_OFF1 | SMKANIM_OFF3); - g_vm->_obj[oCAMPO28]._mode |= OBJMODE_OBJSTATUS; - g_vm->_obj[oCARTELLOA28]._mode |= OBJMODE_OBJSTATUS; - g_vm->_obj[oCARTELLOS28]._mode &= ~OBJMODE_OBJSTATUS; - } - // End of specific management for the magnetic fields - - // Actions - if ((g_vm->_curRoom == r12) && ((g_vm->_oldRoom == r13) || (g_vm->_oldRoom == r16))) - StartCharacterAction(a1213ARRIVACONASCENSORE, 0, 0, 0); - else if ((g_vm->_curRoom == r16) && ((g_vm->_oldRoom == r13) || (g_vm->_oldRoom == r12))) - StartCharacterAction(a1617SCENDECONASCENSORE, 0, 0, 0); - else if ((g_vm->_curRoom == r13) && (g_vm->_oldRoom == r12)) - StartCharacterAction(a1315ARRIVAASCENSOREALTOENTRA, 0, 0, 0); - else if ((g_vm->_curRoom == r13) && (g_vm->_oldRoom == r16)) - StartCharacterAction(a1314ARRIVAASCENSOREDABASSO, 0, 0, 0); - else if ((g_vm->_curRoom == r14) && (g_vm->_oldRoom == r13)) - StartCharacterAction(a1414ENTERROOM, 0, 0, 0); - else if ((g_vm->_curRoom == r18) && (g_vm->_oldRoom == r17) && !(g_vm->_room[r18]._flag & OBJFLAG_DONE)) - StartCharacterAction(a186GUARDAPIAZZA, 0, 0, 0); - else if ((g_vm->_curRoom == r18) && (g_vm->_oldRoom == r19)) - StartCharacterAction(a189ENTRADALCLUB, 0, 0, 0); - else if ((g_vm->_curRoom == r1A) && (g_vm->_oldRoom == r18) && (g_vm->_room[r1A]._flag & OBJFLAG_DONE)) { - StartCharacterAction(a1A5ENTRA, 0, 0, 0); - g_vm->_animMgr->_animTab[aBKG1A]._flag |= SMKANIM_OFF1; - } else if ((g_vm->_curRoom == r1C) && (g_vm->_oldRoom == r1B)) - StartCharacterAction(a1C1ENTRACUNICOLO, 0, 0, 0); - else if ((g_vm->_curRoom == r1B) && (g_vm->_oldRoom == r1C)) - StartCharacterAction(a1B11ESCETOMBINO, 0, 0, 0); - else if ((g_vm->_curRoom == r1D) && (g_vm->_oldRoom == r1B) && (g_vm->_obj[oDONNA1D]._mode & OBJMODE_OBJSTATUS)) { - StartCharacterAction(a1D1SCENDESCALE, 0, 1, 0); - g_vm->_actor->_lim[0] = 60; - g_vm->_actor->_lim[2] = 240; - } else if ((g_vm->_curRoom == r1D) && (g_vm->_oldRoom == r1B) && !(g_vm->_obj[oDONNA1D]._mode & OBJMODE_OBJSTATUS)) { - StartCharacterAction(a1D12SCENDESCALA, 0, 1, 0); - g_vm->_actor->_lim[0] = 60; - g_vm->_actor->_lim[2] = 240; - } else if ((g_vm->_curRoom == r1B) && (g_vm->_oldRoom == r1D)) - StartCharacterAction(a1B4ESCEBOTOLA, 0, 0, 0); - else if ((g_vm->_curRoom == r1B) && (g_vm->_oldRoom == r18) && (g_vm->_animMgr->_animTab[aBKG1B]._flag & SMKANIM_OFF1)) - StartCharacterAction(a1B12SCAPPATOPO, 0, 0, 0); - else if ((g_vm->_curRoom == r24) && (g_vm->_oldRoom == r2H)) - StartCharacterAction(a242, 0, 0, 0); - else if ((g_vm->_curRoom == r25) && (g_vm->_oldRoom == r2A)) - StartCharacterAction(a257, 0, 0, 0); - else if ((g_vm->_curRoom == r28) && (g_vm->_oldRoom == r27)) - StartCharacterAction(aWALKIN, 0, 0, 0); - else if ((g_vm->_curRoom == r29) && (g_vm->_oldRoom == r2A)) - StartCharacterAction(a298ESCEBOTOLA, 0, 0, 0); - else if ((g_vm->_curRoom == r29L) && (g_vm->_oldRoom == r2A)) - StartCharacterAction(a2910ESCEBOTOLA, 0, 0, 0); - else if ((g_vm->_curRoom == r2A) && (g_vm->_oldRoom == r25)) - StartCharacterAction(aWALKIN, 0, 0, 0); - else if ((g_vm->_curRoom == r2A) && ((g_vm->_oldRoom == r29) || (g_vm->_oldRoom == r29L))) - StartCharacterAction(aWALKIN, 0, 0, 0); - else if ((g_vm->_curRoom == r2B) && (g_vm->_oldRoom == r2A)) - StartCharacterAction(a2B2ESCEPOZZO, 0, 2, 0); - else if ((g_vm->_curRoom == r2H) && (g_vm->_oldRoom == r24)) - StartCharacterAction(a2H1ARRIVA, 0, 0, 0); - else if ((g_vm->_curRoom == r2E) && (g_vm->_oldRoom == r2F)) - StartCharacterAction(a2E5SECONDAPARRIVANDO, 0, 0, 0); - else if ((g_vm->_curRoom == r2F) && (g_vm->_oldRoom == r2E)) - StartCharacterAction(aWALKIN, 0, 0, 0); - else if ((g_vm->_curRoom == r23B) && (g_vm->_oldRoom == r21)) - StartCharacterAction(aWALKIN, 0, 0, 0); - else if ((g_vm->_curRoom == r23A) && (g_vm->_oldRoom == r21) && (g_vm->_room[r23A]._flag & OBJFLAG_DONE)) - StartCharacterAction(aWALKIN, 0, 0, 0); - else if ((g_vm->_curRoom == r23A) && (g_vm->_oldRoom == r21) && (!(g_vm->_room[r23A]._flag & OBJFLAG_DONE))) - g_vm->_flagShowCharacter = false; - else if ((g_vm->_curRoom == r21) && ((g_vm->_oldRoom == r23A) || (g_vm->_oldRoom == r23B))) - StartCharacterAction(aWALKIN, 0, 0, 0); - else if ((g_vm->_curRoom == r2BL) || (g_vm->_curRoom == r36F) || (g_vm->_curRoom == r41D) || (g_vm->_curRoom == r49M) || (g_vm->_curRoom == r4CT) || - (g_vm->_curRoom == r58T) || (g_vm->_curRoom == r58M) || (g_vm->_curRoom == r59L) || (g_vm->_curRoom == rSYS) || - (g_vm->_curRoom == r12CU) || (g_vm->_curRoom == r13CU)) { // Screens without inventory - g_vm->_flagShowCharacter = false; - g_vm->_flagCharacterExists = false; - g_vm->_flagInventoryLocked = true; - } else if ((g_vm->_curRoom == r31P) || (g_vm->_curRoom == r35P)) { // Screens with inventory - g_vm->_flagShowCharacter = false; - g_vm->_flagCharacterExists = false; - } else if ((g_vm->_curRoom == r2F) && (g_vm->_oldRoom == r31)) - StartCharacterAction(a2F4ESCEASCENSORE, 0, 0, 0); - else if ((g_vm->_curRoom == r31) && (g_vm->_oldRoom == r2F)) - StartCharacterAction(a3114ESCEPASSAGGIO, 0, 0, 0); - else if ((g_vm->_curRoom == r31) && !(g_vm->_room[r31]._flag & OBJFLAG_DONE)) - setPosition(14); - else if ((g_vm->_curRoom == r32) && (g_vm->_oldRoom == r31)) - StartCharacterAction(a321SALEMONTACARICHI, 0, 0, 0); - else if ((g_vm->_curRoom == r33) && (g_vm->_oldRoom == r32) && (g_vm->_obj[oBRUCIATURA33]._mode & OBJMODE_OBJSTATUS)) - StartCharacterAction(a3311SALESCALE, 0, 0, 0); - else if ((g_vm->_curRoom == r33) && (g_vm->_oldRoom == r32) && !(g_vm->_obj[oBRUCIATURA33]._mode & OBJMODE_OBJSTATUS)) - StartCharacterAction(a3313CHIUDEBOTOLA, 0, 0, 0); - else if ((g_vm->_curRoom == r32) && (g_vm->_oldRoom == r33)) - StartCharacterAction(a325SCENDESCALE, 0, 0, 0); - else if ((g_vm->_curRoom == r36) && (g_vm->_oldRoom == r35)) - StartCharacterAction(a361ESCEASCENSORE, 0, 0, 0); - else if ((g_vm->_curRoom == r35) && (g_vm->_oldRoom == r36)) - StartCharacterAction(a3515ESCEASCENSORE, 0, 0, 0); - else if ((g_vm->_curRoom == r44) && (g_vm->_oldRoom == r45 || g_vm->_oldRoom == r45S) && !(g_vm->_inventoryObj[iDISLOCATORE]._flag & OBJFLAG_EXTRA)) - StartCharacterAction(a445, 0, 0, 0); - else if ((g_vm->_curRoom == r45 || g_vm->_curRoom == r45S) && (g_vm->_oldRoom == r44) && !(g_vm->_inventoryObj[iDISLOCATORE]._flag & OBJFLAG_EXTRA)) - StartCharacterAction(a457, 0, 0, 0); - else if ((g_vm->_curRoom == r46) && (g_vm->_oldRoom == r47 || g_vm->_oldRoom == r48 || g_vm->_oldRoom == r49) && !(g_vm->_inventoryObj[iDISLOCATORE]._flag & OBJFLAG_EXTRA)) - StartCharacterAction(aWALKIN, 0, 0, 0); - else if ((g_vm->_curRoom == r47) && (g_vm->_oldRoom == r46) && !(g_vm->_inventoryObj[iDISLOCATORE]._flag & OBJFLAG_EXTRA)) - StartCharacterAction(a476, 0, 0, 0); - else if ((g_vm->_curRoom == r48) && (g_vm->_oldRoom == r46) && !(g_vm->_inventoryObj[iDISLOCATORE]._flag & OBJFLAG_EXTRA)) - StartCharacterAction(a485, 0, 0, 0); - else if ((g_vm->_curRoom == r49) && (g_vm->_oldRoom == r46) && !(g_vm->_inventoryObj[iDISLOCATORE]._flag & OBJFLAG_EXTRA)) - StartCharacterAction(a494, 0, 0, 0); - else if ((g_vm->_curRoom == r54) && (g_vm->_oldRoom == r53)) { - StartCharacterAction(a5411, 0, 11, 0); - g_vm->_inventoryObj[iLASER35]._examine = 1599; - } else if ((g_vm->_oldRoom == r41D) && (g_vm->_inventoryObj[iDISLOCATORE]._flag & OBJFLAG_EXTRA)) { - setPosition(30); - drawCharacter(CALCPOINTS); - } - - // FullMotion - if ((g_vm->_curRoom == r17) && (g_vm->_oldRoom == r16)) { - PlayDialog(dF171); - WaitSoundFadEnd(); - } else if ((g_vm->_curRoom == r16) && (g_vm->_oldRoom == r17)) { - PlayDialog(dF161); - WaitSoundFadEnd(); - g_vm->removeIcon(iFOGLIO14); - } else if ((g_vm->_curRoom == r21) && (g_vm->_oldRoom == r1C)) { - PlayDialog(dF1C1); - WaitSoundFadEnd(); - } else if ((g_vm->_curRoom == r23B) && (g_vm->_oldRoom == r23A)) { - PlayDialog(dF231); - WaitSoundFadEnd(); - g_vm->removeIcon(iMAPPA17); - } else if ((g_vm->_curRoom == r29L) && (g_vm->_oldRoom == r29)) { - PlayDialog(dF291); - WaitSoundFadEnd(); - } else if ((g_vm->_curRoom == r2GV) && (g_vm->_oldRoom == r2G)) { - PlayDialog(dF2G2); - WaitSoundFadEnd(); - } else if ((g_vm->_curRoom == r31) && (g_vm->_oldRoom == r32) && (g_vm->_room[r32]._flag & OBJFLAG_EXTRA)) { - PlayDialog(dF321); - g_vm->_flagShowCharacter = false; - WaitSoundFadEnd(); - g_vm->_room[r32]._flag &= ~OBJFLAG_EXTRA; - } else if ((g_vm->_curRoom == r19) && !(g_vm->_room[r19]._flag & OBJFLAG_DONE)) { - g_vm->playScript(s19EVA); - g_vm->_flagNoPaintScreen = false; - g_vm->clearText(); - g_vm->redrawString(); - WaitSoundFadEnd(); - } - // CHECKME: This check is identical to the 3rd one, thus it's always false - else if ((g_vm->_curRoom == r21) && (/*!( _room[g_vm->_curRoom]._flag & OBJFLAG_DONE ) || */ (g_vm->_oldRoom == r1C))) { - setPosition(10); - TendIn(); - g_vm->_flagNoPaintScreen = false; - g_vm->clearText(); - g_vm->redrawString(); - } else if ((g_vm->_curRoom == r46) && (g_vm->_oldRoom == r43) && !(g_vm->_inventoryObj[iDISLOCATORE]._flag & OBJFLAG_EXTRA)) { - PlayDialog(dF431); - WaitSoundFadEnd(); - } else if ((g_vm->_curRoom == r45S) && (g_vm->_oldRoom == r45) && !(g_vm->_inventoryObj[iDISLOCATORE]._flag & OBJFLAG_EXTRA)) { - PlayDialog(dF451); - WaitSoundFadEnd(); - } else if ((g_vm->_curRoom == r4A) && (g_vm->_oldRoom == r49) && !(g_vm->_inventoryObj[iDISLOCATORE]._flag & OBJFLAG_EXTRA)) { - PlayDialog(dF491); - WaitSoundFadEnd(); - } else if ((g_vm->_curRoom == r4A) && (g_vm->_oldRoom == r41D) && (g_vm->_inventoryObj[iDISLOCATORE]._flag & OBJFLAG_EXTRA) && (g_vm->_obj[ocHELLEN4A]._mode & OBJMODE_OBJSTATUS)) { - WaitSoundFadEnd(); - PlayDialog(dC4A1); - } else if ((g_vm->_curRoom == r4P) && (g_vm->_oldRoom == r4O) && !(g_vm->_room[r4P]._flag & OBJFLAG_DONE)) { - PlayDialog(dF4PI); - g_vm->_flagShowCharacter = false; - WaitSoundFadEnd(); - } else if ((g_vm->_curRoom == r51) && (g_vm->_oldRoom == r4CT)) { - PlayDialog(dF4C1); - g_vm->_flagShowCharacter = false; - WaitSoundFadEnd(); - } else if ((g_vm->_curRoom == r1A) && (g_vm->_oldRoom == r18)) { - if (!(g_vm->_room[r1A]._flag & OBJFLAG_DONE)) { - PlayDialog(dF1A1); - WaitSoundFadEnd(); - g_vm->_obj[oTOPO1C]._flag |= OBJFLAG_TAKE; - g_vm->_obj[oTOPO1C]._anim = a1C3RACCOGLIETOPO; - } else { - TendIn(); - g_vm->_flagNoPaintScreen = false; - g_vm->redrawString(); - } - } else { - TendIn(); - g_vm->_flagNoPaintScreen = false; - g_vm->clearText(); - g_vm->redrawString(); - } - -// Sentence - if ((g_vm->_curRoom == r17) && (g_vm->_oldRoom == r18) && !(g_vm->_room[r17]._flag & OBJFLAG_DONE) && (g_vm->_obj[oRETE17]._mode & OBJMODE_OBJSTATUS)) - CharacterSay(189); - if (((g_vm->_curRoom == r12CU) || (g_vm->_curRoom == r13CU)) && g_vm->_closeUpObj && g_vm->_obj[g_vm->_closeUpObj]._examine) - CharacterSay(g_vm->_obj[g_vm->_closeUpObj]._examine); - else if ((g_vm->_curRoom == r23A) && (g_vm->_oldRoom == r21) && !(g_vm->_room[r23A]._flag & OBJFLAG_DONE)) { - g_vm->_flagShowCharacter = true; - StartCharacterAction(aWALKIN, 0, 0, 361); - } else if ((g_vm->_curRoom == r24) && !(g_vm->_room[r24]._flag & OBJFLAG_DONE)) - CharacterSay(381); - else if ((g_vm->_curRoom == r2G) && !(g_vm->_room[r2G]._flag & OBJFLAG_DONE)) - CharacterSay(688); - else if ((g_vm->_curRoom == r4C) && (g_vm->_oldRoom == r4CT)) - CharacterSay(1163); - else if ((g_vm->_curRoom == r41) && (g_vm->_oldRoom == r36) && !(g_vm->_room[r41]._flag & OBJFLAG_DONE)) - CharacterSay(900); - else if ((g_vm->_curRoom == r58) && (g_vm->_obj[oGUARDIA58]._mode & OBJMODE_OBJSTATUS) && (g_vm->_obj[oGUARDIA58]._anim)) { - g_vm->_curObj = oGUARDIA58; - doEvent(MC_MOUSE, ME_MRIGHT, MP_DEFAULT, 372, 335 + TOP, 0, oGUARDIA58); - } else if ((g_vm->_curRoom == r59L)) - CharacterSay(1394); - else if ((g_vm->_curRoom == r58) && (g_vm->_oldRoom == r58T)) - CharacterSay(1368); - else if ((g_vm->_curRoom == r5A) && !(g_vm->_room[r5A]._flag & OBJFLAG_DONE)) - CharacterSay(1408); - else if ((g_vm->_curRoom == rSYS) && (g_vm->_oldRoom == rSYS)) - g_vm->_logicMgr->DoSys(o00LOAD); - g_vm->_inventoryObj[iDISLOCATORE]._flag &= ~OBJFLAG_EXTRA; -} - /* -----------------26/11/97 10.38------------------- * GestioneATFrame * --------------------------------------------------*/ #define ATF_WAITTEXT 1 static struct ATFHandle { - int16 curframe, lastframe; - uint16 object; - uint16 status; - SAnim *curanim; -} // 0->character 1->background 2->icon -AnimType[3] = { {true}, {true}, {true} }; + int16 _curFrame; + int16 _lastFrame; + uint16 _object; + uint16 _status; + SAnim *_curAnim; +} +AnimType[3] = { {1}, {1}, {1} }; void ExecuteAtFrameDoit(ATFHandle *h, int doit, int obj) { switch (doit) { @@ -742,12 +470,14 @@ void ExecuteAtFrameDoit(ATFHandle *h, int doit, int obj) { doEvent(MC_SYSTEM, ME_QUIT, MP_SYSTEM, 0, 0, 0, 0); break; case fSTOP2TXT: - h->status |= ATF_WAITTEXT; + h->_status |= ATF_WAITTEXT; // Sets a flag that is always cleared when you finish speaking // if the flag is cleared the anim no longer plays // (to be done in the smacker player) // also the counters in AtFrameNext stops break; + default: + break; } } @@ -756,92 +486,98 @@ void ProcessAtFrame(ATFHandle *h, int type, int atf) { switch (type) { case ATFTEXT: - CharacterTalkInAction(h->curanim->_atFrame[atf]._index); + CharacterTalkInAction(h->_curAnim->_atFrame[atf]._index); break; case ATFTEXTACT: - CharacterTalkInAction(g_vm->_obj[h->object]._action); + CharacterTalkInAction(g_vm->_obj[h->_object]._action); break; case ATFTEXTEX: - CharacterTalkInAction(g_vm->_obj[h->object]._examine); + CharacterTalkInAction(g_vm->_obj[h->_object]._examine); break; case ATFCLR: - g_vm->_obj[h->curanim->_atFrame[atf]._index]._mode &= ~OBJMODE_OBJSTATUS; + g_vm->_obj[h->_curAnim->_atFrame[atf]._index]._mode &= ~OBJMODE_OBJSTATUS; RegenRoom(); break; case ATFCLRI: - g_vm->removeIcon(h->curanim->_atFrame[atf]._index); + g_vm->removeIcon(h->_curAnim->_atFrame[atf]._index); break; case ATFCEX: - g_vm->_obj[h->object]._examine = h->curanim->_atFrame[atf]._index; + g_vm->_obj[h->_object]._examine = h->_curAnim->_atFrame[atf]._index; break; case ATFCACT: - g_vm->_obj[h->object]._action = h->curanim->_atFrame[atf]._index; + g_vm->_obj[h->_object]._action = h->_curAnim->_atFrame[atf]._index; break; case ATFSET: - g_vm->_obj[h->curanim->_atFrame[atf]._index]._mode |= OBJMODE_OBJSTATUS; + g_vm->_obj[h->_curAnim->_atFrame[atf]._index]._mode |= OBJMODE_OBJSTATUS; RegenRoom(); break; case ATFSETI: - g_vm->addIcon(h->curanim->_atFrame[atf]._index); + g_vm->addIcon(h->_curAnim->_atFrame[atf]._index); break; case ATFDO: - ExecuteAtFrameDoit(h, h->curanim->_atFrame[atf]._index, h->object); + ExecuteAtFrameDoit(h, h->_curAnim->_atFrame[atf]._index, h->_object); break; case ATFROOM: - doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, h->curanim->_atFrame[atf]._index, 0, 0, h->object); + doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, h->_curAnim->_atFrame[atf]._index, 0, 0, h->_object); break; case ATFSETPOS: - setPosition(h->curanim->_atFrame[atf]._index); + setPosition(h->_curAnim->_atFrame[atf]._index); break; case ATFDIALOG: - PlayDialog(h->curanim->_atFrame[atf]._index); + PlayDialog(h->_curAnim->_atFrame[atf]._index); break; case ATFCOBJANIM: - g_vm->_obj[h->object]._anim = h->curanim->_atFrame[atf]._index; + g_vm->_obj[h->_object]._anim = h->_curAnim->_atFrame[atf]._index; RegenRoom(); break; case ATFCOBJBOX: - g_vm->_obj[h->object]._nbox = h->curanim->_atFrame[atf]._index; + g_vm->_obj[h->_object]._nbox = h->_curAnim->_atFrame[atf]._index; RegenRoom(); break; case ATFCOBJPOS: - g_vm->_obj[h->object]._position = h->curanim->_atFrame[atf]._index; + g_vm->_obj[h->_object]._position = h->_curAnim->_atFrame[atf]._index; RegenRoom(); break; case ATFSETFORE: - g_vm->_obj[h->curanim->_atFrame[atf]._index]._nbox = FOREGROUND; + g_vm->_obj[h->_curAnim->_atFrame[atf]._index]._nbox = FOREGROUND; RegenRoom(); break; case ATFSETBACK: - g_vm->_obj[h->curanim->_atFrame[atf]._index]._nbox = BACKGROUND; + g_vm->_obj[h->_curAnim->_atFrame[atf]._index]._nbox = BACKGROUND; RegenRoom(); break; case ATFSWITCH: - g_vm->_obj[h->curanim->_atFrame[atf]._index]._mode ^= OBJMODE_OBJSTATUS; + g_vm->_obj[h->_curAnim->_atFrame[atf]._index]._mode ^= OBJMODE_OBJSTATUS; RegenRoom(); break; case ATFSETROOMT: - g_vm->setRoom(h->curanim->_atFrame[atf]._index, true); + g_vm->setRoom(h->_curAnim->_atFrame[atf]._index, true); break; case ATFSETROOMF: - g_vm->setRoom(h->curanim->_atFrame[atf]._index, false); + g_vm->setRoom(h->_curAnim->_atFrame[atf]._index, false); break; case ATFREADBOX: - if (h->curanim->_atFrame[atf]._index == 1) { + switch (h->_curAnim->_atFrame[atf]._index) { + case 1: { Common::String filename = Common::String::format("%s.3d", g_vm->_room[g_vm->_curRoom]._baseName); read3D(filename); g_vm->_room[g_vm->_curRoom]._flag &= ~OBJFLAG_EXTRA; - } else if (h->curanim->_atFrame[atf]._index == 2) { + } + break; + case 2: { Common::String filename = Common::String::format("%s2.3d", g_vm->_room[g_vm->_curRoom]._baseName); read3D(filename); g_vm->_room[g_vm->_curRoom]._flag |= OBJFLAG_EXTRA; - if (g_vm->_curRoom == r37) { + if (g_vm->_curRoom == r37) g_vm->_animMgr->smkVolumePan(0, 1, 1); } + break; + default: + break; } break; case ATFONESPEAK: - switch (h->curanim->_atFrame[atf]._index) { + switch (h->_curAnim->_atFrame[atf]._index) { case 1: if (g_vm->_room[r1D]._flag & OBJFLAG_EXTRA) break; @@ -854,13 +590,16 @@ void ProcessAtFrame(ATFHandle *h, int type, int atf) { case 2: SomeoneTalk(1788, ocNEGOZIANTE1A, 0, false); break; + default: + break; } break; case ATFEND: DemoOver(); doEvent(MC_SYSTEM, ME_QUIT, MP_SYSTEM, 0, 0, 0, 0); break; - + default: + break; } } @@ -871,20 +610,17 @@ void ProcessAtFrame(ATFHandle *h, int type, int atf) { void InitAtFrameHandler(uint16 an, uint16 obj) { SAnim *anim = &g_vm->_animMgr->_animTab[an]; - ATFHandle *handle = &AnimType[0]; + ATFHandle *handle = &AnimType[CHARACTER_ANIM]; if (anim->_flag & SMKANIM_BKG) - handle = &AnimType[1]; + handle = &AnimType[BACKGROUND_ANIM]; if (anim->_flag & SMKANIM_ICON) - handle = &AnimType[2]; + handle = &AnimType[ICON_ANIM]; - handle->curanim = anim; - if (obj) - handle->object = obj; - else - handle->object = g_vm->_curObj; - handle->curframe = 0; - handle->lastframe = -1; - handle->status = 0; + handle->_curAnim = anim; + handle->_object = obj ? obj : g_vm->_curObj; + handle->_curFrame = 0; + handle->_lastFrame = -1; + handle->_status = 0; } /* -----------------11/07/97 11.41------------------- @@ -892,8 +628,8 @@ void InitAtFrameHandler(uint16 an, uint16 obj) { --------------------------------------------------*/ void AtFrameNext() { for (int i = 0; i < 3; ++i) { - if (!(AnimType[i].status & ATF_WAITTEXT) || !g_vm->_flagCharacterSpeak) - AnimType[i].curframe++; + if (!(AnimType[i]._status & ATF_WAITTEXT) || !g_vm->_flagCharacterSpeak) + AnimType[i]._curFrame++; } } @@ -902,14 +638,14 @@ void AtFrameNext() { --------------------------------------------------*/ void AtFrameEnd(int type) { ATFHandle *h = &AnimType[type]; - SAnim *anim = h->curanim; - h->curframe = 0; + SAnim *anim = h->_curAnim; + h->_curFrame = 0; // if this ATFrame has already been handled - if (h->curframe == h->lastframe) + if (h->_curFrame == h->_lastFrame) return; - h->lastframe = h->curframe; + h->_lastFrame = h->_curFrame; uint16 flag = g_vm->_animMgr->_animTab[g_vm->_room[g_vm->_curRoom]._bkgAnim]._flag; @@ -925,7 +661,7 @@ void AtFrameEnd(int type) { } } - h->curanim = nullptr; + h->_curAnim = nullptr; } /* -----------------11/07/97 11.44------------------- @@ -933,21 +669,21 @@ void AtFrameEnd(int type) { --------------------------------------------------*/ void AtFrameHandler(int type) { ATFHandle *h = &AnimType[type]; - SAnim *anim = h->curanim; + SAnim *anim = h->_curAnim; if (anim == nullptr) return; - if (h->curframe == 0) - h->curframe++; + if (h->_curFrame == 0) + h->_curFrame++; // if this ATFrame has already been applied - if (h->curframe <= h->lastframe) + if (h->_curFrame <= h->_lastFrame) return; uint16 flag = g_vm->_animMgr->_animTab[g_vm->_room[g_vm->_curRoom]._bkgAnim]._flag; for (int32 a = 0; a < MAXATFRAME; a++) { // if it's time to run this AtFrame - if ((anim->_atFrame[a]._numFrame > h->lastframe) && (anim->_atFrame[a]._numFrame <= h->curframe) && (anim->_atFrame[a]._numFrame != 0)) { + if ((anim->_atFrame[a]._numFrame > h->_lastFrame) && (anim->_atFrame[a]._numFrame <= h->_curFrame) && (anim->_atFrame[a]._numFrame != 0)) { if (anim->_atFrame[a]._child == 0 || (anim->_atFrame[a]._child == 1 && !(flag & SMKANIM_OFF1)) || (anim->_atFrame[a]._child == 2 && !(flag & SMKANIM_OFF2)) || @@ -957,8 +693,8 @@ void AtFrameHandler(int type) { } } - // set lastframe - h->lastframe = h->curframe; + // set _lastFrame + h->_lastFrame = h->_curFrame; } } // End of namespace Trecision diff --git a/engines/trecision/nl/proto.h b/engines/trecision/nl/proto.h index c5ba796bbf9..bcf9df8af2f 100644 --- a/engines/trecision/nl/proto.h +++ b/engines/trecision/nl/proto.h @@ -66,7 +66,6 @@ void doInvOperate(); void doDoing(); void doScript(); bool AtMouseClick(uint16 curObj); -void AtEndChangeRoom(); void ProcessAtFrame(ATFHandle *h, int type, int atf); void InitAtFrameHandler(uint16 an, uint16 obj); void AtFrameNext(); diff --git a/engines/trecision/nl/struct.h b/engines/trecision/nl/struct.h index 7b75f93d87a..ccfa9eb77b0 100644 --- a/engines/trecision/nl/struct.h +++ b/engines/trecision/nl/struct.h @@ -138,6 +138,17 @@ struct Message { uint16 _u16Param2; // byte parameter 2 uint32 _u32Param; // int parameter uint32 _timestamp; + + void set(Message *src) { + _class = src->_class; + _event = src->_event; + _priority = src->_priority; + _u8Param = src->_u8Param; + _u16Param1 = src->_u16Param1; + _u16Param2 = src->_u16Param2; + _u32Param = src->_u32Param; + _timestamp = src->_timestamp; + } }; // Screen rectangle (don't remove, please!)