2712 lines
95 KiB
C++
2712 lines
95 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 "lastexpress/lastexpress.h"
|
|
|
|
namespace LastExpress {
|
|
|
|
void LogicManager::CONS_Master(int chapter) {
|
|
switch (chapter) {
|
|
case 0:
|
|
_engine->getMessageManager()->setMessageHandle(
|
|
kCharacterMaster,
|
|
_functionsMaster[getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall]]
|
|
);
|
|
|
|
break;
|
|
case 1:
|
|
CONS_Master_Birth(0, 0, 0, 0);
|
|
break;
|
|
case 2:
|
|
CONS_Master_StartPart2(0, 0, 0, 0);
|
|
break;
|
|
case 3:
|
|
CONS_Master_StartPart3(0, 0, 0, 0);
|
|
break;
|
|
case 4:
|
|
CONS_Master_StartPart4(0, 0, 0, 0);
|
|
break;
|
|
case 5:
|
|
CONS_Master_StartPart5(0, 0, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::MasterCall(CALL_PARAMS) {
|
|
getCharacter(kCharacterMaster).currentCall++;
|
|
|
|
(this->*functionPointer)(param1, param2, param3, param4);
|
|
}
|
|
|
|
void LogicManager::CONS_Master_SaveGame(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_Master_SaveGame);
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 1;
|
|
|
|
params->clear();
|
|
|
|
params->parameters[0] = param1.intParam;
|
|
params->parameters[1] = param2.intParam;
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Master_SaveGame(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
getCharacter(kCharacterMaster).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(
|
|
kCharacterMaster,
|
|
_functionsMaster[getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall]]
|
|
);
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 18, 0);
|
|
break;
|
|
case 12:
|
|
save(
|
|
kCharacterMaster,
|
|
getCharacterCurrentParams(kCharacterMaster)[0],
|
|
getCharacterCurrentParams(kCharacterMaster)[1]
|
|
);
|
|
|
|
getCharacter(kCharacterMaster).currentCall--;
|
|
|
|
_engine->getMessageManager()->setMessageHandle(
|
|
kCharacterMaster,
|
|
_functionsMaster[getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall]]);
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 18, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Master_Arrive(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_Master_Arrive);
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 2;
|
|
|
|
params->clear();
|
|
|
|
strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
|
|
params->parameters[3] = param2.intParam;
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Master_Arrive(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
if (getCharacterParams(kCharacterMaster, 8)[1] || getCharacterParams(kCharacterMaster, 8)[2]) {
|
|
endDialog(kCharacterMaster);
|
|
|
|
if (getCharacterParams(kCharacterMaster, 8)[1]) {
|
|
send(kCharacterMaster, kCharacterClerk, 191350523, 0);
|
|
|
|
if (getCharacter(kCharacterCath).characterPosition.location == 2) {
|
|
if (cathOutHisWindow()) {
|
|
bumpCath(kCarGreenSleeping, 49, 255);
|
|
} else if (cathOutRebeccaWindow()) {
|
|
bumpCath(kCarRedSleeping, 49, 255);
|
|
} else if (getCharacter(kCharacterCath).characterPosition.car < kCarRedSleeping || getCharacter(kCharacterCath).characterPosition.car > kCarCoalTender) {
|
|
if (getCharacter(kCharacterCath).characterPosition.car && getCharacter(kCharacterCath).characterPosition.car <= kCarGreenSleeping) {
|
|
if (checkCathDir(kCarGreenSleeping, 98)) {
|
|
playDialog(kCharacterCath, "LIB015", -1, 0);
|
|
bumpCath(kCarGreenSleeping, 71, 255);
|
|
} else {
|
|
bumpCath(kCarGreenSleeping, 82, 255);
|
|
}
|
|
}
|
|
} else {
|
|
bumpCath(kCarRestaurant, 82, 255);
|
|
}
|
|
}
|
|
|
|
getCharacterParams(kCharacterMaster, 8)[1] = 0;
|
|
} else if (getCharacterParams(kCharacterMaster, 8)[2]) {
|
|
getCharacterParams(kCharacterMaster, 8)[2] = 0;
|
|
}
|
|
}
|
|
|
|
setDoor(26, kCharacterCath, 1, 0, 0);
|
|
setDoor(27, kCharacterCath, 1, 0, 0);
|
|
|
|
playDialog(kCharacterMaster, "ARRIVE", 8, 0);
|
|
_engine->getSoundManager()->endAmbient();
|
|
|
|
_globals[kGlobalTrainIsRunning] = 0;
|
|
|
|
getCharacterParams(kCharacterMaster, 8)[1] = 1;
|
|
getCharacterParams(kCharacterMaster, 8)[3] = getCharacterCurrentParams(kCharacterMaster)[3];
|
|
|
|
getCharacter(kCharacterMaster).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(
|
|
kCharacterMaster,
|
|
_functionsMaster[getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall]]
|
|
);
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 18, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Master_Depart(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_Master_Depart);
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 3;
|
|
|
|
params->clear();
|
|
|
|
strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Master_Depart(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
if (getCharacterParams(kCharacterMaster, 8)[1] || getCharacterParams(kCharacterMaster, 8)[2]) {
|
|
endDialog(kCharacterMaster);
|
|
|
|
if (getCharacterParams(kCharacterMaster, 8)[1]) {
|
|
send(kCharacterMaster, kCharacterClerk, 191350523, 0);
|
|
|
|
if (getCharacter(kCharacterCath).characterPosition.location == 2) {
|
|
if (cathOutHisWindow()) {
|
|
bumpCath(kCarGreenSleeping, 49, 255);
|
|
} else if (cathOutRebeccaWindow()) {
|
|
bumpCath(kCarRedSleeping, 49, 255);
|
|
} else if (getCharacter(kCharacterCath).characterPosition.car < kCarRedSleeping || getCharacter(kCharacterCath).characterPosition.car > kCarCoalTender) {
|
|
if (getCharacter(kCharacterCath).characterPosition.car && getCharacter(kCharacterCath).characterPosition.car <= kCarGreenSleeping) {
|
|
if (checkCathDir(kCarGreenSleeping, 98)) {
|
|
playDialog(kCharacterCath, "LIB015", -1, 0);
|
|
bumpCath(kCarGreenSleeping, 71, 255);
|
|
} else {
|
|
bumpCath(kCarGreenSleeping, 82, 255);
|
|
}
|
|
}
|
|
} else {
|
|
bumpCath(kCarRestaurant, 82, 255);
|
|
}
|
|
}
|
|
getCharacterParams(kCharacterMaster, 8)[1] = 0;
|
|
} else if (getCharacterParams(kCharacterMaster, 8)[2]) {
|
|
getCharacterParams(kCharacterMaster, 8)[2] = 0;
|
|
}
|
|
}
|
|
|
|
playDialog(kCharacterMaster, "DEPART", 8, 0);
|
|
_engine->getSoundManager()->endAmbient();
|
|
|
|
send(kCharacterMaster, kCharacterClerk, 203419131, 0);
|
|
|
|
setDoor(26, kCharacterCath, 1, 0, 9);
|
|
setDoor(27, kCharacterCath, 1, 0, 9);
|
|
|
|
_globals[kGlobalTrainIsRunning] = 1;
|
|
|
|
getCharacterParams(kCharacterMaster, 8)[2] = 1;
|
|
|
|
getCharacter(kCharacterMaster).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(
|
|
kCharacterMaster,
|
|
_functionsMaster[getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall]]
|
|
);
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 18, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Master_Birth(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_Master_Birth);
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 4;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Master_Birth(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
autoMessage(kCharacterMaster, 171843264, 0);
|
|
CONS_Master_StartPart1(0, 0, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Master_WalkTest(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_Master_WalkTest);
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 5;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Master_WalkTest(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
forceJump(kCharacterAbbot, &LogicManager::CONS_Abbot_DebugWalks);
|
|
forceJump(kCharacterAlexei, &LogicManager::CONS_Alexei_DebugWalks);
|
|
forceJump(kCharacterAlouan, &LogicManager::CONS_Alouan_DebugWalks);
|
|
forceJump(kCharacterAnna, &LogicManager::CONS_Anna_DebugWalks);
|
|
forceJump(kCharacterAugust, &LogicManager::CONS_August_DebugWalks);
|
|
forceJump(kCharacterCond1, &LogicManager::CONS_Cond1_DebugWalks);
|
|
forceJump(kCharacterCond2, &LogicManager::CONS_Cond2_DebugWalks);
|
|
forceJump(kCharacterFrancois, &LogicManager::CONS_Francois_DebugWalks);
|
|
forceJump(kCharacterHadija, &LogicManager::CONS_Hadija_DebugWalks);
|
|
forceJump(kCharacterIvo, &LogicManager::CONS_Ivo_DebugWalks);
|
|
forceJump(kCharacterKahina, &LogicManager::CONS_Kahina_DebugWalks);
|
|
forceJump(kCharacterKronos, &LogicManager::CONS_Kronos_DebugWalks);
|
|
forceJump(kCharacterMadame, &LogicManager::CONS_Madame_DebugWalks);
|
|
forceJump(kCharacterMahmud, &LogicManager::CONS_Mahmud_DebugWalks);
|
|
forceJump(kCharacterMax, &LogicManager::CONS_Max_DebugWalks);
|
|
forceJump(kCharacterMilos, &LogicManager::CONS_Milos_DebugWalks);
|
|
forceJump(kCharacterMonsieur, &LogicManager::CONS_Monsieur_DebugWalks);
|
|
forceJump(kCharacterPolice, &LogicManager::CONS_Police_DebugWalks);
|
|
forceJump(kCharacterRebecca, &LogicManager::CONS_Rebecca_DebugWalks);
|
|
forceJump(kCharacterSalko, &LogicManager::CONS_Salko_DebugWalks);
|
|
forceJump(kCharacterSophie, &LogicManager::CONS_Sophie_DebugWalks);
|
|
forceJump(kCharacterTatiana, &LogicManager::CONS_Tatiana_DebugWalks);
|
|
forceJump(kCharacterTrainM, &LogicManager::CONS_TrainM_DebugWalks);
|
|
forceJump(kCharacterVassili, &LogicManager::CONS_Vassili_DebugWalks);
|
|
forceJump(kCharacterVesna, &LogicManager::CONS_Vesna_DebugWalks);
|
|
forceJump(kCharacterYasmin, &LogicManager::CONS_Yasmin_DebugWalks);
|
|
|
|
getCharacter(kCharacterMaster).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(
|
|
kCharacterMaster,
|
|
_functionsMaster[getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall]]
|
|
);
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 18, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Master_FirstDream(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_Master_FirstDream);
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 6;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Master_FirstDream(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 2:
|
|
playDialog(kCharacterMaster, "MUS009", 16, 0);
|
|
break;
|
|
case 8:
|
|
if (!cathRunningDialog("LIB012"))
|
|
playDialog(kCharacterCath, "LIB012", -1, 0);
|
|
|
|
break;
|
|
case 12:
|
|
forceJump(kCharacterHeadWait, &LogicManager::CONS_HeadWait_LockUp);
|
|
forceJump(kCharacterWaiter1, &LogicManager::CONS_Waiter1_LockUp);
|
|
forceJump(kCharacterWaiter2, &LogicManager::CONS_Waiter2_LockUp);
|
|
forceJump(kCharacterCook, &LogicManager::CONS_Cook_LockUp);
|
|
forceJump(kCharacterCond1, &LogicManager::CONS_Cond1_Sitting);
|
|
forceJump(kCharacterCond2, &LogicManager::CONS_Cond2_Sitting);
|
|
forceJump(kCharacterTrainM, &LogicManager::CONS_TrainM_InOffice);
|
|
|
|
send(kCharacterMaster, kCharacterCond1, 201431954, 0);
|
|
send(kCharacterMaster, kCharacterCond2, 201431954, 0);
|
|
send(kCharacterMaster, kCharacterTrainM, 201431954, 0);
|
|
|
|
forceJump(kCharacterKronos, &LogicManager::CONS_Kronos_CathDone);
|
|
forceJump(kCharacterKahina, &LogicManager::CONS_Kahina_CathDone);
|
|
forceJump(kCharacterAnna, &LogicManager::CONS_Anna_Asleep);
|
|
forceJump(kCharacterAugust, &LogicManager::CONS_August_Asleep);
|
|
forceJump(kCharacterTatiana, &LogicManager::CONS_Tatiana_Asleep);
|
|
forceJump(kCharacterVassili, &LogicManager::CONS_Vassili_InBed2);
|
|
forceJump(kCharacterAlexei, &LogicManager::CONS_Alexei_Asleep);
|
|
forceJump(kCharacterMilos, &LogicManager::CONS_Milos_Asleep);
|
|
forceJump(kCharacterVesna, &LogicManager::CONS_Vesna_Asleep);
|
|
forceJump(kCharacterIvo, &LogicManager::CONS_Ivo_Asleep);
|
|
forceJump(kCharacterSalko, &LogicManager::CONS_Salko_Asleep);
|
|
forceJump(kCharacterFrancois, &LogicManager::CONS_Francois_Asleep);
|
|
forceJump(kCharacterMadame, &LogicManager::CONS_Madame_Asleep);
|
|
forceJump(kCharacterMonsieur, &LogicManager::CONS_Monsieur_Asleep);
|
|
forceJump(kCharacterRebecca, &LogicManager::CONS_Rebecca_Asleep);
|
|
forceJump(kCharacterSophie, &LogicManager::CONS_Sophie_Asleep);
|
|
forceJump(kCharacterMahmud, &LogicManager::CONS_Mahmud_Asleep);
|
|
forceJump(kCharacterYasmin, &LogicManager::CONS_Yasmin_Asleep);
|
|
forceJump(kCharacterHadija, &LogicManager::CONS_Hadija_Asleep);
|
|
forceJump(kCharacterHadija, &LogicManager::CONS_Alouan_Asleep); // Not a mistake!
|
|
|
|
if (getCharacterParams(kCharacterMaster, 8)[1] || getCharacterParams(kCharacterMaster, 8)[2]) {
|
|
endDialog(kCharacterMaster);
|
|
|
|
getCharacterParams(kCharacterMaster, 8)[1] = 0;
|
|
getCharacterParams(kCharacterMaster, 8)[2] = 0;
|
|
}
|
|
|
|
_engine->getSoundManager()->endAmbient();
|
|
|
|
if (dialogRunning("CON1505"))
|
|
fadeDialog("CON1505");
|
|
|
|
if (dialogRunning("AUG1057"))
|
|
fadeDialog("AUG1057");
|
|
|
|
if (dialogRunning("ZFX1005")) {
|
|
fadeDialog("ZFX1005");
|
|
} else if (dialogRunning("ZFX1006")) {
|
|
fadeDialog("ZFX1006");
|
|
} else if (dialogRunning("ZFX1007")) {
|
|
fadeDialog("ZFX1007");
|
|
} else if (dialogRunning("ZFX1007A")) {
|
|
fadeDialog("ZFX1007A");
|
|
} else if (dialogRunning("ZFX1007B")) {
|
|
fadeDialog("ZFX1007B");
|
|
}
|
|
|
|
playDialog(kCharacterCath, "MUS008", 16, 0);
|
|
|
|
_activeItem = 0;
|
|
fadeToBlack();
|
|
|
|
while (dialogRunning("MUS008")) {
|
|
_engine->getSoundManager()->soundThread();
|
|
_engine->waitForTimer(4);
|
|
}
|
|
|
|
_globals[kGlobalCathInSpecialState] = 1;
|
|
bumpCath(kCarLocomotive, 75, 255);
|
|
restoreIcons();
|
|
|
|
_gameTime = 1492200;
|
|
_globals[kGlobalPhaseOfTheNight] = 4;
|
|
_timeSpeed = 0;
|
|
|
|
setDoor(63, kCharacterMaster, 0, 0, 9);
|
|
send(kCharacterMaster, kCharacterClerk, 191350523, 0);
|
|
|
|
_globals[kGlobalTrainIsRunning] = 0;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 1;
|
|
|
|
MasterCall(&LogicManager::CONS_Master_SaveGame, 1, 0, 0, 0);
|
|
break;
|
|
case 9:
|
|
if (getCharacterCurrentParams(kCharacterMaster)[0]) {
|
|
endGraphics(kCharacterMaster);
|
|
|
|
fadeDialog(kCharacterMaster);
|
|
playDialog(kCharacterCath, "LIB014", -1, 0);
|
|
|
|
_engine->getSoundManager()->startAmbient();
|
|
getCharacterParams(kCharacterMaster, 8)[3] = 7;
|
|
_engine->getSoundManager()->startSteam(16);
|
|
|
|
playNIS(kEventCathDream);
|
|
|
|
_timeSpeed = 3;
|
|
_globals[kGlobalPhaseOfTheNight] = 1;
|
|
|
|
setDoor(63, kCharacterCath, 0, 10, 9);
|
|
|
|
_globals[kGlobalCathInSpecialState] = 0;
|
|
|
|
bumpCathTylerComp();
|
|
|
|
getCharacter(kCharacterMaster).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(
|
|
kCharacterMaster,
|
|
_functionsMaster[getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall]]
|
|
);
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 18, 0);
|
|
} else {
|
|
playDialog(kCharacterCath, "LIB014", -1, 0);
|
|
playDialog(kCharacterCath, "LIB015", 16, 15);
|
|
|
|
if (!whoRunningDialog(kCharacterMaster))
|
|
playDialog(kCharacterMaster, "MUS009", 16, 0);
|
|
|
|
bumpCath(kCarLocomotive, 38, 255);
|
|
|
|
setDoor(63, kCharacterMaster, 0, 10, 9);
|
|
getCharacterCurrentParams(kCharacterMaster)[0] = 1;
|
|
}
|
|
|
|
break;
|
|
case 225358684:
|
|
getCharacterCurrentParams(kCharacterMaster)[1]++;
|
|
|
|
if (getCharacterCurrentParams(kCharacterMaster)[1] >= 3) {
|
|
if (!cathRunningDialog("LIB031"))
|
|
playDialog(kCharacterCath, "LIB031", -1, 0);
|
|
|
|
if (getCharacterCurrentParams(kCharacterMaster)[1] == 3) {
|
|
getCharacter(kCharacterMaster).characterPosition.car = kCarLocomotive;
|
|
startCycOtis(kCharacterMaster, "JUGL");
|
|
}
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Master_StartPart1(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_Master_StartPart1);
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 7;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Master_StartPart1(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
_globals[kGlobalChapter] = 1;
|
|
|
|
_engine->getSoundManager()->startAmbient();
|
|
|
|
_gameTime = 1061100;
|
|
_timeSpeed = 0;
|
|
_globals[kGlobalTrainIsRunning] = 1;
|
|
_globals[kGlobalCathIcon] = 32;
|
|
_globals[kGlobalPhaseOfTheNight] = 1;
|
|
|
|
giveCathItem(kItemTelegram);
|
|
giveCathItem(kItemArticle);
|
|
|
|
dropItem(kItemScarf, 1);
|
|
dropItem(kItemParchemin, 1);
|
|
dropItem(kItemGreenJacket, 1);
|
|
dropItem(kItemCorpse, 1);
|
|
dropItem(kItemPassengerList, 1);
|
|
dropItem(kItem5, 1);
|
|
dropItem(kItem7, 1);
|
|
dropItem(kItem3, 1);
|
|
dropItem(kItemMatch, 1);
|
|
dropItem(kItem22, 1);
|
|
dropItem(kItemPaper, 1);
|
|
|
|
_globals[kGlobalCanPlayEggSuitcaseMusic] = 1;
|
|
|
|
setDoor(1, kCharacterCath, 0, 10, 9);
|
|
setDoor(9, kCharacterCath, 0, 255, 255);
|
|
|
|
getCharacterCurrentParams(kCharacterMaster)[0] = 1;
|
|
|
|
do {
|
|
setModel(getCharacterCurrentParams(kCharacterMaster)[0], 2);
|
|
getCharacterCurrentParams(kCharacterMaster)[0]++;
|
|
} while (getCharacterCurrentParams(kCharacterMaster)[0] <= 8);
|
|
|
|
getCharacterCurrentParams(kCharacterMaster)[0] = 32;
|
|
|
|
do {
|
|
setModel(getCharacterCurrentParams(kCharacterMaster)[0], 2);
|
|
getCharacterCurrentParams(kCharacterMaster)[0]++;
|
|
} while (getCharacterCurrentParams(kCharacterMaster)[0] <= 39);
|
|
|
|
setModel(25, 1);
|
|
setModel(23, 1);
|
|
setModel(98, 1);
|
|
setModel(55, 1);
|
|
|
|
setDoor(25, kCharacterCath, 0, 0, 1);
|
|
setDoor(23, kCharacterCath, 0, 0, 1);
|
|
setDoor(24, kCharacterCath, 0, 0, 1);
|
|
setDoor(28, kCharacterCath, 0, 0, 1);
|
|
setDoor(56, kCharacterCath, 0, 0, 1);
|
|
setDoor(54, kCharacterCath, 0, 0, 1);
|
|
setDoor(55, kCharacterCath, 0, 0, 1);
|
|
setDoor(59, kCharacterCath, 0, 0, 1);
|
|
setDoor(66, kCharacterCath, 0, 0, 1);
|
|
setDoor(64, kCharacterCath, 0, 0, 1);
|
|
setDoor(65, kCharacterCath, 0, 0, 1);
|
|
setDoor(69, kCharacterCath, 0, 0, 1);
|
|
setDoor(98, kCharacterCath, 0, 0, 1);
|
|
setDoor(26, kCharacterCath, 1, 0, 9);
|
|
setDoor(27, kCharacterCath, 1, 0, 9);
|
|
setDoor(101, kCharacterCath, 1, 10, 9);
|
|
|
|
CONS_Master_MovingNight(0, 0, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Master_MovingNight(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_Master_MovingNight);
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 8;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Master_MovingNight(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
if (_globals[kGlobalTrainIsRunning] && _gameTime < 1458000) {
|
|
bool skip = false;
|
|
|
|
if (!getCharacterCurrentParams(kCharacterMaster)[5]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[5] = _realTime + getCharacterCurrentParams(kCharacterMaster)[1];
|
|
if (getCharacterCurrentParams(kCharacterMaster)[5] == 0) {
|
|
skip = true;
|
|
}
|
|
}
|
|
if (skip || getCharacterCurrentParams(kCharacterMaster)[5] < _realTime) {
|
|
if (!skip) {
|
|
getCharacterCurrentParams(kCharacterMaster)[5] = 0x7FFFFFFF;
|
|
}
|
|
|
|
switch (rnd(5)) {
|
|
case 0:
|
|
playDialog(0, "ZFX1005", rnd(15) + 2, 0);
|
|
break;
|
|
case 1:
|
|
playDialog(0, "ZFX1006", rnd(15) + 2, 0);
|
|
break;
|
|
case 2:
|
|
playDialog(0, "ZFX1007", rnd(15) + 2, 0);
|
|
break;
|
|
case 3:
|
|
playDialog(0, "ZFX1007A", rnd(15) + 2, 0);
|
|
break;
|
|
case 4:
|
|
playDialog(0, "ZFX1007B", rnd(15) + 2, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
getCharacterCurrentParams(kCharacterMaster)[1] = 225 * (4 * rnd(5) + 20);
|
|
getCharacterCurrentParams(kCharacterMaster)[5] = 0;
|
|
}
|
|
}
|
|
|
|
if (_gameTime > 1039500 && !getCharacterCurrentParams(kCharacterMaster)[6]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[6] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 1;
|
|
MasterCall(&LogicManager::CONS_Master_SaveGame, 1, 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1147500 && !getCharacterCurrentParams(kCharacterMaster)[7]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[7] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 2;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Epernay", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1150200 && !getCharacterCurrentParams(kCharacterMaster)[8]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[8] = 1;
|
|
getCharacterCurrentParams(kCharacterMaster)[3] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 3;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Epernay", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (getCharacterCurrentParams(kCharacterMaster)[4] && !getCharacterParams(kCharacterMaster, 8)[1]) {
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 4;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Unschedu", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1170000 && !getCharacterCurrentParams(kCharacterMaster)[9]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[9] = 1;
|
|
_globals[kGlobalPhaseOfTheNight] = 2;
|
|
}
|
|
|
|
if (!getCharacterCurrentParams(kCharacterMaster)[0]) {
|
|
if (_gameTime > 1170000 && !getCharacterCurrentParams(kCharacterMaster)[10]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[10] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 5;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Chalons", 1, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1173600 && !getCharacterCurrentParams(kCharacterMaster)[11]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[11] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 6;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Chalons", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1228500 && !getCharacterCurrentParams(kCharacterMaster)[12]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[12] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 7;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "BarLeDuc", 2, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1231200 && !getCharacterCurrentParams(kCharacterMaster)[13]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[13] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 8;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "BarLeDuc", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1260000 && !getCharacterCurrentParams(kCharacterMaster)[14]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[14] = 1;
|
|
_timeSpeed = 1;
|
|
}
|
|
if (_gameTime > 1303200 && !getCharacterCurrentParams(kCharacterMaster)[15]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[15] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 9;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Nancy", 3, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1307700 && !getCharacterCurrentParams(kCharacterMaster)[16]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[16] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 10;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Nancy", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1335600 && !getCharacterCurrentParams(kCharacterMaster)[17]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[17] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 11;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Luneville", 4, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1338300 && !getCharacterCurrentParams(kCharacterMaster)[18]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[18] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 12;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Luneville", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1359900 && !getCharacterCurrentParams(kCharacterMaster)[19]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[19] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 13;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Avricourt", 5, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1363500 && !getCharacterCurrentParams(kCharacterMaster)[20]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[20] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 14;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Avricourt", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1367100 && !getCharacterCurrentParams(kCharacterMaster)[21]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[21] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 15;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "DeutschA", 6, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1370700 && !getCharacterCurrentParams(kCharacterMaster)[22]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[22] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 16;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "DeutschA", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1490400 && !getCharacterCurrentParams(kCharacterMaster)[23]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[23] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 17;
|
|
MasterCall(&LogicManager::CONS_Master_SaveGame, 1, 0, 0, 0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (_gameTime > 1493100 && !getCharacterCurrentParams(kCharacterMaster)[24]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[24] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 19;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Strasbou", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1539000 && !getCharacterCurrentParams(kCharacterMaster)[25]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[25] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 20;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "BadenOos", 8, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1541700 && !getCharacterCurrentParams(kCharacterMaster)[26]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[26] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 21;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "BadenOos", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1674000 && !getCharacterCurrentParams(kCharacterMaster)[27]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[27] = 1;
|
|
CONS_Master_SecondSleep(0, 0, 0, 0);
|
|
}
|
|
|
|
break;
|
|
case 2:
|
|
if (getCharacterParams(kCharacterMaster, 8)[1]) {
|
|
send(kCharacterMaster, kCharacterClerk, 191350523, 0);
|
|
if (getCharacter(kCharacterCath).characterPosition.location == 2) {
|
|
if (cathOutHisWindow()) {
|
|
bumpCath(kCarGreenSleeping, 49, 255);
|
|
_engine->getSoundManager()->startAmbient();
|
|
_engine->getSoundManager()->startSteam(getCharacterParams(kCharacterMaster, 8)[3]);
|
|
getCharacterParams(kCharacterMaster, 8)[1] = 0;
|
|
break;
|
|
}
|
|
|
|
if (cathOutRebeccaWindow()) {
|
|
bumpCath(kCarRedSleeping, 49, 255);
|
|
} else {
|
|
if (getCharacter(kCharacterCath).characterPosition.car < kCarRedSleeping || getCharacter(kCharacterCath).characterPosition.car > kCarCoalTender) {
|
|
if (!getCharacter(kCharacterCath).characterPosition.car || getCharacter(kCharacterCath).characterPosition.car > kCarGreenSleeping) {
|
|
_engine->getSoundManager()->startAmbient();
|
|
_engine->getSoundManager()->startSteam(getCharacterParams(kCharacterMaster, 8)[3]);
|
|
getCharacterParams(kCharacterMaster, 8)[1] = 0;
|
|
break;
|
|
}
|
|
|
|
if (checkCathDir(kCarGreenSleeping, 98)) {
|
|
playDialog(0, "LIB015", -1, 0);
|
|
bumpCath(kCarGreenSleeping, 71, 255);
|
|
} else {
|
|
bumpCath(kCarGreenSleeping, 82, 255);
|
|
}
|
|
|
|
_engine->getSoundManager()->startAmbient();
|
|
_engine->getSoundManager()->startSteam(getCharacterParams(kCharacterMaster, 8)[3]);
|
|
getCharacterParams(kCharacterMaster, 8)[1] = 0;
|
|
break;
|
|
}
|
|
|
|
bumpCath(kCarRestaurant, 82, 255);
|
|
}
|
|
}
|
|
|
|
_engine->getSoundManager()->startAmbient();
|
|
_engine->getSoundManager()->startSteam(getCharacterParams(kCharacterMaster, 8)[3]);
|
|
getCharacterParams(kCharacterMaster, 8)[1] = 0;
|
|
break;
|
|
}
|
|
|
|
if (getCharacterParams(kCharacterMaster, 8)[2]) {
|
|
_engine->getSoundManager()->startAmbient();
|
|
getCharacterParams(kCharacterMaster, 8)[2] = 0;
|
|
if (getCharacterCurrentParams(kCharacterMaster)[3]) {
|
|
if (_globals[kGlobalFrancoisHasSeenCorpseThrown])
|
|
send(kCharacterMaster, kCharacterTrainM, 168187490, 0);
|
|
else
|
|
send(kCharacterMaster, kCharacterCond1, 224122407, 0);
|
|
|
|
getCharacterCurrentParams(kCharacterMaster)[3] = 0;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 190346110:
|
|
_globals[kGlobalPhaseOfTheNight] = 3;
|
|
if (_gameTime >= 1494000) {
|
|
CONS_Master_SecondSleep(0, 0, 0, 0);
|
|
} else {
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 23;
|
|
MasterCall(&LogicManager::CONS_Master_FirstDream, 0, 0, 0, 0);
|
|
}
|
|
|
|
break;
|
|
case 169629818:
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 22;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Unschedu", 16, 0, 0);
|
|
break;
|
|
case 12:
|
|
getCharacterCurrentParams(kCharacterMaster)[1] = 225 * (4 * rnd(5) + 20);
|
|
break;
|
|
case 17:
|
|
if (!getCharacterCurrentParams(kCharacterMaster)[2] && checkCathDir(kCarGreenSleeping, 1)) {
|
|
_gameTime = 1062000;
|
|
_timeSpeed = 3;
|
|
getCharacterCurrentParams(kCharacterMaster)[2] = 1;
|
|
}
|
|
break;
|
|
case 18:
|
|
switch (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8]) {
|
|
case 1:
|
|
if (_gameTime > 1147500 && !getCharacterCurrentParams(kCharacterMaster)[7]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[7] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 2;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Epernay", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 2:
|
|
if (_gameTime > 1150200 && !getCharacterCurrentParams(kCharacterMaster)[8]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[8] = 1;
|
|
getCharacterCurrentParams(kCharacterMaster)[3] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 3;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Epernay", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 3:
|
|
if (getCharacterCurrentParams(kCharacterMaster)[4] && !getCharacterParams(kCharacterMaster, 8)[1]) {
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 4;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Unschedu", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 4:
|
|
if (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] == 4) {
|
|
getCharacterCurrentParams(kCharacterMaster)[4] = 0;
|
|
}
|
|
|
|
if (_gameTime > 1170000 && !getCharacterCurrentParams(kCharacterMaster)[9]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[9] = 1;
|
|
_globals[kGlobalPhaseOfTheNight] = 2;
|
|
}
|
|
|
|
if (!getCharacterCurrentParams(kCharacterMaster)[0]) {
|
|
if (_gameTime > 1170000 && !getCharacterCurrentParams(kCharacterMaster)[10]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[10] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 5;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Chalons", 1, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1173600 && !getCharacterCurrentParams(kCharacterMaster)[11]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[11] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 6;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Chalons", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1228500 && !getCharacterCurrentParams(kCharacterMaster)[12]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[12] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 7;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "BarLeDuc", 2, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1231200 && !getCharacterCurrentParams(kCharacterMaster)[13]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[13] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 8;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "BarLeDuc", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1260000 && !getCharacterCurrentParams(kCharacterMaster)[14]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[14] = 1;
|
|
_timeSpeed = 1;
|
|
}
|
|
if (_gameTime > 1303200 && !getCharacterCurrentParams(kCharacterMaster)[15]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[15] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 9;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Nancy", 3, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1307700 && !getCharacterCurrentParams(kCharacterMaster)[16]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[16] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 10;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Nancy", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1335600 && !getCharacterCurrentParams(kCharacterMaster)[17]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[17] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 11;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Luneville", 4, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1338300 && !getCharacterCurrentParams(kCharacterMaster)[18]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[18] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 12;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Luneville", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1359900 && !getCharacterCurrentParams(kCharacterMaster)[19]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[19] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 13;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Avricourt", 5, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1363500 && !getCharacterCurrentParams(kCharacterMaster)[20]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[20] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 14;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Avricourt", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1367100 && !getCharacterCurrentParams(kCharacterMaster)[21]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[21] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 15;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "DeutschA", 6, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1370700 && !getCharacterCurrentParams(kCharacterMaster)[22]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[22] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 16;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "DeutschA", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1490400 && !getCharacterCurrentParams(kCharacterMaster)[23]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[23] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 17;
|
|
MasterCall(&LogicManager::CONS_Master_SaveGame, 1, 0, 0, 0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (_gameTime > 1493100 && !getCharacterCurrentParams(kCharacterMaster)[24]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[24] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 19;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Strasbou", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1539000 && !getCharacterCurrentParams(kCharacterMaster)[25]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[25] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 20;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "BadenOos", 8, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1541700 && !getCharacterCurrentParams(kCharacterMaster)[26]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[26] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 21;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "BadenOos", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1674000 && !getCharacterCurrentParams(kCharacterMaster)[27]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[27] = 1;
|
|
CONS_Master_SecondSleep(0, 0, 0, 0);
|
|
}
|
|
|
|
break;
|
|
case 5:
|
|
if (_gameTime > 1173600 && !getCharacterCurrentParams(kCharacterMaster)[11]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[11] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 6;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Chalons", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 6:
|
|
if (_gameTime > 1228500 && !getCharacterCurrentParams(kCharacterMaster)[12]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[12] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 7;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "BarLeDuc", 2, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 7:
|
|
if (_gameTime > 1231200 && !getCharacterCurrentParams(kCharacterMaster)[13]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[13] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 8;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "BarLeDuc", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 8:
|
|
if (_gameTime > 1260000 && !getCharacterCurrentParams(kCharacterMaster)[14]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[14] = 1;
|
|
_timeSpeed = 1;
|
|
}
|
|
|
|
if (_gameTime > 1303200 && !getCharacterCurrentParams(kCharacterMaster)[15]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[15] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 9;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Nancy", 3, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 9:
|
|
if (_gameTime > 1307700 && !getCharacterCurrentParams(kCharacterMaster)[16]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[16] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 10;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Nancy", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 10:
|
|
if (_gameTime > 1335600 && !getCharacterCurrentParams(kCharacterMaster)[17]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[17] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 11;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Luneville", 4, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 11:
|
|
if (_gameTime > 1338300 && !getCharacterCurrentParams(kCharacterMaster)[18]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[18] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 12;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Luneville", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 12:
|
|
if (_gameTime > 1359900 && !getCharacterCurrentParams(kCharacterMaster)[19]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[19] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 13;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Avricourt", 5, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 13:
|
|
if (_gameTime > 1363500 && !getCharacterCurrentParams(kCharacterMaster)[20]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[20] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 14;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Avricourt", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 14:
|
|
if (_gameTime > 1367100 && !getCharacterCurrentParams(kCharacterMaster)[21]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[21] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 15;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "DeutschA", 6, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 15:
|
|
if (_gameTime > 1370700 && !getCharacterCurrentParams(kCharacterMaster)[22]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[22] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 16;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "DeutschA", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 16:
|
|
if (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] == 16) {
|
|
_gameTime = 1424700;
|
|
}
|
|
|
|
if (_gameTime > 1490400 && !getCharacterCurrentParams(kCharacterMaster)[23]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[23] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 17;
|
|
MasterCall(&LogicManager::CONS_Master_SaveGame, 1, 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 17:
|
|
if (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] == 17) {
|
|
_globals[kGlobalPhaseOfTheNight] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 18;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Strasbou", 7, 0, 0);
|
|
}
|
|
|
|
break;
|
|
case 18:
|
|
if (_gameTime > 1493100 && !getCharacterCurrentParams(kCharacterMaster)[24]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[24] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 19;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Strasbou", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 19:
|
|
if (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] == 19) {
|
|
_timeSpeed = 1;
|
|
}
|
|
|
|
if (_gameTime > 1539000 && !getCharacterCurrentParams(kCharacterMaster)[25]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[25] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 20;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "BadenOos", 8, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 20:
|
|
if (_gameTime > 1541700 && !getCharacterCurrentParams(kCharacterMaster)[26]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[26] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 21;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "BadenOos", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 21:
|
|
if (_gameTime > 1674000 && !getCharacterCurrentParams(kCharacterMaster)[27]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[27] = 1;
|
|
CONS_Master_SecondSleep(0, 0, 0, 0);
|
|
}
|
|
|
|
break;
|
|
case 22:
|
|
getCharacterCurrentParams(kCharacterMaster)[4] = 1;
|
|
break;
|
|
case 23:
|
|
getCharacterCurrentParams(kCharacterMaster)[0] = 1;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Master_SecondSleep(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_Master_SecondSleep);
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 9;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Master_SecondSleep(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
if (getCharacterParams(kCharacterMaster, 8)[1] || getCharacterParams(kCharacterMaster, 8)[2]) {
|
|
endDialog(kCharacterMaster);
|
|
getCharacterParams(kCharacterMaster, 8)[1] = 0;
|
|
getCharacterParams(kCharacterMaster, 8)[2] = 0;
|
|
}
|
|
|
|
playDialog(kCharacterCath, "MUS008", 16, 0);
|
|
|
|
_activeItem = 0;
|
|
fadeToBlack();
|
|
|
|
while (dialogRunning("MUS008")) {
|
|
_engine->getSoundManager()->soundThread();
|
|
_engine->waitForTimer(4);
|
|
}
|
|
|
|
CONS_Master_StartPart2(0, 0, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Master_StartPart2(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_Master_StartPart2);
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 10;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Master_StartPart2(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
if (_globals[kGlobalChapter] != 2) {
|
|
_globals[kGlobalChapter] = 2;
|
|
makeAllJump(2);
|
|
}
|
|
|
|
_gameTime = 1750500;
|
|
_timeSpeed = 5;
|
|
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 1;
|
|
|
|
MasterCall(&LogicManager::CONS_Master_SaveGame, 1, 0, 0, 0);
|
|
break;
|
|
case 18:
|
|
if (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] == 1) {
|
|
if (_engine->getArchiveManager()->lockCD(2)) {
|
|
loadTrain(2);
|
|
CONS_Master_InitPart2(0, 0, 0, 0);
|
|
} else {
|
|
_engine->getMenu()->doEgg(false, 0, 0);
|
|
}
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Master_InitPart2(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_Master_InitPart2);
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 11;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Master_InitPart2(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
_globals[kGlobalTrainIsRunning] = 1;
|
|
setDoor(26, kCharacterCath, 1, 0, 9);
|
|
setDoor(27, kCharacterCath, 1, 0, 9);
|
|
_globals[kGlobalPhaseOfTheNight] = 1;
|
|
giveCathItem(kItemGreenJacket);
|
|
|
|
_items[kItemCorpse].floating = 0;
|
|
_items[kItemCorpse].haveIt = 0;
|
|
_globals[kGlobalJacket] = 2;
|
|
_globals[kGlobalCathIcon] = 34;
|
|
_globals[kGlobalCorpseMovedFromFloor] = 1;
|
|
_globals[kGlobalFoundCorpse] = 1;
|
|
dropItem(kItemBeetle, 3);
|
|
dropItem(kItem3, 1);
|
|
|
|
getCharacterCurrentParams(kCharacterMaster)[0] = 1;
|
|
do {
|
|
setModel(getCharacterCurrentParams(kCharacterMaster)[0], 2);
|
|
getCharacterCurrentParams(kCharacterMaster)[0]++;
|
|
} while (getCharacterCurrentParams(kCharacterMaster)[0] <= 8);
|
|
|
|
getCharacterCurrentParams(kCharacterMaster)[0] = 33;
|
|
do {
|
|
setModel(getCharacterCurrentParams(kCharacterMaster)[0], 2);
|
|
getCharacterCurrentParams(kCharacterMaster)[0]++;
|
|
} while (getCharacterCurrentParams(kCharacterMaster)[0] <= 39);
|
|
|
|
send(kCharacterMaster, kCharacterTableA, 103798704, 0);
|
|
send(kCharacterMaster, kCharacterTableB, 103798704, 0);
|
|
send(kCharacterMaster, kCharacterTableC, 103798704, 0);
|
|
send(kCharacterMaster, kCharacterTableD, 103798704, 0);
|
|
send(kCharacterMaster, kCharacterTableE, 103798704, 0);
|
|
|
|
setDoor(1, kCharacterCath, 0, 10, 9);
|
|
setDoor(9, kCharacterCath, 0, 255, 255);
|
|
|
|
if (getCharacterParams(kCharacterMaster, 8)[1] || getCharacterParams(kCharacterMaster, 8)[2]) {
|
|
endDialog(kCharacterMaster);
|
|
getCharacterParams(kCharacterMaster, 8)[1] = 0;
|
|
getCharacterParams(kCharacterMaster, 8)[2] = 0;
|
|
}
|
|
|
|
playNIS(kEventTrainPassing);
|
|
|
|
if (cathHasItem(kItemScarf)) {
|
|
bumpCathTylerComp();
|
|
} else {
|
|
bumpCath(kCarGreenSleeping, 79, 255);
|
|
}
|
|
|
|
CONS_Master_MovingDay(0, 0, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Master_MovingDay(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_Master_MovingDay);
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 12;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Master_MovingDay(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
if (_globals[kGlobalTrainIsRunning]) {
|
|
if (getCharacterCurrentParams(kCharacterMaster)[1] ||
|
|
(getCharacterCurrentParams(kCharacterMaster)[1] = _realTime + getCharacterCurrentParams(kCharacterMaster)[0],
|
|
_realTime + getCharacterCurrentParams(kCharacterMaster)[0] != 0)) {
|
|
if (getCharacterCurrentParams(kCharacterMaster)[1] >= _realTime)
|
|
break;
|
|
|
|
getCharacterCurrentParams(kCharacterMaster)[1] = 0x7FFFFFFF;
|
|
}
|
|
|
|
switch (rnd(15)) {
|
|
case 0:
|
|
playDialog(kCharacterCath, "ZFX1005", rnd(15) + 2, 0);
|
|
break;
|
|
case 1:
|
|
playDialog(kCharacterCath, "ZFX1006", rnd(15) + 2, 0);
|
|
break;
|
|
case 2:
|
|
playDialog(kCharacterCath, "ZFX1007", rnd(15) + 2, 0);
|
|
break;
|
|
case 3:
|
|
playDialog(kCharacterCath, "ZFX1007A", rnd(15) + 2, 0);
|
|
break;
|
|
case 4:
|
|
playDialog(kCharacterCath, "ZFX1007B", rnd(15) + 2, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
getCharacterCurrentParams(kCharacterMaster)[0] = 225 * (4 * rnd(5) + 20);
|
|
getCharacterCurrentParams(kCharacterMaster)[1] = 0;
|
|
}
|
|
|
|
break;
|
|
case 12:
|
|
getCharacterCurrentParams(kCharacterMaster)[0] = 225 * (4 * rnd(5) + 20);
|
|
break;
|
|
case 139122728:
|
|
CONS_Master_StartPart3(0, 0, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Master_StartPart3(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_Master_StartPart3);
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 13;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Master_StartPart3(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
if (_globals[kGlobalChapter] != 3) {
|
|
_globals[kGlobalChapter] = 3;
|
|
makeAllJump(3);
|
|
}
|
|
|
|
_gameTime = 1944000;
|
|
_timeSpeed = 5;
|
|
|
|
CONS_Master_InitPart3(0, 0, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Master_InitPart3(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_Master_InitPart3);
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 14;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Master_InitPart3(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
send(kCharacterMaster, kCharacterTableA, 103798704, 0);
|
|
send(kCharacterMaster, kCharacterTableB, 103798704, 0);
|
|
send(kCharacterMaster, kCharacterTableC, 103798704, 0);
|
|
send(kCharacterMaster, kCharacterTableD, 103798704, 0);
|
|
send(kCharacterMaster, kCharacterTableE, 103798704, 0);
|
|
send(kCharacterMaster, kCharacterTableF, 103798704, 0);
|
|
|
|
_globals[kGlobalTrainIsRunning] = 1;
|
|
|
|
setDoor(26, kCharacterCath, 1, 0, 9);
|
|
setDoor(27, kCharacterCath, 1, 0, 9);
|
|
dropItem(kItemBriefcase, 1);
|
|
dropItem(kItem3, 1);
|
|
setModel(1, 2);
|
|
setDoor(107, kCharacterCath, 3, 255, 255);
|
|
|
|
if (getCharacterParams(kCharacterMaster, 8)[1] || getCharacterParams(kCharacterMaster, 8)[2]) {
|
|
endDialog(kCharacterMaster);
|
|
getCharacterParams(kCharacterMaster, 8)[1] = 0;
|
|
getCharacterParams(kCharacterMaster, 8)[2] = 0;
|
|
}
|
|
|
|
fadeToBlack();
|
|
bumpCath(kCarRestaurant, 60, 255);
|
|
restoreIcons();
|
|
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 1;
|
|
|
|
MasterCall(&LogicManager::CONS_Master_SaveGame, 1, 0, 0, 0);
|
|
break;
|
|
case 18:
|
|
if (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] == 1) {
|
|
CONS_Master_MovingAfternoon(0, 0, 0, 0);
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Master_MovingAfternoon(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_Master_MovingAfternoon);
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 15;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Master_MovingAfternoon(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
{
|
|
if (_globals[kGlobalTrainIsRunning]) {
|
|
bool skip1 = false;
|
|
|
|
if (!getCharacterCurrentParams(kCharacterMaster)[3]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[3] = _realTime + getCharacterCurrentParams(kCharacterMaster)[0];
|
|
if (getCharacterCurrentParams(kCharacterMaster)[3] == 0) {
|
|
skip1 = true;
|
|
}
|
|
}
|
|
|
|
if (skip1 || getCharacterCurrentParams(kCharacterMaster)[3] < _realTime) {
|
|
if (!skip1) {
|
|
getCharacterCurrentParams(kCharacterMaster)[3] = 0x7FFFFFFF;
|
|
}
|
|
|
|
switch (rnd(5)) {
|
|
case 0:
|
|
playDialog(0, "ZFX1005", rnd(15) + 2, 0);
|
|
break;
|
|
case 1:
|
|
playDialog(0, "ZFX1006", rnd(15) + 2, 0);
|
|
break;
|
|
case 2:
|
|
playDialog(0, "ZFX1007", rnd(15) + 2, 0);
|
|
break;
|
|
case 3:
|
|
playDialog(0, "ZFX1007A", rnd(15) + 2, 0);
|
|
break;
|
|
case 4:
|
|
playDialog(0, "ZFX1007B", rnd(15) + 2, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
getCharacterCurrentParams(kCharacterMaster)[0] = 225 * (4 * rnd(5) + 20);
|
|
getCharacterCurrentParams(kCharacterMaster)[3] = 0;
|
|
}
|
|
}
|
|
|
|
bool skip2 = false;
|
|
|
|
if (!getCharacterCurrentParams(kCharacterMaster)[4]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[4] = _realTime + getCharacterCurrentParams(kCharacterMaster)[1];
|
|
if (getCharacterCurrentParams(kCharacterMaster)[4] == 0) {
|
|
skip2 = true;
|
|
}
|
|
}
|
|
|
|
if (skip2 || getCharacterCurrentParams(kCharacterMaster)[4] < _realTime) {
|
|
if (!skip2) {
|
|
getCharacterCurrentParams(kCharacterMaster)[4] = 0x7FFFFFFF;
|
|
}
|
|
|
|
switch (rnd(2)) {
|
|
case 0:
|
|
playDialog(0, "ZFX1008", rnd(15) + 2, 0);
|
|
break;
|
|
case 1:
|
|
default:
|
|
playDialog(0, "ZFX1009", rnd(15) + 2, 0);
|
|
break;
|
|
}
|
|
|
|
getCharacterCurrentParams(kCharacterMaster)[1] = 225 * (4 * rnd(6) + 8);
|
|
getCharacterCurrentParams(kCharacterMaster)[4] = 0;
|
|
}
|
|
|
|
if (_gameTime > 1982700 && !getCharacterCurrentParams(kCharacterMaster)[5]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[5] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 1;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Salzburg", 9, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1989900 && !getCharacterCurrentParams(kCharacterMaster)[6]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[6] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 2;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Salzburg", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 2047500 && !getCharacterCurrentParams(kCharacterMaster)[7]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[7] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 3;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Attnang", 10, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 2052900 && !getCharacterCurrentParams(kCharacterMaster)[8]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[8] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 4;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Attnang", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 2073600 && !getCharacterCurrentParams(kCharacterMaster)[9]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[9] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 5;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Wels", 11, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 2079900 && !getCharacterCurrentParams(kCharacterMaster)[10]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[10] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 6;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Wels", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 2099700 && !getCharacterCurrentParams(kCharacterMaster)[11]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[11] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 7;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Linz", 12, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 2105100 && !getCharacterCurrentParams(kCharacterMaster)[12]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[12] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 8;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Linz", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 2187000 && !getCharacterCurrentParams(kCharacterMaster)[13]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[13] = 1;
|
|
_timeSpeed = 5;
|
|
}
|
|
|
|
if (_gameTime > 2268000 && !getCharacterCurrentParams(kCharacterMaster)[14]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[14] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 9;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Vienna", 13, 0, 0);
|
|
}
|
|
|
|
break;
|
|
}
|
|
case 2:
|
|
if (getCharacterParams(kCharacterMaster, 8)[1]) {
|
|
send(kCharacterMaster, kCharacterClerk, 191350523, 0);
|
|
if (getCharacter(kCharacterCath).characterPosition.location == 2) {
|
|
if (cathOutHisWindow()) {
|
|
bumpCath(kCarGreenSleeping, 49, 255);
|
|
} else {
|
|
if (cathOutRebeccaWindow()) {
|
|
bumpCath(kCarRedSleeping, 49, 255);
|
|
_engine->getSoundManager()->startAmbient();
|
|
_engine->getSoundManager()->startSteam(getCharacterParams(kCharacterMaster, 8)[3]);
|
|
getCharacterParams(kCharacterMaster, 8)[1] = 0;
|
|
|
|
if (getCharacterCurrentParams(kCharacterMaster)[2])
|
|
CONS_Master_EndVienna(0, 0, 0, 0);
|
|
} else if (getCharacter(kCharacterCath).characterPosition.car >= 4 && getCharacter(kCharacterCath).characterPosition.car <= 7) {
|
|
bumpCath(kCarRestaurant, 82, 255);
|
|
_engine->getSoundManager()->startAmbient();
|
|
_engine->getSoundManager()->startSteam(getCharacterParams(kCharacterMaster, 8)[3]);
|
|
getCharacterParams(kCharacterMaster, 8)[1] = 0;
|
|
|
|
if (getCharacterCurrentParams(kCharacterMaster)[2])
|
|
CONS_Master_EndVienna(0, 0, 0, 0);
|
|
} else if (!getCharacter(kCharacterCath).characterPosition.car || getCharacter(kCharacterCath).characterPosition.car > 3) {
|
|
_engine->getSoundManager()->startAmbient();
|
|
_engine->getSoundManager()->startSteam(getCharacterParams(kCharacterMaster, 8)[3]);
|
|
getCharacterParams(kCharacterMaster, 8)[1] = 0;
|
|
|
|
if (getCharacterCurrentParams(kCharacterMaster)[2])
|
|
CONS_Master_EndVienna(0, 0, 0, 0);
|
|
} else {
|
|
if (checkCathDir(kCarGreenSleeping, 98)) {
|
|
playDialog(0, "LIB015", -1, 0);
|
|
bumpCath(kCarGreenSleeping, 71, 255);
|
|
} else {
|
|
bumpCath(kCarGreenSleeping, 82, 255);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
_engine->getSoundManager()->startAmbient();
|
|
_engine->getSoundManager()->startSteam(getCharacterParams(kCharacterMaster, 8)[3]);
|
|
getCharacterParams(kCharacterMaster, 8)[1] = 0;
|
|
|
|
if (getCharacterCurrentParams(kCharacterMaster)[2])
|
|
CONS_Master_EndVienna(0, 0, 0, 0);
|
|
} else if (getCharacterParams(kCharacterMaster, 8)[2]) {
|
|
_engine->getSoundManager()->startAmbient();
|
|
getCharacterParams(kCharacterMaster, 8)[2] = 0;
|
|
}
|
|
|
|
break;
|
|
case 12:
|
|
getCharacterCurrentParams(kCharacterMaster)[0] = 225 * (4 * rnd(5) + 20);
|
|
getCharacterCurrentParams(kCharacterMaster)[1] = 225 * (4 * rnd(6) + 8);
|
|
break;
|
|
case 18:
|
|
switch (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8]) {
|
|
case 1:
|
|
if (_gameTime > 1989900 && !getCharacterCurrentParams(kCharacterMaster)[6]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[6] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 2;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Salzburg", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 2:
|
|
if (_gameTime > 2047500 && !getCharacterCurrentParams(kCharacterMaster)[7]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[7] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 3;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Attnang", 10, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 3:
|
|
if (_gameTime > 2052900 && !getCharacterCurrentParams(kCharacterMaster)[8]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[8] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 4;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Attnang", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 4:
|
|
if (_gameTime > 2073600 && !getCharacterCurrentParams(kCharacterMaster)[9]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[9] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 5;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Wels", 11, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 5:
|
|
if (_gameTime > 2079900 && !getCharacterCurrentParams(kCharacterMaster)[10]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[10] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 6;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Wels", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 6:
|
|
if (_gameTime > 2099700 && !getCharacterCurrentParams(kCharacterMaster)[11]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[11] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 7;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Linz", 12, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 7:
|
|
if (_gameTime > 2105100 && !getCharacterCurrentParams(kCharacterMaster)[12]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[12] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 8;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Linz", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 8:
|
|
if (_gameTime > 2187000 && !getCharacterCurrentParams(kCharacterMaster)[13]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[13] = 1;
|
|
_timeSpeed = 5;
|
|
}
|
|
|
|
if (_gameTime > 2268000 && !getCharacterCurrentParams(kCharacterMaster)[14]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[14] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 9;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Vienna", 13, 0, 0);
|
|
}
|
|
|
|
break;
|
|
case 9:
|
|
getCharacterCurrentParams(kCharacterMaster)[2] = 1;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Master_EndVienna(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_Master_EndVienna);
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 16;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Master_EndVienna(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
getCharacter(kCharacterCath).characterPosition.car = kCarLocomotive;
|
|
if (_doneNIS[kEventAugustBringBriefcase]) {
|
|
if (_items[kItemFirebird].floating == 5) {
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 2;
|
|
MasterCall(&LogicManager::CONS_Master_SaveGame, 2, kEventViennaKronosFirebird, 0, 0);
|
|
} else if (getCharacterParams(kCharacterMaster, 8)[0]) {
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 3;
|
|
MasterCall(&LogicManager::CONS_Master_SaveGame, 2, kEventVergesAnnaDead, 0, 0);
|
|
} else {
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 4;
|
|
MasterCall(&LogicManager::CONS_Master_SaveGame, 2, kEventViennaContinueGame, 0, 0);
|
|
}
|
|
} else {
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 1;
|
|
MasterCall(&LogicManager::CONS_Master_SaveGame, 2, kEventViennaAugustUnloadGuns, 0, 0);
|
|
}
|
|
|
|
break;
|
|
case 18:
|
|
switch (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8]) {
|
|
case 1:
|
|
playNIS(kEventViennaAugustUnloadGuns);
|
|
|
|
if (_doneNIS[kEventConcertLeaveWithBriefcase]) {
|
|
endGame(1, 2187000, 0, true);
|
|
} else {
|
|
if (!_doneNIS[kEventCathJumpDownCeiling]) {
|
|
endGame(1, 2155500, 0, true);
|
|
} else {
|
|
endGame(2, 253, 0, true);
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 2:
|
|
playNIS(kEventViennaKronosFirebird);
|
|
|
|
if (_doneNIS[kEventKronosBringEggCeiling]) {
|
|
endGame(3, 58, 60, true);
|
|
} else if (_doneNIS[kEventKronosBringEgg]) {
|
|
endGame(1, 2155500, 60, true);
|
|
} else {
|
|
if (_globals[kGlobalRegisteredTimeAtWhichCathGaveFirebirdToKronos]) {
|
|
if (_doneNIS[kEventKronosReturnBriefcase]) {
|
|
endGame(1, 61, 61, true);
|
|
return;
|
|
} else {
|
|
endGame(1, 2155500, 59, true);
|
|
}
|
|
} else {
|
|
if (_doneNIS[kEventKronosReturnBriefcase]) {
|
|
endGame(2, 61, 59, true);
|
|
return;
|
|
} else {
|
|
endGame(1, 2155500, 59, true);
|
|
}
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 3:
|
|
playNIS(kEventVergesAnnaDead);
|
|
endGame(1, 2250000, 58, true);
|
|
break;
|
|
case 4:
|
|
playNIS(kEventViennaContinueGame);
|
|
CONS_Master_StartPart4(0, 0, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Master_StartPart4(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_Master_StartPart4);
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 17;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Master_StartPart4(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
if (_globals[kGlobalChapter] != 4) {
|
|
_globals[kGlobalChapter] = 4;
|
|
makeAllJump(4);
|
|
}
|
|
|
|
_gameTime = 2353500;
|
|
_timeSpeed = 5;
|
|
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 1;
|
|
|
|
MasterCall(&LogicManager::CONS_Master_SaveGame, 1, 0, 0, 0);
|
|
break;
|
|
case 18:
|
|
if (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] == 1) {
|
|
if (_engine->getArchiveManager()->lockCD(3)) {
|
|
loadTrain(3);
|
|
CONS_Master_InitPart4(0, 0, 0, 0);
|
|
} else {
|
|
_engine->getMenu()->doEgg(false, 0, 0);
|
|
}
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Master_InitPart4(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_Master_InitPart4);
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 18;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Master_InitPart4(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
_engine->getSoundManager()->endAmbient();
|
|
_engine->getSoundManager()->startAmbient();
|
|
|
|
_globals[kGlobalTrainIsRunning] = 1;
|
|
|
|
setDoor(26, kCharacterCath, 1, 0, 9);
|
|
setDoor(27, kCharacterCath, 1, 0, 9);
|
|
|
|
send(kCharacterMaster, kCharacterClerk, 203419131, 0);
|
|
send(kCharacterMaster, kCharacterTableA, 103798704, 0);
|
|
send(kCharacterMaster, kCharacterTableB, 103798704, 0);
|
|
send(kCharacterMaster, kCharacterTableC, 103798704, 0);
|
|
send(kCharacterMaster, kCharacterTableD, 103798704, 0);
|
|
send(kCharacterMaster, kCharacterTableE, 103798704, 0);
|
|
send(kCharacterMaster, kCharacterTableF, 103798704, 0);
|
|
|
|
takeItem(kItem3);
|
|
dropItem(kItemBomb, 1);
|
|
|
|
if (_items[kItemBeetle].floating == 3)
|
|
takeItem(kItemBeetle);
|
|
|
|
setModel(25, 2);
|
|
setDoor(107, kCharacterCath, 3, 255, 255);
|
|
|
|
if (getCharacterParams(kCharacterMaster, 8)[1] || getCharacterParams(kCharacterMaster, 8)[2]) {
|
|
endDialog(kCharacterMaster);
|
|
|
|
getCharacterParams(kCharacterMaster, 8)[1] = 0;
|
|
getCharacterParams(kCharacterMaster, 8)[2] = 0;
|
|
}
|
|
|
|
fadeToBlack();
|
|
|
|
if (cathHasItem(kItemFirebird)) {
|
|
bumpCath(kCarGreenSleeping, 76, 255);
|
|
} else {
|
|
bumpCath(kCarRestaurant, 69, 255);
|
|
}
|
|
|
|
restoreIcons();
|
|
CONS_Master_MovingSecondNight(0, 0, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Master_MovingSecondNight(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_Master_MovingSecondNight);
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 19;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Master_MovingSecondNight(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
{
|
|
bool skip = false;
|
|
if (_globals[kGlobalTrainIsRunning]) {
|
|
if (getCharacterCurrentParams(kCharacterMaster)[5] ||
|
|
(getCharacterCurrentParams(kCharacterMaster)[5] = _realTime + getCharacterCurrentParams(kCharacterMaster)[3], _realTime + getCharacterCurrentParams(kCharacterMaster)[3] != 0)) {
|
|
if (getCharacterCurrentParams(kCharacterMaster)[5] >= _realTime) {
|
|
skip = true;
|
|
}
|
|
|
|
if (!skip) {
|
|
getCharacterCurrentParams(kCharacterMaster)[5] = 0x7FFFFFFF;
|
|
}
|
|
}
|
|
|
|
if (!skip) {
|
|
switch (rnd(5)) {
|
|
case 0:
|
|
playDialog(0, "ZFX1005", rnd(15) + 2, 0);
|
|
break;
|
|
case 1:
|
|
playDialog(0, "ZFX1006", rnd(15) + 2, 0);
|
|
break;
|
|
case 2:
|
|
playDialog(0, "ZFX1007", rnd(15) + 2, 0);
|
|
break;
|
|
case 3:
|
|
playDialog(0, "ZFX1007A", rnd(15) + 2, 0);
|
|
break;
|
|
case 4:
|
|
playDialog(0, "ZFX1007B", rnd(15) + 2, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
getCharacterCurrentParams(kCharacterMaster)[3] = 225 * (4 * rnd(5) + 20);
|
|
getCharacterCurrentParams(kCharacterMaster)[5] = 0;
|
|
}
|
|
}
|
|
|
|
if (getCharacterCurrentParams(kCharacterMaster)[6] ||
|
|
(getCharacterCurrentParams(kCharacterMaster)[6] = _realTime + getCharacterCurrentParams(kCharacterMaster)[4], _realTime + getCharacterCurrentParams(kCharacterMaster)[4] != 0)) {
|
|
if (getCharacterCurrentParams(kCharacterMaster)[6] >= _realTime) {
|
|
if (_gameTime > 2381400 && !getCharacterCurrentParams(kCharacterMaster)[7]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[7] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 1;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Pozsony", 14, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 2386800 && !getCharacterCurrentParams(kCharacterMaster)[8]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[8] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 2;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Pozsony", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (getModel(1) == 1 && _gameTime > 2403000 && !getCharacterCurrentParams(kCharacterMaster)[9]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[9] = 1;
|
|
_globals[kGlobalPhaseOfTheNight] = 2;
|
|
}
|
|
|
|
if (!getCharacterCurrentParams(kCharacterMaster)[0]) {
|
|
if (_gameTime > 2416500 && !getCharacterCurrentParams(kCharacterMaster)[10]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[10] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 3;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Galanta", 15, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 2421900 && !getCharacterCurrentParams(kCharacterMaster)[11]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[11] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 4;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Galanta", 0, 0, 0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (_gameTime > 2470500 && !getCharacterCurrentParams(kCharacterMaster)[12]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[12] = 1;
|
|
if (_globals[kGlobalPhaseOfTheNight] == 2)
|
|
_timeSpeed = 1;
|
|
}
|
|
|
|
if (_gameTime > 2506500 && !getCharacterCurrentParams(kCharacterMaster)[13]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[13] = 1;
|
|
if (_globals[kGlobalPhaseOfTheNight] == 2)
|
|
_globals[kGlobalPhaseOfTheNight] = 1;
|
|
}
|
|
|
|
if (_gameTime > 2520000 && !getCharacterCurrentParams(kCharacterMaster)[14]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[14] = 1;
|
|
if (!getCharacterCurrentParams(kCharacterMaster)[1] && !getCharacterCurrentParams(kCharacterMaster)[2]) {
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 5;
|
|
MasterCall(&LogicManager::CONS_Master_SaveGame, 2, kEventTrainExplosionBridge, 0, 0);
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
getCharacterCurrentParams(kCharacterMaster)[6] = 0x7FFFFFFF;
|
|
}
|
|
|
|
switch (rnd(2)) {
|
|
case 0:
|
|
playDialog(0, "ZFX1008", rnd(15) + 2, 0);
|
|
break;
|
|
case 1:
|
|
default:
|
|
playDialog(0, "ZFX1009", rnd(15) + 2, 0);
|
|
break;
|
|
}
|
|
|
|
getCharacterCurrentParams(kCharacterMaster)[4] = 225 * (4 * rnd(6) + 8);
|
|
getCharacterCurrentParams(kCharacterMaster)[6] = 0;
|
|
|
|
if (_gameTime > 2381400 && !getCharacterCurrentParams(kCharacterMaster)[7]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[7] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 1;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Pozsony", 14, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 2386800 && !getCharacterCurrentParams(kCharacterMaster)[8]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[8] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 2;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Pozsony", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (getModel(1) == 1 && _gameTime > 2403000 && !getCharacterCurrentParams(kCharacterMaster)[9]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[9] = 1;
|
|
_globals[kGlobalPhaseOfTheNight] = 2;
|
|
}
|
|
|
|
if (!getCharacterCurrentParams(kCharacterMaster)[0]) {
|
|
if (_gameTime > 2416500 && !getCharacterCurrentParams(kCharacterMaster)[10]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[10] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 3;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Galanta", 15, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 2421900 && !getCharacterCurrentParams(kCharacterMaster)[11]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[11] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 4;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Galanta", 0, 0, 0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (_gameTime > 2470500 && !getCharacterCurrentParams(kCharacterMaster)[12]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[12] = 1;
|
|
if (_globals[kGlobalPhaseOfTheNight] == 2)
|
|
_timeSpeed = 1;
|
|
}
|
|
|
|
if (_gameTime > 2506500 && !getCharacterCurrentParams(kCharacterMaster)[13]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[13] = 1;
|
|
if (_globals[kGlobalPhaseOfTheNight] == 2)
|
|
_globals[kGlobalPhaseOfTheNight] = 1;
|
|
}
|
|
|
|
if (_gameTime > 2520000 && !getCharacterCurrentParams(kCharacterMaster)[14]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[14] = 1;
|
|
if (!getCharacterCurrentParams(kCharacterMaster)[1] && !getCharacterCurrentParams(kCharacterMaster)[2]) {
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 5;
|
|
MasterCall(&LogicManager::CONS_Master_SaveGame, 2, kEventTrainExplosionBridge, 0, 0);
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
case 2:
|
|
if (getCharacterParams(kCharacterMaster, 8)[1]) {
|
|
send(kCharacterMaster, kCharacterClerk, 191350523, 0);
|
|
if (getCharacter(kCharacterCath).characterPosition.location == 2) {
|
|
if (cathOutHisWindow()) {
|
|
bumpCath(kCarGreenSleeping, 49, 255);
|
|
_engine->getSoundManager()->startAmbient();
|
|
_engine->getSoundManager()->startSteam(getCharacterParams(kCharacterMaster, 8)[3]);
|
|
getCharacterParams(kCharacterMaster, 8)[1] = 0;
|
|
break;
|
|
}
|
|
|
|
if (cathOutRebeccaWindow()) {
|
|
bumpCath(kCarRedSleeping, 49, 255);
|
|
} else {
|
|
if (getCharacter(kCharacterCath).characterPosition.car < 4 || getCharacter(kCharacterCath).characterPosition.car > 7) {
|
|
if (!getCharacter(kCharacterCath).characterPosition.car || getCharacter(kCharacterCath).characterPosition.car > 3) {
|
|
_engine->getSoundManager()->startAmbient();
|
|
_engine->getSoundManager()->startSteam(getCharacterParams(kCharacterMaster, 8)[3]);
|
|
getCharacterParams(kCharacterMaster, 8)[1] = 0;
|
|
break;
|
|
}
|
|
|
|
if (checkCathDir(kCarGreenSleeping, 98)) {
|
|
playDialog(0, "LIB015", -1, 0);
|
|
bumpCath(kCarGreenSleeping, 71, 255);
|
|
} else {
|
|
bumpCath(kCarGreenSleeping, 82, 255);
|
|
}
|
|
|
|
_engine->getSoundManager()->startAmbient();
|
|
_engine->getSoundManager()->startSteam(getCharacterParams(kCharacterMaster, 8)[3]);
|
|
getCharacterParams(kCharacterMaster, 8)[1] = 0;
|
|
break;
|
|
}
|
|
|
|
bumpCath(kCarRestaurant, 82, 255);
|
|
}
|
|
}
|
|
|
|
_engine->getSoundManager()->startAmbient();
|
|
_engine->getSoundManager()->startSteam(getCharacterParams(kCharacterMaster, 8)[3]);
|
|
getCharacterParams(kCharacterMaster, 8)[1] = 0;
|
|
break;
|
|
}
|
|
|
|
if (getCharacterParams(kCharacterMaster, 8)[2]) {
|
|
_engine->getSoundManager()->startAmbient();
|
|
getCharacterParams(kCharacterMaster, 8)[2] = 0;
|
|
} else if (!getCharacterCurrentParams(kCharacterMaster)[1] && !getCharacterCurrentParams(kCharacterMaster)[2]) {
|
|
playDialog(kCharacterMaster, "ZFX1001", -1, 0);
|
|
}
|
|
|
|
break;
|
|
case 3:
|
|
endGraphics(kCharacterMaster);
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 11;
|
|
MasterCall(&LogicManager::CONS_Master_SaveGame, 1, 0, 0, 0);
|
|
break;
|
|
case 12:
|
|
getCharacterCurrentParams(kCharacterMaster)[3] = 225 * (4 * rnd(5) + 20);
|
|
getCharacterCurrentParams(kCharacterMaster)[4] = 225 * (4 * rnd(6) + 8);
|
|
break;
|
|
case 18:
|
|
switch (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8]) {
|
|
case 1:
|
|
if (_gameTime > 2386800 && !getCharacterCurrentParams(kCharacterMaster)[8]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[8] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 2;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Pozsony", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 2:
|
|
if (getModel(1) == 1 && _gameTime > 2403000 && !getCharacterCurrentParams(kCharacterMaster)[9]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[9] = 1;
|
|
_globals[kGlobalPhaseOfTheNight] = 2;
|
|
}
|
|
|
|
if (getCharacterCurrentParams(kCharacterMaster)[0]) {
|
|
if (_gameTime > 2470500 && !getCharacterCurrentParams(kCharacterMaster)[12]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[12] = 1;
|
|
if (_globals[kGlobalPhaseOfTheNight] == 2)
|
|
_timeSpeed = 1;
|
|
}
|
|
|
|
if (_gameTime > 2506500 && !getCharacterCurrentParams(kCharacterMaster)[13]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[13] = 1;
|
|
if (_globals[kGlobalPhaseOfTheNight] == 2)
|
|
_globals[kGlobalPhaseOfTheNight] = 1;
|
|
}
|
|
|
|
if (_gameTime > 2520000 && !getCharacterCurrentParams(kCharacterMaster)[14]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[14] = 1;
|
|
if (!getCharacterCurrentParams(kCharacterMaster)[1] && !getCharacterCurrentParams(kCharacterMaster)[2]) {
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 5;
|
|
MasterCall(&LogicManager::CONS_Master_SaveGame, 2, kEventTrainExplosionBridge, 0, 0);
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 2416500 && !getCharacterCurrentParams(kCharacterMaster)[10]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[10] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 3;
|
|
MasterCall(&LogicManager::CONS_Master_Arrive, "Galanta", 15, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 3:
|
|
if (_gameTime > 2421900 && !getCharacterCurrentParams(kCharacterMaster)[11]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[11] = 1;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 4;
|
|
MasterCall(&LogicManager::CONS_Master_Depart, "Galanta", 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
// fall through
|
|
case 4:
|
|
if (_gameTime > 2470500 && !getCharacterCurrentParams(kCharacterMaster)[12]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[12] = 1;
|
|
if (_globals[kGlobalPhaseOfTheNight] == 2)
|
|
_timeSpeed = 1;
|
|
}
|
|
|
|
if (_gameTime > 2506500 && !getCharacterCurrentParams(kCharacterMaster)[13]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[13] = 1;
|
|
if (_globals[kGlobalPhaseOfTheNight] == 2)
|
|
_globals[kGlobalPhaseOfTheNight] = 1;
|
|
}
|
|
|
|
if (_gameTime > 2520000 && !getCharacterCurrentParams(kCharacterMaster)[14]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[14] = 1;
|
|
if (!getCharacterCurrentParams(kCharacterMaster)[1] && !getCharacterCurrentParams(kCharacterMaster)[2]) {
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 5;
|
|
MasterCall(&LogicManager::CONS_Master_SaveGame, 2, kEventTrainExplosionBridge, 0, 0);
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 5:
|
|
if (whoRunningDialog(kCharacterMaster))
|
|
endDialog(kCharacterMaster);
|
|
|
|
playNIS(kEventTrainExplosionBridge);
|
|
endGame(0, 1, 0, true);
|
|
break;
|
|
case 6:
|
|
_engine->getSoundManager()->endAmbient();
|
|
playNIS(kEventTylerCastleDream);
|
|
_engine->getSoundManager()->startAmbient();
|
|
_globals[kGlobalPhaseOfTheNight] = 1;
|
|
bumpCathTylerComp();
|
|
send(kCharacterMaster, kCharacterTatiana, 169360385, 0);
|
|
_timeSpeed = 1;
|
|
_gameTime = 2511900;
|
|
dropItem(kItem2, 1);
|
|
takeItem(kItem22);
|
|
getCharacter(kCharacterMaster).characterPosition.car = 4;
|
|
getCharacter(kCharacterMaster).characterPosition.position = 1500;
|
|
getCharacter(kCharacterMaster).characterPosition.location = 1;
|
|
playDialog(kCharacterMaster, "ZFX1001", -1, 0);
|
|
break;
|
|
case 7:
|
|
playNIS(kEventTrainExplosionBridge);
|
|
endGame(1, 2430000, 0, true);
|
|
break;
|
|
case 8:
|
|
playDialog(0, "MUS022", -1, 0);
|
|
if (_gameTime < 2517300)
|
|
_gameTime = 2517300;
|
|
|
|
break;
|
|
case 9:
|
|
playNIS(kEventCathDefusingBomb);
|
|
bumpCath(kCarRedSleeping, 73, 255);
|
|
break;
|
|
case 10:
|
|
playNIS(kEventDefuseBomb);
|
|
forceJump(kCharacterAbbot, &LogicManager::CONS_Abbot_AfterBomb);
|
|
send(kCharacterMaster, kCharacterAnna, 191001984, 0);
|
|
send(kCharacterMaster, kCharacterCond2, 191001984, 0);
|
|
takeItem(kItem2);
|
|
_items[kItem2].floating = 0;
|
|
getCharacterCurrentParams(kCharacterMaster)[1] = 1;
|
|
bumpCath(kCarRedSleeping, 2, 255);
|
|
break;
|
|
case 11:
|
|
bumpCath(kCarRedSleeping, 74, 255);
|
|
playDialog(kCharacterClerk, "ZFX4001", 16, 0);
|
|
endGame(0, 1, 0, true);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
break;
|
|
case 139254416:
|
|
CONS_Master_StartPart5(0, 0, 0, 0);
|
|
break;
|
|
case 156435676:
|
|
send(kCharacterMaster, kCharacterTatiana, 169360385, 0);
|
|
send(kCharacterMaster, kCharacterCond2, 201431954, 0);
|
|
send(kCharacterMaster, kCharacterTrainM, 201431954, 0);
|
|
_timeSpeed = 1;
|
|
_gameTime = 2511900;
|
|
dropItem(kItem2, 1);
|
|
getCharacter(kCharacterMaster).characterPosition.car = 4;
|
|
getCharacter(kCharacterMaster).characterPosition.position = 1500;
|
|
getCharacter(kCharacterMaster).characterPosition.location = 1;
|
|
playDialog(kCharacterMaster, "ZFX1001", -1, 0);
|
|
break;
|
|
case 158610240:
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 8;
|
|
MasterCall(&LogicManager::CONS_Master_SaveGame, 1, 0, 0, 0);
|
|
break;
|
|
case 169300225:
|
|
if (_gameTime < 2519100)
|
|
_gameTime = 2519100;
|
|
|
|
getCharacterCurrentParams(kCharacterMaster)[2] = 1;
|
|
startSeqOtis(kCharacterMaster, "BOMB");
|
|
break;
|
|
case 190346110:
|
|
_globals[kGlobalPhaseOfTheNight] = 3;
|
|
getCharacterCurrentParams(kCharacterMaster)[0] = 1;
|
|
if (getCharacterParams(kCharacterMaster, 8)[1] || getCharacterParams(kCharacterMaster, 8)[2]) {
|
|
endDialog(kCharacterMaster);
|
|
getCharacterParams(kCharacterMaster, 8)[1] = 0;
|
|
getCharacterParams(kCharacterMaster, 8)[2] = 0;
|
|
}
|
|
|
|
fadeToBlack();
|
|
playDialog(0, "MUS008", 16, 0);
|
|
_activeItem = 0;
|
|
fadeToBlack();
|
|
|
|
while (dialogRunning("MUS008")) {
|
|
_engine->getSoundManager()->soundThread();
|
|
_engine->waitForTimer(4);
|
|
}
|
|
|
|
if (cathHasItem(kItemBomb)) {
|
|
forceJump(kCharacterAlexei, &LogicManager::CONS_Alexei_Dead);
|
|
forceJump(kCharacterAnna, &LogicManager::CONS_Anna_Sulking);
|
|
forceJump(kCharacterAugust, &LogicManager::CONS_August_Asleep4);
|
|
forceJump(kCharacterCond1, &LogicManager::CONS_Cond1_OnDuty4);
|
|
forceJump(kCharacterCond2, &LogicManager::CONS_Cond2_OnDuty4);
|
|
forceJump(kCharacterWaiter1, &LogicManager::CONS_Waiter1_Serving4);
|
|
forceJump(kCharacterWaiter2, &LogicManager::CONS_Waiter2_Serving4);
|
|
forceJump(kCharacterHeadWait, &LogicManager::CONS_HeadWait_InPart4);
|
|
forceJump(kCharacterTrainM, &LogicManager::CONS_TrainM_InOffice4);
|
|
forceJump(kCharacterTatiana, &LogicManager::CONS_Tatiana_Asleep4);
|
|
forceJump(kCharacterAbbot, &LogicManager::CONS_Abbot_Asleep4);
|
|
forceJump(kCharacterMilos, &LogicManager::CONS_Milos_EndPart4);
|
|
forceJump(kCharacterVesna, &LogicManager::CONS_Vesna_EndPart4);
|
|
forceJump(kCharacterIvo, &LogicManager::CONS_Ivo_EndPart4);
|
|
forceJump(kCharacterSalko, &LogicManager::CONS_Salko_EndPart4);
|
|
forceJump(kCharacterMadame, &LogicManager::CONS_Madame_Asleep4);
|
|
forceJump(kCharacterMonsieur, &LogicManager::CONS_Monsieur_Asleep4);
|
|
forceJump(kCharacterRebecca, &LogicManager::CONS_Rebecca_Asleep4);
|
|
forceJump(kCharacterSophie, &LogicManager::CONS_Sophie_Asleep4);
|
|
forceJump(kCharacterYasmin, &LogicManager::CONS_Yasmin_Asleep4);
|
|
forceJump(kCharacterHadija, &LogicManager::CONS_Hadija_Asleep4);
|
|
forceJump(kCharacterAlouan, &LogicManager::CONS_Alouan_Asleep4);
|
|
forceJump(kCharacterMax, &LogicManager::CONS_Max_InCageFriendly);
|
|
|
|
send(kCharacterMaster, kCharacterAnna, 201431954, 0);
|
|
send(kCharacterMaster, kCharacterCond1, 201431954, 0);
|
|
send(kCharacterMaster, kCharacterCond2, 201431954, 0);
|
|
send(kCharacterMaster, kCharacterWaiter1, 201431954, 0);
|
|
send(kCharacterMaster, kCharacterWaiter2, 201431954, 0);
|
|
send(kCharacterMaster, kCharacterHeadWait, 201431954, 0);
|
|
send(kCharacterMaster, kCharacterTrainM, 201431954, 0);
|
|
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 6;
|
|
MasterCall(&LogicManager::CONS_Master_SaveGame, 2, kEventTylerCastleDream, 0, 0);
|
|
} else {
|
|
_gameTime = 2520000;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 7;
|
|
MasterCall(&LogicManager::CONS_Master_SaveGame, 2, kEventTrainExplosionBridge, 0, 0);
|
|
}
|
|
|
|
break;
|
|
case 191001984:
|
|
_gameTime = 2520000;
|
|
|
|
if (whoRunningDialog(kCharacterMaster))
|
|
endDialog(kCharacterMaster);
|
|
|
|
endGraphics(kCharacterMaster);
|
|
takeCathItem(kItemTelegram);
|
|
_timeSpeed = 5;
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 10;
|
|
MasterCall(&LogicManager::CONS_Master_SaveGame, 2, kEventDefuseBomb, 0, 0);
|
|
break;
|
|
case 201959744:
|
|
if (whoRunningDialog(kCharacterMaster))
|
|
endDialog(kCharacterMaster);
|
|
|
|
playDialog(kCharacterClerk, "ZFX4001", 16, 0);
|
|
endGame(0, 0, 0, true);
|
|
break;
|
|
case 225367984:
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 9;
|
|
MasterCall(&LogicManager::CONS_Master_SaveGame, 2, kEventCathDefusingBomb, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Master_StartPart5(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_Master_StartPart5);
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 20;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Master_StartPart5(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
if (_globals[kGlobalChapter] != 5) {
|
|
_globals[kGlobalChapter] = 5;
|
|
makeAllJump(5);
|
|
}
|
|
|
|
_gameTime = 2844000;
|
|
_timeSpeed = 2;
|
|
|
|
CONS_Master_InitPart5(0, 0, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Master_InitPart5(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_Master_InitPart5);
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 21;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Master_InitPart5(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
endGraphics(kCharacterTableA);
|
|
endGraphics(kCharacterTableB);
|
|
endGraphics(kCharacterTableC);
|
|
endGraphics(kCharacterTableD);
|
|
endGraphics(kCharacterTableE);
|
|
endGraphics(kCharacterTableF);
|
|
|
|
_globals[kGlobalTrainIsRunning] = 1;
|
|
|
|
setDoor(26, kCharacterCath, 1, 0, 9);
|
|
setDoor(27, kCharacterCath, 1, 0, 9);
|
|
setDoor(1, kCharacterCath, 0, 10, 9);
|
|
setDoor(2, kCharacterCath, 0, 10, 9);
|
|
setDoor(3, kCharacterCath, 0, 10, 9);
|
|
setDoor(4, kCharacterCath, 3, 10, 9);
|
|
setDoor(5, kCharacterCath, 3, 10, 9);
|
|
setDoor(6, kCharacterCath, 3, 10, 9);
|
|
setDoor(7, kCharacterCath, 3, 10, 9);
|
|
setDoor(8, kCharacterCath, 3, 10, 9);
|
|
setDoor(32, kCharacterCath, 0, 10, 9);
|
|
setDoor(33, kCharacterCath, 0, 10, 9);
|
|
setDoor(34, kCharacterCath, 0, 10, 9);
|
|
setDoor(35, kCharacterCath, 0, 10, 9);
|
|
setDoor(36, kCharacterCath, 0, 10, 9);
|
|
setDoor(37, kCharacterCath, 0, 10, 9);
|
|
setDoor(38, kCharacterCath, 3, 10, 9);
|
|
setDoor(39, kCharacterCath, 3, 10, 9);
|
|
setDoor(17, kCharacterCath, 0, 10, 9);
|
|
setDoor(18, kCharacterCath, 0, 10, 9);
|
|
setDoor(19, kCharacterCath, 0, 10, 9);
|
|
setDoor(20, kCharacterCath, 3, 10, 9);
|
|
setDoor(21, kCharacterCath, 3, 10, 9);
|
|
setDoor(22, kCharacterCath, 3, 10, 9);
|
|
setDoor(48, kCharacterCath, 0, 10, 9);
|
|
setDoor(49, kCharacterCath, 0, 10, 9);
|
|
setDoor(50, kCharacterCath, 0, 10, 9);
|
|
setDoor(51, kCharacterCath, 0, 10, 9);
|
|
setDoor(52, kCharacterCath, 0, 10, 9);
|
|
setDoor(53, kCharacterCath, 0, 10, 9);
|
|
setDoor(26, kCharacterCath, 0, 10, 9);
|
|
setDoor(27, kCharacterCath, 0, 10, 9);
|
|
|
|
_globals[kGlobalPhaseOfTheNight] = 1;
|
|
_activeItem = 0;
|
|
_globals[kGlobalCathInSpecialState] = 1;
|
|
_globals[kGlobalCathIcon] = 36;
|
|
|
|
takeCathItem(kItemKey);
|
|
takeCathItem(kItemBomb);
|
|
takeCathItem(kItemMatch);
|
|
|
|
if (cathHasItem(kItemFirebird)) {
|
|
takeCathItem(kItemFirebird);
|
|
dropItem(kItemFirebird, 3);
|
|
|
|
if (cathHasItem(kItemWhistle)) {
|
|
takeCathItem(kItemWhistle);
|
|
dropItem(kItemWhistle, 3);
|
|
}
|
|
}
|
|
|
|
setDoor(93, kCharacterCath, 2, 255, 255);
|
|
setDoor(94, kCharacterCath, 0, 255, 255);
|
|
setDoor(101, kCharacterCath, 0, 10, 9);
|
|
setModel(98, 2);
|
|
setModel(55, 2);
|
|
|
|
if (getCharacterParams(kCharacterMaster, 8)[1] || getCharacterParams(kCharacterMaster, 8)[2]) {
|
|
endDialog(kCharacterMaster);
|
|
getCharacterParams(kCharacterMaster, 8)[1] = 0;
|
|
getCharacterParams(kCharacterMaster, 8)[2] = 0;
|
|
}
|
|
|
|
fadeToBlack();
|
|
bumpCath(kCarBaggageRear, 95, 255);
|
|
restoreIcons();
|
|
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 1;
|
|
|
|
MasterCall(&LogicManager::CONS_Master_SaveGame, 1, 0, 0, 0);
|
|
break;
|
|
case 18:
|
|
if (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] == 1) {
|
|
CONS_Master_MovingPart5(0, 0, 0, 0);
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Master_MovingPart5(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_Master_MovingPart5);
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 22;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Master_MovingPart5(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
if (_gameTime > 2907000 && !getCharacterCurrentParams(kCharacterMaster)[1]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[1] = 1;
|
|
if (!_globals[kGlobalIsDayTime]) {
|
|
playDialog(kCharacterMaster, "ARRIVE", 8, 0);
|
|
_engine->getSoundManager()->endAmbient();
|
|
}
|
|
}
|
|
|
|
if (_gameTime > 2943000 && !getCharacterCurrentParams(kCharacterMaster)[2]) {
|
|
getCharacterCurrentParams(kCharacterMaster)[2] = 1;
|
|
if (!_doneNIS[kEventLocomotiveMilosDay] && !_doneNIS[kEventLocomotiveMilosNight]) {
|
|
playDialog(kCharacterMaster, "ARRIVE", 8, 0);
|
|
_engine->getSoundManager()->endAmbient();
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 2:
|
|
if (_gameTime <= 2943000) {
|
|
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 1;
|
|
MasterCall(&LogicManager::CONS_Master_SaveGame, 2, kEventTrainStopped, 0, 0);
|
|
} else {
|
|
endGame(1, 2934000, 51, true);
|
|
}
|
|
|
|
break;
|
|
case 12:
|
|
getCharacterCurrentParams(kCharacterMaster)[0] = 225 * (4 * rnd(10) + 20);
|
|
break;
|
|
case 18:
|
|
if (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] == 1) {
|
|
playNIS(kEventTrainStopped);
|
|
endGame(1, 2898000, 51, true);
|
|
}
|
|
|
|
break;
|
|
case 135800432:
|
|
_globals[kGlobalIsDayTime] = 1;
|
|
_gameTime = 2916000;
|
|
|
|
if (whoRunningDialog(kCharacterMaster))
|
|
endDialog(kCharacterMaster);
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void (LogicManager::*LogicManager::_functionsMaster[])(HAND_PARAMS) = {
|
|
nullptr,
|
|
&LogicManager::HAND_Master_SaveGame,
|
|
&LogicManager::HAND_Master_Arrive,
|
|
&LogicManager::HAND_Master_Depart,
|
|
&LogicManager::HAND_Master_Birth,
|
|
&LogicManager::HAND_Master_WalkTest,
|
|
&LogicManager::HAND_Master_FirstDream,
|
|
&LogicManager::HAND_Master_StartPart1,
|
|
&LogicManager::HAND_Master_MovingNight,
|
|
&LogicManager::HAND_Master_SecondSleep,
|
|
&LogicManager::HAND_Master_StartPart2,
|
|
&LogicManager::HAND_Master_InitPart2,
|
|
&LogicManager::HAND_Master_MovingDay,
|
|
&LogicManager::HAND_Master_StartPart3,
|
|
&LogicManager::HAND_Master_InitPart3,
|
|
&LogicManager::HAND_Master_MovingAfternoon,
|
|
&LogicManager::HAND_Master_EndVienna,
|
|
&LogicManager::HAND_Master_StartPart4,
|
|
&LogicManager::HAND_Master_InitPart4,
|
|
&LogicManager::HAND_Master_MovingSecondNight,
|
|
&LogicManager::HAND_Master_StartPart5,
|
|
&LogicManager::HAND_Master_InitPart5,
|
|
&LogicManager::HAND_Master_MovingPart5
|
|
};
|
|
|
|
} // End of namespace LastExpress
|