scummvm/engines/trecision/nl/dialog.cpp

672 lines
18 KiB
C++
Raw Normal View History

2021-02-01 08:09:01 +00:00
/* 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.
*
*/
2021-02-22 10:38:17 +00:00
#include "common/scummsys.h"
2021-02-01 08:09:01 +00:00
#include "trecision/nl/struct.h"
#include "trecision/nl/ll/llinc.h"
#include "trecision/nl/message.h"
#include "trecision/nl/extern.h"
#include "trecision/nl/define.h"
#include "trecision/trecision.h"
2021-02-28 22:41:53 +01:00
#include "trecision/graphics.h"
#include "trecision/video.h"
2021-02-01 08:09:01 +00:00
namespace Trecision {
int EndBattuta = 0;
uint16 DispScelte[MAXDISPSCELTE], CurDispScelte;
int16 CurPos, LastPos;
/* -----------------28/07/97 22.11-------------------
DialogPrint
--------------------------------------------------*/
void DialogPrint(int x, int y, int c, const char *txt) {
SDText curChoice;
curChoice.set(x, y, TextLength(txt, 0), 0, 0, 0, MAXX, MAXY, c, MASKCOL, txt);
2021-02-15 23:27:12 +01:00
curChoice.DText();
2021-02-01 08:09:01 +00:00
}
/* -----------------28/07/97 22.11-------------------
MostraScelte
--------------------------------------------------*/
void MostraScelte(uint16 i) {
Dialog *d = &_dialog[i];
int y = 5;
int x = 10;
CurPos = -1;
LastPos = -1;
2021-02-28 22:41:53 +01:00
wordset(g_vm->_video2, 0, MAXX * TOP);
2021-02-01 08:09:01 +00:00
for (int c = 0; c < MAXDISPSCELTE; c++)
DispScelte[c] = 0;
CurDispScelte = 0;
for (int c = d->_firstChoice; c < (d->_firstChoice + d->_choiceNumb); c++) {
if (!(_choice[c]._flag & DLGCHOICE_HIDE)) {
DispScelte[CurDispScelte++] = c;
DialogPrint(x, y, HWHITE, g_vm->_sentence[_choice[c]._sentenceIndex]);
2021-02-01 08:09:01 +00:00
y += CARHEI;
}
}
2021-02-28 22:41:53 +01:00
g_vm->_graphicsMgr->showScreen(0, 0, MAXX, TOP);
2021-02-01 08:09:01 +00:00
2021-02-22 10:08:43 +00:00
FlagDialogMenuActive = true;
g_vm->_flagMouseEnabled = true;
2021-02-01 08:09:01 +00:00
}
/* -----------------28/07/97 22.12-------------------
UpdateScelte
--------------------------------------------------*/
void UpdateScelte(int16 dmx, int16 dmy) {
if ((dmy >= MAXDISPSCELTE) && (dmy < (CARHEI * (CurDispScelte) + 5)))
CurPos = (dmy - 5) / CARHEI;
else
CurPos = -1;
if ((CurPos != LastPos) && ((CurPos != -1) || (LastPos != -1))) {
for (int c = 0; c < MAXDISPSCELTE; c++) {
if (DispScelte[c] != 0) {
if (c == CurPos)
DialogPrint(10, 5 + c * CARHEI, HGREEN, g_vm->_sentence[_choice[DispScelte[c]]._sentenceIndex]);
2021-02-01 08:09:01 +00:00
else
DialogPrint(10, 5 + c * CARHEI, HWHITE, g_vm->_sentence[_choice[DispScelte[c]]._sentenceIndex]);
2021-02-01 08:09:01 +00:00
}
}
2021-02-28 22:41:53 +01:00
g_vm->_graphicsMgr->showScreen(0, 5, MAXX, (CurDispScelte)*CARHEI + 5);
2021-02-01 08:09:01 +00:00
}
LastPos = CurPos;
}
/* -----------------28/07/97 22.12-------------------
ScegliScelta
--------------------------------------------------*/
void ScegliScelta(int16 dmx, int16 dmy) {
UpdateScelte(dmx, dmy);
if (CurPos != -1) {
2021-02-22 10:08:43 +00:00
FlagDialogMenuActive = false;
2021-02-01 08:09:01 +00:00
PlayScelta(DispScelte[CurPos]);
}
}
/* -----------------28/07/97 22.08-------------------
PlayDialog
--------------------------------------------------*/
void PlayDialog(uint16 i) {
_curDialog = i;
2021-02-22 10:08:43 +00:00
FlagDialogActive = true;
2021-02-01 08:09:01 +00:00
_curChoice = 0;
_curSubTitle = 0;
2021-02-22 10:08:43 +00:00
FlagShowCharacter = false; // prima non c'era
2021-02-01 08:09:01 +00:00
g_vm->_characterQueue.initQueue();
g_vm->_inventoryStatus = INV_OFF;
g_vm->_inventoryCounter = INVENTORY_HIDE;
2021-02-01 08:09:01 +00:00
ClearText();
PaintString();
PaintScreen(1);
2021-02-28 22:41:53 +01:00
wordset(g_vm->_video2, 0, MAXX * TOP);
g_vm->_graphicsMgr->showScreen(0, 0, MAXX, TOP);
2021-02-01 08:09:01 +00:00
g_vm->_animMgr->startFullMotion((const char *)_dialog[i]._startAnim);
2021-02-01 08:09:01 +00:00
int skip = 0;
int curChoice = 0;
for (int c = _dialog[_curDialog]._firstChoice; c < (_dialog[_curDialog]._firstChoice + _dialog[_curDialog]._choiceNumb); c++)
if (!(_choice[c]._flag & DLGCHOICE_HIDE))
curChoice++;
if ((_curDialog == dC581) && !(_choice[262]._flag & DLGCHOICE_HIDE))
skip++;
if ((_curDialog == dC581) && (curChoice == 1))
skip++;
if ((_curDialog == dNEGOZIANTE1A) && (curChoice == 1))
skip++;
// se c'e' predialog
if ((_dialog[i]._startLen > 0) && !(skip))
g_vm->_animMgr->playFullMotion(1, _dialog[i]._startLen);
2021-02-01 08:09:01 +00:00
else {
g_vm->_animMgr->smkSoundOnOff(1, false);
2021-02-01 08:09:01 +00:00
afterChoice(1);
}
}
/* -----------------28/07/97 22.08-------------------
afterChoice
--------------------------------------------------*/
void afterChoice(int numframe) {
Dialog *d = &_dialog[_curDialog];
2021-02-28 22:41:53 +01:00
wordset(g_vm->_video2, 0, MAXX * TOP);
g_vm->_graphicsMgr->showScreen(0, 0, MAXX, TOP);
2021-02-01 08:09:01 +00:00
switch (_curDialog) {
case dBARBONE171:
if (_curChoice == 80) {
g_vm->_obj[ocBARBONE17]._action = 213;
g_vm->_obj[ocBARBONE17]._flag &= ~OBJFLAG_PERSON;
2021-02-01 08:09:01 +00:00
} else if (_curChoice == 77) {
g_vm->_obj[ocBARBONE17]._action = 211;
g_vm->_obj[ocBARBONE17]._flag &= ~OBJFLAG_PERSON;
2021-02-01 08:09:01 +00:00
}
break;
case dBARBONE1714:
if (_curChoice == 106) {
g_vm->_obj[ocBARBONE17]._action = 213;
g_vm->_obj[ocBARBONE17]._flag &= ~OBJFLAG_PERSON;
2021-02-01 08:09:01 +00:00
}
break;
case dBARBONE1713:
if (_curChoice == 91) {
g_vm->_obj[ocBARBONE17]._action = 212;
g_vm->_obj[ocBARBONE17]._flag &= ~OBJFLAG_PERSON;
2021-02-01 08:09:01 +00:00
}
break;
case dBARBONE1716:
if (_curChoice == 122) {
g_vm->_obj[ocBARBONE17]._action = 212;
g_vm->_obj[ocBARBONE17]._flag &= ~OBJFLAG_PERSON;
2021-02-01 08:09:01 +00:00
}
break;
case dBARBONE1717:
if (_curChoice == 136) {
g_vm->_obj[ocBARBONE17]._mode &= ~OBJMODE_OBJSTATUS;
g_vm->_obj[oBARBONED17]._mode |= OBJMODE_OBJSTATUS;
g_vm->_room[r17]._bkgAnim = aBKG17B;
g_vm->addIcon(iPATTINO);
2021-02-01 08:09:01 +00:00
} else if (_curChoice == 137) {
g_vm->_obj[ocBARBONE17]._flag |= OBJFLAG_PERSON;
2021-02-01 08:09:01 +00:00
}
break;
case dGUARDIANO18:
if ((_curChoice == 151) || (_curChoice == 152)) {
g_vm->_inventoryObj[iFOTO]._action = 1465;
g_vm->_obj[oTESSERA1A]._action = 238;
if (g_vm->_obj[oTESSERA1A]._flag & OBJFLAG_EXTRA) {
2021-02-01 08:09:01 +00:00
_choice[154]._flag &= ~DLGCHOICE_HIDE;
_choice[153]._flag |= DLGCHOICE_HIDE;
} else
_choice[153]._flag &= ~DLGCHOICE_HIDE;
} else if (_curChoice == 154) {
if (g_vm->_obj[oTESSERA1A]._flag & OBJFLAG_EXTRA)
2021-02-01 08:09:01 +00:00
_choice[183]._flag &= ~DLGCHOICE_HIDE;
} else if (_curChoice == 155)
g_vm->_obj[ocGUARD18]._action = 228;
2021-02-01 08:09:01 +00:00
break;
/* case dSAM17:
if( ( _curChoice == 198 ) && ( _curRoom == r17 ) )
setPosition(4);
break;
*/
case dF213B:
case dF213:
SetRoom(r21, true);
break;
case dF212B:
case dF212:
SetRoom(r21, false);
break;
case dF321:
g_vm->removeIcon(iTORCIA32);
2021-02-22 10:08:43 +00:00
FlagShowCharacter = false;
2021-02-01 08:09:01 +00:00
break;
case dF4A3:
g_vm->_obj[oCIOCCOLATINI4A]._examine = 1105;
g_vm->_obj[oCIOCCOLATINI4A]._action = 1106;
g_vm->_obj[oPORTAC4A]._action = 1118;
g_vm->_animMgr->_animTab[aBKG4A]._flag |= SMKANIM_OFF1;
g_vm->_obj[ocHELLEN4A]._mode &= ~OBJMODE_OBJSTATUS;
g_vm->_obj[oHELLENA4A]._mode |= OBJMODE_OBJSTATUS;
2021-02-01 08:09:01 +00:00
break;
case dC581:
g_vm->_obj[oFINESTRAB58]._mode |= OBJMODE_OBJSTATUS;
2021-02-01 08:09:01 +00:00
if (_curChoice == 262)
g_vm->_obj[oTASTIERA56]._examine = 1307;
2021-02-01 08:09:01 +00:00
break;
case dF542:
g_vm->_obj[oGRATAC54]._mode &= ~OBJMODE_OBJSTATUS;
g_vm->_obj[oPORTAC54]._mode &= ~OBJMODE_OBJSTATUS;
g_vm->_obj[oLAVATRICEL54]._mode &= ~OBJMODE_OBJSTATUS;
g_vm->_obj[oLAVATRICEF54]._mode &= ~OBJMODE_OBJSTATUS;
g_vm->_obj[oGRATAA54]._mode |= OBJMODE_OBJSTATUS;
g_vm->_obj[oCHIAVI54]._mode |= OBJMODE_OBJSTATUS;
g_vm->_obj[od54ALLA55]._mode |= OBJMODE_OBJSTATUS;
2021-02-01 08:09:01 +00:00
break;
}
// Se ultima scelta era un esci dialogo
if (_choice[_curChoice]._flag & DLGCHOICE_EXITDLG) {
g_vm->_animMgr->stopFullMotion();
2021-02-01 08:09:01 +00:00
switch (_curDialog) {
/* case dASCENSORE12:
if( _curChoice == 3 )
StartCharacterAction(a129PARLACOMPUTERESCENDE,r13,20,0);
else if( _curChoice == 4 )
StartCharacterAction(a129PARLACOMPUTERESCENDE,r16,20,0);
break;
case dASCENSORE13:
if( _curChoice == 17 )
StartCharacterAction(a139CHIUDONOPORTESU,r12,20,0);
else if( _curChoice == 18 )
StartCharacterAction(a1316CHIUDONOPORTEGIU,r16,20,0);
break;
case dASCENSORE16:
if( _curChoice == 32 )
StartCharacterAction(a1616SALECONASCENSORE,r12,20,0);
else if( _curChoice == 33 )
StartCharacterAction(a1616SALECONASCENSORE,r13,20,0);
break;
*/
case dPOLIZIOTTO16:
if ((_choice[61]._flag & OBJFLAG_DONE) && (_choice[62]._flag & OBJFLAG_DONE) && (g_vm->_obj[ocPOLIZIOTTO16]._flag & OBJFLAG_EXTRA))
g_vm->_obj[ocPOLIZIOTTO16]._mode &= ~OBJMODE_OBJSTATUS;
2021-02-01 08:09:01 +00:00
break;
case dBARBONE171:
if (_curChoice == 77) {
g_vm->_obj[ocBARBONE17]._action = 211;
g_vm->_obj[ocBARBONE17]._flag &= ~OBJFLAG_PERSON;
2021-02-01 08:09:01 +00:00
} else if (_curChoice == 80)
g_vm->_obj[ocBARBONE17]._action = 213;
2021-02-01 08:09:01 +00:00
else if (_curChoice == 122)
g_vm->_obj[ocBARBONE17]._action = 211;
2021-02-01 08:09:01 +00:00
break;
case dGUARDIANO18:
if (_curChoice == 152)
g_vm->_obj[ocGUARD18]._mode &= ~OBJMODE_OBJSTATUS;
2021-02-01 08:09:01 +00:00
else if (_curChoice == 155)
StartCharacterAction(a184ENTRACLUB, r19, 2, 0);
break;
case dEVA19:
g_vm->_obj[oPORTAC18]._flag &= ~OBJFLAG_ROOMOUT;
g_vm->_obj[oPORTAC18]._action = 221;
g_vm->_obj[ocEVA19]._action = 1999;
g_vm->_obj[ocEVA19]._flag &= ~OBJFLAG_PERSON;
2021-02-01 08:09:01 +00:00
break;
case dNEGOZIANTE1A:
if (_curChoice == 185) {
doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, r18, a1810ENTRADALNEGOZIO, 10, g_vm->_curObj);
g_vm->_obj[oPORTAN18]._flag &= ~OBJFLAG_ROOMOUT;
g_vm->_obj[oPORTAN18]._action = 218;
g_vm->_obj[oPORTAN18]._anim = 0;
2021-02-01 08:09:01 +00:00
} else if (_curChoice == 183)
g_vm->_obj[oTESSERA1A]._action = 239;
2021-02-01 08:09:01 +00:00
break;
case dF181:
g_vm->_obj[oRETE17]._mode |= OBJMODE_OBJSTATUS;
g_vm->_obj[oPORTAA17]._examine = 196;
g_vm->_obj[oPORTAUA17]._examine = 187;
g_vm->_obj[oPORTAUB17]._examine = 192;
g_vm->_obj[oPORTAA17]._action = 188;
g_vm->_obj[oPORTAUA17]._action = 193;
g_vm->_obj[oPORTAUB17]._action = 197;
g_vm->_obj[oFINGERPAD17]._mode &= ~OBJMODE_OBJSTATUS;
g_vm->_room[r17]._flag &= ~OBJFLAG_DONE;
g_vm->_room[r17]._flag |= OBJFLAG_EXTRA;
2021-02-01 08:09:01 +00:00
break;
case dF1C1:
CharacterSay(334);
break;
case dF1D1:
CharacterSay(1502);
break;
case dF2E1:
CharacterSay(621);
g_vm->_obj[oCATWALKA2E]._action = 622;
2021-02-01 08:09:01 +00:00
break;
case dF2E2:
CharacterSay(1561);
g_vm->_inventoryObj[iFUCILE]._examine = 1562;
2021-02-01 08:09:01 +00:00
break;
case dF231:
g_vm->_obj[od21TO23]._goRoom = r23B;
g_vm->_obj[od24TO23]._goRoom = r23B;
2021-02-01 08:09:01 +00:00
break;
case dF291:
g_vm->_obj[oINTERRUTTORE29]._action = 479;
g_vm->_obj[od22ALLA29]._goRoom = r29L;
g_vm->_obj[od2AALLA29]._goRoom = r29L;
g_vm->_obj[od22ALLA29]._mode &= ~OBJMODE_OBJSTATUS;
g_vm->_obj[od22ALLA29I]._mode |= OBJMODE_OBJSTATUS;
2021-02-01 08:09:01 +00:00
break;
case dF2G1:
g_vm->_obj[oPANNELLOM2G]._action = 660;
2021-02-01 08:09:01 +00:00
CharacterSay(659);
break;
case dF2G2:
g_vm->_obj[od26ALLA2G]._goRoom = r2GV;
g_vm->replaceIcon(iSAM, iSAMROTTO);
2021-02-01 08:09:01 +00:00
break;
case dF321:
StartCharacterAction(a3111TRASCINA, 0, 11, 0);
break;
case dF331:
g_vm->_obj[oTUBOT33]._lim[0] = 0;
g_vm->_obj[oTUBOT33]._lim[1] = 0;
g_vm->_obj[oTUBOT33]._lim[2] = 0;
g_vm->_obj[oTUBOT33]._lim[3] = 0;
2021-02-01 08:09:01 +00:00
CharacterSay(1997);
break;
case dF362:
PlayDialog(dC381);
break;
case dC381:
PlayDialog(dF381);
break;
case dF381:
doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, r41, 0, 18, g_vm->_curObj);
memcpy(g_vm->_cyberInventory, g_vm->_inventory, MAXICON);
g_vm->_cyberInventorySize = g_vm->_inventorySize;
g_vm->_inventorySize = 0;
g_vm->_iconBase = 0;
memset(g_vm->_inventory, iNULL, MAXICON);
g_vm->_inventory[g_vm->_inventorySize++] = iDISLOCATORE;
2021-02-01 08:09:01 +00:00
break;
case dF371:
g_vm->_obj[oSCAFFALE36]._anim = a3615AAPRENDESCAFFALE;
g_vm->_animMgr->smkVolumePan(0, 1, 1);
2021-02-01 08:09:01 +00:00
break;
case dF431:
2021-02-22 10:08:43 +00:00
FlagShowCharacter = true;
2021-02-01 08:09:01 +00:00
StartCharacterAction(aWALKIN, 0, 11, 0);
break;
case dF451:
g_vm->_obj[od44ALLA45]._goRoom = r45S;
2021-02-01 08:09:01 +00:00
CharacterSay(1712);
break;
case dF491:
for (int c = oPULSANTE1AD; c <= oPULSANTE33AD; c++) {
if (!(g_vm->_obj[c]._goRoom)) {
g_vm->_obj[c]._goRoom = r4A;
g_vm->_obj[c]._mode |= OBJMODE_OBJSTATUS;
g_vm->_obj[c - 40]._mode &= ~OBJMODE_OBJSTATUS;
2021-02-01 08:09:01 +00:00
break;
}
}
g_vm->removeIcon(iASTA);
2021-02-01 08:09:01 +00:00
PlayDialog(dC4A1);
setPosition(12);
break;
case dC4A1:
2021-02-22 10:08:43 +00:00
FlagCharacterExist = true;
FlagShowCharacter = true;
2021-02-01 08:09:01 +00:00
actorStop();
nextStep();
break;
case dF4C1:
memcpy(g_vm->_inventory, g_vm->_cyberInventory, MAXICON);
g_vm->_inventorySize = g_vm->_cyberInventorySize;
g_vm->_iconBase = 0;
g_vm->removeIcon(iCARD03);
g_vm->removeIcon(iPEN);
g_vm->removeIcon(iKEY05);
g_vm->removeIcon(iLETTER12);
g_vm->removeIcon(iCARD14);
g_vm->removeIcon(iFOTO);
g_vm->removeIcon(iPISTOLA15);
g_vm->removeIcon(iRAPPORTO);
g_vm->removeIcon(iTESSERA);
g_vm->removeIcon(iFUCILE);
g_vm->removeIcon(iLAMPADINA29);
g_vm->removeIcon(iTELECOMANDO2G);
g_vm->removeIcon(iCARD36);
g_vm->removeIcon(iFOGLIO36);
g_vm->removeIcon(iSTETOSCOPIO);
g_vm->removeIcon(iREFERTO);
g_vm->removeIcon(iLIBRO);
g_vm->addIcon(iMAPPA50);
g_vm->addIcon(iCUTTER);
g_vm->addIcon(iWALKY);
2021-02-01 08:09:01 +00:00
StartCharacterAction(a511, 0, 1, 0);
break;
case dF4P1:
CharacterSay(1707);
break;
case dF4P2:
CharacterSay(1708);
break;
case dF562:
g_vm->_obj[oPORTA58C55]._action = 1287;
g_vm->_obj[oPORTA58C55]._anim = 0;
g_vm->_obj[oFINESTRA58P55]._action = 1292;
g_vm->_obj[oFINESTRA58P55]._mode |= OBJMODE_OBJSTATUS;
g_vm->_obj[oFINESTRA58P55]._anim = 0;
2021-02-01 08:09:01 +00:00
break;
case dF5A1:
g_vm->_obj[oPORTA58C55]._action = 1286;
g_vm->_obj[oFINESTRA58P55]._action = 1291;
g_vm->_obj[oFINESTRAA5A]._action = 1403;
g_vm->_obj[oGUARDIA58]._mode |= OBJMODE_OBJSTATUS;
2021-02-01 08:09:01 +00:00
_choice[286]._flag |= OBJFLAG_DONE;
break;
case dC581:
if (!(_choice[886]._flag & OBJFLAG_DONE) && (_choice[258]._flag & OBJFLAG_DONE)) {
setPosition(1);
PlayDialog(dF581);
}
break;
case dC582:
g_vm->_obj[oFINESTRAA58]._mode |= OBJMODE_OBJSTATUS;
g_vm->addIcon(iCODICE);
2021-02-01 08:09:01 +00:00
break;
case dC5A1:
g_vm->_obj[oFINESTRAA5A]._action = 1402;
if (g_vm->_room[r5A]._flag & OBJFLAG_EXTRA)
2021-02-01 08:09:01 +00:00
PlayDialog(dF5A1);
break;
case dFLOG:
PlayDialog(dINTRO);
break;
case dINTRO:
doEvent(MC_SYSTEM, ME_CHANGEROOM, MP_SYSTEM, r11, 0, 20, g_vm->_curObj);
2021-02-01 08:09:01 +00:00
break;
case dF582:
PlayDialog(dFCRED);
break;
case dFCRED:
doEvent(MC_SYSTEM, ME_QUIT, MP_SYSTEM, 0, 0, 0, 0);
break;
}
return;
}
// se parte altro dialogo
if (_choice[_curChoice]._nextDialog != 0) {
_curDialog = _choice[_curChoice]._nextDialog;
2021-02-22 10:08:43 +00:00
FlagDialogActive = true;
2021-02-01 08:09:01 +00:00
_curChoice = 0;
d = &_dialog[_curDialog];
g_vm->_animMgr->_fullMotionStart = 0;
g_vm->_animMgr->_fullMotionEnd = 0;
2021-02-01 08:09:01 +00:00
// se c'e' predialog
if (_dialog[_curDialog]._startLen > 0) {
g_vm->_animMgr->playFullMotion(1, _dialog[_curDialog]._startLen);
2021-02-01 08:09:01 +00:00
return ;
}
}
// fa partire subito tutte le prevarica
for (int c = d->_firstChoice; c < (d->_firstChoice + d->_choiceNumb); c++) {
if ((_choice[c]._flag & DLGCHOICE_FRAUD) && (!(_choice[c]._flag & DLGCHOICE_HIDE))) {
PlayScelta(c);
return;
}
}
// se c'e' una sola partisubito la fa partire altrimenti mostra le scelte
int res = 0;
for (int c = d->_firstChoice; c < (d->_firstChoice + d->_choiceNumb); c++) {
if (!(_choice[c]._flag & DLGCHOICE_HIDE)) {
if (_choice[c]._flag & DLGCHOICE_EXITNOW) {
if (res == 0)
res = c;
else {
res = 0;
break;
}
} else {
res = 0;
break;
}
}
}
if (res != 0) {
PlayScelta(res);
return;
}
// se sono tutte hidate esce dal dialogo
res = 0;
for (int c = d->_firstChoice; c < (d->_firstChoice + d->_choiceNumb); c++) {
if (!(_choice[c]._flag & DLGCHOICE_HIDE))
res++;
}
if (res == 0) {
g_vm->_animMgr->stopFullMotion();
2021-02-01 08:09:01 +00:00
if (_curDialog == dC381)
PlayDialog(dF381);
return;
}
MostraScelte(_curDialog);
}
/* -----------------28/07/97 22.08-------------------
DialogHandler
--------------------------------------------------*/
void DialogHandler(int numframe) {
2021-02-22 10:08:43 +00:00
if ((FlagDialogActive) && (!(FlagDialogMenuActive))) {
g_vm->_flagMouseEnabled = false;
2021-02-01 08:09:01 +00:00
if (numframe == _subTitles[_curSubTitle]._startFrame) {
int i = _curSubTitle++;
BattutaPrint(_subTitles[i]._x, _subTitles[i]._y, _subTitles[i]._color, g_vm->_sentence[_subTitles[i]._sentence]);
2021-02-01 08:09:01 +00:00
}
}
}
/* -----------------28/07/97 22.11-------------------
PlayScelta
--------------------------------------------------*/
void PlayScelta(uint16 i) {
DialogChoice *ss = &_choice[i];
2021-02-28 22:41:53 +01:00
wordset(g_vm->_video2, 0, MAXX * TOP);
g_vm->_graphicsMgr->showScreen(0, 0, MAXX, TOP);
2021-02-01 08:09:01 +00:00
_curChoice = i;
_curSubTitle = ss->_firstSubTitle;
EndBattuta = (ss->_firstSubTitle + ss->_subTitleNumb);
2021-02-22 10:08:43 +00:00
FlagDialogMenuActive = false;
2021-02-01 08:09:01 +00:00
ss->_flag |= OBJFLAG_DONE;
// se era one time la disabilita
if (ss->_flag & DLGCHOICE_ONETIME)
ss->_flag |= DLGCHOICE_HIDE;
// disattiva le altre scelte
for (int c = 0; c < MAXDISPSCELTE; c++)
_choice[ss->_off[c]]._flag |= DLGCHOICE_HIDE;
// attiva le altre scelte
for (int c = 0; c < MAXDISPSCELTE; c++)
_choice[ss->_on[c]]._flag &= ~DLGCHOICE_HIDE;
int lens = 0;
for (int c = _curSubTitle; c < EndBattuta; c++)
lens += _subTitles[c]._length;
g_vm->_flagMouseEnabled = false;
g_vm->_animMgr->playFullMotion(ss->_startFrame, ss->_startFrame + lens - 1);
2021-02-01 08:09:01 +00:00
}
/* -----------------28/07/97 22.15-------------------
DoDialog
--------------------------------------------------*/
void doDialog() {
switch (g_vm->_curMessage->_event) {
case ME_ENDCHOICE:
2021-02-22 10:25:27 +00:00
afterChoice(g_vm->_curMessage->_u16Param1);
2021-02-01 08:09:01 +00:00
break;
case ME_STARTDIALOG:
2021-02-22 10:25:27 +00:00
PlayDialog(g_vm->_curMessage->_u16Param1);
2021-02-01 08:09:01 +00:00
break;
}
}
} // End of namespace Trecision