mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-09 20:34:12 +00:00
TRECISION: Move endChangeRoom to LogicManager, use a setter instead of memcpy on a specific message
This commit is contained in:
parent
03a3c1923f
commit
b6ffdcf16a
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
|
@ -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!)
|
||||
|
Loading…
x
Reference in New Issue
Block a user