Files
2026-02-02 04:50:13 +01:00

609 lines
22 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_inv_scr.h"
#include "watchmaker/types.h"
#include "watchmaker/define.h"
#include "watchmaker/message.h"
#include "watchmaker/globvar.h"
#include "watchmaker/schedule.h"
#include "watchmaker/windows_hacks.h"
#include "watchmaker/classes/do_string.h"
#include "watchmaker/classes/do_inv.h"
#include "watchmaker/ll/ll_mesh.h"
#include "watchmaker/ll/ll_anim.h"
#include "watchmaker/ll/ll_diary.h"
namespace Watchmaker {
/* -----------------19/05/98 16.40-------------------
* doInvScrUseWith
* --------------------------------------------------*/
void doInvScrUseWith(WGame &game) {
uint8 sent = FALSE;
int32 sa = 0;
Init &init = game.init;
//messo fuori perche' andava in conflitto con l'usacon dell'icona
if ((UseWith[USED] == i29FOTOPROGETTO) && (UseWith[WITH] == ocCUSTODE)) {
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dR005, 0, 0, nullptr, nullptr, nullptr);
return;
}
//messo fuori perche' se non parte l'RTV deve dire la frase
if ((UseWith[USED] == i1cMEDAGLIONI2) && (UseWith[WITH] == o1CBOCCA)) {
if (init.Dialog[dR1A5].flags & DIALOG_DONE) {
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dR1C3, 0, 0, nullptr, nullptr, nullptr);
return;
} else {
PlayerSpeak(game, init.InvObj[i1cMEDAGLIONI2].text[1]);
return;
}
}
//messo fuori perche' nel caso non si verificasse il gioco deve procedere normalmente con frase/azione dell'icona
if ((UseWith[WITH] == o17CAVETTO) && ((UseWith[USED] == i00TELEFONO) || (UseWith[USED] == i00TELEFONOVIC))) {
// se non ho sentito il numero...
if (!(init.InvObj[i28WALKMANOK].flags & EXTRA2)) {
PlayerSpeak(game, init.Obj[o17COMPUTER].action[CurPlayer]);
return;
}
}
//caso delle chiavi del cuoco che aprono due porte: evito che si usino due volte sulla stessa porta
if ((UseWith[USED] == i25MAZZODUECHIAVI) && ((UseWith[WITH] == o2Hp2G) || (UseWith[WITH] == o2Gp2H) || (UseWith[WITH] == oXT16p17) || (UseWith[WITH] == o17p16))) {
// se ho gia' aperto la porta gli faccio dire una frase
if ((init.Obj[o2Hp2G].flags & EXTRA) || (init.Obj[oXT16p17].flags & ON)) {
PlayerSpeak(game, init.Obj[oADDTEXTOBJ].text[0]);
return;
}
}
switch (UseWith[USED]) {
case i41OGGETTO:
if (UseWith[WITH] == ocCUSTODE)
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dR002, 0, 0, nullptr, nullptr, nullptr);
else
sent = TRUE;
break;
case i14OCCHIALI:
if (UseWith[WITH] == ocCUSTODE)
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dR003, 0, 0, nullptr, nullptr, nullptr);
else
sent = TRUE;
break;
case i1cMEDAGLIONE:
if (UseWith[WITH] == o1CBOCCA)
PlayerSpeak(game, init.InvObj[i1cMEDAGLIONE].text[1]);
else
sent = TRUE;
break;
case i34FIALAA:
if (init.Obj[o25FORNOAP].flags & EXTRA2) {
if (UseWith[WITH] == o25FORNOAP)
sa = a257;
else if (UseWith[WITH] == o25CONGELATORE2AP)
sa = a2524;
} else
sent = TRUE;
break;
case i34FIALAB:
if (init.Obj[o25FORNOAP].flags & EXTRA2) {
if (UseWith[WITH] == o25FORNOAP)
sa = a258;
else if (UseWith[WITH] == o25CONGELATORE2AP)
sa = a2525;
} else
sent = TRUE;
break;
case i25MEDAGLIONI4:
if (UseWith[WITH] == o1CBOCCA) {
sa = a1C2;
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_WAIT_ANIM, dR1C1, 0, 0, nullptr, nullptr, nullptr);
} else
sent = TRUE;
break;
case i1cMEDAGLIONI3:
if (UseWith[WITH] == o1CBOCCA) {
sa = a1C2;
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_WAIT_ANIM, dR1C2, 0, 0, nullptr, nullptr, nullptr);
} else
sent = TRUE;
break;
case i24COLTELLO:
if ((UseWith[WITH] == o2GFILTRODXCH) || (UseWith[WITH] == o2GFILTROSXCH)) {
switch (UseWith[WITH]) {
case o2GFILTRODXCH:
if (init.Obj[o2GOFF].flags & ON) {
sa = a2G2;
init.Obj[o2GOFF].anim[DARRELL] = init.Obj[o2GOFF].anim[VICTORIA] = aNULL;
init.Obj[o2GOFF].flags |= EXTRA;
} else PlayerSpeak(game, init.InvObj[UseWith[USED]].text[1]);
break;
case o2GFILTROSXCH:
if (init.Obj[o2GOFF].flags & ON) {
sa = a2G3;
init.Obj[o2GOFF].anim[DARRELL] = init.Obj[o2GOFF].anim[VICTORIA] = aNULL;
init.Obj[o2GOFF].flags |= EXTRA;
} else PlayerSpeak(game, init.InvObj[UseWith[USED]].text[1]);
break;
}//switch
} else
sent = TRUE;
break;
case i25MAZZODUECHIAVI:
if (UseWith[WITH] == o2Hp2G)
sa = a2H6;
else if (UseWith[WITH] == oXT16PORTA)
sa = a162;
else
sent = TRUE;
break;
case i2iDETERSIVO:
if (UseWith[WITH] == o2GFILTRODXAP) {
sa = a2G4;
init.InvObj[UseWith[USED]].flags &= ~USEWITH;
init.InvObj[UseWith[USED]].flags |= USE;
init.InvObj[i2iDETERSIVO].flags |= EXTRA;
} else if (UseWith[WITH] == o2GFILTROSXAP) {
sa = a2G5;
init.InvObj[UseWith[USED]].flags &= ~USEWITH;
init.InvObj[UseWith[USED]].flags |= USE;
init.InvObj[i2iDETERSIVO].flags |= EXTRA;
}
break;
case i2lBOTTIGLIAVINO:
if (UseWith[WITH] == ocCUOCO) {
if (!(init.InvObj[i2lBOTTIGLIAVINO].flags & EXTRA)) {
PlayerSpeak(game, init.InvObj[i2lBOTTIGLIAVINO_NOCUOCO].text[0]);
break;
}
if (!(init.InvObj[i2lBOTTIGLIAVINO].flags & EXTRA2) &&
(((CurPlayer == DARRELL) && (PlayerStand[VICTORIA].roomName.equalsIgnoreCase("r25-a.t3d"))) ||
((CurPlayer == VICTORIA) && (PlayerStand[DARRELL].roomName.equalsIgnoreCase("r25-a.t3d"))))) {
init.Dialog[dR009].flags &= ~(DIALOG_RTV | DIALOG_RTV2 | DIALOG_RTV3);
if (init.Dialog[dR009].flags & DIALOG_DONE)
init.Dialog[dR009].flags |= DIALOG_RTV2;
else
init.Dialog[dR009].flags |= DIALOG_RTV3;
init.InvObj[i2lBOTTIGLIAVINO].flags |= EXTRA2;
}
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dR009, 0, 0, nullptr, nullptr, nullptr);
}
break;
case i34LASTRE:
if (UseWith[WITH] == ocSUPERVISORE)
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dR007, 0, 0, nullptr, nullptr, nullptr);
else
sent = TRUE;
break;
case i22BRACCIALE:
if (UseWith[WITH] == ocSERVETTA) {
if (CurPlayer == VICTORIA) {
// PlayerSpeak( init.InvObj[i22BRACCIALE].text[1] );
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dR001, 0, 0, nullptr, nullptr, nullptr);
} else {
PlayerSpeak(game, init.InvObj[i22BRACCIALE].text[0]);
}
}
break;
case i29FOTOJUDE1:
if ((UseWith[WITH] == ocSUPERVISORE) && (init.InvObj[i2aSANGUE].flags & EXTRA)) {
if (CurPlayer == DARRELL)
PlayerSpeak(game, init.InvObj[i29FOTOJUDE1].text[0]);
if (CurPlayer == VICTORIA)
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dR291, 0, 0, nullptr, nullptr, nullptr);
} else sent = TRUE;
break;
case i29STAMPAINGRANAGGIO:
if (UseWith[WITH] == ocCUSTODE)
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dR006, 0, 0, nullptr, nullptr, nullptr);
else
sent = TRUE;
break;
case i31ANELLOBRONZO:
if (UseWith[WITH] == ocCUSTODE)
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dR004, 0, 0, nullptr, nullptr, nullptr);
else
sent = TRUE;
break;
case i1aLUCCHETTO:
if (UseWith[WITH] == oXT1AFINESTRA) {
// morte Cacciatore
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dR1A5, 0, 0, nullptr, nullptr, nullptr);
} else
sent = TRUE;
break;
case i48CHIAVIMANETTE:
if (UseWith[WITH] == o48MANETTE)
_vm->_messageSystem.doEvent(EventClass::MC_DIALOG, ME_DIALOGSTART, MP_DEFAULT, dR483, 0, 0, nullptr, nullptr, nullptr);
else
sent = TRUE;
break;
case i2aSIRINGAVUOTA:
if (UseWith[WITH] == o2AACIDO)
sa = a2A14;
else if (UseWith[WITH] == o2MACIDO)
sa = a2M9;
else
sent = TRUE;
break;
case i19CRISTALLO:
if (UseWith[WITH] == o31ALLOGGIAMENTO)
sa = a3114;
else if (UseWith[WITH] == o39RETTANGOLO)
sa = a396;
else
sent = TRUE;
break;
case i39CRISTALLOATTIVATO:
if (UseWith[WITH] == o31ALLOGGIAMENTO)
sa = a3116;
else if (UseWith[WITH] == o39RETTANGOLO)
sa = a3913;
else
sent = TRUE;
break;
case i2dSESTERZO:
if ((UseWith[WITH] == o36PIATTODX) && !(init.Obj[o36INCENSODX].flags & ON)) {
if (init.Obj[o36INCENSOSX].flags & ON)
sa = a36MSDA;
else
sa = a36MSDM;
} else if ((UseWith[WITH] == o36PIATTOSX) && !(init.Obj[o36INCENSOSX].flags & ON)) {
if (init.Obj[o36INCENSODX].flags & ON)
sa = a36MSSA;
else
sa = a36MSSM;
} else if (!(init.Obj[o3BCOPPA].flags & EXTRA)) {
if (UseWith[WITH] == o3BCOPPABRACCIALI)
sa = a3B2;
else if (UseWith[WITH] == o3BCOPPA)
sa = a3B3;
} else
sent = TRUE;
break;
case i36BUSTA1DOSEA:
case i36BUSTA1DOSEB:
if ((UseWith[WITH] == o36PIATTODX) && (init.Obj[o36INCENSODX].flags & ON)) {
if (init.Obj[o36SESTERZOSX].flags & ON)
sa = a36PBDM;
else
sa = a36PBDB;
if (UseWith[USED] == i36BUSTA1DOSEA)
ReplaceIcon(init, i36BUSTA1DOSEA, i36BUSTA2DOSIA);
else
ReplaceIcon(init, i36BUSTA1DOSEB, i36BUSTA2DOSIB);
} else if ((UseWith[WITH] == o36PIATTOSX) && (init.Obj[o36INCENSOSX].flags & ON)) {
if (init.Obj[o36SESTERZODX].flags & ON)
sa = a36PBSM;
else
sa = a36PBSB;
if (UseWith[USED] == i36BUSTA1DOSEA)
ReplaceIcon(init, i36BUSTA1DOSEA, i36BUSTA2DOSIA);
else
ReplaceIcon(init, i36BUSTA1DOSEB, i36BUSTA2DOSIB);
} else if (!(init.Obj[o3BCOPPA].flags & EXTRA)) {
if ((UseWith[WITH] == o3BCOPPABRACCIALI) && !(init.Obj[o3B2DOSIBRACCIALI].flags & ON)) {
if (UseWith[USED] == i36BUSTA1DOSEA) ReplaceIcon(init, i36BUSTA1DOSEA, i2rBUSTAVUOTAA);
else ReplaceIcon(init, i36BUSTA1DOSEB, i2rBUSTAVUOTAB);
if (init.Obj[o3B1DOSEBRACCIALI].flags & ON) {
init.Obj[o3B1DOSEBRACCIALI].flags &= ~ON;
init.Obj[o3B2DOSIBRACCIALI].flags |= ON;
init.Obj[o3BCOPPABRACCIALI].examine[CurPlayer] = init.Obj[o3BCOPPABRACCIALI].examine[CurPlayer ^ 1] = init.Obj[o3BCOPPABRACCIALI].text[4];
} else {
init.Obj[o3B1DOSEBRACCIALI].flags |= ON;
init.Obj[o3B2DOSIBRACCIALI].flags &= ~ON;
init.Obj[o3BCOPPABRACCIALI].examine[CurPlayer] = init.Obj[o3BCOPPABRACCIALI].examine[CurPlayer ^ 1] = init.Obj[o3BCOPPABRACCIALI].text[3];
}
UpdateObjMesh(init, o3B1DOSEBRACCIALI);
UpdateObjMesh(init, o3B2DOSIBRACCIALI);
sa = a3B4;
} else if ((UseWith[WITH] == o3BCOPPA) && !(init.Obj[o3B2DOSI].flags & ON)) {
if (UseWith[USED] == i36BUSTA1DOSEA) ReplaceIcon(init, i36BUSTA1DOSEA, i2rBUSTAVUOTAA);
else ReplaceIcon(init, i36BUSTA1DOSEB, i2rBUSTAVUOTAB);
if (init.Obj[o3B1DOSE].flags & ON) {
init.Obj[o3B1DOSE].flags &= ~ON;
init.Obj[o3B2DOSI].flags |= ON;
init.Obj[o3BCOPPA].examine[CurPlayer] = init.Obj[o3BCOPPA].examine[CurPlayer ^ 1] = init.Obj[o3BCOPPA].text[4];
} else {
init.Obj[o3B1DOSE].flags |= ON;
init.Obj[o3B2DOSI].flags &= ~ON;
init.Obj[o3BCOPPA].examine[CurPlayer] = init.Obj[o3BCOPPA].examine[CurPlayer ^ 1] = init.Obj[o3BCOPPA].text[3];
}
UpdateObjMesh(init, o3B1DOSE);
UpdateObjMesh(init, o3B2DOSI);
sa = a3B5;
} else
sent = TRUE;
} else
sent = TRUE;
break;
case i36BUSTA2DOSIA:
case i36BUSTA2DOSIB:
if (!(init.Obj[o3BCOPPA].flags & EXTRA)) {
if ((UseWith[WITH] == o3BCOPPABRACCIALI) && !(init.Obj[o3B1DOSEBRACCIALI].flags & ON) && !(init.Obj[o3B2DOSIBRACCIALI].flags & ON)) {
if (UseWith[USED] == i36BUSTA2DOSIA) ReplaceIcon(init, i36BUSTA2DOSIA, i2rBUSTAVUOTAA);
else ReplaceIcon(init, i36BUSTA2DOSIB, i2rBUSTAVUOTAB);
init.Obj[o3B2DOSIBRACCIALI].flags |= ON;
UpdateObjMesh(init, o3B2DOSIBRACCIALI);
sa = a3B6;
} else if ((UseWith[WITH] == o3BCOPPA) && !(init.Obj[o3B1DOSE].flags & ON) && !(init.Obj[o3B2DOSI].flags & ON)) {
if (UseWith[USED] == i36BUSTA2DOSIA) ReplaceIcon(init, i36BUSTA2DOSIA, i2rBUSTAVUOTAA);
else ReplaceIcon(init, i36BUSTA2DOSIB, i2rBUSTAVUOTAB);
init.Obj[o3B2DOSI].flags |= ON;
UpdateObjMesh(init, o3B2DOSI);
sa = a3B7;
} else
sent = TRUE;
} else
sent = TRUE;
break;
case i2bSACCHETTOINCENSO:
if (UseWith[WITH] == o36PIATTODX) {
if (init.Obj[o36SESTERZOSX].flags & ON) { // se a sx sesterzo
if (!(init.Obj[o36INCENSODX].flags & ON)) // ma a dx non incenso
sa = a36MIDA; // lo mette
else // altrimenti
sa = a36PIDM; // lo prende
} else if (init.Obj[o36INCENSODX].flags & ON) // se a dx incenso
sa = a36PIDB; // lo prende
} else if (UseWith[WITH] == o36PIATTOSX) {
if (init.Obj[o36SESTERZODX].flags & ON) { // se a dx sesterzo
if (!(init.Obj[o36INCENSOSX].flags & ON)) // ma a sx non incenso
sa = a36MISA; // lo mette
else // altrimenti
sa = a36PISM; // lo prende
} else if (init.Obj[o36INCENSOSX].flags & ON) // se a sx incenso
sa = a36PISB; // lo prende
} else if (!(init.Obj[o3BCOPPA].flags & EXTRA)) {
if ((UseWith[WITH] == o3BCOPPABRACCIALI) && (init.Obj[o3B2DOSIBRACCIALI].flags & ON))
sa = a3B15;
else if ((UseWith[WITH] == o3BCOPPABRACCIALI) && (init.Obj[o3B1DOSEBRACCIALI].flags & ON))
sa = a3B13;
else if ((UseWith[WITH] == o3BCOPPA) && (init.Obj[o3B2DOSI].flags & ON))
sa = a3B16;
else if ((UseWith[WITH] == o3BCOPPA) && (init.Obj[o3B1DOSE].flags & ON))
sa = a3B14;
else
sent = TRUE;
if (sa) { //se ha fatto l'azione di raccoglie controllo il testo delle coppe
if (UseWith[WITH] == o3BCOPPABRACCIALI) {
if (init.Obj[o3BSESTERZOBRACCIALI].flags & ON)
init.Obj[o3BCOPPABRACCIALI].examine[CurPlayer] = init.Obj[o3BCOPPABRACCIALI].examine[CurPlayer ^ 1] = init.Obj[o3BCOPPABRACCIALI].text[2];
else
init.Obj[o3BCOPPABRACCIALI].examine[CurPlayer] = init.Obj[o3BCOPPABRACCIALI].examine[CurPlayer ^ 1] = init.Obj[o3BCOPPABRACCIALI].text[0];
init.Obj[o3BCOPPABRACCIALI].action[CurPlayer] = init.Obj[o3BCOPPABRACCIALI].action[CurPlayer ^ 1] = 0;
} else if (UseWith[WITH] == o3BCOPPA) {
if (init.Obj[o3BSESTERZO].flags & ON)
init.Obj[o3BCOPPA].examine[CurPlayer] = init.Obj[o3BCOPPA].examine[CurPlayer ^ 1] = init.Obj[o3BCOPPA].text[2];
else
init.Obj[o3BCOPPA].examine[CurPlayer] = init.Obj[o3BCOPPA].examine[CurPlayer ^ 1] = init.Obj[o3BCOPPA].text[0];
init.Obj[o3BCOPPA].action[CurPlayer] = init.Obj[o3BCOPPA].action[CurPlayer ^ 1] = 0;
}
}//if sa
}
else
sent = TRUE;
break;
case i2rBUSTAVUOTAA:
if ((UseWith[WITH] == o36PIATTODX) && (init.Obj[o36INCENSODX].flags & ON)) {
if (init.Obj[o36SESTERZOSX].flags & ON)
sa = a36PBDM;
else
sa = a36PBDB;
ReplaceIcon(init, i2rBUSTAVUOTAA, i36BUSTA1DOSEA);
} else if ((UseWith[WITH] == o36PIATTOSX) && (init.Obj[o36INCENSOSX].flags & ON)) {
if (init.Obj[o36SESTERZODX].flags & ON)
sa = a36PBSM;
else
sa = a36PBSB;
ReplaceIcon(init, i2rBUSTAVUOTAA, i36BUSTA1DOSEA);
} else if (!(init.Obj[o3BCOPPA].flags & EXTRA)) {
if ((UseWith[WITH] == o3BCOPPABRACCIALI) && (init.Obj[o3B2DOSIBRACCIALI].flags & ON)) {
sa = a3B11;
ReplaceIcon(init, (uint8)UseWith[USED], i36BUSTA2DOSIA);
} else if ((UseWith[WITH] == o3BCOPPABRACCIALI) && (init.Obj[o3B1DOSEBRACCIALI].flags & ON)) {
sa = a3B9;
ReplaceIcon(init, (uint8)UseWith[USED], i36BUSTA1DOSEA);
} else if ((UseWith[WITH] == o3BCOPPA) && (init.Obj[o3B2DOSI].flags & ON)) {
sa = a3B12;
ReplaceIcon(init, (uint8)UseWith[USED], i36BUSTA2DOSIA);
} else if ((UseWith[WITH] == o3BCOPPA) && (init.Obj[o3B1DOSE].flags & ON)) {
sa = a3B10;
ReplaceIcon(init, (uint8)UseWith[USED], i36BUSTA1DOSEA);
} else
sent = TRUE;
if (sa) { //se ha fatto l'azione di raccoglie controllo il testo delle coppe
if (UseWith[WITH] == o3BCOPPABRACCIALI) {
if (init.Obj[o3BSESTERZOBRACCIALI].flags & ON)
init.Obj[o3BCOPPABRACCIALI].examine[CurPlayer] = init.Obj[o3BCOPPABRACCIALI].examine[CurPlayer ^ 1] = init.Obj[o3BCOPPABRACCIALI].text[2];
else
init.Obj[o3BCOPPABRACCIALI].examine[CurPlayer] = init.Obj[o3BCOPPABRACCIALI].examine[CurPlayer ^ 1] = init.Obj[o3BCOPPABRACCIALI].text[0];
init.Obj[o3BCOPPABRACCIALI].action[CurPlayer] = init.Obj[o3BCOPPABRACCIALI].action[CurPlayer ^ 1] = 0;
} else if (UseWith[WITH] == o3BCOPPA) {
if (init.Obj[o3BSESTERZO].flags & ON)
init.Obj[o3BCOPPA].examine[CurPlayer] = init.Obj[o3BCOPPA].examine[CurPlayer ^ 1] = init.Obj[o3BCOPPA].text[2];
else
init.Obj[o3BCOPPA].examine[CurPlayer] = init.Obj[o3BCOPPA].examine[CurPlayer ^ 1] = init.Obj[o3BCOPPA].text[0];
init.Obj[o3BCOPPA].action[CurPlayer] = init.Obj[o3BCOPPA].action[CurPlayer ^ 1] = 0;
}
}//if sa
} else
sent = TRUE;
break;
case i2rBUSTAVUOTAB:
if ((UseWith[WITH] == o36PIATTODX) && (init.Obj[o36INCENSODX].flags & ON)) {
if (init.Obj[o36SESTERZOSX].flags & ON)
sa = a36PBDM;
else
sa = a36PBDB;
ReplaceIcon(init, i2rBUSTAVUOTAB, i36BUSTA1DOSEB);
} else if ((UseWith[WITH] == o36PIATTOSX) && (init.Obj[o36INCENSOSX].flags & ON)) {
if (init.Obj[o36SESTERZODX].flags & ON)
sa = a36PBSM;
else
sa = a36PBSB;
ReplaceIcon(init, i2rBUSTAVUOTAB, i36BUSTA1DOSEB);
} else if (!(init.Obj[o3BCOPPA].flags & EXTRA)) {
if ((UseWith[WITH] == o3BCOPPABRACCIALI) && (init.Obj[o3B2DOSIBRACCIALI].flags & ON)) {
sa = a3B11;
ReplaceIcon(init, (uint8)UseWith[USED], i36BUSTA2DOSIB);
} else if ((UseWith[WITH] == o3BCOPPABRACCIALI) && (init.Obj[o3B1DOSEBRACCIALI].flags & ON)) {
sa = a3B9;
ReplaceIcon(init, (uint8)UseWith[USED], i36BUSTA1DOSEB);
} else if ((UseWith[WITH] == o3BCOPPA) && (init.Obj[o3B2DOSI].flags & ON)) {
sa = a3B12;
ReplaceIcon(init, (uint8)UseWith[USED], i36BUSTA2DOSIB);
} else if ((UseWith[WITH] == o3BCOPPA) && (init.Obj[o3B1DOSE].flags & ON)) {
sa = a3B10;
ReplaceIcon(init, (uint8)UseWith[USED], i36BUSTA1DOSEB);
} else
sent = TRUE;
if (sa) { //se ha fatto l'azione di raccoglie controllo il testo delle coppe
if (UseWith[WITH] == o3BCOPPABRACCIALI) {
if (init.Obj[o3BSESTERZOBRACCIALI].flags & ON)
init.Obj[o3BCOPPABRACCIALI].examine[CurPlayer] = init.Obj[o3BCOPPABRACCIALI].examine[CurPlayer ^ 1] = init.Obj[o3BCOPPABRACCIALI].text[2];
else
init.Obj[o3BCOPPABRACCIALI].examine[CurPlayer] = init.Obj[o3BCOPPABRACCIALI].examine[CurPlayer ^ 1] = init.Obj[o3BCOPPABRACCIALI].text[0];
init.Obj[o3BCOPPABRACCIALI].action[CurPlayer] = init.Obj[o3BCOPPABRACCIALI].action[CurPlayer ^ 1] = 0;
} else if (UseWith[WITH] == o3BCOPPA) {
if (init.Obj[o3BSESTERZO].flags & ON)
init.Obj[o3BCOPPA].examine[CurPlayer] = init.Obj[o3BCOPPA].examine[CurPlayer ^ 1] = init.Obj[o3BCOPPA].text[2];
else
init.Obj[o3BCOPPA].examine[CurPlayer] = init.Obj[o3BCOPPA].examine[CurPlayer ^ 1] = init.Obj[o3BCOPPA].text[0];
init.Obj[o3BCOPPA].action[CurPlayer] = init.Obj[o3BCOPPA].action[CurPlayer ^ 1] = 0;
}
}//if sa
} else
sent = TRUE;
break;
case i46STELLA1:
if (UseWith[WITH] == o45ALLOGGIAMENTO) {
sa = a454;
if (!(init.Obj[o45ALLOGGIAMENTO].flags & EXTRA2)) {
IncCurTime(game, 10);
init.Obj[o45ALLOGGIAMENTO].flags |= EXTRA2;
}
} else if (UseWith[WITH] == o46CERABRACERE)
sa = a4619;
else if ((UseWith[WITH] == o49INCAVODX) && !(init.Obj[o49STELLADXCIA].flags & ON)) {
if (init.Obj[o49STELLASXCIA].flags & ON)
sa = a493b;
else
sa = a493a;
} else if ((UseWith[WITH] == o49INCAVOSX) && !(init.Obj[o49STELLASXCIA].flags & ON)) {
if (init.Obj[o49STELLADXCIA].flags & ON)
sa = a494b;
else
sa = a494a;
} else
sent = TRUE;
break;
case i46STELLA2:
if ((UseWith[WITH] == o49INCAVODX) && !(init.Obj[o49STELLADX].flags & ON)) {
if (init.Obj[o49STELLASX].flags & ON)
sa = a493cb;
else
sa = a493ca;
} else if ((UseWith[WITH] == o49INCAVOSX) && !(init.Obj[o49STELLASX].flags & ON)) {
if (init.Obj[o49STELLADX].flags & ON)
sa = a494cb;
else
sa = a494ca;
} else
sent = TRUE;
break;
default:
if (init.InvObj[UseWith[USED]].uwobj && (init.InvObj[UseWith[USED]].uwobj == UseWith[WITH]) && init.InvObj[UseWith[USED]].anim2[CurPlayer])
sa = init.InvObj[UseWith[USED]].anim2[CurPlayer];
else
sent = TRUE;
break;
}
if (sent)
if (!((bUseWith & UW_WITHI) && (UseWith[USED] == UseWith[WITH])))
PlayerSpeak(game, init.InvObj[UseWith[USED]].action[CurPlayer]);
if (sa)
StartAnim(game, sa);
}
} // End of namespace Watchmaker