scummvm/engines/trecision/logic.cpp
2021-05-29 21:24:31 +01:00

4325 lines
158 KiB
C++

/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#include "common/config-manager.h"
#include "trecision/nl/message.h"
#include "trecision/nl/proto.h"
#include "trecision/nl/struct.h"
#include "trecision/3d.h"
#include "trecision/actor.h"
#include "trecision/defines.h"
#include "trecision/dialog.h"
#include "trecision/graphics.h"
#include "trecision/logic.h"
#include "trecision/scheduler.h"
#include "trecision/sound.h"
#include "trecision/text.h"
#include "trecision/trecision.h"
#include "trecision/video.h"
namespace Trecision {
LogicManager::LogicManager(TrecisionEngine *vm) : _vm(vm) {
for (int i = 0; i < 7; ++i)
_comb35[i] = 0;
_count35 = 0;
for (int i = 0; i < 4; ++i)
_comb49[i] = 0;
for (int i = 0; i < 6; ++i) {
_comb58[i] = 0;
_comb4CT[i] = 0;
}
_count58 = 0;
_wheel = 0xFFFF;
for (int i = 0; i < 3; ++i)
_wheelPos[i] = 0;
_slotMachine41Counter = 0;
}
LogicManager::~LogicManager() {}
void LogicManager::syncGameStream(Common::Serializer &ser) {
for (int i = 0; i < 7; i++)
ser.syncAsUint16LE(_comb35[i]);
for (int i = 0; i < 4; i++)
ser.syncAsUint16LE(_comb49[i]);
for (int i = 0; i < 6; i++)
ser.syncAsUint16LE(_comb4CT[i]);
for (int i = 0; i < 6; i++)
ser.syncAsUint16LE(_comb58[i]);
for (int i = 0; i < 3; i++)
ser.syncAsUint16LE(_wheelPos[i]);
ser.syncAsUint16LE(_wheel);
ser.syncAsUint16LE(_count35);
ser.syncAsUint16LE(_count58);
ser.syncAsUint16LE(_slotMachine41Counter);
}
void LogicManager::initScript() {
int f = 0;
_vm->_script[s16CARD]._firstFrame = f;
_vm->_script[s16CARD]._flag = 0;
_vm->_scriptFrame[f]._class = MC_CHARACTER;
_vm->_scriptFrame[f]._event = ME_CHARACTERACTION;
_vm->_scriptFrame[f++]._u16Param1 = a166USECREDITCARD;
_vm->_scriptFrame[f]._class = MC_ACTION;
_vm->_scriptFrame[f]._event = ME_MOUSEOPERATE;
_vm->_scriptFrame[f++]._u32Param = oTICKETOFFICE16;
_vm->_script[S16MONEY]._firstFrame = ++f;
_vm->_script[S16MONEY]._flag = 0;
_vm->_scriptFrame[f]._class = MC_CHARACTER;
_vm->_scriptFrame[f]._event = ME_CHARACTERACTION;
_vm->_scriptFrame[f++]._u16Param1 = a167USEMONEY;
_vm->_scriptFrame[f]._class = MC_ACTION;
_vm->_scriptFrame[f]._event = ME_MOUSEOPERATE;
_vm->_scriptFrame[f++]._u32Param = oTICKETOFFICE16;
_vm->_script[s19EVA]._firstFrame = ++f;
_vm->_script[s19EVA]._flag = 0;
_vm->_scriptFrame[f]._class = MC_MOUSE;
_vm->_scriptFrame[f]._event = ME_MRIGHT;
_vm->_scriptFrame[f]._u8Param = 1;
_vm->_scriptFrame[f]._u16Param1 = 214;
_vm->_scriptFrame[f]._u16Param2 = TOP + 140;
_vm->_scriptFrame[f++]._u32Param = ocEVA19;
_vm->_script[s4AHELLEN]._firstFrame = ++f;
_vm->_script[s4AHELLEN]._flag = 0;
_vm->_scriptFrame[f]._class = MC_CHARACTER;
_vm->_scriptFrame[f]._event = ME_CHARACTERACTION;
_vm->_scriptFrame[f++]._u16Param1 = a4A2;
_vm->_scriptFrame[f]._class = MC_MOUSE;
_vm->_scriptFrame[f]._event = ME_MLEFT;
_vm->_scriptFrame[f]._u8Param = 1;
_vm->_scriptFrame[f]._u16Param1 = 336;
_vm->_scriptFrame[f]._u16Param2 = 263 + TOP;
_vm->_scriptFrame[f++]._u32Param = 0;
_vm->_scriptFrame[f]._class = MC_MOUSE;
_vm->_scriptFrame[f]._event = ME_MLEFT;
_vm->_scriptFrame[f]._u8Param = 1;
_vm->_scriptFrame[f]._u16Param1 = 336;
_vm->_scriptFrame[f]._u16Param2 = 260 + TOP;
_vm->_scriptFrame[f++]._u32Param = 0;
_vm->_scriptFrame[f]._class = MC_DIALOG;
_vm->_scriptFrame[f]._event = ME_STARTDIALOG;
_vm->_scriptFrame[f++]._u16Param1 = dF4A3;
_vm->_script[s49SUNDIAL]._firstFrame = ++f;
_vm->_script[s49SUNDIAL]._flag = 0;
_vm->_scriptFrame[f]._class = MC_SCRIPT;
_vm->_scriptFrame[f]._event = ME_CHANGER;
_vm->_scriptFrame[f]._u16Param1 = kRoom49;
_vm->_scriptFrame[f]._u16Param2 = a496;
_vm->_scriptFrame[f]._u8Param = 1;
_vm->_scriptFrame[f++]._u32Param = 1;
_vm->_scriptFrame[f]._class = MC_MOUSE;
_vm->_scriptFrame[f]._event = ME_MLEFT;
_vm->_scriptFrame[f]._u8Param = 1;
_vm->_scriptFrame[f]._u16Param1 = 360;
_vm->_scriptFrame[f]._u16Param2 = 255 + TOP;
_vm->_scriptFrame[f++]._u32Param = 0;
_vm->_scriptFrame[f]._class = MC_SCRIPT;
_vm->_scriptFrame[f]._event = ME_CHANGER;
_vm->_scriptFrame[f]._u16Param1 = kRoom4A;
_vm->_scriptFrame[f]._u16Param2 = 0;
_vm->_scriptFrame[f]._u8Param = 1;
_vm->_scriptFrame[f++]._u32Param = 1;
// Fast change room in double room of level 2
_vm->_script[s21TO22]._firstFrame = ++f;
_vm->_script[s21TO22]._flag = 0;
_vm->_scriptFrame[f]._class = MC_MOUSE;
_vm->_scriptFrame[f]._u16Param1 = 317;
_vm->_scriptFrame[f]._u8Param = 1;
_vm->_scriptFrame[f]._u16Param2 = 166;
_vm->_scriptFrame[f]._event = ME_MRIGHT;
_vm->_scriptFrame[f++]._u32Param = oCATENAT21;
_vm->_scriptFrame[f]._class = MC_MOUSE;
_vm->_scriptFrame[f]._u16Param1 = 429;
_vm->_scriptFrame[f]._u8Param = 1;
_vm->_scriptFrame[f]._u16Param2 = 194;
_vm->_scriptFrame[f]._event = ME_MLEFT;
_vm->_scriptFrame[f++]._u32Param = od21TO22;
_vm->_script[s21TO23]._firstFrame = ++f;
_vm->_script[s21TO23]._flag = 0;
_vm->_scriptFrame[f]._class = MC_MOUSE;
_vm->_scriptFrame[f]._u16Param1 = 317;
_vm->_scriptFrame[f]._u8Param = 1;
_vm->_scriptFrame[f]._u16Param2 = 166;
_vm->_scriptFrame[f]._event = ME_MRIGHT;
_vm->_scriptFrame[f++]._u32Param = oCATENAT21;
_vm->_scriptFrame[f]._class = MC_MOUSE;
_vm->_scriptFrame[f]._u16Param1 = 204;
_vm->_scriptFrame[f]._u8Param = 1;
_vm->_scriptFrame[f]._u16Param2 = 157;
_vm->_scriptFrame[f]._event = ME_MLEFT;
_vm->_scriptFrame[f++]._u32Param = od21TO23;
_vm->_script[s24TO23]._firstFrame = ++f;
_vm->_script[s24TO23]._flag = 0;
_vm->_scriptFrame[f]._class = MC_MOUSE;
_vm->_scriptFrame[f]._u16Param1 = 316;
_vm->_scriptFrame[f]._u8Param = 1;
_vm->_scriptFrame[f]._u16Param2 = 213;
_vm->_scriptFrame[f]._event = ME_MRIGHT;
_vm->_scriptFrame[f++]._u32Param = oPASSAGE24;
_vm->_scriptFrame[f]._class = MC_MOUSE;
_vm->_scriptFrame[f]._u16Param1 = 120;
_vm->_scriptFrame[f]._u8Param = 1;
_vm->_scriptFrame[f]._u16Param2 = 196;
_vm->_scriptFrame[f]._event = ME_MLEFT;
_vm->_scriptFrame[f++]._u32Param = od24TO23;
_vm->_script[s24TO26]._firstFrame = ++f;
_vm->_script[s24TO26]._flag = 0;
_vm->_scriptFrame[f]._class = MC_MOUSE;
_vm->_scriptFrame[f]._u16Param1 = 316;
_vm->_scriptFrame[f]._u8Param = 1;
_vm->_scriptFrame[f]._u16Param2 = 213;
_vm->_scriptFrame[f]._event = ME_MRIGHT;
_vm->_scriptFrame[f++]._u32Param = oPASSAGE24;
_vm->_scriptFrame[f]._class = MC_MOUSE;
_vm->_scriptFrame[f]._u16Param1 = 527;
_vm->_scriptFrame[f]._u8Param = 1;
_vm->_scriptFrame[f]._u16Param2 = 187;
_vm->_scriptFrame[f]._event = ME_MLEFT;
_vm->_scriptFrame[f++]._u32Param = od24TO26;
_vm->_script[s2ETO2C]._firstFrame = ++f;
_vm->_script[s2ETO2C]._flag = 0;
_vm->_scriptFrame[f]._class = MC_MOUSE;
_vm->_scriptFrame[f]._u16Param1 = 420;
_vm->_scriptFrame[f]._u8Param = 1;
_vm->_scriptFrame[f]._u16Param2 = 238;
_vm->_scriptFrame[f]._event = ME_MRIGHT;
_vm->_scriptFrame[f++]._u32Param = oCATWALKA2E;
_vm->_scriptFrame[f]._class = MC_MOUSE;
_vm->_scriptFrame[f]._u16Param1 = 66;
_vm->_scriptFrame[f]._u8Param = 1;
_vm->_scriptFrame[f]._u16Param2 = 336;
_vm->_scriptFrame[f]._event = ME_MLEFT;
_vm->_scriptFrame[f++]._u32Param = od2ETO2C;
_vm->_script[s2ETO2F]._firstFrame = ++f;
_vm->_script[s2ETO2F]._flag = 0;
_vm->_scriptFrame[f]._class = MC_MOUSE;
_vm->_scriptFrame[f]._u16Param1 = 420;
_vm->_scriptFrame[f]._u8Param = 1;
_vm->_scriptFrame[f]._u16Param2 = 238;
_vm->_scriptFrame[f]._event = ME_MRIGHT;
_vm->_scriptFrame[f++]._u32Param = oCATWALKA2E;
_vm->_scriptFrame[f]._class = MC_MOUSE;
_vm->_scriptFrame[f]._u16Param1 = 213;
_vm->_scriptFrame[f]._u8Param = 1;
_vm->_scriptFrame[f]._u16Param2 = 69;
_vm->_scriptFrame[f]._event = ME_MLEFT;
_vm->_scriptFrame[f]._u32Param = oENTRANCE2E;
}
void LogicManager::setupAltRoom(uint16 room, bool altRoomFl) {
switch (room) {
case kRoom21:
if (!altRoomFl) {
_vm->read3D("21.3d");
_vm->_room[kRoom21]._flag &= ~kObjFlagExtra;
_vm->_pathFind->setPosition(14);
_vm->_obj[oCATENAT21]._position = 5;
_vm->_obj[oUSCITA21]._position = 11;
// if we can go beyond
if (((_vm->iconPos(kItemMagneticBar) != -1) && ((_vm->_dialogMgr->_choice[436]._flag & kObjFlagDone) || (_vm->_dialogMgr->_choice[466]._flag & kObjFlagDone)))
|| ((_vm->_dialogMgr->_choice[451]._flag & kObjFlagDone) || (_vm->_dialogMgr->_choice[481]._flag & kObjFlagDone))) {
_vm->_obj[od21TO23]._flag |= kObjFlagRoomOut;
_vm->_obj[od21TO23]._flag &= ~kObjFlagExamine;
} else {
_vm->_obj[od21TO23]._flag &= ~kObjFlagRoomOut;
_vm->_obj[od21TO23]._flag |= kObjFlagExamine;
}
_vm->setObjectAnim(od21TO23, 0);
_vm->setObjectVisible(oUSCITA21, true);
_vm->_obj[od21TO22]._flag |= kObjFlagRoomOut;
_vm->_obj[od21TO22]._flag &= ~kObjFlagExamine;
_vm->setObjectAnim(od21TO22, aWALKOUT);
_vm->setObjectAnim(oDOORA21, a212);
_vm->setObjectAnim(oDOORC21, a219);
_vm->setObjectVisible(oCUNICOLO21, true);
_vm->setObjectVisible(oCARTELLONE21, true);
} else {
_vm->read3D("212.3d");
_vm->_room[kRoom21]._flag |= kObjFlagExtra;
_vm->_pathFind->setPosition(15);
_vm->_obj[oCATENAT21]._position = 6;
_vm->_obj[oUSCITA21]._position = 21;
_vm->_obj[od21TO23]._flag |= kObjFlagRoomOut;
_vm->_obj[od21TO23]._flag &= ~kObjFlagExamine;
_vm->setObjectAnim(od21TO23, aWALKOUT);
_vm->setObjectVisible(oUSCITA21, true);
// If we can go beyond
if (((_vm->iconPos(kItemMagneticBar) != -1) && ((_vm->_dialogMgr->_choice[436]._flag & kObjFlagDone) || (_vm->_dialogMgr->_choice[466]._flag & kObjFlagDone)))
|| ((_vm->_dialogMgr->_choice[451]._flag & kObjFlagDone) || (_vm->_dialogMgr->_choice[481]._flag & kObjFlagDone))) {
_vm->_obj[od21TO22]._flag |= kObjFlagRoomOut;
_vm->_obj[od21TO22]._flag &= ~kObjFlagExamine;
} else {
_vm->_obj[od21TO22]._flag &= ~kObjFlagRoomOut;
_vm->_obj[od21TO22]._flag |= kObjFlagExamine;
}
_vm->setObjectAnim(od21TO22, 0);
_vm->_obj[od21TO22]._examine = 335;
_vm->_obj[od21TO22]._action = 335;
_vm->setObjectAnim(oDOORA21, 0);
_vm->setObjectAnim(oDOORC21, 0);
_vm->setObjectVisible(oCUNICOLO21, false);
_vm->setObjectVisible(oCARTELLONE21, false);
}
break;
case kRoom24:
if (!altRoomFl) {
_vm->read3D("24.3d");
_vm->_room[kRoom24]._flag &= ~kObjFlagExtra;
_vm->_obj[oPASSAGE24]._position = 3;
_vm->_obj[oMACERIE24]._position = 3;
_vm->setObjectVisible(oDUMMY24, false);
_vm->setObjectVisible(oDUMMY24A, true);
} else {
_vm->read3D("242.3d");
_vm->_room[kRoom24]._flag |= kObjFlagExtra;
_vm->setObjectVisible(od24TO26, true);
_vm->_obj[oPASSAGE24]._position = 4;
_vm->_obj[oMACERIE24]._position = 4;
_vm->setObjectVisible(oDUMMY24A, false);
_vm->setObjectVisible(oDUMMY24, true);
}
break;
case kRoom2A:
if (!altRoomFl) {
_vm->read3D("2A.3d");
_vm->_room[kRoom2A]._flag &= ~kObjFlagExtra;
_vm->setObjectVisible(oDUMMY2A2, true);
_vm->setObjectVisible(oDUMMY2A, false);
} else {
_vm->read3D("2A2.3d");
_vm->_room[kRoom2A]._flag |= kObjFlagExtra;
_vm->setObjectVisible(oDUMMY2A, true);
_vm->setObjectVisible(oDUMMY2A2, false);
}
break;
case kRoom2B:
if (!altRoomFl) {
_vm->read3D("2B.3d");
_vm->_room[kRoom2B]._flag &= ~kObjFlagExtra;
_vm->setObjectVisible(oDOOR2B, true);
_vm->setObjectVisible(od2BTO28, false);
} else {
_vm->read3D("2B2.3d");
_vm->_room[kRoom2B]._flag |= kObjFlagExtra;
_vm->setObjectVisible(oDOOR2B, false);
_vm->setObjectVisible(od2BTO28, true);
}
break;
case kRoom2E:
if (!altRoomFl) {
_vm->_obj[oCATWALKA2E]._nbox = BOX_BACKGROUND;
_vm->_obj[oCATWALKA2E]._position = 2;
_vm->setObjectAnim(oCATWALKA2E, a2E2PRIMAPALLONTANANDO);
_vm->read3D("2E.3d");
_vm->_room[kRoom2E]._flag &= ~kObjFlagExtra;
_vm->setObjectVisible(oDUMMY2E, false);
_vm->_obj[oENTRANCE2E]._flag &= ~kObjFlagExamine;
_vm->setObjectVisible(oPASSERELLAB2E, false);
_vm->setObjectVisible(oCRATERE2E, false);
_vm->setObjectVisible(oARBUSTI2E, false);
_vm->_obj[oCREPACCIO2E]._position = 6;
} else {
_vm->_obj[oCATWALKA2E]._position = 3;
_vm->setObjectAnim(oCATWALKA2E, a2E3PRIMAPAVVICINANDO);
_vm->read3D("2E2.3d");
_vm->_room[kRoom2E]._flag |= kObjFlagExtra;
_vm->setObjectVisible(oDUMMY2E, true);
_vm->setObjectVisible(oENTRANCE2E, true);
_vm->_obj[oENTRANCE2E]._flag |= kObjFlagExamine;
_vm->setObjectVisible(oPASSERELLAB2E, true);
_vm->setObjectVisible(oCRATERE2E, true);
_vm->setObjectVisible(oARBUSTI2E, true);
_vm->_obj[oCREPACCIO2E]._position = 7;
_vm->_obj[oCATWALKA2E]._nbox = BOX_FOREGROUND;
}
break;
case kRoom2GV:
if (!altRoomFl) {
_vm->_obj[oVIADOTTO2GV]._position = 7;
_vm->setObjectAnim(oVIADOTTO2GV, a2G7ATTRAVERSAPONTICELLO);
_vm->read3D("2GV.3d");
_vm->_room[kRoom2GV]._flag &= ~kObjFlagExtra;
_vm->setObjectVisible(oDUMMY2GV, false);
_vm->setObjectVisible(oRAGAZZOS2GV, false);
_vm->setObjectVisible(oCOCCODRILLO2GV, false);
}
break;
default:
break;
}
}
struct CharacterAnimation {
uint16 curRoom;
uint16 oldRoom;
uint16 action;
};
void LogicManager::startCharacterAnimations() {
static const CharacterAnimation characterAnimations[] = {
{ kRoom12, kRoom13, a1213ARRIVACONASCENSORE },
{ kRoom12, kRoom16, a1213ARRIVACONASCENSORE },
{ kRoom16, kRoom12, a1617SCENDECONASCENSORE },
{ kRoom16, kRoom13, a1617SCENDECONASCENSORE },
{ kRoom13, kRoom12, a1315ARRIVAASCENSOREALTOENTRA },
{ kRoom13, kRoom16, a1314ARRIVAASCENSOREDABASSO },
{ kRoom14, kRoom13, a1414ENTERROOM },
{ kRoom18, kRoom19, a189ENTRADALCLUB },
{ kRoom1A, kRoom18, a1A5ENTRA },
{ kRoom1C, kRoom1B, a1C1ENTRACUNICOLO },
{ kRoom1B, kRoom1C, a1B11ESCETOMBINO },
{ kRoom1B, kRoom1D, a1B4ESCEBOTOLA },
{ kRoom24, kRoom2H, a242 },
{ kRoom25, kRoom2A, a257 },
{ kRoom28, kRoom27, aWALKIN },
{ kRoom29, kRoom2A, a298ESCEBOTOLA },
{ kRoom29L, kRoom2A, a2910ESCEBOTOLA },
{ kRoom2A, kRoom25, aWALKIN },
{ kRoom2A, kRoom29, aWALKIN },
{ kRoom2A, kRoom29L, aWALKIN },
{ kRoom2H, kRoom24, a2H1ARRIVA },
{ kRoom2E, kRoom2F, a2E5SECONDAPARRIVANDO },
{ kRoom2F, kRoom2E, aWALKIN },
{ kRoom23B, kRoom21, aWALKIN },
{ kRoom21, kRoom23A, aWALKIN },
{ kRoom21, kRoom23B, aWALKIN },
{ kRoom2F, kRoom31, a2F4ESCEASCENSORE },
{ kRoom31, kRoom2F, a3114ESCEPASSAGGIO },
{ kRoom32, kRoom31, a321SALEMONTACARICHI },
{ kRoom32, kRoom33, a325SCENDESCALE },
{ kRoom36, kRoom35, a361ESCEASCENSORE },
{ kRoom35, kRoom36, a3515ESCEASCENSORE },
{ kRoom44, kRoom45, a445 },
{ kRoom44, kRoom45S, a445 },
{ kRoom45, kRoom44, a457 },
{ kRoom45S, kRoom44, a457 },
{ kRoom46, kRoom47, aWALKIN },
{ kRoom46, kRoom48, aWALKIN },
{ kRoom46, kRoom49, aWALKIN },
{ kRoom47, kRoom46, a476 },
{ kRoom48, kRoom46, a485 },
{ kRoom49, kRoom46, a494 },
{ 0, 0, 0 }
};
int i = 0;
do {
const CharacterAnimation anim = characterAnimations[i];
const bool positionerRoom = _vm->_curRoom >= kRoom44 && _vm->_curRoom <= kRoom49;
const bool checkPositioner = !positionerRoom || !(_vm->_inventoryObj[kItemPositioner]._flag & kObjFlagExtra);
if (_vm->_curRoom == anim.curRoom && _vm->_oldRoom == anim.oldRoom && checkPositioner) {
_vm->StartCharacterAction(anim.action, 0, 0, 0);
break;
}
i++;
} while (characterAnimations[i].curRoom != 0);
if (_vm->_curRoom == kRoom18 && _vm->_oldRoom == kRoom17 && !(_vm->_room[kRoom18]._flag & kObjFlagDone)) {
_vm->StartCharacterAction(a186GUARDAPIAZZA, 0, 0, 0);
} else if (_vm->_curRoom == kRoom1A && _vm->_oldRoom == kRoom18 && (_vm->_room[kRoom1A]._flag & kObjFlagDone)) {
_vm->StartCharacterAction(a1A5ENTRA, 0, 0, 0);
_vm->_animMgr->_animTab[aBKG1A]._flag |= SMKANIM_OFF1;
} else if (_vm->_curRoom == kRoom1D && _vm->_oldRoom == kRoom1B) {
const uint16 cellarAction = _vm->isObjectVisible(oDONNA1D) ? a1D1SCENDESCALE : a1D12SCENDESCALA;
_vm->StartCharacterAction(cellarAction, 0, 1, 0);
_vm->_actor->_lim[0] = 60;
_vm->_actor->_lim[2] = 240;
} else if (_vm->_curRoom == kRoom1B && _vm->_oldRoom == kRoom18 && (_vm->_animMgr->_animTab[aBKG1B]._flag & SMKANIM_OFF1))
_vm->StartCharacterAction(a1B12SCAPPATOPO, 0, 0, 0);
else if (_vm->_curRoom == kRoom2B && (_vm->_oldRoom == kRoom2A))
_vm->StartCharacterAction(a2B2ESCEPOZZO, 0, 2, 0);
else if (_vm->_curRoom == kRoom23A && (_vm->_oldRoom == kRoom21) && (_vm->_room[kRoom23A]._flag & kObjFlagDone))
_vm->StartCharacterAction(aWALKIN, 0, 0, 0);
else if (_vm->_curRoom == kRoom33 && _vm->_oldRoom == kRoom32) {
const uint16 roofAction = _vm->isObjectVisible(oBRUCIATURA33) ? a3311SALESCALE : a3313CHIUDEBOTOLA;
_vm->StartCharacterAction(roofAction, 0, 0, 0);
} else if (_vm->_curRoom == kRoom54 && (_vm->_oldRoom == kRoom53)) {
_vm->StartCharacterAction(a5411, 0, 11, 0);
_vm->_inventoryObj[kItemLaserGun]._examine = 1599;
}
}
bool LogicManager::startPlayDialog() {
bool dialogHandled = true;
if (_vm->_curRoom == kRoom17 && _vm->_oldRoom == kRoom16) {
_vm->_dialogMgr->playDialog(dF171);
_vm->_soundMgr->waitEndFading();
} else if (_vm->_curRoom == kRoom16 && (_vm->_oldRoom == kRoom17)) {
_vm->_dialogMgr->playDialog(dF161);
_vm->_soundMgr->waitEndFading();
_vm->removeIcon(kItemNoteRotmall17);
} else if (_vm->_curRoom == kRoom21 && (_vm->_oldRoom == kRoom1C)) {
_vm->_dialogMgr->playDialog(dF1C1);
_vm->_soundMgr->waitEndFading();
} else if (_vm->_curRoom == kRoom23B && (_vm->_oldRoom == kRoom23A)) {
_vm->_dialogMgr->playDialog(dF231);
_vm->_soundMgr->waitEndFading();
_vm->removeIcon(kItemSubwayMap);
} else if (_vm->_curRoom == kRoom29L && (_vm->_oldRoom == kRoom29)) {
_vm->_dialogMgr->playDialog(dF291);
_vm->_soundMgr->waitEndFading();
} else if (_vm->_curRoom == kRoom2GV && (_vm->_oldRoom == kRoom2G)) {
_vm->_dialogMgr->playDialog(dF2G2);
_vm->_soundMgr->waitEndFading();
} else if (_vm->_curRoom == kRoom31 && (_vm->_oldRoom == kRoom32) && (_vm->_room[kRoom32]._flag & kObjFlagExtra)) {
_vm->_dialogMgr->playDialog(dF321);
_vm->_flagShowCharacter = false;
_vm->_soundMgr->waitEndFading();
_vm->_room[kRoom32]._flag &= ~kObjFlagExtra;
} else if (_vm->_curRoom == kRoom46 && (_vm->_oldRoom == kRoom43) && !(_vm->_inventoryObj[kItemPositioner]._flag & kObjFlagExtra)) {
_vm->_dialogMgr->playDialog(dF431);
_vm->_soundMgr->waitEndFading();
} else if (_vm->_curRoom == kRoom45S && (_vm->_oldRoom == kRoom45) && !(_vm->_inventoryObj[kItemPositioner]._flag & kObjFlagExtra)) {
_vm->_dialogMgr->playDialog(dF451);
_vm->_soundMgr->waitEndFading();
} else if (_vm->_curRoom == kRoom4A && (_vm->_oldRoom == kRoom49) && !(_vm->_inventoryObj[kItemPositioner]._flag & kObjFlagExtra)) {
_vm->_dialogMgr->playDialog(dF491);
_vm->_soundMgr->waitEndFading();
} else if (_vm->_curRoom == kRoom4A && (_vm->_oldRoom == kRoom41D) && (_vm->_inventoryObj[kItemPositioner]._flag & kObjFlagExtra) && _vm->isObjectVisible(ocHELLEN4A)) {
_vm->_soundMgr->waitEndFading();
_vm->_dialogMgr->playDialog(dC4A1);
} else if (_vm->_curRoom == kRoom4P && (_vm->_oldRoom == kRoom4O) && !(_vm->_room[kRoom4P]._flag & kObjFlagDone)) {
_vm->_dialogMgr->playDialog(dF4PI);
_vm->_flagShowCharacter = false;
_vm->_soundMgr->waitEndFading();
} else if (_vm->_curRoom == kRoom51 && (_vm->_oldRoom == kRoom4CT)) {
_vm->_dialogMgr->playDialog(dF4C1);
_vm->_flagShowCharacter = false;
_vm->_soundMgr->waitEndFading();
} else if (_vm->_curRoom == kRoom1A && (_vm->_oldRoom == kRoom18)) {
if (!(_vm->_room[kRoom1A]._flag & kObjFlagDone)) {
_vm->_dialogMgr->playDialog(dF1A1);
_vm->_soundMgr->waitEndFading();
_vm->_obj[oTOPO1C]._flag |= kObjFlagTake;
_vm->setObjectAnim(oTOPO1C, a1C3RACCOGLIETOPO);
} else {
TendIn();
_vm->_flagNoPaintScreen = false;
_vm->_textMgr->redrawString();
}
} else {
dialogHandled = false;
}
return dialogHandled;
}
void LogicManager::endChangeRoom() {
// Specific management of magnetic fields
if (_vm->_curRoom == kRoom2E && _vm->isObjectVisible(oPULSANTEADS2D)) {
_vm->_animMgr->_animTab[aBKG2E]._flag |= SMKANIM_OFF1;
_vm->setObjectVisible(oCAMPO2E, false);
_vm->setObjectVisible(oCARTELLOA2E, false);
_vm->setObjectVisible(oCARTELLOS2E, true);
} else if (_vm->_curRoom == kRoom2E && _vm->isObjectVisible(oPULSANTEADA2D)) {
_vm->_animMgr->_animTab[aBKG2E]._flag &= ~SMKANIM_OFF1;
_vm->setObjectVisible(oCAMPO2E, true);
_vm->setObjectVisible(oCARTELLOA2E, true);
_vm->setObjectVisible(oCARTELLOS2E, false);
}
if (_vm->_curRoom == kRoom2C && _vm->isObjectVisible(oPULSANTEACS2D)) {
_vm->_animMgr->_animTab[aBKG2C]._flag |= SMKANIM_OFF1;
_vm->setObjectVisible(oCAMPO2C, false);
_vm->setObjectVisible(oCARTELLOA2C, false);
_vm->setObjectVisible(oCARTELLOS2C, true);
} else if (_vm->_curRoom == kRoom2C && _vm->isObjectVisible(oPULSANTEACA2D)) {
_vm->_animMgr->_animTab[aBKG2C]._flag &= ~SMKANIM_OFF1;
_vm->setObjectVisible(oCAMPO2C, true);
_vm->setObjectVisible(oCARTELLOS2C, false);
_vm->setObjectVisible(oCARTELLOA2C, true);
}
if (_vm->_curRoom == kRoom28 && _vm->isObjectVisible(oPULSANTEBBS2D)) {
_vm->_animMgr->_animTab[aBKG28]._flag |= SMKANIM_OFF2;
_vm->setObjectAnim(oCESPUGLIO28, a283);
_vm->setObjectVisible(oSERPENTETM28, true);
_vm->setObjectVisible(oSERPENTEAM28, true);
} else if (_vm->_curRoom == kRoom28 && _vm->isObjectVisible(oPULSANTEBBA2D)) {
_vm->_animMgr->_animTab[aBKG28]._flag &= ~SMKANIM_OFF2;
_vm->setObjectAnim(oCESPUGLIO28, a282);
_vm->setObjectVisible(oSERPENTETM28, false);
_vm->setObjectVisible(oSERPENTEAM28, false);
}
if (_vm->_curRoom == kRoom28 && _vm->isObjectVisible(oPULSANTEABS2D)) {
_vm->_animMgr->_animTab[aBKG28]._flag |= (SMKANIM_OFF1 | SMKANIM_OFF3);
_vm->setObjectVisible(oCAMPO28, false);
_vm->setObjectVisible(oCARTELLOA28, false);
_vm->setObjectVisible(oCARTELLOS28, true);
_vm->read3D("282.3d");
} else if (_vm->_curRoom == kRoom28 && _vm->isObjectVisible(oPULSANTEABA2D)) {
_vm->_animMgr->_animTab[aBKG28]._flag &= ~(SMKANIM_OFF1 | SMKANIM_OFF3);
_vm->setObjectVisible(oCAMPO28, true);
_vm->setObjectVisible(oCARTELLOA28, true);
_vm->setObjectVisible(oCARTELLOS28, false);
}
// End of specific management for the magnetic fields
// Actions
startCharacterAnimations();
if (isCloseupOrControlRoom()) { // Screens without inventory
_vm->_flagShowCharacter = false;
_vm->_flagCharacterExists = false;
_vm->_flagInventoryLocked = true;
} else if (_vm->_curRoom == kRoom31P || _vm->_curRoom == kRoom35P) { // Screens with inventory
_vm->_flagShowCharacter = false;
_vm->_flagCharacterExists = false;
} else if (_vm->_curRoom == kRoom23A && (_vm->_oldRoom == kRoom21) && (!(_vm->_room[kRoom23A]._flag & kObjFlagDone)))
_vm->_flagShowCharacter = false;
else if (_vm->_curRoom == kRoom31 && !(_vm->_room[kRoom31]._flag & kObjFlagDone))
_vm->_pathFind->setPosition(14);
else if ((_vm->_oldRoom == kRoom41D) && (_vm->_inventoryObj[kItemPositioner]._flag & kObjFlagExtra)) {
_vm->_pathFind->setPosition(30);
_vm->_renderer->drawCharacter(CALCPOINTS);
}
// FullMotion
const bool dialogHandled = startPlayDialog();
if (_vm->_curRoom == kRoom19 && !(_vm->_room[kRoom19]._flag & kObjFlagDone)) {
_vm->playScript(s19EVA);
_vm->_flagNoPaintScreen = false;
_vm->_textMgr->clearLastText();
_vm->_textMgr->redrawString();
_vm->_soundMgr->waitEndFading();
}
// CHECKME: This check is identical to the 3rd one, thus it's always false
else if (_vm->_curRoom == kRoom21 && (/*!( _room[_vm->_curRoom]._flag & OBJFLAG_DONE ) || */ (_vm->_oldRoom == kRoom1C))) {
_vm->_pathFind->setPosition(10);
TendIn();
_vm->_flagNoPaintScreen = false;
_vm->_textMgr->clearLastText();
_vm->_textMgr->redrawString();
} else if (!dialogHandled) {
TendIn();
_vm->_flagNoPaintScreen = false;
_vm->_textMgr->clearLastText();
_vm->_textMgr->redrawString();
}
// Sentence
if (_vm->_curRoom == kRoom17 && (_vm->_oldRoom == kRoom18) && !(_vm->_room[kRoom17]._flag & kObjFlagDone) && _vm->isObjectVisible(oRETE17))
_vm->_textMgr->CharacterSay(189);
if ((_vm->_curRoom == kRoom12CU || _vm->_curRoom == kRoom13CU) && _vm->_closeUpObj && _vm->_obj[_vm->_closeUpObj]._examine)
_vm->_textMgr->CharacterSay(_vm->_obj[_vm->_closeUpObj]._examine);
else if (_vm->_curRoom == kRoom23A && (_vm->_oldRoom == kRoom21) && !(_vm->_room[kRoom23A]._flag & kObjFlagDone)) {
_vm->_flagShowCharacter = true;
_vm->StartCharacterAction(aWALKIN, 0, 0, 361);
} else if (_vm->_curRoom == kRoom24 && !(_vm->_room[kRoom24]._flag & kObjFlagDone))
_vm->_textMgr->CharacterSay(381);
else if (_vm->_curRoom == kRoom2G && !(_vm->_room[kRoom2G]._flag & kObjFlagDone))
_vm->_textMgr->CharacterSay(688);
else if (_vm->_curRoom == kRoom4C && (_vm->_oldRoom == kRoom4CT))
_vm->_textMgr->CharacterSay(1163);
else if (_vm->_curRoom == kRoom41 && (_vm->_oldRoom == kRoom36) && !(_vm->_room[kRoom41]._flag & kObjFlagDone))
_vm->_textMgr->CharacterSay(900);
else if (_vm->_curRoom == kRoom58 && _vm->isObjectVisible(oGUARDIA58) && (_vm->_obj[oGUARDIA58]._anim)) {
_vm->_curObj = oGUARDIA58;
_vm->_scheduler->doEvent(MC_MOUSE, ME_MRIGHT, MP_DEFAULT, 372, 335 + TOP, 0, oGUARDIA58);
} else if (_vm->_curRoom == kRoom59L)
_vm->_textMgr->CharacterSay(1394);
else if (_vm->_curRoom == kRoom58 && (_vm->_oldRoom == kRoom58T))
_vm->_textMgr->CharacterSay(1368);
else if (_vm->_curRoom == kRoom5A && !(_vm->_room[kRoom5A]._flag & kObjFlagDone))
_vm->_textMgr->CharacterSay(1408);
else if (_vm->_curRoom == kRoomControlPanel && (_vm->_oldRoom == kRoomControlPanel))
_vm->_logicMgr->doSys(o00LOAD);
_vm->_inventoryObj[kItemPositioner]._flag &= ~kObjFlagExtra;
}
void LogicManager::initInventory() {
_vm->_inventory.clear();
_vm->_inventory.push_back(kItemBankNote);
_vm->_inventory.push_back(kItemMinicom);
_vm->_inventory.push_back(kItemLiftCard);
_vm->_inventory.push_back(kItemPen);
_vm->_inventory.push_back(kItemLetterboxKey);
}
void LogicManager::useInventoryWithInventory(bool *updateInventory, bool *printSentence) {
*updateInventory = true;
*printSentence = true;
switch (_vm->_useWith[USED]) {
case kItemFoilPaper:
if (_vm->_useWith[WITH] == kItemBurnedFuse) {
_vm->removeIcon(kItemFoilPaper);
_vm->replaceIcon(kItemBurnedFuse, kItemRepairedFuse);
_vm->StartCharacterAction(hUSEGG, 0, 0, 1441);
*printSentence = false;
}
break;
case kItemBurnedFuse:
if (_vm->_useWith[WITH] == kItemFoilPaper) {
_vm->removeIcon(kItemFoilPaper);
_vm->replaceIcon(kItemBurnedFuse, kItemRepairedFuse);
_vm->StartCharacterAction(hUSEGG, 0, 0, 1441);
*printSentence = false;
}
break;
case kItemDeadRat:
if (_vm->_useWith[WITH] == kItemSkate) {
_vm->removeIcon(kItemSkate);
_vm->removeIcon(kItemDeadRat);
_vm->addIcon(kItemRatOnSkate);
_vm->StartCharacterAction(hUSEGG, 0, 0, 1497);
*printSentence = false;
}
break;
case kItemSkate:
if (_vm->_useWith[WITH] == kItemDeadRat) {
_vm->removeIcon(kItemSkate);
_vm->removeIcon(kItemDeadRat);
_vm->addIcon(kItemRatOnSkate);
_vm->StartCharacterAction(hUSEGG, 0, 0, 1497);
*printSentence = false;
}
break;
case kItemBar:
if (_vm->_useWith[WITH] == kItemMagnet) {
_vm->removeIcon(kItemBar);
_vm->replaceIcon(kItemMagnet, kItemMagneticBar);
_vm->StartCharacterAction(hUSEGG, 0, 0, 1438);
*printSentence = false;
}
break;
case kItemMagnet:
if (_vm->_useWith[WITH] == kItemBar) {
_vm->removeIcon(kItemBar);
_vm->replaceIcon(kItemMagnet, kItemMagneticBar);
_vm->StartCharacterAction(hUSEGG, 0, 0, 1533);
*printSentence = false;
}
break;
case kItemMatch:
if (_vm->_useWith[WITH] == kItemBroom) {
_vm->removeIcon(kItemBroom);
_vm->replaceIcon(kItemMatch, kItemMakeshiftTorch);
_vm->StartCharacterAction(hUSEGG, 0, 0, 1575);
*printSentence = false;
}
break;
case kItemBroom:
if (_vm->_useWith[WITH] == kItemMatch) {
_vm->removeIcon(kItemBroom);
_vm->replaceIcon(kItemMatch, kItemMakeshiftTorch);
_vm->StartCharacterAction(hUSEGG, 0, 0, 1546);
*printSentence = false;
}
break;
case kItemProjector:
if (_vm->_useWith[WITH] == kItemThreeWayAdapter) {
_vm->removeIcon(kItemThreeWayAdapter);
_vm->replaceIcon(kItemProjector, kItemProjector2);
_vm->StartCharacterAction(hUSEGG, 0, 0, 0);
*printSentence = false;
}
break;
case kItemThreeWayAdapter:
if (_vm->_useWith[WITH] == kItemProjector) {
_vm->removeIcon(kItemThreeWayAdapter);
_vm->replaceIcon(kItemProjector, kItemProjector2);
_vm->StartCharacterAction(hUSEGG, 0, 0, 0);
*printSentence = false;
}
break;
case kItemSaltpetre:
case kItemCharcoalSlack:
case kItemJarWithSulfurPowder:
case kItemCharcoalSaltpetrePowder:
case kItemCharcoalSulfurPowder:
case kItemSaltpetreSulfurPowder:
if ((_vm->_useWith[WITH] == kItemSaltpetre) || (_vm->_useWith[WITH] == kItemCharcoalSlack) || (_vm->_useWith[WITH] == kItemJarWithSulfurPowder) ||
(_vm->_useWith[WITH] == kItemCharcoalSaltpetrePowder) || (_vm->_useWith[WITH] == kItemCharcoalSulfurPowder) || (_vm->_useWith[WITH] == kItemSaltpetreSulfurPowder)) {
_vm->removeIcon(_vm->_useWith[USED]);
_vm->removeIcon(_vm->_useWith[WITH]);
if (((_vm->_useWith[USED] == kItemSaltpetre) && (_vm->_useWith[WITH] == kItemCharcoalSlack)) ||
((_vm->_useWith[WITH] == kItemSaltpetre) && (_vm->_useWith[USED] == kItemCharcoalSlack)))
_vm->addIcon(kItemCharcoalSaltpetrePowder);
if (((_vm->_useWith[USED] == kItemJarWithSulfurPowder) && (_vm->_useWith[WITH] == kItemCharcoalSlack)) ||
((_vm->_useWith[WITH] == kItemJarWithSulfurPowder) && (_vm->_useWith[USED] == kItemCharcoalSlack)))
_vm->addIcon(kItemCharcoalSulfurPowder);
if (((_vm->_useWith[USED] == kItemJarWithSulfurPowder) && (_vm->_useWith[WITH] == kItemSaltpetre)) ||
((_vm->_useWith[WITH] == kItemJarWithSulfurPowder) && (_vm->_useWith[USED] == kItemSaltpetre)))
_vm->addIcon(kItemSaltpetreSulfurPowder);
if ((_vm->_useWith[USED] == kItemJarWithSulfurPowder) || (_vm->_useWith[WITH] == kItemJarWithSulfurPowder))
_vm->addIcon(kItemEmptyGlassJar);
if ((_vm->_useWith[USED] >= kItemCharcoalSaltpetrePowder) || (_vm->_useWith[WITH] >= kItemCharcoalSaltpetrePowder))
_vm->addIcon(kItemGunpowder);
_vm->StartCharacterAction(hUSEGG, 0, 0, 1663);
*printSentence = false;
}
break;
case kItemPiratePistol:
if (_vm->_useWith[WITH] == kItemGunpowder) {
_vm->replaceIcon(kItemGunpowder, kItemLeftoverGunpowder);
_vm->replaceIcon(kItemPiratePistol, kItemPistolWithGunpowder);
_vm->StartCharacterAction(hUSEGG, 0, 0, 1676);
*printSentence = false;
} else if (_vm->_useWith[WITH] == kItemLeftoverGunpowder) {
_vm->removeIcon(kItemLeftoverGunpowder);
_vm->replaceIcon(kItemPiratePistol, kItemPistolWithGunpowder);
_vm->StartCharacterAction(hUSEGG, 0, 0, 1700);
*printSentence = false;
}
break;
case kItemGunpowder:
if (_vm->_useWith[WITH] == kItemPiratePistol) {
_vm->replaceIcon(kItemGunpowder, kItemLeftoverGunpowder);
_vm->replaceIcon(kItemPiratePistol, kItemPistolWithGunpowder);
_vm->StartCharacterAction(hUSEGG, 0, 0, 1676);
*printSentence = false;
}
break;
case kItemLeftoverGunpowder:
if (_vm->_useWith[WITH] == kItemPiratePistol) {
_vm->removeIcon(kItemLeftoverGunpowder);
_vm->replaceIcon(kItemPiratePistol, kItemPistolWithGunpowder);
_vm->StartCharacterAction(hUSEGG, 0, 0, 1700);
*printSentence = false;
}
break;
case kItemIronBullet1:
case kItemIronBullet2:
if ((_vm->_useWith[WITH] == kItemPistolWithGunpowder) && !(_vm->_inventoryObj[kItemPistolWithGunpowder]._flag & kObjFlagExtra)) {
_vm->removeIcon(_vm->_useWith[USED]);
_vm->replaceIcon(kItemPistolWithGunpowder, kItemLoadedPistol);
_vm->StartCharacterAction(hUSEGG, 0, 0, 1683);
_vm->_inventoryObj[kItemPistolWithGunpowder]._flag |= kObjFlagExtra;
*printSentence = false;
} else if (_vm->_useWith[WITH] == kItemPistolWithGunpowder) {
_vm->_textMgr->CharacterSay(1688);
*printSentence = false;
} else if (_vm->_useWith[WITH] == kItemPiratePistol) {
_vm->_textMgr->CharacterSay(2009);
*printSentence = false;
}
break;
case kItemSilverBullet:
if (_vm->_useWith[WITH] == kItemPistolWithGunpowder) {
_vm->removeIcon(kItemSilverBullet);
_vm->replaceIcon(kItemPistolWithGunpowder, kItemLoadedPistol);
_vm->StartCharacterAction(hUSEGG, 0, 0, 1718);
_vm->_inventoryObj[kItemLoadedPistol]._flag |= kObjFlagExtra;
*printSentence = false;
} else if (_vm->_useWith[WITH] == kItemPiratePistol) {
_vm->_textMgr->CharacterSay(2011);
*printSentence = false;
}
break;
case kItemEmptySyringe:
if (_vm->_useWith[WITH] == kItemTubes) {
_vm->removeIcon(kItemEmptySyringe);
_vm->replaceIcon(kItemTubes, kItemPoisonSyringe);
_vm->StartCharacterAction(hUSEGG, 0, 0, 1756);
*printSentence = false;
}
break;
case kItemTubes:
if (_vm->_useWith[WITH] == kItemEmptySyringe) {
_vm->removeIcon(kItemEmptySyringe);
_vm->replaceIcon(kItemTubes, kItemPoisonSyringe);
_vm->StartCharacterAction(hUSEGG, 0, 0, 1756);
*printSentence = false;
}
break;
case kItemDentalFloss:
if (_vm->_useWith[WITH] == kItemInflatedGloves) {
_vm->removeIcon(kItemDentalFloss);
_vm->replaceIcon(kItemInflatedGloves, kItemInflatedGlovesWithFloss);
_vm->StartCharacterAction(hUSEGG, 0, 0, 1756);
*printSentence = false;
} else if (_vm->_useWith[WITH] == kItemPoisonSyringe) {
_vm->removeIcon(kItemDentalFloss);
_vm->replaceIcon(kItemPoisonSyringe, kItemPoisonSyringeWithFloss);
_vm->StartCharacterAction(hUSEGG, 0, 0, 1756);
*printSentence = false;
}
break;
case kItemInflatedGloves:
if (_vm->_useWith[WITH] == kItemDentalFloss) {
_vm->removeIcon(kItemDentalFloss);
_vm->replaceIcon(kItemInflatedGloves, kItemInflatedGlovesWithFloss);
_vm->StartCharacterAction(hUSEGG, 0, 0, 1756);
*printSentence = false;
} else if (_vm->_useWith[WITH] == kItemPoisonSyringeWithFloss) {
_vm->removeIcon(kItemPoisonSyringeWithFloss);
_vm->replaceIcon(kItemInflatedGloves, kItemFloatingPoisonSyringe);
_vm->StartCharacterAction(hUSEGG, 0, 0, 1756);
*printSentence = false;
}
break;
case kItemPoisonSyringe:
if (_vm->_useWith[WITH] == kItemDentalFloss) {
_vm->removeIcon(kItemDentalFloss);
_vm->replaceIcon(kItemPoisonSyringe, kItemPoisonSyringeWithFloss);
_vm->StartCharacterAction(hUSEGG, 0, 0, 1756);
*printSentence = false;
} else if (_vm->_useWith[WITH] == kItemInflatedGlovesWithFloss) {
_vm->removeIcon(kItemPoisonSyringe);
_vm->replaceIcon(kItemInflatedGlovesWithFloss, kItemFloatingPoisonSyringe);
_vm->StartCharacterAction(hUSEGG, 0, 0, 1756);
*printSentence = false;
}
break;
case kItemInflatedGlovesWithFloss:
if (_vm->_useWith[WITH] == kItemPoisonSyringe) {
_vm->removeIcon(kItemPoisonSyringe);
_vm->replaceIcon(kItemInflatedGlovesWithFloss, kItemFloatingPoisonSyringe);
_vm->StartCharacterAction(hUSEGG, 0, 0, 1756);
*printSentence = false;
}
break;
case kItemPoisonSyringeWithFloss:
if (_vm->_useWith[WITH] == kItemInflatedGloves) {
_vm->removeIcon(kItemPoisonSyringeWithFloss);
_vm->replaceIcon(kItemInflatedGloves, kItemFloatingPoisonSyringe);
_vm->StartCharacterAction(hUSEGG, 0, 0, 1756);
*printSentence = false;
}
break;
default:
*updateInventory = false;
break;
}
}
void LogicManager::useInventoryWithScreen(bool *updateInventory, bool *printSentence) {
*updateInventory = true;
*printSentence = true;
switch (_vm->_useWith[USED]) {
case kItemBankNote:
if (_vm->_useWith[WITH] == oDISTRIBUTORE13 && !(_vm->_obj[oDISTRIBUTORE13]._flag & kObjFlagExtra)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a131USABANCONOTA, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
_vm->_obj[oDISTRIBUTORE13]._flag |= kObjFlagExtra;
} else if ((_vm->_useWith[WITH] == oDISTRIBUTORE13) && (_vm->_obj[oDISTRIBUTORE13]._flag & kObjFlagExtra) && _vm->isObjectVisible(oLATTINA13)) {
_vm->_textMgr->CharacterSay(1410);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oDISTRIBUTORE13) && (_vm->_obj[oDISTRIBUTORE13]._flag & kObjFlagExtra)) {
if (!(_vm->_obj[oSCOMPARTO13]._flag & kObjFlagExtra)) {
_vm->_obj[oSCOMPARTO13]._flag |= kObjFlagExtra;
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1311DABOTTADISTRIBUTORE, 0, 0, _vm->_useWith[WITH]);
} else
_vm->_textMgr->CharacterSay(1411);
*printSentence = false;
} else if (_vm->_useWith[WITH] == oTICKETOFFICE16) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a165USABANCONOTA, 0, 0, _vm->_useWith[WITH]);
_vm->_inventoryObj[kItemBankNote]._flag |= kObjFlagExtra;
*printSentence = false;
} else if ((_vm->_useWith[WITH] == ocPOLIZIOTTO16) && (_vm->_inventoryObj[kItemBankNote]._flag & kObjFlagExtra)) {
_vm->_dialogMgr->_choice[62]._flag &= ~DLGCHOICE_HIDE;
_vm->_dialogMgr->playDialog(dPOLIZIOTTO16);
*printSentence = false;
}
break;
case kItemLetter:
if (_vm->_useWith[WITH] == oPENPADA13) {
if (_vm->_room[kRoom14]._flag & kObjFlagDone)
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1312METTELETTERARICALCA, kRoom14, 14, _vm->_useWith[WITH]);
else {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a135METTELETTERA, 0, 0, _vm->_useWith[WITH]);
_vm->setObjectVisible(oLETTERA13, true);
_vm->_inventoryObj[kItemLetter]._flag |= kObjFlagExtra;
_vm->removeIcon(kItemLetter);
}
*printSentence = false;
}
break;
case kItemRepairedFuse:
if (_vm->_useWith[WITH] == oPANELA12) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a127USEWRAPPEDFUSED, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
}
break;
case kItemBurnedFuse:
if (_vm->_useWith[WITH] == oPANELA12) {
_vm->_textMgr->CharacterSay(62);
*printSentence = false;
}
break;
case kItemLetterboxKey:
if (_vm->_useWith[WITH] == oBOXES12) {
if (!(_vm->_obj[oBOXES12]._flag & kObjFlagExtra)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, kAnim121TryOpenLetterboxes, 0, 0, _vm->_useWith[WITH]);
_vm->_obj[oBOXES12]._flag |= kObjFlagExtra;
*printSentence = false;
} else {
_vm->_textMgr->CharacterSay(1426);
*printSentence = false;
}
} else if (_vm->_useWith[WITH] == oBOX12 && !(_vm->_inventoryObj[kItemLetter]._flag & kObjFlagExtra)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, kAnim122OpenLetterbox17, 0, 0, oBOX12);
_vm->_inventoryObj[kItemLetter]._flag |= kObjFlagExtra;
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oBOX12) && (_vm->_inventoryObj[kItemLetter]._flag & kObjFlagExtra)) {
_vm->_textMgr->CharacterSay(1429);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oCARA11) || (_vm->_useWith[WITH] == oCARB11) || (_vm->_useWith[WITH] == oTAKE12) || (_vm->_useWith[WITH] == oSTRONGBOXC15) || (_vm->_useWith[WITH] == oDOOR18) || (_vm->_useWith[WITH] == oPADLOCK1B) || (_vm->_useWith[WITH] == oDOORC21) || (_vm->_useWith[WITH] == oPANELC23) || (_vm->_useWith[WITH] == oDOOR2A) || (_vm->_useWith[WITH] == oDOORC33) || (_vm->_useWith[WITH] == oFRONTOFFICEC35) || (_vm->_useWith[WITH] == oCASSETTOC36) || (_vm->_useWith[WITH] == oDOORC54) || (_vm->_useWith[WITH] == oDOOR57C55) || (_vm->_useWith[WITH] == oDOOR58C55) || (_vm->_useWith[WITH] == oDOORS56) || (_vm->_useWith[WITH] == oDOORS57)) {
*printSentence = false;
_vm->_textMgr->CharacterSay(1426);
}
break;
case kItemLiftCard:
if (_vm->_useWith[WITH] == oSLOT12 || _vm->_useWith[WITH] == oSLOT13 || _vm->_useWith[WITH] == oSLOT16) {
*printSentence = false;
_vm->_inventoryObj[kItemLiftCard]._flag |= kObjFlagExtra;
_vm->_obj[oSLOT12]._flag |= kObjFlagPerson;
_vm->_obj[oLIFTA12]._flag |= kObjFlagPerson;
_vm->doMouseTalk(_vm->_useWith[WITH]);
} else if ((_vm->_useWith[WITH] == oTICKETOFFICE16) || (_vm->_useWith[WITH] == oSLOT23) || (_vm->_useWith[WITH] == oFRONTOFFICEA35) || (_vm->_useWith[WITH] == oSLOTA58) || (_vm->_useWith[WITH] == oSLOTB58)) {
*printSentence = false;
_vm->_textMgr->CharacterSay(1419);
}
break;
case kItemPen:
*printSentence = false;
if (((_vm->_useWith[WITH] == oPENPADA13) || (_vm->_useWith[WITH] == oLETTERA13)) && _vm->isObjectVisible(oLETTERA13))
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a137RICALCAFIRMA, kRoom14, 14, _vm->_useWith[WITH]);
else if ((_vm->_useWith[WITH] == oPENPADA13) && (_vm->_room[kRoom14]._flag & kObjFlagDone))
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1312METTELETTERARICALCA, kRoom14, 14, _vm->_useWith[WITH]);
else if (_vm->_useWith[WITH] == oPENPADA13) {
if (!_vm->isObjectVisible(oBOX12)) {
*printSentence = false;
_vm->_textMgr->CharacterSay(2005);
} else
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a134USAMAGNETICPEN, 0, 0, _vm->_useWith[WITH]);
} else
*printSentence = true;
break;
case kItemTubeOfAcidFull:
if (_vm->_useWith[WITH] == oBAR11) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, kAnim113UseVial, 0, 0, _vm->_useWith[WITH]);
_vm->replaceIcon(kItemTubeOfAcidFull, kItemTubeOfAcidHalfFull);
*printSentence = false;
} else if (_vm->_useWith[WITH] == oPADLOCK1B) {
if (_vm->isObjectVisible(oTOMBINOA1B))
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1B2AVERSAACIDO, 0, 0, _vm->_useWith[WITH]);
else
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1B2VERSAACIDO, 0, 0, _vm->_useWith[WITH]);
_vm->setObjectAnim(oBOTOLAC1B, a1B3APREBOTOLA);
_vm->replaceIcon(kItemTubeOfAcidFull, kItemTubeOfAcidHalfFull);
_vm->_animMgr->_animTab[kAnim113UseVial]._atFrame[0]._index = 1483;
*printSentence = false;
} else if ((_vm->_useWith[WITH] == ocGUARD18) || (_vm->_useWith[WITH] == oMANHOLEC1B)) {
*printSentence = false;
_vm->_textMgr->CharacterSay(1476);
}
break;
case kItemTubeOfAcidHalfFull:
if (_vm->_useWith[WITH] == oBAR11) {
_vm->_animMgr->_animTab[kAnim113UseVial]._atFrame[0]._index = 1483;
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, kAnim113UseVial, 0, 0, _vm->_useWith[WITH]);
_vm->removeIcon(kItemTubeOfAcidHalfFull);
*printSentence = false;
} else if (_vm->_useWith[WITH] == oPADLOCK1B) {
_vm->_animMgr->_animTab[a1B2AVERSAACIDO]._atFrame[2]._index = 1483;
_vm->_animMgr->_animTab[a1B2VERSAACIDO]._atFrame[2]._index = 1483;
if (_vm->isObjectVisible(oTOMBINOA1B))
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1B2AVERSAACIDO, 0, 0, _vm->_useWith[WITH]);
else
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1B2VERSAACIDO, 0, 0, _vm->_useWith[WITH]);
_vm->setObjectAnim(oBOTOLAC1B, a1B3APREBOTOLA);
_vm->removeIcon(kItemTubeOfAcidHalfFull);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oDOOR2A) || (_vm->_useWith[WITH] == oDOOR2B)) {
*printSentence = false;
_vm->_textMgr->CharacterSay(1508);
}
break;
case kItemRubysSafeboxKey:
if (_vm->_useWith[WITH] == oSTRONGBOXC15) {
if (_vm->isDemo()) {
_vm->demoOver();
} else {
_vm->_dialogMgr->playDialog(dF151);
_vm->setObjectVisible(oSTRONGBOXC15, false);
_vm->setObjectVisible(oCASSAFORTEA15, true);
_vm->setObjectVisible(oSLOT13, false);
_vm->setObjectVisible(oASCENSOREA13, false);
_vm->setObjectVisible(oASCENSOREC13, true);
_vm->addIcon(kItemPistol);
_vm->addIcon(kItemTubeOfAcidFull);
_vm->addIcon(kItemRubysReport);
_vm->removeIcon(kItemRubysSafeboxKey);
*printSentence = false;
*updateInventory = false;
}
} else if ((_vm->_useWith[WITH] == oCARA11) || (_vm->_useWith[WITH] == oCARB11) || (_vm->_useWith[WITH] == oTAKE12) || (_vm->_useWith[WITH] == oBOX12) || (_vm->_useWith[WITH] == oDOOR18) || (_vm->_useWith[WITH] == oPADLOCK1B) || (_vm->_useWith[WITH] == oDOORC21) || (_vm->_useWith[WITH] == oPANELC23) || (_vm->_useWith[WITH] == oDOOR2A) || (_vm->_useWith[WITH] == oDOORC33) || (_vm->_useWith[WITH] == oFRONTOFFICEC35) || (_vm->_useWith[WITH] == oCASSETTOC36) || (_vm->_useWith[WITH] == oDOORC54) || (_vm->_useWith[WITH] == oDOOR57C55) || (_vm->_useWith[WITH] == oDOOR58C55) || (_vm->_useWith[WITH] == oDOORS56) || (_vm->_useWith[WITH] == oDOORS57)) {
*printSentence = false;
_vm->_textMgr->CharacterSay(1469);
}
break;
case kItemBar:
if (_vm->_useWith[WITH] == oMANHOLEC1B) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1B1USASBARRA, 0, 0, _vm->_useWith[WITH]);
_vm->setObjectAnim(oBOTOLAA1B, a1B6ASCENDEBOTOLA);
*printSentence = false;
} else if (_vm->_useWith[WITH] == oCATENAT21) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a216, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
} else if (_vm->_useWith[WITH] == oALTOPARLANTE25) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a251, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
} else if (_vm->_useWith[WITH] == oDOORC33) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a333LOSEBAR, 0, 0, _vm->_useWith[WITH]);
_vm->removeIcon(kItemBar);
*printSentence = false;
} else if (_vm->_obj[_vm->_useWith[WITH]]._flag & kObjFlagPerson) {
_vm->_textMgr->CharacterSay(1436);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oTAKE12) || (_vm->_useWith[WITH] == oSTRONGBOXC15) || (_vm->_useWith[WITH] == oDOOR18) || (_vm->_useWith[WITH] == oPADLOCK1B) || (_vm->_useWith[WITH] == oDOORC21) || (_vm->_useWith[WITH] == oPANELC23) || (_vm->_useWith[WITH] == oDOOR2A) || (_vm->_useWith[WITH] == oDOOR2B)) {
*printSentence = false;
_vm->_textMgr->CharacterSay(1435);
}
break;
case kItemSubwayCard:
if ((_vm->_useWith[WITH] == oTICKETOFFICE16) && (_vm->_obj[oMAPPA16]._flag & kObjFlagExtra)) {
if (_vm->_dialogMgr->_choice[49]._flag & kObjFlagDone) {
_vm->_textMgr->CharacterSay(1457);
*printSentence = false;
} else {
_vm->_dialogMgr->_choice[46]._flag |= DLGCHOICE_HIDE;
_vm->_dialogMgr->_choice[47]._flag |= DLGCHOICE_HIDE;
_vm->_dialogMgr->_choice[48]._flag |= DLGCHOICE_HIDE;
_vm->_dialogMgr->_choice[49]._flag &= ~DLGCHOICE_HIDE;
_vm->playScript(s16CARD);
*printSentence = false;
}
} else if (_vm->_useWith[WITH] == oSLOT23) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a2311, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oSLOT12) || (_vm->_useWith[WITH] == oSLOT13) || (_vm->_useWith[WITH] == oSLOT16) || (_vm->_useWith[WITH] == oFRONTOFFICEA35) || (_vm->_useWith[WITH] == oSLOTA58) || (_vm->_useWith[WITH] == oSLOTB58)) {
*printSentence = false;
_vm->_textMgr->CharacterSay(1419);
}
break;
case kItemFiveCreditCoin:
if ((_vm->_useWith[WITH] == oTICKETOFFICE16) && (_vm->_obj[oMAPPA16]._flag & kObjFlagExtra)) {
_vm->_dialogMgr->_choice[46]._flag |= DLGCHOICE_HIDE;
_vm->_dialogMgr->_choice[47]._flag |= DLGCHOICE_HIDE;
_vm->_dialogMgr->_choice[48]._flag |= DLGCHOICE_HIDE;
_vm->_dialogMgr->_choice[50]._flag &= ~DLGCHOICE_HIDE;
_vm->playScript(S16MONEY);
*printSentence = false;
_vm->removeIcon(kItemFiveCreditCoin);
_vm->_obj[oFINGERPADP16]._flag |= kObjFlagRoomOut;
} else if (_vm->_useWith[WITH] == oTICKETOFFICE16) {
_vm->_textMgr->CharacterSay(146);
*printSentence = false;
}
break;
case kItemPlasticPlate:
if (_vm->_useWith[WITH] == oTELEFAXF17) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a172USAPLASTICA, 0, 0, _vm->_useWith[WITH]);
_vm->_obj[oTELEFAXF17]._examine = 1486;
*printSentence = false;
}
break;
case kItemRubysPhoto:
if ((_vm->_useWith[WITH] == ocTRAMP17) && (_vm->_dialogMgr->_choice[81]._flag & kObjFlagDone)) {
_vm->_textMgr->CharacterSay(1463);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == ocTRAMP17) && (_vm->_dialogMgr->_choice[91]._flag & kObjFlagDone)) {
_vm->_obj[ocTRAMP17]._action = 1462;
_vm->_textMgr->CharacterSay(_vm->_obj[ocTRAMP17]._action);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == ocTRAMP17) && (!(_vm->_dialogMgr->_choice[78]._flag & kObjFlagDone) || ((_vm->_dialogMgr->_choice[79]._flag & kObjFlagDone) || (_vm->_dialogMgr->_choice[83]._flag & kObjFlagDone) && !(_vm->_dialogMgr->_choice[92]._flag & kObjFlagDone)))) {
_vm->_dialogMgr->_choice[78]._flag &= ~DLGCHOICE_HIDE;
if ((_vm->_dialogMgr->_choice[79]._flag & kObjFlagDone) || (_vm->_dialogMgr->_choice[83]._flag & kObjFlagDone)) {
_vm->_dialogMgr->_choice[92]._flag &= ~DLGCHOICE_HIDE;
if (_vm->_dialogMgr->_choice[80]._flag & kObjFlagDone)
_vm->_dialogMgr->_choice[121]._flag &= ~DLGCHOICE_HIDE;
else
_vm->_dialogMgr->_choice[122]._flag &= ~DLGCHOICE_HIDE;
} else
_vm->_dialogMgr->_choice[91]._flag &= ~DLGCHOICE_HIDE;
_vm->_dialogMgr->playDialog(dTRAMP171);
*updateInventory = false;
*printSentence = false;
} else if (_vm->_useWith[WITH] == ocPOLIZIOTTO16) {
_vm->_obj[ocPOLIZIOTTO16]._flag |= kObjFlagExtra;
_vm->_textMgr->CharacterSay(1461);
if ((_vm->_dialogMgr->_choice[61]._flag & kObjFlagDone) && (_vm->_dialogMgr->_choice[62]._flag & kObjFlagDone) && (_vm->_obj[ocPOLIZIOTTO16]._flag & kObjFlagExtra))
_vm->setObjectVisible(ocPOLIZIOTTO16, false);
*printSentence = false;
} else if (_vm->_useWith[WITH] == ocGUARD18) {
if (_vm->_dialogMgr->_choice[152]._flag & kObjFlagDone)
_vm->_textMgr->CharacterSay(1465);
else
_vm->_textMgr->CharacterSay(1464);
*printSentence = false;
} else if (_vm->_useWith[WITH] == ocNEGOZIANTE1A) {
_vm->_textMgr->CharacterSay(1466);
*printSentence = false;
} else if (_vm->_useWith[WITH] == ocEVA19) {
_vm->_textMgr->CharacterSay(1465);
*printSentence = false;
}
break;
case kItemBeerCan:
if (_vm->_useWith[WITH] == ocTRAMP17) {
if ((_vm->_dialogMgr->_choice[79]._flag & kObjFlagDone) || (_vm->_dialogMgr->_choice[83]._flag & kObjFlagDone)) {
_vm->_dialogMgr->_choice[80]._flag &= ~DLGCHOICE_HIDE;
if (_vm->_dialogMgr->_choice[81]._flag & kObjFlagDone) {
_vm->_dialogMgr->_choice[81]._flag &= ~DLGCHOICE_HIDE;
_vm->_dialogMgr->_choice[80]._flag &= ~DLGCHOICE_EXITDLG;
}
_vm->_dialogMgr->playDialog(dTRAMP171);
*updateInventory = false;
_vm->removeIcon(kItemBeerCan);
*printSentence = false;
} else { // if( !(_vm->_dialogMgr->_choice[79]._flag & OBJFLAG_DONE) )
_vm->_dialogMgr->_choice[79]._flag &= ~DLGCHOICE_HIDE;
if (!(_vm->_dialogMgr->_choice[78]._flag & kObjFlagDone)) {
_vm->_dialogMgr->_choice[106]._flag &= ~DLGCHOICE_HIDE;
_vm->_obj[ocTRAMP17]._action = 213;
} else {
_vm->_dialogMgr->_choice[107]._flag &= ~DLGCHOICE_HIDE;
if (_vm->_dialogMgr->_choice[80]._flag & kObjFlagDone)
_vm->_dialogMgr->_choice[121]._flag &= ~DLGCHOICE_HIDE;
else
_vm->_dialogMgr->_choice[122]._flag &= ~DLGCHOICE_HIDE;
}
_vm->_dialogMgr->playDialog(dTRAMP171);
*updateInventory = false;
_vm->removeIcon(kItemBeerCan);
*printSentence = false;
}
}
break;
case kItemWineBottle:
if (_vm->_useWith[WITH] == ocTRAMP17) {
if ((_vm->_dialogMgr->_choice[79]._flag & kObjFlagDone) || (_vm->_dialogMgr->_choice[83]._flag & kObjFlagDone)) {
_vm->_dialogMgr->_choice[80]._flag &= ~DLGCHOICE_HIDE;
if (_vm->_dialogMgr->_choice[81]._flag & kObjFlagDone) {
_vm->_dialogMgr->_choice[81]._flag &= ~DLGCHOICE_HIDE;
_vm->_dialogMgr->_choice[80]._flag &= ~DLGCHOICE_EXITDLG;
}
_vm->_dialogMgr->playDialog(dTRAMP171);
*updateInventory = false;
_vm->removeIcon(kItemWineBottle);
*printSentence = false;
} else {
_vm->_dialogMgr->_choice[83]._flag &= ~DLGCHOICE_HIDE;
if (!(_vm->_dialogMgr->_choice[78]._flag & kObjFlagDone)) {
_vm->_dialogMgr->_choice[106]._flag &= ~DLGCHOICE_HIDE;
_vm->_obj[ocTRAMP17]._action = 213;
} else {
_vm->_dialogMgr->_choice[107]._flag &= ~DLGCHOICE_HIDE;
if (_vm->_dialogMgr->_choice[80]._flag & kObjFlagDone)
_vm->_dialogMgr->_choice[121]._flag &= ~DLGCHOICE_HIDE;
else
_vm->_dialogMgr->_choice[122]._flag &= ~DLGCHOICE_HIDE;
}
_vm->_dialogMgr->playDialog(dTRAMP171);
*updateInventory = false;
_vm->removeIcon(kItemWineBottle);
*printSentence = false;
}
}
break;
case kItemBottleOfChateau:
if (_vm->_useWith[WITH] == ocNEGOZIANTE1A) {
*printSentence = false;
if (_vm->_dialogMgr->_choice[183]._flag & kObjFlagDone) {
_vm->_dialogMgr->_choice[185]._flag &= ~DLGCHOICE_HIDE;
_vm->_dialogMgr->_dialog[dSHOPKEEPER1A]._startLen = 0;
_vm->_dialogMgr->playDialog(dSHOPKEEPER1A);
*updateInventory = false;
_vm->_dialogMgr->_dialog[dSHOPKEEPER1A]._startLen = 1;
_vm->replaceIcon(kItemBottleOfChateau, kItemMembershipCard);
} else
_vm->_textMgr->CharacterSay(2006);
}
break;
case kItemMembershipCard:
if ((_vm->_useWith[WITH] == ocGUARD18) && !(_vm->_dialogMgr->_choice[155]._flag & kObjFlagDone)) {
_vm->_dialogMgr->_choice[155]._flag &= ~DLGCHOICE_HIDE;
_vm->_dialogMgr->playDialog(dGUARDIAN18);
*updateInventory = false;
_vm->_obj[ocGUARD18]._flag &= ~kObjFlagPerson;
_vm->_obj[oDOORC18]._flag |= kObjFlagRoomOut;
*printSentence = false;
} else if (_vm->_useWith[WITH] == ocGUARD18) {
_vm->_textMgr->CharacterSay(1494);
*printSentence = false;
}
break;
case kItemRatOnSkate:
if ((_vm->_useWith[WITH] == oDONNA1D) && (_vm->_mousePos.x >= _vm->_obj[oDONNA1D]._lim.left && (_vm->_mousePos.x >= _vm->_obj[oDONNA1D]._lim.top + TOP) && (_vm->_mousePos.x <= _vm->_obj[oDONNA1D]._lim.right) && (_vm->_mousePos.y <= _vm->_obj[oDONNA1D]._lim.bottom + TOP))) {
_vm->_dialogMgr->playDialog(dF1D1);
*updateInventory = false;
_vm->removeIcon(kItemRatOnSkate);
_vm->read3D("1d2.3d"); // after skate
_vm->setObjectVisible(oDONNA1D, false);
_vm->_room[_vm->_curRoom]._flag |= kObjFlagExtra;
_vm->_animMgr->_animTab[aBKG1D]._flag |= SMKANIM_OFF1;
*printSentence = false;
}
break;
case kItemPistol:
if ((_vm->_useWith[WITH] == oDOORC21) && !(_vm->_room[kRoom21]._flag & kObjFlagExtra)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a211, 0, 0, _vm->_useWith[WITH]);
_vm->_inventoryObj[kItemPistol]._examine = 1472;
_vm->_inventoryObj[kItemPistol]._action = 1473;
*printSentence = false;
}
break;
case kItemScrewdriver:
if (_vm->_useWith[WITH] == oESSE21) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a213, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
} else if (_vm->_useWith[WITH] == oCOPERCHIOC31) {
_vm->_soundMgr->play(wCOVER31);
_vm->setObjectVisible(oCOPERCHIOC31, false);
_vm->setObjectVisible(oCOPERCHIOA31, true);
*printSentence = false;
} else if (_vm->_useWith[WITH] == oCOPERCHIOA31) {
_vm->setObjectVisible(oCOPERCHIOA31, false);
_vm->setObjectVisible(oCOPERCHIOC31, true);
_vm->setObjectVisible(oPANNELLOM31, false);
_vm->setObjectVisible(oPANNELLOMA31, true);
if (_vm->isObjectVisible(oFILOTC31)) {
_vm->setObjectAnim(oPANNELLOM31, 0);
_vm->_obj[oPANNELLOM31]._examine = 715;
_vm->_obj[oPANNELLOM31]._action = 716;
_vm->_obj[oPANNELLOM31]._flag &= ~kObjFlagRoomOut;
}
_vm->_soundMgr->play(wCOVER31);
*printSentence = false;
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, kRoom31, a3118CHIUDEPANNELLO, 3, _vm->_curObj);
} else if (_vm->_useWith[WITH] == oPANNELLO55) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a5512, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
} else if (_vm->_useWith[WITH] == oPANNELLOC56) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a568, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oSLOT23) || (_vm->_useWith[WITH] == oPRESA35) || (_vm->_useWith[WITH] == oSERRATURA33)) {
*printSentence = false;
_vm->_textMgr->CharacterSay(1520);
}
break;
case kItemMetallicS:
if (_vm->_useWith[WITH] == oCATENA21) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a214, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
}
break;
case kItemTinCanWithOil:
if (_vm->_useWith[WITH] == oMANIGLIONE22) {
if (_vm->isObjectVisible(oARMADIETTORC22))
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a228, 0, 0, _vm->_useWith[WITH]);
else
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a228A, 0, 0, _vm->_useWith[WITH]);
_vm->removeIcon(kItemTinCanWithOil);
_vm->addIcon(kItemEmptyTinCan);
if (_vm->_inventoryObj[kItemCanWithFuel]._flag & kObjFlagExtra) {
_vm->removeIcon(kItemEmptyTinCan);
_vm->replaceIcon(kItemCanWithFuel, kItemLargeCans);
}
*printSentence = false;
} else
break;
case kItemBookstoreKey:
if (_vm->_useWith[WITH] == oDOOR2A) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a2A2USEKEY, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oPANELC23) || (_vm->_useWith[WITH] == oDOORC33) || (_vm->_useWith[WITH] == oFRONTOFFICEC35) || (_vm->_useWith[WITH] == oCASSETTOC36) || (_vm->_useWith[WITH] == oDOORC54) || (_vm->_useWith[WITH] == oDOOR57C55) || (_vm->_useWith[WITH] == oDOOR58C55) || (_vm->_useWith[WITH] == oDOORS56) || (_vm->_useWith[WITH] == oDOORS57)) {
*printSentence = false;
_vm->_textMgr->CharacterSay(1512);
}
break;
case kItemFaultyBulb:
if ((_vm->_useWith[WITH] == oPORTALAMPADE2B) && !(_vm->_obj[_vm->_useWith[WITH]]._anim)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a2B6METTELAMPADINA, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
}
break;
case kItemSocketSpanner:
if (_vm->_useWith[WITH] == oPANELC23) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a233, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oDOORC33) || (_vm->_useWith[WITH] == oFRONTOFFICEC35) || (_vm->_useWith[WITH] == oCASSETTOC36) || (_vm->_useWith[WITH] == oDOORC54) || (_vm->_useWith[WITH] == oDOOR57C55) || (_vm->_useWith[WITH] == oDOOR58C55) || (_vm->_useWith[WITH] == oDOORS56) || (_vm->_useWith[WITH] == oDOORS57)) {
*printSentence = false;
_vm->_textMgr->CharacterSay(1525);
}
break;
case kItemCopperLeads:
if ((_vm->_useWith[WITH] == oCONTATTI23) && _vm->isObjectVisible(oLEVAS23)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a236, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
} else if (_vm->_useWith[WITH] == oLEVAG23) {
_vm->_textMgr->CharacterSay(2015);
*printSentence = false;
}
break;
case kItemPliers:
if ((_vm->_useWith[WITH] == oCAVO2H) && _vm->isObjectVisible(oCARTELLONE2H)) {
_vm->_dialogMgr->playDialog(dF2H1);
_vm->setObjectVisible(oPASSAGE24, true);
_vm->setObjectVisible(omPASSAGGIO24, true);
_vm->setObjectVisible(oCARTELLONE24, false);
_vm->setObjectVisible(oCARTELLONE2H, false);
_vm->setObjectVisible(oPASSERELLA24, false);
_vm->setObjectVisible(oMACERIE24, false);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oTUBOT34) && _vm->isObjectVisible(oVALVOLAC34)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a341USAPINZE, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oTUBOT34) && _vm->isObjectVisible(oVALVOLA34)) {
_vm->_textMgr->CharacterSay(2007);
*printSentence = false;
} else
*printSentence = true;
break;
case kItemCanWithFuel:
if ((_vm->_useWith[WITH] == oSERBATOIOA2G) && !(_vm->_inventoryObj[kItemCanWithFuel]._flag & kObjFlagExtra)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a2G4VERSALATTINA, 0, 0, _vm->_useWith[WITH]);
_vm->_inventoryObj[kItemCanWithFuel]._flag |= kObjFlagExtra;
_vm->_inventoryObj[kItemCanWithFuel]._examine = 1537;
if (_vm->iconPos(kItemEmptyTinCan) != -1) {
_vm->removeIcon(kItemEmptyTinCan);
_vm->replaceIcon(kItemCanWithFuel, kItemLargeCans);
}
if ((_vm->_inventoryObj[kItemGasCylinder]._flag & kObjFlagExtra) && (_vm->_inventoryObj[kItemCanWithFuel]._flag & kObjFlagExtra)) {
_vm->_obj[oSERBATOIOA2G]._examine = 670;
_vm->_obj[oSERBATOIOA2G]._action = 671;
} else {
_vm->_obj[oSERBATOIOA2G]._examine = 667;
_vm->_obj[oSERBATOIOA2G]._action = 669;
}
*printSentence = false;
}
break;
case kItemGasCylinder:
if (_vm->_useWith[WITH] == oSERBATOIOA2G) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a2G5METTEBOMBOLA, 0, 0, _vm->_useWith[WITH]);
_vm->_inventoryObj[kItemGasCylinder]._flag |= kObjFlagExtra;
if ((_vm->_inventoryObj[kItemGasCylinder]._flag & kObjFlagExtra) && (_vm->_inventoryObj[kItemCanWithFuel]._flag & kObjFlagExtra)) {
_vm->_obj[oSERBATOIOA2G]._examine = 670;
_vm->_obj[oSERBATOIOA2G]._action = 671;
} else {
_vm->_obj[oSERBATOIOA2G]._examine = 668;
_vm->_obj[oSERBATOIOA2G]._action = 669;
}
*printSentence = false;
}
break;
case kItemFlare:
if ((_vm->_useWith[WITH] == oSERBATOIOA2G) && (_vm->_inventoryObj[kItemGasCylinder]._flag & kObjFlagExtra) && (_vm->_inventoryObj[kItemCanWithFuel]._flag & kObjFlagExtra)) {
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, kRoom2GV, 0, 0, _vm->_useWith[WITH]);
_vm->removeIcon(kItemFlare);
*printSentence = false;
}
break;
case kItemMicrowaveGun:
if (_vm->_useWith[WITH] == oDINOSAURO2E) {
_vm->_dialogMgr->playDialog(dF2E2);
_vm->setObjectVisible(oDINOSAURO2E, false);
_vm->setObjectAnim(oCATWALKA2E, a2E2PRIMAPALLONTANANDO);
_vm->_animMgr->_animTab[aBKG2E]._flag |= SMKANIM_OFF2;
*printSentence = false;
}
break;
case kItemPincers:
case kItemMagneticBar:
if (_vm->_useWith[WITH] == oCATENAT21) {
if (_vm->_room[_vm->_curRoom]._flag & kObjFlagExtra) {
if (_vm->_useWith[USED] == kItemPincers)
_vm->_dialogMgr->playDialog(dF212B);
else
_vm->_dialogMgr->playDialog(dF212);
*printSentence = false;
} else {
if (_vm->_useWith[USED] == kItemPincers)
_vm->_dialogMgr->playDialog(dF213B);
else
_vm->_dialogMgr->playDialog(dF213);
*printSentence = false;
}
} else if ((_vm->_useWith[WITH] == oDOORC33) && (_vm->_useWith[USED] == kItemMagneticBar)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a333LOSEBAR, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oSNAKEU52) && (_vm->_useWith[USED] == kItemPincers)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a527, 0, 0, _vm->_useWith[WITH]);
_vm->setObjectAnim(oSCAVO51, a516);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oSERPENTEA52) && (_vm->_useWith[USED] == kItemPincers)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a528, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oSERPENTEB52) && (_vm->_useWith[USED] == kItemPincers) && (_vm->iconPos(kItemSnakeHead) == -1)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a523, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
}
break;
case kItemWorkingBulb:
if (_vm->_useWith[WITH] == oPORTALAMPADE29) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a293AVVITALAMPADINA, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
}
break;
case kItemEmptyBeerCan:
if ((_vm->_useWith[WITH] == oBRACIERES28) && (_vm->_obj[oBRACIERES28]._flag & kObjFlagExtra)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a286, 0, 0, _vm->_useWith[WITH]);
_vm->_obj[oBRACIERES28]._examine = 456;
*printSentence = false;
} else
*printSentence = true;
break;
case kItemElevatorRemoteControl:
if (_vm->_useWith[WITH] == oTASTO2F) {
if (_vm->isObjectVisible(oASCENSORE2F)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a2F10PANNELLOSICHIUDE, 0, 0, _vm->_useWith[WITH]);
_vm->setObjectAnim(oBIDONE2F, a2F5CFRUGABIDONE);
} else {
if (!(_vm->_inventoryObj[kItemElevatorRemoteControl]._flag & kObjFlagExtra))
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a2F9PPANNELLOSIAPRE, 0, 0, _vm->_useWith[WITH]);
else
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a2F9PANNELLOSIAPRE, 0, 0, _vm->_useWith[WITH]);
_vm->_inventoryObj[kItemElevatorRemoteControl]._flag |= kObjFlagExtra;
_vm->setObjectAnim(oBIDONE2F, a2F5FRUGABIDONE);
}
*printSentence = false;
}
break;
case kItemDamagedMinicom:
if (_vm->_useWith[WITH] == oSERRATURA33) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a338POSASAM, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
}
break;
case kItemMakeshiftTorch:
if ((_vm->_useWith[WITH] == oSENSOREV32) && _vm->isObjectVisible(oFILOTC31)) {
_vm->setObjectVisible(oPANNELLOMA31, true);
_vm->setObjectVisible(oPANNELLOM31, false);
_vm->_obj[oPANNELLOMA31]._examine = 717;
_vm->_obj[oPANNELLOMA31]._action = 718;
_vm->setObjectVisible(oCORPO31, true);
_vm->setObjectVisible(od31TO35, true);
_vm->setObjectVisible(omd31TO35, true);
_vm->setObjectVisible(oMONTACARICHI31, true);
_vm->setObjectVisible(oPANNELLO31, false);
_vm->setObjectVisible(oPANNELLON31, false);
_vm->_room[kRoom32]._flag |= kObjFlagExtra;
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, kRoom31, 0, 11, _vm->_useWith[WITH]);
*printSentence = false;
}
break;
case kItemProjector:
if (_vm->_useWith[WITH] == oPRESA35) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a351PROVAPROIETTOREPRESA, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
} else if (_vm->_useWith[WITH] == oTRIPLA35) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a355ATTPROIETTORETRIPLAEPRESA, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oRIBELLEA35)) {
*printSentence = false;
_vm->_textMgr->CharacterSay(1578);
}
break;
case kItemProjector2:
if (_vm->_useWith[WITH] == oPRESA35) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a352ATTPROIETTOREETRIPLAPRESA, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oRIBELLEA35)) {
*printSentence = false;
_vm->_textMgr->CharacterSay(1590);
}
break;
case kItemThreeWayAdapter:
if (_vm->_useWith[WITH] == oPRESA35) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a353ATTACCATRIPLAPRESA, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
}
break;
case kItemLaserGun:
if (_vm->_useWith[WITH] == oFRONTOFFICEC35) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a3511APRESPORTELLO, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
} else if (_vm->_useWith[WITH] == oSNAKEU52) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a522, 0, 0, _vm->_useWith[WITH]);
_vm->setObjectAnim(oSCAVO51, a516);
*printSentence = false;
} else if (_vm->_useWith[WITH] == oLUCCHETTO53) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a532, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oDOORMC36) || (_vm->_useWith[WITH] == oPORTALC36) || (_vm->_useWith[WITH] == oSCANNERMA36) || (_vm->_useWith[WITH] == oSCANNERLA36) || (_vm->_useWith[WITH] == oCASSETTOC36) || (_vm->_useWith[WITH] == oRETE52) || (_vm->_useWith[WITH] == oTELECAMERA52) || (_vm->_useWith[WITH] == oSERPENTET52) || (_vm->_useWith[WITH] == oLAGO53)) {
*printSentence = false;
_vm->_textMgr->CharacterSay(1597);
}
break;
case kItemDeskKey:
if (_vm->_useWith[WITH] == oCASSETTOC36) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a364APRECASSETTO, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oFRONTOFFICEC35) || (_vm->_useWith[WITH] == oDOORC54) || (_vm->_useWith[WITH] == oDOOR57C55) || (_vm->_useWith[WITH] == oDOOR58C55) || (_vm->_useWith[WITH] == oDOORS56) || (_vm->_useWith[WITH] == oDOORS57)) {
*printSentence = false;
_vm->_textMgr->CharacterSay(1594);
}
break;
case kItemStethoscope:
if (_vm->_useWith[WITH] == oPORTALC36) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a368USASTETOSCOPIO, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
}
break;
case kItemSecurityCard:
if ((_vm->_useWith[WITH] == oFRONTOFFICEA35) && !(_vm->_obj[oFRONTOFFICEA35]._flag & kObjFlagExtra)) {
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, kRoom35P, 0, 10, _vm->_useWith[WITH]);
_vm->removeIcon(kItemSecurityCard);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oFRONTOFFICEA35) && (_vm->_obj[oFRONTOFFICEA35]._flag & kObjFlagExtra)) {
_vm->_textMgr->CharacterSay(1844);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oSLOTA58) || (_vm->_useWith[WITH] == oSLOTB58)) {
*printSentence = false;
_vm->_textMgr->CharacterSay(1602);
}
break;
case kItemHalfCreditCoin:
if ((_vm->_useWith[WITH] == oFESSURA41) &&
((_vm->_obj[oFUCILE42]._anim != 0) && (_vm->_obj[oFUCILE42]._anim != a428) && (_vm->_obj[oFUCILE42]._anim != a429))) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a412, 0, 0, _vm->_useWith[WITH]);
if (_vm->isObjectVisible(oZAMPA41))
_vm->setObjectAnim(oSLOT41, a417);
else if (_slotMachine41Counter <= 2)
_vm->setObjectAnim(oSLOT41, a414);
else
_vm->_textMgr->CharacterSay(2015);
_slotMachine41Counter++;
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oFESSURA41) && ((_vm->_obj[oFUCILE42]._anim == 0) || (_vm->_obj[oFUCILE42]._anim == a428) || (_vm->_obj[oFUCILE42]._anim == a429))) {
_vm->_textMgr->CharacterSay(2010);
*printSentence = false;
} else if (_vm->_useWith[WITH] == oFESSURA42) {
_vm->_textMgr->CharacterSay(924);
*printSentence = false;
} else if (_vm->_useWith[WITH] == oCAMPANA4U) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a4U3, 0, 0, _vm->_useWith[WITH]);
_vm->_obj[oCAMPANA4U]._flag |= kObjFlagExtra;
if ((_vm->_obj[oCAMPANA4U]._flag & kObjFlagExtra) && (_vm->_inventoryObj[kItemIronBullet1]._flag & kObjFlagExtra)) {
_vm->_obj[oCAMPANA4U]._examine = 1202;
_vm->_obj[oCAMPANA4U]._action = 1203;
} else
_vm->_obj[oCAMPANA4U]._examine = 1200;
*printSentence = false;
}
break;
case kItemHammer:
if ((_vm->_useWith[WITH] == oRAGNO41) && !(_vm->_obj[oRAGNO41]._flag & kObjFlagExtra)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a416, 0, 0, _vm->_useWith[WITH]);
_vm->_obj[oRAGNO41]._flag |= kObjFlagExtra;
_vm->setObjectAnim(oRAGNO41, 0);
if (_vm->_obj[oSLOT41]._anim == a414)
_vm->setObjectAnim(oSLOT41, a417);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oSLOT41) || (_vm->_useWith[WITH] == oVETRINETTA42) || (_vm->_useWith[WITH] == oTAMBURO43) || (_vm->_useWith[WITH] == oSFIATO45) || (_vm->_useWith[WITH] == oDOORC4A) || (_vm->_useWith[WITH] == oDOORC4B) || (_vm->_useWith[WITH] == oSERRATURA4B) || (_vm->_useWith[WITH] == oLICANTROPO4P)) {
*printSentence = false;
_vm->_textMgr->CharacterSay(1619);
}
break;
case kItemHalfCreditCoins:
if ((_vm->_useWith[WITH] == oFESSURA42) && (_vm->_obj[oFUCILE42]._anim == a427)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a421, 0, 0, _vm->_useWith[WITH]);
if (_vm->isObjectVisible(oPOLTIGLIA42))
_vm->setObjectAnim(oFUCILE42, a429);
else
_vm->setObjectAnim(oFUCILE42, a428);
*printSentence = false;
}
break;
case kItemMud:
if (_vm->_useWith[WITH] == oGUIDE42) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a423, 0, 0, _vm->_useWith[WITH]);
if (_vm->_obj[oFUCILE42]._anim != a427)
_vm->setObjectAnim(oFUCILE42, a429);
*printSentence = false;
}
break;
case kItemClub:
if ((_vm->_useWith[WITH] == oTAMBURO43) && !(_vm->_obj[oTAMBURO43]._flag & kObjFlagExtra)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a435, 0, 0, _vm->_useWith[WITH]);
_vm->_obj[oTAMBURO43]._flag |= kObjFlagExtra;
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oDOORC4B) || (_vm->_useWith[WITH] == oSERRATURA4B) || (_vm->_useWith[WITH] == oLICANTROPO4P)) {
*printSentence = false;
_vm->_textMgr->CharacterSay(1679);
}
break;
case kItemPuppet:
if (_vm->_useWith[WITH] == oCASSETTOAA44) {
_vm->replaceIcon(kItemPuppet, kItemPuppetRemoteControl);
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a442, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
}
break;
case kItemAsbestosCloth:
if (_vm->_useWith[WITH] == oMANOPOLAR45) {
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, kRoom45S, 0, 2, _vm->_useWith[WITH]);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oCAMPANA4U) && (_vm->_inventoryObj[kItemIronBullet1]._flag & kObjFlagExtra) && (_vm->_obj[oCAMPANA4U]._flag & kObjFlagExtra)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a4U5, 0, 0, _vm->_useWith[WITH]);
_vm->_obj[oCAMPANA4U]._examine = 1204;
_vm->_obj[oCAMPANA4U]._action = 1205;
*printSentence = false;
} else if (_vm->_useWith[WITH] == oCAMPANA4U) {
_vm->_textMgr->CharacterSay(1713);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oSPIDER46) || (_vm->_useWith[WITH] == oLICANTROPO4P)) {
*printSentence = false;
_vm->_textMgr->CharacterSay(1711);
}
break;
case kItemSkull:
if (_vm->_useWith[WITH] == oTILE48) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a4810, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
}
break;
case kItemTorch:
if (_vm->_useWith[WITH] == oSKULL48) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a4811, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oBOILERS45) || (_vm->_useWith[WITH] == oSPIDER46)) {
*printSentence = false;
_vm->_textMgr->CharacterSay(1640);
}
break;
case kItemMatchInPacket:
if (_vm->_useWith[WITH] == oTORCHS48) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a4812, 0, 0, _vm->_useWith[WITH]);
_vm->_obj[oTORCHS48]._lim = Common::Rect(0, 0, 0, 0);
*printSentence = false;
}
break;
case kItemShaft:
if (_vm->_useWith[WITH] == oSUNDIAL49) {
_vm->removeIcon(kItemShaft);
_vm->StartCharacterAction(a491, kRoom49M, 1, 0);
*printSentence = false;
}
break;
case kItemLoadedPistol:
if ((_vm->_useWith[WITH] == oLICANTROPO4P) && (_vm->_inventoryObj[kItemLoadedPistol]._flag & kObjFlagExtra)) {
_vm->replaceIcon(kItemLoadedPistol, kItemPiratePistol);
_vm->setObjectVisible(oLICANTROPO4P, false);
_vm->setObjectVisible(oLICANTROPOM4P, true);
_vm->setObjectVisible(oSANGUE4P, true);
_vm->_room[kRoom4P]._flag |= kObjFlagExtra;
_vm->read3D("4p2.3d"); // after werewolf
_vm->_animMgr->_animTab[aBKG4P]._flag |= SMKANIM_OFF1;
_vm->_dialogMgr->playDialog(dF4P2);
*printSentence = false;
} else if (_vm->_useWith[WITH] == oLICANTROPO4P) {
_vm->replaceIcon(kItemLoadedPistol, kItemPiratePistol);
_vm->_dialogMgr->playDialog(dF4P1);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oSPIDER46) || (_vm->_useWith[WITH] == oDOORC4B) || (_vm->_useWith[WITH] == oSERRATURA4B)) {
*printSentence = false;
_vm->_textMgr->CharacterSay(1706);
}
break;
case kItemEmptyGlassJar:
if ((_vm->_useWith[WITH] == oSANGUE4P) || (_vm->_useWith[WITH] == oLICANTROPOM4P)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a4P7, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
}
break;
case kItemBell:
if (_vm->_useWith[WITH] == oPOZZA4U) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a4U2, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
}
break;
case kItemIronBullet1:
case kItemIronBullet2:
if ((_vm->_useWith[WITH] == oCAMPANA4U) && (_vm->_inventoryObj[kItemIronBullet1]._flag & kObjFlagExtra)) {
_vm->_textMgr->CharacterSay(1684);
*printSentence = false;
} else if (_vm->_useWith[WITH] == oCAMPANA4U) {
_vm->removeIcon(_vm->_useWith[USED]);
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a4U4, 0, 0, _vm->_useWith[WITH]);
_vm->_inventoryObj[kItemIronBullet1]._flag |= kObjFlagExtra;
if ((_vm->_obj[oCAMPANA4U]._flag & kObjFlagExtra) && (_vm->_inventoryObj[kItemIronBullet1]._flag & kObjFlagExtra)) {
_vm->_obj[oCAMPANA4U]._examine = 1202;
_vm->_obj[oCAMPANA4U]._action = 1203;
} else
_vm->_obj[oCAMPANA4U]._examine = 1201;
*printSentence = false;
}
break;
case kItemBagWithPapaverine:
if ((_vm->_useWith[WITH] == oCHOCOLATES4A) && (_vm->_animMgr->smkCurFrame(kSmackerBackground) < 370 || _vm->_animMgr->smkCurFrame(kSmackerBackground) > 480)) {
_vm->playScript(s4AHELLEN);
_vm->setObjectAnim(oPULSANTE4A, a4A3);
*printSentence = false;
} else if (_vm->_useWith[WITH] == oCHOCOLATES4A) {
_vm->setObjectAnim(oPULSANTE4A, a4A3);
*printSentence = false;
_vm->_obj[oCHOCOLATES4A]._flag |= kObjFlagExtra;
}
break;
case kItemJarWithWerewolfBlood:
if (_vm->_useWith[WITH] == oSERRATURA4B) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a4B4, 0, 0, _vm->_useWith[WITH]);
_vm->setObjectAnim(oDOORC4B, a4B5);
*printSentence = false;
}
break;
case kItemMeetingRoomSlide1:
if ((_vm->_useWith[WITH] == oPROIETTORE4B) && (_vm->_obj[oPROIETTORE4B]._anim < a4B9A)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a4B6A, 0, 0, _vm->_useWith[WITH]);
_vm->setObjectAnim(oPROIETTORE4B, a4B9A);
*printSentence = false;
}
break;
case kItemMeetingRoomSlide2:
if ((_vm->_useWith[WITH] == oPROIETTORE4B) && (_vm->_obj[oPROIETTORE4B]._anim < a4B9A)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a4B6B, 0, 0, _vm->_useWith[WITH]);
_vm->setObjectAnim(oPROIETTORE4B, a4B9B);
*printSentence = false;
}
break;
case kItemHugsOfficeSlide:
if ((_vm->_useWith[WITH] == oPROIETTORE4B) && (_vm->_obj[oPROIETTORE4B]._anim < a4B9A)) {
//
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a4B6C, 0, 0, _vm->_useWith[WITH]);
_vm->setObjectAnim(oPROIETTORE4B, a4B9C);
*printSentence = false;
}
break;
case kItemTurtleEgg:
if ((_vm->_useWith[WITH] == oRETE52) || (_vm->_useWith[WITH] == oSERPENTET52)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a521, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
}
break;
case kItemSnakeHead:
if (_vm->_useWith[WITH] == oLAGO53) {
*printSentence = false;
if (!_vm->isObjectVisible(oLUCCHETTO53)) {
_vm->StartCharacterAction(a533, kRoom54, 11, 0);
_vm->removeIcon(_vm->_useWith[USED]);
} else if (_vm->_useWith[USED] != kItemSnakeTail) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a534, 0, 0, _vm->_useWith[WITH]);
_vm->removeIcon(_vm->_useWith[USED]);
_vm->_obj[oLAGO53]._examine = 1237;
} else
_vm->_textMgr->CharacterSay(1740);
}
break;
case kItemSnakeTail:
if (_vm->_useWith[WITH] == oLAGO53) {
*printSentence = false;
if (!_vm->isObjectVisible(oLUCCHETTO53)) {
_vm->StartCharacterAction(a533C, kRoom54, 11, 0);
_vm->removeIcon(_vm->_useWith[USED]);
} else if (_vm->_useWith[USED] != kItemSnakeTail) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a534, 0, 0, _vm->_useWith[WITH]);
_vm->removeIcon(_vm->_useWith[USED]);
_vm->_obj[oLAGO53]._examine = 1237;
} else
_vm->_textMgr->CharacterSay(1740);
}
break;
case kItemSoapPowder:
if (_vm->_useWith[WITH] == oSECCHIOA54) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a543, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
}
break;
case kItemLargeCans:
if (_vm->_useWith[WITH] == oLAVATRICEF54) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a546, 0, 0, _vm->_useWith[WITH]);
_vm->setObjectAnim(oLAVATRICEL54, a547);
*printSentence = false;
}
break;
case kItemGuardKeys:
if (_vm->_useWith[WITH] == oDOORS56) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a563, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
} else if (_vm->_useWith[WITH] == oDOOR57C55) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a551, kRoom57, 17, _vm->_useWith[WITH]);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oDOOR58C55) && (!(_vm->_dialogMgr->_choice[871]._flag & kObjFlagDone) || (_vm->_dialogMgr->_choice[901]._flag & kObjFlagDone))) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a552, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oDOOR58C55) && (_vm->_dialogMgr->_choice[871]._flag & kObjFlagDone)) {
_vm->_textMgr->CharacterSay(1287);
*printSentence = false;
}
break;
case kItemVideoRecorder:
if ((_vm->_useWith[WITH] == oKEYBOARD56) && (_vm->_dialogMgr->_choice[260]._flag & kObjFlagDone) && !(_vm->_dialogMgr->_choice[262]._flag & kObjFlagDone) && (_vm->_inventoryObj[kItemVideoRecorder]._examine != 1752)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a566, 0, 0, _vm->_useWith[WITH]);
_vm->_dialogMgr->_choice[262]._flag &= ~DLGCHOICE_HIDE;
_vm->_inventoryObj[kItemVideoRecorder]._examine = 1752;
*printSentence = false;
} else if ((_vm->_useWith[WITH] == oKEYBOARD56) && (_vm->_inventoryObj[kItemVideoRecorder]._examine == 1752)) {
_vm->_textMgr->CharacterSay(1753);
*printSentence = false;
} else
*printSentence = true;
break;
case kItemTester:
if ((_vm->_useWith[WITH] == oPANNELLOA) && (_vm->_dialogMgr->_choice[856]._flag & kObjFlagDone)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a569, 0, 0, _vm->_useWith[WITH]);
_vm->_obj[oPANNELLOA]._flag |= kObjFlagExtra;
*printSentence = false;
}
break;
case kItemParallelCutter:
if ((_vm->_useWith[WITH] == oPANNELLOA) && (_vm->_obj[oPANNELLOA]._flag & kObjFlagExtra)) {
_vm->_dialogMgr->playDialog(dF562);
_vm->setObjectVisible(oPANNELLOA, false);
_vm->setObjectVisible(oCAVOTAGLIATO56, true);
_vm->setObjectVisible(oDOOR58C55, true);
_vm->_pathFind->setPosition(6);
_vm->removeIcon(kItemParallelCutter);
*printSentence = false;
} else if (_vm->_useWith[WITH] == oPANNELLOA) {
_vm->_textMgr->CharacterSay(2012);
*printSentence = false;
}
break;
case kItemSurgicalGloves:
if (_vm->_useWith[WITH] == oBOMBOLA57) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a575, 0, 0, _vm->_useWith[WITH]);
*printSentence = false;
}
break;
case kItemFloatingPoisonSyringe:
if ((_vm->_useWith[WITH] == oWINDOWA5A) && (_vm->_dialogMgr->_choice[871]._flag & kObjFlagDone) && !(_vm->_dialogMgr->_choice[286]._flag & kObjFlagDone)) {
_vm->removeIcon(kItemFloatingPoisonSyringe);
_vm->_dialogMgr->playDialog(dC5A1);
_vm->setObjectAnim(oWINDOWA58, a587);
*printSentence = false;
_vm->_room[kRoom5A]._flag |= kObjFlagExtra;
} else if ((_vm->_useWith[WITH] == oWINDOWA5A) && (_vm->_dialogMgr->_choice[871]._flag & kObjFlagDone)) {
_vm->removeIcon(kItemFloatingPoisonSyringe);
_vm->_dialogMgr->playDialog(dF5A1);
_vm->setObjectAnim(oWINDOWA58, a587);
*printSentence = false;
}
break;
default:
*updateInventory = false;
break;
}
}
bool LogicManager::useScreenWithScreen() {
bool printSentence = true;
switch (_vm->_useWith[USED]) {
case oRAMPINO21:
if (_vm->_useWith[WITH] == oTUBO21) {
_vm->_dialogMgr->playDialog(dF211);
_vm->setRoom(kRoom21, true);
_vm->_animMgr->_animTab[aBKG21]._flag &= ~SMKANIM_OFF1;
_vm->setObjectVisible(oRAMPINO21, false);
_vm->setObjectVisible(oTUBO21, false);
_vm->setObjectVisible(oCATENAT21, true);
printSentence = false;
}
break;
case oCAVIE23:
if (_vm->_useWith[WITH] == oCAMPO23) {
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, kRoom23B, 0, 0, _vm->_useWith[WITH]);
printSentence = false;
} else {
_vm->StartCharacterAction(hBOH, 0, 0, 0);
printSentence = false;
}
break;
case oTUBOP33:
if (_vm->_useWith[WITH] == oTUBOF33) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a337PRENDETUBO, 0, 0, _vm->_useWith[WITH]);
_vm->_obj[oTUBOF34]._examine = 1832;
_vm->_obj[oTUBOFT34]._examine = 773;
printSentence = false;
}
break;
case oTUBET33:
if (((_vm->_useWith[WITH] == oSAMA33) || (_vm->_useWith[WITH] == oSERRATURA33 && _vm->isObjectVisible(oSAMA33))) && _vm->isObjectVisible(oVALVOLA34)) {
_vm->_dialogMgr->playDialog(dF331);
_vm->_pathFind->setPosition(10);
_vm->setObjectVisible(oBOTOLAC33, false);
_vm->setObjectVisible(oSERRATURA33, false);
_vm->setObjectVisible(oBOTOLAA33, true);
_vm->setObjectVisible(oBRUCIATURA33, true);
_vm->setObjectVisible(oSERRATURAF33, true);
_vm->setObjectVisible(oSAMD33, true);
_vm->setObjectVisible(oTUBOS33, true);
_vm->setObjectVisible(oBOTOLAC32, false);
_vm->setObjectVisible(oBOTOLAB32, true);
_vm->setObjectVisible(oBOTOLAA32, true);
_vm->setObjectAnim(oPULSANTI32, 0);
_vm->setObjectVisible(oSIGARO31, true);
_vm->setObjectAnim(oPANNELLOM31, a314APREPANNELLO);
_vm->_obj[oPANNELLOM31]._examine = 713;
_vm->_obj[oPANNELLOM31]._action = 714;
_vm->_obj[oPANNELLOM31]._flag |= kObjFlagRoomOut;
_vm->setObjectVisible(oPANNELLON31, true);
_vm->setObjectVisible(oMANOMETROC34, true);
_vm->setObjectVisible(oMANOMETRO34, false);
_vm->_obj[oMANOMETROC34]._examine = 804;
_vm->setObjectAnim(oVALVOLAC34, 0);
_vm->setObjectAnim(oVALVOLA34, 0);
_vm->_obj[oVALVOLAC34]._action = 1831;
_vm->_obj[oVALVOLA34]._action = 1831;
_vm->_obj[oTUBOF34]._examine = 1832;
_vm->_obj[oTUBOFT34]._examine = 784;
printSentence = false;
}
break;
case oFILOS31:
if (_vm->_useWith[WITH] == oCONTATTOP31) {
_vm->setObjectVisible(oFILOS31, false);
_vm->setObjectVisible(oCONTATTOP31, false);
_vm->setObjectVisible(oFILOTC31, true);
_vm->_textMgr->CharacterSay(746);
printSentence = false;
}
break;
default:
break;
}
return printSentence;
}
void LogicManager::roomOut(uint16 curObj, uint16 *action, uint16 *pos) {
*action = 0;
*pos = 0;
if (curObj == oSCALA32 && _vm->isObjectVisible(oBOTOLAC32)) {
_vm->_textMgr->CharacterSay(_vm->_obj[curObj]._action);
_vm->_graphicsMgr->showCursor();
} else if (_vm->isDemo() && curObj == oFINGERPADP16) {
_vm->demoOver();
} else {
*action = _vm->_obj[curObj]._anim;
*pos = _vm->_obj[curObj]._ninv;
}
}
bool LogicManager::mouseExamine(uint16 curObj) {
bool retVal = false;
switch (curObj) {
case oMAPPA12:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1211OSSERVAMAPPAPALAZZO, 0, 0, curObj);
if (!_vm->isDemo()) {
_vm->_dialogMgr->_choice[4]._flag &= ~DLGCHOICE_HIDE;
_vm->_dialogMgr->_choice[18]._flag &= ~DLGCHOICE_HIDE;
_vm->_dialogMgr->_choice[33]._flag &= ~DLGCHOICE_HIDE;
}
retVal = false;
break;
case oDOORA13:
_vm->setObjectVisible(oBOX12, true);
retVal = true;
break;
case oPANELA12:
case oFUSIBILE12:
if (_vm->isObjectVisible(oFUSIBILE12))
_vm->setObjectVisible(oFUSE12CU, true);
else
_vm->setObjectVisible(oFUSE12CU, false);
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, kRoom12CU, 0, 0, curObj);
_vm->_closeUpObj = curObj;
break;
case oLETTERA13:
case oPENPADA13:
if (_vm->isObjectVisible(oLETTERA13))
_vm->setObjectVisible(oLETTER13CU, true);
else
_vm->setObjectVisible(oLETTER13CU, false);
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, kRoom13CU, 0, 0, curObj);
_vm->_closeUpObj = curObj;
break;
case oCUCININO14:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1413OSSERVAPIANOCOTTURA, 0, 0, curObj);
retVal = false;
break;
case oSCAFFALE14:
if (!_vm->isObjectVisible(oDOORR14))
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a145ESAMINASCAFFALE, 0, 0, curObj);
else
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a145CESAMINASCAFFALE, 0, 0, curObj);
retVal = false;
break;
case oTAVOLINOPP14:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1412SPOSTASEDIA, 0, 0, curObj);
retVal = false;
break;
case oBOCCETTE15:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1510TOCCABOCCETTE, 0, 0, curObj);
retVal = false;
break;
case oSPECCHIO15:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1511SISPECCHIA, 0, 0, curObj);
retVal = false;
break;
case oMONITORSA16:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1614GUARDAMONITORS14, 0, 0, curObj);
retVal = false;
break;
case oWINDOWA15:
if (_vm->isObjectVisible(oTAPPARELLAA15))
_vm->_textMgr->CharacterSay(1999);
else
retVal = true;
break;
case oMONITORSP16:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1615GUARDAMONITORS15, 0, 0, curObj);
retVal = false;
break;
case oCARTACCE16:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1613GUARDACARTACCE, 0, 0, curObj);
retVal = false;
break;
case oMAPPA16:
if (_vm->iconPos(kItemNoteRotmall17) != -1)
_vm->_obj[oMAPPA16]._flag |= kObjFlagExtra;
retVal = true;
break;
case oSCATOLONE17:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a177SICHINA, 0, 0, curObj);
retVal = false;
break;
case oMURALES17:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a179MUOVETESTA, 0, 0, curObj);
retVal = false;
break;
case oSCHERMO18:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a181ESAMINACARTELLONE, 0, 0, curObj);
retVal = false;
break;
case oVETRINA1A:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1A1ESAMINAVETRINA, 0, 0, curObj);
retVal = false;
break;
case oTESSERA1A:
if (((_vm->_dialogMgr->_choice[151]._flag & kObjFlagDone) || (_vm->_dialogMgr->_choice[152]._flag & kObjFlagDone)) && !(_vm->_dialogMgr->_choice[183]._flag & kObjFlagDone))
_vm->_dialogMgr->_choice[183]._flag &= ~DLGCHOICE_HIDE;
_vm->_obj[oTESSERA1A]._flag |= kObjFlagExtra;
retVal = true;
break;
case oCARTACCE1B:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1B8FRUGACARTACCIE, 0, 0, curObj);
retVal = false;
break;
case oBIDONE1B:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1B10GUARDABIDONE, 0, 0, curObj);
retVal = false;
break;
case oGRATA1C:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1C2GUARDAGRATA, 0, 0, curObj);
retVal = false;
break;
case oSCAFFALE1D:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1D8SALESGABELLO, 0, 0, curObj);
retVal = false;
break;
case oBARILOTTO1D:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1D7SPINGEBARILOTTO, 0, 0, curObj);
retVal = false;
break;
case oCASSA1D:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1D10ESAMINABOTTIGLIE, 0, 0, curObj);
retVal = false;
break;
case oSCATOLETTA23:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a2310, 0, 0, curObj);
retVal = false;
break;
case oPALMA26:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a262, 0, 0, curObj);
retVal = false;
break;
case oINSEGNA26:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a263, 0, 0, curObj);
retVal = false;
break;
case oTEMPIO28:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a2810, 0, 0, curObj);
retVal = false;
break;
case oSERPENTET28:
case oSERPENTEA28:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a2811, 0, 0, curObj);
retVal = false;
break;
case oSERPENTE2B:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a2B11ESAMINASERPENTE, 0, 0, curObj);
retVal = false;
break;
case oLEOPARDO2B:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a2B9ESAMINALEOPARDO, 0, 0, curObj);
retVal = false;
break;
case oPELLICANO2B:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a2B10ESAMINAPELLICANO, 0, 0, curObj);
retVal = false;
break;
case oBACHECA2B:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a2B13OSSERVAREFARFALLE, 0, 0, curObj);
retVal = false;
break;
case oROBOT2F:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a2F6TOCCADINOSAURO, 0, 0, curObj);
retVal = false;
break;
case oCREPACCIO2E:
if (_vm->_room[kRoom2E]._flag & kObjFlagExtra)
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a2E7GUARDACREPACCIODILA, 0, 0, curObj);
else
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a2E6GUARDACREPACCIODIQUA, 0, 0, curObj);
retVal = false;
break;
case oGENERATORE34:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a347ESAMINAGENERATORE, 0, 0, curObj);
retVal = false;
break;
case oTUBOF33:
if (_vm->isObjectVisible(oVALVOLA34) && _vm->_obj[oVALVOLA34]._anim)
_vm->_textMgr->CharacterSay(2000);
else
_vm->_textMgr->CharacterSay(_vm->_obj[curObj]._examine);
retVal = false;
break;
case oTUBET33:
if (_vm->isObjectVisible(oVALVOLA34) && _vm->_obj[oVALVOLA34]._anim)
_vm->_textMgr->CharacterSay(2001);
else
_vm->_textMgr->CharacterSay(_vm->_obj[curObj]._examine);
retVal = false;
break;
case oTUBOA34:
if (_vm->isObjectVisible(oVALVOLA34) && _vm->_obj[oVALVOLA34]._anim)
_vm->_textMgr->CharacterSay(2002);
else
_vm->_textMgr->CharacterSay(_vm->_obj[curObj]._examine);
retVal = false;
break;
case oTUBOF34:
if (_vm->isObjectVisible(oVALVOLA34) && _vm->_obj[oVALVOLA34]._anim)
_vm->_textMgr->CharacterSay(2000);
else
_vm->_textMgr->CharacterSay(_vm->_obj[curObj]._examine);
retVal = false;
break;
case oTUBOFT34:
if (_vm->isObjectVisible(oVALVOLA34) && _vm->_obj[oVALVOLA34]._anim)
_vm->_textMgr->CharacterSay(2001);
else
_vm->_textMgr->CharacterSay(_vm->_obj[curObj]._examine);
retVal = false;
break;
case oCASSE35:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a3522ESAMINACASSE, 0, 0, curObj);
retVal = false;
break;
case oSCAFFALE35:
if (_vm->_room[kRoom35]._flag & kObjFlagExtra)
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a3517ESAMINACIANFRUSAGLIE, 0, 0, curObj);
else
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a3517AESAMINACIANFRUSAGLIE, 0, 0, curObj);
retVal = false;
break;
case oGIORNALE35:
if (_vm->_room[kRoom35]._flag & kObjFlagExtra) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a3521LEGGEGIORNALE, 0, 0, curObj);
retVal = false;
}
break;
case oSCAFFALE36:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, _vm->_obj[oSCAFFALE36]._anim, 0, 0, curObj);
retVal = false;
break;
case oFESSURA41:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a411, 0, 0, curObj);
retVal = false;
break;
case oCARTELLOV42:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a424, 0, 0, curObj);
retVal = false;
break;
case oCARTELLOF42:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a426, 0, 0, curObj);
retVal = false;
break;
case oCAMPANAT43:
if (_vm->isObjectVisible(oMARTELLOR43))
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a431R, 0, 0, curObj);
else
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a431, 0, 0, curObj);
retVal = false;
break;
case oTAMBURO43:
if (_vm->isObjectVisible(oMARTELLOR43))
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a432R, 0, 0, curObj);
else
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a432, 0, 0, curObj);
retVal = false;
break;
case oRAGNATELA45:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a451, 0, 0, curObj);
retVal = false;
break;
case oQUADROS4A:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a4A5, 0, 0, curObj);
retVal = false;
break;
case oCARTELLO55:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a5511, 0, 0, curObj);
retVal = false;
break;
case oEXIT12CU:
case oEXIT13CU:
case oEXIT2BL:
case oEXIT36F:
case oEXIT41D:
case oEXIT4CT:
case oEXIT58M:
case oEXIT59L:
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, _vm->_obj[curObj]._goRoom, 0, 0, curObj);
break;
case oEXIT58T:
_count58 = 0;
for (int a = 0; a < 6; a++)
_vm->setObjectVisible(oLED158 + a, false);
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, _vm->_obj[oEXIT58T]._goRoom, 0, 0, curObj);
break;
default:
retVal = true;
break;
}
return retVal;
}
bool LogicManager::mouseOperate(uint16 curObj) {
bool retVal = false;
if (!curObj)
warning("doMouseOperate");
switch (curObj) {
case oFAX17:
if (_vm->_obj[oSCALA16]._anim) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, _vm->_obj[curObj]._anim, 0, 0, curObj);
_vm->_inventoryObj[kItemMinicom]._action = 1416;
retVal = false;
}
break;
case ocPOLIZIOTTO16:
case oSCALA16:
if (!(_vm->_obj[oSCALA16]._flag & kObjFlagExtra)) {
_vm->_obj[oSCALA16]._flag |= kObjFlagExtra;
_vm->_dialogMgr->_choice[61]._flag &= ~DLGCHOICE_HIDE;
_vm->_dialogMgr->playDialog(dPOLIZIOTTO16);
_vm->_obj[oSCALA16]._action = 166;
_vm->_obj[ocPOLIZIOTTO16]._action = 166;
} else
retVal = true;
break;
case oPANNELLOC12:
if (_vm->_obj[oPANNELLOC12]._flag & kObjFlagExtra) {
if (_vm->isObjectVisible(oASCENSOREC12))
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a128RIUSABOTTONE, 0, 0, curObj);
else
_vm->_textMgr->CharacterSay(24);
} else {
_vm->_obj[oPANNELLOC12]._flag |= kObjFlagExtra;
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, _vm->_obj[curObj]._anim, 0, 0, curObj);
}
break;
case oPANNELLO13:
if (_vm->isObjectVisible(oASCENSOREA13)) {
_vm->_textMgr->CharacterSay(48);
retVal = false;
} else
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, _vm->_obj[curObj]._anim, 0, 0, curObj);
break;
case oPANNELLO16:
if (_vm->isObjectVisible(oASCENSOREA16)) {
_vm->_textMgr->CharacterSay(48);
retVal = false;
} else
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, _vm->_obj[curObj]._anim, 0, 0, curObj);
break;
case oLATTINA13:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a132PRENDELATTINA, 0, 0, curObj);
_vm->addIcon(kItemBeerCan);
break;
case oDOORA13:
if (_vm->_room[kRoom14]._flag & kObjFlagDone) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1312METTELETTERARICALCA, kRoom14, 14, _vm->_useWith[WITH]);
retVal = false;
} else
retVal = true;
break;
case oCESTINO14:
if (_vm->_obj[curObj]._anim) {
if (!_vm->isObjectVisible(oDOORR14))
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, _vm->_obj[curObj]._anim, 0, 0, curObj);
else
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a143CPRENDECREDITCARD, 0, 0, curObj);
_vm->setObjectAnim(curObj, NULL);
} else
retVal = true;
break;
case oTASTOB15:
if (_vm->isObjectVisible(oTAPPARELLAA15)) {
_vm->_textMgr->CharacterSay(_vm->_obj[oTASTOB15]._action);
retVal = false;
} else {
if (!(_vm->_obj[oNASTRO15]._flag & kObjFlagExtra))
_vm->setObjectVisible(oNASTRO15, true);
if (_vm->_obj[curObj]._anim)
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, _vm->_obj[curObj]._anim, 0, 0, curObj);
retVal = false;
}
break;
case oTASTOA15:
if (!_vm->isObjectVisible(oTAPPARELLAA15)) {
_vm->_textMgr->CharacterSay(_vm->_obj[oTASTOA15]._action);
retVal = false;
} else {
_vm->setObjectVisible(oNASTRO15, false);
if (_vm->_obj[curObj]._anim)
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, _vm->_obj[curObj]._anim, 0, 0, curObj);
retVal = false;
}
break;
case oFINGERPADP16:
retVal = true;
break;
case oDOORC18:
if (_vm->_obj[ocGUARD18]._flag & kObjFlagPerson) {
_vm->_dialogMgr->_choice[151]._flag |= DLGCHOICE_HIDE;
_vm->_dialogMgr->_choice[152]._flag &= ~DLGCHOICE_HIDE;
_vm->_dialogMgr->playDialog(dGUARDIAN18);
_vm->_obj[ocGUARD18]._flag &= ~kObjFlagPerson;
_vm->_obj[ocGUARD18]._action = 227;
_vm->_obj[oDOORC18]._action = 220;
} else
retVal = true;
break;
case oGRATA1C:
if (_vm->_obj[oFAX17]._flag & kObjFlagExtra)
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, kRoom21, 0, 10, curObj);
else
retVal = true;
break;
case oBOTOLAC1B:
if ((_vm->_obj[oBOTOLAC1B]._anim == a1B3APREBOTOLA) && _vm->isObjectVisible(oTOMBINOA1B))
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1B3AAPREBOTOLA, 0, 0, curObj);
else if (_vm->_obj[oBOTOLAC1B]._anim == a1B3APREBOTOLA)
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1B3APREBOTOLA, 0, 0, curObj);
else
retVal = true;
break;
case oARMADIETTORC22:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, _vm->_obj[curObj]._anim, 0, 0, curObj);
_vm->setObjectAnim(oMANIGLIONE22, a227A);
_vm->setObjectAnim(oMANIGLIONEO22, a229A);
_vm->setObjectAnim(od22TO29, a2214A);
_vm->setObjectAnim(od22TO29I, a2215A);
break;
case oARMADIETTORA22:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, _vm->_obj[curObj]._anim, 0, 0, curObj);
_vm->setObjectAnim(oMANIGLIONE22, a227);
_vm->setObjectAnim(oMANIGLIONEO22, a229);
_vm->setObjectAnim(od22TO29, a2214);
_vm->setObjectAnim(od22TO29I, a2215);
break;
case oCATENAT21:
if ((_vm->iconPos(kItemMagneticBar) != -1) && ((_vm->_dialogMgr->_choice[436]._flag & kObjFlagDone) || (_vm->_dialogMgr->_choice[466]._flag & kObjFlagDone))) {
if (_vm->_room[_vm->_curRoom]._flag & kObjFlagExtra) // Go right
_vm->_dialogMgr->playDialog(dF212); // 436
else // Go left
_vm->_dialogMgr->playDialog(dF213); // 466
retVal = false;
} else if ((_vm->_dialogMgr->_choice[451]._flag & kObjFlagDone) || (_vm->_dialogMgr->_choice[481]._flag & kObjFlagDone)) {
if (_vm->_room[_vm->_curRoom]._flag & kObjFlagExtra) // Go right
_vm->_dialogMgr->playDialog(dF212B); // 451
else // Go left
_vm->_dialogMgr->playDialog(dF213B); // 481
retVal = false;
} else
retVal = true;
break;
case oPULSANTEACS2D:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, _vm->_obj[curObj]._anim, 0, 0, curObj);
_vm->setObjectAnim(oPULSANTEBC2D, a2D7SCHIACCIATASTO6V);
break;
case oPULSANTEACA2D:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, _vm->_obj[curObj]._anim, 0, 0, curObj);
_vm->setObjectAnim(oPULSANTEBC2D, a2D7SCHIACCIATASTO6R);
break;
case oSWITCH29:
if (_vm->_curRoom == kRoom29L)
retVal = true;
else if (_vm->isObjectVisible(oLAMPADINAS29)) {
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, kRoom29L, 0, 0, curObj);
retVal = false;
} else if (!(_vm->_obj[_vm->_curObj]._flag & kObjFlagExtra)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a291USAINTERRUTTORELUCE, 0, 0, curObj);
_vm->_obj[_vm->_curObj]._flag |= kObjFlagExtra;
retVal = false;
} else
retVal = true;
break;
case oLEVAS23:
if (_vm->isObjectVisible(oCAVI23))
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a238, 0, 0, curObj);
else
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a234, 0, 0, curObj);
break;
case oLEVAG23:
if (_vm->isObjectVisible(oCAVIE23))
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a239, 0, 0, curObj);
else
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a235, 0, 0, curObj);
break;
case oBOTOLAC25:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, _vm->_obj[curObj]._anim, 0, 0, curObj);
_vm->setObjectAnim(oTRONCHESE25, a254B);
break;
case oBOTOLAA25:
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, _vm->_obj[curObj]._anim, 0, 0, curObj);
_vm->setObjectAnim(oTRONCHESE25, a254);
break;
case oPASSAGE24:
if (_vm->_room[kRoom24]._flag & kObjFlagExtra) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a244, 0, 14, curObj);
_vm->setRoom(kRoom24, false);
retVal = false;
} else {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a243, 0, 13, curObj);
_vm->setRoom(kRoom24, true);
retVal = false;
}
break;
case oDOOR26:
if (_vm->_obj[curObj]._anim)
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, _vm->_obj[curObj]._anim, 0, 4, curObj);
break;
case oRUBINETTOC28:
if (_vm->_obj[curObj]._anim) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, _vm->_obj[curObj]._anim, 0, 0, curObj);
_vm->_obj[oBRACIERES28]._examine = 455;
_vm->_obj[oBRACIERES28]._flag |= kObjFlagExtra;
} else
retVal = true;
break;
case oEXIT12CU:
case oEXIT13CU:
case oEXIT2BL:
case oEXIT36F:
case oEXIT41D:
case oEXIT4CT:
case oEXIT58M:
case oEXIT59L:
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, _vm->_obj[curObj]._goRoom, 0, 0, curObj);
break;
case oEXIT58T:
_count58 = 0;
for (uint8 a = 0; a < 6; a++)
_vm->setObjectVisible(oLED158 + a, false);
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, _vm->_obj[oEXIT58T]._goRoom, 0, 0, curObj);
break;
case oPANELM2G:
if (!(_vm->_obj[oPANELM2G]._flag & kObjFlagExtra)) {
_vm->_dialogMgr->playDialog(dF2G1);
_vm->setObjectVisible(oCOPERCHIO2G, false);
_vm->setObjectVisible(oSERBATOIOC2G, false);
_vm->setObjectVisible(oRAGAZZOP2G, false);
_vm->setObjectVisible(oRAGAZZOS2G, true);
_vm->setObjectVisible(oSERBATOIOA2G, true);
_vm->setObjectVisible(oPANNELLOE2G, true);
_vm->_obj[oPANELM2G]._flag |= kObjFlagExtra;
_vm->_animMgr->_animTab[aBKG2G]._flag |= SMKANIM_OFF1;
retVal = false;
} else
retVal = true;
break;
case oWHEELS2C:
if (!_vm->isObjectVisible(od2CTO2D)) {
_vm->_animMgr->smkStop(kSmackerBackground);
_vm->_animMgr->_animTab[aBKG2C]._flag |= SMKANIM_OFF1;
_vm->setObjectVisible(oBASEWHEELS2C, true);
_vm->setObjectVisible(omWHEELS2C, true);
_vm->setObjectVisible(oPULSANTE2C, true);
_vm->setObjectVisible(_wheelPos[0] * 3 + 0 + oWHEEL1A2C, true);
_vm->setObjectVisible(_wheelPos[1] * 3 + 1 + oWHEEL1A2C, true);
_vm->setObjectVisible(_wheelPos[2] * 3 + 2 + oWHEEL1A2C, true);
_vm->setObjectVisible(oCAMPO2C, false);
_vm->setObjectVisible(oTEMPIO2C, false);
_vm->setObjectVisible(oLEONE2C, false);
_vm->setObjectVisible(od2CTO2D, false);
_vm->setObjectVisible(oSFINGE2C, false);
_vm->setObjectVisible(oSTATUA2C, false);
_vm->setObjectVisible(oWHEELS2C, false);
_vm->setObjectVisible(od2CTO2E, false);
_vm->setObjectVisible(oCARTELLOS2C, false);
_vm->setObjectVisible(oCARTELLOA2C, false);
_vm->setObjectVisible(od2CTO26, false);
_vm->_flagShowCharacter = false;
ReadExtraObj2C();
} else
retVal = true;
break;
case oCATWALKA2E:
if (!(_vm->_obj[oCATWALKA2E]._flag & kObjFlagExtra)) {
_vm->_dialogMgr->playDialog(dF2E1);
_vm->setObjectVisible(oDINOSAURO2E, true);
_vm->_obj[oCATWALKA2E]._flag |= kObjFlagExtra;
_vm->_animMgr->_animTab[aBKG2E]._flag &= ~SMKANIM_OFF2;
retVal = false;
} else if (_vm->_obj[curObj]._anim) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, _vm->_obj[curObj]._anim, 0, 0, curObj);
retVal = false;
} else
retVal = true;
break;
case oBORSA22:
case oPORTALAMPADE2B:
case oMAPPAMONDO2B:
if (_vm->_obj[curObj]._anim) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, _vm->_obj[curObj]._anim, 0, 0, curObj);
_vm->setObjectAnim(curObj, 0);
} else
retVal = true;
break;
case oTUBOF34:
if (!_vm->isObjectVisible(oTUBOFT34))
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, _vm->_obj[curObj]._anim, 0, 0, curObj);
else
retVal = true;
break;
case oFILOT31:
_vm->setObjectVisible(oFILOT31, false);
_vm->setObjectVisible(oFILOS31, true);
break;
case oCOPERCHIOA31:
if (_vm->isObjectVisible(oFILOTC31)) {
_vm->_soundMgr->play(wCOVER31);
_vm->setObjectVisible(oPANNELLOM31, false);
_vm->setObjectVisible(oPANNELLOMA31, true);
_vm->setObjectAnim(oPANNELLOM31, 0);
_vm->_obj[oPANNELLOM31]._examine = 715;
_vm->_obj[oPANNELLOM31]._action = 716;
_vm->_obj[oPANNELLOM31]._flag &= ~kObjFlagRoomOut;
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, kRoom31, a3118CHIUDEPANNELLO, 3, curObj);
} else
retVal = true;
break;
case oVALVOLAC34:
case oVALVOLA34:
if (_vm->_obj[curObj]._anim)
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, _vm->_obj[curObj]._anim, 0, 0, curObj);
else
retVal = true;
break;
case oPROIETTORE35:
_vm->_room[kRoom35]._flag |= kObjFlagExtra;
_vm->read3D("352.3d"); // After the shock
_vm->setObjectVisible(oRIBELLEA35, false);
_vm->setObjectVisible(oDOORC35, false);
_vm->setObjectVisible(omDOORC35, false);
_vm->setObjectVisible(oPRESA35, false);
_vm->setObjectVisible(oDOORA35, true);
_vm->setObjectVisible(omDOORA35, true);
_vm->setObjectVisible(oRIBELLES35, true);
_vm->setObjectVisible(oSEDIA35, true);
_vm->setObjectVisible(oMONITOR35, true);
_vm->setObjectVisible(omPIANO35, true);
_vm->setObjectAnim(oFRONTOFFICEC35, a356PROVASPORTELLO);
_vm->_obj[oASCENSORE35]._flag |= kObjFlagRoomOut;
_vm->setObjectAnim(oASCENSORE35, a3514ENTRAASCENSORE);
_vm->_animMgr->_animTab[aBKG35]._flag |= SMKANIM_OFF1;
_vm->_dialogMgr->playDialog(dF351);
_vm->_pathFind->setPosition(7);
break;
case oCOMPUTER36:
if (!(_vm->_dialogMgr->_choice[646]._flag & kObjFlagDone)) {
_vm->_dialogMgr->playDialog(dF361);
_vm->_obj[oCOMPUTER36]._action = 2004;
retVal = false;
} else
retVal = true;
break;
case oPULSANTEA35:
case oPULSANTEB35:
case oPULSANTEC35:
case oPULSANTED35:
case oPULSANTEE35:
case oPULSANTEF35:
case oPULSANTEG35:
_vm->setObjectVisible(curObj, false);
_vm->setObjectVisible(curObj + 7, true);
_comb35[_count35++] = curObj;
_vm->_soundMgr->play(wPAD5);
if (_count35 == 7) {
if (((_comb35[0] == oPULSANTEF35) && (_comb35[1] == oPULSANTED35) && (_comb35[2] == oPULSANTEC35) &&
(_comb35[3] == oPULSANTEG35) && (_comb35[4] == oPULSANTEB35) && (_comb35[5] == oPULSANTEA35) &&
(_comb35[6] == oPULSANTEE35)) ||
((_comb35[0] == oPULSANTEE35) &&
(_comb35[1] == oPULSANTEA35) && (_comb35[2] == oPULSANTEB35) && (_comb35[3] == oPULSANTEG35) &&
(_comb35[4] == oPULSANTEC35) && (_comb35[5] == oPULSANTED35) && (_comb35[6] == oPULSANTEF35))) {
_vm->setObjectVisible(oPULSANTEAA35, false);
_vm->setObjectVisible(oPULSANTEBA35, false);
_vm->setObjectVisible(oPULSANTECA35, false);
_vm->setObjectVisible(oPULSANTEDA35, false);
_vm->setObjectVisible(oPULSANTEEA35, false);
_vm->setObjectVisible(oPULSANTEFA35, false);
_vm->setObjectVisible(oPULSANTEGA35, false);
_vm->setObjectVisible(oPULSANTIV35, true);
_vm->setObjectVisible(oLEDS35, false);
_vm->setObjectAnim(oFRONTOFFICEA35, 0);
_vm->_obj[oFRONTOFFICEA35]._action = 1844;
_vm->_obj[oFRONTOFFICEA35]._flag |= kObjFlagExtra;
_vm->_obj[oDOORMC36]._flag |= kObjFlagRoomOut;
_vm->setObjectAnim(oDOORMC36, a3610APREPORTA);
_vm->setObjectAnim(oSCAFFALE36, a3615APRENDESCAFFALE);
_vm->_animMgr->_animTab[aBKG36]._flag |= SMKANIM_OFF2;
_vm->_animMgr->_animTab[aBKG36]._flag |= SMKANIM_OFF3;
_vm->setObjectVisible(oSCANNERLA36, false);
_vm->setObjectVisible(oSCANNERLS36, true);
_vm->setObjectVisible(oSCANNERMA36, false);
_vm->setObjectVisible(oSCANNERMS36, true);
_vm->_soundMgr->play(wWIN35);
} else {
_vm->setObjectVisible(oPULSANTEA35, true);
_vm->setObjectVisible(oPULSANTEB35, true);
_vm->setObjectVisible(oPULSANTEC35, true);
_vm->setObjectVisible(oPULSANTED35, true);
_vm->setObjectVisible(oPULSANTEE35, true);
_vm->setObjectVisible(oPULSANTEF35, true);
_vm->setObjectVisible(oPULSANTEG35, true);
_vm->setObjectVisible(oPULSANTEAA35, false);
_vm->setObjectVisible(oPULSANTEBA35, false);
_vm->setObjectVisible(oPULSANTECA35, false);
_vm->setObjectVisible(oPULSANTEDA35, false);
_vm->setObjectVisible(oPULSANTEEA35, false);
_vm->setObjectVisible(oPULSANTEFA35, false);
_vm->setObjectVisible(oPULSANTEGA35, false);
}
_count35 = 0;
_comb35[0] = 0;
_comb35[1] = 0;
_comb35[2] = 0;
_comb35[3] = 0;
_comb35[4] = 0;
_comb35[5] = 0;
_comb35[6] = 0;
}
_vm->_curObj += 7;
break;
case oCARD35:
_vm->setObjectVisible(oPULSANTEA35, true);
_vm->setObjectVisible(oPULSANTEB35, true);
_vm->setObjectVisible(oPULSANTEC35, true);
_vm->setObjectVisible(oPULSANTED35, true);
_vm->setObjectVisible(oPULSANTEE35, true);
_vm->setObjectVisible(oPULSANTEF35, true);
_vm->setObjectVisible(oPULSANTEG35, true);
_vm->setObjectVisible(oPULSANTEAA35, false);
_vm->setObjectVisible(oPULSANTEBA35, false);
_vm->setObjectVisible(oPULSANTECA35, false);
_vm->setObjectVisible(oPULSANTEDA35, false);
_vm->setObjectVisible(oPULSANTEEA35, false);
_vm->setObjectVisible(oPULSANTEFA35, false);
_vm->setObjectVisible(oPULSANTEGA35, false);
_vm->addIcon(kItemSecurityCard);
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, kRoom35, a359RITIRACARD, 6, curObj);
break;
case oSCAFFALE36:
retVal = true;
break;
case oFOROC49:
case oFORO849:
case oFORO949:
case oFORO1049:
case oFORO1149:
case oFORO1249:
case oFORO149:
case oFORO249:
case oFORO349:
case oFORO449:
case oFORO549:
case oFORO649:
case oFORO749:
for (int a = oASTAC49; a <= oASTA749; a++)
_vm->setObjectVisible(a, false);
_vm->setObjectVisible(oASTAC49 + curObj - oFOROC49, true);
_comb49[3] = _comb49[2];
_comb49[2] = _comb49[1];
_comb49[1] = _comb49[0];
_comb49[0] = curObj;
_vm->_soundMgr->play(wASTA49);
if ((_comb49[3] == oFORO749) && (_comb49[2] == oFORO849) && (_comb49[1] == oFORO449) && (_comb49[0] == oFORO549)) {
PaintScreen(false);
_vm->waitDelay(60);
_vm->setObjectVisible(oOMBRAS49, true);
_vm->setObjectVisible(oSCOMPARTO49, true);
_vm->setObjectVisible(oAGENDA49, true);
_vm->setObjectVisible(oSUNDIAL49, false);
_vm->_obj[oAGENDA49]._examine = 1099;
_vm->_obj[oAGENDA49]._action = 1100;
_vm->_flagCharacterExists = true;
_vm->_curObj = oAGENDA49;
_vm->playScript(s49SUNDIAL);
}
retVal = false;
break;
case oASTAC49:
case oASTA849:
case oASTA949:
case oASTA1049:
case oASTA1149:
case oASTA1249:
case oASTA149:
case oASTA249:
case oASTA349:
case oASTA449:
case oASTA549:
case oASTA649:
case oASTA749:
for (int a = oASTAC49; a <= oASTA749; a++)
_vm->setObjectVisible(a, false);
_vm->setObjectVisible(oASTAC49, true);
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, kRoom49, a496, 1, curObj);
retVal = false;
break;
case oNUMERO14C:
case oNUMERO24C:
case oNUMERO34C:
case oNUMERO44C:
case oNUMERO54C:
case oNUMERO64C:
case oNUMERO74C:
case oNUMERO84C:
case oNUMERO94C:
case oNUMERO04C: {
int a;
for (a = 0; a < 6; a++) {
if (_comb4CT[a] == 0) {
_vm->setObjectVisible(a + oAST14C, true);
_comb4CT[a] = curObj - oNUMERO14C + 1;
break;
}
}
_vm->_soundMgr->play(wPAD1 + curObj - oNUMERO14C);
if (a < 5)
break;
PaintScreen(false);
_vm->waitDelay(60);
if ((_comb4CT[0] == 5) && (_comb4CT[1] == 6) && (_comb4CT[2] == 2) &&
(_comb4CT[3] == 3) && (_comb4CT[4] == 9) && (_comb4CT[5] == 6)) {
for (a = 0; a < 6; a++) {
_comb4CT[a] = 0;
_vm->setObjectVisible(oAST14C + a, false);
}
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, kRoom51, 0, 1, curObj);
_vm->_flagCharacterExists = true;
} else {
for (a = 0; a < 6; a++) {
_comb4CT[a] = 0;
_vm->setObjectVisible(oAST14C + a, false);
}
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, kRoom4C, 0, 4, curObj);
_vm->_flagCharacterExists = true;
}
retVal = false;
break;
}
case oDOORC4A:
if (!(_vm->_dialogMgr->_choice[245]._flag & kObjFlagDone) && !(_vm->_dialogMgr->_choice[766]._flag & kObjFlagDone)) {
_vm->_dialogMgr->_choice[245]._flag &= ~DLGCHOICE_HIDE;
_vm->_dialogMgr->playDialog(dC4A1);
_vm->_pathFind->setPosition(14);
_vm->_obj[oDOORC4A]._action = 1117;
_vm->setObjectAnim(oDOORC4A, 0);
retVal = false;
} else
retVal = true;
break;
case oPULSANTE4A:
if (_vm->_obj[curObj]._anim)
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, _vm->_obj[curObj]._anim, 0, 0, curObj);
else if (!(_vm->_dialogMgr->_choice[244]._flag & kObjFlagDone)) {
_vm->_dialogMgr->_choice[244]._flag &= ~DLGCHOICE_HIDE;
_vm->_dialogMgr->playDialog(dC4A1);
_vm->_obj[oPULSANTE4A]._examine = 1108;
_vm->_obj[oPULSANTE4A]._action = 1109;
retVal = false;
} else
retVal = true;
break;
case oWINDOW56:
if (_vm->isObjectVisible(oPANNELLOC56))
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a5614, 0, 0, curObj);
else
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a5614P, 0, 0, curObj);
break;
case oPULSANTECD:
for (int a = oPULSANTE1AD; a <= oPULSANTE33AD; a++) {
if ((_vm->_obj[a]._goRoom == _vm->_obj[oEXIT41D]._goRoom) ||
((_vm->_obj[a]._goRoom == kRoom45) && (_vm->_obj[oEXIT41D]._goRoom == kRoom45S))) {
_vm->_textMgr->CharacterSay(903);
break;
}
if (_vm->_obj[a]._goRoom == 0) {
if (_vm->_obj[oEXIT41D]._goRoom == kRoom45S)
_vm->_obj[a]._goRoom = kRoom45;
else
_vm->_obj[a]._goRoom = _vm->_obj[oEXIT41D]._goRoom;
_vm->setObjectVisible(a, true);
_vm->setObjectVisible(a - 40, false);
break;
}
}
retVal = false;
break;
case oDOORC54:
if (!(_vm->_dialogMgr->_choice[826]._flag & kObjFlagDone)) {
_vm->_dialogMgr->playDialog(dF541);
retVal = false;
} else
retVal = true;
break;
case oLAVATRICEL54:
if ((_vm->_obj[curObj]._anim) && (_vm->_obj[oSECCHIOS54]._flag & kObjFlagExtra) && _vm->isObjectVisible(oGRATAC54) && !(_vm->_dialogMgr->_choice[841]._flag & kObjFlagDone))
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, _vm->_obj[curObj]._anim, 0, 0, curObj);
else
retVal = true;
break;
case oSECCHIOS54:
if (_vm->isObjectVisible(oGRATAC54))
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a544G, 0, 0, curObj);
else
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, _vm->_obj[curObj]._anim, 0, 0, curObj);
retVal = false;
break;
case oKEYBOARD56:
if (_vm->_dialogMgr->_choice[262]._flag & kObjFlagDone) {
if (_vm->isObjectVisible(od56TO59))
_vm->_textMgr->CharacterSay(_vm->_obj[curObj]._action);
else
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a567, 0, 0, curObj);
retVal = false;
} else {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a564, 0, 0, curObj);
retVal = false;
}
break;
case oLIBRIEG2B:
if (_vm->_room[kRoom2C]._flag & kObjFlagDone) { // If room 2C has been visited before, take the book
retVal = false;
if (_vm->_obj[curObj]._anim)
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a2B4TAKEBOOK, 0, 0, curObj);
else
retVal = true;
} else { // If room 2C hasn't been visited before, he tells it's useless
_vm->_textMgr->CharacterSay(2014);
retVal = false;
}
break;
case oKEYBOARD58:
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, kRoom58T, 0, 0, curObj);
break;
case oLAVAGNA59:
case oSIMBOLI59:
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, kRoom59L, 0, 0, curObj);
break;
case oWINDOWA5A:
if ((_vm->_dialogMgr->_choice[871]._flag & kObjFlagDone) && !(_vm->_dialogMgr->_choice[286]._flag & kObjFlagDone)) {
_vm->_dialogMgr->playDialog(dC5A1);
retVal = false;
} else
retVal = true;
break;
case oWINDOWB5A:
if (!(_vm->_dialogMgr->_choice[256]._flag & kObjFlagDone)) {
_vm->_textMgr->CharacterSay(1999);
retVal = false;
} else
retVal = true;
break;
case oTASTO158:
case oTASTO258:
case oTASTO358:
case oTASTO458:
case oTASTO558:
case oTASTO658:
case oTASTO758:
case oTASTO858:
case oTASTO958:
case oTASTO058:
retVal = false;
_comb58[5] = _comb58[4];
_comb58[4] = _comb58[3];
_comb58[3] = _comb58[2];
_comb58[2] = _comb58[1];
_comb58[1] = _comb58[0];
_comb58[0] = curObj;
_vm->_soundMgr->play(wPAD1 + curObj - oTASTO158);
_vm->setObjectVisible(oLED158 + _count58, true);
_count58++;
if (_count58 < 6)
break;
PaintScreen(false);
_vm->waitDelay(60);
_count58 = 0;
for (int a = 0; a < 6; a++)
_vm->setObjectVisible(oLED158 + a, false);
if ((_comb58[0] == oTASTO058) && (_comb58[1] == oTASTO258) && (_comb58[2] == oTASTO358) &&
(_comb58[3] == oTASTO858) && (_comb58[4] == oTASTO558) && (_comb58[5] == oTASTO958)) {
_vm->_soundMgr->fadeOut();
_vm->_dialogMgr->playDialog(dF582);
} else
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, kRoom58, 0, 2, curObj);
for (int i = 0; i < 6; ++i)
_comb58[i] = 0;
break;
default:
if (_vm->_obj[curObj]._anim)
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, _vm->_obj[curObj]._anim, 0, 0, curObj);
else
retVal = true;
break;
}
return retVal;
}
bool LogicManager::mouseTake(uint16 curObj) {
bool retVal;
switch (curObj) {
case oTINFOIL11:
retVal = false;
break;
case oNASTRO15:
_vm->_obj[oNASTRO15]._flag |= kObjFlagExtra;
retVal = false;
break;
case oMONETA13:
if (!_vm->isObjectVisible(oLATTINA13))
_vm->setObjectAnim(curObj, a133CPRENDEMONETA);
retVal = true;
break;
case oFOGLIETTO14:
_vm->_obj[oFOGLIETTO14]._flag |= kObjFlagExtra;
_vm->_obj[oMAPPA16]._examine = 152;
retVal = false;
break;
case oPOSTERC22:
_vm->setObjectAnim(oARMADIETTOCC22, a221);
_vm->setObjectAnim(oARMADIETTOCA22, a222);
retVal = true;
break;
case oKEY22:
_vm->_obj[oARMADIETTORA22]._examine = 2013;
retVal = true;
break;
default:
retVal = true;
break;
}
return retVal;
}
bool LogicManager::mouseTalk(uint16 curObj) {
bool retVal = true;
switch (curObj) {
case oTICKETOFFICE16:
if ((_vm->_obj[oFINGERPADP16]._flag & kObjFlagRoomOut) && (_vm->_dialogMgr->_choice[50]._flag & kObjFlagDone)) {
_vm->_textMgr->CharacterSay(147);
retVal = false;
break;
}
if ((_vm->_dialogMgr->_choice[49]._flag & DLGCHOICE_HIDE) && (_vm->_dialogMgr->_choice[50]._flag & DLGCHOICE_HIDE)) {
if (_vm->_obj[oMAPPA16]._flag & kObjFlagExtra) {
_vm->_dialogMgr->_choice[46]._flag &= ~DLGCHOICE_HIDE;
_vm->_dialogMgr->_choice[48]._flag &= ~DLGCHOICE_HIDE;
_vm->_obj[oTICKETOFFICE16]._flag |= kObjFlagExtra;
}
else {
if (_vm->_dialogMgr->_choice[46]._flag & kObjFlagDone) {
_vm->_textMgr->CharacterSay(_vm->_obj[oTICKETOFFICE16]._action);
retVal = false;
break;
}
_vm->_dialogMgr->_choice[46]._flag &= ~DLGCHOICE_HIDE;
_vm->_dialogMgr->_choice[47]._flag &= ~DLGCHOICE_HIDE;
}
}
break;
case ocGUARD18:
_vm->_obj[ocGUARD18]._flag &= ~kObjFlagPerson;
_vm->_obj[ocGUARD18]._action = 227;
_vm->_obj[oDOORC18]._action = 220;
break;
case ocNEGOZIANTE1A:
for (int c = _vm->_dialogMgr->_dialog[dSHOPKEEPER1A]._firstChoice; c < (_vm->_dialogMgr->_dialog[dSHOPKEEPER1A]._firstChoice + _vm->_dialogMgr->_dialog[dSHOPKEEPER1A]._choiceNumb); c++) {
if (!(_vm->_dialogMgr->_choice[c]._flag & DLGCHOICE_HIDE)) {
_vm->_dialogMgr->playDialog(_vm->_obj[curObj]._goRoom);
retVal = false;
return retVal;
}
}
if (_vm->_obj[ocNEGOZIANTE1A]._action) {
_vm->_textMgr->CharacterSay(_vm->_obj[ocNEGOZIANTE1A]._action);
retVal = false;
}
break;
case ocEVA19:
_vm->_inventoryObj[kItemMinicom]._action = 1415;
break;
default:
break;
}
return retVal;
}
bool LogicManager::mouseClick(uint16 curObj) {
bool retVal;
if (_vm->_curRoom == kRoom1D && !(_vm->_room[kRoom1D]._flag & kObjFlagExtra) && (curObj != oSCALA1D)) {
_vm->_curObj = oDONNA1D;
_vm->_pathFind->goToPosition(_vm->_obj[oDONNA1D]._position);
retVal = true;
} else if (_vm->_curRoom == kRoom2B && (_vm->_room[kRoom2B]._flag & kObjFlagExtra) && (curObj != oCARTELLO2B) && (curObj != od2BTO28)) {
_vm->_curObj = oDOOR2B;
_vm->_pathFind->goToPosition(_vm->_obj[oCARTELLO2B]._position);
retVal = true;
} else {
switch (curObj) {
case oDOORA13:
if (_vm->_mouseRightBtn && (_vm->_room[kRoom14]._flag & kObjFlagDone)) {
if (_vm->_pathFind->_characterGoToPosition != 4)
_vm->_pathFind->goToPosition(4);
} else if (_vm->_pathFind->_characterGoToPosition != _vm->_obj[curObj]._position)
_vm->_pathFind->goToPosition(_vm->_obj[curObj]._position);
retVal = true;
break;
case oDIVANO14:
if (_vm->_mouseLeftBtn) {
if (_vm->_pathFind->_characterGoToPosition != 2)
_vm->_pathFind->goToPosition(2);
} else if (_vm->_pathFind->_characterGoToPosition != _vm->_obj[curObj]._position)
_vm->_pathFind->goToPosition(_vm->_obj[curObj]._position);
retVal = true;
break;
case oSCAFFALE1D:
if (_vm->_mouseRightBtn) {
if (_vm->_pathFind->_characterGoToPosition != 9)
_vm->_pathFind->goToPosition(9);
} else if (_vm->_pathFind->_characterGoToPosition != _vm->_obj[curObj]._position)
_vm->_pathFind->goToPosition(_vm->_obj[curObj]._position);
retVal = true;
break;
case oDIVANOR4A:
if (_vm->_mouseRightBtn) {
if (_vm->_pathFind->_characterGoToPosition != 1)
_vm->_pathFind->goToPosition(1);
} else if (_vm->_pathFind->_characterGoToPosition != _vm->_obj[curObj]._position)
_vm->_pathFind->goToPosition(_vm->_obj[curObj]._position);
retVal = true;
break;
case oDOORC21:
if ((_vm->_useWith[USED] == kItemPistol) && _vm->_flagUseWithStarted) {
if (_vm->_pathFind->_characterGoToPosition != 1)
_vm->_pathFind->goToPosition(1);
} else if (_vm->_pathFind->_characterGoToPosition != _vm->_obj[curObj]._position)
_vm->_pathFind->goToPosition(_vm->_obj[curObj]._position);
retVal = true;
break;
case oTUBO21:
if ((_vm->_useWith[USED] == oRAMPINO21) && _vm->_flagUseWithStarted) {
if (_vm->_pathFind->_characterGoToPosition != 4)
_vm->_pathFind->goToPosition(4);
} else if (_vm->_pathFind->_characterGoToPosition != _vm->_obj[curObj]._position)
_vm->_pathFind->goToPosition(_vm->_obj[curObj]._position);
retVal = true;
break;
case oCAMPO23:
if ((_vm->_useWith[USED] == oCAVIE23) && _vm->_flagUseWithStarted) {
if (_vm->_pathFind->_characterGoToPosition != 2)
_vm->_pathFind->goToPosition(2);
} else if (_vm->_pathFind->_characterGoToPosition != _vm->_obj[curObj]._position)
_vm->_pathFind->goToPosition(_vm->_obj[curObj]._position);
retVal = true;
break;
case oTASTO2F:
if ((_vm->_useWith[USED] == kItemElevatorRemoteControl) && _vm->_flagUseWithStarted) {
if (_vm->_pathFind->_characterGoToPosition != 9)
_vm->_pathFind->goToPosition(9);
} else if (_vm->_pathFind->_characterGoToPosition != _vm->_obj[curObj]._position)
_vm->_pathFind->goToPosition(_vm->_obj[curObj]._position);
retVal = true;
break;
case oSAMA33:
case oSERRATURA33:
if ((_vm->_useWith[USED] == oTUBET33) && _vm->isObjectVisible(oVALVOLA34)
&& _vm->isObjectVisible(oSAMA33) && _vm->_flagUseWithStarted) {
if (_vm->_pathFind->_characterGoToPosition != 4)
_vm->_pathFind->goToPosition(4);
} else if (_vm->_pathFind->_characterGoToPosition != _vm->_obj[curObj]._position)
_vm->_pathFind->goToPosition(_vm->_obj[curObj]._position);
retVal = true;
break;
case oWINDOW33:
if (_vm->_mouseLeftBtn) {
if (_vm->_pathFind->_characterGoToPosition != 7)
_vm->_pathFind->goToPosition(7);
} else if (_vm->_pathFind->_characterGoToPosition != _vm->_obj[curObj]._position)
_vm->_pathFind->goToPosition(_vm->_obj[curObj]._position);
retVal = true;
break;
case oPRESA35:
if (!_vm->_flagUseWithStarted) {
if (_vm->_pathFind->_characterGoToPosition != 2)
_vm->_pathFind->goToPosition(2);
} else if (_vm->_pathFind->_characterGoToPosition != _vm->_obj[curObj]._position)
_vm->_pathFind->goToPosition(_vm->_obj[curObj]._position);
retVal = true;
break;
case oTRIPLA35:
if (!_vm->_flagUseWithStarted && _vm->_mouseLeftBtn) {
if (_vm->_pathFind->_characterGoToPosition != 2)
_vm->_pathFind->goToPosition(2);
} else if (_vm->_pathFind->_characterGoToPosition != _vm->_obj[curObj]._position)
_vm->_pathFind->goToPosition(_vm->_obj[curObj]._position);
retVal = true;
break;
case oPORTALC36:
if ((_vm->_useWith[USED] == kItemStethoscope) && _vm->_flagUseWithStarted) {
if (_vm->_pathFind->_characterGoToPosition != 8)
_vm->_pathFind->goToPosition(8);
} else if (_vm->_pathFind->_characterGoToPosition != _vm->_obj[curObj]._position)
_vm->_pathFind->goToPosition(_vm->_obj[curObj]._position);
retVal = true;
break;
case oSERBATOIOA2G:
if ((_vm->_useWith[USED] == kItemFlare) && (_vm->_inventoryObj[kItemGasCylinder]._flag & kObjFlagExtra) && (_vm->_inventoryObj[kItemCanWithFuel]._flag & kObjFlagExtra) && _vm->_flagUseWithStarted) {
if (_vm->_pathFind->_characterGoToPosition != 6)
_vm->_pathFind->goToPosition(6);
} else if (_vm->_pathFind->_characterGoToPosition != _vm->_obj[curObj]._position)
_vm->_pathFind->goToPosition(_vm->_obj[curObj]._position);
retVal = true;
break;
case oRAGNO41:
if ((_vm->_useWith[USED] == kItemHammer) && _vm->_flagUseWithStarted) {
if (_vm->_pathFind->_characterGoToPosition != 1)
_vm->_pathFind->goToPosition(1);
} else if (_vm->_pathFind->_characterGoToPosition != _vm->_obj[curObj]._position)
_vm->_pathFind->goToPosition(_vm->_obj[curObj]._position);
retVal = true;
break;
case oTAMBURO43:
if ((_vm->_useWith[USED] == kItemClub) && _vm->_flagUseWithStarted) {
if (_vm->_pathFind->_characterGoToPosition != 5)
_vm->_pathFind->goToPosition(5);
} else if (_vm->_pathFind->_characterGoToPosition != _vm->_obj[curObj]._position)
_vm->_pathFind->goToPosition(_vm->_obj[curObj]._position);
retVal = true;
break;
case oLUCCHETTO53:
if ((_vm->_useWith[USED] == kItemLaserGun) && _vm->_flagUseWithStarted) {
if (_vm->_pathFind->_characterGoToPosition != 2)
_vm->_pathFind->goToPosition(2);
} else if (_vm->_pathFind->_characterGoToPosition != _vm->_obj[curObj]._position)
_vm->_pathFind->goToPosition(_vm->_obj[curObj]._position);
retVal = true;
break;
case oDOOR58C55:
if ((_vm->_useWith[USED] == kItemGuardKeys) && _vm->_flagUseWithStarted) {
if (_vm->_pathFind->_characterGoToPosition != 2)
_vm->_pathFind->goToPosition(2);
} else if (_vm->_pathFind->_characterGoToPosition != _vm->_obj[curObj]._position)
_vm->_pathFind->goToPosition(_vm->_obj[curObj]._position);
retVal = true;
break;
default:
if (_vm->_obj[curObj]._position == -1) {
_vm->_pathFind->_characterGoToPosition = -1;
retVal = false;
} else {
if (_vm->_pathFind->_characterGoToPosition != _vm->_obj[curObj]._position)
_vm->_pathFind->goToPosition(_vm->_obj[curObj]._position);
retVal = true;
}
break;
}
if (_vm->_room[_vm->_curRoom]._flag & kObjFlagExtra) {
if ((curObj == oTUBO21) || (curObj == oCARTELLONE21) || (curObj == oESSE21)
|| (curObj == oRAMPINO21) || (curObj == oCATENA21) || (curObj == od21TO22)
|| (curObj == oDOORC21) || (curObj == oDOORA21) || (curObj == oCUNICOLO21) || (curObj == od24TO23) || (curObj == od2ETO2C) || (curObj == od2GVTO26)) {
_vm->_pathFind->_characterGoToPosition = -1;
retVal = true;
}
} else if ((curObj == od21TO23) || (curObj == od24TO26) || (curObj == oENTRANCE2E)
|| (curObj == oCARTELLO2B) || (curObj == oFRONTOFFICEC35) || (curObj == oFRONTOFFICEA35)
|| (curObj == oASCENSORE35) || (curObj == oGIORNALE35)) {
_vm->_pathFind->_characterGoToPosition = -1;
retVal = true;
}
}
return retVal;
}
bool LogicManager::operateInventory() {
bool printSentence = true;
switch (_vm->_curInventory) {
case kItemMinicom:
if ((_vm->_dialogMgr->_choice[166]._flag & kObjFlagDone) && (_vm->_curRoom == kRoom17 || _vm->_curRoom == kRoom1B || _vm->_curRoom == kRoom1C || _vm->_curRoom == kRoom1D)) {
if (_vm->isObjectVisible(oNUMERO17)) {
if (!(_vm->_dialogMgr->_choice[196]._flag & kObjFlagDone)) {
if (_vm->_curRoom == kRoom17) {
if (_vm->_dialogMgr->_choice[198]._flag & kObjFlagDone) {
_vm->_inventoryObj[kItemMinicom]._action = 1787;
printSentence = true;
} else {
_vm->_dialogMgr->_choice[197]._flag |= DLGCHOICE_HIDE;
_vm->_dialogMgr->_choice[198]._flag &= ~DLGCHOICE_HIDE;
_vm->_dialogMgr->playDialog(dSAM17);
printSentence = false;
_vm->setObjectVisible(oFAX17, true);
}
} else {
if (_vm->_dialogMgr->_choice[199]._flag & kObjFlagDone) {
_vm->_inventoryObj[kItemMinicom]._action = 1787;
printSentence = true;
} else {
_vm->_dialogMgr->_choice[197]._flag |= DLGCHOICE_HIDE;
_vm->_dialogMgr->_choice[199]._flag &= ~DLGCHOICE_HIDE;
_vm->_dialogMgr->playDialog(dSAM17);
printSentence = false;
_vm->setObjectVisible(oFAX17, true);
}
}
} else {
if ((_vm->_dialogMgr->_choice[198]._flag & kObjFlagDone) || (_vm->_dialogMgr->_choice[199]._flag & kObjFlagDone)) {
_vm->_inventoryObj[kItemMinicom]._action = 1787;
printSentence = true;
} else if (_vm->_curRoom == kRoom17) {
if (_vm->_dialogMgr->_choice[201]._flag & kObjFlagDone) {
_vm->_inventoryObj[kItemMinicom]._action = 1787;
printSentence = true;
} else {
_vm->_dialogMgr->_choice[201]._flag &= ~DLGCHOICE_HIDE;
_vm->_dialogMgr->playDialog(dSAM17);
printSentence = false;
_vm->setObjectVisible(oFAX17, true);
}
} else {
if (_vm->_dialogMgr->_choice[200]._flag & kObjFlagDone) {
_vm->_inventoryObj[kItemMinicom]._action = 1787;
printSentence = true;
} else {
_vm->_dialogMgr->_choice[200]._flag &= ~DLGCHOICE_HIDE;
_vm->_dialogMgr->playDialog(dSAM17);
printSentence = false;
_vm->setObjectVisible(oFAX17, true);
}
}
}
} else if (_vm->_dialogMgr->_choice[197]._flag & kObjFlagDone) {
_vm->_inventoryObj[kItemMinicom]._action = 1786;
printSentence = true;
} else {
_vm->_dialogMgr->playDialog(dSAM17);
printSentence = false;
}
}
break;
case kItemSubwayMap:
if (_vm->_curRoom == kRoom23A) {
_vm->_textMgr->CharacterSay(361);
printSentence = false;
} else
printSentence = true;
break;
case kItemEgyptologyBook:
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, kRoom2BL, 0, 0, _vm->_useWith[WITH]);
_vm->_obj[oEXIT2BL]._goRoom = _vm->_curRoom;
_vm->_actor->actorStop();
_vm->_pathFind->nextStep();
printSentence = false;
break;
case kItemSecuritySystemSequence:
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, kRoom36F, 0, 0, _vm->_useWith[WITH]);
_vm->_obj[oEXIT36F]._goRoom = _vm->_curRoom;
_vm->_actor->actorStop();
_vm->_pathFind->nextStep();
printSentence = false;
break;
case kItemPositioner:
for (int a = oROOM41; a <= oROOM45B; a++)
_vm->setObjectVisible(a, false);
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, kRoom41D, 0, 0, _vm->_useWith[WITH]);
_vm->_obj[oEXIT41D]._goRoom = _vm->_curRoom;
_vm->_inventoryObj[kItemPositioner]._flag &= ~kObjFlagExtra;
_vm->_actor->actorStop();
_vm->_pathFind->nextStep();
printSentence = false;
break;
case kItemGovernorsCode:
_vm->_obj[oEXIT58M]._goRoom = _vm->_curRoom;
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, kRoom58M, 0, 0, _vm->_useWith[WITH]);
_vm->_actor->actorStop();
_vm->_pathFind->nextStep();
printSentence = false;
break;
case kItemPuppetRemoteControl:
if ((_vm->_actor->_px < 5057.6) && _vm->isObjectVisible(oPUPAZZO44) && _vm->_curRoom == kRoom43) {
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, kRoom46, 0, 7, _vm->_useWith[WITH]);
printSentence = false;
}
break;
case kItemPrisonMap:
if ((_vm->_curRoom >= kRoom51) && (_vm->_curRoom <= kRoom5A))
_vm->_inventoryObj[kItemPrisonMap]._action = 1725 + (_vm->_curRoom - kRoom51);
printSentence = true;
break;
default:
break;
}
return printSentence;
}
void LogicManager::doMouseGame() {
// For the wheel in 2C
if ((_vm->_curObj >= oWHEEL1A2C) && (_vm->_curObj <= oWHEEL12C2C))
_vm->_textMgr->ShowObjName((oWHEEL1A2C % 3) + oWHEELA2C, true);
// For the displacer
else if (_vm->_curRoom == kRoom41D) {
const uint16 displacerRoom = oROOM41 + _vm->_obj[_vm->_curObj]._goRoom - kRoom41;
if ((_vm->_curObj >= oPULSANTE1AD) && (_vm->_curObj <= oPULSANTE33AD)) {
if (!_vm->isObjectVisible(displacerRoom)) {
for (int a = oROOM41; a <= oROOM4X; a++) {
if (_vm->isObjectVisible(a))
_vm->setObjectVisible(a, false);
}
_vm->setObjectVisible(oROOM45B, false);
if (displacerRoom == oROOM45 && _vm->_obj[od44TO45]._goRoom == kRoom45S)
_vm->setObjectVisible(oROOM45B, true);
else
_vm->setObjectVisible(displacerRoom, true);
}
} else {
for (int a = oROOM41; a <= oROOM4X; a++) {
if (_vm->isObjectVisible(a))
_vm->setObjectVisible(a, false);
}
_vm->setObjectVisible(oROOM45B, false);
}
_vm->_textMgr->ShowObjName(_vm->_curObj, true);
} else
// not a wheel nor the displacer
_vm->_textMgr->ShowObjName(_vm->_curObj, true);
if (_vm->_inventoryStatus == INV_INACTION)
_vm->_scheduler->doEvent(MC_INVENTORY, ME_CLOSE, MP_DEFAULT, 0, 0, 0, 0);
}
// Returns true when it's in a room without a character, such as the map
bool LogicManager::doMouseInventory() {
return !_vm->_flagCharacterExists && _vm->_curRoom != kRoom31P && _vm->_curRoom != kRoom35P;
}
void LogicManager::doMouseLeftRight() {
// for the displacer
if ((_vm->_curObj >= oPULSANTE1AD) && (_vm->_curObj <= oPULSANTE33AD)) {
if ((_vm->_obj[_vm->_curObj]._goRoom == kRoom45) && (_vm->_obj[od44TO45]._goRoom == kRoom45S) &&
(_vm->_obj[oEXIT41D]._goRoom == kRoom45S) && (_vm->_curMessage->_event == ME_MRIGHT))
_vm->_scheduler->doEvent(MC_ACTION, ME_MOUSEOPERATE, MP_DEFAULT, 0, 0, 0, _vm->_curObj);
else if ((_vm->_obj[_vm->_curObj]._goRoom == kRoom45) && (_vm->_obj[od44TO45]._goRoom == kRoom45S) &&
(_vm->_obj[oEXIT41D]._goRoom != kRoom45S) && (_vm->_curMessage->_event == ME_MRIGHT)) {
_vm->_obj[oEXIT41D]._goRoom = kRoom45S;
_vm->_inventoryObj[kItemPositioner]._flag |= kObjFlagExtra;
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, kRoom45S, 0, 0, _vm->_curObj);
} else if (_vm->_obj[oEXIT41D]._goRoom != _vm->_obj[_vm->_curObj]._goRoom && (_vm->_curMessage->_event == ME_MRIGHT)) {
_vm->_obj[oEXIT41D]._goRoom = _vm->_obj[_vm->_curObj]._goRoom;
_vm->_inventoryObj[kItemPositioner]._flag |= kObjFlagExtra;
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, _vm->_obj[oEXIT41D]._goRoom, 0, 0, _vm->_curObj);
} else if ((_vm->_curMessage->_event == ME_MLEFT) && _vm->_curObj)
_vm->_scheduler->doEvent(MC_ACTION, ME_MOUSEEXAMINE, MP_DEFAULT, 0, 0, 0, _vm->_curObj);
else if ((_vm->_curMessage->_event == ME_MRIGHT) && _vm->_curObj)
_vm->_scheduler->doEvent(MC_ACTION, ME_MOUSEOPERATE, MP_DEFAULT, 0, 0, 0, _vm->_curObj);
return;
}
// end of displacer
if (_vm->_curRoom == kRoom52) {
// snake escape 52
if (_vm->isObjectVisible(oSNAKEU52)) {
if (_vm->isGameArea(Common::Point(_vm->_curMessage->_u16Param1, _vm->_curMessage->_u16Param2)) && !_vm->_flagUseWithStarted && (_vm->_curObj != oSNAKEU52)) {
_vm->StartCharacterAction(a526, 0, 1, 0);
_vm->setObjectAnim(oSCAVO51, a516);
_vm->_snake52.set(_vm->_curMessage);
return;
}
}
} else if (_vm->_curRoom == kRoomControlPanel) {
// Sys
_vm->checkMask(Common::Point(_vm->_curMessage->_u16Param1, _vm->_curMessage->_u16Param2));
doSys(_vm->_curObj);
return;
}
// If it's in a room without a character, like a map or a book
if (!_vm->_flagCharacterExists) {
if (_vm->isInventoryArea(Common::Point(_vm->_curMessage->_u16Param1, _vm->_curMessage->_u16Param2)) && (_vm->_curRoom == kRoom31P || _vm->_curRoom == kRoom35P)) {
if (_vm->isIconArea(Common::Point(_vm->_curMessage->_u16Param1, _vm->_curMessage->_u16Param2)) && _vm->whatIcon(Common::Point(_vm->_curMessage->_u16Param1, _vm->_curMessage->_u16Param2)) && (_vm->_inventoryStatus == INV_INACTION)) {
_vm->_useWith[WITH] = 0;
_vm->_curObj = 0;
_vm->_lightIcon = 0xFF;
_vm->setInventoryStart(_vm->_iconBase, INVENTORY_SHOW);
if (_vm->_curMessage->_event == ME_MRIGHT || _vm->_flagUseWithStarted)
_vm->_scheduler->doEvent(MC_INVENTORY, ME_OPERATEICON, MP_DEFAULT, _vm->_curMessage->_u16Param1, _vm->_curMessage->_u16Param2, 0, 0);
else
_vm->_scheduler->doEvent(MC_INVENTORY, ME_EXAMINEICON, MP_DEFAULT, _vm->_curMessage->_u16Param1, _vm->_curMessage->_u16Param2, 0, 0);
}
return;
}
if ((_vm->_curMessage->_event == ME_MLEFT) && _vm->_curObj)
_vm->_scheduler->doEvent(MC_ACTION, ME_MOUSEEXAMINE, MP_DEFAULT, 0, 0, 0, _vm->_curObj);
else if ((_vm->_curMessage->_event == ME_MRIGHT) && _vm->_curObj)
_vm->_scheduler->doEvent(MC_ACTION, ME_MOUSEOPERATE, MP_DEFAULT, 0, 0, 0, _vm->_curObj);
return;
}
// Special management for 2C wheels
if (_vm->isObjectVisible(oBASEWHEELS2C) && _vm->_curRoom == kRoom2C) {
if (_vm->checkMask(Common::Point(_vm->_curMessage->_u16Param1, _vm->_curMessage->_u16Param2))) {
if ((_vm->_curObj >= oWHEEL1A2C) && (_vm->_curObj <= oWHEEL12C2C))
_wheel = (_vm->_curObj - oWHEEL1A2C) % 3;
else if (_vm->_curObj == oPULSANTE2C) {
if (_vm->_curMessage->_event == ME_MLEFT) {
_vm->_scheduler->doEvent(MC_ACTION, ME_MOUSEEXAMINE, MP_DEFAULT, 0, 0, 0, _vm->_curObj);
return;
}
_vm->_animMgr->_animTab[aBKG2C]._flag &= ~SMKANIM_OFF1;
_vm->setObjectVisible(oBASEWHEELS2C, false);
_vm->setObjectVisible(omWHEELS2C, false);
_vm->setObjectVisible(oPULSANTE2C, false);
_vm->setObjectVisible(_wheelPos[0] * 3 + 0 + oWHEEL1A2C, false);
_vm->setObjectVisible(_wheelPos[0] * 3 + 1 + oWHEEL1A2C, false);
_vm->setObjectVisible(_wheelPos[0] * 3 + 2 + oWHEEL1A2C, false);
_vm->setObjectVisible(oCAMPO2C, true);
_vm->setObjectVisible(oTEMPIO2C, true);
_vm->setObjectVisible(oLEONE2C, true);
_vm->setObjectVisible(oSFINGE2C, true);
_vm->setObjectVisible(oSTATUA2C, true);
_vm->setObjectVisible(od2CTO2E, true);
_vm->setObjectVisible(oCARTELLOA2C, true);
_vm->setObjectVisible(od2CTO26, true);
_vm->setObjectVisible(oWHEELS2C, true);
_vm->_flagShowCharacter = true;
_vm->_animMgr->startSmkAnim(_vm->_room[_vm->_curRoom]._bkgAnim);
// right combination
if ((_wheelPos[0] == 7) && (_wheelPos[1] == 5) && (_wheelPos[2] == 11)) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a2C6PREMEPULSANTEAPERTURA, 0, 0, _vm->_curObj);
_vm->_obj[oSFINGE2C]._flag &= ~kObjFlagPerson;
} else
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a2C6PREMEPULSANTE, 0, 0, _vm->_curObj);
return;
} else
return;
if (_vm->_curMessage->_event == ME_MLEFT)
_wheelPos[_wheel] = (_wheelPos[_wheel] > 10) ? 0 : _wheelPos[_wheel] + 1;
if (_vm->_curMessage->_event == ME_MRIGHT)
_wheelPos[_wheel] = (_wheelPos[_wheel] < 1) ? 11 : _wheelPos[_wheel] - 1;
_vm->_soundMgr->play(wWHEELS2C);
_vm->setObjectVisible(_vm->_curObj, false);
_vm->setObjectVisible(_wheelPos[_wheel] * 3 + _wheel + oWHEEL1A2C, true);
}
return;
}
// Game area
if (_vm->isGameArea(Common::Point(_vm->_curMessage->_u16Param1, _vm->_curMessage->_u16Param2)) && !_vm->_animMgr->_playingAnims[kSmackerAction]) {
if (_vm->_flagscriptactive)
_vm->_curObj = _vm->_curMessage->_u32Param;
int pmousex = _vm->_curMessage->_u16Param1;
int pmousey = _vm->_curMessage->_u16Param2;
if (!_vm->_logicMgr->mouseClick(_vm->_curObj)) {
if (_vm->checkMask(Common::Point(_vm->_curMessage->_u16Param1, _vm->_curMessage->_u16Param2))) {
if ((_vm->_obj[_vm->_curObj]._lim.right - _vm->_obj[_vm->_curObj]._lim.left) < MAXX / 7) {
pmousex = (_vm->_obj[_vm->_curObj]._lim.left + _vm->_obj[_vm->_curObj]._lim.right) / 2;
pmousey = ((_vm->_obj[_vm->_curObj]._lim.top + _vm->_obj[_vm->_curObj]._lim.bottom) / 2) + TOP;
}
}
_vm->_pathFind->whereIs(pmousex, pmousey);
_vm->_pathFind->findPath();
}
_vm->_characterQueue.initQueue();
if (_vm->checkMask(Common::Point(_vm->_curMessage->_u16Param1, _vm->_curMessage->_u16Param2)) && !_vm->_flagDialogActive) {
if (_vm->_curRoom == kRoom1D && !(_vm->_room[kRoom1D]._flag & kObjFlagExtra) && (_vm->_curObj != oSCALA1D))
_vm->_curObj = oDONNA1D;
else if (_vm->_curRoom == kRoom2B && (_vm->_room[kRoom2B]._flag & kObjFlagExtra) && (_vm->_curObj != oCARTELLO2B) && (_vm->_curObj != od2BTO28)) {
_vm->_textMgr->clearLastText();
_vm->_curObj = oDOOR2B;
_vm->StartCharacterAction(a2B1PROVAAPRIREPORTA, 0, 0, 0);
if (_vm->_flagUseWithStarted) {
if (_vm->_useWithInv[USED]) {
_vm->_lightIcon = 0xFF;
_vm->_animMgr->smkStop(kSmackerIcon);
_vm->setInventoryStart(_vm->_inventoryRefreshStartIcon, INVENTORY_HIDE);
_vm->_flagInventoryLocked = false;
}
_vm->_useWith[USED] = 0;
_vm->_useWith[WITH] = 0;
_vm->_useWithInv[USED] = false;
_vm->_useWithInv[WITH] = false;
_vm->_flagUseWithStarted = false;
_vm->_textMgr->clearLastText();
}
return;
} else if (_vm->_curRoom == kRoom35 && !(_vm->_room[kRoom35]._flag & kObjFlagExtra) && ((_vm->_curObj == oFRONTOFFICEC35)
|| (_vm->_curObj == oFRONTOFFICEA35) || (_vm->_curObj == oASCENSORE35) || (_vm->_curObj == oMONITOR35)
|| (_vm->_curObj == oSEDIA35) || (_vm->_curObj == oRIBELLEA35) || (_vm->_curObj == oCOMPUTER35) || (_vm->_curObj == oGIORNALE35))) {
_vm->_curObj = oLASTLEV5;
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERGOTOEXAMINE, MP_DEFAULT, _vm->_curMessage->_u16Param1, _vm->_curMessage->_u16Param2, 0, _vm->_curObj);
if (_vm->_flagUseWithStarted) {
if (_vm->_useWithInv[USED]) {
_vm->_lightIcon = 0xFF;
_vm->_animMgr->smkStop(kSmackerIcon);
_vm->setInventoryStart(_vm->_inventoryRefreshStartIcon, INVENTORY_HIDE);
_vm->_flagInventoryLocked = false;
}
_vm->_useWith[USED] = 0;
_vm->_useWith[WITH] = 0;
_vm->_useWithInv[USED] = false;
_vm->_useWithInv[WITH] = false;
_vm->_flagUseWithStarted = false;
_vm->_textMgr->clearLastText();
}
return;
} else if ((_vm->_curMessage->_event == ME_MLEFT) &&
((!(_vm->_room[_vm->_curRoom]._flag & kObjFlagExtra) && ((_vm->_curObj == oENTRANCE2E) || (_vm->_curObj == od24TO26) || (_vm->_curObj == od21TO23 && !(_vm->_obj[_vm->_curObj]._flag & kObjFlagExamine)))) ||
((_vm->_room[_vm->_curRoom]._flag & kObjFlagExtra) && ((_vm->_curObj == od2ETO2C) || (_vm->_curObj == od24TO23) || (_vm->_curObj == od21TO22 && !(_vm->_obj[_vm->_curObj]._flag & kObjFlagExamine)) || (_vm->_curObj == od2GVTO26))))) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERGOTO, MP_DEFAULT, _vm->_curMessage->_u16Param1, _vm->_curMessage->_u16Param2, 0, 0);
return;
}
if (_vm->_curMessage->_event == ME_MRIGHT) {
if (!(_vm->_obj[_vm->_curObj]._flag & kObjFlagExamine) && (_vm->_curObj != 0)) {
if (_vm->_flagUseWithStarted) {
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERGOTO, MP_DEFAULT, _vm->_curMessage->_u16Param1, _vm->_curMessage->_u16Param2, 0, 0);
return;
}
if (_vm->_obj[_vm->_curObj]._flag & kObjFlagRoomIn)
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, _vm->_obj[_vm->_curObj]._goRoom, _vm->_obj[_vm->_curObj]._anim, _vm->_obj[_vm->_curObj]._ninv, _vm->_curObj);
else if (_vm->_obj[_vm->_curObj]._flag & kObjFlagRoomOut)
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, _vm->_obj[_vm->_curObj]._goRoom, 0, _vm->_obj[_vm->_curObj]._ninv, _vm->_curObj);
_vm->_actor->actorStop();
_vm->_pathFind->nextStep();
_vm->_obj[_vm->_curObj]._flag |= kObjFlagDone;
} else if (_vm->_obj[_vm->_curObj]._flag & kObjFlagUseWith) {
_vm->_pathFind->_characterGoToPosition = -1;
_vm->_actor->actorStop();
_vm->_pathFind->nextStep();
_vm->_scheduler->doEvent(MC_ACTION, ME_MOUSEOPERATE, MP_DEFAULT, _vm->_curMessage->_u16Param1, _vm->_curMessage->_u16Param2, 0, _vm->_curObj);
} else
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERGOTOACTION, MP_DEFAULT, _vm->_curMessage->_u16Param1, _vm->_curMessage->_u16Param2, 0, _vm->_curObj);
} else
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERGOTOEXAMINE, MP_DEFAULT, _vm->_curMessage->_u16Param1, _vm->_curMessage->_u16Param2, 0, _vm->_curObj);
} else
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERGOTO, MP_DEFAULT, _vm->_curMessage->_u16Param1, _vm->_curMessage->_u16Param2, 0, 0);
} else if (_vm->isInventoryArea(Common::Point(_vm->_curMessage->_u16Param1, _vm->_curMessage->_u16Param2))) {
// Inventory area
if (_vm->_animMgr->_playingAnims[kSmackerAction] || _vm->_flagDialogActive || _vm->_curRoom == kRoomControlPanel)
return;
if (_vm->isIconArea(Common::Point(_vm->_curMessage->_u16Param1, _vm->_curMessage->_u16Param2)) && _vm->whatIcon(Common::Point(_vm->_curMessage->_u16Param1, _vm->_curMessage->_u16Param2)) && (_vm->_inventoryStatus == INV_INACTION)) {
_vm->_characterQueue.initQueue();
_vm->_actor->actorStop();
_vm->_pathFind->nextStep();
_vm->_scheduler->doEvent(MC_CHARACTER, ME_CHARACTERGOTOACTION, MP_DEFAULT, _vm->_curMessage->_u16Param1, _vm->_curMessage->_u16Param2, 0, 0);
_vm->_useWith[WITH] = 0;
_vm->_curObj = 0;
_vm->_lightIcon = 0xFF;
_vm->setInventoryStart(_vm->_iconBase, INVENTORY_SHOW);
if (_vm->_curMessage->_event == ME_MRIGHT || _vm->_flagUseWithStarted)
_vm->_scheduler->doEvent(MC_INVENTORY, ME_OPERATEICON, MP_DEFAULT, _vm->_curMessage->_u16Param1, _vm->_curMessage->_u16Param2, 0, 0);
else
_vm->_scheduler->doEvent(MC_INVENTORY, ME_EXAMINEICON, MP_DEFAULT, _vm->_curMessage->_u16Param1, _vm->_curMessage->_u16Param2, 0, 0);
}
}
}
void LogicManager::initControlPanel() {
const bool speechON = !ConfMan.getBool("speech_mute");
const bool textON = ConfMan.getBool("subtitles");
const int speechVol = ConfMan.getInt("speech_volume");
const int musicVol = ConfMan.getInt("music_volume");
const int sfxVol = ConfMan.getInt("sfx_volume");
const uint16 speechObjId = o00SPEECH1D + (speechVol / 51) * 2;
const uint16 musicObjId = o00MUSIC1D + (musicVol / 51) * 2;
const uint16 sfxObjId = o00SOUND1D + (sfxVol / 51) * 2;
if (speechON)
_vm->setObjectVisible(o00SPEECHON, true);
else
_vm->setObjectVisible(o00SPEECHOFF, true);
if (textON)
_vm->setObjectVisible(o00TEXTON, true);
else
_vm->setObjectVisible(o00TEXTOFF, true);
_vm->setObjectVisible(speechObjId, true);
_vm->setObjectVisible(musicObjId, true);
_vm->setObjectVisible(sfxObjId, true);
if (speechVol < 256)
_vm->setObjectVisible(speechObjId + 1, true);
if (musicVol < 256)
_vm->setObjectVisible(musicObjId + 1, true);
if (sfxVol < 256)
_vm->setObjectVisible(sfxObjId + 1, true);
}
void LogicManager::doSystemChangeRoom() {
if (_vm->_curRoom == kRoom41D && (_vm->_oldRoom != _vm->_curMessage->_u16Param1))
_vm->_graphicsMgr->NlDissolve(30);
_vm->_oldRoom = _vm->_curRoom;
_vm->_curRoom = _vm->_curMessage->_u16Param1;
_vm->_gameQueue.initQueue();
_vm->_animQueue.initQueue();
_vm->_characterQueue.initQueue();
_vm->_lastCurInventory = 0;
_vm->_lastLightIcon = 0xFF;
_vm->_inventoryStatus = INV_OFF;
_vm->_lightIcon = 0xFF;
_vm->_flagInventoryLocked = false;
_vm->_inventoryRefreshStartLine = INVENTORY_HIDE;
_vm->_inventoryCounter = INVENTORY_HIDE;
_vm->setInventoryStart(_vm->_inventoryRefreshStartIcon, INVENTORY_HIDE);
_vm->_flagCharacterExists = true;
_vm->_flagShowCharacter = true;
_vm->_animMgr->smkStop(kSmackerIcon);
_vm->_useWith[USED] = 0;
_vm->_useWith[WITH] = 0;
_vm->_useWithInv[USED] = false;
_vm->_useWithInv[WITH] = false;
_vm->_flagUseWithStarted = false;
_vm->_lightIcon = 0xFF;
_vm->_flagCharacterSpeak = false;
_vm->_flagSomeoneSpeaks = false;
_vm->_actor->actorStop();
_vm->_pathFind->nextStep();
// Handle exit velocity in dual rooms level 2
if (_vm->_room[_vm->_oldRoom]._flag & kObjFlagExtra) {
switch (_vm->_curObj) {
case od2ETO2C:
_vm->setRoom(kRoom2E, false);
break;
case od24TO23:
_vm->setRoom(kRoom24, false);
break;
case od21TO22:
_vm->setRoom(kRoom21, false);
break;
case od2GVTO26:
_vm->setRoom(kRoom2GV, false);
break;
default:
break;
}
} else {
switch (_vm->_curObj) {
case oENTRANCE2E:
_vm->setRoom(kRoom2E, true);
break;
case od24TO26:
_vm->setRoom(kRoom24, true);
break;
case od21TO23:
_vm->setRoom(kRoom21, true);
break;
default:
break;
}
}
if (_vm->_curRoom == kRoom12 && _vm->_oldRoom == kRoom11)
_vm->_animMgr->_animTab[aBKG11]._flag |= SMKANIM_OFF1;
else if (_vm->_oldRoom == kRoom2BL || _vm->_oldRoom == kRoom36F)
_vm->_oldRoom = _vm->_curRoom;
else if (_vm->_curRoom == kRoomControlPanel)
initControlPanel();
ReadLoc();
_vm->_graphicsMgr->showCursor();
if (_vm->_curRoom == kRoom21) {
_vm->setRoom(kRoom21, _vm->_oldRoom == kRoom23A || _vm->_oldRoom == kRoom23B);
} else if (_vm->_curRoom == kRoom24) {
_vm->setRoom(kRoom24, _vm->_oldRoom == kRoom26);
} else if (_vm->_curRoom == kRoom2A) {
_vm->setRoom(kRoom2A, _vm->_oldRoom == kRoom25);
} else if (_vm->_curRoom == kRoom2B) {
_vm->setRoom(kRoom2B, _vm->_oldRoom == kRoom28);
}
// for save/load
else if (_vm->_room[_vm->_curRoom]._flag & kObjFlagExtra) {
switch (_vm->_curRoom) {
case kRoom15: _vm->read3D("152.3d"); break;
case kRoom17: _vm->read3D("172.3d"); break;
case kRoom1D: _vm->read3D("1d2.3d"); break;
case kRoom21: _vm->read3D("212.3d"); break;
case kRoom24: _vm->read3D("242.3d"); break;
case kRoom28: _vm->read3D("282.3d"); break;
case kRoom2A: _vm->read3D("2A2.3d"); break;
case kRoom2B: _vm->read3D("2B2.3d"); break;
case kRoom2E: _vm->read3D("2E2.3d"); break;
case kRoom2GV: _vm->read3D("2GV2.3d"); break;
case kRoom35: _vm->read3D("352.3d"); break;
case kRoom37: _vm->read3D("372.3d"); break;
case kRoom4P: _vm->read3D("4P2.3d"); break;
default:
break;
}
}
}
void LogicManager::doSys(uint16 curObj) {
switch (curObj) {
case o00QUIT:
if (_vm->quitPrompt())
_vm->_scheduler->doEvent(MC_SYSTEM, ME_QUIT, MP_SYSTEM, 0, 0, 0, 0);
break;
case o00EXIT:
if (_vm->_oldRoom == kRoomControlPanel)
break;
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, _vm->_obj[o00EXIT]._goRoom, 0, 0, 0);
break;
case o00SAVE:
if (_vm->_oldRoom == kRoomControlPanel)
break;
_vm->_curRoom = _vm->_obj[o00EXIT]._goRoom;
if (!_vm->dataSave()) {
_vm->showInventoryName(NO_OBJECTS, false);
_vm->_scheduler->doEvent(MC_INVENTORY, ME_SHOWICONNAME, MP_DEFAULT, _vm->_mousePos.x, _vm->_mousePos.y, 0, 0);
_vm->_scheduler->doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, _vm->_obj[o00EXIT]._goRoom, 0, 0, 0);
}
_vm->_curRoom = kRoomControlPanel;
break;
case o00LOAD:
if (!_vm->dataLoad()) {
_vm->showInventoryName(NO_OBJECTS, false);
_vm->_scheduler->doEvent(MC_INVENTORY, ME_SHOWICONNAME, MP_DEFAULT, _vm->_mousePos.x, _vm->_mousePos.y, 0, 0);
}
break;
case o00SPEECHON:
if (ConfMan.getBool("subtitles")) {
_vm->setObjectVisible(o00SPEECHON, false);
_vm->setObjectVisible(o00SPEECHOFF, true);
ConfMan.setBool("speech_mute", true);
_vm->_curObj = o00SPEECHOFF;
_vm->_textMgr->ShowObjName(_vm->_curObj, true);
}
break;
case o00SPEECHOFF:
_vm->setObjectVisible(o00SPEECHOFF, false);
_vm->setObjectVisible(o00SPEECHON, true);
ConfMan.setBool("speech_mute", false);
_vm->_curObj = o00SPEECHON;
_vm->_textMgr->ShowObjName(_vm->_curObj, true);
break;
case o00TEXTON:
if (!ConfMan.getBool("speech_mute")) {
_vm->setObjectVisible(o00TEXTON, false);
_vm->setObjectVisible(o00TEXTOFF, true);
ConfMan.setBool("subtitles", false);
_vm->_curObj = o00TEXTOFF;
_vm->_textMgr->ShowObjName(_vm->_curObj, true);
}
break;
case o00TEXTOFF:
_vm->setObjectVisible(o00TEXTOFF, false);
_vm->setObjectVisible(o00TEXTON, true);
ConfMan.setBool("subtitles", true);
_vm->_curObj = o00TEXTON;
_vm->_textMgr->ShowObjName(_vm->_curObj, true);
break;
case o00SPEECH1D:
case o00SPEECH2D:
case o00SPEECH3D:
case o00SPEECH4D:
case o00SPEECH5D:
case o00SPEECH6D:
case o00MUSIC1D:
case o00MUSIC2D:
case o00MUSIC3D:
case o00MUSIC4D:
case o00MUSIC5D:
case o00MUSIC6D:
case o00SOUND1D:
case o00SOUND2D:
case o00SOUND3D:
case o00SOUND4D:
case o00SOUND5D:
case o00SOUND6D:
_vm->setObjectVisible(curObj, false);
if ((curObj != o00SPEECH6D) && (curObj != o00MUSIC6D) && (curObj != o00SOUND6D))
_vm->setObjectVisible(curObj + 1, false);
_vm->setObjectVisible(curObj - 1, true);
_vm->setObjectVisible(curObj - 2, true);
if (curObj < o00MUSIC1D)
ConfMan.setInt("speech_volume", ((curObj - 2 - o00SPEECH1D) / 2) * 51);
else if (curObj > o00MUSIC6D)
ConfMan.setInt("sfx_volume", ((curObj - 2 - o00SOUND1D) / 2) * 51);
else
ConfMan.setInt("music_volume", ((curObj - 2 - o00MUSIC1D) / 2) * 51);
break;
case o00SPEECH1U:
case o00SPEECH2U:
case o00SPEECH3U:
case o00SPEECH4U:
case o00SPEECH5U:
case o00MUSIC1U:
case o00MUSIC2U:
case o00MUSIC3U:
case o00MUSIC4U:
case o00MUSIC5U:
case o00SOUND1U:
case o00SOUND2U:
case o00SOUND3U:
case o00SOUND4U:
case o00SOUND5U:
_vm->setObjectVisible(curObj, false);
_vm->setObjectVisible(curObj - 1, false);
_vm->setObjectVisible(curObj + 1, true);
if ((curObj != o00SPEECH5U) && (curObj != o00MUSIC5U) && (curObj != o00SOUND5U))
_vm->setObjectVisible(curObj + 2, true);
if (curObj < o00MUSIC1D)
ConfMan.setInt("speech_volume", ((curObj + 1 - o00SPEECH1D) / 2) * 51);
else if (curObj > o00MUSIC6D)
ConfMan.setInt("sfx_volume", ((curObj + 1 - o00SOUND1D) / 2) * 51);
else
ConfMan.setInt("music_volume", ((curObj + 1 - o00MUSIC1D) / 2) * 51);
break;
default:
break;
}
g_engine->syncSoundSettings();
ConfMan.flushToDisk();
}
bool LogicManager::isCloseupOrControlRoom() const {
const uint16 curRoom = _vm->_curRoom;
return curRoom == kRoom2BL ||
curRoom == kRoom36F ||
curRoom == kRoom41D ||
curRoom == kRoom49M ||
curRoom == kRoom4CT ||
curRoom == kRoom58T ||
curRoom == kRoom58M ||
curRoom == kRoom59L ||
curRoom == kRoomControlPanel ||
curRoom == kRoom12CU ||
curRoom == kRoom13CU;
}
} // End of namespace Trecision