TRECISION: introduce LogicManager for hardcoded logic parts of the engine, some renaming

This commit is contained in:
Strangerke 2021-03-24 15:17:48 +01:00 committed by SupSuper
parent af5c75bffa
commit e0e111f60c
17 changed files with 1660 additions and 1589 deletions

File diff suppressed because it is too large Load Diff

45
engines/trecision/logic.h Normal file
View File

@ -0,0 +1,45 @@
/* 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.
*
*/
#ifndef TRECISION_LOGIC_H
#define TRECISION_LOGIC_H
namespace Trecision {
class TrecisionEngine;
class LogicManager {
private:
TrecisionEngine *_vm;
public:
LogicManager(TrecisionEngine *vm);
~LogicManager();
void initScript();
void setRoom(uint16 r, bool b);
void initInventory();
void useWithScreen(bool *updateinv, bool *printsent);
};
; // end of class
} // end of namespace
#endif

File diff suppressed because it is too large Load Diff

View File

@ -149,7 +149,7 @@ void doMouse() {
int8 curpos;
if (GAMEAREA(g_vm->_curMessage->_u16Param2))
curpos = POSGAME;
else if (INVAREA(g_vm->_curMessage->_u16Param2))
else if (isInventoryArea(g_vm->_curMessage->_u16Param2))
curpos = POSINV;
else
curpos = POSUP;
@ -277,7 +277,7 @@ void doMouse() {
// If it's in a room without a character, like a map or a book
if (FlagCharacterExist == false) {
if ((INVAREA(g_vm->_curMessage->_u16Param2)) && ((g_vm->_curRoom == r31P) || (g_vm->_curRoom == r35P))) {
if ((isInventoryArea(g_vm->_curMessage->_u16Param2)) && ((g_vm->_curRoom == r31P) || (g_vm->_curRoom == r35P))) {
if (ICONAREA(g_vm->_curMessage->_u16Param1, g_vm->_curMessage->_u16Param2) && (g_vm->whatIcon(g_vm->_curMessage->_u16Param1)) && (g_vm->_inventoryStatus == INV_INACTION)) {
g_vm->_useWith[WITH] = 0;
g_vm->_curObj = 0;
@ -447,7 +447,7 @@ void doMouse() {
doEvent(MC_CHARACTER, ME_CHARACTERGOTOEXAMINE, MP_DEFAULT, g_vm->_curMessage->_u16Param1, g_vm->_curMessage->_u16Param2, 0, g_vm->_curObj);
} else
doEvent(MC_CHARACTER, ME_CHARACTERGOTO, MP_DEFAULT, g_vm->_curMessage->_u16Param1, g_vm->_curMessage->_u16Param2, 0, 0);
} else if (INVAREA(g_vm->_curMessage->_u16Param2)) {
} else if (isInventoryArea(g_vm->_curMessage->_u16Param2)) {
// Inventory area
if (g_vm->_animMgr->_playingAnims[1] || FlagDialogActive || g_vm->_curRoom == rSYS)
break;
@ -656,20 +656,20 @@ void doSystem() {
// Handle exit velocity in dual rooms level 2
if (g_vm->_room[g_vm->_oldRoom]._flag & OBJFLAG_EXTRA) {
if (g_vm->_curObj == od2ETO2C)
SetRoom(r2E, false);
g_vm->setRoom(r2E, false);
if (g_vm->_curObj == od24TO23)
SetRoom(r24, false);
g_vm->setRoom(r24, false);
if (g_vm->_curObj == od21TO22)
SetRoom(r21, false);
g_vm->setRoom(r21, false);
if (g_vm->_curObj == od2GVALLA26)
SetRoom(r2GV, false);
g_vm->setRoom(r2GV, false);
} else {
if (g_vm->_curObj == oENTRANCE2E)
SetRoom(r2E, true);
g_vm->setRoom(r2E, true);
if (g_vm->_curObj == od24TO26)
SetRoom(r24, true);
g_vm->setRoom(r24, true);
if (g_vm->_curObj == od21TO23)
SetRoom(r21, true);
g_vm->setRoom(r21, true);
}
if ((g_vm->_curRoom == r12) && (g_vm->_oldRoom == r11))
@ -706,21 +706,21 @@ void doSystem() {
g_vm->_flagMouseEnabled = true;
if ((g_vm->_curRoom == r21) && ((g_vm->_oldRoom == r23A) || (g_vm->_oldRoom == r23B)))
SetRoom(r21, true);
g_vm->setRoom(r21, true);
else if ((g_vm->_curRoom == r21) && (g_vm->_oldRoom == r22))
SetRoom(r21, false);
g_vm->setRoom(r21, false);
else if ((g_vm->_curRoom == r24) && ((g_vm->_oldRoom == r23A) || (g_vm->_oldRoom == r23B)))
SetRoom(r24, false);
g_vm->setRoom(r24, false);
else if ((g_vm->_curRoom == r24) && (g_vm->_oldRoom == r26))
SetRoom(r24, true);
g_vm->setRoom(r24, true);
else if ((g_vm->_curRoom == r2A) && (g_vm->_oldRoom == r25))
SetRoom(r2A, true);
g_vm->setRoom(r2A, true);
else if ((g_vm->_curRoom == r2A) && ((g_vm->_oldRoom == r2B) || (g_vm->_oldRoom == r29) || (g_vm->_oldRoom == r29L)))
SetRoom(r2A, false);
g_vm->setRoom(r2A, false);
else if ((g_vm->_curRoom == r2B) && (g_vm->_oldRoom == r28))
SetRoom(r2B, true);
g_vm->setRoom(r2B, true);
else if ((g_vm->_curRoom == r2B) && (g_vm->_oldRoom == r2A))
SetRoom(r2B, false);
g_vm->setRoom(r2B, false);
// for save/load
else if ((g_vm->_curRoom == r15) && (g_vm->_room[g_vm->_curRoom]._flag & OBJFLAG_EXTRA))
read3D("152.3d");
@ -791,7 +791,7 @@ void RollInventory(uint8 status) {
g_vm->setInventoryStart(g_vm->_iconBase, INVENTORY_SHOW);
g_vm->_inventoryStatus = INV_INACTION;
g_vm->_inventoryCounter = INVENTORY_SHOW;
if (!(INVAREA(my)))
if (!(isInventoryArea(my)))
doEvent(MC_INVENTORY, ME_CLOSE, MP_DEFAULT, 0, 0, 0, 0);
g_vm->redrawString();
return ;
@ -804,7 +804,7 @@ void RollInventory(uint8 status) {
g_vm->setInventoryStart(g_vm->_iconBase, INVENTORY_HIDE);
g_vm->_inventoryStatus = INV_OFF;
g_vm->_inventoryCounter = INVENTORY_HIDE;
if (INVAREA(my) && !(FlagDialogActive || FlagDialogMenuActive))
if (isInventoryArea(my) && !(FlagDialogActive || FlagDialogMenuActive))
doEvent(MC_INVENTORY, ME_OPEN, MP_DEFAULT, 0, 0, 0, 0);
else
g_vm->redrawString();
@ -897,7 +897,7 @@ void doIdle() {
if (g_vm->_inventoryScrollTime > TheTime)
g_vm->_inventoryScrollTime = TheTime;
if (INVAREA(my) && (TheTime > (INVSCROLLSP + g_vm->_inventoryScrollTime))) {
if (isInventoryArea(my) && (TheTime > (INVSCROLLSP + g_vm->_inventoryScrollTime))) {
doScrollInventory(mx);
g_vm->_inventoryScrollTime = TheTime;
}

View File

@ -62,9 +62,9 @@ void MostraScelte(uint16 i) {
CurDispScelte = 0;
for (int c = d->_firstChoice; c < (d->_firstChoice + d->_choiceNumb); c++) {
if (!(_choice[c]._flag & DLGCHOICE_HIDE)) {
if (!(g_vm->_choice[c]._flag & DLGCHOICE_HIDE)) {
DispScelte[CurDispScelte++] = c;
DialogPrint(x, y, HWHITE, g_vm->_sentence[_choice[c]._sentenceIndex]);
DialogPrint(x, y, HWHITE, g_vm->_sentence[g_vm->_choice[c]._sentenceIndex]);
y += CARHEI;
}
}
@ -88,9 +88,9 @@ void UpdateScelte(int16 dmx, int16 dmy) {
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]);
DialogPrint(10, 5 + c * CARHEI, HGREEN, g_vm->_sentence[g_vm->_choice[DispScelte[c]]._sentenceIndex]);
else
DialogPrint(10, 5 + c * CARHEI, HWHITE, g_vm->_sentence[_choice[DispScelte[c]]._sentenceIndex]);
DialogPrint(10, 5 + c * CARHEI, HWHITE, g_vm->_sentence[g_vm->_choice[DispScelte[c]]._sentenceIndex]);
}
}
g_vm->_graphicsMgr->showScreen(0, 5, MAXX, (CurDispScelte)*CARHEI + 5);
@ -136,10 +136,10 @@ void PlayDialog(uint16 i) {
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))
if (!(g_vm->_choice[c]._flag & DLGCHOICE_HIDE))
curChoice++;
if ((_curDialog == dC581) && !(_choice[262]._flag & DLGCHOICE_HIDE))
if ((_curDialog == dC581) && !(g_vm->_choice[262]._flag & DLGCHOICE_HIDE))
skip++;
if ((_curDialog == dC581) && (curChoice == 1))
skip++;
@ -211,13 +211,13 @@ void afterChoice(int numframe) {
g_vm->_inventoryObj[iFOTO]._action = 1465;
g_vm->_obj[oTESSERA1A]._action = 238;
if (g_vm->_obj[oTESSERA1A]._flag & OBJFLAG_EXTRA) {
_choice[154]._flag &= ~DLGCHOICE_HIDE;
_choice[153]._flag |= DLGCHOICE_HIDE;
g_vm->_choice[154]._flag &= ~DLGCHOICE_HIDE;
g_vm->_choice[153]._flag |= DLGCHOICE_HIDE;
} else
_choice[153]._flag &= ~DLGCHOICE_HIDE;
g_vm->_choice[153]._flag &= ~DLGCHOICE_HIDE;
} else if (_curChoice == 154) {
if (g_vm->_obj[oTESSERA1A]._flag & OBJFLAG_EXTRA)
_choice[183]._flag &= ~DLGCHOICE_HIDE;
g_vm->_choice[183]._flag &= ~DLGCHOICE_HIDE;
} else if (_curChoice == 155)
g_vm->_obj[ocGUARD18]._action = 228;
break;
@ -229,12 +229,12 @@ void afterChoice(int numframe) {
*/
case dF213B:
case dF213:
SetRoom(r21, true);
g_vm->setRoom(r21, true);
break;
case dF212B:
case dF212:
SetRoom(r21, false);
g_vm->setRoom(r21, false);
break;
case dF321:
@ -268,7 +268,7 @@ void afterChoice(int numframe) {
break;
}
// Se ultima scelta era un esci dialogo
if (_choice[_curChoice]._flag & DLGCHOICE_EXITDLG) {
if (g_vm->_choice[_curChoice]._flag & DLGCHOICE_EXITDLG) {
g_vm->_animMgr->stopFullMotion();
switch (_curDialog) {
@ -294,7 +294,7 @@ void afterChoice(int numframe) {
break;
*/
case dPOLIZIOTTO16:
if ((_choice[61]._flag & OBJFLAG_DONE) && (_choice[62]._flag & OBJFLAG_DONE) && (g_vm->_obj[ocPOLIZIOTTO16]._flag & OBJFLAG_EXTRA))
if ((g_vm->_choice[61]._flag & OBJFLAG_DONE) && (g_vm->_choice[62]._flag & OBJFLAG_DONE) && (g_vm->_obj[ocPOLIZIOTTO16]._flag & OBJFLAG_EXTRA))
g_vm->_obj[ocPOLIZIOTTO16]._mode &= ~OBJMODE_OBJSTATUS;
break;
@ -500,11 +500,11 @@ void afterChoice(int numframe) {
g_vm->_obj[oFINESTRA58P55]._action = 1291;
g_vm->_obj[oFINESTRAA5A]._action = 1403;
g_vm->_obj[oGUARDIA58]._mode |= OBJMODE_OBJSTATUS;
_choice[286]._flag |= OBJFLAG_DONE;
g_vm->_choice[286]._flag |= OBJFLAG_DONE;
break;
case dC581:
if (!(_choice[886]._flag & OBJFLAG_DONE) && (_choice[258]._flag & OBJFLAG_DONE)) {
if (!(g_vm->_choice[886]._flag & OBJFLAG_DONE) && (g_vm->_choice[258]._flag & OBJFLAG_DONE)) {
setPosition(1);
PlayDialog(dF581);
}
@ -541,8 +541,8 @@ void afterChoice(int numframe) {
}
// se parte altro dialogo
if (_choice[_curChoice]._nextDialog != 0) {
_curDialog = _choice[_curChoice]._nextDialog;
if (g_vm->_choice[_curChoice]._nextDialog != 0) {
_curDialog = g_vm->_choice[_curChoice]._nextDialog;
FlagDialogActive = true;
_curChoice = 0;
@ -560,7 +560,7 @@ void afterChoice(int numframe) {
// 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))) {
if ((g_vm->_choice[c]._flag & DLGCHOICE_FRAUD) && (!(g_vm->_choice[c]._flag & DLGCHOICE_HIDE))) {
PlayScelta(c);
return;
}
@ -569,8 +569,8 @@ void afterChoice(int numframe) {
// 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 (!(g_vm->_choice[c]._flag & DLGCHOICE_HIDE)) {
if (g_vm->_choice[c]._flag & DLGCHOICE_EXITNOW) {
if (res == 0)
res = c;
else {
@ -591,7 +591,7 @@ void afterChoice(int numframe) {
// 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))
if (!(g_vm->_choice[c]._flag & DLGCHOICE_HIDE))
res++;
}
@ -622,7 +622,7 @@ void DialogHandler(int numframe) {
PlayScelta
--------------------------------------------------*/
void PlayScelta(uint16 i) {
DialogChoice *ss = &_choice[i];
DialogChoice *ss = &g_vm->_choice[i];
wordset(g_vm->_video2, 0, MAXX * TOP);
g_vm->_graphicsMgr->showScreen(0, 0, MAXX, TOP);
@ -640,10 +640,10 @@ void PlayScelta(uint16 i) {
// disattiva le altre scelte
for (int c = 0; c < MAXDISPSCELTE; c++)
_choice[ss->_off[c]]._flag |= DLGCHOICE_HIDE;
g_vm->_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;
g_vm->_choice[ss->_on[c]]._flag &= ~DLGCHOICE_HIDE;
int lens = 0;
for (int c = _curSubTitle; c < EndBattuta; c++)

View File

@ -100,9 +100,9 @@ void doMouseExamine(uint16 TheObj) {
switch (TheObj) {
case oMAPPA12:
doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a1211OSSERVAMAPPAPALAZZO, 0, 0, TheObj);
_choice[4]._flag &= ~DLGCHOICE_HIDE;
_choice[18]._flag &= ~DLGCHOICE_HIDE;
_choice[33]._flag &= ~DLGCHOICE_HIDE;
g_vm->_choice[4]._flag &= ~DLGCHOICE_HIDE;
g_vm->_choice[18]._flag &= ~DLGCHOICE_HIDE;
g_vm->_choice[33]._flag &= ~DLGCHOICE_HIDE;
printSentence = false;
break;
@ -208,8 +208,8 @@ void doMouseExamine(uint16 TheObj) {
break;
case oTESSERA1A:
if (((_choice[151]._flag & OBJFLAG_DONE) || (_choice[152]._flag & OBJFLAG_DONE)) && !(_choice[183]._flag & OBJFLAG_DONE))
_choice[183]._flag &= ~DLGCHOICE_HIDE;
if (((g_vm->_choice[151]._flag & OBJFLAG_DONE) || (g_vm->_choice[152]._flag & OBJFLAG_DONE)) && !(g_vm->_choice[183]._flag & OBJFLAG_DONE))
g_vm->_choice[183]._flag &= ~DLGCHOICE_HIDE;
g_vm->_obj[oTESSERA1A]._flag |= OBJFLAG_EXTRA;
printSentence = true;
break;
@ -490,7 +490,7 @@ void doMouseOperate(uint16 TheObj) {
case oSCALA16:
if (!(g_vm->_obj[oSCALA16]._flag & OBJFLAG_EXTRA)) {
g_vm->_obj[oSCALA16]._flag |= OBJFLAG_EXTRA;
_choice[61]._flag &= ~DLGCHOICE_HIDE;
g_vm->_choice[61]._flag &= ~DLGCHOICE_HIDE;
PlayDialog(dPOLIZIOTTO16);
g_vm->_obj[oSCALA16]._action = 166;
g_vm->_obj[ocPOLIZIOTTO16]._action = 166;
@ -580,8 +580,8 @@ void doMouseOperate(uint16 TheObj) {
case oPORTAC18:
if (g_vm->_obj[ocGUARD18]._flag & OBJFLAG_PERSON) {
_choice[151]._flag |= DLGCHOICE_HIDE;
_choice[152]._flag &= ~DLGCHOICE_HIDE;
g_vm->_choice[151]._flag |= DLGCHOICE_HIDE;
g_vm->_choice[152]._flag &= ~DLGCHOICE_HIDE;
PlayDialog(dGUARDIANO18);
g_vm->_obj[ocGUARD18]._flag &= ~OBJFLAG_PERSON;
g_vm->_obj[ocGUARD18]._action = 227;
@ -623,13 +623,13 @@ void doMouseOperate(uint16 TheObj) {
break;
case oCATENAT21:
if ((g_vm->iconPos(iSBARRA21) != MAXICON) && ((_choice[436]._flag & OBJFLAG_DONE) || (_choice[466]._flag & OBJFLAG_DONE))) {
if ((g_vm->iconPos(iSBARRA21) != MAXICON) && ((g_vm->_choice[436]._flag & OBJFLAG_DONE) || (g_vm->_choice[466]._flag & OBJFLAG_DONE))) {
if (g_vm->_room[g_vm->_curRoom]._flag & OBJFLAG_EXTRA) // va a destra
PlayDialog(dF212); // 436
else // va a sinistra
PlayDialog(dF213); // 466
printsent = false;
} else if ((_choice[451]._flag & OBJFLAG_DONE) || (_choice[481]._flag & OBJFLAG_DONE)) {
} else if ((g_vm->_choice[451]._flag & OBJFLAG_DONE) || (g_vm->_choice[481]._flag & OBJFLAG_DONE)) {
if (g_vm->_room[g_vm->_curRoom]._flag & OBJFLAG_EXTRA) // va a destra
PlayDialog(dF212B); // 451
else // va a sinistra
@ -690,11 +690,11 @@ void doMouseOperate(uint16 TheObj) {
case oPASSAGE24:
if (g_vm->_room[r24]._flag & OBJFLAG_EXTRA) {
doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a244, 0, 14, TheObj);
SetRoom(r24, false);
g_vm->setRoom(r24, false);
printsent = false;
} else {
doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, a243, 0, 13, TheObj);
SetRoom(r24, true);
g_vm->setRoom(r24, true);
printsent = false;
}
break;
@ -891,7 +891,7 @@ void doMouseOperate(uint16 TheObj) {
break;
case oCOMPUTER36:
if (!(_choice[646]._flag & OBJFLAG_DONE)) {
if (!(g_vm->_choice[646]._flag & OBJFLAG_DONE)) {
PlayDialog(dF361);
g_vm->_obj[oCOMPUTER36]._action = 2004;
printsent = false;
@ -1100,8 +1100,8 @@ void doMouseOperate(uint16 TheObj) {
break;
case oPORTAC4A:
if (!(_choice[245]._flag & OBJFLAG_DONE) && !(_choice[766]._flag & OBJFLAG_DONE)) {
_choice[245]._flag &= ~DLGCHOICE_HIDE;
if (!(g_vm->_choice[245]._flag & OBJFLAG_DONE) && !(g_vm->_choice[766]._flag & OBJFLAG_DONE)) {
g_vm->_choice[245]._flag &= ~DLGCHOICE_HIDE;
PlayDialog(dC4A1);
setPosition(14);
g_vm->_obj[oPORTAC4A]._action = 1117;
@ -1114,8 +1114,8 @@ void doMouseOperate(uint16 TheObj) {
case oPULSANTE4A:
if (g_vm->_obj[TheObj]._anim)
doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, g_vm->_obj[TheObj]._anim, 0, 0, TheObj);
else if (!(_choice[244]._flag & OBJFLAG_DONE)) {
_choice[244]._flag &= ~DLGCHOICE_HIDE;
else if (!(g_vm->_choice[244]._flag & OBJFLAG_DONE)) {
g_vm->_choice[244]._flag &= ~DLGCHOICE_HIDE;
PlayDialog(dC4A1);
g_vm->_obj[oPULSANTE4A]._examine = 1108;
g_vm->_obj[oPULSANTE4A]._action = 1109;
@ -1152,7 +1152,7 @@ void doMouseOperate(uint16 TheObj) {
break;
case oPORTAC54:
if (!(_choice[826]._flag & OBJFLAG_DONE)) {
if (!(g_vm->_choice[826]._flag & OBJFLAG_DONE)) {
PlayDialog(dF541);
printsent = false;
} else
@ -1160,7 +1160,7 @@ void doMouseOperate(uint16 TheObj) {
break;
case oLAVATRICEL54:
if ((g_vm->_obj[TheObj]._anim) && (g_vm->_obj[oSECCHIOS54]._flag & OBJFLAG_EXTRA) && (g_vm->_obj[oGRATAC54]._mode & OBJMODE_OBJSTATUS) && !(_choice[841]._flag & OBJFLAG_DONE))
if ((g_vm->_obj[TheObj]._anim) && (g_vm->_obj[oSECCHIOS54]._flag & OBJFLAG_EXTRA) && (g_vm->_obj[oGRATAC54]._mode & OBJMODE_OBJSTATUS) && !(g_vm->_choice[841]._flag & OBJFLAG_DONE))
doEvent(MC_CHARACTER, ME_CHARACTERACTION, MP_DEFAULT, g_vm->_obj[TheObj]._anim, 0, 0, TheObj);
else
printsent = true;
@ -1175,7 +1175,7 @@ void doMouseOperate(uint16 TheObj) {
break;
case oTASTIERA56:
if (_choice[262]._flag & OBJFLAG_DONE) {
if (g_vm->_choice[262]._flag & OBJFLAG_DONE) {
if (g_vm->_obj[od56ALLA59]._mode & OBJMODE_OBJSTATUS)
CharacterSay(g_vm->_obj[TheObj]._action);
else
@ -1210,7 +1210,7 @@ void doMouseOperate(uint16 TheObj) {
break;
case oFINESTRAA5A:
if ((_choice[871]._flag & OBJFLAG_DONE) && !(_choice[286]._flag & OBJFLAG_DONE)) {
if ((g_vm->_choice[871]._flag & OBJFLAG_DONE) && !(g_vm->_choice[286]._flag & OBJFLAG_DONE)) {
PlayDialog(dC5A1);
printsent = false;
} else
@ -1218,7 +1218,7 @@ void doMouseOperate(uint16 TheObj) {
break;
case oFINESTRAB5A:
if (!(_choice[256]._flag & OBJFLAG_DONE)) {
if (!(g_vm->_choice[256]._flag & OBJFLAG_DONE)) {
CharacterSay(1999);
printsent = false;
} else
@ -1361,24 +1361,24 @@ void doMouseTalk(uint16 TheObj) {
switch (TheObj) {
case oTICKETOFFICE16:
if ((g_vm->_obj[oFINGERPADP16]._flag & OBJFLAG_ROOMOUT) && (_choice[50]._flag & OBJFLAG_DONE)) {
if ((g_vm->_obj[oFINGERPADP16]._flag & OBJFLAG_ROOMOUT) && (g_vm->_choice[50]._flag & OBJFLAG_DONE)) {
CharacterSay(147);
return ;
}
if ((_choice[49]._flag & DLGCHOICE_HIDE) && (_choice[50]._flag & DLGCHOICE_HIDE)) {
if ((g_vm->_choice[49]._flag & DLGCHOICE_HIDE) && (g_vm->_choice[50]._flag & DLGCHOICE_HIDE)) {
if (g_vm->_obj[oMAPPA16]._flag & OBJFLAG_EXTRA) {
_choice[46]._flag &= ~DLGCHOICE_HIDE;
_choice[48]._flag &= ~DLGCHOICE_HIDE;
g_vm->_choice[46]._flag &= ~DLGCHOICE_HIDE;
g_vm->_choice[48]._flag &= ~DLGCHOICE_HIDE;
g_vm->_obj[oTICKETOFFICE16]._flag |= OBJFLAG_EXTRA;
} else {
if (_choice[46]._flag & OBJFLAG_DONE) {
if (g_vm->_choice[46]._flag & OBJFLAG_DONE) {
CharacterSay(g_vm->_obj[oTICKETOFFICE16]._action);
return ;
}
_choice[46]._flag &= ~DLGCHOICE_HIDE;
_choice[47]._flag &= ~DLGCHOICE_HIDE;
g_vm->_choice[46]._flag &= ~DLGCHOICE_HIDE;
g_vm->_choice[47]._flag &= ~DLGCHOICE_HIDE;
}
}
break;
@ -1392,7 +1392,7 @@ void doMouseTalk(uint16 TheObj) {
case ocNEGOZIANTE1A: {
int c;
for (c = _dialog[dNEGOZIANTE1A]._firstChoice; c < (_dialog[dNEGOZIANTE1A]._firstChoice + _dialog[dNEGOZIANTE1A]._choiceNumb); c++)
if (!(_choice[c]._flag & DLGCHOICE_HIDE)) {
if (!(g_vm->_choice[c]._flag & DLGCHOICE_HIDE)) {
PlayDialog(g_vm->_obj[TheObj]._goRoom);
return;
}
@ -1447,7 +1447,7 @@ void doScrScrUseWith() {
case oRAMPINO21:
if (g_vm->_useWith[WITH] == oTUBO21) {
PlayDialog(dF211);
SetRoom(r21, true);
g_vm->setRoom(r21, true);
g_vm->_animMgr->_animTab[aBKG21]._flag &= ~SMKANIM_OFF1;
g_vm->_obj[oRAMPINO21]._mode &= ~OBJMODE_OBJSTATUS;
g_vm->_obj[oTUBO21]._mode &= ~OBJMODE_OBJSTATUS;
@ -1555,59 +1555,59 @@ void doInvOperate() {
switch (g_vm->_curInventory) {
case iSAM:
if ((_choice[166]._flag & OBJFLAG_DONE) && ((g_vm->_curRoom == r17) || (g_vm->_curRoom == r1B) || (g_vm->_curRoom == r1C) || (g_vm->_curRoom == r1D))) {
if ((g_vm->_choice[166]._flag & OBJFLAG_DONE) && ((g_vm->_curRoom == r17) || (g_vm->_curRoom == r1B) || (g_vm->_curRoom == r1C) || (g_vm->_curRoom == r1D))) {
if (g_vm->_obj[oNUMERO17]._mode & OBJMODE_OBJSTATUS) {
if (!(_choice[196]._flag & OBJFLAG_DONE)) {
if (!(g_vm->_choice[196]._flag & OBJFLAG_DONE)) {
if (g_vm->_curRoom == r17) {
if (_choice[198]._flag & OBJFLAG_DONE) {
if (g_vm->_choice[198]._flag & OBJFLAG_DONE) {
g_vm->_inventoryObj[iSAM]._action = 1787;
printsent = true;
} else {
_choice[197]._flag |= DLGCHOICE_HIDE;
_choice[198]._flag &= ~DLGCHOICE_HIDE;
g_vm->_choice[197]._flag |= DLGCHOICE_HIDE;
g_vm->_choice[198]._flag &= ~DLGCHOICE_HIDE;
PlayDialog(dSAM17);
printsent = false;
g_vm->_obj[oFAX17]._mode |= OBJMODE_OBJSTATUS;
}
} else {
if (_choice[199]._flag & OBJFLAG_DONE) {
if (g_vm->_choice[199]._flag & OBJFLAG_DONE) {
g_vm->_inventoryObj[iSAM]._action = 1787;
printsent = true;
} else {
_choice[197]._flag |= DLGCHOICE_HIDE;
_choice[199]._flag &= ~DLGCHOICE_HIDE;
g_vm->_choice[197]._flag |= DLGCHOICE_HIDE;
g_vm->_choice[199]._flag &= ~DLGCHOICE_HIDE;
PlayDialog(dSAM17);
printsent = false;
g_vm->_obj[oFAX17]._mode |= OBJMODE_OBJSTATUS;
}
}
} else {
if ((_choice[198]._flag & OBJFLAG_DONE) || (_choice[199]._flag & OBJFLAG_DONE)) {
if ((g_vm->_choice[198]._flag & OBJFLAG_DONE) || (g_vm->_choice[199]._flag & OBJFLAG_DONE)) {
g_vm->_inventoryObj[iSAM]._action = 1787;
printsent = true;
} else if (g_vm->_curRoom == r17) {
if (_choice[201]._flag & OBJFLAG_DONE) {
if (g_vm->_choice[201]._flag & OBJFLAG_DONE) {
g_vm->_inventoryObj[iSAM]._action = 1787;
printsent = true;
} else {
_choice[201]._flag &= ~DLGCHOICE_HIDE;
g_vm->_choice[201]._flag &= ~DLGCHOICE_HIDE;
PlayDialog(dSAM17);
printsent = false;
g_vm->_obj[oFAX17]._mode |= OBJMODE_OBJSTATUS;
}
} else {
if (_choice[200]._flag & OBJFLAG_DONE) {
if (g_vm->_choice[200]._flag & OBJFLAG_DONE) {
g_vm->_inventoryObj[iSAM]._action = 1787;
printsent = true;
} else {
_choice[200]._flag &= ~DLGCHOICE_HIDE;
g_vm->_choice[200]._flag &= ~DLGCHOICE_HIDE;
PlayDialog(dSAM17);
printsent = false;
g_vm->_obj[oFAX17]._mode |= OBJMODE_OBJSTATUS;
}
}
}
} else if (_choice[197]._flag & OBJFLAG_DONE) {
} else if (g_vm->_choice[197]._flag & OBJFLAG_DONE) {
g_vm->_inventoryObj[iSAM]._action = 1786;
printsent = true;
} else {
@ -2375,7 +2375,7 @@ void ExecuteATFDO(ATFHandle *h, int doit, int obj) {
doEvent(MC_MOUSE, ME_MLEFT, MP_DEFAULT, 336, 263 + TOP, true, 0);
break;
case fVALVOLAON34:
if (!(_choice[616]._flag & OBJFLAG_DONE) && // if the fmv is not done
if (!(g_vm->_choice[616]._flag & OBJFLAG_DONE) && // if the fmv is not done
(g_vm->_obj[oTUBOA34]._mode & OBJMODE_OBJSTATUS) && // if there's a cut pipe
!(g_vm->_obj[oTUBOFT34]._mode & OBJMODE_OBJSTATUS)) // if there's not tube outside
g_vm->_animMgr->smkVolumePan(0, 2, 1);
@ -2530,10 +2530,10 @@ void ProcessATF(ATFHandle *h, int type, int atf) {
RegenRoom();
break;
case ATFSETROOMT:
SetRoom(h->curanim->_atFrame[atf]._index, true);
g_vm->setRoom(h->curanim->_atFrame[atf]._index, true);
break;
case ATFSETROOMF:
SetRoom(h->curanim->_atFrame[atf]._index, false);
g_vm->setRoom(h->curanim->_atFrame[atf]._index, false);
break;
case ATFREADBOX:
if (h->curanim->_atFrame[atf]._index == 1) {

View File

@ -84,7 +84,6 @@ extern uint32 SomeOneSpeakTime;
/* DIALOGHI */
/*-------------------------------------------------------------------------*/
extern Dialog _dialog[];
extern DialogChoice _choice [];
extern DialogSubTitle _subTitles[];
extern uint16 _curDialog, _curChoice, _curSubTitle;

View File

@ -83,7 +83,6 @@ uint32 SomeOneSpeakTime;
/* DIALOGHI */
/*-------------------------------------------------------------------------*/
Dialog _dialog[MAXDIALOG];
DialogChoice _choice [MAXCHOICE];
DialogSubTitle _subTitles[MAXSUBTITLES];
uint16 _curDialog, _curChoice, _curSubTitle;

View File

@ -645,7 +645,7 @@ insave:
fwrite(&GSample[a]._flag, sizeof(uint8), 1, fh);
}
for (int a = 0; a < MAXCHOICE; a++)
fwrite(&_choice[a], sizeof(DialogChoice), 1, fh);
fwrite(&g_vm->_choice[a], sizeof(DialogChoice), 1, fh);
for (int a = 0; a < MAXDIALOG; a++)
fwrite(&_dialog[a], sizeof(Dialog), 1, fh);
@ -901,7 +901,7 @@ bool DataLoad() {
}
for (int a = 0; a < MAXCHOICE; a++)
fread(&_choice[a], sizeof(DialogChoice), 1, fh);
fread(&g_vm->_choice[a], sizeof(DialogChoice), 1, fh);
for (int a = 0; a < MAXDIALOG; a++)
fread(&_dialog[a], sizeof(Dialog), 1, fh);

View File

@ -187,7 +187,6 @@ void SomeOneContinueTalk();
void SomeOneMute();
void doString();
void DoSys(uint16 curObj);
void SetRoom(uint16 r, bool b);
char GetKey();
char waitKey();
void FreeKey();

View File

@ -191,7 +191,7 @@ struct StackText {
char sign[256];
bool Clear;
void DoText();
void doText();
};
struct SSound {

View File

@ -141,7 +141,7 @@ Management of cards for Regen
/* MACROS */
#define BETWEEN(a,x,b) ((x>=a) && (x<=b))
#define GAMEAREA(my) BETWEEN(VideoCent.y0,my,VideoCent.y1)
#define INVAREA(my) (my>=VideoBott.y0)
#define isInventoryArea(my) (my>=VideoBott.y0)
#define ICONAREA(mx,my) ((my>=VideoBott.y0) && (my</*=VideoBott.y0+ICONDY*/MAXY) && (mx>=ICONMARGSX) && (mx<=SCREENLEN-ICONMARGDX))
#define REEVENT doEvent(g_vm->_curMessage->_class, g_vm->_curMessage->_event, g_vm->_curMessage->_priority, g_vm->_curMessage->_u16Param1, g_vm->_curMessage->_u16Param2, g_vm->_curMessage->_u8Param, g_vm->_curMessage->_u32Param)

View File

@ -178,159 +178,4 @@ void DoSys(uint16 curObj) {
ConfMan.flushToDisk();
}
/* -----------------09/02/98 15.44-------------------
* SetRoom
* --------------------------------------------------*/
void SetRoom(unsigned short r, bool b) {
switch (r) {
case r21:
if (!b) {
read3D("21.3d");
g_vm->_room[r21]._flag &= ~OBJFLAG_EXTRA;
setPosition(14);
g_vm->_obj[oCATENAT21]._position = 5;
g_vm->_obj[oUSCITA21]._position = 11;
// if we can go beyond
if (((g_vm->iconPos(iSBARRA21) != MAXICON) && ((_choice[436]._flag & OBJFLAG_DONE) || (_choice[466]._flag & OBJFLAG_DONE)))
|| ((_choice[451]._flag & OBJFLAG_DONE) || (_choice[481]._flag & OBJFLAG_DONE))) {
g_vm->_obj[od21TO23]._flag |= OBJFLAG_ROOMOUT;
g_vm->_obj[od21TO23]._flag &= ~OBJFLAG_EXAMINE;
} else {
g_vm->_obj[od21TO23]._flag &= ~OBJFLAG_ROOMOUT;
g_vm->_obj[od21TO23]._flag |= OBJFLAG_EXAMINE;
}
g_vm->_obj[od21TO23]._anim = 0;
g_vm->_obj[oUSCITA21]._mode |= OBJMODE_OBJSTATUS;
g_vm->_obj[od21TO22]._flag |= OBJFLAG_ROOMOUT;
g_vm->_obj[od21TO22]._flag &= ~OBJFLAG_EXAMINE;
g_vm->_obj[od21TO22]._anim = aWALKOUT;
g_vm->_obj[oPORTAA21]._anim = a212;
g_vm->_obj[oDOORC21]._anim = a219;
g_vm->_obj[oCUNICOLO21]._mode |= OBJMODE_OBJSTATUS;
g_vm->_obj[oCARTELLONE21]._mode |= OBJMODE_OBJSTATUS;
} else {
read3D("212.3d");
g_vm->_room[r21]._flag |= OBJFLAG_EXTRA;
setPosition(15);
g_vm->_obj[oCATENAT21]._position = 6;
g_vm->_obj[oUSCITA21]._position = 21;
g_vm->_obj[od21TO23]._flag |= OBJFLAG_ROOMOUT;
g_vm->_obj[od21TO23]._flag &= ~OBJFLAG_EXAMINE;
g_vm->_obj[od21TO23]._anim = aWALKOUT;
g_vm->_obj[oUSCITA21]._mode |= OBJMODE_OBJSTATUS;
// If we can go beyond
if (((g_vm->iconPos(iSBARRA21) != MAXICON) && ((_choice[436]._flag & OBJFLAG_DONE) || (_choice[466]._flag & OBJFLAG_DONE)))
|| ((_choice[451]._flag & OBJFLAG_DONE) || (_choice[481]._flag & OBJFLAG_DONE))) {
g_vm->_obj[od21TO22]._flag |= OBJFLAG_ROOMOUT;
g_vm->_obj[od21TO22]._flag &= ~OBJFLAG_EXAMINE;
} else {
g_vm->_obj[od21TO22]._flag &= ~OBJFLAG_ROOMOUT;
g_vm->_obj[od21TO22]._flag |= OBJFLAG_EXAMINE;
}
g_vm->_obj[od21TO22]._anim = 0;
g_vm->_obj[od21TO22]._examine = 335;
g_vm->_obj[od21TO22]._action = 335;
g_vm->_obj[oPORTAA21]._anim = 0;
g_vm->_obj[oDOORC21]._anim = 0;
g_vm->_obj[oCUNICOLO21]._mode &= ~OBJMODE_OBJSTATUS;
g_vm->_obj[oCARTELLONE21]._mode &= ~OBJMODE_OBJSTATUS;
}
break;
case r24:
if (!b) {
read3D("24.3d");
g_vm->_room[r24]._flag &= ~OBJFLAG_EXTRA;
g_vm->_obj[oPASSAGE24]._position = 3;
g_vm->_obj[oMACERIE24]._position = 3;
g_vm->_obj[oDUMMY24]._mode &= ~OBJMODE_OBJSTATUS;
g_vm->_obj[oDUMMY24A]._mode |= OBJMODE_OBJSTATUS;
} else {
read3D("242.3d");
g_vm->_room[r24]._flag |= OBJFLAG_EXTRA;
g_vm->_obj[od24TO26]._mode |= OBJMODE_OBJSTATUS;
g_vm->_obj[oPASSAGE24]._position = 4;
g_vm->_obj[oMACERIE24]._position = 4;
g_vm->_obj[oDUMMY24A]._mode &= ~OBJMODE_OBJSTATUS;
g_vm->_obj[oDUMMY24]._mode |= OBJMODE_OBJSTATUS;
}
break;
case r2A:
if (!b) {
read3D("2A.3d");
g_vm->_room[r2A]._flag &= ~OBJFLAG_EXTRA;
g_vm->_obj[oDUMMY2A2]._mode |= OBJMODE_OBJSTATUS;
g_vm->_obj[oDUMMY2A]._mode &= ~OBJMODE_OBJSTATUS;
} else {
read3D("2A2.3d");
g_vm->_room[r2A]._flag |= OBJFLAG_EXTRA;
g_vm->_obj[oDUMMY2A]._mode |= OBJMODE_OBJSTATUS;
g_vm->_obj[oDUMMY2A2]._mode &= ~OBJMODE_OBJSTATUS;
}
break;
case r2B:
if (!b) {
read3D("2B.3d");
g_vm->_room[r2B]._flag &= ~OBJFLAG_EXTRA;
g_vm->_obj[oPORTA2B]._mode |= OBJMODE_OBJSTATUS;
g_vm->_obj[od2BALLA28]._mode &= ~OBJMODE_OBJSTATUS;
} else {
read3D("2B2.3d");
g_vm->_room[r2B]._flag |= OBJFLAG_EXTRA;
g_vm->_obj[oPORTA2B]._mode &= ~OBJMODE_OBJSTATUS;
g_vm->_obj[od2BALLA28]._mode |= OBJMODE_OBJSTATUS;
}
break;
case r2E:
if (!b) {
g_vm->_obj[oCATWALKA2E]._nbox = BACKGROUND;
g_vm->_obj[oCATWALKA2E]._position = 2;
g_vm->_obj[oCATWALKA2E]._anim = a2E2PRIMAPALLONTANANDO;
read3D("2E.3d");
g_vm->_room[r2E]._flag &= ~OBJFLAG_EXTRA;
g_vm->_obj[oDUMMY2E]._mode &= ~OBJMODE_OBJSTATUS;
g_vm->_obj[oENTRANCE2E]._flag &= ~OBJFLAG_EXAMINE;
g_vm->_obj[oPASSERELLAB2E]._mode &= ~OBJMODE_OBJSTATUS;
g_vm->_obj[oCRATERE2E]._mode &= ~OBJMODE_OBJSTATUS;
g_vm->_obj[oARBUSTI2E]._mode &= ~OBJMODE_OBJSTATUS;
g_vm->_obj[oCREPACCIO2E]._position = 6;
} else {
g_vm->_obj[oCATWALKA2E]._position = 3;
g_vm->_obj[oCATWALKA2E]._anim = a2E3PRIMAPAVVICINANDO;
read3D("2E2.3d");
g_vm->_room[r2E]._flag |= OBJFLAG_EXTRA;
g_vm->_obj[oDUMMY2E]._mode |= OBJMODE_OBJSTATUS;
g_vm->_obj[oENTRANCE2E]._mode |= OBJMODE_OBJSTATUS;
g_vm->_obj[oENTRANCE2E]._flag |= OBJFLAG_EXAMINE;
g_vm->_obj[oPASSERELLAB2E]._mode |= OBJMODE_OBJSTATUS;
g_vm->_obj[oCRATERE2E]._mode |= OBJMODE_OBJSTATUS;
g_vm->_obj[oARBUSTI2E]._mode |= OBJMODE_OBJSTATUS;
g_vm->_obj[oCREPACCIO2E]._position = 7;
g_vm->_obj[oCATWALKA2E]._nbox = FOREGROUND;
}
break;
case r2GV:
if (!b) {
g_vm->_obj[oVIADOTTO2GV]._position = 7;
g_vm->_obj[oVIADOTTO2GV]._anim = a2G7ATTRAVERSAPONTICELLO;
read3D("2GV.3d");
g_vm->_room[r2GV]._flag &= ~OBJFLAG_EXTRA;
g_vm->_obj[oDUMMY2GV]._mode &= ~OBJMODE_OBJSTATUS;
g_vm->_obj[oRAGAZZOS2GV]._mode &= ~OBJMODE_OBJSTATUS;
g_vm->_obj[oCOCCODRILLO2GV]._mode &= ~OBJMODE_OBJSTATUS;
}
break;
default:
break;
}
RegenRoom();
}
} // End of namespace Trecision

View File

@ -37,6 +37,7 @@
#include "common/config-manager.h"
#include "common/file.h"
#include "common/fs.h"
#include "logic.h"
namespace Common {
class File;
@ -120,8 +121,9 @@ TrecisionEngine::TrecisionEngine(OSystem *syst) : Engine(syst) {
}
_video2 = nullptr;
_graphicsMgr = nullptr;
_animMgr = nullptr;
_graphicsMgr = nullptr;
_logicMgr = nullptr;
for (int i = 0; i < 50; ++i) {
for (int j = 0; j < 4; ++j) {
@ -160,6 +162,7 @@ TrecisionEngine::TrecisionEngine(OSystem *syst) : Engine(syst) {
TrecisionEngine::~TrecisionEngine() {
delete _animMgr;
delete _graphicsMgr;
delete _logicMgr;
}
Common::Error TrecisionEngine::run() {
@ -169,6 +172,7 @@ Common::Error TrecisionEngine::run() {
if (!_graphicsMgr->initScreen())
return Common::kUnsupportedColorMode;
_animMgr = new AnimManager(this);
_logicMgr = new LogicManager(this);
initMain();
@ -250,13 +254,13 @@ void TrecisionEngine::initMain() {
_obj[c]._position = -1;
initNames();
initScript();
_logicMgr->initScript();
openSys();
LoadAll();
initMessageSystem();
initInventory();
_logicMgr->initInventory();
_curRoom = rINTRO;
@ -279,38 +283,6 @@ void TrecisionEngine::initMessageSystem() {
}
}
void TrecisionEngine::initNames() {
_sysText[1] = "NightLong was not properly installed!\nRun Autorun.exe from the CD-Rom.";
_sysText[2] = "Not enough memory!\nYou need %d bytes more.\n";
_sysText[3] = "Unknown error\n";
_sysText[4] = "Please insert CD number %c and press return.";
_sysText[5] = "Unknown error";
_sysText[6] = "VESA Not Supported.\n";
_sysText[7] = "Error reading file.";
_sysText[8] = "Mouse not found error!\n";
_sysText[9] = "SAVE POSITION";
_sysText[10] = "EMPTY SLOT";
_sysText[11] = "LOAD POSITION";
_sysText[12] = "Error reading saved-game";
_sysText[13] = "Are you sure that you want to quit (y/n)?";
_sysText[14] = "Unknown error\n";
_sysText[15] = "Sample handle not available\n";
_sysText[16] = "Run NL to select an appropriate digital audio driver\n";
_sysText[17] = "This demo is over.";
_sysText[18] = "NightLong";
_sysText[19] = "ERROR!";
_sysText[20] = "Unsupported pixel format.";
_sysText[21] = "DirectX Error";
_sysText[22] = "NightLong Warning";
_sysText[23] = "Use ";
_sysText[24] = " with ";
_sysText[25] = "Go to ";
_sysText[26] = "Go to ... ";
_sentence[0] = " "; // Use it like a buffer !!!!
_objName[0] = " ";
}
/* --------------------------------------------------
* LoadAll
* --------------------------------------------------*/

View File

@ -31,16 +31,15 @@
#include "trecision/nl/ll/llinc.h"
namespace Trecision {
class GraphicsManager;
class AnimManager;
class GraphicsManager;
class LogicManager;
class TrecisionEngine : public Engine {
private:
void initMain();
void initMessageSystem();
void initNames();
void initInventory();
void initScript();
void LoadAll();
public:
@ -72,6 +71,7 @@ public:
// Utils
char *getNextSentence();
void setRoom(uint16 r, bool b);
// Text
void addText(uint16 x, uint16 y, const char *sign, uint16 tcol, uint16 scol);
@ -180,10 +180,15 @@ public:
// SlotMachine41
uint16 _slotMachine41Counter;
//Dialogs
DialogChoice _choice[MAXCHOICE];
bool _flagScreenRefreshed;
GraphicsManager *_graphicsMgr;
AnimManager *_animMgr;
GraphicsManager *_graphicsMgr;
LogicManager *_logicMgr;
};
extern TrecisionEngine *g_vm;

View File

@ -21,12 +21,47 @@
*/
#include "trecision/trecision.h"
#include "trecision/nl/struct.h"
#include "trecision/nl/extern.h"
#include "trecision/nl/message.h"
#include "common/textconsole.h"
#include "nl/extern.h"
#include "nl/message.h"
#include "logic.h"
namespace Trecision {
void TrecisionEngine::initNames() {
_sysText[1] = "NightLong was not properly installed!\nRun Autorun.exe from the CD-Rom.";
_sysText[2] = "Not enough memory!\nYou need %d bytes more.\n";
_sysText[3] = "Unknown error\n";
_sysText[4] = "Please insert CD number %c and press return.";
_sysText[5] = "Unknown error";
_sysText[6] = "VESA Not Supported.\n";
_sysText[7] = "Error reading file.";
_sysText[8] = "Mouse not found error!\n";
_sysText[9] = "SAVE POSITION";
_sysText[10] = "EMPTY SLOT";
_sysText[11] = "LOAD POSITION";
_sysText[12] = "Error reading saved-game";
_sysText[13] = "Are you sure that you want to quit (y/n)?";
_sysText[14] = "Unknown error\n";
_sysText[15] = "Sample handle not available\n";
_sysText[16] = "Run NL to select an appropriate digital audio driver\n";
_sysText[17] = "This demo is over.";
_sysText[18] = "NightLong";
_sysText[19] = "ERROR!";
_sysText[20] = "Unsupported pixel format.";
_sysText[21] = "DirectX Error";
_sysText[22] = "NightLong Warning";
_sysText[23] = "Use ";
_sysText[24] = " with ";
_sysText[25] = "Go to ";
_sysText[26] = "Go to ... ";
_sentence[0] = " "; // Use it like a buffer !!!!
_objName[0] = " ";
}
/* --------------------------------------------------
* getNextSentence
* --------------------------------------------------*/
@ -41,7 +76,7 @@ char *TrecisionEngine::getNextSentence() {
}
/*-------------------------------------------------------------------------*/
/* TEXT */
/* addText */
/*-------------------------------------------------------------------------*/
void TrecisionEngine::addText(uint16 x, uint16 y, const char *sign, uint16 tcol, uint16 scol) {
_textStackTop++;
@ -58,7 +93,7 @@ void TrecisionEngine::addText(uint16 x, uint16 y, const char *sign, uint16 tcol,
strcpy(_textStack[_textStackTop].sign, sign);
}
/* -----------------08/07/97 22.13-------------------
/* ------------------------------------------------
clearText
--------------------------------------------------*/
void TrecisionEngine::clearText() {
@ -74,7 +109,7 @@ void TrecisionEngine::clearText() {
}
}
/* -----------------08/07/97 22.14-------------------
/* ------------------------------------------------
drawString
--------------------------------------------------*/
void TrecisionEngine::drawString() {
@ -82,7 +117,7 @@ void TrecisionEngine::drawString() {
if (_textStack[i].Clear)
doClearText();
else
_textStack[i].DoText();
_textStack[i].doText();
}
}
@ -91,7 +126,7 @@ void TrecisionEngine::drawString() {
/*-------------------------------------------------------------------------*/
void TrecisionEngine::redrawString() {
if (!FlagDialogActive && !FlagDialogMenuActive && !FlagSomeOneSpeak && !_flagscriptactive && _flagMouseEnabled) {
if (INVAREA(my))
if (isInventoryArea(my))
doEvent(MC_INVENTORY, ME_SHOWICONNAME, MP_DEFAULT, 0, 0, 0, 0);
else {
CheckMask(mx, my);
@ -100,10 +135,10 @@ void TrecisionEngine::redrawString() {
}
}
/* -----------------08/07/97 22.15-------------------
DoText
/* ------------------------------------------------
doText
--------------------------------------------------*/
void StackText::DoText() {
void StackText::doText() {
curString.x = x;
curString.y = y;
curString.dx = TextLength(sign, 0);
@ -135,8 +170,8 @@ void StackText::DoText() {
TextStatus |= TEXT_DRAW;
}
/* -----------------08/07/97 22.15-------------------
DoClearString
/* ------------------------------------------------
doClearText
--------------------------------------------------*/
void TrecisionEngine::doClearText() {
if ((oldString.sign == nullptr) && (curString.sign)) {
@ -147,4 +182,13 @@ void TrecisionEngine::doClearText() {
}
}
/* --------------------------------------------------
* setRoom
* --------------------------------------------------*/
void TrecisionEngine::setRoom(uint16 r, bool b) {
_logicMgr->setRoom(r, b);
RegenRoom();
}
} // End of namespace Trecision

View File

@ -249,10 +249,10 @@ void AnimManager::startSmkAnim(uint16 num) {
smkVolumePan(0, 1, 0);
else if ((num == aBKG2E) && (_animTab[num]._flag & SMKANIM_OFF2))
smkVolumePan(0, 2, 0);
else if ((num == aBKG2G) && (_choice[556]._flag & OBJFLAG_DONE))
else if ((num == aBKG2G) && (g_vm->_choice[556]._flag & OBJFLAG_DONE))
smkVolumePan(0, 2, 0);
else if ((num == aBKG34) && // If it's BKG 34 and
((_choice[616]._flag & OBJFLAG_DONE) || // if the FMV is already done or
((g_vm->_choice[616]._flag & OBJFLAG_DONE) || // if the FMV is already done or
(_vm->_obj[oTUBOT34]._mode & OBJMODE_OBJSTATUS) || // if the whole tube is available or
(_vm->_obj[oTUBOFT34]._mode & OBJMODE_OBJSTATUS) || // if the outside of the tube is available or
(_vm->_obj[oVALVOLAC34]._mode & OBJMODE_OBJSTATUS))) // if the valve is closed
@ -384,7 +384,7 @@ void AnimManager::stopFullMotion() {
if (!((_curDialog == dNEGOZIANTE1A) && (_curChoice == 185))) {
if ((_curDialog == dF582) || (_curDialog == dFLOG) || (_curDialog == dINTRO) || (_curDialog == dF362) || (_curDialog == dC381) || (_curDialog == dF381) ||
(_curDialog == dF491) || ((_curDialog == dC581) && !(_choice[886]._flag & OBJFLAG_DONE) && (_choice[258]._flag & OBJFLAG_DONE)) ||
(_curDialog == dF491) || ((_curDialog == dC581) && !(g_vm->_choice[886]._flag & OBJFLAG_DONE) && (g_vm->_choice[258]._flag & OBJFLAG_DONE)) ||
((_curDialog == dC5A1) && (_vm->_room[r5A]._flag & OBJFLAG_EXTRA)))
FlagShowCharacter = false;
else