1040 lines
36 KiB
C++
1040 lines
36 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 3 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, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
#include "watchmaker/classes/do_operate.h"
|
|
#include "watchmaker/t3d.h"
|
|
#include "watchmaker/define.h"
|
|
#include "watchmaker/globvar.h"
|
|
#include "watchmaker/ll/ll_util.h"
|
|
#include "watchmaker/ll/ll_mesh.h"
|
|
#include "watchmaker/message.h"
|
|
#include "watchmaker/schedule.h"
|
|
#include "watchmaker/classes/do_sound.h"
|
|
#include "watchmaker/windows_hacks.h"
|
|
#include "watchmaker/classes/do_string.h"
|
|
#include "watchmaker/ll/ll_diary.h"
|
|
#include "watchmaker/ll/ll_anim.h"
|
|
#include "watchmaker/classes/do_inv.h"
|
|
#include "watchmaker/3d/t3d_body.h"
|
|
|
|
namespace Watchmaker {
|
|
|
|
/* -----------------14/04/00 16.25-------------------
|
|
* UpdateSpecial
|
|
* --------------------------------------------------*/
|
|
void UpdateSpecial(WGame &game, int32 room) {
|
|
extern t3dBODY *t3dCurRoom;
|
|
t3dMESH *m;
|
|
Init &init = game.init;
|
|
|
|
|
|
switch (room) {
|
|
case r15:
|
|
if (Player && Player->Mesh) {
|
|
if ((Player->Mesh->Trasl.x > -4826.0f) && (Player->Mesh->Trasl.z > -3412.0f)) {
|
|
DebugLogWindow("r15: set0");
|
|
t3dCurRoom->CurLevel = 0;
|
|
init.Obj[o15CREPAESTERNA].flags |= ON;
|
|
init.Obj[o15BRECCIA].flags &= ~ON;
|
|
init.Obj[o15COLONNINATORRE].flags |= ON;
|
|
init.Obj[o15p2E].flags |= ON;
|
|
init.Obj[o15p2F].flags |= ON;
|
|
|
|
if ((m = LinkMeshToStr(init, "p15-portal_to_room31")))
|
|
m->Flags |= T3D_MESH_VIEWONLYPORTAL;
|
|
} else {
|
|
DebugLogWindow("r15: set1");
|
|
t3dCurRoom->CurLevel = 1;
|
|
init.Obj[o15CREPAESTERNA].flags &= ~ON;
|
|
init.Obj[o15BRECCIA].flags |= ON;
|
|
init.Obj[o15COLONNINATORRE].flags &= ~ON;
|
|
init.Obj[o15p2E].flags &= ~ON;
|
|
init.Obj[o15p2F].flags &= ~ON;
|
|
|
|
if ((m = LinkMeshToStr(init, "p15-portal_to_room31")))
|
|
m->Flags &= ~T3D_MESH_VIEWONLYPORTAL;
|
|
}
|
|
|
|
CurFloorY = t3dCurRoom->PanelHeight[t3dCurRoom->CurLevel];
|
|
}
|
|
break;
|
|
case r1F:
|
|
if (Player && Player->Mesh) {
|
|
if ((Player->Mesh->Trasl.x > -8767.0f)) {
|
|
DebugLogWindow("r1F: set0");
|
|
t3dCurRoom->CurLevel = 0;
|
|
init.Obj[o1FDETRITI].anim[CurPlayer] = a1F5;
|
|
init.Obj[o1FVARCO].anim[CurPlayer] = aNULL;
|
|
} else {
|
|
DebugLogWindow("r1F: set1");
|
|
t3dCurRoom->CurLevel = 1;
|
|
init.Obj[o1FVARCO].anim[CurPlayer] = a1F6;
|
|
init.Obj[o1FDETRITI].anim[CurPlayer] = aNULL;
|
|
}
|
|
|
|
CurFloorY = t3dCurRoom->PanelHeight[t3dCurRoom->CurLevel];
|
|
}
|
|
break;
|
|
|
|
case r1D:
|
|
if ((m = LinkMeshToStr(init, "o1d-rotellina01")) && m->hasFaceMaterial())
|
|
m->setMovieFrame((Comb1D[0]) >= 0 ? (Comb1D[0]) : 0);
|
|
if ((m = LinkMeshToStr(init, "o1d-rotellina02")) && m->hasFaceMaterial())
|
|
m->setMovieFrame((Comb1D[1]) >= 0 ? (Comb1D[1]) : 0);
|
|
if ((m = LinkMeshToStr(init, "o1d-rotellina03")) && m->hasFaceMaterial())
|
|
m->setMovieFrame((Comb1D[2]) >= 0 ? (Comb1D[2]) : 0);
|
|
if ((m = LinkMeshToStr(init, "o1d-rotellina04")) && m->hasFaceMaterial())
|
|
m->setMovieFrame((Comb1D[3]) >= 0 ? (Comb1D[3]) : 0);
|
|
if ((m = LinkMeshToStr(init, "o1d-rotellina05")) && m->hasFaceMaterial())
|
|
m->setMovieFrame((Comb1D[4]) >= 0 ? (Comb1D[4]) : 0);
|
|
break;
|
|
|
|
case r25:
|
|
if ((m = LinkMeshToStr(init, "o25-mikrondedisplayON")) && m->hasFaceMaterial())
|
|
m->setMovieFrame((Forno25) >= 0 ? (Forno25) : 0);
|
|
if ((m = LinkMeshToStr(init, "o25-freezervask02")) && m->hasFaceMaterial())
|
|
m->setMovieFrame((Frigo25) >= 0 ? (Frigo25) : 0);
|
|
|
|
break;
|
|
|
|
case r2D:
|
|
if ((m = LinkMeshToStr(init, "o2d-displayino01")) && m->hasFaceMaterial())
|
|
m->setMovieFrame((Comb2D[0] - o2D0 + 1) >= 0 ? (Comb2D[0] - o2D0 + 1) : 0);
|
|
if ((m = LinkMeshToStr(init, "o2d-displayino02")) && m->hasFaceMaterial())
|
|
m->setMovieFrame((Comb2D[1] - o2D0 + 1) >= 0 ? (Comb2D[1] - o2D0 + 1) : 0);
|
|
if ((m = LinkMeshToStr(init, "o2d-displayino03")) && m->hasFaceMaterial())
|
|
m->setMovieFrame((Comb2D[2] - o2D0 + 1) >= 0 ? (Comb2D[2] - o2D0 + 1) : 0);
|
|
if ((m = LinkMeshToStr(init, "o2d-displayino04")) && m->hasFaceMaterial())
|
|
m->setMovieFrame((Comb2D[3] - o2D0 + 1) >= 0 ? (Comb2D[3] - o2D0 + 1) : 0);
|
|
if ((m = LinkMeshToStr(init, "o2d-displayino05")) && m->hasFaceMaterial())
|
|
m->setMovieFrame((Comb2D[4] - o2D0 + 1) >= 0 ? (Comb2D[4] - o2D0 + 1) : 0);
|
|
break;
|
|
|
|
case r2Q:
|
|
if ((m = LinkMeshToStr(init, "o2q-displayino01")) && m->hasFaceMaterial())
|
|
m->setMovieFrame((Comb2Q[0] - o2Q0 + 1) >= 0 ? (Comb2Q[0] - o2Q0 + 1) : 0);
|
|
if ((m = LinkMeshToStr(init, "o2q-displayino02")) && m->hasFaceMaterial())
|
|
m->setMovieFrame((Comb2Q[1] - o2Q0 + 1) >= 0 ? (Comb2Q[1] - o2Q0 + 1) : 0);
|
|
if ((m = LinkMeshToStr(init, "o2q-displayino03")) && m->hasFaceMaterial())
|
|
m->setMovieFrame((Comb2Q[2] - o2Q0 + 1) >= 0 ? (Comb2Q[2] - o2Q0 + 1) : 0);
|
|
if ((m = LinkMeshToStr(init, "o2q-displayino04")) && m->hasFaceMaterial())
|
|
m->setMovieFrame((Comb2Q[3] - o2Q0 + 1) >= 0 ? (Comb2Q[3] - o2Q0 + 1) : 0);
|
|
if ((m = LinkMeshToStr(init, "o2q-displayino05")) && m->hasFaceMaterial())
|
|
m->setMovieFrame((Comb2Q[4] - o2Q0 + 1) >= 0 ? (Comb2Q[4] - o2Q0 + 1) : 0);
|
|
break;
|
|
|
|
case r31:
|
|
if ((m = LinkMeshToStr(init, init.Obj[o31LEVETTA1].getMeshLink(0)))) t3dSetSpecialAnimFrame(game, "r31-cles01.a3d", m, Comb31[0] + 1);
|
|
if ((m = LinkMeshToStr(init, init.Obj[o31LEVETTA2].getMeshLink(0)))) t3dSetSpecialAnimFrame(game, "r31-cles02.a3d", m, Comb31[1] + 1);
|
|
if ((m = LinkMeshToStr(init, init.Obj[o31LEVETTA3].getMeshLink(0)))) t3dSetSpecialAnimFrame(game, "r31-cles03.a3d", m, Comb31[2] + 1);
|
|
if ((m = LinkMeshToStr(init, init.Obj[o31LEVETTA4].getMeshLink(0)))) t3dSetSpecialAnimFrame(game, "r31-cles04.a3d", m, Comb31[3] + 1);
|
|
if ((m = LinkMeshToStr(init, init.Obj[o31LEVETTA5].getMeshLink(0)))) t3dSetSpecialAnimFrame(game, "r31-cles05.a3d", m, Comb31[4] + 1);
|
|
break;
|
|
|
|
case r38:
|
|
if (Player && Player->Mesh) {
|
|
if (Player->Mesh->Trasl.y < 2000.0f) {
|
|
DebugLogWindow("r38: set0");
|
|
init.Obj[o38SCALA].anim[CurPlayer] = a382;
|
|
init.Obj[o38SCALA].pos = 2;
|
|
} else {
|
|
DebugLogWindow("r38: set1");
|
|
init.Obj[o38SCALA].anim[CurPlayer] = a383;
|
|
init.Obj[o38SCALA].pos = 3;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case r44:
|
|
if ((m = LinkMeshToStr(init, "o44-lancettaore"))) t3dSetSpecialAnimFrame(game, "r44-orologio-ore.a3d", m, Comb44[0]);
|
|
if ((m = LinkMeshToStr(init, "o44-lancettaminuti"))) t3dSetSpecialAnimFrame(game, "r44-orologio-minuti.a3d", m, Comb44[1]);
|
|
if ((m = LinkMeshToStr(init, "o44-indicatore"))) t3dSetSpecialAnimFrame(game, "r44-gradi.a3d", m, Comb44[2] + 1);
|
|
break;
|
|
|
|
case r45:
|
|
if ((m = LinkMeshToStr(init, "o45-contatore01")) && m->hasFaceMaterial())
|
|
m->setMovieFrame((Comb45[0]) >= 0 ? (Comb45[0]) : 0);
|
|
if ((m = LinkMeshToStr(init, "o45-contatore02")) && m->hasFaceMaterial())
|
|
m->setMovieFrame((Comb45[1]) >= 0 ? (Comb45[1]) : 0);
|
|
if ((m = LinkMeshToStr(init, "o45-contatore03")) && m->hasFaceMaterial())
|
|
m->setMovieFrame((Comb45[2]) >= 0 ? (Comb45[2]) : 0);
|
|
if ((m = LinkMeshToStr(init, "o45-contatore04")) && m->hasFaceMaterial())
|
|
m->setMovieFrame((Comb45[3]) >= 0 ? (Comb45[3]) : 0);
|
|
if ((m = LinkMeshToStr(init, "o45-contatore05")) && m->hasFaceMaterial())
|
|
m->setMovieFrame((Comb45[4]) >= 0 ? (Comb45[4]) : 0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* -----------------19/05/98 16.40-------------------
|
|
* doOperate
|
|
* --------------------------------------------------*/
|
|
void doOperate(WGame &game, int32 obj) {
|
|
extern t3dBODY *t3dCurRoom;
|
|
uint8 sent = FALSE;
|
|
int32 sa = 0;
|
|
Init &init = game.init;
|
|
|
|
if (bPorteEsternoBloccate) {
|
|
// non faccio entrare il giocatore nel castello
|
|
if (obj == oXT1Ap22) {
|
|
sa = aCURPLAYER_PARLA;
|
|
PlayerSpeak(game, init.Obj[oXT1Ap22].text[0]);
|
|
return;
|
|
}
|
|
|
|
if (obj == oXT11p21) {
|
|
sa = aCURPLAYER_PARLA;
|
|
PlayerSpeak(game, init.Obj[oXT1Ap22].text[0]);
|
|
return;
|
|
}
|
|
|
|
if (obj == oXT18p25) {
|
|
sa = aCURPLAYER_PARLA;
|
|
PlayerSpeak(game, init.Obj[oXT1Ap22].text[0]);
|
|
return;
|
|
}
|
|
|
|
if (obj == oXT14p3C) {
|
|
sa = aCURPLAYER_PARLA;
|
|
PlayerSpeak(game, init.Obj[oXT1Ap22].text[0]);
|
|
return;
|
|
}
|
|
|
|
if (obj == oXT1APOZZO) {
|
|
sa = aCURPLAYER_PARLA;
|
|
PlayerSpeak(game, init.Obj[oXT1APOZZO].text[1]);
|
|
return;
|
|
}
|
|
}
|
|
|
|
switch (obj) {
|
|
case oXT1APOZZO:
|
|
if (init.Obj[obj].anim[CurPlayer]) {
|
|
if (!(init.Obj[oXT1APOZZO].flags & EXTRA2)) {
|
|
IncCurTime(game, 15);
|
|
init.Obj[oXT1APOZZO].flags |= EXTRA2;
|
|
}
|
|
sa = init.Obj[obj].anim[CurPlayer];
|
|
} else
|
|
sent = TRUE;
|
|
break;
|
|
|
|
case oXT14BASAMENTO:
|
|
if ((WhichAnimChar(init, ocGIARDINIERE) == aGIA141) || (WhichAnimChar(init, ocGIARDINIERE) == aGIA142))
|
|
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dGIARDINIERE_INTERRUPT1, 0, 0, nullptr, nullptr, nullptr);
|
|
else if (init.Obj[obj].anim[CurPlayer])
|
|
sa = init.Obj[obj].anim[CurPlayer];
|
|
else
|
|
sent = TRUE;
|
|
break;
|
|
|
|
case o13SCRITTOIO:
|
|
case o13MOBILE:
|
|
case o13CREDENZA:
|
|
if (WhichRoomChar(init, ocCUSTODE) == r13)
|
|
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dCUSTODE_INTERRUPT3, 0, 0, nullptr, nullptr, nullptr);
|
|
else if (init.Obj[obj].anim[CurPlayer])
|
|
sa = init.Obj[obj].anim[CurPlayer];
|
|
else
|
|
sent = TRUE;
|
|
break;
|
|
|
|
case o13SCALPELLO:
|
|
if (WhichRoomChar(init, ocCUSTODE) == r13)
|
|
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dCUSTODE_INTERRUPT1, 0, 0, nullptr, nullptr, nullptr);
|
|
else if (init.Obj[obj].anim[CurPlayer])
|
|
sa = init.Obj[obj].anim[CurPlayer];
|
|
else
|
|
sent = TRUE;
|
|
break;
|
|
|
|
// case o17COMPUTER:
|
|
// Event( EventClass::MC_T2D, ME_T2DSTART, MP_DEFAULT, 0, 0, tCOMPUTER, NULL, NULL, NULL );
|
|
// break;
|
|
|
|
case o19T01:
|
|
case o19T02:
|
|
case o19T03:
|
|
case o19T04:
|
|
case o19T05:
|
|
case o19T06:
|
|
case o19T07:
|
|
case o19T08:
|
|
case o19T09:
|
|
case o19T10:
|
|
case o19T11:
|
|
case o19T12:
|
|
case o19T13:
|
|
case o19T14:
|
|
case o19T15:
|
|
case o19T16:
|
|
case o19T17:
|
|
case o19T18:
|
|
case o19T19:
|
|
case o19T20:
|
|
case o19T21:
|
|
case o19T22:
|
|
case o19T23:
|
|
case o19T24:
|
|
case o19T25:
|
|
case o19T26:
|
|
case o19T27:
|
|
case o19T28:
|
|
case o19T29:
|
|
case o19T30:
|
|
case o19T31:
|
|
case o19T32:
|
|
case o19T33:
|
|
case o19T34:
|
|
case o19T35:
|
|
case o19T36:
|
|
case o19T37:
|
|
case o19T38:
|
|
case o19T39:
|
|
case o19T40:
|
|
case o19T41:
|
|
case o19T42:
|
|
case o19T43:
|
|
case o19T44:
|
|
case o19T45:
|
|
case o19T46:
|
|
case o19T47:
|
|
case o19T48:
|
|
case o19T49:
|
|
case o19T50:
|
|
case o19T51:
|
|
case o19T52:
|
|
case o19T53:
|
|
case o19T54:
|
|
case o19T55:
|
|
case o19T56:
|
|
case o19T57:
|
|
case o19T58:
|
|
case o19T59:
|
|
case o19T60:
|
|
case o19T61:
|
|
case o19T62:
|
|
case o19T63:
|
|
case o19T64:
|
|
StartSound(game, w197);
|
|
Comb19[0] = Comb19[1];
|
|
Comb19[1] = Comb19[2];
|
|
Comb19[2] = obj;
|
|
if ((Comb19[1] == o19T22) && (Comb19[2] == o19T26) && !(init.Obj[o37BACHECA].flags & EXTRA)) {
|
|
Comb19[0] = Comb19[1] = Comb19[2] = 0;
|
|
_vm->_messageSystem.doEvent(EventClass::MC_CAMERA, ME_CAMERA1TO3, MP_DEFAULT, 0, 0, 0, nullptr, nullptr, nullptr);
|
|
_vm->_messageSystem.doEvent(EventClass::MC_STRING, ME_PLAYERSPEAK, MP_WAIT_CAMERA, init.Obj[o19SCACCHIERA].text[0], 0, 0, nullptr, nullptr, nullptr);
|
|
break;
|
|
}
|
|
|
|
if ((Comb19[0] == o19T22) && (Comb19[1] == o19T26) && (Comb19[2] == o19T40)) {
|
|
init.Obj[o19SCACCHIERA].anim[CurPlayer] = init.Obj[o19SCACCHIERA].anim[CurPlayer ^ 1] = a193;
|
|
_vm->_messageSystem.doEvent(EventClass::MC_CAMERA, ME_CAMERA1TO3, MP_DEFAULT, 0, 0, 0, nullptr, nullptr, nullptr);
|
|
CurObj = o19SCACCHIERA;
|
|
_vm->_messageSystem.doEvent(EventClass::MC_ACTION, ME_MOUSEOPERATE, MP_WAIT_CAMERA, 0, 0, bFirstPerson, &CurObj, nullptr, nullptr);
|
|
}
|
|
break;
|
|
|
|
case o1DSWITCH1:
|
|
case o1DSWITCH2:
|
|
case o1DSWITCH3:
|
|
case o1DSWITCH4:
|
|
case o1DSWITCH5:
|
|
Comb1D[obj - o1DSWITCH1] ++;
|
|
if (Comb1D[obj - o1DSWITCH1] > 10) Comb1D[obj - o1DSWITCH1] = 0;
|
|
UpdateSpecial(game, r1D);
|
|
break;
|
|
|
|
case o1DTASTO:
|
|
StartSound(game, w1D7);
|
|
if (
|
|
IconInInv(init, i2cBANCONOTA1) && (!(init.Obj[o1DVALIGETTAAP].flags & ON))
|
|
&& (Comb1D[0] == 4 + 1) && (Comb1D[1] == 1 + 1) && (Comb1D[2] == 7 + 1) && (Comb1D[3] == 3 + 1) && (Comb1D[4] == 0 + 1)
|
|
) {
|
|
init.Obj[o1DVALIGETTACH].anim[DARRELL] = init.Obj[o1DVALIGETTACH].anim[VICTORIA] = a1D8;
|
|
init.Obj[o1DVALIGETTACH].pos = 8;
|
|
CurObj = o1DVALIGETTACH;
|
|
StartAnim(game, init.Obj[o1DVALIGETTACH].anim[CurPlayer]);
|
|
if (!(init.Obj[o1DTASTO].flags & EXTRA2)) {
|
|
IncCurTime(game, 15);
|
|
init.Obj[o1DTASTO].flags |= EXTRA2;
|
|
init.Obj[o1DTASTO].action[CurPlayer] = init.Obj[o1DTASTO].action[CurPlayer ^ 1] = init.Obj[o1DTASTO].text[0];
|
|
sent = TRUE;
|
|
}
|
|
} else
|
|
sent = TRUE;
|
|
break;
|
|
|
|
case o1DVALIGETTACH:
|
|
if (IconInInv(init, i2cBANCONOTA1) && (Comb1D[0] == 4 + 1) && (Comb1D[1] == 1 + 1) && (Comb1D[2] == 7 + 1) && (Comb1D[3] == 3 + 1) && (Comb1D[4] == 0 + 1)) {
|
|
init.Obj[o1DVALIGETTACH].anim[DARRELL] = init.Obj[o1DVALIGETTACH].anim[VICTORIA] = a1D8;
|
|
init.Obj[o1DVALIGETTACH].pos = 8;
|
|
|
|
if (!(init.Obj[o1DTASTO].flags & EXTRA2)) {
|
|
IncCurTime(game, 15);
|
|
init.Obj[o1DTASTO].flags |= EXTRA2;
|
|
init.Obj[o1DTASTO].action[CurPlayer] = init.Obj[o1DTASTO].action[CurPlayer ^ 1] = init.Obj[o1DTASTO].text[0];
|
|
sent = TRUE;
|
|
}
|
|
} else {
|
|
init.Obj[o1DVALIGETTACH].anim[DARRELL] = init.Obj[o1DVALIGETTACH].anim[VICTORIA] = a1D6;
|
|
init.Obj[o1DVALIGETTACH].pos = 6;
|
|
}
|
|
CurObj = o1DVALIGETTACH;
|
|
StartAnim(game, init.Obj[o1DVALIGETTACH].anim[CurPlayer]);
|
|
break;
|
|
|
|
/* case o1FPULSANTE:
|
|
if ( init.Obj[o1FLEVAGIU].flags & ON )
|
|
Event( EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dR1F1, 0, 0, NULL, NULL, NULL );
|
|
else if( init.Obj[obj].anim[CurPlayer] )
|
|
sa = init.Obj[obj].anim[CurPlayer];
|
|
else
|
|
sent = TRUE;
|
|
break;
|
|
*/
|
|
case o23ATASTO1:
|
|
case o23BTASTO1:
|
|
case o23CTASTO1:
|
|
bNoFirstPersonSwitch = FALSE;
|
|
ChangeRoom(game, "r21-a.t3d", 46, a2111);
|
|
if (obj == o23ATASTO1)
|
|
_vm->_messageSystem.doEvent(EventClass::MC_CAMERA, ME_CAMERA1TO3, MP_DEFAULT, 0, 0, TRUE, nullptr, nullptr, nullptr);
|
|
break;
|
|
case o23ATASTO2:
|
|
case o23BTASTO2:
|
|
case o23CTASTO2:
|
|
bNoFirstPersonSwitch = FALSE;
|
|
ChangeRoom(game, "r26-b.t3d", 46, a268);
|
|
if (obj == o23BTASTO2)
|
|
_vm->_messageSystem.doEvent(EventClass::MC_CAMERA, ME_CAMERA1TO3, MP_DEFAULT, 0, 0, TRUE, nullptr, nullptr, nullptr);
|
|
break;
|
|
case o23ATASTO3:
|
|
case o23BTASTO3:
|
|
case o23CTASTO3:
|
|
bNoFirstPersonSwitch = FALSE;
|
|
ChangeRoom(game, "r2c.t3d", 46, a2C10);
|
|
if (obj == o23CTASTO3)
|
|
_vm->_messageSystem.doEvent(EventClass::MC_CAMERA, ME_CAMERA1TO3, MP_DEFAULT, 0, 0, TRUE, nullptr, nullptr, nullptr);
|
|
break;
|
|
case o25TASTOPIUFORNO:
|
|
if (init.Obj[o25TASTOOFFFORNO].flags & ON) {
|
|
if (Forno25 < 34) Forno25 ++;
|
|
UpdateSpecial(game, r25);
|
|
}
|
|
break;
|
|
case o25TASTOMENOFORNO:
|
|
if (init.Obj[o25TASTOOFFFORNO].flags & ON) {
|
|
if (Forno25 > 0) Forno25 --;
|
|
UpdateSpecial(game, r25);
|
|
}
|
|
break;
|
|
case o25TASTOPIUCONGELATORE:
|
|
case o25TASTOMENOCONGELATORE:
|
|
if (obj == o25TASTOPIUCONGELATORE) {
|
|
if (Frigo25 < 8) Frigo25 ++;
|
|
} else {
|
|
if (Frigo25 > 0) Frigo25 --;
|
|
}
|
|
|
|
UpdateSpecial(game, r25);
|
|
|
|
// se la fiala e' OK ma il frigo non e' a -25 la fiala salta
|
|
if ((init.Obj[o25FIALAACONGELATOREFREDDA].flags & ON) && (Frigo25 != 3)) {
|
|
init.Obj[o25FIALAACONGELATOREFREDDA].flags &= ~ON;
|
|
init.Obj[o25FIALAACONGELATORE].flags |= ON;
|
|
UpdateObjMesh(init, o25FIALAACONGELATORE);
|
|
UpdateObjMesh(init, o25FIALAACONGELATOREFREDDA);
|
|
}
|
|
|
|
// se la fiala non e' OK ed il frigo e' chiuso...
|
|
if ((init.Obj[o25CONGELATORE2CH].flags & ON) && (init.Obj[o25FIALAACONGELATORE].flags & ON) && (Frigo25 == 3)) {
|
|
init.Obj[o25FIALAACONGELATORE].flags &= ~ON;
|
|
init.Obj[o25FIALAACONGELATOREFREDDA].flags |= ON;
|
|
UpdateObjMesh(init, o25FIALAACONGELATORE);
|
|
UpdateObjMesh(init, o25FIALAACONGELATOREFREDDA);
|
|
}
|
|
|
|
break;
|
|
case o25CONGELATORE2AP:
|
|
if ((init.Obj[o25FIALAACONGELATORE].flags & ON) && (Frigo25 == 3)) {
|
|
init.Obj[o25FIALAACONGELATORE].flags &= ~ON;
|
|
init.Obj[o25FIALAACONGELATOREFREDDA].flags |= ON;
|
|
UpdateObjMesh(init, o25FIALAACONGELATORE);
|
|
UpdateObjMesh(init, o25FIALAACONGELATOREFREDDA);
|
|
}
|
|
|
|
if (init.Obj[obj].anim[CurPlayer])
|
|
sa = init.Obj[obj].anim[CurPlayer];
|
|
else
|
|
sent = TRUE;
|
|
break;
|
|
|
|
case o25FORNOCH:
|
|
case o25FORNOAP:
|
|
if (WhichRoomChar(init, ocCUOCO) == r25)
|
|
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dCUOCO_INTERRUPT1, 0, 0, nullptr, nullptr, nullptr);
|
|
else if (init.Obj[obj].anim[CurPlayer])
|
|
sa = init.Obj[obj].anim[CurPlayer];
|
|
else
|
|
sent = TRUE;
|
|
break;
|
|
|
|
case o25MOBILETTO:
|
|
if (WhichRoomChar(init, ocCUOCO) == r25)
|
|
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dCUOCO_INTERRUPT2, 0, 0, nullptr, nullptr, nullptr);
|
|
else if (init.Obj[obj].anim[CurPlayer])
|
|
sa = init.Obj[obj].anim[CurPlayer];
|
|
else
|
|
sent = TRUE;
|
|
break;
|
|
|
|
case o25SCAFFALEMAGAZZINO:
|
|
if (WhichRoomChar(init, ocDOMESTICA) == r25)
|
|
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dDOMESTICA_INTERRUPT1, 0, 0, nullptr, nullptr, nullptr);
|
|
else if (init.Obj[obj].anim[CurPlayer])
|
|
sa = init.Obj[obj].anim[CurPlayer];
|
|
else
|
|
sent = TRUE;
|
|
break;
|
|
|
|
case o28LIBRO:
|
|
case o28ANTECXCH:
|
|
case o28ANTEDXCH:
|
|
case o28ANTESXCH:
|
|
if (WhichRoomChar(init, ocDOMESTICA) == r28)
|
|
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dDOMESTICA_INTERRUPT2, 0, 0, nullptr, nullptr, nullptr);
|
|
else if (init.Obj[obj].anim[CurPlayer])
|
|
sa = init.Obj[obj].anim[CurPlayer];
|
|
else
|
|
sent = TRUE;
|
|
break;
|
|
|
|
case o29COMPUTER:
|
|
if (WhichRoomChar(init, ocSUPERVISORE) == r29)
|
|
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dSUPERVISORE_INTERRUPT1, 0, 0, nullptr, nullptr, nullptr);
|
|
else {
|
|
if (init.Obj[obj].flags & EXTRA)
|
|
_vm->_messageSystem.doEvent(EventClass::MC_T2D, ME_T2DSTART, MP_DEFAULT, 0, 0, tSCANNER, nullptr, nullptr, nullptr);
|
|
else
|
|
sent = TRUE;
|
|
}
|
|
break;
|
|
|
|
case o29SCHEDARIO:
|
|
case o29PORTAFOTOCONJUDE:
|
|
case o29SCANNER:
|
|
if (WhichRoomChar(init, ocSUPERVISORE) == r29)
|
|
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dSUPERVISORE_INTERRUPT1, 0, 0, nullptr, nullptr, nullptr);
|
|
else if (init.Obj[obj].anim[CurPlayer])
|
|
sa = init.Obj[obj].anim[CurPlayer];
|
|
else
|
|
sent = TRUE;
|
|
break;
|
|
|
|
case o29PORTA:
|
|
if (WhichRoomChar(init, ocSUPERVISORE) == r29)
|
|
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dSUPERVISORE_INTERRUPT3, 0, 0, nullptr, nullptr, nullptr);
|
|
else if (init.Obj[obj].anim[CurPlayer])
|
|
sa = init.Obj[obj].anim[CurPlayer];
|
|
else
|
|
sent = TRUE;
|
|
break;
|
|
|
|
case o2DTASTIERINO:
|
|
if (init.Obj[obj].anim[CurPlayer] == aTO1PERSON)
|
|
sa = init.Obj[obj].anim[CurPlayer];
|
|
else if (init.Obj[obj].anim[CurPlayer])
|
|
sa = init.Obj[obj].anim[CurPlayer];
|
|
UpdateSpecial(game, r2D);
|
|
break;
|
|
|
|
case o2D0:
|
|
case o2D1:
|
|
case o2D2:
|
|
case o2D3:
|
|
case o2D4:
|
|
case o2D5:
|
|
case o2D6:
|
|
case o2D7:
|
|
case o2D8:
|
|
case o2D9:
|
|
StartSound(game, w2D8);
|
|
Comb2D[0] = Comb2D[1];
|
|
Comb2D[1] = Comb2D[2];
|
|
Comb2D[2] = Comb2D[3];
|
|
Comb2D[3] = Comb2D[4];
|
|
Comb2D[4] = obj;
|
|
UpdateSpecial(game, r2D);
|
|
break;
|
|
|
|
case o2DC:
|
|
StartSound(game, w2D9);
|
|
Comb2D[4] = Comb2D[3];
|
|
Comb2D[3] = Comb2D[2];
|
|
Comb2D[2] = Comb2D[1];
|
|
Comb2D[1] = Comb2D[0];
|
|
Comb2D[0] = 0;
|
|
UpdateSpecial(game, r2D);
|
|
break;
|
|
|
|
case o2DE:
|
|
if ((Comb2D[0] == o2D1) && (Comb2D[1] == o2D2) && (Comb2D[2] == o2D4) && (Comb2D[3] == o2D8) && (Comb2D[4] == o2D0)) {
|
|
init.Obj[o2DTASTIERINO].anim[CurPlayer] = init.Obj[o2DTASTIERINO].anim[CurPlayer ^ 1] = a2D11;
|
|
_vm->_messageSystem.doEvent(EventClass::MC_CAMERA, ME_CAMERA1TO3, MP_DEFAULT, 0, 0, 0, nullptr, nullptr, nullptr);
|
|
CurObj = o2DTASTIERINO;
|
|
_vm->_messageSystem.doEvent(EventClass::MC_ACTION, ME_MOUSEOPERATE, MP_WAIT_CAMERA, 0, 0, bFirstPerson, &CurObj, nullptr, nullptr);
|
|
StartSound(game, w2D10);
|
|
} else
|
|
StartSound(game, w2D9B);
|
|
Comb2D[0] = Comb2D[1] = Comb2D[2] = Comb2D[3] = Comb2D[4] = 0;
|
|
UpdateSpecial(game, r2D);
|
|
break;
|
|
|
|
case o2GFILTRODXAP:
|
|
if ((init.Obj[o2GOFF].flags & EXTRA) && (init.Obj[obj].anim[CurPlayer])) {
|
|
sa = init.Obj[obj].anim[CurPlayer];
|
|
if (!(init.Obj[o2GFILTROSXAP].flags & ON))
|
|
init.Obj[o2GOFF].flags &= ~EXTRA;
|
|
} else
|
|
sent = TRUE;
|
|
break;
|
|
case o2GFILTROSXAP:
|
|
if ((init.Obj[o2GOFF].flags & EXTRA) && (init.Obj[obj].anim[CurPlayer])) {
|
|
sa = init.Obj[obj].anim[CurPlayer];
|
|
if (!(init.Obj[o2GFILTRODXAP].flags & ON))
|
|
init.Obj[o2GOFF].flags &= ~EXTRA;
|
|
} else
|
|
sent = TRUE;
|
|
break;
|
|
|
|
case o2GOFF:
|
|
if ((init.Obj[o2GFILTRODXCH].flags & ON) && (init.Obj[o2GFILTROSXCH].flags & ON)) {
|
|
if ((!(init.InvObj[i2iDETERSIVO].flags & USEWITH)) && (!(init.InvObj[i2iDETERSIVO].flags & EXTRA2))) {
|
|
init.InvObj[i2iDETERSIVO].flags |= EXTRA2;
|
|
StartAnim(game, a2G9_parte_rtv);
|
|
} else StartAnim(game, a2G9);
|
|
} else
|
|
PlayerSpeak(game, init.Obj[obj].text[0]);
|
|
|
|
break;
|
|
|
|
case o2OATASTOU:
|
|
case o2OBTASTOU:
|
|
case o2OCTASTOU:
|
|
case o2ODTASTOU:
|
|
case o2OETASTOU:
|
|
bNoFirstPersonSwitch = FALSE;
|
|
ChangeRoom(game, "r2h.t3d", 43, a2H7);
|
|
if (obj == o2OATASTOU)
|
|
_vm->_messageSystem.doEvent(EventClass::MC_CAMERA, ME_CAMERA1TO3, MP_DEFAULT, 0, 0, TRUE, nullptr, nullptr, nullptr);
|
|
break;
|
|
case o2OATASTO0:
|
|
case o2OBTASTO0:
|
|
case o2OCTASTO0:
|
|
case o2ODTASTO0:
|
|
case o2OETASTO0:
|
|
bNoFirstPersonSwitch = FALSE;
|
|
ChangeRoom(game, "r2m-a.t3d", 43, a2M1);
|
|
if (obj == o2OBTASTO0)
|
|
_vm->_messageSystem.doEvent(EventClass::MC_CAMERA, ME_CAMERA1TO3, MP_DEFAULT, 0, 0, TRUE, nullptr, nullptr, nullptr);
|
|
break;
|
|
case o2OATASTO1:
|
|
case o2OBTASTO1:
|
|
case o2OCTASTO1:
|
|
case o2ODTASTO1:
|
|
case o2OETASTO1:
|
|
bNoFirstPersonSwitch = FALSE;
|
|
ChangeRoom(game, "r2b-a.t3d", 43, a2B14);
|
|
if (obj == o2OCTASTO1)
|
|
_vm->_messageSystem.doEvent(EventClass::MC_CAMERA, ME_CAMERA1TO3, MP_DEFAULT, 0, 0, TRUE, nullptr, nullptr, nullptr);
|
|
break;
|
|
case o2OATASTO2:
|
|
case o2OBTASTO2:
|
|
case o2OCTASTO2:
|
|
case o2ODTASTO2:
|
|
case o2OETASTO2:
|
|
bNoFirstPersonSwitch = FALSE;
|
|
ChangeRoom(game, "r2p.t3d", 43, a2P6);
|
|
if (obj == o2ODTASTO2)
|
|
_vm->_messageSystem.doEvent(EventClass::MC_CAMERA, ME_CAMERA1TO3, MP_DEFAULT, 0, 0, TRUE, nullptr, nullptr, nullptr);
|
|
break;
|
|
case o2OATASTO3:
|
|
case o2OBTASTO3:
|
|
case o2OCTASTO3:
|
|
case o2ODTASTO3:
|
|
case o2OETASTO3:
|
|
bNoFirstPersonSwitch = FALSE;
|
|
ChangeRoom(game, "r2c.t3d", 43, a2C9);
|
|
if (obj == o2OETASTO3)
|
|
_vm->_messageSystem.doEvent(EventClass::MC_CAMERA, ME_CAMERA1TO3, MP_DEFAULT, 0, 0, TRUE, nullptr, nullptr, nullptr);
|
|
break;
|
|
|
|
case o2Pp2D:
|
|
if ((init.Obj[o24BOCCIOLO].flags & EXTRA) && !(init.Dialog[dR2P1].flags & DIALOG_DONE))
|
|
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dR2P1, 0, 0, nullptr, nullptr, nullptr);
|
|
else if (init.Obj[obj].anim[CurPlayer])
|
|
sa = init.Obj[obj].anim[CurPlayer];
|
|
else
|
|
sent = TRUE;
|
|
break;
|
|
|
|
case o2QTASTIERINO:
|
|
if (init.Obj[obj].anim[CurPlayer] == aTO1PERSON)
|
|
sa = init.Obj[obj].anim[CurPlayer];
|
|
else if (init.Obj[obj].anim[CurPlayer])
|
|
sa = init.Obj[obj].anim[CurPlayer];
|
|
|
|
Comb2Q[0] = Comb2Q[1] = Comb2Q[2] = Comb2Q[3] = Comb2Q[4] = 0;
|
|
UpdateSpecial(game, r2Q);
|
|
break;
|
|
|
|
case o2Q0:
|
|
case o2Q1:
|
|
case o2Q2:
|
|
case o2Q3:
|
|
case o2Q4:
|
|
case o2Q5:
|
|
case o2Q6:
|
|
case o2Q7:
|
|
case o2Q8:
|
|
case o2Q9:
|
|
StartSound(game, w2Q8);
|
|
Comb2Q[0] = Comb2Q[1];
|
|
Comb2Q[1] = Comb2Q[2];
|
|
Comb2Q[2] = Comb2Q[3];
|
|
Comb2Q[3] = Comb2Q[4];
|
|
Comb2Q[4] = obj;
|
|
UpdateSpecial(game, r2Q);
|
|
break;
|
|
|
|
case o2QC:
|
|
StartSound(game, w2Q9);
|
|
Comb2Q[4] = Comb2Q[3];
|
|
Comb2Q[3] = Comb2Q[2];
|
|
Comb2Q[2] = Comb2Q[1];
|
|
Comb2Q[1] = Comb2Q[0];
|
|
Comb2Q[0] = 0;
|
|
UpdateSpecial(game, r2Q);
|
|
break;
|
|
|
|
case o2QE:
|
|
if (IconInInv(init, i29FOTOJUDE1) && (Comb2Q[1] == o2Q9) && (Comb2Q[2] == o2Q7) && (Comb2Q[3] == o2Q9) && (Comb2Q[4] == o2Q5)) {
|
|
init.Obj[o2QTASTIERINO].anim[CurPlayer] = init.Obj[o2QTASTIERINO].anim[CurPlayer ^ 1] = a2Q11;
|
|
_vm->_messageSystem.doEvent(EventClass::MC_CAMERA, ME_CAMERA1TO3, MP_DEFAULT, 0, 0, 0, nullptr, nullptr, nullptr);
|
|
CurObj = o2QTASTIERINO;
|
|
_vm->_messageSystem.doEvent(EventClass::MC_ACTION, ME_MOUSEOPERATE, MP_WAIT_CAMERA, 0, 0, bFirstPerson, &CurObj, nullptr, nullptr);
|
|
StartSound(game, w2Q10);
|
|
} else
|
|
StartSound(game, w2Q9B);
|
|
Comb2Q[0] = Comb2Q[1] = Comb2Q[2] = Comb2Q[3] = Comb2Q[4] = 0;
|
|
UpdateSpecial(game, r2Q);
|
|
break;
|
|
|
|
case o31LEVA:
|
|
if ((init.Obj[o31DISCONUOVO].flags & ON) && (init.Obj[o31INGRALEGNO].flags & ON))
|
|
sa = a312;
|
|
else
|
|
sa = a311;
|
|
break;
|
|
|
|
case o31LEVETTA1:
|
|
case o31LEVETTA2:
|
|
case o31LEVETTA3:
|
|
case o31LEVETTA4:
|
|
case o31LEVETTA5:
|
|
if (init.Obj[o31CRISTALLOATTIVATO].flags & ON) {
|
|
StartSound(game, w3118);
|
|
if (++Comb31[obj - o31LEVETTA1] > 7) Comb31[obj - o31LEVETTA1] = 0;
|
|
UpdateSpecial(game, r31);
|
|
if ((Comb31[0] == 1) && (Comb31[1] == 6) && (Comb31[2] == 3) && (Comb31[3] == 5) && (Comb31[4] == 7)) {
|
|
_vm->_messageSystem.doEvent(EventClass::MC_CAMERA, ME_CAMERA1TO3, MP_DEFAULT, 0, 0, 0, nullptr, nullptr, nullptr);
|
|
_vm->_messageSystem.doEvent(EventClass::MC_ANIM, ME_STARTANIM, MP_WAIT_CAMERA, a319, 0, bFirstPerson, &CurObj, nullptr, nullptr);
|
|
}
|
|
} else
|
|
sa = a3110;
|
|
break;
|
|
|
|
case o32LEVA: {
|
|
if (!t3dCurRoom->name.equalsIgnoreCase(PlayerStand[CurPlayer ^ 1].roomName))
|
|
sa = a323;
|
|
else {
|
|
if (CurPlayer == DARRELL)
|
|
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dR321_DAR, 0, 0, nullptr, nullptr, nullptr);
|
|
if (CurPlayer == VICTORIA)
|
|
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dR321_VIC, 0, 0, nullptr, nullptr, nullptr);
|
|
sa = aNULL;
|
|
sent = FALSE;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case o36PIATTODX:
|
|
if (init.Obj[o36SESTERZODX].flags & ON) {
|
|
if (init.Obj[o36INCENSOSX].flags & ON)
|
|
sa = a36PSDM;
|
|
else
|
|
sa = a36PSDB;
|
|
} else
|
|
sent = TRUE;
|
|
break;
|
|
case o36PIATTOSX:
|
|
if (init.Obj[o36SESTERZOSX].flags & ON) {
|
|
if (init.Obj[o36INCENSODX].flags & ON)
|
|
sa = a36PSSM;
|
|
else
|
|
sa = a36PSSB;
|
|
} else
|
|
sent = TRUE;
|
|
break;
|
|
|
|
case o39ANGELO:
|
|
if (((init.Obj[o39CRISTALLO].flags & ON) || (init.Obj[o39CRISTALLOATTIVATO].flags & ON)) && (init.Obj[o39SFERA].flags & ON) && (init.Obj[o39COLLANA].flags & ON)) {
|
|
if (!(init.Obj[o39ANGELO].flags & EXTRA2)) {
|
|
IncCurTime(game, 20);
|
|
init.Obj[o39ANGELO].flags |= EXTRA2;
|
|
}
|
|
sa = a393;
|
|
} else if (init.Obj[obj].anim[CurPlayer])
|
|
sa = init.Obj[obj].anim[CurPlayer];
|
|
else
|
|
sent = TRUE;
|
|
break;
|
|
|
|
case o3BCOPPABRACCIALI:
|
|
if (init.Obj[o3BSESTERZOBRACCIALI].flags & ON) {
|
|
sa = a3B19;
|
|
if (init.Obj[o3B1DOSEBRACCIALI].flags & ON) {
|
|
init.Obj[o3BCOPPABRACCIALI].examine[CurPlayer] = init.Obj[o3BCOPPABRACCIALI].examine[CurPlayer ^ 1] = init.Obj[o3BCOPPABRACCIALI].text[3];
|
|
} else if (init.Obj[o3B2DOSIBRACCIALI].flags & ON) {
|
|
init.Obj[o3BCOPPABRACCIALI].examine[CurPlayer] = init.Obj[o3BCOPPABRACCIALI].examine[CurPlayer ^ 1] = init.Obj[o3BCOPPABRACCIALI].text[4];
|
|
} else
|
|
init.Obj[o3BCOPPABRACCIALI].examine[CurPlayer] = init.Obj[o3BCOPPABRACCIALI].examine[CurPlayer ^ 1] = init.Obj[o3BCOPPABRACCIALI].text[0];
|
|
} else if ((init.Obj[o3B1DOSEBRACCIALI].flags & ON) || (init.Obj[o3B2DOSIBRACCIALI].flags & ON)) //se c'e' un incenso gli faccio dire che non puo' prenderli a mani nude
|
|
PlayerSpeak(game, init.Obj[o3BCOPPABRACCIALI].text[1]);
|
|
else
|
|
sa = a3B24; //quando non ci sono incensi parte l'animazione che fa dondolare la cup
|
|
break;
|
|
|
|
case o3BCOPPA:
|
|
if (init.Obj[o3BSESTERZO].flags & ON) {
|
|
sa = a3B20;
|
|
if (init.Obj[o3B1DOSE].flags & ON) {
|
|
init.Obj[o3BCOPPA].examine[CurPlayer] = init.Obj[o3BCOPPA].examine[CurPlayer ^ 1] = init.Obj[o3BCOPPA].text[3];
|
|
} else if (init.Obj[o3B2DOSI].flags & ON) {
|
|
init.Obj[o3BCOPPA].examine[CurPlayer] = init.Obj[o3BCOPPA].examine[CurPlayer ^ 1] = init.Obj[o3BCOPPA].text[4];
|
|
} else
|
|
init.Obj[o3BCOPPA].examine[CurPlayer] = init.Obj[o3BCOPPA].examine[CurPlayer ^ 1] = init.Obj[o3BCOPPA].text[0];
|
|
} else if ((init.Obj[o3B1DOSE].flags & ON) || (init.Obj[o3B2DOSI].flags & ON)) //se c'e' un incenso gli faccio dire che non puo' prenderli a mani nude
|
|
PlayerSpeak(game, init.Obj[o3BCOPPA].text[1]);
|
|
else
|
|
sa = a3B25; //quando non ci sono incensi parte l'animazione che fa dondolare la cup
|
|
break;
|
|
|
|
case o42TASTO01SU:
|
|
case o42TASTO02SU:
|
|
case o42TASTO03SU:
|
|
case o42TASTO04SU:
|
|
case o42TASTO05SU:
|
|
case o42TASTO06SU:
|
|
case o42TASTO07SU:
|
|
case o42TASTO08SU:
|
|
case o42TASTO09SU:
|
|
case o42TASTO10SU:
|
|
case o42TASTO11SU:
|
|
case o42TASTO12SU:
|
|
StartSound(game, w422);
|
|
Comb42[obj - o42TASTO01SU] = 1;
|
|
init.Obj[obj].flags &= ~ON;
|
|
init.Obj[obj + 12].flags |= ON;
|
|
UpdateObjMesh(init, obj);
|
|
UpdateObjMesh(init, obj + 12);
|
|
if ((Comb42[0] == 0) && (Comb42[1] == 1) && (Comb42[2] == 0) && (Comb42[3] == 1) &&
|
|
(Comb42[4] == 1) && (Comb42[5] == 1) && (Comb42[6] == 1) && (Comb42[7] == 1) &&
|
|
(Comb42[8] == 0) && (Comb42[9] == 0) && (Comb42[10] == 1) && (Comb42[11] == 0) && IconInInv(init, i41OGGETTO)) {
|
|
_vm->_messageSystem.doEvent(EventClass::MC_CAMERA, ME_CAMERA1TO3, MP_DEFAULT, 0, 0, 0, nullptr, nullptr, nullptr);
|
|
if (!(init.Dialog[dR421_fine].flags & DIALOG_DONE)) {
|
|
if (CurPlayer == DARRELL)
|
|
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_WAIT_CAMERA, dR421_DAR, 0, 0, nullptr, nullptr, nullptr);
|
|
if (CurPlayer == VICTORIA)
|
|
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_WAIT_CAMERA, dR421_VIC, 0, 0, nullptr, nullptr, nullptr);
|
|
} else
|
|
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_WAIT_CAMERA, dR42_porta, 0, 0, nullptr, nullptr, nullptr);
|
|
}
|
|
break;
|
|
case o42TASTO01GIU:
|
|
case o42TASTO02GIU:
|
|
case o42TASTO03GIU:
|
|
case o42TASTO04GIU:
|
|
case o42TASTO05GIU:
|
|
case o42TASTO06GIU:
|
|
case o42TASTO07GIU:
|
|
case o42TASTO08GIU:
|
|
case o42TASTO09GIU:
|
|
case o42TASTO10GIU:
|
|
case o42TASTO11GIU:
|
|
case o42TASTO12GIU:
|
|
StartSound(game, w424);
|
|
Comb42[obj - o42TASTO01GIU] = 0;
|
|
init.Obj[obj].flags &= ~ON;
|
|
init.Obj[obj - 12].flags |= ON;
|
|
UpdateObjMesh(init, obj);
|
|
UpdateObjMesh(init, obj - 12);
|
|
if ((Comb42[0] == 0) && (Comb42[1] == 1) && (Comb42[2] == 0) && (Comb42[3] == 1) &&
|
|
(Comb42[4] == 1) && (Comb42[5] == 1) && (Comb42[6] == 1) && (Comb42[7] == 1) &&
|
|
(Comb42[8] == 0) && (Comb42[9] == 0) && (Comb42[10] == 1) && (Comb42[11] == 0) && IconInInv(init, i41OGGETTO)) {
|
|
_vm->_messageSystem.doEvent(EventClass::MC_CAMERA, ME_CAMERA1TO3, MP_DEFAULT, 0, 0, 0, nullptr, nullptr, nullptr);
|
|
if (!(init.Dialog[dR421_fine].flags & DIALOG_DONE)) {
|
|
if (CurPlayer == DARRELL)
|
|
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_WAIT_CAMERA, dR421_DAR, 0, 0, nullptr, nullptr, nullptr);
|
|
if (CurPlayer == VICTORIA)
|
|
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_WAIT_CAMERA, dR421_VIC, 0, 0, nullptr, nullptr, nullptr);
|
|
} else
|
|
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_WAIT_CAMERA, dR42_porta, 0, 0, nullptr, nullptr, nullptr);
|
|
}
|
|
break;
|
|
|
|
case o48KRENNSVENUTO:
|
|
if (!(init.Dialog[dR48_chiavi].flags & DIALOG_DONE))
|
|
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dR48_chiavi, 0, 0, nullptr, nullptr, nullptr);
|
|
else
|
|
_vm->_messageSystem.doEvent(EventClass::MC_STRING, ME_PLAYERSPEAK, MP_DEFAULT, init.Obj[o48KRENNSVENUTO].examine[VICTORIA], 0, 0, nullptr, nullptr, nullptr);
|
|
break;
|
|
|
|
case o44LEVAORE:
|
|
case o44LEVAMINUTI:
|
|
case o44LEVAGRADI:
|
|
sa = init.Obj[obj].anim[CurPlayer];
|
|
Comb44[obj - o44LEVAORE] ++;
|
|
if ((obj == o44LEVAORE) && (Comb44[obj - o44LEVAORE] > 12)) Comb44[obj - o44LEVAORE] = 1;
|
|
else if ((obj == o44LEVAMINUTI) && (Comb44[obj - o44LEVAORE] > 12)) Comb44[obj - o44LEVAORE] = 1;
|
|
else if ((obj == o44LEVAGRADI) && (Comb44[obj - o44LEVAORE] > 10)) Comb44[obj - o44LEVAORE] = 0;
|
|
break;
|
|
|
|
case o45INDICATORE1:
|
|
case o45INDICATORE2:
|
|
case o45INDICATORE3:
|
|
case o45INDICATORE4:
|
|
case o45INDICATORE5:
|
|
if (++Comb45[obj - o45INDICATORE1] > 11) Comb45[obj - o45INDICATORE1] = 0;
|
|
UpdateSpecial(game, r45);
|
|
if ((Comb45[0] == 8) && (Comb45[1] == 1) && (Comb45[2] == 10) && (Comb45[3] == 5) && (Comb45[4] == 3)) {
|
|
StartSound(game, wB451);
|
|
_vm->_messageSystem.doEvent(EventClass::MC_CAMERA, ME_CAMERA1TO3, MP_DEFAULT, 0, 0, 0, nullptr, nullptr, nullptr);
|
|
SetMeshMaterialMovieFrame(LinkMeshToStr(init, "o45-ingranaggiBEK02"), 0, 1);
|
|
SetMeshMaterialMovieFrame(LinkMeshToStr(init, "o45-ingranaggiBEK03"), 0, 1);
|
|
SetMeshMaterialMovieFrame(LinkMeshToStr(init, "o45-ingranaggiBEK04"), 0, 1);
|
|
SetMeshMaterialMovieFrame(LinkMeshToStr(init, "o45-ingranaggiBEK05"), 0, 1);
|
|
SetMeshMaterialMovieFrame(LinkMeshToStr(init, "p45-ingras01"), 0, 1);
|
|
|
|
//spengo l'ingranaggio abbassato
|
|
init.Obj[o45INGRANAGGI].flags &= ~ON;
|
|
UpdateObjMesh(init, o45INGRANAGGI);
|
|
init.Obj[o45SANGUE].flags &= ~ON;
|
|
UpdateObjMesh(init, o45SANGUE);
|
|
|
|
//accendo l'ingranaggio alzato
|
|
ChangeMeshFlags(LinkMeshToStr(init, "o45-ingranaggioALZATO"), -1, T3D_MESH_HIDDEN);
|
|
ChangeMeshFlags(LinkMeshToStr(init, "o45-ingranaggioALZATO01"), -1, T3D_MESH_HIDDEN);
|
|
if (init.Dialog[dR451].flags & DIALOG_DONE) ChangeMeshFlags(LinkMeshToStr(init, "o45-macchiedisangALZATO"), -1, T3D_MESH_HIDDEN);
|
|
|
|
CurObj = oNULL;
|
|
|
|
init.Sound[wB451].flags &= ~SOUND_ON;
|
|
StopSound(wB451);
|
|
SetBndLevel(game, nullptr, 1);
|
|
SetBndLevel(game, "r47.t3d", 0);
|
|
|
|
if (!(init.Obj[o45ALLOGGIAMENTO].flags & EXTRA)) {
|
|
IncCurTime(game, 15);
|
|
init.Obj[o45ALLOGGIAMENTO].flags |= EXTRA;
|
|
}
|
|
}
|
|
if ((Comb45[0] == 0) && (Comb45[1] == 0) && (Comb45[2] == 0) && (Comb45[3] == 0) && (Comb45[4] == 0)) {
|
|
StartSound(game, wB451);
|
|
_vm->_messageSystem.doEvent(EventClass::MC_CAMERA, ME_CAMERA1TO3, MP_DEFAULT, 0, 0, 0, nullptr, nullptr, nullptr);
|
|
SetMeshMaterialMovieFrame(LinkMeshToStr(init, "o45-ingranaggiBEK02"), 0, 0xFFFF);
|
|
SetMeshMaterialMovieFrame(LinkMeshToStr(init, "o45-ingranaggiBEK03"), 0, 0xFFFF);
|
|
SetMeshMaterialMovieFrame(LinkMeshToStr(init, "o45-ingranaggiBEK04"), 0, 0xFFFF);
|
|
SetMeshMaterialMovieFrame(LinkMeshToStr(init, "o45-ingranaggiBEK05"), 0, 0xFFFF);
|
|
SetMeshMaterialMovieFrame(LinkMeshToStr(init, "p45-ingras01"), 0, 0xFFFF);
|
|
CurObj = oNULL;
|
|
|
|
//accendo l'ingranaggio abbassato
|
|
init.Obj[o45INGRANAGGI].flags |= ON;
|
|
UpdateObjMesh(init, o45INGRANAGGI);
|
|
if (init.Dialog[dR451].flags & DIALOG_DONE) {
|
|
init.Obj[o45SANGUE].flags |= ON;
|
|
UpdateObjMesh(init, o45SANGUE);
|
|
}
|
|
|
|
//spengo l'ingranaggio alzato
|
|
ChangeMeshFlags(LinkMeshToStr(init, "o45-ingranaggioALZATO"), +1, T3D_MESH_HIDDEN);
|
|
ChangeMeshFlags(LinkMeshToStr(init, "o45-ingranaggioALZATO01"), +1, T3D_MESH_HIDDEN);
|
|
ChangeMeshFlags(LinkMeshToStr(init, "o45-macchiedisangALZATO"), +1, T3D_MESH_HIDDEN);
|
|
|
|
init.Sound[wB451].flags |= SOUND_ON;
|
|
StartSound(game, wB451);
|
|
SetBndLevel(game, nullptr, 0);
|
|
SetBndLevel(game, "r47.t3d", 1);
|
|
game._messageSystem.removeEvent(EventClass::MC_PLAYER, ME_PLAYERTIMER);
|
|
|
|
if (init.Dialog[dR471].flags & DIALOG_DONE)
|
|
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dR451, 0, 0, nullptr, nullptr, nullptr);
|
|
}
|
|
break;
|
|
|
|
/* //lo lanciamo da init
|
|
case o46CARTELLINA5:
|
|
if( !( Dialog[dR461].flags & DIALOG_DONE ) )
|
|
Event( EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dR461, 0, 0, NULL, NULL, NULL );
|
|
else
|
|
sent = TRUE;
|
|
break;
|
|
*/
|
|
case o46SECONDODIAGRAMMA:
|
|
// se il flag EXTRA2 non e' settato vuol dire che non si e' ancora entrati nella r48 e non si
|
|
// puo' conoscere il significato del disegno
|
|
if (!(init.Obj[o46SECONDODIAGRAMMA].flags & EXTRA2)) {
|
|
PlayerSpeak(game, init.Obj[o13QUADRO1].action[CurPlayer]);
|
|
return;
|
|
} else sent = TRUE;
|
|
break;
|
|
|
|
default:
|
|
if (init.Obj[obj].anim[CurPlayer])
|
|
sa = init.Obj[obj].anim[CurPlayer];
|
|
else
|
|
sent = TRUE;
|
|
break;
|
|
}
|
|
|
|
if (sa == aTO1PERSON)
|
|
ToFirstPersonSent = init.Obj[obj].action[CurPlayer];
|
|
else if ((sent) && (init.Obj[obj].action[CurPlayer]))
|
|
PlayerSpeak(game, init.Obj[obj].action[CurPlayer]);
|
|
if (sa)
|
|
StartAnim(game, sa);
|
|
}
|
|
|
|
} // End of namespace Watchmaker
|