[Scummvm-git-logs] scummvm master -> 4bcec43eae8d25e4466d055adbe1b62736ade13b
sev-
noreply at scummvm.org
Mon Jun 16 21:12:53 UTC 2025
This automated email contains information about 82 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
6e198f7723 LASTEXPRESS: Rewrite engine
787c013e03 LASTEXPRESS: Add support for demo
b5f33424eb LASTEXPRESS: Remove old engine code
3c4eeaeec6 LASTEXPRESS: Fix trivial MSVC warnings
77835fc7e8 LASTEXPRESS: Rewrite Master logic
6d0f5b1524 LASTEXPRESS: Clean up more code
4b0f18e4eb LASTEXPRESS: Clean up tables (ha-ha.)
11fe839e47 LASTEXPRESS: Clean up Yasmin logic
5acd485cb8 LASTEXPRESS: Clean up Hadija logic
03f08f3732 LASTEXPRESS: Clean up Clerk logic
66c968f5da LASTEXPRESS: Clean up Max logic
01357febf6 LASTEXPRESS: Clean up Sophie logic
dafdbe320d LASTEXPRESS: Clean up Police logic
78277791b9 LASTEXPRESS: Clean up Salko logic
e47afa2820 LASTEXPRESS: Clean up Anna logic
2ca65f1379 LASTEXPRESS: Clean up Mitchell logic
52cf72d4e9 LASTEXPRESS: Clean up Cook logic
00c39cabf2 LASTEXPRESS: Clean up Monsieur logic
e25704807e LASTEXPRESS: Clean up Alouan logic
2f22a8586a LASTEXPRESS: Clean up Vassili logic
8c0ebf3e17 LASTEXPRESS: Clean up August logic
3879c98188 LASTEXPRESS: Clean up Abbot logic
1361402186 LASTEXPRESS: Clean up Alexei logic
c93bd74078 LASTEXPRESS: Add experimental support for Gold Edition
1c9f84a625 LASTEXPRESS: Clean up Cond1 logic
8cc7437fc0 LASTEXPRESS: Clean up Cond2 logic
5e5578449c LASTEXPRESS: Clean up François logic
29d373e5fb LASTEXPRESS: Clean up HeadWait logic
7f75090fff LASTEXPRESS: Clean up Ivo logic
2e3622d3a1 LASTEXPRESS: Clean up Kronos logic
9af209d418 LASTEXPRESS: Clean up Mahmud logic
2fa6388835 LASTEXPRESS: Clean up Master logic
714b0e4d76 LASTEXPRESS: Clean up Kahina logic
b80ecda5e3 LASTEXPRESS: Clean up Waiter1 logic
023913f0ed LASTEXPRESS: Clean up Waiter2 logic
1e5e445251 LASTEXPRESS: Clean up TrainM logic
f0db0084de LASTEXPRESS: Clean up Madame logic
11b223fe17 LASTEXPRESS: Clean up Milos logic
7f1fe3eab3 LASTEXPRESS: Clean up Vesna logic
5521c7ecb5 LASTEXPRESS: Clean up Tatiana logic
e4752d4a34 LASTEXPRESS: Clean up Rebecca logic
3d071e9a93 LASTEXPRESS: Add myself to credits
51fde2f649 LASTEXPRESS: Clean up sprites.h/.cpp
d53d6f851d LASTEXPRESS: More clean-up
3515db6a9d LASTEXPRESS: Fix some wrongly cleaned up code for TrainM
11e77d1c75 LASTEXPRESS: DEBUG: Differentiate train structure between chapters
c22a88182a LASTEXPRESS: Fix remaining character logic issues
76075eda6c LASTEXPRESS: Remove leftover warning message
512b746e71 LASTEXPRESS: Fix non-virtual dtor warning
ec7d62296c LASTEXPRESS: Fix some trivial warnings
cf38031f56 LASTEXPRESS: Fix some more trivial warnings
208a61abed LASTEXPRESS: Fix Alexei parentheses warnings
d42de93a67 LASTEXPRESS: Fix Anna parentheses warnings
dc3d3a7a80 LASTEXPRESS: Fix August parentheses warnings
376bac3a15 LASTEXPRESS: Fix Clerk parentheses warnings
74d546a7e1 LASTEXPRESS: Fix Cond1 parentheses warnings
bf9fc68b5c LASTEXPRESS: Fix Cond2 parentheses warnings
27d7be2ff1 LASTEXPRESS: Fix Kahina parentheses warnings
87ca7f357f LASTEXPRESS: Fix Mahmud parentheses warnings
8172656789 LASTEXPRESS: Fix Milos parentheses warnings
4bd4e55864 LASTEXPRESS: Fix Police parentheses warnings
b4d936d7fd LASTEXPRESS: Fix Rebecca parentheses warnings
2da59e68c1 LASTEXPRESS: Fix Salko parentheses warnings
bd6aa554fb LASTEXPRESS: Fix Sophie parentheses warnings
c9615ff131 LASTEXPRESS: Fix Tatiana parentheses warnings
5c0603461b LASTEXPRESS: Fix TrainM parentheses warnings
cfd1da0278 LASTEXPRESS: Fix Vassili parentheses warnings
ed4a01d282 LASTEXPRESS: Fix Vesna parentheses warnings
3d22a3bfc2 LASTEXPRESS: Fix TableC parentheses warnings
186cdcb63b LASTEXPRESS: Fix action.cpp parentheses warnings
d7fd0f3130 LASTEXPRESS: Fix navigation.cpp parentheses warnings
22ff3be497 LASTEXPRESS: Fix most logic.cpp parentheses warnings
a090b7ebda LASTEXPRESS: Fix otis.cpp parentheses warnings
226dce5292 LASTEXPRESS: SOUND: Fix some dialogs stopping after first frame
0ccb25781f LASTEXPRESS: Fix warning in comparison of walkCounter
57fdfd45bb LASTEXPRESS: Fix last parentheses warning in logic.cpp
ef7e38e37a LASTEXPRESS: DETECTION: Set engine as ready for public testing
db7783ab35 LASTEXPRESS: Fix typo in Tatiana's logic
c4c053bba3 LASTEXPRESS: Finish the EVENT_QUIT handling
0c1f5c7f2f LASTEXPRESS: Properly handle exit from menu button
3eed404fea LASTEXPRESS: Add MouseFlags enum and relabel some flags accordingly
4bcec43eae LASTEXPRESS: Remove "imgui" flag from required engine components
Commit: 6e198f7723e40148b41fd32dd3032ebd69478109
https://github.com/scummvm/scummvm/commit/6e198f7723e40148b41fd32dd3032ebd69478109
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Rewrite engine
Changed paths:
A engines/lastexpress/characters/abbot.cpp
A engines/lastexpress/characters/alexei.cpp
A engines/lastexpress/characters/alouan.cpp
A engines/lastexpress/characters/anna.cpp
A engines/lastexpress/characters/august.cpp
A engines/lastexpress/characters/clerk.cpp
A engines/lastexpress/characters/cond1.cpp
A engines/lastexpress/characters/cond2.cpp
A engines/lastexpress/characters/cook.cpp
A engines/lastexpress/characters/francois.cpp
A engines/lastexpress/characters/hadija.cpp
A engines/lastexpress/characters/headwait.cpp
A engines/lastexpress/characters/ivo.cpp
A engines/lastexpress/characters/kahina.cpp
A engines/lastexpress/characters/kronos.cpp
A engines/lastexpress/characters/madame.cpp
A engines/lastexpress/characters/mahmud.cpp
A engines/lastexpress/characters/master.cpp
A engines/lastexpress/characters/max.cpp
A engines/lastexpress/characters/milos.cpp
A engines/lastexpress/characters/mitchell.cpp
A engines/lastexpress/characters/monsieur.cpp
A engines/lastexpress/characters/police.cpp
A engines/lastexpress/characters/rebecca.cpp
A engines/lastexpress/characters/salko.cpp
A engines/lastexpress/characters/sophie.cpp
A engines/lastexpress/characters/tablea.cpp
A engines/lastexpress/characters/tableb.cpp
A engines/lastexpress/characters/tablec.cpp
A engines/lastexpress/characters/tabled.cpp
A engines/lastexpress/characters/tablee.cpp
A engines/lastexpress/characters/tablef.cpp
A engines/lastexpress/characters/tatiana.cpp
A engines/lastexpress/characters/trainm.cpp
A engines/lastexpress/characters/vassili.cpp
A engines/lastexpress/characters/vesna.cpp
A engines/lastexpress/characters/waiter1.cpp
A engines/lastexpress/characters/waiter2.cpp
A engines/lastexpress/characters/yasmin.cpp
A engines/lastexpress/data/cvcrfile.cpp
A engines/lastexpress/data/cvcrfile.h
A engines/lastexpress/data/sprites.cpp
A engines/lastexpress/data/sprites.h
A engines/lastexpress/fight/fighter_cath.cpp
A engines/lastexpress/fight/opponent.cpp
A engines/lastexpress/fight/opponent_ivo.cpp
A engines/lastexpress/fight/opponent_milos.cpp
A engines/lastexpress/fight/opponent_salko.cpp
A engines/lastexpress/fight/opponent_vesna1.cpp
A engines/lastexpress/fight/opponent_vesna2.cpp
A engines/lastexpress/game/credits.cpp
A engines/lastexpress/game/events.cpp
A engines/lastexpress/game/events.h
A engines/lastexpress/game/navigation.cpp
A engines/lastexpress/game/nis.cpp
A engines/lastexpress/game/nis.h
A engines/lastexpress/game/otis.cpp
A engines/lastexpress/game/otis.h
A engines/lastexpress/game/vcr.cpp
A engines/lastexpress/game/vcr.h
A engines/lastexpress/memory.cpp
A engines/lastexpress/memory.h
A engines/lastexpress/sound/driver.cpp
A engines/lastexpress/sound/mixer.cpp
A engines/lastexpress/sound/mixer.h
A engines/lastexpress/sound/slot.cpp
A engines/lastexpress/sound/slot.h
A engines/lastexpress/sound/subtitle.cpp
A engines/lastexpress/sound/subtitle.h
A engines/lastexpress/strings.h
R engines/lastexpress/fight/fighter_anna.cpp
R engines/lastexpress/fight/fighter_anna.h
R engines/lastexpress/fight/fighter_ivo.cpp
R engines/lastexpress/fight/fighter_ivo.h
R engines/lastexpress/fight/fighter_milos.cpp
R engines/lastexpress/fight/fighter_milos.h
R engines/lastexpress/fight/fighter_salko.cpp
R engines/lastexpress/fight/fighter_salko.h
R engines/lastexpress/fight/fighter_vesna.cpp
R engines/lastexpress/fight/fighter_vesna.h
engines/lastexpress/configure.engine
engines/lastexpress/data/archive.cpp
engines/lastexpress/data/archive.h
engines/lastexpress/data/scene.h
engines/lastexpress/data/sequence.h
engines/lastexpress/data/subtitle.cpp
engines/lastexpress/data/subtitle.h
engines/lastexpress/debug.cpp
engines/lastexpress/debug.h
engines/lastexpress/entities/abbot.cpp
engines/lastexpress/entities/abbot.h
engines/lastexpress/entities/alexei.cpp
engines/lastexpress/entities/alexei.h
engines/lastexpress/entities/alouan.cpp
engines/lastexpress/entities/alouan.h
engines/lastexpress/entities/anna.cpp
engines/lastexpress/entities/anna.h
engines/lastexpress/entities/august.cpp
engines/lastexpress/entities/august.h
engines/lastexpress/entities/boutarel.cpp
engines/lastexpress/entities/boutarel.h
engines/lastexpress/entities/chapters.cpp
engines/lastexpress/entities/chapters.h
engines/lastexpress/entities/cooks.cpp
engines/lastexpress/entities/cooks.h
engines/lastexpress/entities/coudert.cpp
engines/lastexpress/entities/coudert.h
engines/lastexpress/entities/entity.cpp
engines/lastexpress/entities/entity.h
engines/lastexpress/entities/entity39.cpp
engines/lastexpress/entities/francois.cpp
engines/lastexpress/entities/francois.h
engines/lastexpress/entities/gendarmes.cpp
engines/lastexpress/entities/gendarmes.h
engines/lastexpress/entities/hadija.cpp
engines/lastexpress/entities/hadija.h
engines/lastexpress/entities/ivo.cpp
engines/lastexpress/entities/ivo.h
engines/lastexpress/entities/kahina.cpp
engines/lastexpress/entities/kahina.h
engines/lastexpress/entities/kronos.cpp
engines/lastexpress/entities/kronos.h
engines/lastexpress/entities/mahmud.cpp
engines/lastexpress/entities/mahmud.h
engines/lastexpress/entities/max.cpp
engines/lastexpress/entities/max.h
engines/lastexpress/entities/mertens.cpp
engines/lastexpress/entities/mertens.h
engines/lastexpress/entities/milos.cpp
engines/lastexpress/entities/milos.h
engines/lastexpress/entities/mmeboutarel.cpp
engines/lastexpress/entities/mmeboutarel.h
engines/lastexpress/entities/pascale.cpp
engines/lastexpress/entities/pascale.h
engines/lastexpress/entities/rebecca.cpp
engines/lastexpress/entities/rebecca.h
engines/lastexpress/entities/salko.cpp
engines/lastexpress/entities/salko.h
engines/lastexpress/entities/sophie.cpp
engines/lastexpress/entities/sophie.h
engines/lastexpress/entities/tables.cpp
engines/lastexpress/entities/tables.h
engines/lastexpress/entities/tatiana.cpp
engines/lastexpress/entities/tatiana.h
engines/lastexpress/entities/train.cpp
engines/lastexpress/entities/vassili.cpp
engines/lastexpress/entities/vassili.h
engines/lastexpress/entities/verges.cpp
engines/lastexpress/entities/verges.h
engines/lastexpress/entities/vesna.cpp
engines/lastexpress/entities/vesna.h
engines/lastexpress/entities/waiter1.cpp
engines/lastexpress/entities/waiter1.h
engines/lastexpress/entities/waiter2.cpp
engines/lastexpress/entities/waiter2.h
engines/lastexpress/entities/yasmin.cpp
engines/lastexpress/entities/yasmin.h
engines/lastexpress/fight/fight.cpp
engines/lastexpress/fight/fight.h
engines/lastexpress/fight/fighter.cpp
engines/lastexpress/fight/fighter.h
engines/lastexpress/game/action.cpp
engines/lastexpress/game/action.h
engines/lastexpress/game/beetle.cpp
engines/lastexpress/game/beetle.h
engines/lastexpress/game/entities.cpp
engines/lastexpress/game/entities.h
engines/lastexpress/game/inventory.cpp
engines/lastexpress/game/logic.cpp
engines/lastexpress/game/logic.h
engines/lastexpress/game/object.cpp
engines/lastexpress/game/object.h
engines/lastexpress/game/savegame.cpp
engines/lastexpress/game/savegame.h
engines/lastexpress/game/savepoint.cpp
engines/lastexpress/game/savepoint.h
engines/lastexpress/game/scenes.cpp
engines/lastexpress/game/scenes.h
engines/lastexpress/game/state.h
engines/lastexpress/graphics.cpp
engines/lastexpress/graphics.h
engines/lastexpress/helpers.h
engines/lastexpress/lastexpress.cpp
engines/lastexpress/lastexpress.h
engines/lastexpress/menu/clock.cpp
engines/lastexpress/menu/clock.h
engines/lastexpress/menu/menu.cpp
engines/lastexpress/menu/menu.h
engines/lastexpress/metaengine.cpp
engines/lastexpress/module.mk
engines/lastexpress/shared.h
engines/lastexpress/sound/entry.cpp
engines/lastexpress/sound/entry.h
engines/lastexpress/sound/queue.cpp
engines/lastexpress/sound/queue.h
engines/lastexpress/sound/sound.cpp
engines/lastexpress/sound/sound.h
diff --git a/engines/lastexpress/characters/abbot.cpp b/engines/lastexpress/characters/abbot.cpp
new file mode 100644
index 00000000000..5f6c32284c0
--- /dev/null
+++ b/engines/lastexpress/characters/abbot.cpp
@@ -0,0 +1,2339 @@
+/* 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"
+#include "lastexpress/game/logic.h"
+
+namespace LastExpress {
+
+void LogicManager::CONS_Abbot(int chapter) {
+ switch (chapter) {
+ case 0:
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterAbbot,
+ _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]
+ );
+
+ break;
+ case 1:
+ CONS_Abbot_Birth(0, 0, 0, 0);
+ break;
+ case 2:
+ CONS_Abbot_StartPart2(0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_Abbot_StartPart3(0, 0, 0, 0);
+ break;
+ case 4:
+ CONS_Abbot_StartPart4(0, 0, 0, 0);
+ break;
+ case 5:
+ CONS_Abbot_StartPart5(0, 0, 0, 0);
+ break;
+ default:
+ return;
+ }
+}
+
+void LogicManager::AbbotCall(CALL_PARAMS) {
+ getCharacter(kCharacterAbbot).currentCall++;
+
+ (this->*functionPointer)(param1, param2, param3, param4);
+}
+
+void LogicManager::CONS_Abbot_DebugWalks(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_DebugWalks);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 1;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_DebugWalks(HAND_PARAMS) {
+ if (msg->action) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAbbot).characterPosition.position = 0;
+ getCharacter(kCharacterAbbot).characterPosition.location = 0;
+ getCharacter(kCharacterAbbot).characterPosition.car = kCarGreenSleeping;
+ getCharacterCurrentParams(kCharacterAbbot)[0] = 10000;
+ }
+ } else if (walk(kCharacterAbbot, kCarGreenSleeping, getCharacterCurrentParams(kCharacterAbbot)[0])) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[0] == 10000) {
+ getCharacterCurrentParams(kCharacterAbbot)[0] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterAbbot)[0] = 10000;
+ }
+ }
+}
+
+void LogicManager::CONS_Abbot_DoSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_DoSeqOtis);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 2;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_DoSeqOtis(HAND_PARAMS) {
+ if (msg->action == 3) {
+ getCharacter(kCharacterAbbot).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
+ fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+ } else if (msg->action == 12) {
+ startSeqOtis(kCharacterAbbot, (char *)&getCharacterCurrentParams(kCharacterAbbot)[0]);
+ }
+}
+
+void LogicManager::CONS_Abbot_DoCorrOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_DoCorrOtis);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 3;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ params->parameters[3] = param2.intParam;
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_DoCorrOtis(HAND_PARAMS) {
+ if (msg->action == 3) {
+ releaseAtDoor(kCharacterAbbot, getCharacterCurrentParams(kCharacterAbbot)[3]);
+
+ getCharacter(kCharacterAbbot).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+ } else if (msg->action == 12) {
+ startSeqOtis(kCharacterAbbot, (char *)&getCharacterCurrentParams(kCharacterAbbot)[0]);
+ blockAtDoor(kCharacterAbbot, getCharacterCurrentParams(kCharacterAbbot)[3]);
+ }
+}
+
+void LogicManager::CONS_Abbot_DoEnterCorrOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_DoEnterCorrOtis);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 4;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ params->parameters[3] = param2.intParam;
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_DoEnterCorrOtis(HAND_PARAMS) {
+ if (msg->action == 3) {
+ releaseAtDoor(kCharacterAbbot, getCharacterCurrentParams(kCharacterAbbot)[3]);
+ getCharacter(kCharacterAbbot).characterPosition.position = 6470;
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+
+ getCharacter(kCharacterAbbot).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+ } else if (msg->action == 12) {
+ startSeqOtis(kCharacterAbbot, (char *)&getCharacterCurrentParams(kCharacterAbbot)[0]);
+ blockAtDoor(kCharacterAbbot, getCharacterCurrentParams(kCharacterAbbot)[3]);
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+
+ if (inComp(kCharacterCath, kCarRedSleeping, 6470) || inComp(kCharacterCath, kCarRedSleeping, 6130)) {
+ if (isNight()) {
+ playNIS(kEventCathTurningNight);
+ } else {
+ playNIS(kEventCathTurningDay);
+ }
+
+ playDialog(kCharacterCath, "BUMP", -1, 0);
+ bumpCathFDoor(34);
+ }
+ }
+}
+
+void LogicManager::CONS_Abbot_FinishSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_FinishSeqOtis);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 5;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_FinishSeqOtis(HAND_PARAMS) {
+ if (msg->action == 3 || (msg->action == 0 && getCharacter(kCharacterAbbot).direction != 4)) {
+ getCharacter(kCharacterAbbot).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
+ fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+ }
+}
+
+void LogicManager::CONS_Abbot_DoComplexSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_DoComplexSeqOtis);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 6;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+ strncpy((char *)¶ms->parameters[3], param2.stringParam, 12);
+
+ params->parameters[6] = param3.intParam;
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_DoComplexSeqOtis(HAND_PARAMS) {
+ if (msg->action == 3) {
+ getCharacter(kCharacterAbbot).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+ } else if (msg->action == 12) {
+ startSeqOtis(kCharacterAbbot, (char *)&getCharacterCurrentParams(kCharacterAbbot)[0]);
+ startSeqOtis(getCharacterCurrentParams(kCharacterAbbot)[6], (char *)&getCharacterCurrentParams(kCharacterAbbot)[3]);
+ }
+}
+
+void LogicManager::CONS_Abbot_DoWait(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_DoWait);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 7;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_DoWait(HAND_PARAMS) {
+ if (msg->action == 0) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[1]) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[1] >= _gameTime)
+ return;
+
+ getCharacterCurrentParams(kCharacterAbbot)[1] = 0x7FFFFFFF;
+ } else {
+ getCharacterCurrentParams(kCharacterAbbot)[1] = _gameTime + getCharacterCurrentParams(kCharacterAbbot)[0];
+
+ if (_gameTime + getCharacterCurrentParams(kCharacterAbbot)[0] == 0)
+ return;
+
+ if (getCharacterCurrentParams(kCharacterAbbot)[1] >= _gameTime)
+ return;
+
+ getCharacterCurrentParams(kCharacterAbbot)[1] = 0x7FFFFFFF;
+ }
+
+ getCharacter(kCharacterAbbot).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+ }
+}
+
+void LogicManager::CONS_Abbot_DoWaitReal(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_DoWaitReal);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 8;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_DoWaitReal(HAND_PARAMS) {
+ if (msg->action == 0) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[1]) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[1] >= _currentGameSessionTicks)
+ return;
+
+ getCharacterCurrentParams(kCharacterAbbot)[1] = 0x7FFFFFFF;
+ } else {
+ getCharacterCurrentParams(kCharacterAbbot)[1] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterAbbot)[0];
+
+ if (_currentGameSessionTicks + getCharacterCurrentParams(kCharacterAbbot)[0] == 0)
+ return;
+
+ if (getCharacterCurrentParams(kCharacterAbbot)[1] >= _currentGameSessionTicks)
+ return;
+
+ getCharacterCurrentParams(kCharacterAbbot)[1] = 0x7FFFFFFF;
+ }
+
+ getCharacter(kCharacterAbbot).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+ }
+}
+
+void LogicManager::CONS_Abbot_DoDialog(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_DoDialog);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 9;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_DoDialog(HAND_PARAMS) {
+ if (msg->action == 2) {
+ getCharacter(kCharacterAbbot).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+ } else if (msg->action == 12) {
+ playDialog(kCharacterAbbot, (char *)&getCharacterCurrentParams(kCharacterAbbot)[0], -1, 0);
+ }
+}
+
+void LogicManager::CONS_Abbot_SaveGame(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_SaveGame);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 10;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+ params->parameters[1] = param2.intParam;
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_SaveGame(HAND_PARAMS) {
+ if (msg->action == 0) {
+ getCharacter(kCharacterAbbot).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+ } else if (msg->action == 12) {
+ save(
+ kCharacterAbbot,
+ getCharacterCurrentParams(kCharacterAbbot)[0],
+ getCharacterCurrentParams(kCharacterAbbot)[1]
+ );
+
+ getCharacter(kCharacterAbbot).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+ }
+}
+
+void LogicManager::CONS_Abbot_DoWalk(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_DoWalk);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 11;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+ params->parameters[1] = param2.intParam;
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_DoWalk(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterAbbot, getCharacterCurrentParams(kCharacterAbbot)[0], getCharacterCurrentParams(kCharacterAbbot)[1])) {
+ getCharacter(kCharacterAbbot).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
+ fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+ }
+
+ break;
+ case 5:
+ if (checkCathDir(kCarGreenSleeping, 18) || checkCathDir(kCarRedSleeping, 18)) {
+ playChrExcuseMe(kCharacterAbbot, kCharacterCath, 0);
+ break;
+ }
+
+ if (_gameEvents[kEventAbbotIntroduction]) {
+ playDialog(kCharacterCath, "CAT1013", -1, 0);
+ } else {
+ playCathExcuseMe();
+ }
+
+ break;
+ case 6:
+ playChrExcuseMe(kCharacterAbbot, kCharacterCath, 0);
+ break;
+ case 12:
+ if (walk(kCharacterAbbot, getCharacterCurrentParams(kCharacterAbbot)[0], getCharacterCurrentParams(kCharacterAbbot)[1])) {
+
+ getCharacter(kCharacterAbbot).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
+ fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+ }
+
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_Abbot_DoJoinedSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_DoJoinedSeqOtis);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 12;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ params->parameters[3] = param2.intParam;
+ params->parameters[4] = param3.intParam;
+
+ strncpy((char *)¶ms->parameters[5], param4.stringParam, 12);
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_DoJoinedSeqOtis(HAND_PARAMS) {
+ switch (msg->action) {
+ case 3:
+ if (!getCharacterCurrentParams(kCharacterAbbot)[8])
+ fedEx(kCharacterAbbot, getCharacterCurrentParams(kCharacterAbbot)[3], getCharacterCurrentParams(kCharacterAbbot)[4], getCharacterCurrentParams(kCharacterAbbot)[5]);
+
+ getCharacter(kCharacterAbbot).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
+ fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+
+ break;
+ case 10:
+ if (!getCharacterCurrentParams(kCharacterAbbot)[8]) {
+ fedEx(kCharacterAbbot, getCharacterCurrentParams(kCharacterAbbot)[3], getCharacterCurrentParams(kCharacterAbbot)[4], getCharacterCurrentParams(kCharacterAbbot)[5]);
+ getCharacterCurrentParams(kCharacterAbbot)[8] = 1;
+ }
+
+ break;
+ case 12:
+ startSeqOtis(kCharacterAbbot, (char *)&getCharacterCurrentParams(kCharacterAbbot));
+ break;
+ }
+}
+
+void LogicManager::CONS_Abbot_DoBlockSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_DoBlockSeqOtis);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 13;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ params->parameters[3] = param2.intParam;
+ params->parameters[4] = param3.intParam;
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_DoBlockSeqOtis(HAND_PARAMS) {
+ if (msg->action == 3) {
+ releaseView(kCharacterAbbot, getCharacterCurrentParams(kCharacterAbbot)[3], getCharacterCurrentParams(kCharacterAbbot)[4]);
+ getCharacter(kCharacterAbbot).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
+ fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+ } else if (msg->action == 12) {
+ startSeqOtis(kCharacterAbbot, (char *)&getCharacterCurrentParams(kCharacterAbbot));
+ blockView(kCharacterAbbot, getCharacterCurrentParams(kCharacterAbbot)[3], getCharacterCurrentParams(kCharacterAbbot)[4]);
+ }
+}
+
+void LogicManager::CONS_Abbot_WaitRCClear(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_WaitRCClear);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 14;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_WaitRCClear(HAND_PARAMS) {
+ if ((msg->action == 12 && rcClear()) || (msg->action == 0 && rcClear())) {
+ getCharacter(kCharacterAbbot).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+ }
+}
+
+void LogicManager::CONS_Abbot_Birth(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_Birth);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 15;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_Birth(HAND_PARAMS) {
+ if (msg->action == 12)
+ autoMessage(kCharacterAbbot, 203073664, 0);
+}
+
+void LogicManager::CONS_Abbot_StartPart2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_StartPart2);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 16;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_StartPart2(HAND_PARAMS) {
+ if (msg->action == 12)
+ endGraphics(kCharacterAbbot);
+}
+
+void LogicManager::CONS_Abbot_StartPart3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_StartPart3);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 17;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_StartPart3(HAND_PARAMS) {
+ if (msg->action == 0) {
+ CONS_Abbot_InKitchen(0, 0, 0, 0);
+ } else if (msg->action == 12) {
+ endGraphics(kCharacterAbbot);
+
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+ getCharacter(kCharacterAbbot).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterAbbot).characterPosition.position = 5900;
+ getCharacter(kCharacterAbbot).inventoryItem = 0;
+ getCharacter(kCharacterAbbot).clothes = 0;
+ }
+}
+
+void LogicManager::CONS_Abbot_InKitchen(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_InKitchen);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 18;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_InKitchen(HAND_PARAMS) {
+ if (msg->action == 18) {
+ switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAbbot).characterPosition.position = 5800;
+ getCharacter(kCharacterAbbot).characterPosition.location = 0;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
+
+ AbbotCall(&LogicManager::CONS_Abbot_DoSeqOtis, "804DD", 0, 0, 0);
+
+ break;
+ case 2:
+ send(kCharacterAbbot, kCharacterCook, 236976550, 0);
+ startSeqOtis(kCharacterAbbot, "804DS");
+
+ if (inDiningRoom(kCharacterCath))
+ advanceFrame(kCharacterAbbot);
+
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
+
+ AbbotCall(&LogicManager::CONS_Abbot_FinishSeqOtis, 0, 0, 0, 0);
+
+ break;
+ case 3:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 4;
+
+ AbbotCall(&LogicManager::CONS_Abbot_DoWalk, 4, 6470, 0, 0);
+
+ break;
+ case 4:
+ setDoor(34, kCharacterCath, 1, 255, 255);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 5;
+
+ AbbotCall(&LogicManager::CONS_Abbot_DoCorrOtis, "617AC", 34, 0, 0);
+
+ break;
+ case 5:
+ setDoor(34, kCharacterCath, 2, 255, 255);
+ getCharacter(kCharacterAbbot).characterPosition.position = 6470;
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+
+ CONS_Abbot_OpenComp(0, 0, 0, 0);
+
+ break;
+ default:
+ return;
+ }
+ } else if (msg->action == 192054567) {
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_WaitRCClear, 0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Abbot_OpenComp(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_OpenComp);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 19;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_OpenComp(HAND_PARAMS) {
+ if (msg->action == 0) {
+ if (_gameTime > 1953000 && !getCharacterCurrentParams(kCharacterAbbot)[0]) {
+ getCharacterCurrentParams(kCharacterAbbot)[0] = 1;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "MrB3010", 0, 0, 0);
+ }
+ } else if (msg->action == 12) {
+ startCycOtis(kCharacterAbbot, "508A");
+ send(kCharacterAbbot, kCharacterMonsieur, 122358304, 0);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb3010", 0, 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
+ AbbotCall(&LogicManager::CONS_Abbot_DoWait, 900, 0, 0, 0);
+ break;
+ case 2:
+ startCycOtis(kCharacterAbbot, "508B");
+ break;
+ case 3:
+ send(kCharacterAbbot, kCharacterMonsieur, 122288808, 0);
+ CONS_Abbot_AloneComp(0, 0, 0, 0);
+ break;
+ }
+ }
+}
+
+void LogicManager::CONS_Abbot_AloneComp(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_AloneComp);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 20;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_AloneComp(HAND_PARAMS) {
+ if (msg->action == 0) {
+ if (_gameTime > 1966500 && inDiningRoom(kCharacterMonsieur)) {
+ CONS_Abbot_GoLunch(0, 0, 0, 0);
+ }
+ } else if (msg->action == 12) {
+ startCycOtis(kCharacterAbbot, "509A");
+ }
+}
+
+void LogicManager::CONS_Abbot_GoLunch(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_GoLunch);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 21;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_GoLunch(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_DoSeqOtis, "509B", 0, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
+ case 1:
+ setDoor(34, getCharacter(kCharacterAbbot).currentCall, 0, 10, 9);
+ setDoor(50, getCharacter(kCharacterAbbot).currentCall, 0, 10, 9);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
+ AbbotCall(&LogicManager::CONS_Abbot_DoCorrOtis, "617Mc", 34, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAbbot).characterPosition.location = 0;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
+ AbbotCall(&LogicManager::CONS_Abbot_DoWalk, 5, 850, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 4;
+ AbbotCall(&LogicManager::CONS_Abbot_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterAbbot).characterPosition.position = 1540;
+ getCharacter(kCharacterAbbot).characterPosition.location = 0;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 5;
+ AbbotCall(&LogicManager::CONS_Abbot_DoSeqOtis, "804US", 0, 0, 0);
+ break;
+ case 5:
+ startSeqOtis(kCharacterAbbot, "029J");
+ if (inSalon(kCharacterCath))
+ advanceFrame(kCharacterAbbot);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 6;
+ AbbotCall(&LogicManager::CONS_Abbot_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 6:
+ startCycOtis(kCharacterAbbot, "029H");
+ send(kCharacterAbbot, kCharacterHeadWait, 207769280, 0);
+ break;
+ case 7:
+ CONS_Abbot_EatingLunch(0, 0, 0, 0);
+ break;
+ default:
+ return;
+ }
+ break;
+ case 122288808:
+ send(kCharacterAbbot, kCharacterTableE, 136455232, 0);
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 7;
+ AbbotCall(&LogicManager::CONS_Abbot_DoSeqOtis, "029B", 0, 0, 0);
+ break;
+ }
+}
+
+void LogicManager::CONS_Abbot_EatingLunch(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_EatingLunch);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 22;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_EatingLunch(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1971000 && !getCharacterCurrentParams(kCharacterAbbot)[0]) {
+ getCharacterCurrentParams(kCharacterAbbot)[0] = 1;
+ send(kCharacterAbbot, kCharacterWaiter1, 218586752, 0);
+ }
+
+ if (_gameTime > 1989000 && rcClear()) {
+ getCharacter(kCharacterAbbot).inventoryItem = 0;
+ CONS_Abbot_LeaveLunch(0, 0, 0, 0);
+ }
+
+ break;
+ case 1:
+ getCharacter(kCharacterAbbot).inventoryItem = kItemNone;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, 110, 0, 0);
+ break;
+ case 12:
+ startCycOtis(kCharacterAbbot, "029E");
+
+ if (!_gameEvents[kEventAbbotIntroduction])
+ getCharacter(kCharacterAbbot).inventoryItem = kItemInvalid;
+
+ break;
+ case 18:
+ if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 1) {
+ playNIS(kEventAbbotIntroduction);
+ playDialog(0, "LIB036", -1, 0);
+ bumpCath(kCarRestaurant, 61, 255);
+ }
+
+ break;
+ case 122288808:
+ startCycOtis(kCharacterAbbot, "029E");
+ break;
+ case 122358304:
+ startCycOtis(kCharacterAbbot, "BLANK");
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_Abbot_LeaveLunch(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_LeaveLunch);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 23;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_LeaveLunch(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAbbot).characterPosition.location = 0;
+ blockView(kCharacterAbbot, kCarRestaurant, 67);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_DoJoinedSeqOtis, "029F", 37, 103798704, "029G");
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
+ case 1:
+ releaseView(kCharacterAbbot, kCarRestaurant, 67);
+ send(kCharacterAbbot, kCharacterWaiter1, 270068760, 0);
+ send(kCharacterAbbot, kCharacterAnna, 238936000, 0);
+ startSeqOtis(kCharacterAbbot, "804DS");
+
+ if (inDiningRoom(kCharacterCath))
+ advanceFrame(kCharacterAbbot);
+
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
+ AbbotCall(&LogicManager::CONS_Abbot_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
+ AbbotCall(&LogicManager::CONS_Abbot_DoWalk, 4, 6470, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 4;
+ AbbotCall(&LogicManager::CONS_Abbot_DoEnterCorrOtis, "617Cc", 34, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+ CONS_Abbot_ClosedComp(0, 0, 0, 0);
+ break;
+ default:
+ return;
+ }
+ }
+}
+
+void LogicManager::CONS_Abbot_ClosedComp(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_ClosedComp);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 24;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_ClosedComp(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAbbot)[0] || (getCharacterCurrentParams(kCharacterAbbot)[0] = _gameTime + 900, _gameTime != -900)) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[0] >= _gameTime)
+ return;
+
+ getCharacterCurrentParams(kCharacterAbbot)[0] = 0x7FFFFFFF;
+ }
+
+ CONS_Abbot_GoSalon1(0, 0, 0, 0);
+ break;
+ case 8:
+ case 9:
+ setDoor(34, kCharacterAbbot, 1, 0, 0);
+ setDoor(50, kCharacterAbbot, 1, 0, 0);
+
+ if (msg->action == 8) {
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "LIB012", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "LIB013", 0, 0, 0);
+ }
+
+ break;
+ case 12:
+ endGraphics(kCharacterAbbot);
+ setDoor(34, kCharacterAbbot, 0, 10, 9);
+ setDoor(50, kCharacterAbbot, 0, 10, 9);
+ break;
+ case 18:
+ if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
+ if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] <= 2) {
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb3001", 0, 0, 0);
+ } else if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 3) {
+ setDoor(34, kCharacterAbbot, 1, 10, 9);
+ setDoor(50, kCharacterAbbot, 1, 10, 9);
+ }
+ }
+
+ break;
+ default:
+ return;
+ }
+}
+
+void LogicManager::CONS_Abbot_GoSalon1(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_GoSalon1);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 25;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_GoSalon1(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_DoCorrOtis, "617Dc", 34, 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAbbot).characterPosition.location = 0;
+ setDoor(34, kCharacterCath, 0, 10, 9);
+ setDoor(50, kCharacterCath, 0, 10, 9);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
+ AbbotCall(&LogicManager::CONS_Abbot_DoWalk, 5, 850, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
+ AbbotCall(&LogicManager::CONS_Abbot_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAbbot).characterPosition.position = 1540;
+ getCharacter(kCharacterAbbot).characterPosition.location = 0;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 4;
+ AbbotCall(&LogicManager::CONS_Abbot_DoBlockSeqOtis, "115A", 5, 56, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+ takeItem(kItem3);
+ CONS_Abbot_InSalon(0, 0, 0, 0);
+ break;
+ default:
+ return;
+ }
+ }
+}
+
+void LogicManager::CONS_Abbot_InSalon(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_InSalon);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 26;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_InSalon(HAND_PARAMS) {
+ if (msg->action == 0) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[0]) {
+ if ((!getCharacterCurrentParams(kCharacterAbbot)[1] &&
+ (getCharacterCurrentParams(kCharacterAbbot)[1] = _gameTime + 4500, _gameTime == -4500)) ||
+ getCharacterCurrentParams(kCharacterAbbot)[1] < _gameTime) {
+ if (rcClear())
+ CONS_Abbot_GoComp(0, 0, 0, 0);
+ }
+ }
+ } else if (msg->action == 12) {
+ send(kCharacterAbbot, kCharacterKronos, 157159392, 0);
+ startCycOtis(kCharacterAbbot, "115B");
+ } else if (msg->action == 101169422) {
+ getCharacterCurrentParams(kCharacterAbbot)[0] = 1;
+ }
+}
+
+void LogicManager::CONS_Abbot_GoComp(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_GoComp);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 27;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_GoComp(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_WaitRCClear, 0, 0, 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAbbot).characterPosition.location = 0;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
+ AbbotCall(&LogicManager::CONS_Abbot_DoBlockSeqOtis, "115C", 5, 56, 0);
+ break;
+ case 2:
+ dropItem(kItem3, 1);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
+ AbbotCall(&LogicManager::CONS_Abbot_DoWalk, 4, 6470, 0, 0);
+ break;
+ case 3:
+ setDoor(34, kCharacterCath, 1, 255, 255);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 4;
+ AbbotCall(&LogicManager::CONS_Abbot_DoCorrOtis, "617Ac", 34, 0, 0);
+ break;
+ case 4:
+ setDoor(34, kCharacterCath, 2, 255, 255);
+ getCharacter(kCharacterAbbot).characterPosition.position = 6470;
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+ CONS_Abbot_OpenComp2(0, 0, 0, 0);
+ break;
+ default:
+ return;
+ }
+ }
+}
+
+void LogicManager::CONS_Abbot_OpenComp2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_OpenComp2);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 28;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_OpenComp2(HAND_PARAMS) {
+ if (msg->action == 0) {
+ if (_gameTime > 2052000 && !getCharacterCurrentParams(kCharacterAbbot)[0]) {
+ getCharacterCurrentParams(kCharacterAbbot)[0] = 1;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
+ AbbotCall(&LogicManager::CONS_Abbot_GoWander, 0, 0, 0, 0);
+ }
+ } else if (msg->action == 12) {
+ send(kCharacterAbbot, kCharacterMonsieur, 122358304, 0);
+ startCycOtis(kCharacterAbbot, "508A");
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb3013", 0, 0, 0);
+ } else if (msg->action == 18) {
+ if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 1)
+ startCycOtis(kCharacterAbbot, "508B");
+ } else if (msg->action == 222609266) {
+ CONS_Abbot_GoSalon2(0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Abbot_GoWander(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_GoWander);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 29;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_GoWander(HAND_PARAMS) {
+ if (msg->action == 12) {
+ send(kCharacterAbbot, kCharacterMonsieur, 122288808, 0);
+ setDoor(34, kCharacterCath, 1, 255, 255);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_DoCorrOtis, "617Bc", 34, 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
+ case 1:
+ setDoor(34, kCharacterCath, 2, 255, 255);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
+ AbbotCall(&LogicManager::CONS_Abbot_DoWalk, 4, 9460, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
+ AbbotCall(&LogicManager::CONS_Abbot_DoWaitReal, 450, 0, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 4;
+ AbbotCall(&LogicManager::CONS_Abbot_DoWalk, 3, 540, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 5;
+ AbbotCall(&LogicManager::CONS_Abbot_DoWait, 225, 0, 0, 0);
+ break;
+ case 5:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 6;
+ AbbotCall(&LogicManager::CONS_Abbot_DoWalk, 4, 6470, 0, 0);
+ break;
+ case 6:
+ setDoor(34, kCharacterCath, 1, 255, 255);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 7;
+ AbbotCall(&LogicManager::CONS_Abbot_DoCorrOtis, "617Ac", 34, 0, 0);
+ break;
+ case 7:
+ setDoor(34, kCharacterCath, 2, 255, 255);
+ send(kCharacterAbbot, kCharacterMonsieur, 122358304, 0);
+ startCycOtis(13, "508B");
+
+ getCharacter(kCharacterAbbot).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+ break;
+ default:
+ return;
+ }
+ }
+}
+
+void LogicManager::CONS_Abbot_GoSalon2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_GoSalon2);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 30;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_GoSalon2(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb3030", 0, 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
+ case 1:
+ send(kCharacterAbbot, kCharacterMonsieur, 122288808, 0);
+ setDoor(34, kCharacterCath, 1, 255, 255);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
+ AbbotCall(&LogicManager::CONS_Abbot_DoCorrOtis, "617Bc", 0x22, 0, 0);
+ break;
+ case 2:
+ setDoor(34, kCharacterCath, 2, 255, 255);
+ getCharacter(kCharacterAbbot).characterPosition.location = 0;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
+ AbbotCall(&LogicManager::CONS_Abbot_DoWalk, 5, 850, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 4;
+ AbbotCall(&LogicManager::CONS_Abbot_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterAbbot).characterPosition.position = 1540;
+ getCharacter(kCharacterAbbot).characterPosition.location = 0;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 5;
+ AbbotCall(&LogicManager::CONS_Abbot_DoBlockSeqOtis, "115A", 5, 56, 0);
+ break;
+ case 5:
+ takeItem(kItem3);
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+ CONS_Abbot_InSalon2(0, 0, 0, 0);
+ break;
+ default:
+ return;
+ }
+ }
+}
+
+void LogicManager::CONS_Abbot_InSalon2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_InSalon2);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 31;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_InSalon2(HAND_PARAMS) {
+ if (msg->action) {
+ if (msg->action == 12) {
+ getCharacterCurrentParams(kCharacterAbbot)[1] = _gameTime + 4500;
+ getCharacterCurrentParams(kCharacterAbbot)[2] = _gameTime + 18000;
+ startCycOtis(kCharacterAbbot, "115B");
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAbbot).characterPosition.location = 0;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
+ AbbotCall(&LogicManager::CONS_Abbot_DoBlockSeqOtis, "115E", 5, 56, 0);
+ break;
+ case 2:
+ dropItem(kItem3, 1);
+ send(kCharacterAbbot, kCharacterAlexei, 122358304, 0);
+ playDialog(kCharacterAbbot, "Abb3020", -1, 0);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
+ AbbotCall(&LogicManager::CONS_Abbot_DoBlockSeqOtis, "125A", 5, 52, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+ startCycOtis(kCharacterAbbot, "125B");
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 4;
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb3021", 0, 0, 0);
+ break;
+ case 4:
+ playDialog(kCharacterAbbot, "Abb3023", -1, 0);
+ blockView(kCharacterAbbot, kCarRestaurant, 52);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 5;
+ AbbotCall(&LogicManager::CONS_Abbot_DoComplexSeqOtis, "125C1", "125C2", 12, 0);
+ break;
+ case 5:
+ releaseView(kCharacterAbbot, kCarRestaurant, 52);
+ startCycOtis(kCharacterAbbot, "125D");
+ send(kCharacterAbbot, kCharacterAlexei, 122288808, 0);
+ getCharacterCurrentParams(kCharacterAbbot)[0] = 1;
+ goto LABEL_21;
+ case 6:
+ getCharacter(kCharacterAbbot).characterPosition.location = 0;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 7;
+ AbbotCall(&LogicManager::CONS_Abbot_DoBlockSeqOtis, "125E", 5, 52, 0);
+ break;
+ case 7:
+ CONS_Abbot_GoComp3(0, 0, 0, 0);
+ break;
+ default:
+ return;
+ }
+ }
+
+ return;
+ }
+
+ if (getCharacterCurrentParams(kCharacterAbbot)[3] != 0x7FFFFFFF && getCharacterCurrentParams(kCharacterAbbot)[1] < _gameTime) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[2] < _gameTime)
+ goto LABEL_12;
+
+ if (!inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterAbbot)[3]) {
+ getCharacterCurrentParams(kCharacterAbbot)[3] = _gameTime + 450;
+ if (_gameTime == -450)
+ goto LABEL_13;
+ }
+
+ if (getCharacterCurrentParams(kCharacterAbbot)[3] < _gameTime) {
+ LABEL_12:
+ getCharacterCurrentParams(kCharacterAbbot)[3] = 0x7FFFFFFF;
+ LABEL_13:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_WaitRCClear, 0, 0, 0, 0);
+ return;
+ }
+ }
+
+LABEL_21:
+ if (!getCharacterCurrentParams(kCharacterAbbot)[0])
+ return;
+
+ if (getCharacterCurrentParams(kCharacterAbbot)[4] || (getCharacterCurrentParams(kCharacterAbbot)[4] = _gameTime + 450, _gameTime != -450)) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[4] >= _gameTime)
+ return;
+
+ getCharacterCurrentParams(kCharacterAbbot)[4] = 0x7FFFFFFF;
+ }
+
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 6;
+ AbbotCall(&LogicManager::CONS_Abbot_WaitRCClear, 0, 0, 0, 0);
+}
+
+void LogicManager::CONS_Abbot_GoComp3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_GoComp3);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 32;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_GoComp3(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_DoWalk, 4, 6470, 0, 0);
+ } else if (msg->action == 18) {
+ if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 1) {
+ setDoor(34, kCharacterCath, 1, 255, 255);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
+ AbbotCall(&LogicManager::CONS_Abbot_DoCorrOtis, "617Ac", 34, 0, 0);
+ } else if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 2) {
+ setDoor(34, kCharacterCath, 2, 255, 255);
+ getCharacter(kCharacterAbbot).characterPosition.position = 6470;
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+ send(kCharacterAbbot, kCharacterMonsieur, 122358304, 0);
+ CONS_Abbot_OpenComp3(0, 0, 0, 0);
+ }
+ }
+}
+
+void LogicManager::CONS_Abbot_OpenComp3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_OpenComp3);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 33;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_OpenComp3(HAND_PARAMS) {
+ if (msg->action == 0) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[0] != 0x7FFFFFFF && _gameTime > 2115000) {
+ if (_gameTime <= 2124000) {
+ if (!nearChar(kCharacterAbbot, kCharacterCath, 2000) || !getCharacterCurrentParams(kCharacterAbbot)[0]) {
+ getCharacterCurrentParams(kCharacterAbbot)[0] = _gameTime;
+ if (!_gameTime) {
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb3014", 0, 0, 0);
+ return;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterAbbot)[0] >= _gameTime)
+ return;
+ }
+
+ getCharacterCurrentParams(kCharacterAbbot)[0] = 0x7FFFFFFF;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb3014", 0, 0, 0);
+ }
+ } else if (msg->action == 12) {
+ startCycOtis(kCharacterAbbot, "508A");
+ } else if (msg->action == 18) {
+ if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 1)
+ startCycOtis(kCharacterAbbot, "508B");
+ } else if (msg->action == 123712592) {
+ CONS_Abbot_GoSalon3(0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Abbot_GoSalon3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_GoSalon3);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 34;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_GoSalon3(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb3031", 0, 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
+ case 1:
+ send(kCharacterAbbot, kCharacterMonsieur, 122288808, 0);
+ setDoor(34, kCharacterCath, 1, 255, 255);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
+ AbbotCall(&LogicManager::CONS_Abbot_DoCorrOtis, "617Bc", 34, 0, 0);
+ break;
+ case 2:
+ setDoor(34, kCharacterCath, 2, 255, 255);
+ getCharacter(kCharacterAbbot).characterPosition.location = 0;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
+ AbbotCall(&LogicManager::CONS_Abbot_DoWalk, 5, 850, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 4;
+ AbbotCall(&LogicManager::CONS_Abbot_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterAbbot).characterPosition.position = 1540;
+ getCharacter(kCharacterAbbot).characterPosition.location = 0;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 5;
+ AbbotCall(&LogicManager::CONS_Abbot_DoBlockSeqOtis, "115A", 5, 56, 0);
+ break;
+ case 5:
+ takeItem(kItem3);
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+ CONS_Abbot_InSalon3(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+void LogicManager::CONS_Abbot_InSalon3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_InSalon3);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 35;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_InSalon3(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAbbot)[1] == 0x7FFFFFFF || !_gameTime)
+ return;
+
+ if (getCharacterCurrentParams(kCharacterAbbot)[0] >= _gameTime) {
+ if (!inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterAbbot)[1]) {
+ getCharacterCurrentParams(kCharacterAbbot)[1] = _gameTime + 450;
+ if (_gameTime == -450) {
+ send(kCharacterAbbot, kCharacterAugust, 136196244, 0);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_DoWait, 0, 0, 0, 0);
+ return;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterAbbot)[1] >= _gameTime)
+ return;
+ }
+
+ getCharacterCurrentParams(kCharacterAbbot)[1] = 0x7FFFFFFF;
+ send(kCharacterAbbot, kCharacterAugust, 136196244, 0);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_DoWait, 0, 0, 0, 0);
+ return;
+ case 12:
+ startCycOtis(kCharacterAbbot, "115B");
+ getCharacterCurrentParams(kCharacterAbbot)[0] = _gameTime + 9000;
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
+ AbbotCall(&LogicManager::CONS_Abbot_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAbbot).characterPosition.location = 0;
+ playDialog(kCharacterAbbot, "Abb3040", -1, 45);
+ blockView(kCharacterAbbot, kCarRestaurant, 57);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
+ AbbotCall(&LogicManager::CONS_Abbot_DoJoinedSeqOtis, "121A", 2, 122358304u, "BOGUS");
+ break;
+ case 3:
+ releaseView(kCharacterAbbot, kCarRestaurant, 57);
+ dropItem(kItem3, 1);
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+ CONS_Abbot_WithAugust(0, 0, 0, 0);
+ break;
+ }
+
+ break;
+ }
+}
+
+void LogicManager::CONS_Abbot_WithAugust(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_WithAugust);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 36;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_WithAugust(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ switch (getCharacterCurrentParams(kCharacterAbbot)[1]) {
+ case 1:
+ if (getCharacterCurrentParams(kCharacterAbbot)[2] == 0x7FFFFFFF || !_gameTime)
+ return;
+
+ if (getCharacterCurrentParams(kCharacterAbbot)[0] >= _gameTime) {
+ if (!inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterAbbot)[2]) {
+ getCharacterCurrentParams(kCharacterAbbot)[2] = _gameTime + 675;
+ if (_gameTime == -675) {
+ playDialog(kCharacterAbbot, "Abb3041", -1, 0);
+ return;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterAbbot)[2] >= _gameTime)
+ return;
+ }
+
+ getCharacterCurrentParams(kCharacterAbbot)[2] = 0x7FFFFFFF;
+ playDialog(kCharacterAbbot, "Abb3041", -1, 0);
+ break;
+ case 2:
+ if (getCharacterCurrentParams(kCharacterAbbot)[3] || (getCharacterCurrentParams(kCharacterAbbot)[3] = _gameTime + 900, _gameTime != -900)) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[3] >= _gameTime)
+ return;
+
+ getCharacterCurrentParams(kCharacterAbbot)[3] = 0x7FFFFFFF;
+ }
+
+ playDialog(kCharacterAbbot, "Abb3042", -1, 0);
+ break;
+ case 3:
+ playDialog(kCharacterAbbot, "Abb3043", -1, 0);
+ blockView(kCharacterAbbot, kCarRestaurant, 57);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_DoJoinedSeqOtis, "121D", 2, 122288808, "BOGUS");
+ break;
+ }
+
+ break;
+ case 2:
+ getCharacterCurrentParams(kCharacterAbbot)[1]++;
+ break;
+ case 12:
+ getCharacterCurrentParams(kCharacterAbbot)[0] = _gameTime + 4500;
+ startCycOtis(kCharacterAbbot, "121B");
+ break;
+ case 17:
+ if (checkCathDir(kCarRestaurant, 57)) {
+ bumpCath(kCarRestaurant, 50, 255);
+ }
+
+ break;
+ case 18:
+ if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 1) {
+ releaseView(kCharacterAbbot, kCarRestaurant, 57);
+ CONS_Abbot_GoComp4(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_Abbot_GoComp4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_GoComp4);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 37;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_GoComp4(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_DoWalk, 4, 6470, 0, 0);
+ } else if (msg->action == 18) {
+ if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 1) {
+ setDoor(34, kCharacterCath, 1, 255, 255);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
+ AbbotCall(&LogicManager::CONS_Abbot_DoCorrOtis, "617Ac", 34, 0, 0);
+ } else if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 2) {
+ setDoor(34, kCharacterCath, 2, 255, 255);
+ getCharacter(kCharacterAbbot).characterPosition.position = 6470;
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+ send(kCharacterAbbot, kCharacterMonsieur, 122358304, 0);
+ CONS_Abbot_InComp4(0, 0, 0, 0);
+ }
+ }
+}
+
+void LogicManager::CONS_Abbot_InComp4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_InComp4);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 38;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_InComp4(HAND_PARAMS) {
+ if (msg->action == 12) {
+ startCycOtis(kCharacterAbbot, "508A");
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb3014A", 0, 0, 0);
+ } else if (msg->action == 18) {
+ if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 1) {
+ startCycOtis(kCharacterAbbot, "508B");
+ }
+ }
+}
+
+void LogicManager::CONS_Abbot_StartPart4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_StartPart4);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 39;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_StartPart4(HAND_PARAMS) {
+ if (msg->action == 0) {
+ CONS_Abbot_AtDinner(0, 0, 0, 0);
+ } else if (msg->action == 12) {
+ endGraphics(13);
+ getCharacter(kCharacterAbbot).inventoryItem = 0;
+ getCharacter(kCharacterAbbot).characterPosition.car = kCarRestaurant;
+ getCharacterParams(kCharacterAbbot, 8)[0] = 0;
+ }
+}
+
+void LogicManager::CONS_Abbot_DoWalkSearchingForCath(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_DoWalkSearchingForCath);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 40;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+ params->parameters[1] = param2.intParam;
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_DoWalkSearchingForCath(HAND_PARAMS) {
+ if (msg->action == 0) {
+ if (walk(kCharacterAbbot, getCharacterCurrentParams(kCharacterAbbot)[0], getCharacterCurrentParams(kCharacterAbbot)[1])) {
+ getCharacter(kCharacterAbbot).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
+ fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+ } else if (!_gameEvents[kEventAbbotInvitationDrink] && nearChar(kCharacterAbbot, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
+ if (getCharacter(kCharacterAbbot).characterPosition.car == 3 || getCharacter(kCharacterAbbot).characterPosition.car == 4) {
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, 113, 0, 0);
+ }
+ }
+ } else if (msg->action == 12) {
+ if (walk(kCharacterAbbot, getCharacterCurrentParams(kCharacterAbbot)[0], getCharacterCurrentParams(kCharacterAbbot)[1])) {
+ getCharacter(kCharacterAbbot).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
+ fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+ }
+ } else if (msg->action == 18 && getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 1) {
+ playNIS(kEventAbbotInvitationDrink);
+
+ if (getCharacter(kCharacterAbbot).direction == 1) {
+ bumpCathFx(getCharacter(kCharacterAbbot).characterPosition.car, getCharacter(kCharacterAbbot).characterPosition.position - 750);
+ } else {
+ bumpCathRx(getCharacter(kCharacterAbbot).characterPosition.car, getCharacter(kCharacterAbbot).characterPosition.position + 750);
+ }
+ }
+}
+
+void LogicManager::CONS_Abbot_AtDinner(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_AtDinner);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 41;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_AtDinner(HAND_PARAMS) {
+ if (msg->action == 0) {
+ if (_gameTime > 2358000 && !getCharacterCurrentParams(kCharacterAbbot)[0]) {
+ getCharacterCurrentParams(kCharacterAbbot)[0] = 1;
+ send(kCharacterAbbot, kCharacterWaiter1, 218128129, 0);
+ }
+ if (_gameTime > 2389500) {
+ if (rcClear())
+ CONS_Abbot_LeaveDinner(0, 0, 0, 0);
+ }
+ } else if (msg->action == 12) {
+ send(kCharacterAbbot, kCharacterTableE, 136455232, 0);
+ startCycOtis(kCharacterAbbot, "029E");
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+ } else if (msg->action == 122288808) {
+ startCycOtis(kCharacterAbbot, "029E");
+ } else if (msg->action == 122358304) {
+ startCycOtis(kCharacterAbbot, "BLANK");
+ }
+}
+
+void LogicManager::CONS_Abbot_LeaveDinner(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_LeaveDinner);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 42;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_LeaveDinner(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAbbot).characterPosition.location = 0;
+ blockView(kCharacterAbbot, kCarRestaurant, 67);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_DoJoinedSeqOtis, "029F", 37, 103798704, "029G");
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
+ case 1:
+ releaseView(kCharacterAbbot, kCarRestaurant, 67);
+ send(kCharacterAbbot, kCharacterWaiter1, 270068760, 0);
+ startSeqOtis(kCharacterAbbot, "804DS");
+ if (inDiningRoom(kCharacterCath))
+ advanceFrame(kCharacterAbbot);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
+ AbbotCall(&LogicManager::CONS_Abbot_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
+ AbbotCall(&LogicManager::CONS_Abbot_DoWalk, 4, 6470, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 4;
+ AbbotCall(&LogicManager::CONS_Abbot_DoEnterCorrOtis, "617Cc", 34, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+ endGraphics(kCharacterAbbot);
+ CONS_Abbot_InComp(0, 0, 0, 0);
+ break;
+ default:
+ return;
+ }
+ }
+}
+
+void LogicManager::CONS_Abbot_InComp(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_InComp);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 43;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_InComp(HAND_PARAMS) {
+ if (msg->action > 9) {
+ if (msg->action > 17) {
+ switch (msg->action) {
+ case 18:
+ switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
+ case 1:
+ if (_gameTime > 2466000 && !getCharacterCurrentParams(kCharacterAbbot)[4]) {
+ getCharacterCurrentParams(kCharacterAbbot)[4] = 1;
+ CONS_Abbot_Asleep4(0, 0, 0, 0);
+ return;
+ }
+
+ if (getCharacterCurrentParams(kCharacterAbbot)[2]) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[5] || (getCharacterCurrentParams(kCharacterAbbot)[5] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[5] >= _currentGameSessionTicks)
+ return;
+
+ getCharacterCurrentParams(kCharacterAbbot)[5] = 0x7FFFFFFF;
+ }
+
+ getCharacterCurrentParams(kCharacterAbbot)[2] = 0;
+ getCharacterCurrentParams(kCharacterAbbot)[1] = 1;
+
+ setDoor(34, kCharacterAbbot, 1, 0, 0);
+ setDoor(50, kCharacterAbbot, 1, 0, 0);
+
+ getCharacterCurrentParams(kCharacterAbbot)[5] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterAbbot)[5] = 0;
+ }
+
+ break;
+ case 2:
+ case 3:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 4;
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb3001", 0, 0, 0);
+ break;
+ case 4:
+ setDoor(34, kCharacterAbbot, 1, 14, 0);
+ setDoor(50, kCharacterAbbot, 1, 14, 0);
+ getCharacterCurrentParams(kCharacterAbbot)[2] = 1;
+ break;
+ case 5:
+ case 6:
+ getCharacterCurrentParams(kCharacterAbbot)[2] = 0;
+ getCharacterCurrentParams(kCharacterAbbot)[1] = 1;
+ break;
+ default:
+ return;
+ }
+ break;
+ case 101687594:
+ getCharacterCurrentParams(kCharacterAbbot)[0] = 1;
+ break;
+ case 159003408:
+ getCharacterCurrentParams(kCharacterAbbot)[0] = 0;
+ break;
+ }
+ } else if (msg->action == 17) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[1] || getCharacterCurrentParams(kCharacterAbbot)[2]) {
+ setDoor(34, kCharacterAbbot, 1, 10, 9);
+ setDoor(50, kCharacterAbbot, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterAbbot)[1] = 0;
+ getCharacterCurrentParams(kCharacterAbbot)[2] = 0;
+ }
+ } else if (msg->action == 12) {
+ setDoor(34, kCharacterAbbot, 1, 10, 9);
+ setDoor(50, kCharacterAbbot, 1, 10, 9);
+ }
+ } else if (msg->action >= 8) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[2]) {
+ setDoor(34, kCharacterAbbot, 1, 0, 0);
+ setDoor(50, kCharacterAbbot, 1, 0, 0);
+
+ if (msg->param.intParam == 50) {
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 5;
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, getCathWCDialog(), 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 6;
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, getCathSorryDialog(), 0, 0, 0);
+ }
+ } else {
+ setDoor(34, kCharacterAbbot, 1, 0, 0);
+ setDoor(50, kCharacterAbbot, 1, 0, 0);
+
+ if (msg->action == 8) {
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "LIB012", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "LIB013", 0, 0, 0);
+ }
+ }
+ } else if (msg->action == 0) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[0] && getCharacterCurrentParams(kCharacterAbbot)[3] != 0x7FFFFFFF && _gameTime) {
+ if (_gameTime > 2452500) {
+ getCharacterCurrentParams(kCharacterAbbot)[3] = 0x7FFFFFFF;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb4002", 0, 0, 0);
+ return;
+ }
+
+ if (!nearChar(kCharacterAbbot, kCharacterCath, 1000) || whoRunningDialog(kCharacterMonsieur) || !getCharacterCurrentParams(kCharacterAbbot)[3]) {
+ getCharacterCurrentParams(kCharacterAbbot)[3] = _gameTime;
+
+ if (!_gameTime) {
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb4002", 0, 0, 0);
+ return;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterAbbot)[3] < _gameTime) {
+ getCharacterCurrentParams(kCharacterAbbot)[3] = 0x7FFFFFFF;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb4002", 0, 0, 0);
+ return;
+ }
+ }
+
+ if (_gameTime > 2466000 && !getCharacterCurrentParams(kCharacterAbbot)[4]) {
+ getCharacterCurrentParams(kCharacterAbbot)[4] = 1;
+ CONS_Abbot_Asleep4(0, 0, 0, 0);
+ return;
+ }
+
+ if (getCharacterCurrentParams(kCharacterAbbot)[2]) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[5] || (getCharacterCurrentParams(kCharacterAbbot)[5] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[5] >= _currentGameSessionTicks)
+ return;
+
+ getCharacterCurrentParams(kCharacterAbbot)[5] = 0x7FFFFFFF;
+ }
+
+ getCharacterCurrentParams(kCharacterAbbot)[2] = 0;
+ getCharacterCurrentParams(kCharacterAbbot)[1] = 1;
+
+ setDoor(34, kCharacterAbbot, 1, 0, 0);
+ setDoor(50, kCharacterAbbot, 1, 0, 0);
+
+ getCharacterCurrentParams(kCharacterAbbot)[5] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterAbbot)[5] = 0;
+ }
+ }
+}
+
+void LogicManager::CONS_Abbot_Asleep4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_Asleep4);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 44;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_Asleep4(HAND_PARAMS) {
+
+ if (msg->action == 12) {
+ getCharacter(kCharacterAbbot).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterAbbot).characterPosition.position = 6470;
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+
+ endGraphics(kCharacterAbbot);
+
+ setDoor(34, kCharacterCath, 1, 10, 9);
+ setDoor(50, kCharacterCath, 1, 10, 9);
+ } else if (msg->action == 104060776) {
+ CONS_Abbot_Conferring(0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Abbot_Conferring(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_Conferring);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 45;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_Conferring(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAbbot).characterPosition.position = 6471;
+ getCharacter(kCharacterAbbot).characterPosition.location = 0;
+ getCharacter(kCharacterAbbot).characterPosition.car = kCarRedSleeping;
+
+ forceJump(kCharacterTrainM, &LogicManager::CONS_TrainM_Conferring);
+ startCycOtis(kCharacterAbbot, "617Ec");
+ softBlockAtDoor(kCharacterAbbot, 34);
+
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb4010", 0, 0, 0);
+ } else if (msg->action == 18) {
+ if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 1) {
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
+ AbbotCall(&LogicManager::CONS_Abbot_DoCorrOtis, "617Kc", 34, 0, 0);
+ } else if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 2) {
+ softReleaseAtDoor(kCharacterAbbot, 34);
+ send(kCharacterAbbot, kCharacterTrainM, 125233040, 0);
+
+ CONS_Abbot_GoSalon4(0, 0, 0, 0);
+ }
+ }
+}
+
+void LogicManager::CONS_Abbot_GoSalon4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_GoSalon4);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 46;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_GoSalon4(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAbbot).characterPosition.position = 6471;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_DoWalkSearchingForCath, 5, 850, 0, 0);
+ } else if (msg->action == 18) {
+ if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 1) {
+ CONS_Abbot_BeforeBomb(0, 0, 0, 0);
+ }
+ }
+}
+
+void LogicManager::CONS_Abbot_BeforeBomb(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_BeforeBomb);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 47;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_BeforeBomb(HAND_PARAMS) {
+ switch (msg->action) {
+ case 1:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
+ AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, 114, 0, 0);
+ break;
+ case 12:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAbbot).characterPosition.position = 1540;
+ getCharacter(kCharacterAbbot).characterPosition.location = 0;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
+ AbbotCall(&LogicManager::CONS_Abbot_DoSeqOtis, "126A", 0, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+ startCycOtis(kCharacterAbbot, "126B");
+ getCharacter(kCharacterAbbot).inventoryItem = 16;
+ break;
+ case 3:
+ playNIS(kEventAbbotDrinkGiveDetonator);
+ endGame(0, 1, 0, true);
+ break;
+ }
+
+ break;
+ }
+}
+
+void LogicManager::CONS_Abbot_AfterBomb(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_AfterBomb);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 48;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_AfterBomb(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (getCharacterParams(kCharacterAbbot, 8)[0])
+ getCharacter(kCharacterAbbot).inventoryItem = kItemInvalid;
+
+ if (!getCharacterCurrentParams(kCharacterAbbot)[0]) {
+ getCharacterCurrentParams(kCharacterAbbot)[0] = _gameTime + 1800;
+
+ if (_gameTime == -1800) {
+ getCharacter(kCharacterAbbot).inventoryItem = 0;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 4;
+ AbbotCall(&LogicManager::CONS_Abbot_DoBlockSeqOtis, "126C", 5, 52, 0);
+ return;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterAbbot)[0] < _gameTime) {
+ getCharacterCurrentParams(kCharacterAbbot)[0] = 0x7FFFFFFF;
+ getCharacter(kCharacterAbbot).inventoryItem = 0;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 4;
+ AbbotCall(&LogicManager::CONS_Abbot_DoBlockSeqOtis, "126C", 5, 52, 0);
+ } else if (_gameTime > 2533500 && !getCharacterCurrentParams(kCharacterAbbot)[1]) {
+ getCharacterCurrentParams(kCharacterAbbot)[1] = 1;
+ getCharacter(kCharacterAbbot).inventoryItem = 0;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 5;
+ AbbotCall(&LogicManager::CONS_Abbot_WaitRCClear, 0, 0, 0, 0);
+ }
+
+ break;
+ case 1:
+ getCharacter(kCharacterAbbot).inventoryItem = 0;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 9;
+ AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, 117, 0, 0);
+ break;
+ case 12:
+ getCharacter(kCharacterAbbot).characterPosition.position = 850;
+ getCharacter(kCharacterAbbot).characterPosition.location = 0;
+ getCharacter(kCharacterAbbot).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterAbbot).inventoryItem = 0;
+ send(kCharacterAbbot, kCharacterTrainM, 125233040, 0);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_DoWalk, 5, 850, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
+ AbbotCall(&LogicManager::CONS_Abbot_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAbbot).characterPosition.position = 1540;
+ getCharacter(kCharacterAbbot).characterPosition.location = 0;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
+ AbbotCall(&LogicManager::CONS_Abbot_DoBlockSeqOtis, "126A", 5, 52, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+ startCycOtis(13, "126B");
+ break;
+ case 4:
+ if (!_gameEvents[kEventAbbotDrinkDefuse] && getCharacterParams(kCharacterAbbot, 8)[0])
+ getCharacter(kCharacterAbbot).inventoryItem = kItemInvalid;
+
+ startCycOtis(kCharacterAbbot, "126B");
+ getCharacterCurrentParams(kCharacterAbbot)[0] = 0;
+
+ if (_gameTime > 2533500 && !getCharacterCurrentParams(kCharacterAbbot)[1]) {
+ getCharacterCurrentParams(kCharacterAbbot)[1] = 1;
+ getCharacter(kCharacterAbbot).inventoryItem = 0;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 5;
+ AbbotCall(&LogicManager::CONS_Abbot_WaitRCClear, 0, 0, 0, 0);
+ }
+
+ break;
+ case 5:
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 6;
+ AbbotCall(&LogicManager::CONS_Abbot_DoBlockSeqOtis, "126D", 5, 52, 0);
+ break;
+ case 6:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 7;
+ AbbotCall(&LogicManager::CONS_Abbot_DoWalk, 4, 6470, 0, 0);
+ break;
+ case 7:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 8;
+ AbbotCall(&LogicManager::CONS_Abbot_DoEnterCorrOtis, "617Cc", 34, 0, 0);
+ break;
+ case 8:
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+ endGraphics(kCharacterAbbot);
+ CONS_Abbot_Asleep4(0, 0, 0, 0);
+ break;
+ case 9:
+ playNIS(kEventAbbotDrinkDefuse);
+ startCycOtis(kCharacterAbbot, "126B");
+ send(kCharacterAbbot, kCharacterAnna, 100969180, 0);
+ bumpCath(kCarRestaurant, 58, 255);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_Abbot_CatchCath(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_CatchCath);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 49;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_CatchCath(HAND_PARAMS) {
+ if (msg->action == 0) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[0] || (getCharacterCurrentParams(kCharacterAbbot)[0] = _currentGameSessionTicks + 150, _currentGameSessionTicks != -150)) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[0] >= _currentGameSessionTicks)
+ return;
+
+ getCharacterCurrentParams(kCharacterAbbot)[0] = 0x7FFFFFFF;
+ }
+
+ send(kCharacterAbbot, kCharacterAbbot, 157489665, 0);
+ } else if (msg->action == 8) {
+ if (!cathRunningDialog("LIB012"))
+ playDialog(0, "LIB012", -1, 0);
+ } else if (msg->action == 9) {
+ send(kCharacterAbbot, kCharacterTatiana, 238790488, 0);
+ setDoor(2, kCharacterCath, 0, 10, 9);
+ setDoor(18, kCharacterCath, 0, 10, 9);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, 111, 0, 0);
+ } else if (msg->action == 12) {
+ getCharacter(kCharacterAbbot).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterAbbot).characterPosition.position = 7500;
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+ fedEx(kCharacterAbbot, kCharacterTableE, 103798704, "029G");
+ send(kCharacterAbbot, kCharacterWaiter1, 270068760, 0);
+ send(kCharacterAbbot, kCharacterMonsieur, 125039808, 0);
+ setDoor(2, kCharacterAbbot, 1, 10, 9);
+ setDoor(18, kCharacterAbbot, 1, 10, 9);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
+ case 1:
+ if (getModel(2) == 1) {
+ playNIS(kEventAbbotWrongCompartmentBed);
+ } else {
+ playNIS(kEventAbbotWrongCompartment);
+ }
+
+ walk(kCharacterAbbot, kCarRedSleeping, 6470u);
+ playDialog(0, "LIB015", -1, 0);
+ bumpCathFDoor(2);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
+ AbbotCall(&LogicManager::CONS_Abbot_DoWalk, 4, 6470, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
+ AbbotCall(&LogicManager::CONS_Abbot_DoEnterCorrOtis, "617Cc", 34, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+ endGraphics(kCharacterAbbot);
+ setDoor(34, kCharacterAbbot, 1, 10, 9);
+ CONS_Abbot_InComp(0, 0, 0, 0);
+ break;
+ }
+ } else if (msg->action == 157489665) {
+ send(kCharacterAbbot, kCharacterTatiana, 238790488, 0);
+ setDoor(2, kCharacterCath, 0, 10, 9);
+ setDoor(18, kCharacterCath, 0, 10, 9);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, 111, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Abbot_StartPart5(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_StartPart5);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 50;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_StartPart5(HAND_PARAMS) {
+ if (msg->action == 0) {
+ CONS_Abbot_Prisoner(0, 0, 0, 0);
+ } else if (msg->action == 12) {
+ endGraphics(kCharacterAbbot);
+
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+ getCharacter(kCharacterAbbot).characterPosition.position = 3969;
+ getCharacter(kCharacterAbbot).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterAbbot).inventoryItem = 0;
+ getCharacter(kCharacterAbbot).clothes = 0;
+ }
+}
+
+void LogicManager::CONS_Abbot_Prisoner(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_Prisoner);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 51;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_Prisoner(HAND_PARAMS) {
+ if (msg->action == 70549068)
+ CONS_Abbot_Free(0, 0, 0, 0);
+}
+
+void LogicManager::CONS_Abbot_Free(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_Free);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 52;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_Free(HAND_PARAMS) {
+ if (msg->action == 12) {
+ endGraphics(kCharacterAbbot);
+ getCharacter(kCharacterAbbot).characterPosition.car = kCarNone;
+ getCharacter(kCharacterAbbot).characterPosition.position = 0;
+ getCharacter(kCharacterAbbot).characterPosition.location = 0;
+ } else if (msg->action == 135600432) {
+ CONS_Abbot_RunningTrain(0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Abbot_RunningTrain(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_Abbot_RunningTrain);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 53;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_Abbot_RunningTrain(HAND_PARAMS) {
+ if (msg->action == 12) {
+ dropItem(kItem25, 1);
+ send(kCharacterAbbot, kCharacterAnna, 158480160, 0);
+ } else if (msg->action == 18) {
+ if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 1) {
+ playNIS(kEventLocomotiveAbbotGetSomeRest);
+ cleanNIS();
+ } else if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 2) {
+ playNIS(kEventLocomotiveAbbotShoveling);
+ cleanNIS();
+ }
+ } else if (msg->action == 168646401) {
+ if (!_gameEvents[kEventLocomotiveAbbotGetSomeRest]) {
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, 194, 0, 0);
+ } else if (!_gameEvents[kEventLocomotiveAbbotShoveling]) {
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
+ AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, 195, 0, 0);
+ } else {
+ playNIS(kEventLocomotiveAbbotShoveling);
+ cleanNIS();
+ }
+ }
+}
+
+void (LogicManager::*LogicManager::_functionsAbbot[])(HAND_PARAMS) = {
+ nullptr,
+ &LogicManager::HAND_Abbot_DebugWalks,
+ &LogicManager::HAND_Abbot_DoSeqOtis,
+ &LogicManager::HAND_Abbot_DoCorrOtis,
+ &LogicManager::HAND_Abbot_DoEnterCorrOtis,
+ &LogicManager::HAND_Abbot_FinishSeqOtis,
+ &LogicManager::HAND_Abbot_DoComplexSeqOtis,
+ &LogicManager::HAND_Abbot_DoWait,
+ &LogicManager::HAND_Abbot_DoWaitReal,
+ &LogicManager::HAND_Abbot_DoDialog,
+ &LogicManager::HAND_Abbot_SaveGame,
+ &LogicManager::HAND_Abbot_DoWalk,
+ &LogicManager::HAND_Abbot_DoJoinedSeqOtis,
+ &LogicManager::HAND_Abbot_DoBlockSeqOtis,
+ &LogicManager::HAND_Abbot_WaitRCClear,
+ &LogicManager::HAND_Abbot_Birth,
+ &LogicManager::HAND_Abbot_StartPart2,
+ &LogicManager::HAND_Abbot_StartPart3,
+ &LogicManager::HAND_Abbot_InKitchen,
+ &LogicManager::HAND_Abbot_OpenComp,
+ &LogicManager::HAND_Abbot_AloneComp,
+ &LogicManager::HAND_Abbot_GoLunch,
+ &LogicManager::HAND_Abbot_EatingLunch,
+ &LogicManager::HAND_Abbot_LeaveLunch,
+ &LogicManager::HAND_Abbot_ClosedComp,
+ &LogicManager::HAND_Abbot_GoSalon1,
+ &LogicManager::HAND_Abbot_InSalon,
+ &LogicManager::HAND_Abbot_GoComp,
+ &LogicManager::HAND_Abbot_OpenComp2,
+ &LogicManager::HAND_Abbot_GoWander,
+ &LogicManager::HAND_Abbot_GoSalon2,
+ &LogicManager::HAND_Abbot_InSalon2,
+ &LogicManager::HAND_Abbot_GoComp3,
+ &LogicManager::HAND_Abbot_OpenComp3,
+ &LogicManager::HAND_Abbot_GoSalon3,
+ &LogicManager::HAND_Abbot_InSalon3,
+ &LogicManager::HAND_Abbot_WithAugust,
+ &LogicManager::HAND_Abbot_GoComp4,
+ &LogicManager::HAND_Abbot_InComp4,
+ &LogicManager::HAND_Abbot_StartPart4,
+ &LogicManager::HAND_Abbot_DoWalkSearchingForCath,
+ &LogicManager::HAND_Abbot_AtDinner,
+ &LogicManager::HAND_Abbot_LeaveDinner,
+ &LogicManager::HAND_Abbot_InComp,
+ &LogicManager::HAND_Abbot_Asleep4,
+ &LogicManager::HAND_Abbot_Conferring,
+ &LogicManager::HAND_Abbot_GoSalon4,
+ &LogicManager::HAND_Abbot_BeforeBomb,
+ &LogicManager::HAND_Abbot_AfterBomb,
+ &LogicManager::HAND_Abbot_CatchCath,
+ &LogicManager::HAND_Abbot_StartPart5,
+ &LogicManager::HAND_Abbot_Prisoner,
+ &LogicManager::HAND_Abbot_Free,
+ &LogicManager::HAND_Abbot_RunningTrain
+};
+
+
+} // End of namespace LastExpress
diff --git a/engines/lastexpress/characters/alexei.cpp b/engines/lastexpress/characters/alexei.cpp
new file mode 100644
index 00000000000..acde40960d4
--- /dev/null
+++ b/engines/lastexpress/characters/alexei.cpp
@@ -0,0 +1,2190 @@
+/* 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"
+#include "lastexpress/game/logic.h"
+
+namespace LastExpress {
+
+void LogicManager::CONS_Alexei(int chapter) {
+ switch (chapter) {
+ case 0:
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterAlexei,
+ _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]
+ );
+
+ break;
+ case 1:
+ CONS_Alexei_Birth(0, 0, 0, 0);
+ break;
+ case 2:
+ CONS_Alexei_StartPart2(0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_Alexei_StartPart3(0, 0, 0, 0);
+ break;
+ case 4:
+ CONS_Alexei_StartPart4(0, 0, 0, 0);
+ break;
+ case 5:
+ CONS_Alexei_StartPart5(0, 0, 0, 0);
+ break;
+ default:
+ return;
+ }
+}
+
+void LogicManager::AlexeiCall(CALL_PARAMS) {
+ getCharacter(kCharacterAlexei).currentCall++;
+
+ (this->*functionPointer)(param1, param2, param3, param4);
+}
+
+void LogicManager::CONS_Alexei_DebugWalks(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_DebugWalks);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 1;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_DebugWalks(HAND_PARAMS) {
+ if (msg->action) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAlexei).characterPosition.position = 0;
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ getCharacter(kCharacterAlexei).characterPosition.car = kCarGreenSleeping;
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 10000;
+ }
+ } else if (walk(kCharacterAlexei, kCarGreenSleeping, getCharacterCurrentParams(kCharacterAlexei)[0])) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[0] == 10000)
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 0;
+ else
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 10000;
+ }
+}
+
+void LogicManager::CONS_Alexei_DoDialog(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_DoDialog);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 2;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_DoDialog(HAND_PARAMS) {
+ if (msg->action == 2) {
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ } else if (msg->action == 12) {
+ playDialog(kCharacterAlexei, (char *)&getCharacterCurrentParams(kCharacterAlexei)[0], -1, 0);
+ }
+}
+
+void LogicManager::CONS_Alexei_DoWait(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_DoWait);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 3;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_DoWait(HAND_PARAMS) {
+ if (msg->action == 0) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[1] ||
+ (getCharacterCurrentParams(kCharacterAlexei)[1] = _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0], _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0] != 0)) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[1] >= _gameTime)
+ return;
+
+ getCharacterCurrentParams(kCharacterAlexei)[1] = 0x7FFFFFFF;
+ }
+
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ }
+}
+
+void LogicManager::CONS_Alexei_DoSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_DoSeqOtis);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 4;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_DoSeqOtis(HAND_PARAMS) {
+ if (msg->action == 3) {
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ } else if (msg->action == 12) {
+ startSeqOtis(kCharacterAlexei, (char *)&getCharacterCurrentParams(kCharacterAlexei)[0]);
+ }
+}
+
+void LogicManager::CONS_Alexei_DoBlockSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_DoBlockSeqOtis);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 5;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ params->parameters[3] = param2.intParam;
+ params->parameters[4] = param3.intParam;
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_DoBlockSeqOtis(HAND_PARAMS) {
+ if (msg->action == 3) {
+ releaseView(kCharacterAlexei, getCharacterCurrentParams(kCharacterAlexei)[3], getCharacterCurrentParams(kCharacterAlexei)[4]);
+
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ } else if (msg->action == 12) {
+ startSeqOtis(kCharacterAlexei, (char *)&getCharacterCurrentParams(kCharacterAlexei)[0]);
+ blockView(kCharacterAlexei, getCharacterCurrentParams(kCharacterAlexei)[3], getCharacterCurrentParams(kCharacterAlexei)[4]);
+ }
+}
+
+void LogicManager::CONS_Alexei_DoCorrOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_DoCorrOtis);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 6;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ params->parameters[3] = param2.intParam;
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_DoCorrOtis(HAND_PARAMS) {
+ if (msg->action == 3) {
+ releaseAtDoor(kCharacterAlexei, getCharacterCurrentParams(kCharacterAlexei)[3]);
+
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ } else if (msg->action == 12) {
+ startSeqOtis(kCharacterAlexei, (char *)&getCharacterCurrentParams(kCharacterAlexei)[0]);
+ blockAtDoor(kCharacterAlexei, getCharacterCurrentParams(kCharacterAlexei)[3]);
+ }
+}
+
+void LogicManager::CONS_Alexei_FinishSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_FinishSeqOtis);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 7;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_FinishSeqOtis(HAND_PARAMS) {
+ if (msg->action == 0) {
+ if (getCharacter(kCharacterAlexei).direction == 4)
+ return;
+ goto LABEL_5;
+ }
+ if (msg->action == 3) {
+ LABEL_5:
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ }
+}
+
+void LogicManager::CONS_Alexei_DoJoinedSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_DoJoinedSeqOtis);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 8;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ params->parameters[3] = param2.intParam;
+ params->parameters[4] = param3.intParam;
+
+ strncpy((char *)¶ms->parameters[5], param4.stringParam, 12);
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_DoJoinedSeqOtis(HAND_PARAMS) {
+ switch (msg->action) {
+ case 3:
+ if (!getCharacterCurrentParams(kCharacterAlexei)[8])
+ fedEx(kCharacterAlexei, getCharacterCurrentParams(kCharacterAlexei)[3], getCharacterCurrentParams(kCharacterAlexei)[4], (char *)&getCharacterCurrentParams(kCharacterAlexei)[5]);
+
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ break;
+ case 10:
+ if (!getCharacterCurrentParams(kCharacterAlexei)[8]) {
+ fedEx(kCharacterAlexei, getCharacterCurrentParams(kCharacterAlexei)[3], getCharacterCurrentParams(kCharacterAlexei)[4], (char *)&getCharacterCurrentParams(kCharacterAlexei)[5]);
+ getCharacterCurrentParams(kCharacterAlexei)[8] = 1;
+ }
+ break;
+ case 12:
+ startSeqOtis(kCharacterAlexei, (char *)&getCharacterCurrentParams(kCharacterAlexei)[0]);
+ break;
+ }
+}
+
+void LogicManager::CONS_Alexei_SaveGame(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_SaveGame);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 9;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+ params->parameters[1] = param2.intParam;
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_SaveGame(HAND_PARAMS) {
+ if (msg->action) {
+ if (msg->action == 12) {
+ save(
+ kCharacterAlexei,
+ getCharacterCurrentParams(kCharacterAlexei)[0],
+ getCharacterCurrentParams(kCharacterAlexei)[1]
+ );
+
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ }
+ } else {
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ }
+}
+
+void LogicManager::CONS_Alexei_DoWalk(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_DoWalk);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 10;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+ params->parameters[1] = param2.intParam;
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_DoWalk(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterAlexei, getCharacterCurrentParams(kCharacterAlexei)[0], getCharacterCurrentParams(kCharacterAlexei)[1]))
+ goto LABEL_16;
+ break;
+ case 5:
+ if (checkCathDir(kCarGreenSleeping, 18) || checkCathDir(kCarRedSleeping, 18))
+ goto LABEL_14;
+ if (_gameEvents[kEventAlexeiSalonVassili] || _gameEvents[kEventTatianaAskMatchSpeakRussian] && cathHasItem(kItemPassengerList)) {
+ if (rnd(2) == 0) {
+ playDialog(kCharacterCath, "CAT1012A", -1, 0);
+ } else {
+ playDialog(kCharacterCath, "CAT1012", -1, 0);
+ }
+ } else {
+ playCathExcuseMe();
+ }
+ break;
+ case 6:
+ LABEL_14:
+ playChrExcuseMe(kCharacterAlexei, kCharacterCath, 0);
+ break;
+ case 12:
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ if (walk(kCharacterAlexei, getCharacterCurrentParams(kCharacterAlexei)[0], getCharacterCurrentParams(kCharacterAlexei)[1])) {
+ LABEL_16:
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ }
+ break;
+ default:
+ return;
+ }
+}
+
+void LogicManager::CONS_Alexei_DoComplexSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_DoComplexSeqOtis);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 11;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_DoComplexSeqOtis(HAND_PARAMS) {
+ if (msg->action == 3) {
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ } else if (msg->action == 12) {
+ startSeqOtis(kCharacterAlexei, (char *)&getCharacterCurrentParams(kCharacterAlexei)[0]);
+ startSeqOtis(getCharacterCurrentParams(kCharacterAlexei)[6], (char *)&getCharacterCurrentParams(kCharacterAlexei)[3]);
+ }
+}
+
+void LogicManager::CONS_Alexei_WaitRCClear(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_WaitRCClear);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 12;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_WaitRCClear(HAND_PARAMS) {
+ if (msg->action == 0) {
+ if (!rcClear())
+ return;
+ goto LABEL_7;
+ }
+ if (msg->action == 12 && rcClear()) {
+ LABEL_7:
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ }
+}
+
+void LogicManager::CONS_Alexei_EnterComp(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_EnterComp);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 13;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_EnterComp(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoWalk, 3, 7500, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
+ send(kCharacterAlexei, kCharacterCond1, 302614416, 0);
+ startCycOtis(kCharacterAlexei, "602DB");
+ softBlockAtDoor(kCharacterAlexei, 2);
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ if (inComp(kCharacterCath, kCarGreenSleeping, 7500)) {
+ playNIS((kEventCathTurningNight - !isNight()));
+ playDialog(0, "BUMP", -1, 0);
+ bumpCathFDoor(2);
+ }
+ } else if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 2) {
+ softReleaseAtDoor(kCharacterAlexei, 2);
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ getCharacter(kCharacterAlexei).characterPosition.position = 7500;
+ endGraphics(kCharacterAlexei);
+
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ }
+ break;
+ case 135664192:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoCorrOtis, "602Eb", 2, 0, 0);
+ break;
+ }
+}
+
+void LogicManager::CONS_Alexei_ExitComp(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_ExitComp);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 14;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_ExitComp(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoCorrOtis, "602Fb", 2, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ send(kCharacterAlexei, kCharacterCond1, 302614416, 0);
+ startCycOtis(kCharacterAlexei, "602DB");
+ softBlockAtDoor(kCharacterAlexei, 2);
+ }
+ break;
+ case 135664192:
+ setDoor(2, 0, 1, 10, 9);
+ softReleaseAtDoor(kCharacterAlexei, 2);
+
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ break;
+ }
+}
+
+void LogicManager::CONS_Alexei_PacingAtWindow(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_PacingAtWindow);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 15;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_PacingAtWindow(HAND_PARAMS) {
+ if (msg->action) {
+ if (msg->action == 12) {
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 5 * (3 * rnd(60) + 90);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_WaitRCClear, 0, 0, 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoBlockSeqOtis, "103C", 5, 0x34, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ startCycOtis(kCharacterAlexei, "103E");
+ break;
+ case 3:
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ startCycOtis(kCharacterAlexei, "103B");
+
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ break;
+ }
+ }
+ } else if (!getCharacterCurrentParams(kCharacterAlexei)[1] &&
+ (getCharacterCurrentParams(kCharacterAlexei)[1] = _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0], _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0] == 0) ||
+ getCharacterCurrentParams(kCharacterAlexei)[1] < _gameTime) {
+ if (rcClear()) {
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoBlockSeqOtis, "103D", 5, 52, 0);
+ }
+ }
+}
+
+void LogicManager::CONS_Alexei_CompLogic(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_CompLogic);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 16;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+
+ strncpy((char *)¶ms->parameters[1], param2.stringParam, 12);
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_CompLogic(HAND_PARAMS) {
+ if (msg->action > 9) {
+ if (msg->action > 17) {
+ switch (msg->action) {
+ case 18:
+ switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
+ case 1:
+ case 2:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoDialog, "ALX1134A", 0, 0, 0);
+ break;
+ case 3:
+ setDoor(2, 12, 1, 14, 0);
+ setDoor(18, 12, 1, 14, 0);
+ getCharacterCurrentParams(kCharacterAlexei)[4] = 1;
+ break;
+ case 4:
+ case 5:
+ case 6:
+ getCharacterCurrentParams(kCharacterAlexei)[4] = 0;
+ getCharacterCurrentParams(kCharacterAlexei)[5] = 1;
+ break;
+ case 7:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 8;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoWait, 0x12C, 0, 0, 0);
+ break;
+ case 8:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 9;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoCorrOtis, "602Gb", 2, 0, 0);
+ break;
+ case 9:
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ send(kCharacterAlexei, kCharacterCond1, 156567128, 0);
+ startCycOtis(kCharacterAlexei, "602Hb");
+ softBlockAtDoor(kCharacterAlexei, 2);
+ break;
+ case 10:
+ softReleaseAtDoor(kCharacterAlexei, 2);
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ getCharacter(kCharacterAlexei).characterPosition.position = 7500;
+ startCycOtis(kCharacterAlexei, (char *)&getCharacterCurrentParams(kCharacterAlexei)[1]);
+ setDoor(2, 12, 1, 10, 9);
+ setDoor(18, 12, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterAlexei)[6] = 0;
+ break;
+ default:
+ return;
+ }
+ break;
+ case 124697504:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 10;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoCorrOtis, "602Ib", 2, 0, 0);
+ break;
+ case 221617184:
+ getCharacterCurrentParams(kCharacterAlexei)[6] = 1;
+ send(kCharacterAlexei, kCharacterCond1, 100906246, 0);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 7;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoDialog, "CON1024", 0, 0, 0);
+ break;
+ }
+ } else if (msg->action == 17) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[5] || getCharacterCurrentParams(kCharacterAlexei)[4]) {
+ setDoor(2, 12, 1, 10, 9);
+ setDoor(18, 12, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterAlexei)[5] = 0;
+ getCharacterCurrentParams(kCharacterAlexei)[4] = 0;
+ }
+ } else if (msg->action == 12) {
+ startCycOtis(kCharacterAlexei, (char *)&getCharacterCurrentParams(kCharacterAlexei)[1]);
+ setDoor(2, 12, 1, 10, 9);
+ setDoor(18, 12, 1, 10, 9);
+ }
+ } else if (msg->action >= 8) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[4]) {
+ setDoor(2, 12, 1, 0, 0);
+ setDoor(18, 12, 1, 0, 0);
+ if (msg->param.intParam == 18) {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 4;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoDialog, getCathWCDialog(), 0, 0, 0);
+ } else if (cathHasItem(kItemPassengerList)) {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 5;
+
+ if (rnd(2) != 0) {
+ AlexeiCall(&LogicManager::CONS_Alexei_DoDialog, getCathSorryDialog(), 0, 0, 0);
+ } else {
+ AlexeiCall(&LogicManager::CONS_Alexei_DoDialog, "CAT1503", 0, 0, 0);
+ }
+ } else {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 6;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoDialog, getCathSorryDialog(), 0, 0, 0);
+ }
+ } else {
+ setDoor(2, 12, 1, 0, 0);
+ setDoor(18, 12, 1, 0, 0);
+ if (msg->action == 8) {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoDialog, "LIB012", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoDialog, "LIB013", 0, 0, 0);
+ }
+ }
+ } else if (msg->action == 0) {
+ if (!getCharacterCurrentParams(kCharacterAlexei)[6] && getCharacterCurrentParams(kCharacterAlexei)[0] < _gameTime && !getCharacterCurrentParams(kCharacterAlexei)[7]) {
+ getCharacterCurrentParams(kCharacterAlexei)[7] = 1;
+ setDoor(2, 0, 1, 10, 9);
+ setDoor(18, 0, 1, 10, 9);
+
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ return;
+ }
+ if (getCharacterCurrentParams(kCharacterAlexei)[4]) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[8] || (getCharacterCurrentParams(kCharacterAlexei)[8] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[8] >= _currentGameSessionTicks)
+ return;
+ getCharacterCurrentParams(kCharacterAlexei)[8] = 0x7FFFFFFF;
+ }
+ getCharacterCurrentParams(kCharacterAlexei)[4] = 0;
+ getCharacterCurrentParams(kCharacterAlexei)[5] = 1;
+ setDoor(2, 12, 1, 0, 0);
+ setDoor(18, 12, 1, 0, 0);
+ getCharacterCurrentParams(kCharacterAlexei)[8] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterAlexei)[8] = 0;
+ }
+ }
+}
+
+void LogicManager::CONS_Alexei_Birth(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_Birth);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 17;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_Birth(HAND_PARAMS) {
+ if (msg->action) {
+ if (msg->action == 12) {
+ setDoor(2, 0, 1, 10, 9);
+ setDoor(10, 0, 0, 255, 255);
+ setDoor(18, 0, 1, 10, 9);
+ getCharacter(kCharacterAlexei).characterPosition.position = 3969;
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ getCharacter(kCharacterAlexei).characterPosition.car = 5;
+ }
+ } else if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterAlexei)[0]) {
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 1;
+ CONS_Alexei_AtDinner(0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Alexei_AtDinner(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_AtDinner);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 18;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_AtDinner(HAND_PARAMS) {
+ if (msg->action > 12) {
+ if (msg->action > 168046720) {
+ if (msg->action == 168627977) {
+ getCharacter(kCharacterAlexei).inventoryItem = getCharacterCurrentParams(kCharacterAlexei)[1];
+ } else if (msg->action == 225182640) {
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ }
+ } else {
+ switch (msg->action) {
+ case 168046720:
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ break;
+ case 17:
+ getCharacterCurrentParams(kCharacterAlexei)[0] = checkCathDir(kCarRestaurant, 63);
+ break;
+ case 18:
+ if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
+ releaseView(kCharacterAlexei, kCarRestaurant, 63);
+ CONS_Alexei_ReturnComp(0, 0, 0, 0);
+ } else if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 2) {
+ if (_gameProgress[kProgressJacket] == 2)
+ playNIS(kEventAlexeiDiner);
+ else
+ playNIS(kEventAlexeiDinerOriginalJacket);
+ send(kCharacterAlexei, kCharacterTableB, 103798704, "005E");
+ getCharacter(kCharacterAlexei).characterPosition.position = 3650;
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ endGraphics(kCharacterAlexei);
+ _gameInventory[kItem17].location = 1;
+ bumpCath(kCarRestaurant, 63, 255);
+ CONS_Alexei_ReturnComp(0, 0, 0, 0);
+ }
+ break;
+ }
+ }
+ } else if (msg->action == 12) {
+ send(kCharacterAlexei, kCharacterTableB, 136455232, 0);
+ startCycOtis(kCharacterAlexei, "005B");
+ getCharacterCurrentParams(kCharacterAlexei)[1] = 128;
+ getCharacter(kCharacterAlexei).inventoryItem = 0x80;
+ } else if (msg->action) {
+ if (msg->action == 1) {
+ getCharacterCurrentParams(kCharacterAlexei)[1] = 0;
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_SaveGame, 2, kEventAlexeiDiner, 0, 0);
+ }
+ } else {
+ if (_gameTime > 1089000 && rcClear()) {
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ getCharacterCurrentParams(kCharacterAlexei)[1] = 0;
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ blockView(kCharacterAlexei, kCarRestaurant, 63);
+ dropItem(kItem17, 1);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoJoinedSeqOtis, "005D", 34, 103798704, "005E");
+ return;
+ }
+ if (getCharacterCurrentParams(kCharacterAlexei)[0]) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[2] || (getCharacterCurrentParams(kCharacterAlexei)[2] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[2] >= _currentGameSessionTicks)
+ return;
+ getCharacterCurrentParams(kCharacterAlexei)[2] = 0x7FFFFFFF;
+ }
+ bumpCath(kCarRestaurant, 61, 255);
+ } else {
+ getCharacterCurrentParams(kCharacterAlexei)[2] = 0;
+ }
+ }
+}
+
+void LogicManager::CONS_Alexei_ReturnComp(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_ReturnComp);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 19;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_ReturnComp(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoSeqOtis, "811DS", 0, 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoWalk, 3, 9460, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoWalk, 5, 850, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 4;
+ AlexeiCall(&LogicManager::CONS_Alexei_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterAlexei).characterPosition.position = 1540;
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 5;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoSeqOtis, "811US", 0, 0, 0);
+ break;
+ case 5:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 6;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoSeqOtis, "933", 0, 0, 0);
+ break;
+ case 6:
+ blockView(kCharacterAlexei, kCarRestaurant, 63);
+ takeItem(kItem17);
+ send(kCharacterAlexei, kCharacterTableB, 136455232, 0);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 7;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoJoinedSeqOtis, "005F", 34, 103798704, "005G");
+ break;
+ case 7:
+ releaseView(kCharacterAlexei, kCarRestaurant, 63);
+ send(kCharacterAlexei, kCharacterWaiter2, 302996448, 0);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 8;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoSeqOtis, "934", 0, 0, 0);
+ break;
+ case 8:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 9;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoSeqOtis, "811DS", 0, 0, 0);
+ break;
+ case 9:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 10;
+ AlexeiCall(&LogicManager::CONS_Alexei_EnterComp, 0, 0, 0, 0);
+ break;
+ case 10:
+ if (checkCathDir(kCarGreenSleeping, 61))
+ bumpCath(kCarGreenSleeping, 49, 255);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 11;
+ AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 1098000, "411", 0, 0);
+ break;
+ case 11:
+ CONS_Alexei_GoSalon(0, 0, 0, 0);
+ break;
+ default:
+ return;
+ }
+ }
+}
+
+void LogicManager::CONS_Alexei_GoSalon(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_GoSalon);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 20;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_GoSalon(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_ExitComp, 0, 0, 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoWalk, 5, 850, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
+ AlexeiCall(&LogicManager::CONS_Alexei_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAlexei).characterPosition.position = 1540;
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 4;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoBlockSeqOtis, "103A", 5, 52, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ CONS_Alexei_Sitting(0, 0, 0, 0);
+ break;
+ default:
+ return;
+ }
+ }
+}
+
+void LogicManager::CONS_Alexei_Sitting(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_Sitting);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 21;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_Sitting(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (!getCharacterCurrentParams(kCharacterAlexei)[1] && (getCharacterCurrentParams(kCharacterAlexei)[1] = _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0], _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0] == 0) || getCharacterCurrentParams(kCharacterAlexei)[1] < _gameTime) {
+ if (rcClear()) {
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoBlockSeqOtis, "103C", 5, 52, 0);
+ }
+ }
+ break;
+ case 1:
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_SaveGame, 2, kEventAlexeiSalonPoem, 0, 0);
+ break;
+ case 12:
+ startCycOtis(kCharacterAlexei, "103B");
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 225 * (4 * rnd(3) + 4);
+ if (!_gameEvents[kEventAlexeiSalonPoem])
+ getCharacter(kCharacterAlexei).inventoryItem = 10;
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ CONS_Alexei_StandingAtWindow(0, 0, 0, 0);
+ break;
+ case 2:
+ playNIS(kEventAlexeiSalonPoem);
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ startSeqOtis(kCharacterAlexei, "103D");
+ bumpCath(kCarRestaurant, 55, 255);
+ blockView(kCharacterAlexei, kCarRestaurant, 52);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
+ AlexeiCall(&LogicManager::CONS_Alexei_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 3:
+ startCycOtis(kCharacterAlexei, "103B");
+ releaseView(kCharacterAlexei, kCarRestaurant, 52);
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ break;
+ }
+ break;
+ default:
+ return;
+ }
+}
+
+void LogicManager::CONS_Alexei_StandingAtWindow(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_StandingAtWindow);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 22;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_StandingAtWindow(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (!getCharacterCurrentParams(kCharacterAlexei)[1] &&
+ (getCharacterCurrentParams(kCharacterAlexei)[1] = _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0], _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0] == 0) ||
+ getCharacterCurrentParams(kCharacterAlexei)[1] < _gameTime) {
+ if (rcClear()) {
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoBlockSeqOtis, "103D", 5, 52, 0);
+ return;
+ }
+ }
+ if (getCharacterCurrentParams(kCharacterAlexei)[2] == 0x7FFFFFFF || _gameTime <= 1111500)
+ return;
+ if (_gameTime > 1138500)
+ goto LABEL_16;
+ if ((inSalon(kCharacterCath) || inDiningRoom(kCharacterCath)) && getCharacterCurrentParams(kCharacterAlexei)[2] || (getCharacterCurrentParams(kCharacterAlexei)[2] = _gameTime, _gameTime)) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[2] >= _gameTime)
+ return;
+ LABEL_16:
+ getCharacterCurrentParams(kCharacterAlexei)[2] = 0x7FFFFFFF;
+ }
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ CONS_Alexei_WaitingForTat(0, 0, 0, 0);
+ return;
+ case 1:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_SaveGame, 2, kEventAlexeiSalonPoem, 0, 0);
+ return;
+ case 12:
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 225 * (4 * rnd(4) + 8);
+ startCycOtis(kCharacterAlexei, "103E");
+ if (!_gameEvents[80])
+ getCharacter(kCharacterAlexei).inventoryItem = 10;
+ return;
+ case 18:
+ switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ CONS_Alexei_Sitting(0, 0, 0, 0);
+ break;
+ case 2:
+ playNIS(kEventAlexeiSalonPoem);
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ startSeqOtis(kCharacterAlexei, "103D");
+ blockView(kCharacterAlexei, kCarRestaurant, 52);
+ bumpCath(kCarRestaurant, 55, 255);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
+ AlexeiCall(&LogicManager::CONS_Alexei_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 3:
+ releaseView(kCharacterAlexei, kCarRestaurant, 52);
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ CONS_Alexei_Sitting(0, 0, 0, 0);
+ break;
+ }
+ return;
+ default:
+ return;
+ }
+}
+
+void LogicManager::CONS_Alexei_WaitingForTat(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_WaitingForTat);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 23;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_WaitingForTat(HAND_PARAMS) {
+ if (msg->action <= 12) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ send(kCharacterAlexei, kCharacterTatiana, 124973510, 0);
+ } else if (msg->action) {
+ if (msg->action == 1) {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_SaveGame, 2, kEventAlexeiSalonPoem, 0, 0);
+ }
+ } else if (!inDiningRoom(kCharacterTatiana) || _gameEvents[kEventAlexeiSalonPoem]) {
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ } else {
+ getCharacter(kCharacterAlexei).inventoryItem = 10;
+ }
+ return;
+ }
+ if (msg->action != 18) {
+ if (msg->action == 157159392) {
+ if (inSalon(kCharacterCath)) {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_SaveGame, 2, kEventAlexeiSalonVassili, 0, 0);
+ return;
+ }
+ } else if (msg->action != 188784532) {
+ return;
+ }
+ LABEL_24:
+ CONS_Alexei_Upset(0, 0, 0, 0);
+ return;
+ }
+
+ if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
+ playNIS(kEventAlexeiSalonVassili);
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ startCycOtis(kCharacterAlexei, "103F");
+ cleanNIS();
+ goto LABEL_24;
+ }
+ if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 2) {
+ playNIS(kEventAlexeiSalonPoem);
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ bumpCath(kCarRestaurant, 55, 255);
+ }
+}
+
+void LogicManager::CONS_Alexei_Upset(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_Upset);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 24;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_Upset(HAND_PARAMS) {
+ if (msg->action > 12) {
+ if (msg->action == 18) {
+ if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
+ playNIS(kEventAlexeiSalonCath);
+ getCharacter(kCharacterAlexei).characterPosition.car = 4;
+ getCharacter(kCharacterAlexei).characterPosition.position = 9460;
+ endGraphics(kCharacterAlexei);
+ bumpCath(kCarRestaurant, 55, 255);
+ CONS_Alexei_ReturnCompNight(0, 0, 0, 0);
+ } else if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 2) {
+ CONS_Alexei_ReturnCompNight(0, 0, 0, 0);
+ }
+ } else if (msg->action == 135854208) {
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoSeqOtis, "103G", 0, 0, 0);
+ }
+ } else if (msg->action == 12) {
+ if (_gameEvents[kEventAlexeiSalonVassili])
+ getCharacter(kCharacterAlexei).inventoryItem = 0x80;
+ } else if (msg->action == 1) {
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_SaveGame, 2, 79, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Alexei_ReturnCompNight(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_ReturnCompNight);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 25;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_ReturnCompNight(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_EnterComp, 0, 0, 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
+ case 1:
+ if (checkCathDir(kCarGreenSleeping, 61))
+ bumpCath(kCarGreenSleeping, 49, 255);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 1179000, "411", 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
+ AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 1323000, "412", 0, 0);
+ break;
+ case 3:
+ CONS_Alexei_Asleep(0, 0, 0, 0);
+ break;
+ }
+ }
+}
+
+void LogicManager::CONS_Alexei_Asleep(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_Asleep);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 26;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_Asleep(HAND_PARAMS) {
+ if (msg->action) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAlexei).characterPosition.car = 3;
+ getCharacter(kCharacterAlexei).characterPosition.position = 7500;
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ setDoor(2, 0, 1, 10, 9);
+ setDoor(18, 0, 1, 10, 9);
+ setDoor(10, 0, 1, 255, 255);
+
+ if (checkCathDir(kCarGreenSleeping, 61))
+ bumpCath(kCarGreenSleeping, 66, 255);
+
+ endGraphics(kCharacterAlexei);
+ }
+ } else if (_gameTime > 1512000 && !getCharacterCurrentParams(kCharacterAlexei)[0]) {
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 1;
+ CONS_Alexei_WakeUp(0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Alexei_WakeUp(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_WakeUp);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 27;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_WakeUp(HAND_PARAMS) {
+ if (msg->action == 12) {
+ setDoor(10, 0, 0, 255, 255);
+ if (checkCathDir(kCarGreenSleeping, 66))
+ bumpCath(kCarGreenSleeping, 49, 255);
+ startCycOtis(kCharacterAlexei, "412");
+ }
+}
+
+void LogicManager::CONS_Alexei_StartPart2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_StartPart2);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 28;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_StartPart2(HAND_PARAMS) {
+ if (msg->action) {
+ if (msg->action == 12) {
+ endGraphics(kCharacterAlexei);
+ getCharacter(kCharacterAlexei).characterPosition.car = 3;
+ getCharacter(kCharacterAlexei).characterPosition.position = 7500;
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ getCharacter(kCharacterAlexei).clothes = 0;
+ setDoor(2, 12, 1, 10, 9);
+ setDoor(18, 12, 1, 10, 9);
+ setDoor(10, 0, 0, 255, 255);
+ }
+ } else {
+ CONS_Alexei_InComp2(0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Alexei_InComp2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_InComp2);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 29;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_InComp2(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 1791000, "411", 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_ExitComp, 0, 0, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoWalk, 5, 850, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 4;
+ AlexeiCall(&LogicManager::CONS_Alexei_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterAlexei).characterPosition.position = 1540;
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 5;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoSeqOtis, "811US", 0, 0, 0);
+ break;
+ case 5:
+ blockView(kCharacterAlexei, kCarRestaurant, 63);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 6;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoJoinedSeqOtis, "018B", 34, 136455232, "BOGUS");
+ break;
+ case 6:
+ releaseView(kCharacterAlexei, kCarRestaurant, 63);
+ send(kCharacterAlexei, kCharacterTatiana, 290869168, 0);
+ CONS_Alexei_AtBreakfast(0, 0, 0, 0);
+ break;
+ default:
+ return;
+ }
+ }
+}
+
+void LogicManager::CONS_Alexei_AtBreakfast(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_AtBreakfast);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 30;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_AtBreakfast(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ setDoor(2, 0, 1, 10, 9);
+ getCharacter(kCharacterAlexei).characterPosition.car = 5;
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ startCycOtis(kCharacterAlexei, "018C");
+ send(kCharacterAlexei, kCharacterTableB, 136455232, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
+ case 1:
+ releaseView(kCharacterAlexei, kCarRestaurant, 63);
+ send(kCharacterAlexei, kCharacterTatiana, 156444784, 0);
+ startCycOtis(kCharacterAlexei, "018E");
+ if (inDiningRoom(kCharacterCath))
+ _gameProgress[kProgressField68] = 1;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoDialog, "TAT2116", 0, 0, 0);
+ break;
+ case 2:
+ playDialog(kCharacterAlexei, "TAT2116A", -1, 0);
+ blockView(kCharacterAlexei, kCarRestaurant, 63);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoJoinedSeqOtis, "018F", 10, 123857088, "BOGUS");
+ break;
+ case 3:
+ releaseView(kCharacterAlexei, kCarRestaurant, 63);
+ CONS_Alexei_ReturnCompPart2(0, 0, 0, 0);
+ break;
+ }
+ break;
+ case 236053296:
+ startSeqOtis(kCharacterAlexei, "018D1");
+ startSeqOtis(kCharacterTatiana, "018D2");
+ blockView(kCharacterAlexei, kCarRestaurant, 63);
+
+ if (msg->param.intParam)
+ bumpCath(kCarRestaurant, msg->param.intParam, 255);
+
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ }
+}
+
+void LogicManager::CONS_Alexei_ReturnCompPart2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_ReturnCompPart2);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 31;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_ReturnCompPart2(HAND_PARAMS) {
+ if (msg->action == 12) {
+ startSeqOtis(kCharacterAlexei, "811DS");
+ if (inDiningRoom(kCharacterCath))
+ advanceFrame(kCharacterAlexei);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_FinishSeqOtis, 0, 0, 0, 0);
+ } else if (msg->action == 18) {
+ if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_EnterComp, 0, 0, 0, 0);
+ } else if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 2) {
+ if (checkCathDir(kCarGreenSleeping, 61))
+ bumpCath(kCarGreenSleeping, 49, 255);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
+ AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 15803100, "411", 0, 0);
+ }
+ }
+}
+
+void LogicManager::CONS_Alexei_StartPart3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_StartPart3);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 32;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_StartPart3(HAND_PARAMS) {
+ if (msg->action) {
+ if (msg->action == 12) {
+ endGraphics(kCharacterAlexei);
+ getCharacter(kCharacterAlexei).characterPosition.car = 5;
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ getCharacter(kCharacterAlexei).clothes = 0;
+ setDoor(2, 0, 1, 10, 9);
+ setDoor(18, 0, 1, 10, 9);
+ setDoor(10, 0, 0, 255, 255);
+ }
+ } else {
+ CONS_Alexei_PlayingChess(0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Alexei_PlayingChess(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_PlayingChess);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 33;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_PlayingChess(HAND_PARAMS) {
+ switch (msg->action) {
+ case 18:
+ if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1)
+ CONS_Alexei_InPart3(0, 0, 0, 0);
+ break;
+ case 122288808:
+ getCharacter(kCharacterAlexei).characterPosition.car = 4;
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ getCharacter(kCharacterAlexei).characterPosition.position = 9270;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_EnterComp, 0, 0, 0, 0);
+ break;
+ case 122358304:
+ startCycOtis(kCharacterAlexei, "BLANK");
+ break;
+ }
+}
+
+void LogicManager::CONS_Alexei_InPart3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_InPart3);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 34;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_InPart3(HAND_PARAMS) {
+ if (msg->action == 12) {
+ if (checkCathDir(kCarGreenSleeping, 61))
+ bumpCath(kCarGreenSleeping, 49, 255);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 2083500, "411", 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_ExitComp, 0, 0, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoWalk, 5, 850, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 4;
+ AlexeiCall(&LogicManager::CONS_Alexei_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterAlexei).characterPosition.position = 1540;
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 5;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoBlockSeqOtis, "103A", 5, 52, 0);
+ break;
+ case 5:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 6;
+ AlexeiCall(&LogicManager::CONS_Alexei_Pacing3, 0, 0, 0, 0);
+ break;
+ case 6:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 7;
+ AlexeiCall(&LogicManager::CONS_Alexei_EnterComp, 0, 0, 0, 0);
+ break;
+ case 7:
+ setDoor(10, 0, 1, 255, 255);
+ if (checkCathDir(kCarGreenSleeping, 61))
+ bumpCath(kCarGreenSleeping, 66, 255);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 8;
+ AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 2124000, "NONE", 0, 0);
+ break;
+ case 8:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 9;
+ AlexeiCall(&LogicManager::CONS_Alexei_ExitComp, 0, 0, 0, 0);
+ break;
+ case 9:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 10;
+ AlexeiCall(&LogicManager::CONS_Alexei_GoSalon3, 0, 0, 0, 0);
+ break;
+ case 0xA:
+ setDoor(10, 0, 0, 255, 255);
+ if (checkCathDir(kCarGreenSleeping, 66))
+ bumpCath(kCarGreenSleeping, 49, 255);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 11;
+ AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 16451100, "411", 0, 0);
+ break;
+ default:
+ return;
+ }
+ }
+}
+
+void LogicManager::CONS_Alexei_Pacing3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_Pacing3);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 35;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_Pacing3(HAND_PARAMS) {
+ if (msg->action) {
+ if (msg->action == 12) {
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 15 * rnd(120);
+ startCycOtis(kCharacterAlexei, "103B");
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoBlockSeqOtis, "124C", 5, 52, 0);
+ break;
+ case 2:
+ case 5:
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ break;
+ case 3:
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 15 * rnd(120);
+ getCharacterCurrentParams(kCharacterAlexei)[2] = 0;
+ goto LABEL_20;
+ case 4:
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 5;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoBlockSeqOtis, "124C", 5, 52, 0);
+ break;
+ default:
+ return;
+ }
+ }
+ } else {
+ if (inSalon(kCharacterCath)) {
+ if (!getCharacterCurrentParams(kCharacterAlexei)[1] && (getCharacterCurrentParams(kCharacterAlexei)[1] = _gameTime + 2700, _gameTime == -2700) || getCharacterCurrentParams(kCharacterAlexei)[1] < _gameTime) {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_WaitRCClear, 0, 0, 0, 0);
+ return;
+ }
+ } else {
+ getCharacterCurrentParams(kCharacterAlexei)[1] = 0;
+ }
+ if (!getCharacterCurrentParams(kCharacterAlexei)[2] && (getCharacterCurrentParams(kCharacterAlexei)[2] = _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0], _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0] == 0) || getCharacterCurrentParams(kCharacterAlexei)[2] < _gameTime) {
+ if (rcClear()) {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
+ AlexeiCall(&LogicManager::CONS_Alexei_PacingAtWindow, 0, 0, 0, 0);
+ return;
+ }
+ }
+ LABEL_20:
+ if (getCharacterCurrentParams(kCharacterAlexei)[3] || (getCharacterCurrentParams(kCharacterAlexei)[3] = _gameTime + 9000, _gameTime != -9000)) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[3] >= _gameTime)
+ return;
+ getCharacterCurrentParams(kCharacterAlexei)[3] = 0x7FFFFFFF;
+ }
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 4;
+ AlexeiCall(&LogicManager::CONS_Alexei_WaitRCClear, 0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Alexei_GoSalon3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_GoSalon3);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 36;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_GoSalon3(HAND_PARAMS) {
+ if (msg->action > 3) {
+ if (msg->action > 18) {
+ if (msg->action == 122288808) {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 4;
+ AlexeiCall(&LogicManager::CONS_Alexei_EnterComp, 0, 0, 0, 0);
+ } else if (msg->action == 122358304) {
+ startCycOtis(kCharacterAlexei, "BLANK");
+ getCharacterCurrentParams(kCharacterAlexei)[2] = 1;
+ }
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 2:
+ send(kCharacterAlexei, kCharacterAbbot, 222609266, 0);
+ getCharacter(kCharacterAlexei).characterPosition.position = 1540;
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoBlockSeqOtis, "103A", 5, 52, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ startCycOtis(kCharacterAlexei, "124A");
+ break;
+ case 4:
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ break;
+ default:
+ return;
+ }
+ } else if (msg->action == 12) {
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 5 * (3 * rnd(15) + 15);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoWalk, 5, 850, 0, 0);
+ }
+ } else if (msg->action == 3) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[1]) {
+ startCycOtis(kCharacterAlexei, "124A");
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 5 * (3 * rnd(15) + 15);
+ getCharacterCurrentParams(kCharacterAlexei)[1] = 0;
+ }
+ } else if (msg->action == 0 && !getCharacterCurrentParams(kCharacterAlexei)[2] && !getCharacterCurrentParams(kCharacterAlexei)[1]) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[3] || (getCharacterCurrentParams(kCharacterAlexei)[3] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterAlexei)[0],
+ _currentGameSessionTicks + getCharacterCurrentParams(kCharacterAlexei)[0] != 0)) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[3] >= _currentGameSessionTicks)
+ return;
+ getCharacterCurrentParams(kCharacterAlexei)[3] = 0x7FFFFFFF;
+ }
+ startSeqOtis(kCharacterAlexei, "124B");
+ getCharacterCurrentParams(kCharacterAlexei)[1] = 1;
+ getCharacterCurrentParams(kCharacterAlexei)[3] = 0;
+ }
+}
+
+void LogicManager::CONS_Alexei_StartPart4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_StartPart4);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 37;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_StartPart4(HAND_PARAMS) {
+ if (msg->action) {
+ if (msg->action == 12) {
+ endGraphics(kCharacterAlexei);
+ getCharacter(kCharacterAlexei).characterPosition.position = 7500;
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ getCharacter(kCharacterAlexei).characterPosition.car = 3;
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ setDoor(2, 0, 1, 10, 9);
+ setDoor(18, 0, 1, 10, 9);
+ setDoor(10, 0, 0, 255, 255);
+ }
+ } else {
+ CONS_Alexei_InComp4(0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Alexei_InComp4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_InComp4);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 38;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_InComp4(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 2354400, "411", 0, 0);
+ } else if (msg->action == 18 && getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
+ CONS_Alexei_MeetTat(0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Alexei_MeetTat(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_MeetTat);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 39;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_MeetTat(HAND_PARAMS) {
+ if (msg->action > 3) {
+ if (msg->action > 17) {
+ switch (msg->action) {
+ case 18:
+ if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
+ setDoor(2, 0, 0, 10, 9);
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoWalk, 3, 540, 0, 0);
+ } else if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 2) {
+ endGraphics(kCharacterAlexei);
+ if (onLowPlatform(kCharacterCath)) {
+ playChrExcuseMe(kCharacterAlexei, kCharacterCath, 0);
+ if (checkCathDir(kCarGreenSleeping, 62))
+ bumpCath(kCarGreenSleeping, 72, 255);
+ }
+ blockView(kCharacterAlexei, kCarGreenSleeping, 70);
+ blockView(kCharacterAlexei, kCarGreenSleeping, 71);
+ }
+ break;
+ case 123536024:
+ getCharacterCurrentParams(kCharacterAlexei)[1] = 1;
+ break;
+ case 123712592:
+ endGraphics(kCharacterAlexei);
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 1;
+ break;
+ }
+ } else {
+ if (msg->action == 17) {
+ if (!checkCathDir(kCarGreenSleeping, 62))
+ return;
+ if (getCharacterCurrentParams(kCharacterAlexei)[0]) {
+ if (!getCharacterCurrentParams(kCharacterAlexei)[1])
+ return;
+ } else if (!getCharacterCurrentParams(kCharacterAlexei)[1]) {
+ startSeqOtis(kCharacterAlexei, "306A");
+ return;
+ }
+ goto LABEL_37;
+ }
+ if (msg->action == 12) {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoCorrOtis, "602FB", 2, 0, 0);
+ }
+ }
+ } else if (msg->action == 3) {
+ if (!getCharacterCurrentParams(kCharacterAlexei)[0] && !getCharacterCurrentParams(kCharacterAlexei)[1])
+ startCycOtis(kCharacterAlexei, "306F");
+ } else if (msg->action == 0 && getCharacterCurrentParams(kCharacterAlexei)[1]) {
+ if (!getCharacterCurrentParams(kCharacterAlexei)[3]) {
+ getCharacterCurrentParams(kCharacterAlexei)[2] = _gameTime + 4500;
+ getCharacterCurrentParams(kCharacterAlexei)[3] = _gameTime + 9000;
+ }
+ if (getCharacterCurrentParams(kCharacterAlexei)[4] != 0x7FFFFFFF && getCharacterCurrentParams(kCharacterAlexei)[2] < _gameTime) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[3] >= _gameTime) {
+ if (onLowPlatform(kCharacterCath) || !getCharacterCurrentParams(kCharacterAlexei)[4]) {
+ getCharacterCurrentParams(kCharacterAlexei)[4] = _gameTime;
+ if (!_gameTime)
+ goto LABEL_24;
+ }
+ if (getCharacterCurrentParams(kCharacterAlexei)[4] >= _gameTime)
+ return;
+ }
+ getCharacterCurrentParams(kCharacterAlexei)[4] = 0x7FFFFFFF;
+ LABEL_24:
+ releaseView(kCharacterAlexei, kCarGreenSleeping, 70);
+ releaseView(kCharacterAlexei, kCarGreenSleeping, 71);
+ if (onLowPlatform(kCharacterCath)) {
+ playChrExcuseMe(kCharacterAlexei, kCharacterCath, 0);
+ if (checkCathDir(kCarGreenSleeping, 62))
+ bumpCath(kCarGreenSleeping, 72, 255);
+ }
+ LABEL_37:
+ CONS_Alexei_LeavePlat(0, 0, 0, 0);
+ }
+ }
+}
+
+void LogicManager::CONS_Alexei_LeavePlat(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_LeavePlat);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 40;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_LeavePlat(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoWalk, 3, 7500, 0, 0);
+ } else if (msg->action == 18) {
+ if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
+ startSeqOtis(kCharacterAlexei, "602Eb");
+ blockAtDoor(kCharacterAlexei, 2);
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ if (inComp(kCharacterCath, kCarGreenSleeping, 7500)) {
+ playNIS((kEventCathTurningNight - !isNight()));
+ playDialog(0, "BUMP", -1, 0);
+ bumpCathRDoor(2);
+ }
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_FinishSeqOtis, 0, 0, 0, 0);
+ } else if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 2) {
+ releaseAtDoor(kCharacterAlexei, 2);
+ getCharacter(kCharacterAlexei).characterPosition.position = 7500;
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ endGraphics(kCharacterAlexei);
+ CONS_Alexei_InCompAgain(0, 0, 0, 0);
+ }
+ }
+}
+
+void LogicManager::CONS_Alexei_InCompAgain(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_InCompAgain);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 41;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_InCompAgain(HAND_PARAMS) {
+ if (msg->action == 12) {
+ if (checkCathDir(kCarGreenSleeping, 66))
+ bumpCath(kCarGreenSleeping, 49, 255);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 2403000, "411", 0, 0);
+ } else if (msg->action == 18 && getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
+ CONS_Alexei_GoSalon4(0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Alexei_GoSalon4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_GoSalon4);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 42;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_GoSalon4(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_ExitComp, 0, 0, 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
+ case 1:
+ send(kCharacterAlexei, kCharacterTatiana, 191198209, 0);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoWalk, 5, 850, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoBlockSeqOtis, "103A", 5, 52, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ CONS_Alexei_Pacing(0, 0, 0, 0);
+ break;
+ }
+ }
+}
+
+void LogicManager::CONS_Alexei_Pacing(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_Pacing);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 43;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_Pacing(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (_gameTime < 1806300) {
+ if (!getCharacterCurrentParams(kCharacterAlexei)[1] && (getCharacterCurrentParams(kCharacterAlexei)[1] = _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0], _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0] == 0) || getCharacterCurrentParams(kCharacterAlexei)[1] < _gameTime) {
+ if (rcClear()) {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_PacingAtWindow, 0, 0, 0, 0);
+ return;
+ }
+ }
+ }
+ if (_gameTime > 2457000 && !getCharacterCurrentParams(kCharacterAlexei)[2]) {
+ getCharacterCurrentParams(kCharacterAlexei)[2] = 1;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_WaitRCClear, 0, 0, 0, 0);
+ }
+ return;
+ case 12:
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 5 * (3 * rnd(120) + 180);
+ startCycOtis(kCharacterAlexei, "103B");
+ return;
+ case 18:
+ if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] != 1) {
+ if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 2) {
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoBlockSeqOtis, "124C", 5, 52, 0);
+ } else if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 3) {
+ CONS_Alexei_GoToPlatform(0, 0, 0, 0);
+ }
+ return;
+ }
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 5 * (3 * rnd(120) + 180);
+ getCharacterCurrentParams(kCharacterAlexei)[1] = 0;
+ if (_gameTime > 2457000 && !getCharacterCurrentParams(kCharacterAlexei)[2]) {
+ getCharacterCurrentParams(kCharacterAlexei)[2] = 1;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_WaitRCClear, 0, 0, 0, 0);
+ }
+ return;
+ }
+}
+
+void LogicManager::CONS_Alexei_GoToPlatform(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_GoToPlatform);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 44;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_GoToPlatform(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 2475000 && !getCharacterCurrentParams(kCharacterAlexei)[0]) {
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 1;
+ releaseView(kCharacterAlexei, kCarGreenSleeping, 70);
+ releaseView(kCharacterAlexei, kCarGreenSleeping, 71);
+ if (onLowPlatform(kCharacterCath)) {
+ playChrExcuseMe(kCharacterAlexei, kCharacterCath, 0);
+ if (checkCathDir(kCarGreenSleeping, 62))
+ bumpCath(kCarGreenSleeping, 72, 255);
+ }
+ CONS_Alexei_ReturnComp4(0, 0, 0, 0);
+ }
+ break;
+ case 12:
+ getCharacter(kCharacterAlexei).characterPosition.car = 4;
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ getCharacter(kCharacterAlexei).characterPosition.position = 9460;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoWalk, 3, 540, 0, 0);
+ break;
+ case 17:
+ if (checkCathDir(kCarGreenSleeping, 62)) {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoSeqOtis, "306A", 0, 0, 0);
+ }
+ break;
+ case 18:
+ if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
+ endGraphics(kCharacterAlexei);
+ if (onLowPlatform(kCharacterCath)) {
+ playChrExcuseMe(kCharacterAlexei, kCharacterCath, 0);
+ if (checkCathDir(kCarGreenSleeping, 62))
+ bumpCath(kCarGreenSleeping, 72, 255);
+ }
+ blockView(kCharacterAlexei, kCarGreenSleeping, 70);
+ blockView(kCharacterAlexei, kCarGreenSleeping, 71);
+ } else if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 2) {
+ startCycOtis(kCharacterAlexei, "306F");
+ }
+ break;
+ default:
+ return;
+ }
+}
+
+void LogicManager::CONS_Alexei_ReturnComp4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_ReturnComp4);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 45;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_ReturnComp4(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_EnterComp, 0, 0, 0, 0);
+ } else if (msg->action == 18 && getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
+ if (checkCathDir(kCarGreenSleeping, 66))
+ bumpCath(kCarGreenSleeping, 49, 255);
+ if (cathHasItem(kItemBomb)) {
+ CONS_Alexei_BombPlanB(0, 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 15803100, "412", 0, 0);
+ }
+ }
+}
+
+void LogicManager::CONS_Alexei_BombPlanB(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_BombPlanB);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 46;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_BombPlanB(HAND_PARAMS) {
+ if (msg->action) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 2488500, "411", 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_ExitComp, 0, 0, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoWalk, 4, 0x24F4, 0, 0);
+ break;
+ case 4:
+ if (checkCathDir(kCarGreenSleeping, 66))
+ bumpCath(kCarGreenSleeping, 49, 255);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 5;
+ AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 2507400, "412", 0, 0);
+ break;
+ case 5:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 6;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoCorrOtis, "602Fb", 2, 0, 0);
+ break;
+ case 6:
+ setDoor(2, 0, 0, 10, 9);
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 7;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoWalk, 4, 7500, 0, 0);
+ break;
+ case 7:
+ startSeqOtis(kCharacterAlexei, "602Eb");
+ blockAtDoor(kCharacterAlexei, 33);
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ if (inSuite(kCharacterCath, kCarRedSleeping, 7850)) {
+ playNIS((158 - !isNight()));
+ playDialog(0, "BUMP", -1, 0);
+ bumpCathRDoor(33);
+ }
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 8;
+ AlexeiCall(&LogicManager::CONS_Alexei_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 8:
+ releaseAtDoor(kCharacterAlexei, 33);
+ endGraphics(kCharacterAlexei);
+ getCharacter(kCharacterAlexei).characterPosition.position = 8200;
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ setDoor(32, 0, 1, 0, 0);
+ setDoor(48, 0, 1, 0, 0);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 9;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoDialog, "TAT4167", 0, 0, 0);
+ break;
+ case 9:
+ send(kCharacterAlexei, kCharacterMaster, 156435676, 0);
+ CONS_Alexei_Dead(0, 0, 0, 0);
+ break;
+ default:
+ return;
+ }
+ }
+ return;
+ }
+ if (getCharacterCurrentParams(kCharacterAlexei)[0] == 0x7FFFFFFF || !_gameTime)
+ return;
+ if (_gameTime <= 2493000) {
+ if (inSalon(kCharacterCath) || inSalon(kCharacterAugust) || !getCharacterCurrentParams(kCharacterAlexei)[0]) {
+ getCharacterCurrentParams(kCharacterAlexei)[0] = _gameTime;
+ if (!_gameTime)
+ goto LABEL_14;
+ }
+ if (getCharacterCurrentParams(kCharacterAlexei)[0] >= _gameTime)
+ return;
+ }
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 0x7FFFFFFF;
+LABEL_14:
+ takeItem(kItem22);
+ if (inSalon(kCharacterCath)) {
+ playChrExcuseMe(kCharacterAlexei, kCharacterCath, 0);
+ bumpCath(kCarRestaurant, checkCathDir(), 255);
+ }
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 4;
+ AlexeiCall(&LogicManager::CONS_Alexei_EnterComp, 0, 0, 0, 0);
+}
+
+void LogicManager::CONS_Alexei_Dead(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_Dead);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 47;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_Dead(HAND_PARAMS) {
+ if (msg->action == 12) {
+ endGraphics(kCharacterAlexei);
+ getCharacter(kCharacterAlexei).characterPosition.car = kCarLocomotive;
+ getCharacter(kCharacterAlexei).characterPosition.position = 0;
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ setDoor(2, 0, 0, 10, 9);
+ setDoor(18, 0, 0, 10, 9);
+ }
+}
+
+void LogicManager::CONS_Alexei_StartPart5(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlexei).callParams[getCharacter(kCharacterAlexei).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, &LogicManager::HAND_Alexei_StartPart5);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall] = 48;
+
+ params->clear();
+
+ fedEx(kCharacterAlexei, kCharacterAlexei, 12, 0);
+}
+
+void LogicManager::HAND_Alexei_StartPart5(HAND_PARAMS) {
+ if (msg->action == 12)
+ endGraphics(kCharacterAlexei);
+}
+
+void (LogicManager::*LogicManager::_functionsAlexei[])(HAND_PARAMS) = {
+ nullptr,
+ &LogicManager::HAND_Alexei_DebugWalks,
+ &LogicManager::HAND_Alexei_DoDialog,
+ &LogicManager::HAND_Alexei_DoWait,
+ &LogicManager::HAND_Alexei_DoSeqOtis,
+ &LogicManager::HAND_Alexei_DoBlockSeqOtis,
+ &LogicManager::HAND_Alexei_DoCorrOtis,
+ &LogicManager::HAND_Alexei_FinishSeqOtis,
+ &LogicManager::HAND_Alexei_DoJoinedSeqOtis,
+ &LogicManager::HAND_Alexei_SaveGame,
+ &LogicManager::HAND_Alexei_DoWalk,
+ &LogicManager::HAND_Alexei_DoComplexSeqOtis,
+ &LogicManager::HAND_Alexei_WaitRCClear,
+ &LogicManager::HAND_Alexei_EnterComp,
+ &LogicManager::HAND_Alexei_ExitComp,
+ &LogicManager::HAND_Alexei_PacingAtWindow,
+ &LogicManager::HAND_Alexei_CompLogic,
+ &LogicManager::HAND_Alexei_Birth,
+ &LogicManager::HAND_Alexei_AtDinner,
+ &LogicManager::HAND_Alexei_ReturnComp,
+ &LogicManager::HAND_Alexei_GoSalon,
+ &LogicManager::HAND_Alexei_Sitting,
+ &LogicManager::HAND_Alexei_StandingAtWindow,
+ &LogicManager::HAND_Alexei_WaitingForTat,
+ &LogicManager::HAND_Alexei_Upset,
+ &LogicManager::HAND_Alexei_ReturnCompNight,
+ &LogicManager::HAND_Alexei_Asleep,
+ &LogicManager::HAND_Alexei_WakeUp,
+ &LogicManager::HAND_Alexei_StartPart2,
+ &LogicManager::HAND_Alexei_InComp2,
+ &LogicManager::HAND_Alexei_AtBreakfast,
+ &LogicManager::HAND_Alexei_ReturnCompPart2,
+ &LogicManager::HAND_Alexei_StartPart3,
+ &LogicManager::HAND_Alexei_PlayingChess,
+ &LogicManager::HAND_Alexei_InPart3,
+ &LogicManager::HAND_Alexei_Pacing3,
+ &LogicManager::HAND_Alexei_GoSalon3,
+ &LogicManager::HAND_Alexei_StartPart4,
+ &LogicManager::HAND_Alexei_InComp4,
+ &LogicManager::HAND_Alexei_MeetTat,
+ &LogicManager::HAND_Alexei_LeavePlat,
+ &LogicManager::HAND_Alexei_InCompAgain,
+ &LogicManager::HAND_Alexei_GoSalon4,
+ &LogicManager::HAND_Alexei_Pacing,
+ &LogicManager::HAND_Alexei_GoToPlatform,
+ &LogicManager::HAND_Alexei_ReturnComp4,
+ &LogicManager::HAND_Alexei_BombPlanB,
+ &LogicManager::HAND_Alexei_Dead,
+ &LogicManager::HAND_Alexei_StartPart5
+};
+
+
+} // End of namespace LastExpress
diff --git a/engines/lastexpress/characters/alouan.cpp b/engines/lastexpress/characters/alouan.cpp
new file mode 100644
index 00000000000..e77d3ea019a
--- /dev/null
+++ b/engines/lastexpress/characters/alouan.cpp
@@ -0,0 +1,858 @@
+/* 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_Alouan(int chapter) {
+ switch (chapter) {
+ case 0:
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterAlouan,
+ _functionsAlouan[getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall]]
+ );
+
+ break;
+ case 1:
+ CONS_Alouan_Birth(0, 0, 0, 0);
+ break;
+ case 2:
+ CONS_Alouan_StartPart2(0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_Alouan_StartPart3(0, 0, 0, 0);
+ break;
+ case 4:
+ CONS_Alouan_StartPart4(0, 0, 0, 0);
+ break;
+ case 5:
+ CONS_Alouan_StartPart5(0, 0, 0, 0);
+ break;
+ default:
+ return;
+ }
+}
+
+void LogicManager::AlouanCall(CALL_PARAMS) {
+ getCharacter(kCharacterAlouan).currentCall++;
+
+ (this->*functionPointer)(param1, param2, param3, param4);
+}
+
+void LogicManager::CONS_Alouan_DebugWalks(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlouan).callParams[getCharacter(kCharacterAlouan).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, &LogicManager::HAND_Alouan_DebugWalks);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall] = 1;
+
+ params->clear();
+
+ fedEx(kCharacterAlouan, kCharacterAlouan, 12, 0);
+}
+
+void LogicManager::HAND_Alouan_DebugWalks(HAND_PARAMS) {
+ if (msg->action) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAlouan).characterPosition.position = 0;
+ getCharacter(kCharacterAlouan).characterPosition.location = 0;
+ getCharacter(kCharacterAlouan).characterPosition.car = kCarGreenSleeping;
+ getCharacterCurrentParams(kCharacterAlouan)[0] = 10000;
+ }
+ } else if (walk(kCharacterAlouan, kCarGreenSleeping, getCharacterCurrentParams(kCharacterAlouan)[0])) {
+ if (getCharacterCurrentParams(kCharacterAlouan)[0] == 10000)
+ getCharacterCurrentParams(kCharacterAlouan)[0] = 0;
+ else
+ getCharacterCurrentParams(kCharacterAlouan)[0] = 10000;
+ }
+}
+
+void LogicManager::CONS_Alouan_DoCorrOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlouan).callParams[getCharacter(kCharacterAlouan).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, &LogicManager::HAND_Alouan_DoCorrOtis);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall] = 2;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ params->parameters[3] = param2.intParam;
+
+ fedEx(kCharacterAlouan, kCharacterAlouan, 12, 0);
+}
+
+void LogicManager::HAND_Alouan_DoCorrOtis(HAND_PARAMS) {
+ if (msg->action == 3) {
+ releaseAtDoor(kCharacterAlouan, getCharacterCurrentParams(kCharacterAlouan)[3]);
+ getCharacter(kCharacterAlouan).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, _functionsAlouan[getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall]]);
+ fedEx(kCharacterAlouan, kCharacterAlouan, 18, 0);
+ } else if (msg->action == 12) {
+ startSeqOtis(kCharacterAlouan, (char *)&getCharacterCurrentParams(kCharacterAlouan)[0]);
+ blockAtDoor(kCharacterAlouan, getCharacterCurrentParams(kCharacterAlouan)[3]);
+ }
+}
+
+void LogicManager::CONS_Alouan_DoDialog(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlouan).callParams[getCharacter(kCharacterAlouan).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, &LogicManager::HAND_Alouan_DoDialog);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall] = 3;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ fedEx(kCharacterAlouan, kCharacterAlouan, 12, 0);
+}
+
+void LogicManager::HAND_Alouan_DoDialog(HAND_PARAMS) {
+ if (msg->action == 2) {
+ getCharacter(kCharacterAlouan).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, _functionsAlouan[getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall]]);
+ fedEx(kCharacterAlouan, kCharacterAlouan, 18, 0);
+ } else if (msg->action == 12) {
+ playDialog(kCharacterAlouan, (char *)&getCharacterCurrentParams(kCharacterAlouan)[0], -1, 0);
+ }
+}
+
+void LogicManager::CONS_Alouan_DoWait(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlouan).callParams[getCharacter(kCharacterAlouan).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, &LogicManager::HAND_Alouan_DoWait);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall] = 4;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+
+ fedEx(kCharacterAlouan, kCharacterAlouan, 12, 0);
+}
+
+void LogicManager::HAND_Alouan_DoWait(HAND_PARAMS) {
+ if (msg->action == 0) {
+ if (getCharacterCurrentParams(kCharacterAlouan)[1] || (getCharacterCurrentParams(kCharacterAlouan)[1] = _gameTime + getCharacterCurrentParams(kCharacterAlouan)[0], _gameTime + getCharacterCurrentParams(kCharacterAlouan)[0] != 0)) {
+ if (getCharacterCurrentParams(kCharacterAlouan)[1] >= _gameTime)
+ return;
+
+ getCharacterCurrentParams(kCharacterAlouan)[1] = 0x7FFFFFFF;
+ }
+
+ getCharacter(kCharacterAlouan).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, _functionsAlouan[getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall]]);
+ fedEx(kCharacterAlouan, kCharacterAlouan, 18, 0);
+ }
+}
+
+void LogicManager::CONS_Alouan_DoWalk(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlouan).callParams[getCharacter(kCharacterAlouan).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, &LogicManager::HAND_Alouan_DoWalk);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall] = 5;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+ params->parameters[1] = param2.intParam;
+
+ fedEx(kCharacterAlouan, kCharacterAlouan, 12, 0);
+}
+
+void LogicManager::HAND_Alouan_DoWalk(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterAlouan, getCharacterCurrentParams(kCharacterAlouan)[0], getCharacterCurrentParams(kCharacterAlouan)[1])) {
+ getCharacter(kCharacterAlouan).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, _functionsAlouan[getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall]]);
+ fedEx(kCharacterAlouan, kCharacterAlouan, 18, 0);
+ }
+
+ break;
+ case 5:
+ playCathExcuseMe();
+ break;
+ case 6:
+ playChrExcuseMe(kCharacterAlouan, kCharacterCath, 0);
+ break;
+ case 12:
+ if (walk(kCharacterAlouan, getCharacterCurrentParams(kCharacterAlouan)[0], getCharacterCurrentParams(kCharacterAlouan)[1])) {
+ getCharacter(kCharacterAlouan).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, _functionsAlouan[getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall]]);
+ fedEx(kCharacterAlouan, kCharacterAlouan, 18, 0);
+ }
+
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_Alouan_PeekF(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlouan).callParams[getCharacter(kCharacterAlouan).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, &LogicManager::HAND_Alouan_PeekF);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall] = 6;
+
+ params->clear();
+
+ fedEx(kCharacterAlouan, kCharacterAlouan, 12, 0);
+}
+
+void LogicManager::HAND_Alouan_PeekF(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAlouan).characterPosition.position = 4070;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 1;
+ AlouanCall(&LogicManager::CONS_Alouan_DoCorrOtis, "621Cf", 6, 0, 0);
+ } else if (msg->action == 18) {
+ if (getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] == 1) {
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
+ AlouanCall(&LogicManager::CONS_Alouan_DoCorrOtis, "621Df", 6, 0, 0);
+ } else if (getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] == 2) {
+ getCharacter(kCharacterAlouan).characterPosition.position = 4070;
+ endGraphics(kCharacterAlouan);
+ getCharacter(kCharacterAlouan).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, _functionsAlouan[getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall]]);
+ fedEx(kCharacterAlouan, kCharacterAlouan, 18, 0);
+ }
+ }
+}
+
+void LogicManager::CONS_Alouan_PeekH(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlouan).callParams[getCharacter(kCharacterAlouan).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, &LogicManager::HAND_Alouan_PeekH);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall] = 7;
+
+ params->clear();
+
+ fedEx(kCharacterAlouan, kCharacterAlouan, 12, 0);
+}
+
+void LogicManager::HAND_Alouan_PeekH(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAlouan).characterPosition.position = 2740;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 1;
+ AlouanCall(&LogicManager::CONS_Alouan_DoCorrOtis, "621Ch", 8, 0, 0);
+ } else if (msg->action == 18) {
+ if (getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] == 1) {
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
+ AlouanCall(&LogicManager::CONS_Alouan_DoCorrOtis, "621Dh", 8, 0, 0);
+ } else if (getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] == 2) {
+ getCharacter(kCharacterAlouan).characterPosition.position = 2740;
+ endGraphics(kCharacterAlouan);
+ getCharacter(kCharacterAlouan).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, _functionsAlouan[getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall]]);
+ fedEx(kCharacterAlouan, kCharacterAlouan, 18, 0);
+ }
+ }
+}
+
+void LogicManager::CONS_Alouan_GoFtoH(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlouan).callParams[getCharacter(kCharacterAlouan).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, &LogicManager::HAND_Alouan_GoFtoH);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall] = 8;
+
+ params->clear();
+
+ fedEx(kCharacterAlouan, kCharacterAlouan, 12, 0);
+}
+
+void LogicManager::HAND_Alouan_GoFtoH(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAlouan).characterPosition.position = 4070;
+ getCharacter(kCharacterAlouan).characterPosition.location = 0;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 1;
+ AlouanCall(&LogicManager::CONS_Alouan_DoCorrOtis, "621Bf", 6, 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
+ AlouanCall(&LogicManager::CONS_Alouan_DoWalk, 3, 2740, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 3;
+ AlouanCall(&LogicManager::CONS_Alouan_DoCorrOtis, "621Ah", 8, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAlouan).characterPosition.location = 1;
+ endGraphics(kCharacterAlouan);
+
+ getCharacter(kCharacterAlouan).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, _functionsAlouan[getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall]]);
+ fedEx(kCharacterAlouan, kCharacterAlouan, 18, 0);
+ break;
+ }
+ }
+}
+
+void LogicManager::CONS_Alouan_GoHtoF(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlouan).callParams[getCharacter(kCharacterAlouan).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, &LogicManager::HAND_Alouan_GoHtoF);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall] = 9;
+
+ params->clear();
+
+ fedEx(kCharacterAlouan, kCharacterAlouan, 12, 0);
+}
+
+void LogicManager::HAND_Alouan_GoHtoF(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAlouan).characterPosition.position = 2740;
+ getCharacter(kCharacterAlouan).characterPosition.location = 0;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 1;
+ AlouanCall(&LogicManager::CONS_Alouan_DoCorrOtis, "621Bh", 8, 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
+ AlouanCall(&LogicManager::CONS_Alouan_DoWalk, 3, 4070, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 3;
+ AlouanCall(&LogicManager::CONS_Alouan_DoCorrOtis, "621Af", 6, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAlouan).characterPosition.location = 1;
+ endGraphics(kCharacterAlouan);
+
+ getCharacter(kCharacterAlouan).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, _functionsAlouan[getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall]]);
+ fedEx(kCharacterAlouan, kCharacterAlouan, 18, 0);
+ break;
+ }
+ }
+}
+
+void LogicManager::CONS_Alouan_Birth(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlouan).callParams[getCharacter(kCharacterAlouan).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, &LogicManager::HAND_Alouan_Birth);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall] = 10;
+
+ params->clear();
+
+ fedEx(kCharacterAlouan, kCharacterAlouan, 12, 0);
+}
+
+void LogicManager::HAND_Alouan_Birth(HAND_PARAMS) {
+ if (msg->action) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAlouan).characterPosition.position = 2740;
+ getCharacter(kCharacterAlouan).characterPosition.location = 1;
+ getCharacter(kCharacterAlouan).characterPosition.car = kCarGreenSleeping;
+ }
+ } else if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterAlouan)[0]) {
+ getCharacterCurrentParams(kCharacterAlouan)[0] = 1;
+ CONS_Alouan_Part1(0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Alouan_Part1(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlouan).callParams[getCharacter(kCharacterAlouan).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, &LogicManager::HAND_Alouan_Part1);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall] = 11;
+
+ params->clear();
+
+ fedEx(kCharacterAlouan, kCharacterAlouan, 12, 0);
+}
+
+void LogicManager::HAND_Alouan_Part1(HAND_PARAMS) {
+ if (msg->action) {
+ if (msg->action != 18 || getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] != 1)
+ return;
+
+ getCharacter(kCharacterAlouan).characterPosition.position = 4840;
+ } else if (_gameTime > 1096200 && !getCharacterCurrentParams(kCharacterAlouan)[0]) {
+ getCharacterCurrentParams(kCharacterAlouan)[0] = 1;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 1;
+ AlouanCall(&LogicManager::CONS_Alouan_GoHtoF, 0, 0, 0, 0);
+ return;
+ }
+ if (_gameTime > 1162800 && !getCharacterCurrentParams(kCharacterAlouan)[1]) {
+ getCharacterCurrentParams(kCharacterAlouan)[1] = 1;
+ send(kCharacterAlouan, kCharacterClerk, 191070912, 4070);
+ getCharacter(kCharacterAlouan).characterPosition.position = 4070;
+ }
+ if (_gameTime > 1179000 && !getCharacterCurrentParams(kCharacterAlouan)[2]) {
+ getCharacterCurrentParams(kCharacterAlouan)[2] = 1;
+ send(kCharacterAlouan, kCharacterClerk, 191070912, 4840);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
+ AlouanCall(&LogicManager::CONS_Alouan_GoFtoH, 0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Alouan_Asleep(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlouan).callParams[getCharacter(kCharacterAlouan).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, &LogicManager::HAND_Alouan_Asleep);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall] = 12;
+
+ params->clear();
+
+ fedEx(kCharacterAlouan, kCharacterAlouan, 12, 0);
+}
+
+void LogicManager::HAND_Alouan_Asleep(HAND_PARAMS) {
+ if (msg->action == 12) {
+ setDoor(7, kCharacterCath, 3, 10, 9);
+ setDoor(5, kCharacterCath, 3, 10, 9);
+ getCharacter(kCharacterAlouan).characterPosition.position = 4070;
+ getCharacter(kCharacterAlouan).characterPosition.location = 1;
+ getCharacter(kCharacterAlouan).characterPosition.car = kCarGreenSleeping;
+ endGraphics(kCharacterAlouan);
+ }
+}
+
+void LogicManager::CONS_Alouan_StartPart2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlouan).callParams[getCharacter(kCharacterAlouan).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, &LogicManager::HAND_Alouan_StartPart2);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall] = 13;
+
+ params->clear();
+
+ fedEx(kCharacterAlouan, kCharacterAlouan, 12, 0);
+}
+
+void LogicManager::HAND_Alouan_StartPart2(HAND_PARAMS) {
+ if (msg->action == 12) {
+ endGraphics(kCharacterAlouan);
+ getCharacter(kCharacterAlouan).characterPosition.position = 2740;
+ getCharacter(kCharacterAlouan).characterPosition.location = 1;
+ getCharacter(kCharacterAlouan).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterAlouan).clothes = 0;
+ getCharacter(kCharacterAlouan).inventoryItem = kItemNone;
+ CONS_Alouan_Part2(0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Alouan_Part2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlouan).callParams[getCharacter(kCharacterAlouan).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, &LogicManager::HAND_Alouan_Part2);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall] = 14;
+
+ params->clear();
+
+ fedEx(kCharacterAlouan, kCharacterAlouan, 12, 0);
+}
+
+void LogicManager::HAND_Alouan_Part2(HAND_PARAMS) {
+ if (msg->action > 12) {
+ if (msg->action == 18) {
+ switch (getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8]) {
+ case 3:
+ getCharacterCurrentParams(kCharacterAlouan)[0] = 0;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 4;
+ AlouanCall(&LogicManager::CONS_Alouan_DoDialog, "Har2011", 0, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 5;
+ AlouanCall(&LogicManager::CONS_Alouan_DoWait, 900, 0, 0, 0);
+ break;
+ case 5:
+ send(kCharacterAlouan, kCharacterFrancois, 190219584, 0);
+ break;
+ }
+ } else if (msg->action == 189489753) {
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 3;
+ AlouanCall(&LogicManager::CONS_Alouan_GoHtoF, 0, 0, 0, 0);
+ }
+ } else {
+ if (msg->action == 12) {
+ send(kCharacterAlouan, kCharacterClerk, 191070912, 4840);
+ getCharacterCurrentParams(kCharacterAlouan)[0] = 1;
+ return;
+ }
+ if (msg->action == 0 && getCharacterCurrentParams(kCharacterAlouan)[1] != 0x7FFFFFFF && _gameTime) {
+ if (_gameTime <= 1777500) {
+ if (!cathInCorridor(kCarGreenSleeping) || !getCharacterCurrentParams(kCharacterAlouan)[1]) {
+ getCharacterCurrentParams(kCharacterAlouan)[1] = _gameTime + 75;
+ if (_gameTime == -75)
+ goto LABEL_16;
+ }
+ if (getCharacterCurrentParams(kCharacterAlouan)[1] >= _gameTime)
+ return;
+ }
+ getCharacterCurrentParams(kCharacterAlouan)[1] = 0x7FFFFFFF;
+ LABEL_16:
+ if (getCharacterCurrentParams(kCharacterAlouan)[0]) {
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 1;
+ AlouanCall(&LogicManager::CONS_Alouan_PeekH, 0, 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
+ AlouanCall(&LogicManager::CONS_Alouan_PeekF, 0, 0, 0, 0);
+ }
+ }
+ }
+}
+
+void LogicManager::CONS_Alouan_StartPart3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlouan).callParams[getCharacter(kCharacterAlouan).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, &LogicManager::HAND_Alouan_StartPart3);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall] = 15;
+
+ params->clear();
+
+ fedEx(kCharacterAlouan, kCharacterAlouan, 12, 0);
+}
+
+void LogicManager::HAND_Alouan_StartPart3(HAND_PARAMS) {
+ if (msg->action == 0) {
+ CONS_Alouan_Part3(0, 0, 0, 0);
+ } else if (msg->action == 12) {
+ endGraphics(kCharacterAlouan);
+ getCharacter(kCharacterAlouan).characterPosition.position = 2740;
+ getCharacter(kCharacterAlouan).characterPosition.location = 1;
+ getCharacter(kCharacterAlouan).characterPosition.car = kCarGreenSleeping;
+ }
+}
+
+void LogicManager::CONS_Alouan_Part3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlouan).callParams[getCharacter(kCharacterAlouan).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, &LogicManager::HAND_Alouan_Part3);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall] = 16;
+
+ params->clear();
+
+ fedEx(kCharacterAlouan, kCharacterAlouan, 12, 0);
+}
+
+void LogicManager::HAND_Alouan_Part3(HAND_PARAMS) {
+ if (msg->action) {
+ if (msg->action == 12) {
+ send(kCharacterAlouan, kCharacterClerk, 191070912, 4840);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAlouan).characterPosition.position = 4840;
+ goto LABEL_11;
+ case 2:
+ goto LABEL_20;
+ case 3:
+ goto LABEL_23;
+ case 4:
+ goto LABEL_26;
+ default:
+ return;
+ }
+ }
+ return;
+ }
+ if (_gameTime > 1984500 && !getCharacterCurrentParams(kCharacterAlouan)[0]) {
+ getCharacterCurrentParams(kCharacterAlouan)[0] = 1;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 1;
+ AlouanCall(&LogicManager::CONS_Alouan_GoHtoF, 0, 0, 0, 0);
+ return;
+ }
+LABEL_11:
+ if (getCharacterCurrentParams(kCharacterAlouan)[1] != 0x7FFFFFFF && _gameTime > 1989000) {
+ if (_gameTime > 2119500)
+ goto LABEL_18;
+ if (!cathInCorridor(kCarGreenSleeping) || !getCharacterCurrentParams(kCharacterAlouan)[1]) {
+ getCharacterCurrentParams(kCharacterAlouan)[1] = _gameTime + 75;
+ if (_gameTime == -75)
+ goto LABEL_19;
+ }
+ if (getCharacterCurrentParams(kCharacterAlouan)[1] < _gameTime) {
+ LABEL_18:
+ getCharacterCurrentParams(kCharacterAlouan)[1] = 0x7FFFFFFF;
+ LABEL_19:
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
+ AlouanCall(&LogicManager::CONS_Alouan_PeekF, 0, 0, 0, 0);
+ return;
+ }
+ }
+LABEL_20:
+ if (_gameTime > 2052000 && !getCharacterCurrentParams(kCharacterAlouan)[2]) {
+ getCharacterCurrentParams(kCharacterAlouan)[2] = 1;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 3;
+ AlouanCall(&LogicManager::CONS_Alouan_DoDialog, "Har1005", 0, 0, 0);
+ return;
+ }
+LABEL_23:
+ if (_gameTime > 2133000 && !getCharacterCurrentParams(kCharacterAlouan)[3]) {
+ getCharacterCurrentParams(kCharacterAlouan)[3] = 1;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 4;
+ AlouanCall(&LogicManager::CONS_Alouan_GoFtoH, 0, 0, 0, 0);
+ return;
+ }
+LABEL_26:
+ if (getCharacterCurrentParams(kCharacterAlouan)[4] != 0x7FFFFFFF && _gameTime > 2151000) {
+ if (_gameTime <= 2241000) {
+ if (!cathInCorridor(kCarGreenSleeping) || !getCharacterCurrentParams(kCharacterAlouan)[4]) {
+ getCharacterCurrentParams(kCharacterAlouan)[4] = _gameTime + 75;
+ if (_gameTime == -75)
+ goto LABEL_34;
+ }
+ if (getCharacterCurrentParams(kCharacterAlouan)[4] >= _gameTime)
+ return;
+ }
+ getCharacterCurrentParams(kCharacterAlouan)[4] = 0x7FFFFFFF;
+ LABEL_34:
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 5;
+ AlouanCall(&LogicManager::CONS_Alouan_PeekH, 0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Alouan_StartPart4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlouan).callParams[getCharacter(kCharacterAlouan).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, &LogicManager::HAND_Alouan_StartPart4);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall] = 17;
+
+ params->clear();
+
+ fedEx(kCharacterAlouan, kCharacterAlouan, 12, 0);
+}
+
+void LogicManager::HAND_Alouan_StartPart4(HAND_PARAMS) {
+ if (msg->action == 0) {
+ CONS_Alouan_Part4(0, 0, 0, 0);
+ } else if (msg->action == 12) {
+ endGraphics(kCharacterAlouan);
+ getCharacter(kCharacterAlouan).characterPosition.position = 2740;
+ getCharacter(kCharacterAlouan).characterPosition.location = 1;
+ getCharacter(kCharacterAlouan).characterPosition.car = kCarGreenSleeping;
+ }
+}
+
+void LogicManager::CONS_Alouan_Part4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlouan).callParams[getCharacter(kCharacterAlouan).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, &LogicManager::HAND_Alouan_Part4);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall] = 18;
+
+ params->clear();
+
+ fedEx(kCharacterAlouan, kCharacterAlouan, 12, 0);
+}
+
+void LogicManager::HAND_Alouan_Part4(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAlouan)[0] == 0x7FFFFFFF || !_gameTime)
+ goto LABEL_22;
+
+ if (_gameTime <= 2443500) {
+ if (!cathInCorridor(kCarGreenSleeping) || !getCharacterCurrentParams(kCharacterAlouan)[0]) {
+ getCharacterCurrentParams(kCharacterAlouan)[0] = _gameTime + 75;
+ if (_gameTime == -75)
+ goto LABEL_13;
+ }
+
+ if (getCharacterCurrentParams(kCharacterAlouan)[0] >= _gameTime)
+ goto LABEL_22;
+ }
+
+ getCharacterCurrentParams(kCharacterAlouan)[0] = 0x7FFFFFFF;
+ LABEL_13:
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 1;
+ AlouanCall(&LogicManager::CONS_Alouan_PeekH, 0, 0, 0, 0);
+ return;
+ case 12:
+ send(kCharacterAlouan, kCharacterClerk, 191070912, 4840);
+ return;
+ case 18:
+ if (getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] != 1) {
+ if (getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] != 2)
+ return;
+
+ send(kCharacterAlouan, kCharacterClerk, 191070912, 4070);
+ goto LABEL_18;
+ }
+ LABEL_22:
+ if (_gameTime > 2455200 && !getCharacterCurrentParams(kCharacterAlouan)[1]) {
+ getCharacterCurrentParams(kCharacterAlouan)[1] = 1;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
+ AlouanCall(&LogicManager::CONS_Alouan_GoHtoF, 0, 0, 0, 0);
+ return;
+ }
+ LABEL_18:
+ if (_gameTime > 2475000 && !getCharacterCurrentParams(kCharacterAlouan)[2]) {
+ getCharacterCurrentParams(kCharacterAlouan)[2] = 1;
+ send(kCharacterAlouan, kCharacterClerk, 191070912, 4840);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 3;
+ AlouanCall(&LogicManager::CONS_Alouan_GoFtoH, 0, 0, 0, 0);
+ }
+
+ break;
+ }
+}
+
+void LogicManager::CONS_Alouan_Asleep4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlouan).callParams[getCharacter(kCharacterAlouan).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, &LogicManager::HAND_Alouan_Asleep4);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall] = 19;
+
+ params->clear();
+
+ fedEx(kCharacterAlouan, kCharacterAlouan, 12, 0);
+}
+
+void LogicManager::HAND_Alouan_Asleep4(HAND_PARAMS) {
+ if (msg->action == 12) {
+ setDoor(7, kCharacterCath, 3, 10, 9);
+ setDoor(5, kCharacterCath, 3, 10, 9);
+ getCharacter(kCharacterAlouan).characterPosition.position = 2740;
+ getCharacter(kCharacterAlouan).characterPosition.location = 1;
+ getCharacter(kCharacterAlouan).characterPosition.car = kCarGreenSleeping;
+ endGraphics(kCharacterAlouan);
+ }
+}
+
+void LogicManager::CONS_Alouan_StartPart5(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlouan).callParams[getCharacter(kCharacterAlouan).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, &LogicManager::HAND_Alouan_StartPart5);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall] = 20;
+
+ params->clear();
+
+ fedEx(kCharacterAlouan, kCharacterAlouan, 12, 0);
+}
+
+void LogicManager::HAND_Alouan_StartPart5(HAND_PARAMS) {
+ if (msg->action == 0) {
+ CONS_Alouan_Prisoner(0, 0, 0, 0);
+ } else if (msg->action == 12) {
+ endGraphics(kCharacterAlouan);
+ getCharacter(kCharacterAlouan).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterAlouan).characterPosition.position = 3969;
+ getCharacter(kCharacterAlouan).characterPosition.location = 1;
+ getCharacter(kCharacterAlouan).clothes = 0;
+ getCharacter(kCharacterAlouan).inventoryItem = kItemNone;
+ }
+}
+
+void LogicManager::CONS_Alouan_Prisoner(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlouan).callParams[getCharacter(kCharacterAlouan).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, &LogicManager::HAND_Alouan_Prisoner);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall] = 21;
+
+ params->clear();
+
+ fedEx(kCharacterAlouan, kCharacterAlouan, 12, 0);
+}
+
+void LogicManager::HAND_Alouan_Prisoner(HAND_PARAMS) {
+ if (msg->action == 70549068)
+ CONS_Alouan_Free(0, 0, 0, 0);
+}
+
+void LogicManager::CONS_Alouan_Free(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlouan).callParams[getCharacter(kCharacterAlouan).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, &LogicManager::HAND_Alouan_Free);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall] = 22;
+
+ params->clear();
+
+ fedEx(kCharacterAlouan, kCharacterAlouan, 12, 0);
+}
+
+void LogicManager::HAND_Alouan_Free(HAND_PARAMS) {
+ if (msg->action == 0) {
+ if (getCharacterCurrentParams(kCharacterAlouan)[0] ||
+ (getCharacterCurrentParams(kCharacterAlouan)[0] = _gameTime + 2700, _gameTime != -2700)) {
+ if (getCharacterCurrentParams(kCharacterAlouan)[0] >= _gameTime)
+ return;
+
+ getCharacterCurrentParams(kCharacterAlouan)[0] = 0x7FFFFFFF;
+ }
+
+ CONS_Alouan_Hiding(0, 0, 0, 0);
+ } else if (msg->action == 12) {
+ getCharacter(kCharacterAlouan).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterAlouan).characterPosition.position = 5000;
+ getCharacter(kCharacterAlouan).characterPosition.location = 0;
+
+ } else if (msg->action == 17) {
+ if (checkLoc(kCharacterCath, 3)) {
+ CONS_Alouan_Hiding(0, 0, 0, 0);
+ }
+ }
+}
+
+void LogicManager::CONS_Alouan_Hiding(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlouan).callParams[getCharacter(kCharacterAlouan).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, &LogicManager::HAND_Alouan_Hiding);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall] = 23;
+
+ params->clear();
+
+ fedEx(kCharacterAlouan, kCharacterAlouan, 12, 0);
+}
+
+void LogicManager::HAND_Alouan_Hiding(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 1;
+ AlouanCall(&LogicManager::CONS_Alouan_DoWalk, 3, 4070, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] == 1) {
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
+ AlouanCall(&LogicManager::CONS_Alouan_DoCorrOtis, "619AF", 6, 0, 0);
+ } else if (getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] == 2) {
+ endGraphics(kCharacterAlouan);
+ getCharacter(kCharacterAlouan).characterPosition.location = 1;
+ getCharacter(kCharacterAlouan).characterPosition.position = 4070;
+ setDoor(6, kCharacterCath, 1, 10, 9);
+ }
+
+ break;
+ case 135800432:
+ CONS_Alouan_Disappear(0, 0, 0, 0);
+ break;
+ }
+}
+
+void LogicManager::CONS_Alouan_Disappear(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAlouan).callParams[getCharacter(kCharacterAlouan).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlouan, &LogicManager::HAND_Alouan_Disappear);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall] = 24;
+
+ params->clear();
+
+ fedEx(kCharacterAlouan, kCharacterAlouan, 12, 0);
+}
+
+void LogicManager::HAND_Alouan_Disappear(HAND_PARAMS) {
+ // No-op
+}
+
+void (LogicManager::*LogicManager::_functionsAlouan[])(HAND_PARAMS) = {
+ nullptr,
+ &LogicManager::HAND_Alouan_DebugWalks,
+ &LogicManager::HAND_Alouan_DoCorrOtis,
+ &LogicManager::HAND_Alouan_DoDialog,
+ &LogicManager::HAND_Alouan_DoWait,
+ &LogicManager::HAND_Alouan_DoWalk,
+ &LogicManager::HAND_Alouan_PeekF,
+ &LogicManager::HAND_Alouan_PeekH,
+ &LogicManager::HAND_Alouan_GoFtoH,
+ &LogicManager::HAND_Alouan_GoHtoF,
+ &LogicManager::HAND_Alouan_Birth,
+ &LogicManager::HAND_Alouan_Part1,
+ &LogicManager::HAND_Alouan_Asleep,
+ &LogicManager::HAND_Alouan_StartPart2,
+ &LogicManager::HAND_Alouan_Part2,
+ &LogicManager::HAND_Alouan_StartPart3,
+ &LogicManager::HAND_Alouan_Part3,
+ &LogicManager::HAND_Alouan_StartPart4,
+ &LogicManager::HAND_Alouan_Part4,
+ &LogicManager::HAND_Alouan_Asleep4,
+ &LogicManager::HAND_Alouan_StartPart5,
+ &LogicManager::HAND_Alouan_Prisoner,
+ &LogicManager::HAND_Alouan_Free,
+ &LogicManager::HAND_Alouan_Hiding,
+ &LogicManager::HAND_Alouan_Disappear
+};
+
+} // End of namespace LastExpress
diff --git a/engines/lastexpress/characters/anna.cpp b/engines/lastexpress/characters/anna.cpp
new file mode 100644
index 00000000000..a24fbaccef0
--- /dev/null
+++ b/engines/lastexpress/characters/anna.cpp
@@ -0,0 +1,4422 @@
+/* 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_Anna(int chapter) {
+ switch (chapter) {
+ case 0:
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterAnna,
+ _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]
+ );
+
+ break;
+ case 1:
+ CONS_Anna_Birth(0, 0, 0, 0);
+ break;
+ case 2:
+ CONS_Anna_StartPart2(0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_Anna_StartPart3(0, 0, 0, 0);
+ break;
+ case 4:
+ CONS_Anna_StartPart4(0, 0, 0, 0);
+ break;
+ case 5:
+ CONS_Anna_StartPart5(0, 0, 0, 0);
+ break;
+ default:
+ return;
+ }
+}
+
+void LogicManager::AnnaCall(CALL_PARAMS) {
+ getCharacter(kCharacterAnna).currentCall++;
+
+ (this->*functionPointer)(param1, param2, param3, param4);
+}
+
+void LogicManager::CONS_Anna_DebugWalks(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_DebugWalks);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 1;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_DebugWalks(HAND_PARAMS) {
+ if (msg->action) {
+ if (msg->action == 1) {
+ getCharacter(kCharacterAnna).clothes++;
+ if (getCharacter(kCharacterAnna).clothes > 3)
+ getCharacter(kCharacterAnna).clothes = 0;
+ } else if (msg->action == 12) {
+ getCharacter(kCharacterAnna).characterPosition.position = 0;
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ getCharacter(kCharacterAnna).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterAnna).inventoryItem = 0x80;
+ getCharacterCurrentParams(kCharacterAnna)[0] = 10000;
+ }
+ } else if (walk(kCharacterAnna, kCarGreenSleeping, getCharacterCurrentParams(kCharacterAnna)[0])) {
+ if (getCharacterCurrentParams(kCharacterAnna)[0] == 10000)
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+ else
+ getCharacterCurrentParams(kCharacterAnna)[0] = 10000;
+ }
+}
+
+void LogicManager::CONS_Anna_DoSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_DoSeqOtis);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 2;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_DoSeqOtis(HAND_PARAMS) {
+ if (msg->action == 3) {
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ } else if (msg->action == 12) {
+ startSeqOtis(kCharacterAnna, (char *)&getCharacterCurrentParams(kCharacterAnna)[0]);
+ }
+}
+
+void LogicManager::CONS_Anna_DoBlockSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_DoBlockSeqOtis);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 3;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ params->parameters[3] = param2.intParam;
+ params->parameters[4] = param3.intParam;
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_DoBlockSeqOtis(HAND_PARAMS) {
+ if (msg->action == 3) {
+ releaseView(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[3], getCharacterCurrentParams(kCharacterAnna)[4]);
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ } else if (msg->action == 12) {
+ startSeqOtis(kCharacterAnna, (char *)&getCharacterCurrentParams(kCharacterAnna)[0]);
+ blockView(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[3], getCharacterCurrentParams(kCharacterAnna)[4]);
+ }
+}
+
+void LogicManager::CONS_Anna_DoCorrOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_DoCorrOtis);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 4;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ params->parameters[3] = param2.intParam;
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_DoCorrOtis(HAND_PARAMS) {
+ if (msg->action == 3) {
+ releaseAtDoor(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[3]);
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ } else if (msg->action == 12) {
+ startSeqOtis(kCharacterAnna, (char *)&getCharacterCurrentParams(kCharacterAnna)[0]);
+ blockAtDoor(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[3]);
+ }
+}
+
+void LogicManager::CONS_Anna_FinishSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_FinishSeqOtis);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 5;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_FinishSeqOtis(HAND_PARAMS) {
+ if (msg->action == 0) {
+ if (getCharacter(kCharacterAnna).direction == 4)
+ return;
+ goto LABEL_5;
+ }
+ if (msg->action == 3) {
+ LABEL_5:
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ }
+}
+
+void LogicManager::CONS_Anna_DoJoinedSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_DoJoinedSeqOtis);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 6;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ params->parameters[3] = param2.intParam;
+ params->parameters[4] = param3.intParam;
+
+ strncpy((char *)¶ms->parameters[5], param4.stringParam, 12);
+
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_DoJoinedSeqOtis(HAND_PARAMS) {
+ switch (msg->action) {
+ case 3:
+ if (!getCharacterCurrentParams(kCharacterAnna)[8])
+ fedEx(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[3], getCharacterCurrentParams(kCharacterAnna)[4], (char *)&getCharacterCurrentParams(kCharacterAnna)[5]);
+
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ break;
+ case 10:
+ if (!getCharacterCurrentParams(kCharacterAnna)[8]) {
+ fedEx(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[3], getCharacterCurrentParams(kCharacterAnna)[4], (char *)&getCharacterCurrentParams(kCharacterAnna)[5]);
+ getCharacterCurrentParams(kCharacterAnna)[8] = 1;
+ }
+ break;
+ case 12:
+ startSeqOtis(kCharacterAnna, (char *)&getCharacterCurrentParams(kCharacterAnna)[0]);
+ break;
+ }
+}
+
+void LogicManager::CONS_Anna_DoDialog(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_DoDialog);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 7;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_DoDialog(HAND_PARAMS) {
+ if (msg->action == 2) {
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ } else if (msg->action == 12) {
+ playDialog(kCharacterAnna, (char *)&getCharacterCurrentParams(kCharacterAnna)[0], -1, 0);
+ }
+}
+
+void LogicManager::CONS_Anna_WaitRCClear(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_WaitRCClear);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 8;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_WaitRCClear(HAND_PARAMS) {
+ if (msg->action == 0) {
+ if (!rcClear())
+ return;
+ goto LABEL_7;
+ }
+ if (msg->action == 12 && rcClear()) {
+ LABEL_7:
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ }
+}
+
+void LogicManager::CONS_Anna_SaveGame(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_SaveGame);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 9;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+ params->parameters[1] = param2.intParam;
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_SaveGame(HAND_PARAMS) {
+ if (msg->action) {
+ if (msg->action == 12) {
+ save(
+ 1,
+ getCharacterCurrentParams(kCharacterAnna)[0],
+ getCharacterCurrentParams(kCharacterAnna)[1]
+ );
+
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ }
+ } else {
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ }
+}
+
+void LogicManager::CONS_Anna_DoWalk(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_DoWalk);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 10;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+ params->parameters[1] = param2.intParam;
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_DoWalk(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[0], getCharacterCurrentParams(kCharacterAnna)[1]))
+ goto LABEL_12;
+ break;
+ case 5:
+ if (_gameEvents[kEventAugustPresentAnna] || _gameEvents[kEventAugustPresentAnnaFirstIntroduction] || _gameProgress[kProgressChapter] >= 2) {
+ playDialog(kCharacterCath, "CAT1001", -1, 0);
+ } else {
+ playCathExcuseMe();
+ }
+ break;
+ case 6:
+ playChrExcuseMe(kCharacterAnna, kCharacterCath, 0);
+ break;
+ case 12:
+ if (walk(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[0], getCharacterCurrentParams(kCharacterAnna)[1])) {
+ LABEL_12:
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ }
+ break;
+ default:
+ return;
+ }
+}
+
+void LogicManager::CONS_Anna_DoWait(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_DoWait);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 11;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_DoWait(HAND_PARAMS) {
+ if (msg->action == 0) {
+ if (getCharacterCurrentParams(kCharacterAnna)[1] ||
+ (getCharacterCurrentParams(kCharacterAnna)[1] = _gameTime + getCharacterCurrentParams(kCharacterAnna)[0], _gameTime + getCharacterCurrentParams(kCharacterAnna)[0] != 0)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[1] >= _gameTime)
+ return;
+
+ getCharacterCurrentParams(kCharacterAnna)[1] = 0x7FFFFFFF;
+ }
+
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ }
+}
+
+void LogicManager::CONS_Anna_PracticeMusic(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_PracticeMusic);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 12;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_PracticeMusic(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (!getCharacterCurrentParams(kCharacterAnna)[1] && getCharacterParams(kCharacterAnna, 8)[0])
+ getCharacterCurrentParams(kCharacterAnna)[1] = 1;
+ if (!getCharacterCurrentParams(kCharacterAnna)[5])
+ goto LABEL_11;
+ if (!getCharacterCurrentParams(kCharacterAnna)[6]) {
+ getCharacterCurrentParams(kCharacterAnna)[6] = _currentGameSessionTicks + 75;
+ if (_currentGameSessionTicks == -75)
+ goto LABEL_10;
+ }
+ if (getCharacterCurrentParams(kCharacterAnna)[6] < _currentGameSessionTicks) {
+ getCharacterCurrentParams(kCharacterAnna)[6] = 0x7FFFFFFF;
+ LABEL_10:
+ send(kCharacterAnna, kCharacterAnna, 2, 0);
+ getCharacterCurrentParams(kCharacterAnna)[5] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[6] = 0;
+ }
+ LABEL_11:
+ if (getCharacterCurrentParams(kCharacterAnna)[3]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[7] || (getCharacterCurrentParams(kCharacterAnna)[7] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[7] >= _currentGameSessionTicks)
+ return;
+ getCharacterCurrentParams(kCharacterAnna)[7] = 0x7FFFFFFF;
+ }
+ getCharacterCurrentParams(kCharacterAnna)[3] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[4] = 1;
+ setDoor(37, kCharacterAnna, 1, 0, 9);
+ setDoor(53, kCharacterAnna, 1, 0, 9);
+ --getCharacterCurrentParams(kCharacterAnna)[0];
+ send(kCharacterAnna, kCharacterAnna, 2, 0);
+ getCharacterCurrentParams(kCharacterAnna)[7] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterAnna)[7] = 0;
+ }
+ return;
+ case 2:
+ if (getCharacterCurrentParams(kCharacterAnna)[1]) {
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ } else {
+ getCharacterCurrentParams(kCharacterAnna)[0]++;
+ switch (getCharacterCurrentParams(kCharacterAnna)[0]) {
+ case 1:
+ goto LABEL_21;
+ case 2:
+ playDialog(kCharacterAnna, "ANN2135B", -1, 0);
+ break;
+ case 3:
+ case 4:
+ playDialog(kCharacterAnna, "ANN2135C", -1, 0);
+ break;
+ case 5:
+ case 12:
+ playDialog(kCharacterAnna, "ANN2135L", -1, 0);
+ break;
+ case 6:
+ case 8:
+ playDialog(kCharacterAnna, "ANN2135K", -1, 0);
+ break;
+ case 7:
+ playDialog(kCharacterAnna, "ANN2135H", -1, 0);
+ break;
+ case 9:
+ playDialog(kCharacterAnna, "ANN2135I", -1, 0);
+ break;
+ case 10:
+ playDialog(kCharacterAnna, "ANN2135J", -1, 0);
+ break;
+ case 11:
+ playDialog(kCharacterAnna, "ANN2135M", -1, 0);
+ break;
+ case 13:
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ break;
+ default:
+ return;
+ }
+ }
+ return;
+ case 8:
+ if (getCharacterCurrentParams(kCharacterAnna)[3]) {
+ setDoor(37, kCharacterAnna, 1, 0, 9);
+ setDoor(53, kCharacterAnna, 1, 0, 9);
+ if (msg->param.intParam == 53) {
+ playDialog(kCharacterCath, getCathWCDialog(), -1, 0);
+ } else if (cathHasItem(kItemPassengerList)) {
+ if (rnd(2)) {
+ playDialog(kCharacterCath, getCathSorryDialog(), -1, 0);
+ } else {
+ if (rnd(2) == 0) {
+ playDialog(kCharacterCath, "CAT1506A", -1, 0);
+ } else {
+ playDialog(kCharacterCath, "CAT1506", -1, 0);
+ }
+ }
+
+ } else {
+ playDialog(kCharacterCath, getCathSorryDialog(), -1, 0);
+ }
+
+ getCharacterCurrentParams(kCharacterAnna)[3] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[4] = 1;
+ } else {
+ endDialog(kCharacterAnna);
+ setDoor(37, kCharacterAnna, 1, 0, 0);
+ setDoor(53, kCharacterAnna, 1, 0, 0);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB012", 0, 0, 0);
+ }
+ return;
+ case 9:
+ endDialog(kCharacterAnna);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB013", 0, 0, 0);
+ return;
+ case 12:
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ setDoor(45, kCharacterCath, 0, 255, 255);
+ if (checkCathDir(kCarRedSleeping, 78))
+ bumpCath(kCarRedSleeping, 49, 255);
+ startCycOtis(kCharacterAnna, "418C");
+ if (whoRunningDialog(kCharacterAnna))
+ fadeDialog(kCharacterAnna);
+ LABEL_21:
+ playDialog(kCharacterAnna, "ANN2135A", -1, 0);
+ return;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterAnna)[4] || getCharacterCurrentParams(kCharacterAnna)[3]) {
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[3] = 0;
+ }
+
+ if (checkCathDir(kCarRedSleeping, 60)) {
+ getCharacterCurrentParams(kCharacterAnna)[2]++;
+ if (getCharacterCurrentParams(kCharacterAnna)[2] == 2) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
+ AnnaCall(&LogicManager::CONS_Anna_DoSeqOtis, "418B", 0, 0, 0);
+ }
+ }
+
+ return;
+ case 18:
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Ann1016", 0, 0, 0);
+ break;
+ case 2:
+ setDoor(37, kCharacterAnna, 1, 14, 9);
+ setDoor(53, kCharacterAnna, 1, 14, 9);
+ getCharacterCurrentParams(kCharacterAnna)[3] = 1;
+ break;
+ case 3:
+ if (whoRunningDialog(kCharacterMax))
+ goto LABEL_61;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "MAX1120", 0, 0, 0);
+ break;
+ case 4:
+ LABEL_61:
+ getCharacterCurrentParams(kCharacterAnna)[0]--;
+ getCharacterCurrentParams(kCharacterAnna)[5] = 1;
+ break;
+ case 5:
+ startCycOtis(kCharacterAnna, "418A");
+ break;
+ default:
+ return;
+ }
+ return;
+ default:
+ return;
+ }
+}
+
+void LogicManager::CONS_Anna_DoComplexSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_DoComplexSeqOtis);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 13;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+ strncpy((char *)¶ms->parameters[3], param2.stringParam, 12);
+
+ params->parameters[6] = param3.intParam;
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_DoComplexSeqOtis(HAND_PARAMS) {
+ if (msg->action == 3) {
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ } else if (msg->action == 12) {
+ startSeqOtis(kCharacterAnna, (char *)&getCharacterCurrentParams(kCharacterAnna)[0]);
+ startSeqOtis(getCharacterCurrentParams(kCharacterAnna)[6], (char *)&getCharacterCurrentParams(kCharacterAnna)[3]);
+ }
+}
+
+void LogicManager::CONS_Anna_DoWaitReal(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_DoWaitReal);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 14;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_DoWaitReal(HAND_PARAMS) {
+ if (msg->action == 0) {
+ if (getCharacterCurrentParams(kCharacterAnna)[1] ||
+ (getCharacterCurrentParams(kCharacterAnna)[1] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterAnna)[0],
+ _currentGameSessionTicks + getCharacterCurrentParams(kCharacterAnna)[0] != 0)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[1] >= _currentGameSessionTicks)
+ return;
+
+ getCharacterCurrentParams(kCharacterAnna)[1] = 0x7FFFFFFF;
+ }
+
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ }
+}
+
+void LogicManager::CONS_Anna_CompLogic(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_CompLogic);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 15;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+
+ strncpy((char *)¶ms->parameters[1], param2.stringParam, 12);
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_CompLogic(HAND_PARAMS) {
+ if (msg->action <= 18) {
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAnna)[0] < _gameTime && !getCharacterCurrentParams(kCharacterAnna)[6]) {
+ getCharacterCurrentParams(kCharacterAnna)[6] = 1;
+ setDoor(37, kCharacterCath, 1, 10, 9);
+ setDoor(53, kCharacterCath, 1, 10, 9);
+
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ return;
+ }
+ if (getCharacterCurrentParams(kCharacterAnna)[4]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[7] || (getCharacterCurrentParams(kCharacterAnna)[7] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[7] >= _currentGameSessionTicks)
+ return;
+ getCharacterCurrentParams(kCharacterAnna)[7] = 0x7FFFFFFF;
+ }
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[5] = 1;
+
+ setDoor(37, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
+ setDoor(53, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
+ getCharacterCurrentParams(kCharacterAnna)[7] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterAnna)[7] = 0;
+ }
+ break;
+ case 8:
+ goto LABEL_26;
+ case 9:
+ if (inComp(kCharacterMax, kCarRedSleeping, 4070)) {
+ setDoor(37, kCharacterAnna, 1, 0, 0);
+ setDoor(53, kCharacterAnna, 1, 0, 0);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB013", 0, 0, 0);
+ } else {
+ LABEL_26:
+ if (getCharacterCurrentParams(kCharacterAnna)[4]) {
+ setDoor(37, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
+ setDoor(53, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
+
+ if (msg->param.intParam == 53) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 6;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, getCathWCDialog(), 0, 0, 0);
+ } else if (cathHasItem(kItemPassengerList)) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 7;
+ if (rnd(2)) {
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, getCathSorryDialog(), 0, 0, 0);
+ } else {
+ if (rnd(2) == 0) {
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "CAT1506A", 0, 0, 0);
+ } else {
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "CAT1506", 0, 0, 0);
+ }
+ }
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 8;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, getCathSorryDialog(), 0, 0, 0);
+ }
+ } else {
+ setDoor(37, kCharacterAnna, 1, 0, 0);
+ setDoor(53, kCharacterAnna, 1, 0, 0);
+ if (msg->action == 8) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB012", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB013", 0, 0, 0);
+ }
+ }
+ }
+ return;
+ case 12:
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ startCycOtis(kCharacterAnna, (char *)&getCharacterCurrentParams(kCharacterAnna)[1]);
+ return;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterAnna)[5] || getCharacterCurrentParams(kCharacterAnna)[4]) {
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterAnna)[5] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0;
+ }
+ return;
+ case 18:
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ if (whoRunningDialog(kCharacterMax))
+ goto LABEL_25;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "MAX1120", 0, 0, 0);
+ break;
+ case 2:
+ LABEL_25:
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ break;
+ case 3:
+ case 4:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "ANN1016", 0, 0, 0);
+ break;
+ case 5:
+ setDoor(37, kCharacterAnna, 1, 14, 0);
+ setDoor(53, kCharacterAnna, 1, 14, 0);
+ getCharacterCurrentParams(kCharacterAnna)[4] = 1;
+ break;
+ case 6:
+ case 7:
+ case 8:
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[5] = 1;
+ break;
+ default:
+ return;
+ }
+ return;
+ default:
+ return;
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_Birth(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_Birth);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 16;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_Birth(HAND_PARAMS) {
+ if (msg->action) {
+ if (msg->action == 12) {
+ autoMessage(kCharacterAnna, 291662081, 0);
+ autoMessage(kCharacterAnna, 238936000, 1);
+ setDoor(37, kCharacterCath, 1, 10, 9);
+ setDoor(53, kCharacterCath, 1, 10, 9);
+ setDoor(45, kCharacterCath, 1, 255, 255);
+ getCharacter(kCharacterAnna).characterPosition.position = 8200;
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ getCharacter(kCharacterAnna).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterAnna).clothes = 0;
+ }
+ } else if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterAnna)[0]) {
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ CONS_Anna_FleeTyler(0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Anna_DoWalkP1(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_DoWalkP1);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 17;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+ params->parameters[1] = param2.intParam;
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_DoWalkP1(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAnna)[2] && nearChar(kCharacterAnna, kCharacterCath, 2000)) {
+ getCharacter(kCharacterAnna).inventoryItem = getCharacterCurrentParams(kCharacterAnna)[2];
+ } else {
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+ }
+
+ if (walk(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[0], getCharacterCurrentParams(kCharacterAnna)[1])) {
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ }
+
+ return;
+ case 1:
+ if (msg->param.intParam == 8) {
+ getCharacter(kCharacterAnna).inventoryItem &= ~8;
+ getCharacterCurrentParams(kCharacterAnna)[2] &= ~8;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaGiveScarf, 0, 0);
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventGotALight, 0, 0);
+ }
+
+ return;
+ case 5:
+ if (_gameEvents[kEventAugustPresentAnna] || _gameEvents[kEventAugustPresentAnnaFirstIntroduction] || _gameProgress[kProgressChapter] >= 2) {
+ playDialog(kCharacterCath, "CAT1001", -1, 0);
+ } else {
+ playCathExcuseMe();
+ }
+
+ return;
+ case 6:
+ playChrExcuseMe(kCharacterAnna, kCharacterCath, 0);
+ return;
+ case 12:
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+ if (_gameProgress[kProgressJacket] == 2 && !_gameEvents[kEventGotALight] && !_gameEvents[kEventGotALightD] && !_gameEvents[kEventAugustPresentAnna] && !_gameEvents[kEventAugustPresentAnnaFirstIntroduction]) {
+ getCharacterCurrentParams(kCharacterAnna)[2] = 128;
+ }
+
+ if (_gameProgress[kProgressJacket] == 2 && !getCharacterCurrentParams(kCharacterAnna)[2] && !_gameEvents[kEventAnnaGiveScarfAsk] && !_gameEvents[kEventAnnaGiveScarfDinerAsk] && !_gameEvents[kEventAnnaGiveScarfSalonAsk]) {
+ getCharacterCurrentParams(kCharacterAnna)[2] = 8;
+ }
+
+ if (walk(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[0], getCharacterCurrentParams(kCharacterAnna)[1])) {
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ }
+ return;
+ case 18:
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ if (_gameEvents[kEventAnnaGiveScarf] || _gameEvents[kEventAnnaGiveScarfDiner] || _gameEvents[kEventAnnaGiveScarfSalon] || _gameEvents[kEventAnnaGiveScarfMonogram] || _gameEvents[kEventAnnaGiveScarfDinerMonogram] || _gameEvents[kEventAnnaGiveScarfSalonMonogram]) {
+ playNIS(kEventAnnaGiveScarfAsk);
+ } else if (_gameEvents[kEventAugustPresentAnna] || _gameEvents[kEventAugustPresentAnnaFirstIntroduction]) {
+ playNIS(kEventAnnaGiveScarfMonogram);
+ } else {
+ playNIS(kEventAnnaGiveScarf);
+ }
+ if (getCharacter(kCharacterAnna).direction != 1) {
+ LABEL_55:
+ bumpCathRx(getCharacter(kCharacterAnna).characterPosition.car, getCharacter(kCharacterAnna).characterPosition.position + 750);
+ return;
+ }
+ } else {
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] != 2)
+ return;
+
+ if (getCharacter(kCharacterAnna).direction == 1) {
+ playNIS(kEventGotALightD);
+ } else {
+ playNIS(kEventGotALight);
+ }
+
+ getCharacter(kCharacterAnna).inventoryItem &= ~0x80;
+
+ int32 tmp = getCharacterCurrentParams(kCharacterAnna)[2] & 0xFFFFFF7F;
+ getCharacterCurrentParams(kCharacterAnna)[2] = tmp;
+ if (_gameProgress[1] == 2 && !_gameEvents[204] && !_gameEvents[205] && !_gameEvents[206])
+ getCharacterCurrentParams(kCharacterAnna)[2] = tmp | 8;
+ if (getCharacter(kCharacterAnna).direction != 1)
+ goto LABEL_55;
+ }
+ bumpCathFx(getCharacter(kCharacterAnna).characterPosition.car, getCharacter(kCharacterAnna).characterPosition.position - 750);
+ return;
+ default:
+ return;
+ }
+}
+
+void LogicManager::CONS_Anna_DiningLogic(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_DiningLogic);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 18;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_DiningLogic(HAND_PARAMS) {
+ if (msg->action > 12) {
+ if (msg->action <= 168046720) {
+ switch (msg->action) {
+ case 168046720:
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+ getCharacterCurrentParams(kCharacterAnna)[3] = 1;
+ break;
+ case 17:
+ getCharacterCurrentParams(kCharacterAnna)[2] = checkCathDir(kCarRestaurant, 62);
+ break;
+ case 18:
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ if (_gameEvents[kEventAnnaGiveScarf] || _gameEvents[kEventAnnaGiveScarfDiner] || _gameEvents[kEventAnnaGiveScarfSalon] || _gameEvents[kEventAnnaGiveScarfMonogram] || _gameEvents[kEventAnnaGiveScarfDinerMonogram] || _gameEvents[kEventAnnaGiveScarfSalonMonogram]) {
+ playNIS(kEventAnnaGiveScarfDinerAsk);
+ } else {
+ if (_gameEvents[kEventAugustPresentAnna] || _gameEvents[kEventAugustPresentAnnaFirstIntroduction])
+ playNIS(kEventAnnaGiveScarfDinerMonogram);
+ else
+ playNIS(kEventAnnaGiveScarfDiner);
+ getCharacterCurrentParams(kCharacterAnna)[4] = 1;
+ }
+ int32 tmp = getCharacterCurrentParams(kCharacterAnna)[1] & 0xFFFFFFF7;
+ getCharacterCurrentParams(kCharacterAnna)[1] = tmp;
+ getCharacter(kCharacterAnna).inventoryItem = tmp;
+ bumpCath(kCarRestaurant, 61, 255);
+ } else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
+ playNIS(kEventDinerMindJoin);
+ int32 tmp = getCharacterCurrentParams(kCharacterAnna)[1] & 0xFFFFFF7F;
+ getCharacterCurrentParams(kCharacterAnna)[1] = tmp;
+ if (_gameProgress[kProgressJacket] == 2 && !_gameEvents[kEventAnnaGiveScarfAsk] && !_gameEvents[kEventAnnaGiveScarfDinerAsk] && !_gameEvents[kEventAnnaGiveScarfSalonAsk]) {
+ getCharacterCurrentParams(kCharacterAnna)[1] = tmp | 8;
+ }
+ getCharacter(kCharacterAnna).inventoryItem = getCharacterCurrentParams(kCharacterAnna)[1];
+ bumpCath(kCarRestaurant, 61, 255);
+ }
+ break;
+ }
+ return;
+ }
+ if (msg->action > 170016384) {
+ if (msg->action != 259136835 && msg->action != 268773672)
+ return;
+ } else if (msg->action != 170016384) {
+ if (msg->action == 168627977) {
+ getCharacter(kCharacterAnna).inventoryItem = getCharacterCurrentParams(kCharacterAnna)[1];
+ getCharacterCurrentParams(kCharacterAnna)[3] = 0;
+ }
+ return;
+ }
+ LABEL_77:
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ return;
+ }
+ if (msg->action == 12) {
+ if (_gameProgress[kProgressJacket] == 2 && !_gameEvents[kEventDinerMindJoin] && !_gameEvents[kEventAugustPresentAnna] && !_gameEvents[kEventAugustPresentAnnaFirstIntroduction]) {
+ getCharacterCurrentParams(kCharacterAnna)[1] |= 0x80;
+ }
+ if (_gameProgress[kProgressJacket] == 2 && !getCharacterCurrentParams(kCharacterAnna)[1] && !_gameEvents[kEventAnnaGiveScarfAsk] && !_gameEvents[kEventAnnaGiveScarfDinerAsk] && !_gameEvents[kEventAnnaGiveScarfSalonAsk]) {
+ getCharacterCurrentParams(kCharacterAnna)[1] = 8;
+ }
+ getCharacter(kCharacterAnna).inventoryItem = getCharacterCurrentParams(kCharacterAnna)[1];
+ return;
+ }
+ if (msg->action) {
+ if (msg->action == 1) {
+ if (msg->param.intParam == 8) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaGiveScarf, 0, 0);
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventDinerMindJoin, 0, 0);
+ }
+ }
+ return;
+ }
+ if (getCharacterCurrentParams(kCharacterAnna)[0] && _gameTime > getCharacterCurrentParams(kCharacterAnna)[0] && rcClear())
+ goto LABEL_77;
+ if (getCharacterCurrentParams(kCharacterAnna)[4] && !getCharacterCurrentParams(kCharacterAnna)[3]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[5] || (getCharacterCurrentParams(kCharacterAnna)[5] = _gameTime + 900, _gameTime != -900)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[5] >= _gameTime)
+ goto LABEL_28;
+ getCharacterCurrentParams(kCharacterAnna)[5] = 0x7FFFFFFF;
+ }
+ getCharacterCurrentParams(kCharacterAnna)[1] |= 8;
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[5] = 0;
+ }
+LABEL_28:
+ if (getCharacterCurrentParams(kCharacterAnna)[2]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[6] || (getCharacterCurrentParams(kCharacterAnna)[6] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[6] >= _currentGameSessionTicks)
+ return;
+ getCharacterCurrentParams(kCharacterAnna)[6] = 0x7FFFFFFF;
+ }
+ bumpCath(kCarRestaurant, 61, 255);
+ } else {
+ getCharacterCurrentParams(kCharacterAnna)[6] = 0;
+ }
+}
+
+void LogicManager::CONS_Anna_FleeTyler(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_FleeTyler);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 19;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_FleeTyler(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "618Ca", 1, 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ getCharacter(kCharacterAnna).characterPosition.position = 8514;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoWalk, 4, 4070, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "618Af", 37, 0, 0);
+ break;
+ case 3:
+ endGraphics(kCharacterAnna);
+ getCharacter(kCharacterAnna).characterPosition.position = 4070;
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ CONS_Anna_WaitDinner(0, 0, 0, 0);
+ break;
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_WaitDinner(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_WaitDinner);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 20;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_WaitDinner(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_CompLogic, 1093500, "NONE", 0, 0);
+ } else if (msg->action == 18) {
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "618Bf", 37, 0, 0);
+ } else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ send(kCharacterAnna, kCharacterMax, 71277948, 0);
+ CONS_Anna_GoDinner(0, 0, 0, 0);
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_GoDinner(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_GoDinner);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 21;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_GoDinner(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoWalkP1, 5, 850, 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAnna).characterPosition.position = 1540;
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoSeqOtis, "801US", 0, 0, 0);
+ break;
+ case 3:
+ startSeqOtis(kCharacterAnna, "001B");
+ if (inSalon(kCharacterCath))
+ advanceFrame(kCharacterAnna);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 4:
+ CONS_Anna_WaitHW(0, 0, 0, 0);
+ break;
+ default:
+ return;
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_WaitHW(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_WaitHW);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 22;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_WaitHW(HAND_PARAMS) {
+ if (msg->action == 12) {
+ startCycOtis(kCharacterAnna, "001A");
+ send(kCharacterAnna, kCharacterHeadWait, 223262556, 0);
+ } else if (msg->action == 157370960) {
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ CONS_Anna_WaitingDinner(0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Anna_WaitingDinner(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_WaitingDinner);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 23;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_WaitingDinner(HAND_PARAMS) {
+ if (msg->action == 12) {
+ startCycOtis(kCharacterAnna, "001D");
+ send(kCharacterAnna, kCharacterWaiter1, 270410280, 0);
+ send(kCharacterAnna, kCharacterTableA, 136455232, 0);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DiningLogic, 0, 0, 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ startCycOtis(kCharacterAnna, "001E");
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "ANN1048", 0, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoSeqOtis, "001F", 0, 0, 0);
+ break;
+ case 3:
+ send(kCharacterAnna, kCharacterWaiter1, 203859488, 0);
+ CONS_Anna_WaitingDinner2(0, 0, 0, 0);
+ break;
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_WaitingDinner2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_WaitingDinner2);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 24;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_WaitingDinner2(HAND_PARAMS) {
+ if (msg->action == 12) {
+ startCycOtis(kCharacterAnna, "001G");
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DiningLogic, 0, 0, 0, 0);
+ } else if (msg->action == 18) {
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ startCycOtis(kCharacterAnna, "001H");
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "ANN1049", 0, 0, 0);
+ } else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
+ send(kCharacterAnna, kCharacterWaiter1, 136702400, 0);
+ CONS_Anna_EatingDinner(0, 0, 0, 0);
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_EatingDinner(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_EatingDinner);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 25;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_EatingDinner(HAND_PARAMS) {
+ if (msg->action > 18) {
+ if (msg->action == 122358304) {
+ startCycOtis(kCharacterAnna, "BLANK");
+ } else if (msg->action == 201437056) {
+ startCycOtis(kCharacterAnna, "001J");
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DiningLogic, 1138500, 0, 0, 0);
+ }
+ } else if (msg->action == 18) {
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_WaitRCClear, 0, 0, 0, 0);
+ } else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 3) {
+ CONS_Anna_LeaveDinner(0, 0, 0, 0);
+ }
+ } else if (msg->action == 12) {
+ startCycOtis(kCharacterAnna, "001J");
+ _gameProgress[kProgressField28] = 1;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DiningLogic, 0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Anna_LeaveDinner(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_LeaveDinner);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 26;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_LeaveDinner(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ blockView(kCharacterAnna, kCarRestaurant, 62);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoJoinedSeqOtis, "001L", 33, 103798704, "001M");
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ releaseView(kCharacterAnna, kCarRestaurant, 62);
+ send(kCharacterAnna, kCharacterWaiter1, 237485916, 0);
+ startSeqOtis(kCharacterAnna, "801DS");
+ if (inDiningRoom(kCharacterCath))
+ advanceFrame(kCharacterAnna);
+
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoWalkP1, 4, 4070, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "618Af", 37, 0, 0);
+ break;
+ case 4:
+ endGraphics(kCharacterAnna);
+ getCharacter(kCharacterAnna).characterPosition.position = 4070;
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ CONS_Anna_FreshenUp(0, 0, 0, 0);
+ break;
+ default:
+ return;
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_FreshenUp(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_FreshenUp);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 27;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_FreshenUp(HAND_PARAMS) {
+ if (msg->action == 12) {
+ send(kCharacterAnna, kCharacterMax, 101687594, 0);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_CompLogic, 1156500, "NONE", 0, 0);
+ } else if (msg->action == 18) {
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1 ||
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
+ if (_gameProgress[kProgressField14] == 29) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = _gameTime + 900;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_CompLogic, getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8], "NONE", 0, 0);
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "618Bf", 37, 0, 0);
+ }
+ } else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 3) {
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ send(kCharacterAnna, kCharacterMax, 71277948, 0);
+ CONS_Anna_GoSalon(0, 0, 0, 0);
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_GoSalon(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_GoSalon);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 28;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_GoSalon(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoWalkP1, 5, 850, 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAnna).characterPosition.position = 1540;
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ takeItem(kItem3);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoBlockSeqOtis, "104A", 5, 56, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ CONS_Anna_WaitAugust(0, 0, 0, 0);
+ break;
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_WaitAugust(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_WaitAugust);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 29;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_WaitAugust(HAND_PARAMS) {
+ if (msg->action > 12) {
+ switch (msg->action) {
+ case 17:
+ getCharacterCurrentParams(kCharacterAnna)[0] = checkCathDir(kCarRestaurant, 56);
+ break;
+ case 18:
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ if (_gameEvents[kEventAnnaGiveScarf] ||
+ _gameEvents[kEventAnnaGiveScarfDiner] ||
+ _gameEvents[kEventAnnaGiveScarfSalon] ||
+ _gameEvents[kEventAnnaGiveScarfMonogram] ||
+ _gameEvents[kEventAnnaGiveScarfDinerMonogram] ||
+ _gameEvents[kEventAnnaGiveScarfSalonMonogram]) {
+ playNIS(kEventAnnaGiveScarfSalonAsk);
+ } else {
+ if (_gameEvents[kEventAugustPresentAnna] || _gameEvents[kEventAugustPresentAnnaFirstIntroduction])
+ playNIS(kEventAnnaGiveScarfSalonMonogram);
+ else
+ playNIS(kEventAnnaGiveScarfSalon);
+ getCharacterCurrentParams(kCharacterAnna)[1] = 1;
+ }
+ getCharacter(kCharacterAnna).inventoryItem &= ~8;
+ bumpCath(kCarRestaurant, 51, 255);
+ } else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
+ if (_gameEvents[kEventAugustPresentAnna] || _gameEvents[kEventAugustPresentAnnaFirstIntroduction])
+ playNIS(kEventAnnaConversationGoodNight);
+ else
+ playNIS(kEventAnnaIntroductionRejected);
+
+ getCharacter(kCharacterAnna).inventoryItem &= ~0x80;
+ if (_gameProgress[kProgressJacket] == 2 &&
+ !_gameEvents[kEventAnnaGiveScarfAsk] &&
+ !_gameEvents[kEventAnnaGiveScarfDinerAsk] &&
+ !_gameEvents[kEventAnnaGiveScarfSalonAsk]) {
+ getCharacter(kCharacterAnna).inventoryItem |= kItemScarf;
+ }
+ bumpCath(kCarRestaurant, 51, 255);
+ }
+ break;
+ case 123712592:
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+ CONS_Anna_FlirtAugust(0, 0, 0, 0);
+ break;
+ }
+ return;
+ }
+ if (msg->action == 12) {
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+ if (_gameProgress[kProgressJacket] == 2 && !_gameEvents[15] && !_gameEvents[14])
+ getCharacter(kCharacterAnna).inventoryItem = 0x80;
+ if (_gameProgress[kProgressJacket] == 2 && !getCharacter(kCharacterAnna).inventoryItem && !_gameEvents[kEventAnnaGiveScarfAsk] && !_gameEvents[kEventAnnaGiveScarfDinerAsk] && !_gameEvents[kEventAnnaGiveScarfSalonAsk]) {
+ getCharacter(kCharacterAnna).inventoryItem = 8;
+ }
+ startCycOtis(kCharacterAnna, "104B");
+ return;
+ }
+ if (msg->action) {
+ if (msg->action == 1) {
+ if (msg->param.intParam == 8) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaGiveScarf, 0, 0);
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaIntroductionRejected, 0, 0);
+ }
+ }
+ return;
+ }
+ if (getCharacterCurrentParams(kCharacterAnna)[1]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[2] || (getCharacterCurrentParams(kCharacterAnna)[2] = _gameTime + 900, _gameTime != -900)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[2] >= _gameTime)
+ goto LABEL_16;
+ getCharacterCurrentParams(kCharacterAnna)[2] = 0x7FFFFFFF;
+ }
+ getCharacter(kCharacterAnna).inventoryItem |= kItemScarf;
+ getCharacterCurrentParams(kCharacterAnna)[1] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[2] = 0;
+ }
+LABEL_16:
+ if (getCharacterCurrentParams(kCharacterAnna)[0]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[3] || (getCharacterCurrentParams(kCharacterAnna)[3] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[3] >= _currentGameSessionTicks)
+ return;
+ getCharacterCurrentParams(kCharacterAnna)[3] = 0x7FFFFFFF;
+ }
+ bumpCath(kCarRestaurant, 55, 255);
+ } else {
+ getCharacterCurrentParams(kCharacterAnna)[3] = 0;
+ }
+}
+
+void LogicManager::CONS_Anna_FlirtAugust(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_FlirtAugust);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 30;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_FlirtAugust(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAnna)[2] == 0x7FFFFFFF || !_gameTime)
+ goto LABEL_12;
+ if (_gameTime > 1188000)
+ goto LABEL_10;
+ if (!inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterAnna)[2]) {
+ getCharacterCurrentParams(kCharacterAnna)[2] = _gameTime + 450;
+ if (_gameTime == -450)
+ goto LABEL_11;
+ }
+ if (getCharacterCurrentParams(kCharacterAnna)[2] < _gameTime) {
+ LABEL_10:
+ getCharacterCurrentParams(kCharacterAnna)[2] = 0x7FFFFFFF;
+ LABEL_11:
+ playDialog(kCharacterAnna, "AUG1004", -1, 0);
+ }
+ LABEL_12:
+ if (!getCharacterCurrentParams(kCharacterAnna)[1] || getCharacterCurrentParams(kCharacterAnna)[3] == 0x7FFFFFFF || _gameTime <= 1179000)
+ goto LABEL_22;
+ if (_gameTime > 1192500)
+ goto LABEL_20;
+ if (!inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterAnna)[3]) {
+ getCharacterCurrentParams(kCharacterAnna)[3] = _gameTime + 150;
+ if (_gameTime == -150)
+ goto LABEL_21;
+ }
+ if (getCharacterCurrentParams(kCharacterAnna)[3] < _gameTime) {
+ LABEL_20:
+ getCharacterCurrentParams(kCharacterAnna)[3] = 0x7FFFFFFF;
+ LABEL_21:
+ CONS_Anna_LeaveAugust(0, 0, 0, 0);
+ return;
+ }
+ LABEL_22:
+ if (getCharacterCurrentParams(kCharacterAnna)[0]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[4] || (getCharacterCurrentParams(kCharacterAnna)[4] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[4] >= _currentGameSessionTicks)
+ return;
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0x7FFFFFFF;
+ }
+ bumpCath(kCarRestaurant, 55, 255);
+ } else {
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0;
+ }
+ break;
+ case 2:
+ getCharacterCurrentParams(kCharacterAnna)[1] = 1;
+ return;
+ case 12:
+ send(kCharacterAnna, kCharacterAugust, 122358304, 0);
+ startCycOtis(kCharacterAnna, "106B");
+ return;
+ case 17:
+ getCharacterCurrentParams(kCharacterAnna)[0] = checkCathDir(kCarRestaurant, 56);
+ return;
+ default:
+ return;
+ }
+}
+
+void LogicManager::CONS_Anna_LeaveAugust(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_LeaveAugust);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 31;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_LeaveAugust(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_WaitRCClear, 0, 0, 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ playDialog(kCharacterAnna, "AUG1005", -1, 0);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoWaitReal, 0x96, 0, 0, 0);
+ break;
+ case 2:
+ blockView(kCharacterAnna, kCarRestaurant, 56);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoComplexSeqOtis, "106C1", "106C2", 2, 0);
+ break;
+ case 3:
+ releaseView(kCharacterAnna, kCarRestaurant, 56);
+ dropItem(kItem3, 1);
+ send(kCharacterAnna, kCharacterAugust, 159332865, 0);
+ CONS_Anna_ReturnComp(0, 0, 0, 0);
+ break;
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_ReturnComp(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_ReturnComp);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 32;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_ReturnComp(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoWalkP1, 4, 4070, 0, 0);
+ } else if (msg->action == 18) {
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "618Af", 37, 0, 0);
+ } else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
+ endGraphics(kCharacterAnna);
+ getCharacter(kCharacterAnna).characterPosition.position = 4070;
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ CONS_Anna_ReadyForBed(0, 0, 0, 0);
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_ReadyForBed(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_ReadyForBed);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 33;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_ReadyForBed(HAND_PARAMS) {
+ if (msg->action == 12) {
+ send(kCharacterAnna, kCharacterMax, 101687594, 0);
+ getCharacterCurrentParams(kCharacterAnna)[0] = _gameTime + 4500;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_CompLogic, getCharacterCurrentParams(kCharacterAnna)[0], "NONE", 0, 0);
+ } else if (msg->action == 18 && getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ setModel(37, 1);
+ CONS_Anna_Asleep(0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Anna_Asleep(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_Asleep);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 34;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_Asleep(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAnna)[0] || !checkCathDir(kCarRedSleeping, 60))
+ goto LABEL_18;
+ if (!getCharacterCurrentParams(kCharacterAnna)[1]) {
+ getCharacterCurrentParams(kCharacterAnna)[1] = _gameTime + 150;
+ if (_gameTime == -150)
+ goto LABEL_9;
+ }
+ if (getCharacterCurrentParams(kCharacterAnna)[1] < _gameTime) {
+ getCharacterCurrentParams(kCharacterAnna)[1] = 0x7FFFFFFF;
+ LABEL_9:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoSeqOtis, "419B", 0, 0, 0);
+ return;
+ }
+ LABEL_18:
+ if (_gameTime > 1489500 && !getCharacterCurrentParams(kCharacterAnna)[2]) {
+ getCharacterCurrentParams(kCharacterAnna)[2] = 1;
+ CONS_Anna_WakeNight(0, 0, 0, 0);
+ }
+ break;
+ case 8:
+ case 9:
+ setDoor(37, kCharacterAnna, 1, 0, 0);
+ setDoor(53, kCharacterAnna, 1, 0, 0);
+ if (msg->action == 8) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB012", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB013", 0, 0, 0);
+ }
+ return;
+ case 12:
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ setDoor(45, kCharacterCath, 0, 255, 255);
+
+ if (checkCathDir(kCarRedSleeping, 78))
+ bumpCath(kCarRedSleeping, 49, 255);
+
+ getCharacter(kCharacterAnna).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterAnna).characterPosition.position = 4070;
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ startCycOtis(kCharacterAnna, "419A");
+ return;
+ case 18:
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ startCycOtis(kCharacterAnna, "419C");
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ goto LABEL_18;
+ case 2:
+ case 3:
+ if (whoRunningDialog(kCharacterMax))
+ goto LABEL_23;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "MAX1120", 0, 0, 0);
+ break;
+ case 4:
+ LABEL_23:
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ break;
+ default:
+ return;
+ }
+ return;
+ default:
+ return;
+ }
+}
+
+void LogicManager::CONS_Anna_WakeNight(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_WakeNight);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 35;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_WakeNight(HAND_PARAMS) {
+ if (msg->action > 9) {
+ if (msg->action > 18) {
+ if (msg->action == 226031488) {
+ if (whoRunningDialog(kCharacterAnna))
+ fadeDialog(kCharacterAnna);
+ send(kCharacterAnna, kCharacterMax, 71277948, 0);
+ } else if (msg->action == 238358920) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "608Cf", 37, 0, 0);
+ }
+ } else if (msg->action == 18) {
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ playNIS(kEventAnnaVisitToCompartmentGun);
+ playDialog(0, "LIB015", -1, 0);
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ getCharacter(kCharacterAnna).characterPosition.position = 4840;
+ walk(kCharacterAnna, kCarRedSleeping, 8200);
+ bumpCathFDoor(37);
+ send(kCharacterAnna, kCharacterVassili, 339669520, 0);
+ send(kCharacterAnna, kCharacterTrainM, 339669520, 0);
+ send(kCharacterAnna, kCharacterCond2, 339669520, 0);
+ send(kCharacterAnna, kCharacterMax, 71277948, 0);
+ CONS_Anna_GoVassili(0, 0, 0, 0);
+ } else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
+ CONS_Anna_GoVassili(0, 0, 0, 0);
+ }
+ } else if (msg->action == 12) {
+ getCharacter(kCharacterAnna).clothes = 1;
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ }
+ } else if (msg->action >= 8) {
+ if (whoRunningDialog(kCharacterAnna))
+ fadeDialog(kCharacterAnna);
+
+ if (msg->action == 8)
+ playDialog(0, "LIB012", -1, 0);
+
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaVisitToCompartmentGun, 0, 0);
+ } else if (msg->action) {
+ if (msg->action == 2) {
+ getCharacterCurrentParams(kCharacterAnna)[1]++;
+ if (getCharacterCurrentParams(kCharacterAnna)[1] > 3)
+ getCharacterCurrentParams(kCharacterAnna)[1] = 0;
+
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ }
+ } else {
+ if (!getCharacterCurrentParams(kCharacterAnna)[0])
+ return;
+
+ if (getCharacterCurrentParams(kCharacterAnna)[2] || (getCharacterCurrentParams(kCharacterAnna)[2] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[2] >= _currentGameSessionTicks)
+ return;
+
+ getCharacterCurrentParams(kCharacterAnna)[2] = 0x7FFFFFFF;
+ }
+
+ switch (getCharacterCurrentParams(kCharacterAnna)[1]) {
+ case 0:
+ playDialog(kCharacterAnna, "ANN2135E", -1, 0);
+ break;
+ case 1:
+ playDialog(kCharacterAnna, "ANN2135F", -1, 0);
+ break;
+ case 2:
+ playDialog(kCharacterAnna, "ANN2135G", -1, 0);
+ break;
+ case 3:
+ playDialog(kCharacterAnna, "ANN2135D", -1, 0);
+ break;
+ default:
+ break;
+ }
+
+ getCharacterCurrentParams(kCharacterAnna)[2] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+ }
+}
+
+void LogicManager::CONS_Anna_GoVassili(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_GoVassili);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 36;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_GoVassili(HAND_PARAMS) {
+ if (msg->action == 12) {
+ setDoor(37, kCharacterCath, 1, 10, 9);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoWalk, 4, 8200, 0, 0);
+ } else if (msg->action == 18) {
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ setDoor(32, kCharacterCath, 1, 255, 255);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "608Aa", 32, 0, 0);
+ } else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
+ setDoor(32, kCharacterCath, 2, 255, 255);
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ endGraphics(kCharacterAnna);
+ CONS_Anna_AtSeizure(0, 0, 0, 0);
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_AtSeizure(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_AtSeizure);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 37;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_AtSeizure(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAnna).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterAnna).characterPosition.position = 8200;
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ } else if (msg->action == 191477936) {
+ CONS_Anna_SpeakTatiana(0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Anna_SpeakTatiana(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_SpeakTatiana);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 38;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_SpeakTatiana(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAnna).characterPosition.position = 7500;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "ANN1010", 0, 0, 0);
+ } else if (msg->action == 18 && getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ playDialog(0, "MUS043", -1, 0);
+ CONS_Anna_LeaveTatiana(0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Anna_DoWalk1019(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_DoWalk1019);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 39;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+ params->parameters[1] = param2.intParam;
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_DoWalk1019(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[0], getCharacterCurrentParams(kCharacterAnna)[1]))
+ goto LABEL_4;
+ break;
+ case 1:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaGoodNight, 0, 0);
+ break;
+ case 6:
+ playDialog(kCharacterAnna, "ANN1107A", -1, 0);
+ break;
+ case 12:
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+ if (!_gameEvents[kEventAnnaGoodNight] && !_gameEvents[kEventAnnaGoodNightInverse])
+ getCharacter(kCharacterAnna).inventoryItem = 0x80;
+ if (walk(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[0], getCharacterCurrentParams(kCharacterAnna)[1])) {
+ LABEL_4:
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ }
+ break;
+ case 18:
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ playNIS((kEventAnnaGoodNightInverse - (getCharacter(kCharacterAnna).direction == 1)));
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+ if (getCharacter(kCharacterAnna).direction == 1)
+ bumpCathFx(getCharacter(kCharacterAnna).characterPosition.car, getCharacter(kCharacterAnna).characterPosition.position - 750);
+ else
+ bumpCathRx(getCharacter(kCharacterAnna).characterPosition.car, getCharacter(kCharacterAnna).characterPosition.position + 750);
+ }
+ break;
+ default:
+ return;
+ }
+}
+
+void LogicManager::CONS_Anna_LeaveTatiana(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_LeaveTatiana);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 40;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_LeaveTatiana(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "608Cb", 0x21, 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoWalk1019, 4, 4070, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "608Bf", 37, 0, 0);
+ break;
+ case 3:
+ endGraphics(kCharacterAnna);
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_DoWait, 150, 0, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "608Cf", 37, 0, 0);
+ break;
+ case 5:
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 6;
+ AnnaCall(&LogicManager::CONS_Anna_DoWalk1019, 4, 7500, 0, 0);
+ break;
+ case 6:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 7;
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "608Bb", 33, 0, 0);
+ break;
+ case 7:
+ endGraphics(kCharacterAnna);
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 8;
+ AnnaCall(&LogicManager::CONS_Anna_DoWait, 150, 0, 0, 0);
+ break;
+ case 8:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 9;
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "608Cb", 33, 0, 0);
+ break;
+ case 9:
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 10;
+ AnnaCall(&LogicManager::CONS_Anna_DoWalk1019, 4, 4070, 0, 0);
+ break;
+ case 10:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 11;
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "608Bf", 37, 0, 0);
+ break;
+ case 11:
+ endGraphics(kCharacterAnna);
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ getCharacter(kCharacterAnna).characterPosition.position = 4070;
+ CONS_Anna_GoBackToSleep(0, 0, 0, 0);
+ break;
+ default:
+ return;
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_GoBackToSleep(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_GoBackToSleep);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 41;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_GoBackToSleep(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAnna)[1] || (getCharacterCurrentParams(kCharacterAnna)[1] = _gameTime + 2700, _gameTime != -2700)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[1] >= _gameTime)
+ return;
+
+ getCharacterCurrentParams(kCharacterAnna)[1] = 0x7FFFFFFF;
+ }
+
+ getCharacterCurrentParams(kCharacterAnna)[0]++;
+ switch (getCharacterCurrentParams(kCharacterAnna)[0]) {
+ case 1:
+ startCycOtis(kCharacterAnna, "419A");
+ break;
+ case 2:
+ startCycOtis(kCharacterAnna, "419B");
+ break;
+ case 3:
+ startCycOtis(kCharacterAnna, "419C");
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+ break;
+ }
+ getCharacterCurrentParams(kCharacterAnna)[1] = 0;
+ return;
+ case 8:
+ case 9:
+ setDoor(37, kCharacterAnna, 1, 0, 0);
+ setDoor(53, kCharacterAnna, 1, 0, 0);
+ if (msg->action == 8) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB012", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB013", 0, 0, 0);
+ }
+ return;
+ case 12:
+ send(kCharacterAnna, kCharacterMax, 101687594, 0);
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ startCycOtis(kCharacterAnna, "419C");
+ return;
+ case 18:
+ if (!getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8])
+ return;
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] <= 2) {
+ if (!whoRunningDialog(kCharacterMax)) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "MAX1120", 0, 0, 0);
+ return;
+ }
+ } else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] != 3) {
+ return;
+ }
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ break;
+ default:
+ return;
+ }
+}
+
+void LogicManager::CONS_Anna_StartPart2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_StartPart2);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 42;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_StartPart2(HAND_PARAMS) {
+ if (msg->action) {
+ if (msg->action == 12) {
+ endGraphics(kCharacterAnna);
+ getCharacter(kCharacterAnna).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterAnna).characterPosition.position = 4070;
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ getCharacter(kCharacterAnna).inventoryItem = kItemNone;
+ getCharacter(kCharacterAnna).clothes = 1;
+ }
+ } else {
+ CONS_Anna_InPart2(0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Anna_InPart2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_InPart2);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 43;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_InPart2(HAND_PARAMS) {
+ if (msg->action == 12) {
+ setDoor(45, kCharacterCath, 0, 255, 255);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_PracticeMusic, 0, 0, 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_CompLogic, 1786500, "418C", 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_PracticeMusic, 0, 0, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_CompLogic, 1818000, "418C", 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
+ AnnaCall(&LogicManager::CONS_Anna_PracticeMusic, 0, 0, 0, 0);
+ break;
+ case 5:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 6;
+ AnnaCall(&LogicManager::CONS_Anna_CompLogic, 15803100, "418C", 0, 0);
+ break;
+ default:
+ return;
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_StartPart3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_StartPart3);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 44;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_StartPart3(HAND_PARAMS) {
+ if (msg->action) {
+ if (msg->action == 12) {
+ endGraphics(kCharacterAnna);
+ getCharacter(kCharacterAnna).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterAnna).characterPosition.position = 4070;
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ getCharacter(kCharacterAnna).clothes = 3;
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+ setDoor(37, kCharacterCath, 1, 10, 9);
+ setDoor(45, kCharacterCath, 0, 255, 255);
+ setDoor(53, kCharacterCath, 1, 10, 9);
+ }
+ } else {
+ CONS_Anna_Practicing(0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Anna_ExitComp(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_ExitComp);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 45;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_ExitComp(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "625Bf", 37, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ if (getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall].parameters[0])
+ send(kCharacterAnna, kCharacterCond2, 185737168, 0);
+ else
+ send(kCharacterAnna, kCharacterCond2, 185671840, 0);
+ playDialog(kCharacterAnna, "Ann3147", -1, 0);
+ startCycOtis(kCharacterAnna, "625EF");
+ softBlockAtDoor(kCharacterAnna, 37);
+ } else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
+ softReleaseAtDoor(kCharacterAnna, 37);
+
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ }
+ break;
+ case 157894320:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoWait, 75, 0, 0, 0);
+ break;
+ }
+}
+
+void LogicManager::CONS_Anna_Practicing(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_Practicing);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 46;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_Practicing(HAND_PARAMS) {
+ if (msg->action == 12) {
+ if (checkCathDir(kCarRedSleeping, 60))
+ bumpCath(kCarRedSleeping, 49, 255);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_PracticeMusic, 0, 0, 0, 0);
+ } else if (msg->action == 18) {
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1 ||
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
+ if (getCharacterParams(kCharacterAnna, 8)[0]) {
+ CONS_Anna_GoLunch(0, 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_CompLogic, _gameTime + 4500, "418C", 0, 0);
+ }
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_GoLunch(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_GoLunch);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 47;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_GoLunch(HAND_PARAMS) {
+ if (msg->action == 12) {
+ setDoor(37, kCharacterCath, 1, 10, 9);
+ setDoor(53, kCharacterCath, 1, 10, 9);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "688Bf", 0x25, 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ send(kCharacterAnna, kCharacterMax, 71277948, 0);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoWalk, 5, 850, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAnna).characterPosition.position = 1540;
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_DoSeqOtis, "801VS", 0, 0, 0);
+ break;
+ case 4:
+ if (!_gameEvents[kEventAugustLunch]) {
+ playDialog(kCharacterAnna, "Ann3136A", -1, 30);
+ } else {
+ playDialog(kCharacterAnna, "Ann3136", -1, 30);
+ }
+
+ send(kCharacterAnna, kCharacterAugust, 122358304, 0);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
+ AnnaCall(&LogicManager::CONS_Anna_DoComplexSeqOtis, "026B1", "026B2", 2, 0);
+ break;
+ case 5:
+ startCycOtis(kCharacterAugust, "BLANK");
+ CONS_Anna_Lunch(0, 0, 0, 0);
+ break;
+ default:
+ return;
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_Lunch(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_Lunch);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 48;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_Lunch(HAND_PARAMS) {
+ if (msg->action > 12) {
+ switch (msg->action) {
+ case 18:
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Ann3137B", 0, 0, 0);
+ break;
+ case 2:
+ send(kCharacterAnna, kCharacterWaiter1, 218983616, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Aug3006A", 0, 0, 0);
+ break;
+ case 4:
+ goto LABEL_29;
+ case 5:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 6;
+ AnnaCall(&LogicManager::CONS_Anna_DoWait, 900, 0, 0, 0);
+ break;
+ case 6:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 7;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Aug3006", 0, 0, 0);
+ break;
+ case 7:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 8;
+ AnnaCall(&LogicManager::CONS_Anna_DoWait, 2700, 0, 0, 0);
+ break;
+ case 8:
+ startCycOtis(kCharacterAnna, "026H");
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ break;
+ default:
+ return;
+ }
+ break;
+ case 122288808:
+ startCycOtis(kCharacterAnna, "026C");
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Ann3138A", 0, 0, 0);
+ break;
+ case 122358304:
+ startCycOtis(kCharacterAnna, "BLANK");
+ break;
+ }
+ } else {
+ if (msg->action == 12) {
+ startCycOtis(kCharacterAnna, "026c");
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoWait, 450, 0, 0, 0);
+ return;
+ }
+ if (msg->action == 0 && getCharacterCurrentParams(kCharacterAnna)[0]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[2] != 0x7FFFFFFF && _gameTime > 1969200) {
+ if (_gameTime > 1983600)
+ goto LABEL_18;
+
+ if (!inDiningRoom(kCharacterCath) || whoRunningDialog(kCharacterMonsieur) || !getCharacterCurrentParams(kCharacterAnna)[2]) {
+ getCharacterCurrentParams(kCharacterAnna)[2] = _gameTime + 150;
+ if (_gameTime == -150)
+ goto LABEL_19;
+ }
+ if (getCharacterCurrentParams(kCharacterAnna)[2] < _gameTime) {
+ LABEL_18:
+ getCharacterCurrentParams(kCharacterAnna)[2] = 0x7FFFFFFF;
+ LABEL_19:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Aug3007A", 0, 0, 0);
+ return;
+ }
+ }
+ LABEL_29:
+ if (getCharacterParams(kCharacterAnna, 8)[1]) {
+ if (!getCharacterCurrentParams(kCharacterAnna)[1])
+ getCharacterCurrentParams(kCharacterAnna)[1] = _gameTime + 4500;
+
+ if (getCharacterCurrentParams(kCharacterAnna)[3] != 0x7FFFFFFF && _gameTime) {
+ if (getCharacterCurrentParams(kCharacterAnna)[1] >= _gameTime) {
+ if (!inDiningRoom(kCharacterCath) || !getCharacterCurrentParams(kCharacterAnna)[3]) {
+ getCharacterCurrentParams(kCharacterAnna)[3] = _gameTime + 450;
+ if (_gameTime == -450)
+ goto LABEL_40;
+ }
+
+ if (getCharacterCurrentParams(kCharacterAnna)[3] >= _gameTime)
+ return;
+ }
+
+ getCharacterCurrentParams(kCharacterAnna)[3] = 0x7FFFFFFF;
+ LABEL_40:
+ CONS_Anna_LeaveLunch(0, 0, 0, 0);
+ }
+ }
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_DoOtis5026J(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_DoOtis5026J);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 49;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_DoOtis5026J(HAND_PARAMS) {
+ if (msg->action == 3) {
+ send(kCharacterAnna, kCharacterTableD, 103798704, "010M");
+ endGraphics(kCharacterAugust);
+
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ } else if (msg->action == 12) {
+ startSeqOtis(kCharacterTableD, "026J3");
+ startSeqOtis(kCharacterAugust, "026J2");
+ startSeqOtis(kCharacterAnna, "026J1");
+ }
+}
+
+void LogicManager::CONS_Anna_LeaveLunch(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_LeaveLunch);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 50;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_LeaveLunch(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Ann3141", 0, 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoOtis5026J, 0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_Anna_AfterLunch(0, 0, 0, 0);
+ break;
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_AfterLunch(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_AfterLunch);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 51;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_AfterLunch(HAND_PARAMS) {
+ if (msg->action > 12) {
+ if (msg->action > 101169422) {
+ if (msg->action == 122288808) {
+ startCycOtis(kCharacterAnna, "112D");
+ send(kCharacterAnna, kCharacterKronos, 157159392, 0);
+ } else if (msg->action == 122358304) {
+ startCycOtis(kCharacterAnna, "BLANK");
+ }
+ } else if (msg->action == 101169422) {
+ if (_gameEvents[kEventKronosVisit]) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoBlockSeqOtis, "112J", 5, 0x39, 0);
+ } else {
+ LABEL_22:
+ if (_gameTime >= 2047500) {
+ LABEL_28:
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Ann3142A", 0, 0, 0);
+ }
+ }
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ startCycOtis(kCharacterAnna, "112B");
+ releaseView(kCharacterAnna, kCarRestaurant, 57);
+ send(kCharacterAnna, kCharacterWaiter2, 219377792, 0);
+ break;
+ case 2:
+ send(kCharacterAnna, kCharacterAugust, 122288808, 0);
+ CONS_Anna_ReturnComp3(0, 0, 0, 0);
+ break;
+ case 3:
+ startCycOtis(kCharacterAnna, "112D");
+ goto LABEL_22;
+ case 4:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
+ AnnaCall(&LogicManager::CONS_Anna_DoWait, 1800, 0, 0, 0);
+ break;
+ case 5:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 6;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Aug3007", 0, 0, 0);
+ break;
+ case 6:
+ goto LABEL_28;
+ default:
+ return;
+ }
+ }
+ } else if (msg->action == 12) {
+ playDialog(kCharacterAnna, "Ann3142", -1, 30);
+ blockView(1, 5, 57);
+ startSeqOtis(kCharacterAnna, "112A");
+ if (inDiningRoom(kCharacterCath))
+ advanceFrame(kCharacterAnna);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_FinishSeqOtis, 0, 0, 0, 0);
+ } else if (msg->action == 0 && getCharacterCurrentParams(kCharacterAnna)[0]) {
+ if (rcClear()) {
+ playDialog(kCharacterAnna, "Aug3008", -1, 0);
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoComplexSeqOtis, "112E1", "112E2", 2, 0);
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_ReturnComp3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_ReturnComp3);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 52;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_ReturnComp3(HAND_PARAMS) {
+ if (msg->action == 3) {
+ releaseAtDoor(kCharacterAnna, 37);
+ getCharacter(kCharacterAnna).characterPosition.position = 4070;
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ endGraphics(kCharacterAnna);
+ CONS_Anna_Dressing(0, 0, 0, 0);
+ } else if (msg->action == 12) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoWalk, 4, 4070, 0, 0);
+ } else if (msg->action == 18 && getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ startSeqOtis(kCharacterAnna, "688Af");
+ blockAtDoor(kCharacterAnna, 37);
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ if (inComp(kCharacterCath, kCarRedSleeping, 4070) || inComp(kCharacterCath, kCarRedSleeping, 4455)) {
+ if (isNight()) {
+ playNIS(kEventCathTurningNight);
+ } else {
+ playNIS(kEventCathTurningDay);
+ }
+
+ playDialog(0, "BUMP", -1, 0);
+ bumpCathRDoor(37);
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_Dressing(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_Dressing);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 53;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_Dressing(HAND_PARAMS) {
+ bool tmp;
+
+ switch (msg->action) {
+ case 0:
+ if (!_gameProgress[kProgressField48] || getCharacterCurrentParams(kCharacterAnna)[4] == 0x7FFFFFFF || !_gameTime)
+ goto LABEL_13;
+
+ if (_gameTime > 2065500)
+ goto LABEL_11;
+
+ if (!cathInCorridor(kCarRedSleeping) || !getCharacterCurrentParams(kCharacterAnna)[4]) {
+ getCharacterCurrentParams(kCharacterAnna)[4] = _gameTime + 150;
+ if (_gameTime == -150)
+ goto LABEL_12;
+ }
+ if (getCharacterCurrentParams(kCharacterAnna)[4] < _gameTime) {
+ LABEL_11:
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0x7FFFFFFF;
+ LABEL_12:
+ CONS_Anna_GiveMaxToCond2(0, 0, 0, 0);
+ return;
+ }
+ LABEL_13:
+ if (!getCharacterCurrentParams(kCharacterAnna)[2])
+ goto LABEL_21;
+
+ if (!getCharacterCurrentParams(kCharacterAnna)[5]) {
+ getCharacterCurrentParams(kCharacterAnna)[5] = _gameTime + 9000;
+ if (_gameTime == -9000)
+ goto LABEL_18;
+ }
+
+ if (getCharacterCurrentParams(kCharacterAnna)[5] < _gameTime) {
+ getCharacterCurrentParams(kCharacterAnna)[5] = 0x7FFFFFFF;
+ LABEL_18:
+ tmp = getCharacterCurrentParams(kCharacterAnna)[3] == 0;
+
+ getCharacterCurrentParams(kCharacterAnna)[3] = tmp ? 1 : 0;
+
+ if (!tmp) {
+ startCycOtis(kCharacterAnna, "417B");
+ } else {
+ startCycOtis(kCharacterAnna, "417A");
+ }
+
+ getCharacterCurrentParams(kCharacterAnna)[5] = 0;
+ }
+ LABEL_21:
+ if (getCharacterCurrentParams(kCharacterAnna)[0]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[6] || (getCharacterCurrentParams(kCharacterAnna)[6] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[6] >= _currentGameSessionTicks)
+ return;
+
+ getCharacterCurrentParams(kCharacterAnna)[6] = 0x7FFFFFFF;
+ }
+
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[1] = 1;
+
+ setDoor(37, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
+ setDoor(53, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
+ getCharacterCurrentParams(kCharacterAnna)[6] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterAnna)[6] = 0;
+ }
+ break;
+ case 8:
+ goto LABEL_50;
+ case 9:
+ if (inComp(kCharacterMax, kCarRedSleeping, 4070)) {
+ setDoor(37, kCharacterAnna, 1, 0, 0);
+ setDoor(53, kCharacterAnna, 1, 0, 0);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB013", 0, 0, 0);
+ } else {
+ LABEL_50:
+ if (getCharacterCurrentParams(kCharacterAnna)[0]) {
+ setDoor(37, kCharacterAnna, 1, 0, 0);
+ setDoor(53, kCharacterAnna, 1, 0, 0);
+
+ if (msg->param.intParam == 53) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 6;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, getCathWCDialog(), 0, 0, 0);
+ } else if (cathHasItem(kItemPassengerList)) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 7;
+
+ if (rnd(2)) {
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, getCathSorryDialog(), 0, 0, 0);
+ } else {
+ if (rnd(2) == 0) {
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "CAT1506A", 0, 0, 0);
+ } else {
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "CAT1506", 0, 0, 0);
+ }
+ }
+
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 8;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, getCathSorryDialog(), 0, 0, 0);
+ }
+ } else {
+ setDoor(37, kCharacterAnna, 1, 0, 0);
+ setDoor(53, kCharacterAnna, 1, 0, 0);
+ if (msg->action == 8) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB012", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB013", 0, 0, 0);
+ }
+ }
+ }
+ return;
+ case 12:
+ send(kCharacterAnna, kCharacterMax, 101687594, 0);
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ getCharacter(kCharacterAnna).clothes = 2;
+ return;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterAnna)[1] || getCharacterCurrentParams(kCharacterAnna)[0]) {
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterAnna)[1] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+ }
+
+ if (!getCharacterCurrentParams(kCharacterAnna)[2] && (checkCathDir(kCarRedSleeping, 60) || _gameTime > 0x1F0950)) {
+ getCharacterCurrentParams(kCharacterAnna)[2] = 1;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 9;
+ AnnaCall(&LogicManager::CONS_Anna_DoSeqOtis, "416", 0, 0, 0);
+ }
+
+ return;
+ case 18:
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ if (whoRunningDialog(kCharacterMax))
+ goto LABEL_49;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "MAX1120", 0, 0, 0);
+ break;
+ case 2:
+ LABEL_49:
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ break;
+ case 3:
+ case 4:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "ANN1016", 0, 0, 0);
+ break;
+ case 5:
+ setDoor(37, kCharacterAnna, 1, 14, 0);
+ setDoor(53, kCharacterAnna, 1, 14, 0);
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ break;
+ case 6:
+ case 7:
+ case 8:
+ if (inComp(kCharacterMax, kCarRedSleeping, 4070)) {
+ setDoor(37, kCharacterAnna, 1, 0, 9);
+ setDoor(53, kCharacterAnna, 1, 0, 9);
+ }
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[1] = 1;
+ break;
+ case 9:
+ if (checkCathDir(kCarRedSleeping, 60))
+ bumpCath(kCarRedSleeping, 78, 255);
+ startCycOtis(kCharacterAnna, "417B");
+ break;
+ default:
+ return;
+ }
+ return;
+ default:
+ return;
+ }
+}
+
+void LogicManager::CONS_Anna_GiveMaxToCond2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_GiveMaxToCond2);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 54;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_GiveMaxToCond2(HAND_PARAMS) {
+ bool tmp;
+
+ if (msg->action > 8) {
+ if (msg->action > 12) {
+ if (msg->action > 123733488) {
+ if (msg->action == 156049968) {
+ startCycOtis(kCharacterAnna, "629DF");
+ softBlockAtDoor(kCharacterAnna, 37);
+ } else if (msg->action == 253868128) {
+ setDoor(53, kCharacterAnna, 1, 0, 0);
+ }
+ } else {
+ switch (msg->action) {
+ case 123733488:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 9;
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "629Ef", 37, 0, 0);
+ break;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterAnna)[1] || getCharacterCurrentParams(kCharacterAnna)[0]) {
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterAnna)[1] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ if (whoRunningDialog(kCharacterMax))
+ goto LABEL_54;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "MAX1120", 0, 0, 0);
+ break;
+ case 2:
+ LABEL_54:
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ break;
+ case 3:
+ case 4:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "ANN1016", 0, 0, 0);
+ break;
+ case 5:
+ setDoor(37, kCharacterAnna, 1, 14, 0);
+ setDoor(53, kCharacterAnna, 1, 14, 0);
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ break;
+ case 6:
+ case 7:
+ case 8:
+ if (inComp(kCharacterMax, kCarRedSleeping, 4070)) {
+ setDoor(37, kCharacterAnna, 1, 0, 9);
+ setDoor(53, kCharacterAnna, 1, 0, 9);
+ }
+
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[1] = 1;
+ break;
+ case 9:
+ softReleaseAtDoor(kCharacterAnna, 37);
+ endGraphics(kCharacterAnna);
+ getCharacter(kCharacterAnna).characterPosition.location = kCharacterAnna;
+ getCharacter(kCharacterAnna).characterPosition.position = 4070;
+ getCharacterCurrentParams(kCharacterAnna)[2] = kCharacterAnna;
+ setDoor(45, kCharacterCath, 0, 255, 255);
+ setDoor(53, kCharacterAnna, kCharacterAnna, 10, 9);
+
+ if (checkCathDir(kCarRedSleeping, 78))
+ bumpCath(kCarRedSleeping, 49, 255);
+
+ startCycOtis(kCharacterAnna, "417B");
+ break;
+ default:
+ return;
+ }
+ break;
+ }
+ }
+ return;
+ }
+ if (msg->action == 12) {
+ setDoor(45, kCharacterCath, 1, 255, 255);
+ if (checkCathDir(kCarRedSleeping, 60))
+ bumpCath(kCarRedSleeping, 78, 255);
+
+ send(kCharacterAnna, kCharacterCond2, 189750912, 0);
+ return;
+ }
+ if (msg->action != 9)
+ return;
+ if (inComp(kCharacterMax, kCarRedSleeping, 4070)) {
+ setDoor(37, kCharacterAnna, 1, 0, 0);
+ setDoor(53, kCharacterAnna, 1, 0, 0);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB013", 0, 0, 0);
+ return;
+ }
+ LABEL_58:
+ if (getCharacterCurrentParams(kCharacterAnna)[0]) {
+ setDoor(37, kCharacterAnna, 1, 0, 0);
+ setDoor(53, kCharacterAnna, 1, 0, 0);
+ if (msg->param.intParam == 53) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 6;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, getCathWCDialog(), 0, 0, 0);
+ } else if (cathHasItem(kItemPassengerList)) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 7;
+ if (rnd(2)) {
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, getCathSorryDialog(), 0, 0, 0);
+ } else {
+ if (rnd(2) == 0) {
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "CAT1506A", 0, 0, 0);
+ } else {
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "CAT1506", 0, 0, 0);
+ }
+ }
+
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 8;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, getCathSorryDialog(), 0, 0, 0);
+ }
+ } else {
+ setDoor(37, kCharacterAnna, 1, 0, 0);
+ setDoor(53, kCharacterAnna, 1, 0, 0);
+ if (msg->action == 8) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB012", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB013", 0, 0, 0);
+ }
+ }
+
+ return;
+ }
+
+ if (msg->action == 8)
+ goto LABEL_58;
+
+ if (msg->action)
+ return;
+
+ if (!getCharacterCurrentParams(kCharacterAnna)[2])
+ goto LABEL_28;
+
+ if (_gameTime > 2079000 && !getCharacterCurrentParams(kCharacterAnna)[4]) {
+ getCharacterCurrentParams(kCharacterAnna)[4] = 1;
+ CONS_Anna_GoConcert(0, 0, 0, 0);
+ return;
+ }
+
+ if (getCharacterCurrentParams(kCharacterAnna)[5] || (getCharacterCurrentParams(kCharacterAnna)[5] = _gameTime + 9000, _gameTime != -9000)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[5] >= _gameTime)
+ goto LABEL_28;
+ getCharacterCurrentParams(kCharacterAnna)[5] = 0x7FFFFFFF;
+ }
+
+ tmp = getCharacterCurrentParams(kCharacterAnna)[3] == 0;
+ getCharacterCurrentParams(kCharacterAnna)[3] = tmp ? 1 : 0;
+
+ if (!tmp) {
+ startCycOtis(kCharacterAnna, "417B");
+ } else {
+ startCycOtis(kCharacterAnna, "417A");
+ }
+
+ getCharacterCurrentParams(kCharacterAnna)[5] = 0;
+LABEL_28:
+ if (getCharacterCurrentParams(kCharacterAnna)[0]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[6] || (getCharacterCurrentParams(kCharacterAnna)[6] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[6] >= _currentGameSessionTicks)
+ return;
+
+ getCharacterCurrentParams(kCharacterAnna)[6] = 0x7FFFFFFF;
+ }
+
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[1] = 1;
+
+ setDoor(37, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
+ setDoor(53, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
+ getCharacterCurrentParams(kCharacterAnna)[6] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterAnna)[6] = 0;
+ }
+}
+
+void LogicManager::CONS_Anna_GoConcert(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_GoConcert);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 55;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_GoConcert(HAND_PARAMS) {
+ if (msg->action == 12) {
+ setDoor(45, kCharacterCath, 2, 255, 255);
+ if (checkCathDir(kCarRedSleeping, 78))
+ bumpCath(kCarRedSleeping, 49, 255);
+
+ setDoor(37, kCharacterCath, 1, 0, 0);
+ setDoor(53, kCharacterCath, 1, 10, 9);
+ dropItem(kItemKey, 1);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_ExitComp, 1, 0, 0, 0);
+ } else if (msg->action == 18) {
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ setDoor(37, kCharacterCath, 1, 10, 9);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoWalk, 2, 9270, 0, 0);
+ } else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
+ CONS_Anna_Concert(0, 0, 0, 0);
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_Concert(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_Concert);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 56;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_Concert(HAND_PARAMS) {
+ if (msg->action == 12) {
+ endGraphics(kCharacterAnna);
+ getCharacter(kCharacterAnna).characterPosition.car = kCarKronos;
+ getCharacter(kCharacterAnna).characterPosition.position = 6000;
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ } else if (msg->action == 191668032) {
+ COND_Anna_LeaveConcert(0, 0, 0, 0);
+ }
+}
+
+void LogicManager::COND_Anna_LeaveConcert(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_LeaveConcert);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 57;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_LeaveConcert(HAND_PARAMS) {
+ if (msg->action > 18) {
+ if (msg->action == 123712592) {
+ startCycOtis(kCharacterAnna, "628Af");
+ LABEL_16:
+ if (whoRunningDialog(kCharacterAugust)) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_DoWait, 75, 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Aug3009", 0, 0, 0);
+ }
+ } else if (msg->action == 192063264) {
+ if (inComp(kCharacterCath, kCarRedSleeping, 4070) || inComp(kCharacterCath, kCarRedSleeping, 4455)) {
+ softReleaseAtDoor(kCharacterAnna, 37);
+ CONS_Anna_LeaveConcertCathInComp(0, 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "625Ff", 37, 0, 0);
+ }
+ }
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ send(kCharacterAnna, kCharacterAugust, 191668032, 0);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoWalk, 4, 4070, 0, 0);
+ break;
+ case 2:
+ setDoor(37, 0, 1, 0, 0);
+ send(kCharacterAnna, kCharacterCond2, 205033696, 0);
+ startCycOtis(kCharacterAnna, "625Ef");
+ softBlockAtDoor(kCharacterAnna, 37);
+ break;
+ case 3:
+ startCycOtis(kCharacterAnna, "625Gf");
+ softBlockAtDoor(kCharacterAnna, 37);
+ send(kCharacterAnna, kCharacterAugust, 169032608, 0);
+ break;
+ case 4:
+ goto LABEL_16;
+ case 5:
+ playDialog(kCharacterAnna, "Aug3009A", -1, 0);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 6;
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "628Bf", 37, 0, 0);
+ break;
+ case 6:
+ softReleaseAtDoor(kCharacterAnna, 37);
+ send(kCharacterAnna, kCharacterAugust, 122288808, 0);
+ CONS_Anna_AfterConcert(0, 0, 0, 0);
+ break;
+ default:
+ return;
+ }
+ } else if (msg->action == 12) {
+ getCharacter(kCharacterAnna).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterAnna).characterPosition.position = 850;
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoWalk, 3, 5790, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Anna_LeaveConcertCathInComp(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_LeaveConcertCathInComp);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 58;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_LeaveConcertCathInComp(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaSearchingCompartment, 0, 0);
+ } else if (msg->action == 18 && getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ playNIS(kEventAnnaSearchingCompartment);
+ endGraphics(kCharacterAnna);
+ bumpCath(kCarRedSleeping, 8, 255);
+ playDialog(kCharacterAnna, "lib015", -1, 0);
+ send(kCharacterAnna, kCharacterAugust, 122288808, 0);
+ CONS_Anna_AfterConcert(0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Anna_AfterConcert(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_AfterConcert);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 59;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_AfterConcert(HAND_PARAMS) {
+ if (msg->action > 9) {
+ if (msg->action > 17) {
+ if (msg->action > 156622016) {
+ if (msg->action == 236241630) {
+ setDoor(37, 1, 1, 0, 0);
+ setDoor(53, 1, 1, 0, 0);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 7;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Ann1016A", 0, 0, 0);
+ } else if (msg->action == 236517970) {
+ getCharacterCurrentParams(kCharacterAnna)[2] = 1;
+ setDoor(37, 1, 1, 10, 9);
+ setDoor(53, 1, 1, 10, 9);
+ }
+ } else if (msg->action == 156622016) {
+ if (getCharacterCurrentParams(kCharacterAnna)[2]) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 8;
+ AnnaCall(&LogicManager::CONS_Anna_GiveMaxBack, 0, 0, 0, 0);
+ }
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ case 2:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "ANN1016", 0, 0, 0);
+ break;
+ case 3:
+ setDoor(37, kCharacterAnna, 1, 14, 0);
+ setDoor(53, kCharacterAnna, 1, 14, 0);
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ break;
+ case 4:
+ case 5:
+ case 6:
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[1] = 1;
+ break;
+ case 7:
+ send(kCharacterAnna, kCharacterTatiana, 100906246, 0);
+ break;
+ default:
+ return;
+ }
+ }
+ } else if (msg->action == 17) {
+ if (getCharacterCurrentParams(kCharacterAnna)[1] || getCharacterCurrentParams(kCharacterAnna)[0]) {
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterAnna)[1] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+ }
+ } else if (msg->action == 12) {
+ getCharacter(kCharacterAnna).characterPosition.position = 4070;
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ endGraphics(kCharacterAnna);
+ setDoor(107, kCharacterCath, 2, 255, 255);
+ setDoor(45, kCharacterCath, 1, 255, 255);
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+
+ if (checkCathDir(kCarRedSleeping, 60))
+ bumpCath(kCarRedSleeping, 78, 255);
+ }
+ } else if (msg->action >= 8) {
+ if (getCharacterCurrentParams(kCharacterAnna)[0]) {
+ setDoor(37, kCharacterAnna, 1, 0, 0);
+ setDoor(53, kCharacterAnna, 1, 0, 0);
+ if (msg->param.intParam == 53) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, getCathWCDialog(), 0, 0, 0);
+ } else if (cathHasItem(kItemPassengerList)) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
+
+ if (rnd(2)) {
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, getCathSorryDialog(), 0, 0, 0);
+ } else {
+ if (rnd(2) == 0) {
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "CAT1506A", 0, 0, 0);
+ } else {
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "CAT1506", 0, 0, 0);
+ }
+ }
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 6;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, getCathSorryDialog(), 0, 0, 0);
+ }
+ } else {
+ setDoor(37, kCharacterAnna, 1, 0, 0);
+ setDoor(53, kCharacterAnna, 1, 0, 0);
+ if (msg->action == 8) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB012", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB013", 0, 0, 0);
+ }
+ }
+ } else {
+ if (msg->action)
+ return;
+
+ if (cathHasItem(kItemKey) && getCharacterCurrentParams(kCharacterAnna)[3] != 0x7FFFFFFF && _gameTime > 2218500) {
+ if (_gameTime > 2248200)
+ goto LABEL_27;
+ if (!getCharacterCurrentParams(kCharacterAnna)[2] || !cathInCorridor(kCarRedSleeping) && !inSalon(kCharacterCath) && !inDiningRoom(kCharacterCath) || !getCharacterCurrentParams(kCharacterAnna)[3]) {
+ getCharacterCurrentParams(kCharacterAnna)[3] = _gameTime;
+ if (!getCharacterCurrentParams(kCharacterAnna)[3])
+ goto LABEL_28;
+ }
+
+ if (getCharacterCurrentParams(kCharacterAnna)[3] < _gameTime) {
+ LABEL_27:
+ getCharacterCurrentParams(kCharacterAnna)[3] = 0x7FFFFFFF;
+ LABEL_28:
+ CONS_Anna_GoBagg(0, 0, 0, 0);
+ return;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterAnna)[0]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[4] || (getCharacterCurrentParams(kCharacterAnna)[4] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[4] >= _currentGameSessionTicks)
+ return;
+
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0x7FFFFFFF;
+ }
+
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[1] = 1;
+
+ setDoor(37, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
+ setDoor(53, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0;
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_GiveMaxBack(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_GiveMaxBack);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 60;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_GiveMaxBack(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ send(kCharacterAnna, kCharacterMax, 122358304, 0);
+
+ if (rnd(2) == 0) {
+ playDialog(kCharacterAnna, "Ann3127", -1, 0);
+ } else {
+ playDialog(kCharacterAnna, "Ann3126", -1, 0);
+ }
+
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "630Cf", 37, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "630Df", 37, 0, 0);
+ break;
+ case 2:
+ endGraphics(kCharacterAnna);
+ send(kCharacterAnna, kCharacterCond2, 189026624, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAnna).characterPosition.position = 4070;
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ endGraphics(kCharacterAnna);
+
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ break;
+ }
+ break;
+ case 156049968:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "629EF", 37, 0, 0);
+ break;
+ }
+}
+
+void LogicManager::CONS_Anna_GoBagg(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_GoBagg);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 61;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_GoBagg(HAND_PARAMS) {
+ if (msg->action == 12) {
+ _gameTimeTicksDelta = 3;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 1, 0, 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ setDoor(53, kCharacterCath, 1, 10, 9);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_ExitComp, 0, 0, 0, 0);
+ break;
+ case 2:
+ setDoor(37, kCharacterCath, 1, 10, 9);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoWalk, 5, 850, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterAnna).characterPosition.position = 1540;
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
+ AnnaCall(&LogicManager::CONS_Anna_DoSeqOtis, "802US", 0, 0, 0);
+ break;
+ case 5:
+ startSeqOtis(kCharacterAnna, "802UD");
+ if (inSalon(kCharacterCath))
+ advanceFrame(kCharacterAnna);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 6;
+ AnnaCall(&LogicManager::CONS_Anna_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 6:
+ endGraphics(kCharacterAnna);
+ CONS_Anna_InBagg(0, 0, 0, 0);
+ break;
+ default:
+ return;
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_InBagg(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_InBagg);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 62;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_InBagg(HAND_PARAMS) {
+ if (msg->action) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAnna).characterPosition.car = kCarBaggage;
+ _gameProgress[kProgressField54] = 1;
+ } else if (msg->action == 235856512) {
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ }
+ } else if (getCharacterCurrentParams(kCharacterAnna)[0] && _gameTime > 2259000 && !getCharacterCurrentParams(kCharacterAnna)[1]) {
+ getCharacterCurrentParams(kCharacterAnna)[1] = 1;
+ send(kCharacterAnna, kCharacterVesna, 189299008, 0);
+ CONS_Anna_DeadBagg(0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Anna_DeadBagg(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_DeadBagg);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 63;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_DeadBagg(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ send(kCharacterAnna, kCharacterMaster, 171843264, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ playNIS(kEventAnnaKilled);
+ endGame(1, 2250000, 58, 1);
+ }
+
+ break;
+ case 272177921:
+ if (dialogRunning("MUS012"))
+ fadeDialog("MUS012");
+
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaKilled, 0, 0);
+ break;
+ }
+}
+
+void LogicManager::CONS_Anna_BaggageFight(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_BaggageFight);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 64;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_BaggageFight(HAND_PARAMS) {
+ if (msg->action == 12) {
+ endGraphics(kCharacterAnna);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaBaggageArgument, 0, 0);
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ playNIS(kEventAnnaBaggageArgument);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 1, 0, 0, 0);
+ break;
+ case 2:
+ getCharacterCurrentParams(kCharacterAnna)[0] = playFight(2002);
+ if (getCharacterCurrentParams(kCharacterAnna)[0]) {
+ endGame(0, 0, 0, getCharacterCurrentParams(kCharacterAnna)[0] == 1);
+ } else {
+ _gameTime += 1800;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaBagagePart2, 0, 0);
+ }
+ break;
+ case 3:
+ playNIS(kEventAnnaBagagePart2);
+ bumpCath(kCarBaggage, 96, 255);
+ _gameProgress[kProgressField54] = 0;
+ forceJump(kCharacterVesna, &LogicManager::CONS_Vesna_InComp);
+ _gameTime = 2266200;
+ CONS_Anna_PrepareVienna(0, 0, 0, 0);
+ break;
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_PrepareVienna(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_PrepareVienna);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 65;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_PrepareVienna(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAnna).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterAnna).characterPosition.position = 4070;
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ getCharacter(kCharacterAnna).clothes = 3;
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+ setDoor(45, kCharacterCath, 1, 255, 255);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_CompLogic, 15803100, "NONE", 0, 0);
+ }
+}
+
+void LogicManager::CONS_Anna_StartPart4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_StartPart4);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 66;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_StartPart4(HAND_PARAMS) {
+ if (msg->action) {
+ if (msg->action == 12) {
+ endGraphics(kCharacterAnna);
+ getCharacter(kCharacterAnna).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterAnna).characterPosition.position = 4070;
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ getCharacter(kCharacterAnna).clothes = 2;
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+ }
+ } else {
+ CONS_Anna_Reading(0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Anna_Reading(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_Reading);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 67;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_Reading(HAND_PARAMS) {
+ if (msg->action > 9) {
+ if (msg->action > 17) {
+ switch (msg->action) {
+ case 18:
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ playNIS(kEventAnnaConversation_34);
+ playDialog(0, "LIB015", -1, 0);
+ bumpCath(kCarRedSleeping, 8, 255);
+ CONS_Anna_Sulking(0, 0, 0, 0);
+ break;
+ case 2:
+ case 3:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "ANN1016", 0, 0, 0);
+ break;
+ case 4:
+ setDoor(53, kCharacterAnna, 1, 14, 0);
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ break;
+ case 5:
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[1] = 1;
+ break;
+ default:
+ return;
+ }
+ break;
+ case 191001984:
+ setDoor(37, kCharacterCath, 0, 10, 9);
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+ CONS_Anna_GoSalon4(0, 0, 0, 0);
+ break;
+ case 219971920:
+ getCharacterCurrentParams(kCharacterAnna)[2] = 1;
+ getCharacter(kCharacterAnna).inventoryItem = 0x80;
+ break;
+ }
+ } else if (msg->action == 17) {
+ if (getCharacterCurrentParams(kCharacterAnna)[1] || getCharacterCurrentParams(kCharacterAnna)[0]) {
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterAnna)[1] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+ }
+ } else if (msg->action == 12) {
+ setDoor(37, kCharacterCath, 2, 0, 0);
+ setDoor(45, kCharacterCath, 1, 255, 255);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ startCycOtis(kCharacterAnna, "511B");
+ }
+
+ return;
+ }
+
+ if (msg->action >= 8) {
+ if (getCharacterCurrentParams(kCharacterAnna)[0]) {
+ setDoor(53, kCharacterAnna, 1, 0, 0);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, getCathWCDialog(), 0, 0, 0);
+ } else {
+ setDoor(53, kCharacterAnna, 1, 0, 0);
+
+ if (msg->action == 8) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB012", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB013", 0, 0, 0);
+ }
+ }
+
+ return;
+ }
+
+ if (msg->action) {
+ if (msg->action == 1) {
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+ getCharacter(kCharacterCath).characterPosition.location = 1;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, 34, 0, 0);
+ }
+
+ return;
+ }
+
+ if (checkCathDir(kCarRedSleeping, 46)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[3] || (getCharacterCurrentParams(kCharacterAnna)[3] = _currentGameSessionTicks + 30, _currentGameSessionTicks != -30)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[3] >= _currentGameSessionTicks)
+ goto LABEL_21;
+
+ getCharacterCurrentParams(kCharacterAnna)[3] = 0x7FFFFFFF;
+ }
+
+ bumpCath(kCarRedSleeping, 8, 255);
+ }
+
+ getCharacterCurrentParams(kCharacterAnna)[3] = 0;
+LABEL_21:
+ if (getCharacterCurrentParams(kCharacterAnna)[0]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[4] || (getCharacterCurrentParams(kCharacterAnna)[4] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[4] >= _currentGameSessionTicks)
+ return;
+
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0x7FFFFFFF;
+ }
+
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[1] = 1;
+
+ setDoor(53, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0;
+ }
+}
+
+void LogicManager::CONS_Anna_Sulking(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_Sulking);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 68;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_Sulking(HAND_PARAMS) {
+ if (msg->action > 12) {
+ if (msg->action != 18) {
+ if (msg->action == 191001984) {
+ setDoor(37, kCharacterCath, 0, 10, 9);
+ CONS_Anna_GoSalon4(0, 0, 0, 0);
+ } else if (msg->action == 201431954) {
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ }
+ }
+ } else if (msg->action == 12) {
+ setDoor(37, kCharacterCath, 1, 10, 9);
+ setDoor(53, kCharacterCath, 1, 10, 9);
+ getCharacter(kCharacterAnna).characterPosition.car = 4;
+ getCharacter(kCharacterAnna).characterPosition.position = 4070;
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ } else if (msg->action == 0 && !getCharacterCurrentParams(kCharacterAnna)[0]) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_CompLogic, 2511900, "NONE", 0, 0);
+ }
+}
+
+void LogicManager::CONS_Anna_GoSalon4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_GoSalon4);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 69;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_GoSalon4(HAND_PARAMS) {
+ if (msg->action > 12) {
+ if (msg->action > 100969180) {
+ if (msg->action == 122288808) {
+ startCycOtis(kCharacterAnna, "127E");
+ send(kCharacterAnna, kCharacterAbbot, 203073664, 0);
+ } else if (msg->action == 122358304) {
+ startCycOtis(kCharacterAnna, "BLANK");
+ }
+ } else {
+ switch (msg->action) {
+ case 100969180:
+ endGraphics(kCharacterAnna);
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ break;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterAnna)[0] && checkLoc(kCharacterCath, kCarRedSleeping)) {
+ getCharacter(kCharacterAnna).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterAnna).characterPosition.position = 8200;
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ CONS_Anna_ReturnToComp4(0, 0, 0, 0);
+ }
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAnna).characterPosition.position = 1540;
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoBlockSeqOtis, "127A", 5, 56, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ startCycOtis(kCharacterAnna, "127B");
+ send(kCharacterAnna, kCharacterWaiter2, 258136010, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
+ AnnaCall(&LogicManager::CONS_Anna_DoBlockSeqOtis, "127G", 5, 56, 0);
+ break;
+ case 5:
+ CONS_Anna_ReturnToComp4(0, 0, 0, 0);
+ break;
+ default:
+ return;
+ }
+ break;
+ }
+ }
+ } else if (msg->action == 12) {
+ getCharacter(kCharacterAnna).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterAnna).characterPosition.position = 4070;
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoWalk, 5, 850, 0, 0);
+ } else if (msg->action == 0) {
+ if (getCharacterCurrentParams(kCharacterAnna)[0]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[1] || (getCharacterCurrentParams(kCharacterAnna)[1] = _gameTime + 4500, _gameTime != -4500)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[1] >= _gameTime)
+ return;
+
+ getCharacterCurrentParams(kCharacterAnna)[1] = 0x7FFFFFFF;
+ }
+
+ getCharacter(kCharacterAnna).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterAnna).characterPosition.position = 9270;
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ CONS_Anna_ReturnToComp4(0, 0, 0, 0);
+ } else if (_gameTime > 2535300 && !getCharacterCurrentParams(kCharacterAnna)[2]) {
+ getCharacterCurrentParams(kCharacterAnna)[2] = 1;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_WaitRCClear, 0, 0, 0, 0);
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_ReturnToComp4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_ReturnToComp4);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 70;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_ReturnToComp4(HAND_PARAMS) {
+ if (msg->action == 12) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoWalkCathFollowsAnna, 4, 4070, 0, 0);
+ } else if (msg->action == 18) {
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_EnterCompCathFollowsAnna, 0, 0, 0, 0);
+ } else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ endGraphics(kCharacterAnna);
+ CONS_Anna_LetDownHair(0, 0, 0, 0);
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_EnterCompCathFollowsAnna(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_EnterCompCathFollowsAnna);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 71;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_EnterCompCathFollowsAnna(HAND_PARAMS) {
+ switch (msg->action) {
+ case 3:
+ releaseAtDoor(kCharacterAnna, 37);
+ getCharacter(kCharacterAnna).characterPosition.position = 4070;
+
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ break;
+ case 12:
+ startSeqOtis(kCharacterAnna, "625Af");
+ if (checkCathDir(kCarRedSleeping, 7) || checkCathDir(kCarRedSleeping, 28) || checkCathDir(kCarRedSleeping, 56)) {
+ smartBumpCath();
+ }
+
+ blockAtDoor(kCharacterAnna, 37);
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+
+ if (inComp(kCharacterCath, kCarRedSleeping, 4070) || inComp(kCharacterCath, kCarRedSleeping, 4455)) {
+ if (isNight()) {
+ playNIS(kEventCathTurningNight);
+ } else {
+ playNIS(kEventCathTurningDay);
+ }
+
+ playDialog(0, "BUMP", -1, 0);
+ bumpCathFDoor(37);
+ }
+
+ break;
+ case 17:
+ if (!_gameEvents[kEventAnnaTiredKiss] && nearChar(kCharacterCath, kCharacterAnna, 2000) && whoOnScreen(kCharacterAnna) &&
+ getCharacter(kCharacterAnna).characterPosition.position < getCharacter(kCharacterCath).characterPosition.position) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaTiredKiss, 0, 0);
+ }
+
+ break;
+ case 18:
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ playNIS(kEventAnnaTiredKiss);
+ bumpCath(kCarRestaurant, 29, 255);
+ }
+
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_Anna_DoWalkCathFollowsAnna(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_DoWalkCathFollowsAnna);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 72;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+ params->parameters[1] = param2.intParam;
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_DoWalkCathFollowsAnna(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (_gameEvents[kEventAnnaTired] || whoFacingCath(kCharacterAnna)) {
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+ } else {
+ getCharacter(kCharacterAnna).inventoryItem = 0x80;
+ }
+
+ if (walk(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[0], getCharacterCurrentParams(kCharacterAnna)[1])) {
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ }
+
+ break;
+ case 1:
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaTired, 0, 0);
+ break;
+ case 12:
+ if (walk(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[0], getCharacterCurrentParams(kCharacterAnna)[1])) {
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ } else if (!_gameEvents[kEventAnnaTired]) {
+ getCharacter(kCharacterAnna).inventoryItem = 0x80;
+ }
+
+ break;
+ case 18:
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ playNIS(kEventAnnaTired);
+ if (getCharacter(kCharacterAnna).direction == 1)
+ bumpCathFx(getCharacter(kCharacterAnna).characterPosition.car, getCharacter(kCharacterAnna).characterPosition.position - 750);
+ else
+ bumpCathRx(getCharacter(kCharacterAnna).characterPosition.car, getCharacter(kCharacterAnna).characterPosition.position + 750);
+ }
+
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_Anna_LetDownHair(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_LetDownHair);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 73;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_LetDownHair(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAnna)[2] == 0x7FFFFFFF || getCharacterCurrentParams(kCharacterAnna)[0] >= _gameTime)
+ return;
+ if (getCharacterCurrentParams(kCharacterAnna)[1] < _gameTime)
+ goto LABEL_11;
+ if ((cathInCorridor(kCarGreenSleeping) || cathInCorridor(kCarRedSleeping)) && getCharacterCurrentParams(kCharacterAnna)[2] || (getCharacterCurrentParams(kCharacterAnna)[2] = _gameTime, _gameTime != 0)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[2] >= _gameTime)
+ return;
+ LABEL_11:
+ getCharacterCurrentParams(kCharacterAnna)[2] = 0x7FFFFFFF;
+ }
+ if (!cathInCorridor(kCarGreenSleeping) && !cathInCorridor(kCarRedSleeping))
+ playDialog(0, "BUMP", -1, 0);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventTrainHijacked, 0, 0);
+ break;
+ case 8:
+ setDoor(37, kCharacterAnna, 0, 0, 0);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB012", 0, 0, 0);
+ return;
+ case 9:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaKissTrainHijacked, 0, 0);
+ return;
+ case 12:
+ setDoor(37, kCharacterAnna, 0, 10, 9);
+ _gameTimeTicksDelta = 1;
+ getCharacterCurrentParams(kCharacterAnna)[0] = _gameTime + 4500;
+ getCharacterCurrentParams(kCharacterAnna)[1] = _gameTime + 9000;
+ return;
+ case 18:
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ playNIS(kEventTrainHijacked);
+ send(kCharacterAnna, kCharacterMaster, 139254416, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Ann4200", 0, 0, 0);
+ break;
+ case 3:
+ setDoor(37, kCharacterAnna, 0, 10, 9);
+ break;
+ case 4:
+ playNIS(kEventAnnaKissTrainHijacked);
+ send(kCharacterAnna, kCharacterMaster, 139254416, 0);
+ break;
+ default:
+ return;
+ }
+ return;
+ default:
+ return;
+ }
+}
+
+void LogicManager::CONS_Anna_StartPart5(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_StartPart5);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 74;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_StartPart5(HAND_PARAMS) {
+ if (msg->action) {
+ if (msg->action == 12) {
+ endGraphics(kCharacterAnna);
+ getCharacter(kCharacterAnna).characterPosition.car = 1;
+ getCharacter(kCharacterAnna).characterPosition.position = 3969;
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ getCharacter(kCharacterAnna).clothes = 3;
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+ setDoor(45, kCharacterCath, 0, 255, 255);
+ }
+ } else {
+ CONS_Anna_TiedUp(0, 0, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Anna_TiedUp(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_TiedUp);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 75;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_TiedUp(HAND_PARAMS) {
+ if (msg->action == 18) {
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ if (_gameProgress[kProgressFieldC]) {
+ if (_gameEvents[kEventAnnaKissTrainHijacked]) {
+ playNIS(kEventAnnaBaggageTies2);
+ } else {
+ playNIS(kEventAnnaBaggageTies);
+ }
+ } else if (_gameEvents[kEventAnnaKissTrainHijacked]) {
+ playNIS(kEventAnnaBaggageTies3);
+ } else {
+ playNIS(kEventAnnaBaggageTies4);
+ }
+
+ bumpCath(kCarBaggageRear, 88, 255);
+ CONS_Anna_Outside(0, 0, 0, 0);
+ }
+ } else if (msg->action == 272177921) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaBaggageTies, 0, 0);
+ }
+}
+
+void LogicManager::CONS_Anna_Outside(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_Outside);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 76;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_Outside(HAND_PARAMS) {
+ if (msg->action == 158480160)
+ CONS_Anna_ReadyToScore(0, 0, 0, 0);
+}
+
+void LogicManager::CONS_Anna_ReadyToScore(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_ReadyToScore);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 77;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_ReadyToScore(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 3645000 && !getCharacterCurrentParams(kCharacterAnna)[1]) {
+ getCharacterCurrentParams(kCharacterAnna)[1] = 1;
+ _gameTimeTicksDelta = 0;
+ }
+ break;
+ case 8:
+ case 9:
+ if (msg->action == 8) {
+ playDialog(0, "LIB012", -1, 0);
+ } else {
+ playDialog(0, "LIB014", -1, 0);
+ }
+
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaDialogGoToJerusalem, 0, 0);
+ break;
+ case 12:
+ setDoor(106, kCharacterAnna, 1, 10, 9);
+ break;
+ case 17:
+ if (!getCharacterCurrentParams(kCharacterAnna)[0] && checkLoc(kCharacterCath, kCarBaggage)) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 1, 0, 0, 0);
+ }
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ break;
+ case 2:
+ setDoor(106, kCharacterCath, 0, 10, 9);
+ playNIS(kEventAnnaDialogGoToJerusalem);
+ _gameTime = 4914000;
+ _gameTimeTicksDelta = 0;
+ send(kCharacterAnna, kCharacterTatiana, 236060709, 0);
+ bumpCath(kCarBaggage, 97, 1);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 1, 0, 0, 0);
+ break;
+ case 3:
+ CONS_Anna_Kidnapped(0, 0, 0, 0);
+ break;
+ }
+ break;
+ default:
+ return;
+ }
+}
+
+void LogicManager::CONS_Anna_Kidnapped(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_Kidnapped);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 78;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_Kidnapped(HAND_PARAMS) {
+ if (msg->action == 17) {
+ if (inDiningRoom(kCharacterCath) && cathHasItem(kItemFirebird))
+ goto LABEL_6;
+ if (!inSalon(kCharacterCath))
+ return;
+ if (cathHasItem(kItemFirebird)) {
+ LABEL_6:
+ CONS_Anna_FinalSequence(0, 0, 0, 0);
+ return;
+ }
+
+ _gameTime = 4920300;
+ if (_gameInventory[18].location == 4) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventKronosHostageAnna, 0, 0);
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventKronosHostageAnnaNoFirebird, 0, 0);
+ }
+ } else if (msg->action == 18) {
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ playNIS(kEventKronosHostageAnnaNoFirebird);
+ endGame(3, 42, 0, 1);
+ } else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
+ playNIS(kEventKronosHostageAnna);
+ bumpCath(kCarRestaurant, 61, 1);
+ playDialog(kCharacterAnna, "Mus024", 16, 0);
+ CONS_Anna_Waiting(0, 0, 0, 0);
+ }
+ }
+}
+
+void LogicManager::CONS_Anna_Waiting(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_Waiting);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 79;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_Waiting(HAND_PARAMS) {
+ switch (msg->action) {
+ case 2:
+ _gameTime = 4923000;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventKahinaPunchBaggageCarEntrance, 0, 0);
+ break;
+ case 17:
+ if (inDiningRoom(kCharacterCath) && cathHasItem(kItemFirebird)) {
+ CONS_Anna_FinalSequence(0, 0, 0, 0);
+ } else if (inSalon(kCharacterCath) && !_gameEvents[kEventKahinaPunch]) {
+ _gameTime = 4923000;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventKahinaPunch, 0, 0);
+ }
+ break;
+ case 18:
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ if (inSalon(kCharacterCath)) {
+ playNIS(kEventKahinaPunchSalon);
+ } else if (inDiningRoom(kCharacterCath)) {
+ playNIS(kEventKahinaPunchRestaurant);
+ } else if (inKitchen(kCharacterCath)) {
+ playNIS(kEventKahinaPunchKitchen);
+ } else if (inOffice(kCharacterCath)) {
+ playNIS(kEventKahinaPunchBaggageCarEntrance);
+ } else if (checkLoc(kCharacterCath, kCarBaggage)) {
+ playNIS(kEventKahinaPunchBaggageCar);
+ }
+ endGame(0, 1, 0, 1);
+ } else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
+ playNIS(kEventKahinaPunch);
+ endGame(0, 1, 0, 1);
+ }
+ break;
+ }
+}
+
+void LogicManager::CONS_Anna_FinalSequence(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_FinalSequence);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 80;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_FinalSequence(HAND_PARAMS) {
+ if (msg->action > 12) {
+ if (msg->action == 18) {
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ if (whoRunningDialog(kCharacterAnna))
+ fadeDialog(kCharacterAnna);
+ playNIS(kEventKronosBringFirebird);
+ bumpCathCloseUp(kItemFirebird);
+ playDialog(1, "Mus025", 16, 0);
+ break;
+ case 2:
+ playNIS(kEventKahinaPunch);
+ endGame(0, 1, 0, 1);
+ break;
+ case 3:
+ _gameProgress[kProgressIsEggOpen] = 1;
+ if (whoRunningDialog(kCharacterAnna))
+ fadeDialog(kCharacterAnna);
+ playNIS(kEventKronosOpenFirebird);
+ bumpCath(kCarRestaurant, 3, 255);
+ CONS_Anna_OpenFirebird(0, 0, 0, 0);
+ break;
+ }
+ } else if (msg->action == 205294778) {
+ _gameTime = 4929300;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventKronosOpenFirebird, 0, 0);
+ }
+ } else if (msg->action == 12) {
+ _gameTime = 4923000;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventKronosBringFirebird, 0, 0);
+ } else if (msg->action) {
+ if (msg->action == 2) {
+ playDialog(0, "Kro5002", 16, 0);
+ _gameTime = 4929300;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventKahinaPunch, 0, 0);
+ }
+ } else {
+ if (getCharacterCurrentParams(kCharacterAnna)[0] || (getCharacterCurrentParams(kCharacterAnna)[0] = _currentGameSessionTicks + 450, _currentGameSessionTicks != -450)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[0] >= _currentGameSessionTicks)
+ return;
+
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0x7FFFFFFF;
+ }
+
+ playDialog(0, "Kro5001", 16, 0);
+ }
+}
+
+void LogicManager::CONS_Anna_OpenFirebird(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_Anna_OpenFirebird);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 81;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_Anna_OpenFirebird(HAND_PARAMS) {
+ if (msg->action > 18) {
+ if (msg->action == 224309120) {
+ _gameProgress[kProgressIsEggOpen] = 0;
+ _gameTime = 4941000;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventKronosGiveFirebird, 0, 0);
+ } else if (msg->action == 270751616) {
+ _gameProgress[kProgressIsEggOpen] = 0;
+ killGracePeriod();
+ _gameTime = 4941000;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventFinalSequence, 0, 0);
+ }
+ } else if (msg->action == 18) {
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ playNIS(kEventCathCloseEggNoBackground);
+ playNIS(kEventKronosGiveFirebird);
+ if (cathHasItem(kItemWhistle)) {
+ endGame(0, 1, 53, true);
+ } else if (_gameInventory[kItemWhistle].location == 1) {
+ endGame(3, 208, 0, true);
+ } else {
+ endGame(3, 42, 54, true);
+ }
+ } else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
+ takeCathItem(kItemWhistle);
+ winGame();
+ }
+ } else if (msg->action == 0) {
+ if (getCharacterCurrentParams(kCharacterAnna)[0] || (getCharacterCurrentParams(kCharacterAnna)[0] = _currentGameSessionTicks + 180, _currentGameSessionTicks != -180)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[0] >= _currentGameSessionTicks)
+ return;
+
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0x7FFFFFFF;
+ }
+
+ playDialog(kCharacterClerk, "LIB069", 16, 0);
+ endGame(0, 0, 0, true);
+ }
+}
+
+void (LogicManager::*LogicManager::_functionsAnna[])(HAND_PARAMS) = {
+ nullptr,
+ &LogicManager::HAND_Anna_DebugWalks,
+ &LogicManager::HAND_Anna_DoSeqOtis,
+ &LogicManager::HAND_Anna_DoBlockSeqOtis,
+ &LogicManager::HAND_Anna_DoCorrOtis,
+ &LogicManager::HAND_Anna_FinishSeqOtis,
+ &LogicManager::HAND_Anna_DoJoinedSeqOtis,
+ &LogicManager::HAND_Anna_DoDialog,
+ &LogicManager::HAND_Anna_WaitRCClear,
+ &LogicManager::HAND_Anna_SaveGame,
+ &LogicManager::HAND_Anna_DoWalk,
+ &LogicManager::HAND_Anna_DoWait,
+ &LogicManager::HAND_Anna_PracticeMusic,
+ &LogicManager::HAND_Anna_DoComplexSeqOtis,
+ &LogicManager::HAND_Anna_DoWaitReal,
+ &LogicManager::HAND_Anna_CompLogic,
+ &LogicManager::HAND_Anna_Birth,
+ &LogicManager::HAND_Anna_DoWalkP1,
+ &LogicManager::HAND_Anna_DiningLogic,
+ &LogicManager::HAND_Anna_FleeTyler,
+ &LogicManager::HAND_Anna_WaitDinner,
+ &LogicManager::HAND_Anna_GoDinner,
+ &LogicManager::HAND_Anna_WaitHW,
+ &LogicManager::HAND_Anna_WaitingDinner,
+ &LogicManager::HAND_Anna_WaitingDinner2,
+ &LogicManager::HAND_Anna_EatingDinner,
+ &LogicManager::HAND_Anna_LeaveDinner,
+ &LogicManager::HAND_Anna_FreshenUp,
+ &LogicManager::HAND_Anna_GoSalon,
+ &LogicManager::HAND_Anna_WaitAugust,
+ &LogicManager::HAND_Anna_FlirtAugust,
+ &LogicManager::HAND_Anna_LeaveAugust,
+ &LogicManager::HAND_Anna_ReturnComp,
+ &LogicManager::HAND_Anna_ReadyForBed,
+ &LogicManager::HAND_Anna_Asleep,
+ &LogicManager::HAND_Anna_WakeNight,
+ &LogicManager::HAND_Anna_GoVassili,
+ &LogicManager::HAND_Anna_AtSeizure,
+ &LogicManager::HAND_Anna_SpeakTatiana,
+ &LogicManager::HAND_Anna_DoWalk1019,
+ &LogicManager::HAND_Anna_LeaveTatiana,
+ &LogicManager::HAND_Anna_GoBackToSleep,
+ &LogicManager::HAND_Anna_StartPart2,
+ &LogicManager::HAND_Anna_InPart2,
+ &LogicManager::HAND_Anna_StartPart3,
+ &LogicManager::HAND_Anna_ExitComp,
+ &LogicManager::HAND_Anna_Practicing,
+ &LogicManager::HAND_Anna_GoLunch,
+ &LogicManager::HAND_Anna_Lunch,
+ &LogicManager::HAND_Anna_DoOtis5026J,
+ &LogicManager::HAND_Anna_LeaveLunch,
+ &LogicManager::HAND_Anna_AfterLunch,
+ &LogicManager::HAND_Anna_ReturnComp3,
+ &LogicManager::HAND_Anna_Dressing,
+ &LogicManager::HAND_Anna_GiveMaxToCond2,
+ &LogicManager::HAND_Anna_GoConcert,
+ &LogicManager::HAND_Anna_Concert,
+ &LogicManager::HAND_Anna_LeaveConcert,
+ &LogicManager::HAND_Anna_LeaveConcertCathInComp,
+ &LogicManager::HAND_Anna_AfterConcert,
+ &LogicManager::HAND_Anna_GiveMaxBack,
+ &LogicManager::HAND_Anna_GoBagg,
+ &LogicManager::HAND_Anna_InBagg,
+ &LogicManager::HAND_Anna_DeadBagg,
+ &LogicManager::HAND_Anna_BaggageFight,
+ &LogicManager::HAND_Anna_PrepareVienna,
+ &LogicManager::HAND_Anna_StartPart4,
+ &LogicManager::HAND_Anna_Reading,
+ &LogicManager::HAND_Anna_Sulking,
+ &LogicManager::HAND_Anna_GoSalon4,
+ &LogicManager::HAND_Anna_ReturnToComp4,
+ &LogicManager::HAND_Anna_EnterCompCathFollowsAnna,
+ &LogicManager::HAND_Anna_DoWalkCathFollowsAnna,
+ &LogicManager::HAND_Anna_LetDownHair,
+ &LogicManager::HAND_Anna_StartPart5,
+ &LogicManager::HAND_Anna_TiedUp,
+ &LogicManager::HAND_Anna_Outside,
+ &LogicManager::HAND_Anna_ReadyToScore,
+ &LogicManager::HAND_Anna_Kidnapped,
+ &LogicManager::HAND_Anna_Waiting,
+ &LogicManager::HAND_Anna_FinalSequence,
+ &LogicManager::HAND_Anna_OpenFirebird
+};
+
+} // End of namespace LastExpress
diff --git a/engines/lastexpress/characters/august.cpp b/engines/lastexpress/characters/august.cpp
new file mode 100644
index 00000000000..2523d0823c0
--- /dev/null
+++ b/engines/lastexpress/characters/august.cpp
@@ -0,0 +1,3928 @@
+/* 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_August(int chapter) {
+ switch (chapter) {
+ case 0:
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterAugust,
+ _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]
+ );
+
+ break;
+ case 1:
+ CONS_August_Birth(0, 0, 0, 0);
+ break;
+ case 2:
+ CONS_August_StartPart2(0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_August_StartPart3(0, 0, 0, 0);
+ break;
+ case 4:
+ CONS_August_StartPart4(0, 0, 0, 0);
+ break;
+ case 5:
+ CONS_August_StartPart5(0, 0, 0, 0);
+ break;
+ default:
+ return;
+ }
+}
+
+void LogicManager::AugustCall(CALL_PARAMS) {
+ getCharacter(kCharacterAugust).currentCall++;
+
+ (this->*functionPointer)(param1, param2, param3, param4);
+}
+
+void LogicManager::CONS_August_DebugWalks(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAugust).callParams[getCharacter(kCharacterAugust).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAugust, &LogicManager::HAND_August_DebugWalks);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall] = 1;
+
+ params->clear();
+
+ fedEx(kCharacterAugust, kCharacterAugust, 12, 0);
+}
+
+void LogicManager::HAND_August_DebugWalks(HAND_PARAMS) {
+ if (msg->action) {
+ if (msg->action == 1) {
+ getCharacter(kCharacterAugust).clothes++;
+ if (getCharacter(kCharacterAugust).clothes > 2)
+ getCharacter(kCharacterAugust).clothes = 0;
+ } else if (msg->action == 12) {
+ getCharacter(kCharacterAugust).characterPosition.position = 0;
+ getCharacter(kCharacterAugust).characterPosition.location = 0;
+ getCharacter(kCharacterAugust).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterAugust).inventoryItem = kItemInvalid;
+ getCharacterCurrentParams(kCharacterAugust)[0] = 10000;
+ }
+ } else if (walk(kCharacterAugust, kCarGreenSleeping, getCharacterCurrentParams(kCharacterAugust)[0])) {
+ if (getCharacterCurrentParams(kCharacterAugust)[0] == 10000) {
+ getCharacterCurrentParams(kCharacterAugust)[0] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterAugust)[0] = 10000;
+ }
+ }
+}
+
+void LogicManager::CONS_August_DoWait(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAugust).callParams[getCharacter(kCharacterAugust).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAugust, &LogicManager::HAND_August_DoWait);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall] = 2;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+
+ fedEx(kCharacterAugust, kCharacterAugust, 12, 0);
+}
+
+void LogicManager::HAND_August_DoWait(HAND_PARAMS) {
+ if (msg->action == 0) {
+ if (getCharacterCurrentParams(kCharacterAugust)[1] ||
+ (getCharacterCurrentParams(kCharacterAugust)[1] = _gameTime + getCharacterCurrentParams(kCharacterAugust)[0], _gameTime + getCharacterCurrentParams(kCharacterAugust)[0] != 0)) {
+ if (getCharacterCurrentParams(kCharacterAugust)[1] >= _gameTime)
+ return;
+
+ getCharacterCurrentParams(kCharacterAugust)[1] = 0x7FFFFFFF;
+ }
+
+ getCharacter(kCharacterAugust).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
+ fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
+ }
+}
+
+void LogicManager::CONS_August_DoSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAugust).callParams[getCharacter(kCharacterAugust).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAugust, &LogicManager::HAND_August_DoSeqOtis);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall] = 3;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ fedEx(kCharacterAugust, kCharacterAugust, 12, 0);
+}
+
+void LogicManager::HAND_August_DoSeqOtis(HAND_PARAMS) {
+ if (msg->action == 3) {
+ getCharacter(kCharacterAugust).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
+ fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
+ } else if (msg->action == 12) {
+ startSeqOtis(kCharacterAugust, (char *)&getCharacterCurrentParams(kCharacterAugust)[0]);
+ }
+}
+
+void LogicManager::CONS_August_DoBlockSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAugust).callParams[getCharacter(kCharacterAugust).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAugust, &LogicManager::HAND_August_DoBlockSeqOtis);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall] = 4;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ params->parameters[3] = param2.intParam;
+ params->parameters[4] = param3.intParam;
+
+ fedEx(kCharacterAugust, kCharacterAugust, 12, 0);
+}
+
+void LogicManager::HAND_August_DoBlockSeqOtis(HAND_PARAMS) {
+ if (msg->action == 3) {
+ releaseView(kCharacterAugust, getCharacterCurrentParams(kCharacterAugust)[3], getCharacterCurrentParams(kCharacterAugust)[4]);
+
Commit: 787c013e038fcc3445bf216e971a582e130c7663
https://github.com/scummvm/scummvm/commit/787c013e038fcc3445bf216e971a582e130c7663
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Add support for demo
Changed paths:
A engines/lastexpress/characters/demo/demo_abbot.cpp
A engines/lastexpress/characters/demo/demo_anna.cpp
A engines/lastexpress/characters/demo/demo_august.cpp
A engines/lastexpress/characters/demo/demo_cond2.cpp
A engines/lastexpress/characters/demo/demo_francois.cpp
A engines/lastexpress/characters/demo/demo_ivo.cpp
A engines/lastexpress/characters/demo/demo_madame.cpp
A engines/lastexpress/characters/demo/demo_master.cpp
A engines/lastexpress/characters/demo/demo_monsieur.cpp
A engines/lastexpress/characters/demo/demo_rebecca.cpp
A engines/lastexpress/characters/demo/demo_tablea.cpp
A engines/lastexpress/characters/demo/demo_tableb.cpp
A engines/lastexpress/characters/demo/demo_tablec.cpp
A engines/lastexpress/characters/demo/demo_tabled.cpp
A engines/lastexpress/characters/demo/demo_tablee.cpp
A engines/lastexpress/characters/demo/demo_tablef.cpp
A engines/lastexpress/characters/demo/demo_tatiana.cpp
A engines/lastexpress/characters/demo/demo_vesna.cpp
A engines/lastexpress/characters/demo/demo_waiter1.cpp
engines/lastexpress/characters/abbot.cpp
engines/lastexpress/characters/anna.cpp
engines/lastexpress/characters/august.cpp
engines/lastexpress/characters/francois.cpp
engines/lastexpress/characters/ivo.cpp
engines/lastexpress/characters/master.cpp
engines/lastexpress/characters/vesna.cpp
engines/lastexpress/data/archive.cpp
engines/lastexpress/debug.cpp
engines/lastexpress/detection.cpp
engines/lastexpress/fight/opponent_vesna1.cpp
engines/lastexpress/game/action.cpp
engines/lastexpress/game/credits.cpp
engines/lastexpress/game/events.cpp
engines/lastexpress/game/logic.cpp
engines/lastexpress/game/logic.h
engines/lastexpress/game/navigation.cpp
engines/lastexpress/game/savegame.cpp
engines/lastexpress/game/vcr.cpp
engines/lastexpress/graphics.cpp
engines/lastexpress/lastexpress.cpp
engines/lastexpress/lastexpress.h
engines/lastexpress/menu/menu.cpp
engines/lastexpress/menu/menu.h
engines/lastexpress/module.mk
engines/lastexpress/sound/sound.cpp
diff --git a/engines/lastexpress/characters/abbot.cpp b/engines/lastexpress/characters/abbot.cpp
index 5f6c32284c0..50e75ec1a0f 100644
--- a/engines/lastexpress/characters/abbot.cpp
+++ b/engines/lastexpress/characters/abbot.cpp
@@ -1422,7 +1422,7 @@ void LogicManager::HAND_Abbot_InSalon3(HAND_PARAMS) {
playDialog(kCharacterAbbot, "Abb3040", -1, 45);
blockView(kCharacterAbbot, kCarRestaurant, 57);
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
- AbbotCall(&LogicManager::CONS_Abbot_DoJoinedSeqOtis, "121A", 2, 122358304u, "BOGUS");
+ AbbotCall(&LogicManager::CONS_Abbot_DoJoinedSeqOtis, "121A", 2, 122358304, "BOGUS");
break;
case 3:
releaseView(kCharacterAbbot, kCarRestaurant, 57);
@@ -1430,8 +1430,12 @@ void LogicManager::HAND_Abbot_InSalon3(HAND_PARAMS) {
getCharacter(kCharacterAbbot).characterPosition.location = 1;
CONS_Abbot_WithAugust(0, 0, 0, 0);
break;
+ default:
+ break;
}
+ break;
+ default:
break;
}
}
diff --git a/engines/lastexpress/characters/anna.cpp b/engines/lastexpress/characters/anna.cpp
index a24fbaccef0..2832b0b19ac 100644
--- a/engines/lastexpress/characters/anna.cpp
+++ b/engines/lastexpress/characters/anna.cpp
@@ -176,12 +176,12 @@ void LogicManager::CONS_Anna_FinishSeqOtis(CONS_PARAMS) {
void LogicManager::HAND_Anna_FinishSeqOtis(HAND_PARAMS) {
if (msg->action == 0) {
- if (getCharacter(kCharacterAnna).direction == 4)
- return;
- goto LABEL_5;
- }
- if (msg->action == 3) {
- LABEL_5:
+ if (getCharacter(kCharacterAnna).direction != 4) {
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ }
+ } else if (msg->action == 3) {
getCharacter(kCharacterAnna).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
@@ -262,12 +262,12 @@ void LogicManager::CONS_Anna_WaitRCClear(CONS_PARAMS) {
void LogicManager::HAND_Anna_WaitRCClear(HAND_PARAMS) {
if (msg->action == 0) {
- if (!rcClear())
- return;
- goto LABEL_7;
- }
- if (msg->action == 12 && rcClear()) {
- LABEL_7:
+ if (rcClear()) {
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ }
+ } else if (msg->action == 12 && rcClear()) {
getCharacter(kCharacterAnna).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
@@ -291,7 +291,7 @@ void LogicManager::HAND_Anna_SaveGame(HAND_PARAMS) {
if (msg->action) {
if (msg->action == 12) {
save(
- 1,
+ kCharacterAnna,
getCharacterCurrentParams(kCharacterAnna)[0],
getCharacterCurrentParams(kCharacterAnna)[1]
);
@@ -323,8 +323,13 @@ void LogicManager::CONS_Anna_DoWalk(CONS_PARAMS) {
void LogicManager::HAND_Anna_DoWalk(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (walk(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[0], getCharacterCurrentParams(kCharacterAnna)[1]))
- goto LABEL_12;
+ case 12:
+ if (walk(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[0], getCharacterCurrentParams(kCharacterAnna)[1])) {
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ }
+
break;
case 5:
if (_gameEvents[kEventAugustPresentAnna] || _gameEvents[kEventAugustPresentAnnaFirstIntroduction] || _gameProgress[kProgressChapter] >= 2) {
@@ -332,18 +337,11 @@ void LogicManager::HAND_Anna_DoWalk(HAND_PARAMS) {
} else {
playCathExcuseMe();
}
+
break;
case 6:
playChrExcuseMe(kCharacterAnna, kCharacterCath, 0);
break;
- case 12:
- if (walk(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[0], getCharacterCurrentParams(kCharacterAnna)[1])) {
- LABEL_12:
- getCharacter(kCharacterAnna).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
- fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
- }
- break;
default:
return;
}
@@ -3429,6 +3427,8 @@ void LogicManager::HAND_Anna_DeadBagg(HAND_PARAMS) {
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaKilled, 0, 0);
break;
+ default:
+ break;
}
}
@@ -3472,6 +3472,8 @@ void LogicManager::HAND_Anna_BaggageFight(HAND_PARAMS) {
_gameTime = 2266200;
CONS_Anna_PrepareVienna(0, 0, 0, 0);
break;
+ default:
+ break;
}
}
}
diff --git a/engines/lastexpress/characters/august.cpp b/engines/lastexpress/characters/august.cpp
index 2523d0823c0..f4faa34d82d 100644
--- a/engines/lastexpress/characters/august.cpp
+++ b/engines/lastexpress/characters/august.cpp
@@ -468,7 +468,7 @@ void LogicManager::HAND_August_SaveGame(HAND_PARAMS) {
if (msg->action) {
if (msg->action == 12) {
save(
- 2,
+ kCharacterAugust,
getCharacterCurrentParams(kCharacterAugust)[0],
getCharacterCurrentParams(kCharacterAugust)[1]
);
diff --git a/engines/lastexpress/characters/demo/demo_abbot.cpp b/engines/lastexpress/characters/demo/demo_abbot.cpp
new file mode 100644
index 00000000000..24babf5281b
--- /dev/null
+++ b/engines/lastexpress/characters/demo/demo_abbot.cpp
@@ -0,0 +1,303 @@
+/* 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_DemoAbbot(int chapter) {
+ switch (chapter) {
+ case 0:
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterAbbot,
+ _functionsDemoAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]
+ );
+
+ break;
+ case 1:
+ CONS_DemoAbbot_Birth(0, 0, 0, 0);
+ break;
+ case 2:
+ CONS_DemoAbbot_StartPart2(0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_DemoAbbot_StartPart3(0, 0, 0, 0);
+ break;
+ case 4:
+ CONS_DemoAbbot_StartPart4(0, 0, 0, 0);
+ break;
+ case 5:
+ CONS_DemoAbbot_StartPart5(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::DemoAbbotCall(CALL_PARAMS) {
+ getCharacter(kCharacterAbbot).currentCall++;
+
+ (this->*functionPointer)(param1, param2, param3, param4);
+}
+
+void LogicManager::CONS_DemoAbbot_DoWait(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_DemoAbbot_DoWait);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 1;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_DemoAbbot_DoWait(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAbbot)[1]) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[1] >= _gameTime)
+ return;
+
+ getCharacterCurrentParams(kCharacterAbbot)[1] = 0x7FFFFFFF;
+ } else {
+ getCharacterCurrentParams(kCharacterAbbot)[1] = _gameTime + getCharacterCurrentParams(kCharacterAbbot)[0];
+
+ if (_gameTime + getCharacterCurrentParams(kCharacterAbbot)[0] == 0)
+ return;
+
+ if (_gameTime <= getCharacterCurrentParams(kCharacterAbbot)[1])
+ return;
+
+ getCharacterCurrentParams(kCharacterAbbot)[1] = 0x7FFFFFFF;
+ }
+
+ getCharacter(kCharacterAbbot).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsDemoAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoAbbot_DoJoinedSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_DemoAbbot_DoJoinedSeqOtis);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 2;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ params->parameters[3] = param2.intParam;
+ params->parameters[4] = param3.intParam;
+
+ strncpy((char *)¶ms->parameters[5], param4.stringParam, 12);
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_DemoAbbot_DoJoinedSeqOtis(HAND_PARAMS) {
+ switch (msg->action) {
+ case 3:
+ if (!getCharacterCurrentParams(kCharacterAbbot)[8])
+ fedEx(kCharacterAbbot, getCharacterCurrentParams(kCharacterAbbot)[3], getCharacterCurrentParams(kCharacterAbbot)[4], getCharacterCurrentParams(kCharacterAbbot)[5]);
+
+ getCharacter(kCharacterAbbot).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsDemoAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
+ fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+
+ break;
+ case 10:
+ if (!getCharacterCurrentParams(kCharacterAbbot)[8]) {
+ fedEx(kCharacterAbbot, getCharacterCurrentParams(kCharacterAbbot)[3], getCharacterCurrentParams(kCharacterAbbot)[4], getCharacterCurrentParams(kCharacterAbbot)[5]);
+ getCharacterCurrentParams(kCharacterAbbot)[8] = 1;
+ }
+
+ break;
+ case 12:
+ startSeqOtis(kCharacterAbbot, (char *)&getCharacterCurrentParams(kCharacterAbbot));
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoAbbot_WaitRCClear(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_DemoAbbot_WaitRCClear);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 3;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_DemoAbbot_WaitRCClear(HAND_PARAMS) {
+ if ((msg->action == 12 && rcClear()) || (msg->action == 0 && rcClear())) {
+ getCharacter(kCharacterAbbot).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsDemoAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+ }
+}
+
+void LogicManager::CONS_DemoAbbot_Birth(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_DemoAbbot_Birth);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 4;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_DemoAbbot_Birth(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAbbot)[0] == 0x7FFFFFFF || _gameTime <= 2248200)
+ return;
+
+ if (_gameTime <= 2259000) {
+ if (!inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterAbbot)[0]) {
+ getCharacterCurrentParams(kCharacterAbbot)[0] = _gameTime + 225;
+ if (_gameTime == -225) {
+ send(kCharacterAbbot, kCharacterAugust, 136196244, 0);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_DemoAbbot_DoWait, 0, 0, 0, 0);
+ return;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterAbbot)[0] >= _gameTime)
+ return;
+ }
+
+ getCharacterCurrentParams(kCharacterAbbot)[0] = 0x7FFFFFFF;
+ send(kCharacterAbbot, kCharacterAugust, 136196244, 0);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_DemoAbbot_DoWait, 0, 0, 0, 0);
+
+ break;
+ case 12:
+ getCharacter(kCharacterAbbot).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterAbbot).characterPosition.position = 3450;
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+ startCycOtis(kCharacterAbbot, "115B");
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
+ AbbotCall(&LogicManager::CONS_DemoAbbot_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAbbot).characterPosition.location = 0;
+ playDialog(kCharacterAbbot, "Abb3demo", -1, 45);
+ blockView(kCharacterAbbot, kCarRestaurant, 50);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
+ AbbotCall(&LogicManager::CONS_DemoAbbot_DoJoinedSeqOtis, "121A", 2, 122358304, "BOGUS");
+ break;
+ case 3:
+ releaseView(kCharacterAbbot, kCarRestaurant, 50);
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+ startCycOtis(kCharacterAbbot, "121B");
+ break;
+ default:
+ break;
+ }
+
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoAbbot_StartPart2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_DemoAbbot_StartPart2);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 5;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_DemoAbbot_StartPart2(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoAbbot_StartPart3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_DemoAbbot_StartPart3);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 6;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_DemoAbbot_StartPart3(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoAbbot_StartPart4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_DemoAbbot_StartPart4);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 7;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_DemoAbbot_StartPart4(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoAbbot_StartPart5(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAbbot).callParams[getCharacter(kCharacterAbbot).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, &LogicManager::HAND_DemoAbbot_StartPart5);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall] = 8;
+
+ params->clear();
+
+ fedEx(kCharacterAbbot, kCharacterAbbot, 12, 0);
+}
+
+void LogicManager::HAND_DemoAbbot_StartPart5(HAND_PARAMS) {
+ // No-op
+}
+
+void (LogicManager::*LogicManager::_functionsDemoAbbot[])(HAND_PARAMS) = {
+ nullptr,
+ &LogicManager::HAND_DemoAbbot_DoWait,
+ &LogicManager::HAND_DemoAbbot_DoJoinedSeqOtis,
+ &LogicManager::HAND_DemoAbbot_WaitRCClear,
+ &LogicManager::HAND_DemoAbbot_Birth,
+ &LogicManager::HAND_DemoAbbot_StartPart2,
+ &LogicManager::HAND_DemoAbbot_StartPart3,
+ &LogicManager::HAND_DemoAbbot_StartPart4,
+ &LogicManager::HAND_DemoAbbot_StartPart5
+};
+
+} // End of namespace LastExpress
diff --git a/engines/lastexpress/characters/demo/demo_anna.cpp b/engines/lastexpress/characters/demo/demo_anna.cpp
new file mode 100644
index 00000000000..69432afbd13
--- /dev/null
+++ b/engines/lastexpress/characters/demo/demo_anna.cpp
@@ -0,0 +1,513 @@
+/* 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_DemoAnna(int chapter) {
+ switch (chapter) {
+ case 0:
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterAnna,
+ _functionsDemoAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+
+ break;
+ case 1:
+ CONS_DemoAnna_Birth(0, 0, 0, 0);
+ break;
+ case 2:
+ CONS_DemoAnna_StartPart2(0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_DemoAnna_StartPart3(0, 0, 0, 0);
+ break;
+ case 4:
+ CONS_DemoAnna_StartPart4(0, 0, 0, 0);
+ break;
+ case 5:
+ CONS_DemoAnna_StartPart5(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::DemoAnnaCall(CALL_PARAMS) {
+ getCharacter(kCharacterAnna).currentCall++;
+
+ (this->*functionPointer)(param1, param2, param3, param4);
+}
+
+void LogicManager::CONS_DemoAnna_DoSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_DemoAnna_DoSeqOtis);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 1;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_DemoAnna_DoSeqOtis(HAND_PARAMS) {
+ switch (msg->action) {
+ case 3:
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsDemoAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ break;
+ case 12:
+ startSeqOtis(kCharacterAnna, (char *)&getCharacterCurrentParams(kCharacterAnna)[0]);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoAnna_FinishSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_DemoAnna_FinishSeqOtis);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 2;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_DemoAnna_FinishSeqOtis(HAND_PARAMS) {
+ if (msg->action == 3) {
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsDemoAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ }
+}
+
+void LogicManager::CONS_DemoAnna_DoCorrOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_DemoAnna_DoCorrOtis);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 3;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ params->parameters[3] = param2.intParam;
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_DemoAnna_DoCorrOtis(HAND_PARAMS) {
+ switch (msg->action) {
+ case 3:
+ releaseAtDoor(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[3]);
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsDemoAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ break;
+ case 12:
+ startSeqOtis(kCharacterAnna, (char *)&getCharacterCurrentParams(kCharacterAnna)[0]);
+ blockAtDoor(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[3]);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoAnna_WaitRCClear(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_DemoAnna_WaitRCClear);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 4;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_DemoAnna_WaitRCClear(HAND_PARAMS) {
+ if ((msg->action == 0 && rcClear()) && (msg->action == 12 && rcClear())) {
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsDemoAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ }
+}
+
+void LogicManager::CONS_DemoAnna_SaveGame(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_DemoAnna_SaveGame);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 5;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+ params->parameters[1] = param2.intParam;
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_DemoAnna_SaveGame(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsDemoAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ break;
+ case 12:
+ save(
+ kCharacterAnna,
+ getCharacterCurrentParams(kCharacterAnna)[0],
+ getCharacterCurrentParams(kCharacterAnna)[1]
+ );
+
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsDemoAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoAnna_DoWalk(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_DemoAnna_DoWalk);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 6;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+ params->parameters[1] = param2.intParam;
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_DemoAnna_DoWalk(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ case 12:
+ if (walk(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[0], getCharacterCurrentParams(kCharacterAnna)[1])) {
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsDemoAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ }
+
+ break;
+ case 5:
+ playDialog(kCharacterCath, "CAT1001", -1, 0);
+ break;
+ case 6:
+ playChrExcuseMe(kCharacterAnna, kCharacterCath, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoAnna_Birth(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_DemoAnna_Birth);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 7;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_DemoAnna_Birth(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 2254500 && !getCharacterCurrentParams(kCharacterAnna)[0]) {
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ DemoAnnaCall(&LogicManager::CONS_DemoAnna_GoBagg, 0, 0, 0, 0);
+ }
+
+ break;
+ case 12:
+ getCharacter(kCharacterAnna).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterAnna).characterPosition.position = 4070;
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ getCharacter(kCharacterAnna).clothes = 2;
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoAnna_GoBagg(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_DemoAnna_GoBagg);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 8;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_DemoAnna_GoBagg(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ setDoor(53, kCharacterCath, 1, 10, 9);
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ DemoAnnaCall(&LogicManager::CONS_DemoAnna_DoCorrOtis, "625Bf", 37, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ setDoor(37, kCharacterCath, 1, 10, 9);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ DemoAnnaCall(&LogicManager::CONS_DemoAnna_DoWalk, 5, 850, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ DemoAnnaCall(&LogicManager::CONS_DemoAnna_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAnna).characterPosition.position = 1540;
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ DemoAnnaCall(&LogicManager::CONS_DemoAnna_DoSeqOtis, "802US", 0, 0, 0);
+ break;
+ case 4:
+ startSeqOtis(kCharacterAnna, "802UD");
+
+ if (inSalon(kCharacterCath))
+ advanceFrame(kCharacterAnna);
+
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
+ DemoAnnaCall(&LogicManager::CONS_DemoAnna_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 5:
+ _gameProgress[kProgressField4C] = 1;
+ endGraphics(kCharacterAnna);
+ CONS_DemoAnna_InBagg(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoAnna_InBagg(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_DemoAnna_InBagg);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 9;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_DemoAnna_InBagg(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAnna)[0] && _gameTime > 2265300 && !getCharacterCurrentParams(kCharacterAnna)[1]) {
+ getCharacterCurrentParams(kCharacterAnna)[1] = 1;
+ if (checkLoc(kCharacterCath, 6)) {
+ CONS_DemoAnna_BaggageFight(0, 0, 0, 0);
+ } else {
+ send(kCharacterAnna, kCharacterVesna, 189299008, 0);
+ CONS_DemoAnna_DeadBagg(0, 0, 0, 0);
+ }
+ }
+
+ break;
+ case 12:
+ getCharacter(kCharacterAnna).characterPosition.car = kCarBaggage;
+ _gameProgress[kProgressField54] = 1;
+ break;
+ case 235856512:
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoAnna_DeadBagg(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_DemoAnna_DeadBagg);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 10;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_DemoAnna_DeadBagg(HAND_PARAMS) {
+ switch (msg->action) {
+ case 18:
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ playNIS(kEventAnnaKilled);
+ endGame(1, 2259000, 58, true);
+ }
+
+ break;
+ case 272177921:
+ if (dialogRunning("MUS021"))
+ fadeDialog("MUS021");
+
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ DemoAnnaCall(&LogicManager::CONS_DemoAnna_SaveGame, 2, kEventAnnaKilled, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoAnna_BaggageFight(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_DemoAnna_BaggageFight);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 11;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_DemoAnna_BaggageFight(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ endGraphics(kCharacterAnna);
+
+ if (dialogRunning("MUS021"))
+ fadeDialog("MUS021");
+
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ DemoAnnaCall(&LogicManager::CONS_DemoAnna_SaveGame, 2, kEventAnnaBaggageArgument, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ playNIS(kEventAnnaBaggageArgument);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ DemoAnnaCall(&LogicManager::CONS_DemoAnna_SaveGame, 1, 0, 0, 0);
+ break;
+ case 2:
+ getCharacterCurrentParams(kCharacterAnna)[0] = playFight(2002);
+ if (getCharacterCurrentParams(kCharacterAnna)[0]) {
+ endGame(0, 0, 0, getCharacterCurrentParams(kCharacterAnna)[0] == 1);
+ } else {
+ _gameTime = 2268000;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ DemoAnnaCall(&LogicManager::CONS_DemoAnna_SaveGame, 2, kEventAnnaBagagePart2, 0, 0);
+ }
+
+ break;
+ case 3:
+ playNIS(kEventAnnaBagagePart2);
+ _gameProgress[kProgressField54] = 0;
+ forceJump(kCharacterVesna, &LogicManager::CONS_DemoVesna_InComp);
+ winGame();
+ break;
+ default:
+ break;
+ }
+
+ break;
+
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoAnna_StartPart2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_DemoAnna_StartPart2);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 12;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_DemoAnna_StartPart2(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoAnna_StartPart3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_DemoAnna_StartPart3);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 13;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_DemoAnna_StartPart3(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoAnna_StartPart4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_DemoAnna_StartPart4);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 14;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_DemoAnna_StartPart4(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoAnna_StartPart5(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, &LogicManager::HAND_DemoAnna_StartPart5);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall] = 15;
+
+ params->clear();
+
+ fedEx(kCharacterAnna, kCharacterAnna, 12, 0);
+}
+
+void LogicManager::HAND_DemoAnna_StartPart5(HAND_PARAMS) {
+ // No-op
+}
+
+void (LogicManager::*LogicManager::_functionsDemoAnna[])(HAND_PARAMS) = {
+ nullptr,
+ &LogicManager::HAND_DemoAnna_DoSeqOtis,
+ &LogicManager::HAND_DemoAnna_FinishSeqOtis,
+ &LogicManager::HAND_DemoAnna_DoCorrOtis,
+ &LogicManager::HAND_DemoAnna_WaitRCClear,
+ &LogicManager::HAND_DemoAnna_SaveGame,
+ &LogicManager::HAND_DemoAnna_DoWalk,
+ &LogicManager::HAND_DemoAnna_Birth,
+ &LogicManager::HAND_DemoAnna_GoBagg,
+ &LogicManager::HAND_DemoAnna_InBagg,
+ &LogicManager::HAND_DemoAnna_DeadBagg,
+ &LogicManager::HAND_DemoAnna_BaggageFight,
+ &LogicManager::HAND_DemoAnna_StartPart2,
+ &LogicManager::HAND_DemoAnna_StartPart3,
+ &LogicManager::HAND_DemoAnna_StartPart4,
+ &LogicManager::HAND_DemoAnna_StartPart5
+};
+
+} // End of namespace LastExpress
diff --git a/engines/lastexpress/characters/demo/demo_august.cpp b/engines/lastexpress/characters/demo/demo_august.cpp
new file mode 100644
index 00000000000..bd0eed27f60
--- /dev/null
+++ b/engines/lastexpress/characters/demo/demo_august.cpp
@@ -0,0 +1,230 @@
+/* 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_DemoAugust(int chapter) {
+ switch (chapter) {
+ case 0:
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterAugust,
+ _functionsDemoAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]
+ );
+
+ break;
+ case 1:
+ CONS_DemoAugust_Birth(0, 0, 0, 0);
+ break;
+ case 2:
+ CONS_DemoAugust_StartPart2(0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_DemoAugust_StartPart3(0, 0, 0, 0);
+ break;
+ case 4:
+ CONS_DemoAugust_StartPart4(0, 0, 0, 0);
+ break;
+ case 5:
+ CONS_DemoAugust_StartPart5(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::DemoAugustCall(CALL_PARAMS) {
+ getCharacter(kCharacterAugust).currentCall++;
+
+ (this->*functionPointer)(param1, param2, param3, param4);
+}
+
+void LogicManager::CONS_DemoAugust_SaveGame(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAugust).callParams[getCharacter(kCharacterAugust).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAugust, &LogicManager::HAND_DemoAugust_SaveGame);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall] = 1;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+ params->parameters[1] = param2.intParam;
+
+ fedEx(kCharacterAugust, kCharacterAugust, 12, 0);
+}
+
+void LogicManager::HAND_DemoAugust_SaveGame(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ getCharacter(kCharacterAugust).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsDemoAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
+ fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
+ break;
+ case 12:
+ save(
+ kCharacterAugust,
+ getCharacterCurrentParams(kCharacterAugust)[0],
+ getCharacterCurrentParams(kCharacterAugust)[1]
+ );
+
+ getCharacter(kCharacterAugust).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsDemoAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
+ fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoAugust_Birth(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAugust).callParams[getCharacter(kCharacterAugust).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAugust, &LogicManager::HAND_DemoAugust_Birth);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall] = 2;
+
+ params->clear();
+
+ fedEx(kCharacterAugust, kCharacterAugust, 12, 0);
+}
+
+void LogicManager::HAND_DemoAugust_Birth(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAugust)[2] && !getCharacterCurrentParams(kCharacterAugust)[0]) {
+ getCharacter(kCharacterAugust).inventoryItem = 0x80;
+ } else {
+ getCharacter(kCharacterAugust).inventoryItem = 0;
+ }
+
+ break;
+ case 1:
+ getCharacter(kCharacterAugust).inventoryItem = 0;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
+ DemoAugustCall(&LogicManager::CONS_DemoAugust_SaveGame, 2, kEventAugustTalkCigar, 0, 0);
+ break;
+ case 3:
+ releaseView(kCharacterAugust, kCarRestaurant, 50);
+ startCycOtis(kCharacterAugust, "105B3");
+ break;
+ case 12:
+ getCharacter(kCharacterAugust).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterAugust).characterPosition.position = 3450;
+ getCharacter(kCharacterAugust).characterPosition.location = 1;
+ send(kCharacterAugust, kCharacterAbbot, 123712592, 0);
+ startCycOtis(kCharacterAugust, "105B3");
+ getCharacterCurrentParams(kCharacterAugust)[2] = 1;
+ break;
+ case 17:
+ if (checkCathDir(kCarRestaurant, 60) && !getCharacterCurrentParams(kCharacterAugust)[1] && !getCharacterCurrentParams(kCharacterAugust)[0]) {
+ blockView(kCharacterAugust, kCarRestaurant, 50);
+ startSeqOtis(kCharacterAugust, "105C3");
+ }
+
+ break;
+ case 18:
+ if (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 1) {
+ playNIS(kEventAugustTalkCigar);
+ startCycOtis(kCharacterAugust, "105B3");
+ cleanNIS();
+ getCharacterCurrentParams(kCharacterAugust)[2] = 0;
+ }
+
+ break;
+ case 122358304:
+ startCycOtis(kCharacterAugust, "BLANK");
+ getCharacterCurrentParams(kCharacterAugust)[0] = 1;
+ getCharacterCurrentParams(kCharacterAugust)[1] = 1;
+ break;
+ case 136196244:
+ getCharacterCurrentParams(kCharacterAugust)[0] = 1;
+ getCharacter(kCharacterAugust).inventoryItem = 0;
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoAugust_StartPart2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAugust).callParams[getCharacter(kCharacterAugust).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAugust, &LogicManager::HAND_DemoAugust_StartPart2);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall] = 3;
+
+ params->clear();
+
+ fedEx(kCharacterAugust, kCharacterAugust, 12, 0);
+}
+
+void LogicManager::HAND_DemoAugust_StartPart2(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoAugust_StartPart3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAugust).callParams[getCharacter(kCharacterAugust).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAugust, &LogicManager::HAND_DemoAugust_StartPart3);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall] = 4;
+
+ params->clear();
+
+ fedEx(kCharacterAugust, kCharacterAugust, 12, 0);
+}
+
+void LogicManager::HAND_DemoAugust_StartPart3(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoAugust_StartPart4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAugust).callParams[getCharacter(kCharacterAugust).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAugust, &LogicManager::HAND_DemoAugust_StartPart4);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall] = 5;
+
+ params->clear();
+
+ fedEx(kCharacterAugust, kCharacterAugust, 12, 0);
+}
+
+void LogicManager::HAND_DemoAugust_StartPart4(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoAugust_StartPart5(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterAugust).callParams[getCharacter(kCharacterAugust).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterAugust, &LogicManager::HAND_DemoAugust_StartPart5);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall] = 35;
+
+ params->clear();
+
+ fedEx(kCharacterAugust, kCharacterAugust, 12, 0);
+}
+
+void LogicManager::HAND_DemoAugust_StartPart5(HAND_PARAMS) {
+ // No-op
+}
+
+void (LogicManager::*LogicManager::_functionsDemoAugust[])(HAND_PARAMS) = {
+ nullptr,
+ &LogicManager::HAND_DemoAugust_SaveGame,
+ &LogicManager::HAND_DemoAugust_Birth,
+ &LogicManager::HAND_DemoAugust_StartPart2,
+ &LogicManager::HAND_DemoAugust_StartPart3,
+ &LogicManager::HAND_DemoAugust_StartPart4,
+ &LogicManager::HAND_DemoAugust_StartPart5
+};
+
+} // End of namespace LastExpress
diff --git a/engines/lastexpress/characters/demo/demo_cond2.cpp b/engines/lastexpress/characters/demo/demo_cond2.cpp
new file mode 100644
index 00000000000..aecb349dffa
--- /dev/null
+++ b/engines/lastexpress/characters/demo/demo_cond2.cpp
@@ -0,0 +1,261 @@
+/* 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_DemoCond2(int chapter) {
+ switch (chapter) {
+ case 0:
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterCond2,
+ _functionsDemoCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]
+ );
+
+ break;
+ case 1:
+ CONS_DemoCond2_Birth(0, 0, 0, 0);
+ break;
+ case 2:
+ CONS_DemoCond2_StartPart2(0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_DemoCond2_StartPart3(0, 0, 0, 0);
+ break;
+ case 4:
+ CONS_DemoCond2_StartPart4(0, 0, 0, 0);
+ break;
+ case 5:
+ CONS_DemoCond2_StartPart5(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::DemoCond2Call(CALL_PARAMS) {
+ getCharacter(kCharacterCond2).currentCall++;
+
+ (this->*functionPointer)(param1, param2, param3, param4);
+}
+
+void LogicManager::CONS_DemoCond2_DoSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterCond2).callParams[getCharacter(kCharacterCond2).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, &LogicManager::HAND_DemoCond2_DoSeqOtis);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall] = 1;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ fedEx(kCharacterCond2, kCharacterCond2, 12, 0);
+}
+
+void LogicManager::HAND_DemoCond2_DoSeqOtis(HAND_PARAMS) {
+ switch (msg->action) {
+ case 3:
+ getCharacter(kCharacterCond2).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsDemoCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
+ fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
+ break;
+ case 12:
+ startSeqOtis(kCharacterCond2, (char *)&getCharacterCurrentParams(kCharacterCond2)[0]);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoCond2_FinishSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterCond2).callParams[getCharacter(kCharacterCond2).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, &LogicManager::HAND_DemoCond2_FinishSeqOtis);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall] = 2;
+
+ params->clear();
+
+ fedEx(kCharacterCond2, kCharacterCond2, 12, 0);
+}
+
+void LogicManager::HAND_DemoCond2_FinishSeqOtis(HAND_PARAMS) {
+ if (msg->action == 3) {
+ getCharacter(kCharacterCond2).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsDemoCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
+ fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
+ }
+}
+
+void LogicManager::CONS_DemoCond2_SitDown(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterCond2).callParams[getCharacter(kCharacterCond2).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, &LogicManager::HAND_DemoCond2_SitDown);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall] = 3;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+
+ fedEx(kCharacterCond2, kCharacterCond2, 12, 0);
+}
+
+void LogicManager::HAND_DemoCond2_SitDown(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ if (getCharacterCurrentParams(kCharacterCond2)[0]) {
+ startSeqOtis(kCharacterCond2, "697H");
+ } else {
+ startSeqOtis(kCharacterCond2, "627A");
+ }
+
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
+ DemoCond2Call(&LogicManager::CONS_DemoCond2_FinishSeqOtis, 0, 0, 0, 0);
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
+ case 1:
+ startCycOtis(kCharacterCond2, "627B");
+
+ getCharacter(kCharacterCond2).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsDemoCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
+ fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoCond2_Birth(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterCond2).callParams[getCharacter(kCharacterCond2).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, &LogicManager::HAND_DemoCond2_Birth);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall] = 4;
+
+ params->clear();
+
+ fedEx(kCharacterCond2, kCharacterCond2, 12, 0);
+}
+
+void LogicManager::HAND_DemoCond2_Birth(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ getCharacter(kCharacterCond2).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterCond2).characterPosition.position = 1500;
+ getCharacter(kCharacterCond2).characterPosition.location = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
+ DemoCond2Call(&LogicManager::CONS_DemoCond2_SitDown, 0, 0, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 2) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
+ DemoCond2Call(&LogicManager::CONS_DemoCond2_SitDown, 0, 0, 0, 0);
+ }
+
+ break;
+ case 168253822:
+ if (whoOnScreen(kCharacterCond2) && !getCharacterCurrentParams(kCharacterCond2)[0]) {
+ getCharacterCurrentParams(kCharacterCond2)[0] = 1;
+ playDialog(kCharacterCond2, "JAC1120", -1, 0);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
+ DemoCond2Call(&LogicManager::CONS_DemoCond2_DoSeqOtis, "697D", 0, 0, 0);
+ }
+
+ break;
+ case 225932896:
+ send(kCharacterCond2, kCharacterFrancois, 205346192, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoCond2_StartPart2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterCond2).callParams[getCharacter(kCharacterCond2).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, &LogicManager::HAND_DemoCond2_StartPart2);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall] = 5;
+
+ params->clear();
+
+ fedEx(kCharacterCond2, kCharacterCond2, 12, 0);
+}
+
+void LogicManager::HAND_DemoCond2_StartPart2(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoCond2_StartPart3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterCond2).callParams[getCharacter(kCharacterCond2).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, &LogicManager::HAND_DemoCond2_StartPart3);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall] = 6;
+
+ params->clear();
+
+ fedEx(kCharacterCond2, kCharacterCond2, 12, 0);
+}
+
+void LogicManager::HAND_DemoCond2_StartPart3(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoCond2_StartPart4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterCond2).callParams[getCharacter(kCharacterCond2).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, &LogicManager::HAND_DemoCond2_StartPart4);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall] = 7;
+
+ params->clear();
+
+ fedEx(kCharacterCond2, kCharacterCond2, 12, 0);
+}
+
+void LogicManager::HAND_DemoCond2_StartPart4(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoCond2_StartPart5(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterCond2).callParams[getCharacter(kCharacterCond2).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, &LogicManager::HAND_DemoCond2_StartPart5);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall] = 8;
+
+ params->clear();
+
+ fedEx(kCharacterCond2, kCharacterCond2, 12, 0);
+}
+
+void LogicManager::HAND_DemoCond2_StartPart5(HAND_PARAMS) {
+ // No-op
+}
+
+void (LogicManager::*LogicManager::_functionsDemoCond2[])(HAND_PARAMS) = {
+ nullptr,
+ &LogicManager::HAND_DemoCond2_DoSeqOtis,
+ &LogicManager::HAND_DemoCond2_FinishSeqOtis,
+ &LogicManager::HAND_DemoCond2_SitDown,
+ &LogicManager::HAND_DemoCond2_Birth,
+ &LogicManager::HAND_DemoCond2_StartPart2,
+ &LogicManager::HAND_DemoCond2_StartPart3,
+ &LogicManager::HAND_DemoCond2_StartPart4,
+ &LogicManager::HAND_DemoCond2_StartPart5
+};
+
+} // End of namespace LastExpress
diff --git a/engines/lastexpress/characters/demo/demo_francois.cpp b/engines/lastexpress/characters/demo/demo_francois.cpp
new file mode 100644
index 00000000000..16639e99f08
--- /dev/null
+++ b/engines/lastexpress/characters/demo/demo_francois.cpp
@@ -0,0 +1,358 @@
+/* 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_DemoFrancois(int chapter) {
+ switch (chapter) {
+ case 0:
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterFrancois,
+ _functionsDemoFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]
+ );
+
+ break;
+ case 1:
+ CONS_DemoFrancois_Birth(0, 0, 0, 0);
+ break;
+ case 2:
+ CONS_DemoFrancois_StartPart2(0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_DemoFrancois_StartPart3(0, 0, 0, 0);
+ break;
+ case 4:
+ CONS_DemoFrancois_StartPart4(0, 0, 0, 0);
+ break;
+ case 5:
+ CONS_DemoFrancois_StartPart5(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::DemoFrancoisCall(CALL_PARAMS) {
+ getCharacter(kCharacterFrancois).currentCall++;
+
+ (this->*functionPointer)(param1, param2, param3, param4);
+}
+
+void LogicManager::CONS_DemoFrancois_DoSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterFrancois).callParams[getCharacter(kCharacterFrancois).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, &LogicManager::HAND_DemoFrancois_DoSeqOtis);
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall] = 1;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ fedEx(kCharacterFrancois, kCharacterFrancois, 12, 0);
+}
+
+void LogicManager::HAND_DemoFrancois_DoSeqOtis(HAND_PARAMS) {
+ if (msg->action == 3) {
+ getCharacter(kCharacterFrancois).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsDemoFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
+ fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
+ } else if (msg->action == 12) {
+ startSeqOtis(kCharacterFrancois, (char *)&getCharacterCurrentParams(kCharacterFrancois)[0]);
+ }
+}
+
+void LogicManager::CONS_DemoFrancois_SaveGame(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterFrancois).callParams[getCharacter(kCharacterFrancois).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, &LogicManager::HAND_DemoFrancois_SaveGame);
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall] = 2;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+ params->parameters[1] = param2.intParam;
+
+ fedEx(kCharacterFrancois, kCharacterFrancois, 12, 0);
+}
+
+void LogicManager::HAND_DemoFrancois_SaveGame(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ getCharacter(kCharacterFrancois).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsDemoFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
+ fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
+ break;
+ case 12:
+ save(
+ kCharacterFrancois,
+ getCharacterCurrentParams(kCharacterFrancois)[0],
+ getCharacterCurrentParams(kCharacterFrancois)[1]
+ );
+
+ getCharacter(kCharacterFrancois).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsDemoFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
+ fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoFrancois_Birth(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterFrancois).callParams[getCharacter(kCharacterFrancois).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, &LogicManager::HAND_DemoFrancois_Birth);
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall] = 3;
+
+ params->clear();
+
+ fedEx(kCharacterFrancois, kCharacterFrancois, 12, 0);
+}
+
+void LogicManager::HAND_DemoFrancois_Birth(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (whoRunningDialog(kCharacterFrancois)) {
+ if (whoOnScreen(kCharacterFrancois) && whoFacingCath(kCharacterFrancois)) {
+ if (nearChar(kCharacterFrancois, kCharacterCath, 2500) && !_gameEvents[kEventFrancoisWhistleD])
+ getCharacter(kCharacterFrancois).inventoryItem = 0x80;
+ } else {
+ getCharacter(kCharacterFrancois).inventoryItem = 0;
+ }
+
+ if (getCharacterCurrentParams(kCharacterFrancois)[4]) {
+ getCharacterCurrentParams(kCharacterFrancois)[4]--;
+ } else if (walk(kCharacterFrancois, *getCharacterCurrentParams(kCharacterFrancois), getCharacterCurrentParams(kCharacterFrancois)[1])) {
+ if (getCharacterCurrentParams(kCharacterFrancois)[1] == 540) {
+ getCharacterCurrentParams(kCharacterFrancois)[0] = 4;
+ getCharacterCurrentParams(kCharacterFrancois)[1] = 9460;
+ getCharacterCurrentParams(kCharacterFrancois)[4] = 120;
+ } else {
+ getCharacterCurrentParams(kCharacterFrancois)[0] = 3;
+ getCharacterCurrentParams(kCharacterFrancois)[1] = 540;
+ getCharacterCurrentParams(kCharacterFrancois)[4] = 15;
+ getCharacterCurrentParams(kCharacterFrancois)[3] = 0;
+ send(kCharacterFrancois, kCharacterCond2, 225932896, 0);
+ }
+ }
+
+ if (nearX(kCharacterFrancois, 2000, 500) &&
+ getCharacter(kCharacterFrancois).direction == 2 &&
+ checkLoc(kCharacterFrancois, 4) && getCharacterCurrentParams(kCharacterFrancois)[3]) {
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 1;
+ DemoFrancoisCall(&LogicManager::CONS_DemoFrancois_DoSeqOtis, "605A", 0, 0, 0);
+ }
+
+ return;
+ }
+
+ if (getCharacterCurrentParams(kCharacterFrancois)[5] || (getCharacterCurrentParams(kCharacterFrancois)[5] = getCharacterCurrentParams(kCharacterFrancois)[2] + _currentGameSessionTicks,
+ getCharacterCurrentParams(kCharacterFrancois)[5] != 0)) {
+ if (_currentGameSessionTicks <= getCharacterCurrentParams(kCharacterFrancois)[5]) {
+ if (whoOnScreen(kCharacterFrancois) && whoFacingCath(kCharacterFrancois)) {
+ if (nearChar(kCharacterFrancois, kCharacterCath, 2500) && !_gameEvents[kEventFrancoisWhistleD])
+ getCharacter(kCharacterFrancois).inventoryItem = 0x80;
+ } else {
+ getCharacter(kCharacterFrancois).inventoryItem = 0;
+ }
+
+ if (getCharacterCurrentParams(kCharacterFrancois)[4]) {
+ getCharacterCurrentParams(kCharacterFrancois)[4]--;
+ } else if (walk(kCharacterFrancois, *getCharacterCurrentParams(kCharacterFrancois), getCharacterCurrentParams(kCharacterFrancois)[1])) {
+ if (getCharacterCurrentParams(kCharacterFrancois)[1] == 540) {
+ getCharacterCurrentParams(kCharacterFrancois)[0] = 4;
+ getCharacterCurrentParams(kCharacterFrancois)[1] = 9460;
+ getCharacterCurrentParams(kCharacterFrancois)[4] = 120;
+ } else {
+ getCharacterCurrentParams(kCharacterFrancois)[0] = 3;
+ getCharacterCurrentParams(kCharacterFrancois)[1] = 540;
+ getCharacterCurrentParams(kCharacterFrancois)[4] = 15;
+ getCharacterCurrentParams(kCharacterFrancois)[3] = 0;
+ send(kCharacterFrancois, kCharacterCond2, 225932896, 0);
+ }
+ }
+
+ if (nearX(kCharacterFrancois, 2000, 500) &&
+ getCharacter(kCharacterFrancois).direction == 2 &&
+ checkLoc(kCharacterFrancois, 4) && getCharacterCurrentParams(kCharacterFrancois)[3]) {
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 1;
+ DemoFrancoisCall(&LogicManager::CONS_DemoFrancois_DoSeqOtis, "605A", 0, 0, 0);
+ }
+
+ return;
+ }
+
+ getCharacterCurrentParams(kCharacterFrancois)[5] = 0x7FFFFFFF;
+ }
+
+ if (rnd(2) == 0) {
+ playDialog(kCharacterFrancois, "Fra1002G", -1, 0);
+ } else {
+ playDialog(kCharacterFrancois, "Fra1002A", -1, 0);
+ }
+
+ getCharacterCurrentParams(kCharacterFrancois)[5] = 0;
+ getCharacterCurrentParams(kCharacterFrancois)[2] = 15 * rnd(7);
+
+ if (whoOnScreen(kCharacterFrancois) && whoFacingCath(kCharacterFrancois)) {
+ if (nearChar(kCharacterFrancois, kCharacterCath, 2500) && !_gameEvents[kEventFrancoisWhistleD])
+ getCharacter(kCharacterFrancois).inventoryItem = 0x80;
+ } else {
+ getCharacter(kCharacterFrancois).inventoryItem = 0;
+ }
+
+ if (getCharacterCurrentParams(kCharacterFrancois)[4]) {
+ getCharacterCurrentParams(kCharacterFrancois)[4]--;
+ } else if (walk(kCharacterFrancois, *getCharacterCurrentParams(kCharacterFrancois), getCharacterCurrentParams(kCharacterFrancois)[1])) {
+ if (getCharacterCurrentParams(kCharacterFrancois)[1] == 540) {
+ getCharacterCurrentParams(kCharacterFrancois)[0] = 4;
+ getCharacterCurrentParams(kCharacterFrancois)[1] = 9460;
+ getCharacterCurrentParams(kCharacterFrancois)[4] = 120;
+ } else {
+ getCharacterCurrentParams(kCharacterFrancois)[0] = 3;
+ getCharacterCurrentParams(kCharacterFrancois)[1] = 540;
+ getCharacterCurrentParams(kCharacterFrancois)[4] = 15;
+ getCharacterCurrentParams(kCharacterFrancois)[3] = 0;
+ send(kCharacterFrancois, kCharacterCond2, 225932896, 0);
+ }
+ }
+
+ if (nearX(kCharacterFrancois, 2000, 500) &&
+ getCharacter(kCharacterFrancois).direction == 2 &&
+ checkLoc(kCharacterFrancois, 4) && getCharacterCurrentParams(kCharacterFrancois)[3]) {
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 1;
+ DemoFrancoisCall(&LogicManager::CONS_DemoFrancois_DoSeqOtis, "605A", 0, 0, 0);
+ }
+
+ break;
+ case 1:
+ getCharacter(kCharacterFrancois).inventoryItem = 0;
+
+ if (whoRunningDialog(kCharacterFrancois))
+ fadeDialog(kCharacterFrancois);
+
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 2;
+ DemoFrancoisCall(&LogicManager::CONS_DemoFrancois_SaveGame, 2, kEventFrancoisWhistle, 0, 0);
+ break;
+ case 12:
+ getCharacter(kCharacterFrancois).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterFrancois).characterPosition.position = 2088;
+ getCharacter(kCharacterFrancois).characterPosition.location = 0;
+ getCharacter(kCharacterFrancois).clothes = 1;
+ getCharacter(kCharacterFrancois).walkStepSize = 100;
+ getCharacter(kCharacterFrancois).inventoryItem = 0;
+ getCharacterCurrentParams(kCharacterFrancois)[0] = kCarRedSleeping;
+ getCharacterCurrentParams(kCharacterFrancois)[1] = 9460;
+ walk(kCharacterFrancois, kCarRedSleeping, 9460);
+ getCharacterCurrentParams(kCharacterFrancois)[2] = 15 * rnd(7);
+ break;
+ case 18:
+ if (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] == 1) {
+ send(kCharacterFrancois, kCharacterCond2, 168253822, 0);
+ getCharacterCurrentParams(kCharacterFrancois)[0] = kCarRedSleeping;
+ getCharacterCurrentParams(kCharacterFrancois)[1] = 9460;
+ getCharacter(kCharacterFrancois).characterPosition.position = 2088;
+ walk(kCharacterFrancois, getCharacterCurrentParams(kCharacterFrancois)[0], getCharacterCurrentParams(kCharacterFrancois)[1]);
+ } else if (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] == 2) {
+ playNIS(kEventFrancoisWhistleD);
+ if (getCharacter(kCharacterFrancois).direction == 1) {
+ bumpCathFx(kCarRedSleeping, getCharacter(kCharacterFrancois).characterPosition.position - 750);
+ } else {
+ bumpCathRx(kCarRedSleeping, getCharacter(kCharacterFrancois).characterPosition.position + 750);
+ }
+ }
+
+ break;
+ case 205346192:
+ getCharacterCurrentParams(kCharacterFrancois)[3] = 1;
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoFrancois_StartPart2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterFrancois).callParams[getCharacter(kCharacterFrancois).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, &LogicManager::HAND_DemoFrancois_StartPart2);
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall] = 4;
+
+ params->clear();
+
+ fedEx(kCharacterFrancois, kCharacterFrancois, 12, 0);
+}
+
+void LogicManager::HAND_DemoFrancois_StartPart2(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoFrancois_StartPart3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterFrancois).callParams[getCharacter(kCharacterFrancois).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, &LogicManager::HAND_DemoFrancois_StartPart3);
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall] = 5;
+
+ params->clear();
+
+ fedEx(kCharacterFrancois, kCharacterFrancois, 12, 0);
+}
+
+void LogicManager::HAND_DemoFrancois_StartPart3(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoFrancois_StartPart4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterFrancois).callParams[getCharacter(kCharacterFrancois).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, &LogicManager::HAND_DemoFrancois_StartPart4);
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall] = 6;
+
+ params->clear();
+
+ fedEx(kCharacterFrancois, kCharacterFrancois, 12, 0);
+}
+
+void LogicManager::HAND_DemoFrancois_StartPart4(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoFrancois_StartPart5(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterFrancois).callParams[getCharacter(kCharacterFrancois).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, &LogicManager::HAND_DemoFrancois_StartPart5);
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall] = 7;
+
+ params->clear();
+
+ fedEx(kCharacterFrancois, kCharacterFrancois, 12, 0);
+}
+
+void LogicManager::HAND_DemoFrancois_StartPart5(HAND_PARAMS) {
+ // No-op
+}
+
+void (LogicManager::*LogicManager::_functionsDemoFrancois[])(HAND_PARAMS) = {
+ nullptr,
+ &LogicManager::HAND_DemoFrancois_DoSeqOtis,
+ &LogicManager::HAND_DemoFrancois_SaveGame,
+ &LogicManager::HAND_DemoFrancois_Birth,
+ &LogicManager::HAND_DemoFrancois_StartPart2,
+ &LogicManager::HAND_DemoFrancois_StartPart3,
+ &LogicManager::HAND_DemoFrancois_StartPart4,
+ &LogicManager::HAND_DemoFrancois_StartPart5
+};
+
+} // End of namespace LastExpress
diff --git a/engines/lastexpress/characters/demo/demo_ivo.cpp b/engines/lastexpress/characters/demo/demo_ivo.cpp
new file mode 100644
index 00000000000..35071fd2dab
--- /dev/null
+++ b/engines/lastexpress/characters/demo/demo_ivo.cpp
@@ -0,0 +1,278 @@
+/* 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_DemoIvo(int chapter) {
+ switch (chapter) {
+ case 0:
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterIvo,
+ _functionsDemoIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]
+ );
+
+ break;
+ case 1:
+ CONS_DemoIvo_Birth(0, 0, 0, 0);
+ break;
+ case 2:
+ CONS_DemoIvo_StartPart2(0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_DemoIvo_StartPart3(0, 0, 0, 0);
+ break;
+ case 4:
+ CONS_DemoIvo_StartPart4(0, 0, 0, 0);
+ break;
+ case 5:
+ CONS_DemoIvo_StartPart5(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::DemoIvoCall(CALL_PARAMS) {
+ getCharacter(kCharacterIvo).currentCall++;
+
+ (this->*functionPointer)(param1, param2, param3, param4);
+}
+
+void LogicManager::CONS_DemoIvo_WaitRCClear(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterIvo).callParams[getCharacter(kCharacterIvo).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterIvo, &LogicManager::HAND_DemoIvo_WaitRCClear);
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall] = 1;
+
+ params->clear();
+
+ fedEx(kCharacterIvo, kCharacterIvo, 12, 0);
+}
+
+void LogicManager::HAND_DemoIvo_WaitRCClear(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ case 12:
+ if (rcClear()) {
+ getCharacter(kCharacterIvo).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsDemoIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
+ fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
+ }
+
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoIvo_DoSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterIvo).callParams[getCharacter(kCharacterIvo).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterIvo, &LogicManager::HAND_DemoIvo_DoSeqOtis);
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall] = 2;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ fedEx(kCharacterIvo, kCharacterIvo, 12, 0);
+}
+
+void LogicManager::HAND_DemoIvo_DoSeqOtis(HAND_PARAMS) {
+ switch (msg->action) {
+ case 3:
+ getCharacter(kCharacterIvo).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsDemoIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
+ fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
+ break;
+ case 12:
+ startSeqOtis(kCharacterIvo, (char *)&getCharacterCurrentParams(kCharacterIvo)[0]);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoIvo_FinishSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterIvo).callParams[getCharacter(kCharacterIvo).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterIvo, &LogicManager::HAND_DemoIvo_FinishSeqOtis);
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall] = 3;
+
+ params->clear();
+
+ fedEx(kCharacterIvo, kCharacterIvo, 12, 0);
+}
+
+void LogicManager::HAND_DemoIvo_FinishSeqOtis(HAND_PARAMS) {
+ switch (msg->action) {
+ case 3:
+ getCharacter(kCharacterIvo).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsDemoIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
+ fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoIvo_DoSplitOtis023A(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterIvo).callParams[getCharacter(kCharacterIvo).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterIvo, &LogicManager::HAND_DemoIvo_DoSplitOtis023A);
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall] = 4;
+
+ params->clear();
+
+ fedEx(kCharacterIvo, kCharacterIvo, 12, 0);
+}
+
+void LogicManager::HAND_DemoIvo_DoSplitOtis023A(HAND_PARAMS) {
+ switch (msg->action) {
+ case 3:
+ endGraphics(kCharacterTableD);
+ send(kCharacterIvo, kCharacterTableC, 136455232, 0);
+
+ getCharacter(kCharacterIvo).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsDemoIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
+ fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
+ break;
+ case 12:
+ startSeqOtis(kCharacterIvo, "023A1");
+ startSeqOtis(kCharacterTableD, "023A2");
+ startSeqOtis(kCharacterTableC, "023A3");
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoIvo_Birth(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterIvo).callParams[getCharacter(kCharacterIvo).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterIvo, &LogicManager::HAND_DemoIvo_Birth);
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall] = 5;
+
+ params->clear();
+
+ fedEx(kCharacterIvo, kCharacterIvo, 12, 0);
+}
+
+void LogicManager::HAND_DemoIvo_Birth(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ getCharacter(kCharacterIvo).characterPosition.position = 1539;
+ getCharacter(kCharacterIvo).characterPosition.location = 0;
+ getCharacter(kCharacterIvo).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 1;
+ DemoIvoCall(&LogicManager::CONS_DemoIvo_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 2;
+ DemoIvoCall(&LogicManager::CONS_DemoIvo_DoSeqOtis, "809US", 0, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 3;
+ DemoIvoCall(&LogicManager::CONS_DemoIvo_DoSplitOtis023A, 0, 0, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterIvo).characterPosition.location = 1;
+ startCycOtis(kCharacterIvo, "023B");
+ break;
+ default:
+ break;
+ }
+
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoIvo_StartPart2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterIvo).callParams[getCharacter(kCharacterIvo).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterIvo, &LogicManager::HAND_DemoIvo_StartPart2);
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall] = 6;
+
+ params->clear();
+
+ fedEx(kCharacterIvo, kCharacterIvo, 12, 0);
+}
+
+void LogicManager::HAND_DemoIvo_StartPart2(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoIvo_StartPart3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterIvo).callParams[getCharacter(kCharacterIvo).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterIvo, &LogicManager::HAND_DemoIvo_StartPart3);
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall] = 7;
+
+ params->clear();
+
+ fedEx(kCharacterIvo, kCharacterIvo, 12, 0);
+}
+
+void LogicManager::HAND_DemoIvo_StartPart3(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoIvo_StartPart4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterIvo).callParams[getCharacter(kCharacterIvo).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterIvo, &LogicManager::HAND_DemoIvo_StartPart4);
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall] = 8;
+
+ params->clear();
+
+ fedEx(kCharacterIvo, kCharacterIvo, 12, 0);
+}
+
+void LogicManager::HAND_DemoIvo_StartPart4(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoIvo_StartPart5(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterIvo).callParams[getCharacter(kCharacterIvo).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterIvo, &LogicManager::HAND_DemoIvo_StartPart5);
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall] = 9;
+
+ params->clear();
+
+ fedEx(kCharacterIvo, kCharacterIvo, 12, 0);
+}
+
+void LogicManager::HAND_DemoIvo_StartPart5(HAND_PARAMS) {
+ // No-op
+}
+
+void (LogicManager::*LogicManager::_functionsDemoIvo[])(HAND_PARAMS) = {
+ nullptr,
+ &LogicManager::HAND_DemoIvo_WaitRCClear,
+ &LogicManager::HAND_DemoIvo_DoSeqOtis,
+ &LogicManager::HAND_DemoIvo_FinishSeqOtis,
+ &LogicManager::HAND_DemoIvo_DoSplitOtis023A,
+ &LogicManager::HAND_DemoIvo_Birth,
+ &LogicManager::HAND_DemoIvo_StartPart2,
+ &LogicManager::HAND_DemoIvo_StartPart3,
+ &LogicManager::HAND_DemoIvo_StartPart4,
+ &LogicManager::HAND_DemoIvo_StartPart5
+};
+
+} // End of namespace LastExpress
diff --git a/engines/lastexpress/characters/demo/demo_madame.cpp b/engines/lastexpress/characters/demo/demo_madame.cpp
new file mode 100644
index 00000000000..43f27e8dd45
--- /dev/null
+++ b/engines/lastexpress/characters/demo/demo_madame.cpp
@@ -0,0 +1,252 @@
+/* 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_DemoMadame(int chapter) {
+ switch (chapter) {
+ case 0:
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterMadame,
+ _functionsDemoMadame[getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall]]
+ );
+
+ break;
+ case 1:
+ CONS_DemoMadame_Birth(0, 0, 0, 0);
+ break;
+ case 2:
+ CONS_DemoMadame_StartPart2(0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_DemoMadame_StartPart3(0, 0, 0, 0);
+ break;
+ case 4:
+ CONS_DemoMadame_StartPart4(0, 0, 0, 0);
+ break;
+ case 5:
+ CONS_DemoMadame_StartPart5(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::DemoMadameCall(CALL_PARAMS) {
+ getCharacter(kCharacterMadame).currentCall++;
+
+ (this->*functionPointer)(param1, param2, param3, param4);
+}
+
+void LogicManager::CONS_DemoMadame_DoDialog(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterMadame).callParams[getCharacter(kCharacterMadame).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterMadame, &LogicManager::HAND_DemoMadame_DoDialog);
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall] = 1;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ fedEx(kCharacterMadame, kCharacterMadame, 12, 0);
+}
+
+void LogicManager::HAND_DemoMadame_DoDialog(HAND_PARAMS) {
+ switch (msg->action) {
+ case 2:
+ getCharacter(kCharacterMadame).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMadame, _functionsDemoMadame[getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall]]);
+ fedEx(kCharacterMadame, kCharacterMadame, 18, 0);
+ break;
+ case 12:
+ playDialog(kCharacterMadame, (char *)&getCharacterCurrentParams(kCharacterMadame)[0], -1, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoMadame_Birth(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterMadame).callParams[getCharacter(kCharacterMadame).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterMadame, &LogicManager::HAND_DemoMadame_Birth);
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall] = 2;
+
+ params->clear();
+
+ fedEx(kCharacterMadame, kCharacterMadame, 12, 0);
+}
+
+void LogicManager::HAND_DemoMadame_Birth(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterMadame)[2]) {
+ if (getCharacterCurrentParams(kCharacterMadame)[3] ||
+ (getCharacterCurrentParams(kCharacterMadame)[3] = _currentGameSessionTicks + 75,
+ _currentGameSessionTicks != -75)) {
+
+ if (_currentGameSessionTicks <= getCharacterCurrentParams(kCharacterMadame)[3])
+ return;
+
+ getCharacterCurrentParams(kCharacterMadame)[3] = 0x7FFFFFFF;
+ }
+ getCharacterCurrentParams(kCharacterMadame)[2] = 0;
+ getCharacterCurrentParams(kCharacterMadame)[1] = 1;
+ setDoor(33, kCharacterMadame, 1, 0, 0);
+ getCharacterCurrentParams(kCharacterMadame)[3] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterMadame)[3] = 0;
+ }
+
+ break;
+ case 8:
+ case 9:
+ if (getCharacterCurrentParams(kCharacterMadame)[2]) {
+ setDoor(33, kCharacterMadame, 1, 0, 0);
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 5;
+ DemoMadameCall(&LogicManager::CONS_DemoMadame_DoDialog, getCathSorryDialog(), 0, 0, 0);
+ } else {
+ getCharacterCurrentParams(kCharacterMadame)[0]++;
+ setDoor(33, kCharacterMadame, 1, 0, 0);
+ if (msg->action == 9) {
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 1;
+ DemoMadameCall(&LogicManager::CONS_DemoMadame_DoDialog, "LIB013", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 2;
+ DemoMadameCall(&LogicManager::CONS_DemoMadame_DoDialog, "LIB012", 0, 0, 0);
+ }
+ }
+
+ break;
+ case 12:
+ getCharacter(kCharacterMadame).characterPosition.car = 4;
+ getCharacter(kCharacterMadame).characterPosition.location = 1;
+ getCharacter(kCharacterMadame).characterPosition.position = 7500;
+ setDoor(33, kCharacterMadame, 1, 10, 9);
+ break;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterMadame)[1] || getCharacterCurrentParams(kCharacterMadame)[2]) {
+ setDoor(33, kCharacterMadame, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterMadame)[1] = 0;
+ getCharacterCurrentParams(kCharacterMadame)[2] = 0;
+ getCharacterCurrentParams(kCharacterMadame)[0] = 0;
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8]) {
+ case 1:
+ case 2:
+ if (getCharacterCurrentParams(kCharacterMadame)[0] <= 1) {
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 4;
+ DemoMadameCall(&LogicManager::CONS_DemoMadame_DoDialog, "MME1038", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 3;
+ DemoMadameCall(&LogicManager::CONS_DemoMadame_DoDialog, "MME1038C", 0, 0, 0);
+ }
+
+ break;
+ case 3:
+ case 4:
+ setDoor(33, kCharacterMadame, 1, 14, 0);
+ getCharacterCurrentParams(kCharacterMadame)[2] = 1;
+ break;
+ case 5:
+ getCharacterCurrentParams(kCharacterMadame)[2] = 0;
+ getCharacterCurrentParams(kCharacterMadame)[1] = 1;
+ break;
+ default:
+ break;
+ }
+
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoMadame_StartPart2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterMadame).callParams[getCharacter(kCharacterMadame).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterMadame, &LogicManager::HAND_DemoMadame_StartPart2);
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall] = 3;
+
+ params->clear();
+
+ fedEx(kCharacterMadame, kCharacterMadame, 12, 0);
+}
+
+void LogicManager::HAND_DemoMadame_StartPart2(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoMadame_StartPart3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterMadame).callParams[getCharacter(kCharacterMadame).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterMadame, &LogicManager::HAND_DemoMadame_StartPart3);
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall] = 4;
+
+ params->clear();
+
+ fedEx(kCharacterMadame, kCharacterMadame, 12, 0);
+}
+
+void LogicManager::HAND_DemoMadame_StartPart3(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoMadame_StartPart4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterMadame).callParams[getCharacter(kCharacterMadame).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterMadame, &LogicManager::HAND_DemoMadame_StartPart4);
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall] = 5;
+
+ params->clear();
+
+ fedEx(kCharacterMadame, kCharacterMadame, 12, 0);
+}
+
+void LogicManager::HAND_DemoMadame_StartPart4(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoMadame_StartPart5(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterMadame).callParams[getCharacter(kCharacterMadame).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterMadame, &LogicManager::HAND_DemoMadame_StartPart5);
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall] = 6;
+
+ params->clear();
+
+ fedEx(kCharacterMadame, kCharacterMadame, 12, 0);
+}
+
+void LogicManager::HAND_DemoMadame_StartPart5(HAND_PARAMS) {
+ // No-op
+}
+
+void (LogicManager::*LogicManager::_functionsDemoMadame[])(HAND_PARAMS) = {
+ nullptr,
+ &LogicManager::HAND_DemoMadame_DoDialog,
+ &LogicManager::HAND_DemoMadame_Birth,
+ &LogicManager::HAND_DemoMadame_StartPart2,
+ &LogicManager::HAND_DemoMadame_StartPart3,
+ &LogicManager::HAND_DemoMadame_StartPart4,
+ &LogicManager::HAND_DemoMadame_StartPart5
+};
+
+} // End of namespace LastExpress
diff --git a/engines/lastexpress/characters/demo/demo_master.cpp b/engines/lastexpress/characters/demo/demo_master.cpp
new file mode 100644
index 00000000000..04b7edab460
--- /dev/null
+++ b/engines/lastexpress/characters/demo/demo_master.cpp
@@ -0,0 +1,319 @@
+/* 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_DemoMaster(int chapter) {
+ switch (chapter) {
+ case 0:
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterMaster,
+ _functionsDemoMaster[getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall]]
+ );
+
+ break;
+ case 1:
+ CONS_DemoMaster_Birth(0, 0, 0, 0);
+ break;
+ case 2:
+ CONS_DemoMaster_StartPart2(0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_DemoMaster_StartPart3(0, 0, 0, 0);
+ break;
+ case 4:
+ CONS_DemoMaster_StartPart4(0, 0, 0, 0);
+ break;
+ case 5:
+ CONS_DemoMaster_StartPart5(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::DemoMasterCall(CALL_PARAMS) {
+ getCharacter(kCharacterMaster).currentCall++;
+
+ (this->*functionPointer)(param1, param2, param3, param4);
+}
+
+void LogicManager::CONS_DemoMaster_SaveGame(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_DemoMaster_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_DemoMaster_SaveGame(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ getCharacter(kCharacterMaster).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterMaster,
+ _functionsDemoMaster[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,
+ _functionsDemoMaster[getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall]]
+ );
+
+ fedEx(kCharacterMaster, kCharacterMaster, 18, 0);
+ break;
+ default:
+ break;
+ }
+
+}
+
+void LogicManager::CONS_DemoMaster_Birth(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_DemoMaster_Birth);
+ getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 2;
+
+ params->clear();
+
+ fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
+}
+
+void LogicManager::HAND_DemoMaster_Birth(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ {
+ bool playSndFx = false;
+ bool doBumpCath = false;
+
+ if (_gameProgress[kProgressIsTrainRunning]) {
+ if (!getCharacterCurrentParams(kCharacterMaster)[3]) {
+ getCharacterCurrentParams(kCharacterMaster)[3] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[0];
+ if (!getCharacterCurrentParams(kCharacterMaster)[3])
+ playSndFx = true;
+ }
+
+ if (!playSndFx && _currentGameSessionTicks > getCharacterCurrentParams(kCharacterMaster)[3]) {
+ getCharacterCurrentParams(kCharacterMaster)[3] = 0x7FFFFFFF;
+ playSndFx = true;
+ }
+
+ if (playSndFx) {
+ if (!rnd(2)) {
+ playDialog(kCharacterCath, "ZFX1007B", rnd(15) + 2, 0);
+ } else {
+ playDialog(kCharacterCath, "ZFX1005", rnd(15) + 2, 0);
+ }
+
+ getCharacterCurrentParams(kCharacterMaster)[3] = 0;
+ getCharacterCurrentParams(kCharacterMaster)[0] = 900 * (rnd(5) + 5);
+ }
+ }
+
+ if (_gameTime > 2268000 && !getCharacterCurrentParams(kCharacterMaster)[4]) {
+ getCharacterCurrentParams(kCharacterMaster)[4] = 1;
+ getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 2;
+ DemoMasterCall(&LogicManager::CONS_DemoMaster_SaveGame, 2, kEventVergesAnnaDead, 0, 0);
+ break;
+ }
+
+ if (getCharacterCurrentParams(kCharacterMaster)[1]) {
+ if (!getCharacterCurrentParams(kCharacterMaster)[5]) {
+ getCharacterCurrentParams(kCharacterMaster)[5] = _gameTime + 900;
+ if (_gameTime == -900)
+ doBumpCath = true;
+ }
+
+ if (!doBumpCath && _gameTime > getCharacterCurrentParams(kCharacterMaster)[5]) {
+ getCharacterCurrentParams(kCharacterMaster)[5] = 0x7FFFFFFF;
+ doBumpCath = true;
+ }
+
+ if (doBumpCath) {
+ bumpCath(kCarRestaurant, 58, 255);
+ }
+ }
+
+ getCharacterCurrentParams(kCharacterMaster)[5] = 0;
+
+ if (getCharacterCurrentParams(kCharacterMaster)[1]) {
+ if (!cathRunningDialog("ZFX1001"))
+ playDialog(kCharacterCath, "ZFX1001", -1, 0);
+ }
+
+ break;
+ }
+ case 12:
+ _engine->getSoundManager()->startAmbient();
+ getCharacterCurrentParams(kCharacterMaster)[0] = 900 * (rnd(5) + 5);
+ setDoor(34, kCharacterCath, 2, 255, 255);
+ getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 1;
+ DemoMasterCall(&LogicManager::CONS_DemoMaster_SaveGame, 1, 0, 0, 0);
+ break;
+ case 17:
+ getCharacter(kCharacterMaster).characterPosition.car = getCharacter(kCharacterCath).characterPosition.car;
+ if (checkCathDir(kCarRestaurant, 81)) {
+ getCharacterCurrentParams(kCharacterMaster)[1] = 1;
+ if (!dialogRunning("ZFX1001"))
+ playDialog(kCharacterCath, "ZFX1001", -1, 0);
+ } else {
+ getCharacterCurrentParams(kCharacterMaster)[1] = 0;
+ if (cathRunningDialog("ZFX1001"))
+ endDialog("ZFX1001");
+ }
+
+ if (getCharacter(kCharacterCath).characterPosition.car != getCharacterCurrentParams(kCharacterMaster)[2]) {
+ if (getCharacter(kCharacterCath).characterPosition.car == kCarRestaurant) {
+ startCycOtis(kCharacterMaster, "RCWND");
+ } else if (getCharacter(kCharacterCath).characterPosition.car == kCarRedSleeping) {
+ startCycOtis(kCharacterMaster, "S1WND");
+ } else {
+ endGraphics(kCharacterMaster);
+ }
+
+ getCharacterCurrentParams(kCharacterMaster)[2] = getCharacter(kCharacterCath).characterPosition.car;
+ }
+
+ break;
+ case 18:
+ {
+ bool doBumpCath = false;
+
+ if (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] == 2) {
+ playNIS(kEventVergesAnnaDead);
+ endGame(1, 2259000, 58, true);
+
+ if (getCharacterCurrentParams(kCharacterMaster)[1]) {
+ if (!getCharacterCurrentParams(kCharacterMaster)[5]) {
+ getCharacterCurrentParams(kCharacterMaster)[5] = _gameTime + 900;
+ if (_gameTime == -900)
+ doBumpCath = true;
+ }
+
+ if (!doBumpCath && _gameTime > getCharacterCurrentParams(kCharacterMaster)[5]) {
+ getCharacterCurrentParams(kCharacterMaster)[5] = 0x7FFFFFFF;
+ doBumpCath = true;
+ }
+
+ if (doBumpCath) {
+ bumpCath(kCarRestaurant, 58, 255);
+ }
+ }
+
+ getCharacterCurrentParams(kCharacterMaster)[5] = 0;
+
+ if (getCharacterCurrentParams(kCharacterMaster)[1]) {
+ if (!cathRunningDialog("ZFX1001"))
+ playDialog(kCharacterCath, "ZFX1001", -1, 0);
+ }
+ }
+
+ break;
+ }
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoMaster_StartPart2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_DemoMaster_StartPart2);
+ getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 3;
+
+ params->clear();
+
+ fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
+}
+
+void LogicManager::HAND_DemoMaster_StartPart2(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoMaster_StartPart3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_DemoMaster_StartPart3);
+ getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 4;
+
+ params->clear();
+
+ fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
+}
+
+void LogicManager::HAND_DemoMaster_StartPart3(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoMaster_StartPart4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_DemoMaster_StartPart4);
+ getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 5;
+
+ params->clear();
+
+ fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
+}
+
+void LogicManager::HAND_DemoMaster_StartPart4(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoMaster_StartPart5(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterMaster).callParams[getCharacter(kCharacterMaster).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterMaster, &LogicManager::HAND_DemoMaster_StartPart5);
+ getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall] = 6;
+
+ params->clear();
+
+ fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
+}
+
+void LogicManager::HAND_DemoMaster_StartPart5(HAND_PARAMS) {
+ // No-op
+}
+
+void (LogicManager::*LogicManager::_functionsDemoMaster[])(HAND_PARAMS) = {
+ nullptr,
+ &LogicManager::HAND_DemoMaster_SaveGame,
+ &LogicManager::HAND_DemoMaster_Birth,
+ &LogicManager::HAND_DemoMaster_StartPart2,
+ &LogicManager::HAND_DemoMaster_StartPart3,
+ &LogicManager::HAND_DemoMaster_StartPart4,
+ &LogicManager::HAND_DemoMaster_StartPart5
+};
+
+} // End of namespace LastExpress
diff --git a/engines/lastexpress/characters/demo/demo_monsieur.cpp b/engines/lastexpress/characters/demo/demo_monsieur.cpp
new file mode 100644
index 00000000000..c5cb818bc4f
--- /dev/null
+++ b/engines/lastexpress/characters/demo/demo_monsieur.cpp
@@ -0,0 +1,150 @@
+/* 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_DemoMonsieur(int chapter) {
+ switch (chapter) {
+ case 0:
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterMonsieur,
+ _functionsDemoMonsieur[getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall]]
+ );
+
+ break;
+ case 1:
+ CONS_DemoMonsieur_Birth(0, 0, 0, 0);
+ break;
+ case 2:
+ CONS_DemoMonsieur_StartPart2(0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_DemoMonsieur_StartPart3(0, 0, 0, 0);
+ break;
+ case 4:
+ CONS_DemoMonsieur_StartPart4(0, 0, 0, 0);
+ break;
+ case 5:
+ CONS_DemoMonsieur_StartPart5(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::DemoMonsieurCall(CALL_PARAMS) {
+ getCharacter(kCharacterMonsieur).currentCall++;
+
+ (this->*functionPointer)(param1, param2, param3, param4);
+}
+
+void LogicManager::CONS_DemoMonsieur_Birth(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterMonsieur).callParams[getCharacter(kCharacterMonsieur).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, &LogicManager::HAND_DemoMonsieur_Birth);
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall] = 1;
+
+ params->clear();
+
+ fedEx(kCharacterMonsieur, kCharacterMonsieur, 12, 0);
+}
+
+void LogicManager::HAND_DemoMonsieur_Birth(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ getCharacter(kCharacterMonsieur).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterMonsieur).characterPosition.position = 8200;
+ getCharacter(kCharacterMonsieur).characterPosition.location = 1;
+ setDoor(32, kCharacterCath, 2, 255, 255);
+ startCycOtis(kCharacterMonsieur, "510");
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoMonsieur_StartPart2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterMonsieur).callParams[getCharacter(kCharacterMonsieur).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, &LogicManager::HAND_DemoMonsieur_StartPart2);
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall] = 2;
+
+ params->clear();
+
+ fedEx(kCharacterMonsieur, kCharacterMonsieur, 12, 0);
+}
+
+void LogicManager::HAND_DemoMonsieur_StartPart2(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoMonsieur_StartPart3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterMonsieur).callParams[getCharacter(kCharacterMonsieur).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, &LogicManager::HAND_DemoMonsieur_StartPart3);
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall] = 3;
+
+ params->clear();
+
+ fedEx(kCharacterMonsieur, kCharacterMonsieur, 12, 0);
+}
+
+void LogicManager::HAND_DemoMonsieur_StartPart3(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoMonsieur_StartPart4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterMonsieur).callParams[getCharacter(kCharacterMonsieur).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, &LogicManager::HAND_DemoMonsieur_StartPart4);
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall] = 4;
+
+ params->clear();
+
+ fedEx(kCharacterMonsieur, kCharacterMonsieur, 12, 0);
+}
+
+void LogicManager::HAND_DemoMonsieur_StartPart4(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoMonsieur_StartPart5(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterMonsieur).callParams[getCharacter(kCharacterMonsieur).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, &LogicManager::HAND_DemoMonsieur_StartPart5);
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall] = 5;
+
+ params->clear();
+
+ fedEx(kCharacterMonsieur, kCharacterMonsieur, 12, 0);
+}
+
+void LogicManager::HAND_DemoMonsieur_StartPart5(HAND_PARAMS) {
+ // No-op
+}
+
+void (LogicManager::*LogicManager::_functionsDemoMonsieur[])(HAND_PARAMS) = {
+ nullptr,
+ &LogicManager::HAND_DemoMonsieur_Birth,
+ &LogicManager::HAND_DemoMonsieur_StartPart2,
+ &LogicManager::HAND_DemoMonsieur_StartPart3,
+ &LogicManager::HAND_DemoMonsieur_StartPart4,
+ &LogicManager::HAND_DemoMonsieur_StartPart5
+};
+
+} // End of namespace LastExpress
diff --git a/engines/lastexpress/characters/demo/demo_rebecca.cpp b/engines/lastexpress/characters/demo/demo_rebecca.cpp
new file mode 100644
index 00000000000..a1f631ebcba
--- /dev/null
+++ b/engines/lastexpress/characters/demo/demo_rebecca.cpp
@@ -0,0 +1,255 @@
+/* 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_DemoRebecca(int chapter) {
+ switch (chapter) {
+ case 0:
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterRebecca,
+ _functionsDemoRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]
+ );
+
+ break;
+ case 1:
+ CONS_DemoRebecca_Birth(0, 0, 0, 0);
+ break;
+ case 2:
+ CONS_DemoRebecca_StartPart2(0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_DemoRebecca_StartPart3(0, 0, 0, 0);
+ break;
+ case 4:
+ CONS_DemoRebecca_StartPart4(0, 0, 0, 0);
+ break;
+ case 5:
+ CONS_DemoRebecca_StartPart5(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::DemoRebeccaCall(CALL_PARAMS) {
+ getCharacter(kCharacterRebecca).currentCall++;
+
+ (this->*functionPointer)(param1, param2, param3, param4);
+}
+
+void LogicManager::CONS_DemoRebecca_DoDialog(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterRebecca).callParams[getCharacter(kCharacterRebecca).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, &LogicManager::HAND_DemoRebecca_DoDialog);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall] = 1;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ fedEx(kCharacterRebecca, kCharacterRebecca, 12, 0);
+}
+
+void LogicManager::HAND_DemoRebecca_DoDialog(HAND_PARAMS) {
+ switch (msg->action) {
+ case 2:
+ getCharacter(kCharacterRebecca).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsDemoRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
+ fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
+ break;
+ case 12:
+ playDialog(kCharacterRebecca, (char *)&getCharacterCurrentParams(kCharacterRebecca)[0], -1, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoRebecca_Birth(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterRebecca).callParams[getCharacter(kCharacterRebecca).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, &LogicManager::HAND_DemoRebecca_Birth);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall] = 2;
+
+ params->clear();
+
+ fedEx(kCharacterRebecca, kCharacterRebecca, 12, 0);
+}
+
+void LogicManager::HAND_DemoRebecca_Birth(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterRebecca)[0] || getCharacterCurrentParams(kCharacterRebecca)[1] >= 3 || !inDiningRoom(kCharacterCath)) {
+ if (_gameTime > 2254500 && !getCharacterCurrentParams(kCharacterRebecca)[3]) {
+ getCharacterCurrentParams(kCharacterRebecca)[3] = 1;
+ send(kCharacterRebecca, kCharacterWaiter1, 223712416, 0);
+ getCharacterCurrentParams(kCharacterRebecca)[0] = 1;
+ }
+
+ break;
+ }
+
+ if (getCharacterCurrentParams(kCharacterRebecca)[2] || (getCharacterCurrentParams(kCharacterRebecca)[2] = _gameTime + 150, _gameTime != -150)) {
+ if (_gameTime <= getCharacterCurrentParams(kCharacterRebecca)[2]) {
+ if (_gameTime > 2254500 && !getCharacterCurrentParams(kCharacterRebecca)[3]) {
+ getCharacterCurrentParams(kCharacterRebecca)[3] = 1;
+ send(kCharacterRebecca, kCharacterWaiter1, 223712416, 0);
+ getCharacterCurrentParams(kCharacterRebecca)[0] = 1;
+ }
+
+ break;
+ }
+
+ getCharacterCurrentParams(kCharacterRebecca)[2] = 0x7FFFFFFF;
+ }
+
+ if (getCharacterCurrentParams(kCharacterRebecca)[1] == 1) {
+ getCharacterCurrentParams(kCharacterRebecca)[1]++;
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
+ DemoRebeccaCall(&LogicManager::CONS_DemoRebecca_DoDialog, "REB1013", 0, 0, 0);
+ } else if (getCharacterCurrentParams(kCharacterRebecca)[1] == 2) {
+ getCharacterCurrentParams(kCharacterRebecca)[1]++;
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
+ DemoRebeccaCall(&LogicManager::CONS_DemoRebecca_DoDialog, "REB1199A", 0, 0, 0);
+ } else if (getCharacterCurrentParams(kCharacterRebecca)[1] == 3) {
+ getCharacterCurrentParams(kCharacterRebecca)[1]++;
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
+ DemoRebeccaCall(&LogicManager::CONS_DemoRebecca_DoDialog, "REB1199C", 0, 0, 0);
+ } else {
+ getCharacterCurrentParams(kCharacterRebecca)[1]++;
+ getCharacterCurrentParams(kCharacterRebecca)[2] = 0;
+ if (_gameTime > 2254500 && !getCharacterCurrentParams(kCharacterRebecca)[3]) {
+ getCharacterCurrentParams(kCharacterRebecca)[3] = 1;
+ send(kCharacterRebecca, kCharacterWaiter1, 223712416, 0);
+ getCharacterCurrentParams(kCharacterRebecca)[0] = 1;
+ }
+ }
+
+ break;
+ case 12:
+ getCharacter(kCharacterRebecca).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterRebecca).characterPosition.location = 1;
+ getCharacter(kCharacterRebecca).characterPosition.position = 4690;
+ startCycOtis(kCharacterRebecca, "012D");
+ break;
+ case 18:
+ switch (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8]) {
+ case 1:
+ case 2:
+ case 3:
+ getCharacterCurrentParams(kCharacterRebecca)[2] = 0;
+ if (_gameTime > 2254500 && !getCharacterCurrentParams(kCharacterRebecca)[3]) {
+ getCharacterCurrentParams(kCharacterRebecca)[3] = 1;
+ send(kCharacterRebecca, kCharacterWaiter1, 223712416, 0);
+ getCharacterCurrentParams(kCharacterRebecca)[0] = 1;
+ }
+
+ break;
+ case 4:
+ send(kCharacterRebecca, kCharacterWaiter1, 136702400, 0);
+ startCycOtis(kCharacterRebecca, "012G");
+ getCharacterCurrentParams(kCharacterRebecca)[0] = 0;
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 123712592:
+ startCycOtis(kCharacterWaiter1, "BLANK");
+ startCycOtis(kCharacterRebecca, "012E");
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
+ DemoRebeccaCall(&LogicManager::CONS_DemoRebecca_DoDialog, "REB1200", 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoRebecca_StartPart2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterRebecca).callParams[getCharacter(kCharacterRebecca).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, &LogicManager::HAND_DemoRebecca_StartPart2);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall] = 3;
+
+ params->clear();
+
+ fedEx(kCharacterRebecca, kCharacterRebecca, 12, 0);
+}
+
+void LogicManager::HAND_DemoRebecca_StartPart2(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoRebecca_StartPart3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterRebecca).callParams[getCharacter(kCharacterRebecca).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, &LogicManager::HAND_DemoRebecca_StartPart3);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall] = 4;
+
+ params->clear();
+
+ fedEx(kCharacterRebecca, kCharacterRebecca, 12, 0);
+}
+
+void LogicManager::HAND_DemoRebecca_StartPart3(HAND_PARAMS) {
+ // No-op
+
+}
+
+void LogicManager::CONS_DemoRebecca_StartPart4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterRebecca).callParams[getCharacter(kCharacterRebecca).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, &LogicManager::HAND_DemoRebecca_StartPart4);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall] = 5;
+
+ params->clear();
+
+ fedEx(kCharacterRebecca, kCharacterRebecca, 12, 0);
+}
+
+void LogicManager::HAND_DemoRebecca_StartPart4(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoRebecca_StartPart5(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterRebecca).callParams[getCharacter(kCharacterRebecca).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, &LogicManager::HAND_DemoRebecca_StartPart5);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall] = 6;
+
+ params->clear();
+
+ fedEx(kCharacterRebecca, kCharacterRebecca, 12, 0);
+}
+
+void LogicManager::HAND_DemoRebecca_StartPart5(HAND_PARAMS) {
+ // No-op
+}
+
+void (LogicManager::*LogicManager::_functionsDemoRebecca[])(HAND_PARAMS) = {
+ nullptr,
+ &LogicManager::HAND_DemoRebecca_DoDialog,
+ &LogicManager::HAND_DemoRebecca_Birth,
+ &LogicManager::HAND_DemoRebecca_StartPart2,
+ &LogicManager::HAND_DemoRebecca_StartPart3,
+ &LogicManager::HAND_DemoRebecca_StartPart4,
+ &LogicManager::HAND_DemoRebecca_StartPart5
+};
+
+} // End of namespace LastExpress
diff --git a/engines/lastexpress/characters/demo/demo_tablea.cpp b/engines/lastexpress/characters/demo/demo_tablea.cpp
new file mode 100644
index 00000000000..8fd96a9ae02
--- /dev/null
+++ b/engines/lastexpress/characters/demo/demo_tablea.cpp
@@ -0,0 +1,154 @@
+/* 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_DemoTableA(int chapter) {
+ switch (chapter) {
+ case 0:
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterTableA,
+ _functionsDemoTableA[getCharacter(kCharacterTableA).callbacks[getCharacter(kCharacterTableA).currentCall]]
+ );
+
+ break;
+ case 1:
+ CONS_DemoTableA_Birth(0, 0, 0, 0);
+ break;
+ case 2:
+ CONS_DemoTableA_StartPart2(0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_DemoTableA_StartPart3(0, 0, 0, 0);
+ break;
+ case 4:
+ CONS_DemoTableA_StartPart4(0, 0, 0, 0);
+ break;
+ case 5:
+ CONS_DemoTableA_StartPart5(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoTableA_Birth(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableA).callParams[getCharacter(kCharacterTableA).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableA, &LogicManager::HAND_DemoTableA_Birth);
+ getCharacter(kCharacterTableA).callbacks[getCharacter(kCharacterTableA).currentCall] = 1;
+
+ params->clear();
+
+ fedEx(kCharacterTableA, kCharacterTableA, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableA_Birth(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ getCharacter(kCharacterTableA).characterPosition.position = 3970;
+ getCharacter(kCharacterTableA).characterPosition.location = 1;
+ getCharacter(kCharacterTableA).characterPosition.car = kCarRestaurant;
+ startCycOtis(kCharacterTableA, "001P");
+ break;
+ case 103798704:
+ if (msg->param.stringParam) {
+ startCycOtis(kCharacterTableA, msg->param.stringParam);
+ } else {
+ startCycOtis(kCharacterTableA, "001P");
+ }
+
+ break;
+ case 136455232:
+ startCycOtis(kCharacterTableA, "BLANK");
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoTableA_StartPart2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableA).callParams[getCharacter(kCharacterTableA).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableA, &LogicManager::HAND_DemoTableA_StartPart2);
+ getCharacter(kCharacterTableA).callbacks[getCharacter(kCharacterTableA).currentCall] = 2;
+
+ params->clear();
+
+ fedEx(kCharacterTableA, kCharacterTableA, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableA_StartPart2(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoTableA_StartPart3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableA).callParams[getCharacter(kCharacterTableA).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableA, &LogicManager::HAND_DemoTableA_StartPart3);
+ getCharacter(kCharacterTableA).callbacks[getCharacter(kCharacterTableA).currentCall] = 3;
+
+ params->clear();
+
+ fedEx(kCharacterTableA, kCharacterTableA, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableA_StartPart3(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoTableA_StartPart4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableA).callParams[getCharacter(kCharacterTableA).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableA, &LogicManager::HAND_DemoTableA_StartPart4);
+ getCharacter(kCharacterTableA).callbacks[getCharacter(kCharacterTableA).currentCall] = 4;
+
+ params->clear();
+
+ fedEx(kCharacterTableA, kCharacterTableA, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableA_StartPart4(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoTableA_StartPart5(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableA).callParams[getCharacter(kCharacterTableA).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableA, &LogicManager::HAND_DemoTableA_StartPart5);
+ getCharacter(kCharacterTableA).callbacks[getCharacter(kCharacterTableA).currentCall] = 5;
+
+ params->clear();
+
+ fedEx(kCharacterTableA, kCharacterTableA, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableA_StartPart5(HAND_PARAMS) {
+ // No-op
+}
+
+void (LogicManager::*LogicManager::_functionsDemoTableA[])(HAND_PARAMS) = {
+ nullptr,
+ &LogicManager::HAND_DemoTableA_Birth,
+ &LogicManager::HAND_DemoTableA_StartPart2,
+ &LogicManager::HAND_DemoTableA_StartPart3,
+ &LogicManager::HAND_DemoTableA_StartPart4,
+ &LogicManager::HAND_DemoTableA_StartPart5,
+};
+
+} // End of namespace LastExpress
diff --git a/engines/lastexpress/characters/demo/demo_tableb.cpp b/engines/lastexpress/characters/demo/demo_tableb.cpp
new file mode 100644
index 00000000000..df6e035fcd6
--- /dev/null
+++ b/engines/lastexpress/characters/demo/demo_tableb.cpp
@@ -0,0 +1,154 @@
+/* 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_DemoTableB(int chapter) {
+ switch (chapter) {
+ case 0:
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterTableB,
+ _functionsDemoTableB[getCharacter(kCharacterTableB).callbacks[getCharacter(kCharacterTableB).currentCall]]
+ );
+
+ break;
+ case 1:
+ CONS_DemoTableB_Birth(0, 0, 0, 0);
+ break;
+ case 2:
+ CONS_DemoTableB_StartPart2(0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_DemoTableB_StartPart3(0, 0, 0, 0);
+ break;
+ case 4:
+ CONS_DemoTableB_StartPart4(0, 0, 0, 0);
+ break;
+ case 5:
+ CONS_DemoTableB_StartPart5(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoTableB_Birth(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableB).callParams[getCharacter(kCharacterTableB).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableB, &LogicManager::HAND_DemoTableB_Birth);
+ getCharacter(kCharacterTableB).callbacks[getCharacter(kCharacterTableB).currentCall] = 1;
+
+ params->clear();
+
+ fedEx(kCharacterTableB, kCharacterTableB, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableB_Birth(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ getCharacter(kCharacterTableB).characterPosition.position = 3970;
+ getCharacter(kCharacterTableB).characterPosition.location = 1;
+ getCharacter(kCharacterTableB).characterPosition.car = kCarRestaurant;
+ startCycOtis(kCharacterTableB, "005J");
+ break;
+ case 103798704:
+ if (msg->param.stringParam) {
+ startCycOtis(kCharacterTableB, msg->param.stringParam);
+ } else {
+ startCycOtis(kCharacterTableB, "005J");
+ }
+
+ break;
+ case 136455232:
+ startCycOtis(kCharacterTableB, "BLANK");
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoTableB_StartPart2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableB).callParams[getCharacter(kCharacterTableB).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableB, &LogicManager::HAND_DemoTableB_StartPart2);
+ getCharacter(kCharacterTableB).callbacks[getCharacter(kCharacterTableB).currentCall] = 2;
+
+ params->clear();
+
+ fedEx(kCharacterTableB, kCharacterTableB, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableB_StartPart2(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoTableB_StartPart3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableB).callParams[getCharacter(kCharacterTableB).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableB, &LogicManager::HAND_DemoTableB_StartPart3);
+ getCharacter(kCharacterTableB).callbacks[getCharacter(kCharacterTableB).currentCall] = 3;
+
+ params->clear();
+
+ fedEx(kCharacterTableB, kCharacterTableB, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableB_StartPart3(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoTableB_StartPart4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableB).callParams[getCharacter(kCharacterTableB).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableB, &LogicManager::HAND_DemoTableB_StartPart4);
+ getCharacter(kCharacterTableB).callbacks[getCharacter(kCharacterTableB).currentCall] = 4;
+
+ params->clear();
+
+ fedEx(kCharacterTableB, kCharacterTableB, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableB_StartPart4(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoTableB_StartPart5(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableB).callParams[getCharacter(kCharacterTableB).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableB, &LogicManager::HAND_DemoTableB_StartPart5);
+ getCharacter(kCharacterTableB).callbacks[getCharacter(kCharacterTableB).currentCall] = 5;
+
+ params->clear();
+
+ fedEx(kCharacterTableB, kCharacterTableB, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableB_StartPart5(HAND_PARAMS) {
+ // No-op
+}
+
+void (LogicManager::*LogicManager::_functionsDemoTableB[])(HAND_PARAMS) = {
+ nullptr,
+ &LogicManager::HAND_DemoTableB_Birth,
+ &LogicManager::HAND_DemoTableB_StartPart2,
+ &LogicManager::HAND_DemoTableB_StartPart3,
+ &LogicManager::HAND_DemoTableB_StartPart4,
+ &LogicManager::HAND_DemoTableB_StartPart5,
+};
+
+} // End of namespace LastExpress
diff --git a/engines/lastexpress/characters/demo/demo_tablec.cpp b/engines/lastexpress/characters/demo/demo_tablec.cpp
new file mode 100644
index 00000000000..33e8e20dc8c
--- /dev/null
+++ b/engines/lastexpress/characters/demo/demo_tablec.cpp
@@ -0,0 +1,155 @@
+/* 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_DemoTableC(int chapter) {
+ switch (chapter) {
+ case 0:
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterTableC,
+ _functionsDemoTableC[getCharacter(kCharacterTableC).callbacks[getCharacter(kCharacterTableC).currentCall]]
+ );
+
+ break;
+ case 1:
+ CONS_DemoTableC_Birth(0, 0, 0, 0);
+ break;
+ case 2:
+ CONS_DemoTableC_StartPart2(0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_DemoTableC_StartPart3(0, 0, 0, 0);
+ break;
+ case 4:
+ CONS_DemoTableC_StartPart4(0, 0, 0, 0);
+ break;
+ case 5:
+ CONS_DemoTableC_StartPart5(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoTableC_Birth(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableC).callParams[getCharacter(kCharacterTableC).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableC, &LogicManager::HAND_DemoTableC_Birth);
+ getCharacter(kCharacterTableC).callbacks[getCharacter(kCharacterTableC).currentCall] = 1;
+
+ params->clear();
+
+ fedEx(kCharacterTableC, kCharacterTableC, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableC_Birth(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ _engine->getSoundManager()->playSoundFile("LOOP8A.SND", kSoundTypeWalla | kSoundFlagLooped | kVolume8, kCharacterTableC, 0);
+ getCharacter(kCharacterTableC).characterPosition.position = 4690;
+ getCharacter(kCharacterTableC).characterPosition.location = 1;
+ getCharacter(kCharacterTableC).characterPosition.car = kCarRestaurant;
+ startCycOtis(kCharacterTableC, "009G");
+ break;
+ case 103798704:
+ if (msg->param.stringParam) {
+ startCycOtis(kCharacterTableC, msg->param.stringParam);
+ } else {
+ startCycOtis(kCharacterTableC, "009G");
+ }
+
+ break;
+ case 136455232:
+ startCycOtis(kCharacterTableC, "BLANK");
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoTableC_StartPart2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableC).callParams[getCharacter(kCharacterTableC).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableC, &LogicManager::HAND_DemoTableC_StartPart2);
+ getCharacter(kCharacterTableC).callbacks[getCharacter(kCharacterTableC).currentCall] = 2;
+
+ params->clear();
+
+ fedEx(kCharacterTableC, kCharacterTableC, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableC_StartPart2(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoTableC_StartPart3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableC).callParams[getCharacter(kCharacterTableC).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableC, &LogicManager::HAND_DemoTableC_StartPart3);
+ getCharacter(kCharacterTableC).callbacks[getCharacter(kCharacterTableC).currentCall] = 3;
+
+ params->clear();
+
+ fedEx(kCharacterTableC, kCharacterTableC, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableC_StartPart3(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoTableC_StartPart4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableC).callParams[getCharacter(kCharacterTableC).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableC, &LogicManager::HAND_DemoTableC_StartPart4);
+ getCharacter(kCharacterTableC).callbacks[getCharacter(kCharacterTableC).currentCall] = 4;
+
+ params->clear();
+
+ fedEx(kCharacterTableC, kCharacterTableC, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableC_StartPart4(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoTableC_StartPart5(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableC).callParams[getCharacter(kCharacterTableC).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableC, &LogicManager::HAND_DemoTableC_StartPart5);
+ getCharacter(kCharacterTableC).callbacks[getCharacter(kCharacterTableC).currentCall] = 5;
+
+ params->clear();
+
+ fedEx(kCharacterTableC, kCharacterTableC, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableC_StartPart5(HAND_PARAMS) {
+ // No-op
+}
+
+void (LogicManager::*LogicManager::_functionsDemoTableC[])(HAND_PARAMS) = {
+ nullptr,
+ &LogicManager::HAND_DemoTableC_Birth,
+ &LogicManager::HAND_DemoTableC_StartPart2,
+ &LogicManager::HAND_DemoTableC_StartPart3,
+ &LogicManager::HAND_DemoTableC_StartPart4,
+ &LogicManager::HAND_DemoTableC_StartPart5,
+};
+
+} // End of namespace LastExpress
diff --git a/engines/lastexpress/characters/demo/demo_tabled.cpp b/engines/lastexpress/characters/demo/demo_tabled.cpp
new file mode 100644
index 00000000000..34501cd7c27
--- /dev/null
+++ b/engines/lastexpress/characters/demo/demo_tabled.cpp
@@ -0,0 +1,154 @@
+/* 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_DemoTableD(int chapter) {
+ switch (chapter) {
+ case 0:
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterTableD,
+ _functionsDemoTableD[getCharacter(kCharacterTableD).callbacks[getCharacter(kCharacterTableD).currentCall]]
+ );
+
+ break;
+ case 1:
+ CONS_DemoTableD_Birth(0, 0, 0, 0);
+ break;
+ case 2:
+ CONS_DemoTableD_StartPart2(0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_DemoTableD_StartPart3(0, 0, 0, 0);
+ break;
+ case 4:
+ CONS_DemoTableD_StartPart4(0, 0, 0, 0);
+ break;
+ case 5:
+ CONS_DemoTableD_StartPart5(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoTableD_Birth(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableD).callParams[getCharacter(kCharacterTableD).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableD, &LogicManager::HAND_DemoTableD_Birth);
+ getCharacter(kCharacterTableD).callbacks[getCharacter(kCharacterTableD).currentCall] = 1;
+
+ params->clear();
+
+ fedEx(kCharacterTableD, kCharacterTableD, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableD_Birth(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ getCharacter(kCharacterTableD).characterPosition.position = 4690;
+ getCharacter(kCharacterTableD).characterPosition.location = 1;
+ getCharacter(kCharacterTableD).characterPosition.car = kCarRestaurant;
+ startCycOtis(kCharacterTableD, "010M");
+ break;
+ case 103798704:
+ if (msg->param.stringParam) {
+ startCycOtis(kCharacterTableD, msg->param.stringParam);
+ } else {
+ startCycOtis(kCharacterTableD, "010M");
+ }
+
+ break;
+ case 136455232:
+ startCycOtis(kCharacterTableD, "BLANK");
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoTableD_StartPart2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableD).callParams[getCharacter(kCharacterTableD).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableD, &LogicManager::HAND_DemoTableD_StartPart2);
+ getCharacter(kCharacterTableD).callbacks[getCharacter(kCharacterTableD).currentCall] = 2;
+
+ params->clear();
+
+ fedEx(kCharacterTableD, kCharacterTableD, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableD_StartPart2(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoTableD_StartPart3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableD).callParams[getCharacter(kCharacterTableD).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableD, &LogicManager::HAND_DemoTableD_StartPart3);
+ getCharacter(kCharacterTableD).callbacks[getCharacter(kCharacterTableD).currentCall] = 3;
+
+ params->clear();
+
+ fedEx(kCharacterTableD, kCharacterTableD, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableD_StartPart3(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoTableD_StartPart4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableD).callParams[getCharacter(kCharacterTableD).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableD, &LogicManager::HAND_DemoTableD_StartPart4);
+ getCharacter(kCharacterTableD).callbacks[getCharacter(kCharacterTableD).currentCall] = 4;
+
+ params->clear();
+
+ fedEx(kCharacterTableD, kCharacterTableD, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableD_StartPart4(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoTableD_StartPart5(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableD).callParams[getCharacter(kCharacterTableD).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableD, &LogicManager::HAND_DemoTableD_StartPart5);
+ getCharacter(kCharacterTableD).callbacks[getCharacter(kCharacterTableD).currentCall] = 5;
+
+ params->clear();
+
+ fedEx(kCharacterTableD, kCharacterTableD, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableD_StartPart5(HAND_PARAMS) {
+ // No-op
+}
+
+void (LogicManager::*LogicManager::_functionsDemoTableD[])(HAND_PARAMS) = {
+ nullptr,
+ &LogicManager::HAND_DemoTableD_Birth,
+ &LogicManager::HAND_DemoTableD_StartPart2,
+ &LogicManager::HAND_DemoTableD_StartPart3,
+ &LogicManager::HAND_DemoTableD_StartPart4,
+ &LogicManager::HAND_DemoTableD_StartPart5,
+};
+
+} // End of namespace LastExpress
diff --git a/engines/lastexpress/characters/demo/demo_tablee.cpp b/engines/lastexpress/characters/demo/demo_tablee.cpp
new file mode 100644
index 00000000000..bf5c6086cbd
--- /dev/null
+++ b/engines/lastexpress/characters/demo/demo_tablee.cpp
@@ -0,0 +1,154 @@
+/* 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_DemoTableE(int chapter) {
+ switch (chapter) {
+ case 0:
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterTableE,
+ _functionsDemoTableE[getCharacter(kCharacterTableE).callbacks[getCharacter(kCharacterTableE).currentCall]]
+ );
+
+ break;
+ case 1:
+ CONS_DemoTableE_Birth(0, 0, 0, 0);
+ break;
+ case 2:
+ CONS_DemoTableE_StartPart2(0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_DemoTableE_StartPart3(0, 0, 0, 0);
+ break;
+ case 4:
+ CONS_DemoTableE_StartPart4(0, 0, 0, 0);
+ break;
+ case 5:
+ CONS_DemoTableE_StartPart5(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoTableE_Birth(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableE).callParams[getCharacter(kCharacterTableE).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableE, &LogicManager::HAND_DemoTableE_Birth);
+ getCharacter(kCharacterTableE).callbacks[getCharacter(kCharacterTableE).currentCall] = 1;
+
+ params->clear();
+
+ fedEx(kCharacterTableE, kCharacterTableE, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableE_Birth(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ getCharacter(kCharacterTableE).characterPosition.position = 5420;
+ getCharacter(kCharacterTableE).characterPosition.location = 1;
+ getCharacter(kCharacterTableE).characterPosition.car = kCarRestaurant;
+ startCycOtis(kCharacterTableE, "014F");
+ break;
+ case 103798704:
+ if (msg->param.stringParam) {
+ startCycOtis(kCharacterTableE, msg->param.stringParam);
+ } else {
+ startCycOtis(kCharacterTableE, "014F");
+ }
+
+ break;
+ case 136455232:
+ startCycOtis(kCharacterTableE, "BLANK");
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoTableE_StartPart2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableE).callParams[getCharacter(kCharacterTableE).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableE, &LogicManager::HAND_DemoTableE_StartPart2);
+ getCharacter(kCharacterTableE).callbacks[getCharacter(kCharacterTableE).currentCall] = 2;
+
+ params->clear();
+
+ fedEx(kCharacterTableE, kCharacterTableE, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableE_StartPart2(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoTableE_StartPart3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableE).callParams[getCharacter(kCharacterTableE).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableE, &LogicManager::HAND_DemoTableE_StartPart3);
+ getCharacter(kCharacterTableE).callbacks[getCharacter(kCharacterTableE).currentCall] = 3;
+
+ params->clear();
+
+ fedEx(kCharacterTableE, kCharacterTableE, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableE_StartPart3(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoTableE_StartPart4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableE).callParams[getCharacter(kCharacterTableE).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableE, &LogicManager::HAND_DemoTableE_StartPart4);
+ getCharacter(kCharacterTableE).callbacks[getCharacter(kCharacterTableE).currentCall] = 4;
+
+ params->clear();
+
+ fedEx(kCharacterTableE, kCharacterTableE, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableE_StartPart4(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoTableE_StartPart5(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableE).callParams[getCharacter(kCharacterTableE).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableE, &LogicManager::HAND_DemoTableE_StartPart5);
+ getCharacter(kCharacterTableE).callbacks[getCharacter(kCharacterTableE).currentCall] = 5;
+
+ params->clear();
+
+ fedEx(kCharacterTableE, kCharacterTableE, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableE_StartPart5(HAND_PARAMS) {
+ // No-op
+}
+
+void (LogicManager::*LogicManager::_functionsDemoTableE[])(HAND_PARAMS) = {
+ nullptr,
+ &LogicManager::HAND_DemoTableE_Birth,
+ &LogicManager::HAND_DemoTableE_StartPart2,
+ &LogicManager::HAND_DemoTableE_StartPart3,
+ &LogicManager::HAND_DemoTableE_StartPart4,
+ &LogicManager::HAND_DemoTableE_StartPart5,
+};
+
+} // End of namespace LastExpress
diff --git a/engines/lastexpress/characters/demo/demo_tablef.cpp b/engines/lastexpress/characters/demo/demo_tablef.cpp
new file mode 100644
index 00000000000..6652c8d5104
--- /dev/null
+++ b/engines/lastexpress/characters/demo/demo_tablef.cpp
@@ -0,0 +1,154 @@
+/* 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_DemoTableF(int chapter) {
+ switch (chapter) {
+ case 0:
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterTableF,
+ _functionsDemoTableF[getCharacter(kCharacterTableF).callbacks[getCharacter(kCharacterTableF).currentCall]]
+ );
+
+ break;
+ case 1:
+ CONS_DemoTableF_Birth(0, 0, 0, 0);
+ break;
+ case 2:
+ CONS_DemoTableF_StartPart2(0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_DemoTableF_StartPart3(0, 0, 0, 0);
+ break;
+ case 4:
+ CONS_DemoTableF_StartPart4(0, 0, 0, 0);
+ break;
+ case 5:
+ CONS_DemoTableF_StartPart5(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoTableF_Birth(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableF).callParams[getCharacter(kCharacterTableF).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableF, &LogicManager::HAND_DemoTableF_Birth);
+ getCharacter(kCharacterTableF).callbacks[getCharacter(kCharacterTableF).currentCall] = 1;
+
+ params->clear();
+
+ fedEx(kCharacterTableF, kCharacterTableF, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableF_Birth(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ getCharacter(kCharacterTableF).characterPosition.position = 5420;
+ getCharacter(kCharacterTableF).characterPosition.location = 1;
+ getCharacter(kCharacterTableF).characterPosition.car = kCarRestaurant;
+ startCycOtis(kCharacterTableF, "024D");
+ break;
+ case 103798704:
+ if (msg->param.stringParam) {
+ startCycOtis(kCharacterTableF, msg->param.stringParam);
+ } else {
+ startCycOtis(kCharacterTableF, "024D");
+ }
+
+ break;
+ case 136455232:
+ startCycOtis(kCharacterTableF, "BLANK");
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoTableF_StartPart2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableF).callParams[getCharacter(kCharacterTableF).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableF, &LogicManager::HAND_DemoTableF_StartPart2);
+ getCharacter(kCharacterTableF).callbacks[getCharacter(kCharacterTableF).currentCall] = 2;
+
+ params->clear();
+
+ fedEx(kCharacterTableF, kCharacterTableF, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableF_StartPart2(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoTableF_StartPart3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableF).callParams[getCharacter(kCharacterTableF).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableF, &LogicManager::HAND_DemoTableF_StartPart3);
+ getCharacter(kCharacterTableF).callbacks[getCharacter(kCharacterTableF).currentCall] = 3;
+
+ params->clear();
+
+ fedEx(kCharacterTableF, kCharacterTableF, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableF_StartPart3(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoTableF_StartPart4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableF).callParams[getCharacter(kCharacterTableF).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableF, &LogicManager::HAND_DemoTableF_StartPart4);
+ getCharacter(kCharacterTableF).callbacks[getCharacter(kCharacterTableF).currentCall] = 4;
+
+ params->clear();
+
+ fedEx(kCharacterTableF, kCharacterTableF, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableF_StartPart4(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoTableF_StartPart5(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTableF).callParams[getCharacter(kCharacterTableF).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTableF, &LogicManager::HAND_DemoTableF_StartPart5);
+ getCharacter(kCharacterTableF).callbacks[getCharacter(kCharacterTableF).currentCall] = 5;
+
+ params->clear();
+
+ fedEx(kCharacterTableF, kCharacterTableF, 12, 0);
+}
+
+void LogicManager::HAND_DemoTableF_StartPart5(HAND_PARAMS) {
+ // No-op
+}
+
+void (LogicManager::*LogicManager::_functionsDemoTableF[])(HAND_PARAMS) = {
+ nullptr,
+ &LogicManager::HAND_DemoTableF_Birth,
+ &LogicManager::HAND_DemoTableF_StartPart2,
+ &LogicManager::HAND_DemoTableF_StartPart3,
+ &LogicManager::HAND_DemoTableF_StartPart4,
+ &LogicManager::HAND_DemoTableF_StartPart5,
+};
+
+} // End of namespace LastExpress
diff --git a/engines/lastexpress/characters/demo/demo_tatiana.cpp b/engines/lastexpress/characters/demo/demo_tatiana.cpp
new file mode 100644
index 00000000000..2144167f3f0
--- /dev/null
+++ b/engines/lastexpress/characters/demo/demo_tatiana.cpp
@@ -0,0 +1,184 @@
+/* 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_DemoTatiana(int chapter) {
+ switch (chapter) {
+ case 0:
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterTatiana,
+ _functionsDemoTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]
+ );
+
+ break;
+ case 1:
+ CONS_DemoTatiana_Birth(0, 0, 0, 0);
+ break;
+ case 2:
+ CONS_DemoTatiana_StartPart2(0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_DemoTatiana_StartPart3(0, 0, 0, 0);
+ break;
+ case 4:
+ CONS_DemoTatiana_StartPart4(0, 0, 0, 0);
+ break;
+ case 5:
+ CONS_DemoTatiana_StartPart5(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoTatiana_Birth(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_DemoTatiana_Birth);
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 1;
+
+ params->clear();
+
+ fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
+}
+
+void LogicManager::HAND_DemoTatiana_Birth(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (!getCharacterCurrentParams(kCharacterTatiana)[1] && !getCharacterCurrentParams(kCharacterTatiana)[3]) {
+ getCharacterCurrentParams(kCharacterTatiana)[0] -= _gameTimeTicksDelta;
+ if (getCharacterCurrentParams(kCharacterTatiana)[0] < _gameTimeTicksDelta) {
+ startCycOtis(kCharacterTatiana, (char *)&getCharacterCurrentParams(kCharacterTatiana)[7]);
+ playDialog(kCharacterTatiana, (char *)&getCharacterCurrentParams(kCharacterTatiana)[4], -1, 0);
+ getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
+ }
+ }
+
+ break;
+ case 2:
+ getCharacterCurrentParams(kCharacterTatiana)[1] = 0;
+ getCharacterCurrentParams(kCharacterTatiana)[2]++;
+ switch (getCharacterCurrentParams(kCharacterTatiana)[2]) {
+ case 1:
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 900;
+ startCycOtis(kCharacterTatiana, "110A");
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[4], 12, "Tat3160B");
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[7], 12, "110A");
+ break;
+ case 2:
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 2700;
+ startCycOtis(kCharacterTatiana, "110B");
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[4], 12, "Tat3160D");
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[7], 12, "110D");
+ break;
+ case 3:
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 4500;
+ startCycOtis(kCharacterTatiana, "110B");
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[4], 12, "Tat3160E");
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[7], 12, "110D");
+ break;
+ default:
+ getCharacterCurrentParams(kCharacterTatiana)[3] = 1;
+ break;
+ }
+
+ break;
+ case 12:
+ getCharacter(kCharacterTatiana).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterTatiana).characterPosition.location = 1;
+ getCharacter(kCharacterTatiana).characterPosition.position = 1750;
+ startCycOtis(kCharacterTatiana, "110C");
+ playDialog(kCharacterTatiana, "Tat3160A", -1, 0);
+ getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoTatiana_StartPart2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_DemoTatiana_StartPart2);
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 2;
+
+ params->clear();
+
+ fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
+}
+
+void LogicManager::HAND_DemoTatiana_StartPart2(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoTatiana_StartPart3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_DemoTatiana_StartPart3);
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 3;
+
+ params->clear();
+
+ fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
+}
+
+void LogicManager::HAND_DemoTatiana_StartPart3(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoTatiana_StartPart4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_DemoTatiana_StartPart4);
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 4;
+
+ params->clear();
+
+ fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
+}
+
+void LogicManager::HAND_DemoTatiana_StartPart4(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoTatiana_StartPart5(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_DemoTatiana_StartPart5);
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 5;
+
+ params->clear();
+
+ fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
+}
+
+void LogicManager::HAND_DemoTatiana_StartPart5(HAND_PARAMS) {
+ // No-op
+}
+
+void (LogicManager::*LogicManager::_functionsDemoTatiana[])(HAND_PARAMS) = {
+ nullptr,
+ &LogicManager::HAND_DemoTatiana_Birth,
+ &LogicManager::HAND_DemoTatiana_StartPart2,
+ &LogicManager::HAND_DemoTatiana_StartPart3,
+ &LogicManager::HAND_DemoTatiana_StartPart4,
+ &LogicManager::HAND_DemoTatiana_StartPart5
+};
+
+} // End of namespace LastExpress
diff --git a/engines/lastexpress/characters/demo/demo_vesna.cpp b/engines/lastexpress/characters/demo/demo_vesna.cpp
new file mode 100644
index 00000000000..d28aad51642
--- /dev/null
+++ b/engines/lastexpress/characters/demo/demo_vesna.cpp
@@ -0,0 +1,411 @@
+/* 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_DemoVesna(int chapter) {
+ switch (chapter) {
+ case 0:
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterVesna,
+ _functionsDemoVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]
+ );
+
+ break;
+ case 1:
+ CONS_DemoVesna_Birth(0, 0, 0, 0);
+ break;
+ case 2:
+ CONS_DemoVesna_StartPart2(0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_DemoVesna_StartPart3(0, 0, 0, 0);
+ break;
+ case 4:
+ CONS_DemoVesna_StartPart4(0, 0, 0, 0);
+ break;
+ case 5:
+ CONS_DemoVesna_StartPart5(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::DemoVesnaCall(CALL_PARAMS) {
+ getCharacter(kCharacterVesna).currentCall++;
+
+ (this->*functionPointer)(param1, param2, param3, param4);
+}
+
+void LogicManager::CONS_DemoVesna_DoCorrOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterVesna).callParams[getCharacter(kCharacterVesna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterVesna, &LogicManager::HAND_DemoVesna_DoCorrOtis);
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall] = 1;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ params->parameters[3] = param2.intParam;
+
+ fedEx(kCharacterVesna, kCharacterVesna, 12, 0);
+}
+
+void LogicManager::HAND_DemoVesna_DoCorrOtis(HAND_PARAMS) {
+ if (msg->action == 3) {
+ releaseAtDoor(kCharacterVesna, getCharacterCurrentParams(kCharacterVesna)[3]);
+
+ getCharacter(kCharacterVesna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsDemoVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
+ fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
+ } else if (msg->action == 12) {
+ startSeqOtis(kCharacterVesna, (char *)&getCharacterCurrentParams(kCharacterVesna)[0]);
+ blockAtDoor(kCharacterVesna, getCharacterCurrentParams(kCharacterVesna)[3]);
+ }
+}
+
+void LogicManager::CONS_DemoVesna_DoSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterVesna).callParams[getCharacter(kCharacterVesna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterVesna, &LogicManager::HAND_DemoVesna_DoSeqOtis);
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall] = 2;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ fedEx(kCharacterVesna, kCharacterVesna, 12, 0);
+}
+
+void LogicManager::HAND_DemoVesna_DoSeqOtis(HAND_PARAMS) {
+ if (msg->action == 3) {
+ getCharacter(kCharacterVesna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsDemoVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
+ fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
+ } else if (msg->action == 12) {
+ startSeqOtis(kCharacterVesna, (char *)&getCharacterCurrentParams(kCharacterVesna)[0]);
+ }
+}
+
+void LogicManager::CONS_DemoVesna_DoWalk(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterVesna).callParams[getCharacter(kCharacterVesna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterVesna, &LogicManager::HAND_DemoVesna_DoWalk);
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall] = 3;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+ params->parameters[1] = param2.intParam;
+
+ fedEx(kCharacterVesna, kCharacterVesna, 12, 0);
+}
+
+void LogicManager::HAND_DemoVesna_DoWalk(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ case 12:
+ if (walk(kCharacterVesna, getCharacterCurrentParams(kCharacterVesna)[0], getCharacterCurrentParams(kCharacterVesna)[1])) {
+ getCharacter(kCharacterVesna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsDemoVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
+ fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
+ }
+
+ break;
+ case 5:
+ if (rnd(2) == 0) {
+ playDialog(kCharacterCath, "CAT1015A", -1, 0);
+ } else {
+ playDialog(kCharacterCath, "CAT1015", -1, 0);
+ }
+
+ break;
+ case 6:
+ playChrExcuseMe(kCharacterVesna, kCharacterCath, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoVesna_WaitRCClear(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterVesna).callParams[getCharacter(kCharacterVesna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterVesna, &LogicManager::HAND_DemoVesna_WaitRCClear);
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall] = 4;
+
+ params->clear();
+
+ fedEx(kCharacterVesna, kCharacterVesna, 12, 0);
+}
+
+void LogicManager::HAND_DemoVesna_WaitRCClear(HAND_PARAMS) {
+ if ((msg->action == 0 && rcClear()) || (msg->action == 12 && rcClear())) {
+ getCharacter(kCharacterVesna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsDemoVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
+ fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
+ }
+}
+
+void LogicManager::CONS_DemoVesna_FinishSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterVesna).callParams[getCharacter(kCharacterVesna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterVesna, &LogicManager::HAND_DemoVesna_FinishSeqOtis);
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall] = 5;
+
+ params->clear();
+
+ fedEx(kCharacterVesna, kCharacterVesna, 12, 0);
+}
+
+void LogicManager::HAND_DemoVesna_FinishSeqOtis(HAND_PARAMS) {
+ if (msg->action == 3) {
+ getCharacter(kCharacterVesna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsDemoVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
+ fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
+ }
+}
+
+void LogicManager::CONS_DemoVesna_Birth(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterVesna).callParams[getCharacter(kCharacterVesna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterVesna, &LogicManager::HAND_DemoVesna_Birth);
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall] = 6;
+
+ params->clear();
+
+ fedEx(kCharacterVesna, kCharacterVesna, 12, 0);
+}
+
+void LogicManager::HAND_DemoVesna_Birth(HAND_PARAMS) {
+ if (msg->action == 12)
+ CONS_DemoVesna_InComp(0, 0, 0, 0);
+}
+
+void LogicManager::CONS_DemoVesna_InComp(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterVesna).callParams[getCharacter(kCharacterVesna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterVesna, &LogicManager::HAND_DemoVesna_InComp);
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall] = 7;
+
+ params->clear();
+
+ fedEx(kCharacterVesna, kCharacterVesna, 12, 0);
+}
+
+void LogicManager::HAND_DemoVesna_InComp(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (_gameProgress[kProgressField54] && getCharacterCurrentParams(kCharacterVesna)[0] != 0x7FFFFFFF && _gameTime) {
+ if (_gameTime <= 2259000) {
+ if (!cathInCorridor(kCarRedSleeping) || !getCharacterCurrentParams(kCharacterVesna)[0]) {
+ getCharacterCurrentParams(kCharacterVesna)[0] = _gameTime;
+ if (!_gameTime) {
+ CONS_DemoVesna_KillAnna(0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterVesna)[0] >= _gameTime)
+ break;
+ }
+
+ getCharacterCurrentParams(kCharacterVesna)[0] = 0x7FFFFFFF;
+ CONS_DemoVesna_KillAnna(0, 0, 0, 0);
+ }
+
+ break;
+ case 12:
+ getCharacter(kCharacterVesna).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterVesna).characterPosition.position = 3050;
+ getCharacter(kCharacterVesna).characterPosition.location = 1;
+ getCharacter(kCharacterVesna).clothes = 0;
+ getCharacter(kCharacterVesna).inventoryItem = 0;
+ endGraphics(kCharacterVesna);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoVesna_KillAnna(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterVesna).callParams[getCharacter(kCharacterVesna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterVesna, &LogicManager::HAND_DemoVesna_KillAnna);
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall] = 8;
+
+ params->clear();
+
+ fedEx(kCharacterVesna, kCharacterVesna, 12, 0);
+}
+
+void LogicManager::HAND_DemoVesna_KillAnna(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 1;
+ DemoVesnaCall(&LogicManager::CONS_DemoVesna_DoCorrOtis, "610Bg", 38, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterVesna).characterPosition.location = 0;
+ if (getCharacter(kCharacterVesna).characterPosition.position < 2087)
+ getCharacter(kCharacterVesna).characterPosition.position = 2088;
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 2;
+ DemoVesnaCall(&LogicManager::CONS_DemoVesna_DoWalk, kCarRestaurant, 850, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 3;
+ DemoVesnaCall(&LogicManager::CONS_DemoVesna_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterVesna).characterPosition.position = 1540;
+ getCharacter(kCharacterVesna).characterPosition.location = 0;
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 4;
+ DemoVesnaCall(&LogicManager::CONS_DemoVesna_DoSeqOtis, "808US", 0, 0, 0);
+ break;
+ case 4:
+ startSeqOtis(kCharacterVesna, "808UD");
+
+ if (inSalon(kCharacterCath))
+ advanceFrame(kCharacterVesna);
+
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 5;
+ DemoVesnaCall(&LogicManager::CONS_DemoVesna_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 5:
+ endGraphics(kCharacterVesna);
+ getCharacter(kCharacterVesna).characterPosition.car = kCarBaggage;
+ send(kCharacterVesna, kCharacterAnna, 235856512, 0);
+ break;
+ case 6:
+ getCharacter(kCharacterVesna).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterVesna).characterPosition.position = 5800;
+ getCharacter(kCharacterVesna).characterPosition.location = 0;
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 7;
+ DemoVesnaCall(&LogicManager::CONS_DemoVesna_DoSeqOtis, "808DD", 0, 0, 0);
+ break;
+ case 7:
+ startSeqOtis(kCharacterVesna, "808DS");
+
+ if (inDiningRoom(kCharacterCath))
+ advanceFrame(kCharacterVesna);
+
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 8;
+ DemoVesnaCall(&LogicManager::CONS_DemoVesna_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 8:
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 9;
+ DemoVesnaCall(&LogicManager::CONS_DemoVesna_DoWalk, kCarRedSleeping, 3050, 0, 0);
+ break;
+ case 9:
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 10;
+ DemoVesnaCall(&LogicManager::CONS_DemoVesna_DoCorrOtis, "610Ag", 3050, 0, 0);
+ break;
+ case 10:
+ getCharacter(kCharacterVesna).characterPosition.position = 3050;
+ getCharacter(kCharacterVesna).characterPosition.location = 1;
+ endGraphics(kCharacterVesna);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 189299008:
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 6;
+ DemoVesnaCall(&LogicManager::CONS_DemoVesna_WaitRCClear, 0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoVesna_StartPart2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterVesna).callParams[getCharacter(kCharacterVesna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterVesna, &LogicManager::HAND_DemoVesna_StartPart2);
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall] = 9;
+
+ params->clear();
+
+ fedEx(kCharacterVesna, kCharacterVesna, 12, 0);
+}
+
+void LogicManager::HAND_DemoVesna_StartPart2(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoVesna_StartPart3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterVesna).callParams[getCharacter(kCharacterVesna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterVesna, &LogicManager::HAND_DemoVesna_StartPart3);
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall] = 10;
+
+ params->clear();
+
+ fedEx(kCharacterVesna, kCharacterVesna, 12, 0);
+}
+
+void LogicManager::HAND_DemoVesna_StartPart3(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoVesna_StartPart4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterVesna).callParams[getCharacter(kCharacterVesna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterVesna, &LogicManager::HAND_DemoVesna_StartPart4);
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall] = 11;
+
+ params->clear();
+
+ fedEx(kCharacterVesna, kCharacterVesna, 12, 0);
+}
+
+void LogicManager::HAND_DemoVesna_StartPart4(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoVesna_StartPart5(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterVesna).callParams[getCharacter(kCharacterVesna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterVesna, &LogicManager::HAND_DemoVesna_StartPart5);
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall] = 12;
+
+ params->clear();
+
+ fedEx(kCharacterVesna, kCharacterVesna, 12, 0);
+}
+
+void LogicManager::HAND_DemoVesna_StartPart5(HAND_PARAMS) {
+ // No-op
+}
+
+void (LogicManager::*LogicManager::_functionsDemoVesna[])(HAND_PARAMS) = {
+ nullptr,
+ &LogicManager::HAND_DemoVesna_DoCorrOtis,
+ &LogicManager::HAND_DemoVesna_DoSeqOtis,
+ &LogicManager::HAND_DemoVesna_DoWalk,
+ &LogicManager::HAND_DemoVesna_WaitRCClear,
+ &LogicManager::HAND_DemoVesna_FinishSeqOtis,
+ &LogicManager::HAND_DemoVesna_Birth,
+ &LogicManager::HAND_DemoVesna_InComp,
+ &LogicManager::HAND_DemoVesna_KillAnna,
+ &LogicManager::HAND_DemoVesna_StartPart2,
+ &LogicManager::HAND_DemoVesna_StartPart3,
+ &LogicManager::HAND_DemoVesna_StartPart4,
+ &LogicManager::HAND_DemoVesna_StartPart5
+};
+
+
+} // End of namespace LastExpress
diff --git a/engines/lastexpress/characters/demo/demo_waiter1.cpp b/engines/lastexpress/characters/demo/demo_waiter1.cpp
new file mode 100644
index 00000000000..9010310074a
--- /dev/null
+++ b/engines/lastexpress/characters/demo/demo_waiter1.cpp
@@ -0,0 +1,225 @@
+/* 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_DemoWaiter1(int chapter) {
+ switch (chapter) {
+ case 0:
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterWaiter1,
+ _functionsDemoWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]
+ );
+
+ break;
+ case 1:
+ CONS_DemoWaiter1_Birth(0, 0, 0, 0);
+ break;
+ case 2:
+ CONS_DemoWaiter1_StartPart2(0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_DemoWaiter1_StartPart3(0, 0, 0, 0);
+ break;
+ case 4:
+ CONS_DemoWaiter1_StartPart4(0, 0, 0, 0);
+ break;
+ case 5:
+ CONS_DemoWaiter1_StartPart5(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::DemoWaiter1Call(CALL_PARAMS) {
+ getCharacter(kCharacterWaiter1).currentCall++;
+
+ (this->*functionPointer)(param1, param2, param3, param4);
+}
+
+void LogicManager::CONS_DemoWaiter1_DoSeqOtis(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterWaiter1).callParams[getCharacter(kCharacterWaiter1).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, &LogicManager::HAND_DemoWaiter1_DoSeqOtis);
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall] = 1;
+
+ params->clear();
+
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
+ fedEx(kCharacterWaiter1, kCharacterWaiter1, 12, 0);
+}
+
+void LogicManager::HAND_DemoWaiter1_DoSeqOtis(HAND_PARAMS) {
+ switch (msg->action) {
+ case 3:
+ getCharacter(kCharacterWaiter1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsDemoWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
+ fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
+ break;
+ case 5:
+ if (!getCharacterCurrentParams(kCharacterWaiter1)[3]) {
+ playChrExcuseMe(kCharacterWaiter1, kCharacterCath, 0);
+ getCharacterCurrentParams(kCharacterWaiter1)[3] = 1;
+ }
+
+ break;
+ case 12:
+ startSeqOtis(kCharacterWaiter1, (char *)&getCharacterCurrentParams(kCharacterWaiter1)[0]);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoWaiter1_Birth(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterWaiter1).callParams[getCharacter(kCharacterWaiter1).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, &LogicManager::HAND_DemoWaiter1_Birth);
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall] = 2;
+
+ params->clear();
+
+ fedEx(kCharacterWaiter1, kCharacterWaiter1, 12, 0);
+}
+
+void LogicManager::HAND_DemoWaiter1_Birth(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ getCharacter(kCharacterWaiter1).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterWaiter1).characterPosition.position = 5900;
+ getCharacter(kCharacterWaiter1).characterPosition.location = 0;
+ break;
+ case 223712416:
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
+ DemoWaiter1Call(&LogicManager::CONS_DemoWaiter1_RebeccaFeedUs, 0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoWaiter1_RebeccaFeedUs(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterWaiter1).callParams[getCharacter(kCharacterWaiter1).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, &LogicManager::HAND_DemoWaiter1_RebeccaFeedUs);
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall] = 3;
+
+ params->clear();
+
+ fedEx(kCharacterWaiter1, kCharacterWaiter1, 12, 0);
+}
+
+void LogicManager::HAND_DemoWaiter1_RebeccaFeedUs(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ getCharacter(kCharacterWaiter1).characterPosition.position = 5800;
+ getCharacter(kCharacterWaiter1).characterPosition.location = 0;
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
+ DemoWaiter1Call(&LogicManager::CONS_DemoWaiter1_DoSeqOtis, "911", 0, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] == 1) {
+ endGraphics(kCharacterWaiter1);
+ send(kCharacterWaiter1, kCharacterRebecca, 123712592, 0);
+ } else if (getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] == 2) {
+ endGraphics(kCharacterWaiter1);
+ getCharacter(kCharacterWaiter1).characterPosition.position = 5900;
+ }
+
+ break;
+ case 136702400:
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 2;
+ DemoWaiter1Call(&LogicManager::CONS_DemoWaiter1_DoSeqOtis, "913", 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_DemoWaiter1_StartPart2(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterWaiter1).callParams[getCharacter(kCharacterWaiter1).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, &LogicManager::HAND_DemoWaiter1_StartPart2);
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall] = 4;
+
+ params->clear();
+
+ fedEx(kCharacterWaiter1, kCharacterWaiter1, 12, 0);
+}
+
+void LogicManager::HAND_DemoWaiter1_StartPart2(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoWaiter1_StartPart3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterWaiter1).callParams[getCharacter(kCharacterWaiter1).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, &LogicManager::HAND_DemoWaiter1_StartPart3);
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall] = 5;
+
+ params->clear();
+
+ fedEx(kCharacterWaiter1, kCharacterWaiter1, 12, 0);
+}
+
+void LogicManager::HAND_DemoWaiter1_StartPart3(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoWaiter1_StartPart4(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterWaiter1).callParams[getCharacter(kCharacterWaiter1).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, &LogicManager::HAND_DemoWaiter1_StartPart4);
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall] = 6;
+
+ params->clear();
+
+ fedEx(kCharacterWaiter1, kCharacterWaiter1, 12, 0);
+}
+
+void LogicManager::HAND_DemoWaiter1_StartPart4(HAND_PARAMS) {
+ // No-op
+}
+
+void LogicManager::CONS_DemoWaiter1_StartPart5(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterWaiter1).callParams[getCharacter(kCharacterWaiter1).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, &LogicManager::HAND_DemoWaiter1_StartPart5);
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall] = 7;
+
+ params->clear();
+
+ fedEx(kCharacterWaiter1, kCharacterWaiter1, 12, 0);
+}
+
+void LogicManager::HAND_DemoWaiter1_StartPart5(HAND_PARAMS) {
+ // No-op
+}
+
+void (LogicManager::*LogicManager::_functionsDemoWaiter1[])(HAND_PARAMS) = {
+ nullptr,
+ &LogicManager::HAND_DemoWaiter1_DoSeqOtis,
+ &LogicManager::HAND_DemoWaiter1_Birth,
+ &LogicManager::HAND_DemoWaiter1_RebeccaFeedUs,
+ &LogicManager::HAND_DemoWaiter1_StartPart2,
+ &LogicManager::HAND_DemoWaiter1_StartPart3,
+ &LogicManager::HAND_DemoWaiter1_StartPart4,
+ &LogicManager::HAND_DemoWaiter1_StartPart5
+};
+
+} // End of namespace LastExpress
diff --git a/engines/lastexpress/characters/francois.cpp b/engines/lastexpress/characters/francois.cpp
index 922f71dc287..0d5db2382c7 100644
--- a/engines/lastexpress/characters/francois.cpp
+++ b/engines/lastexpress/characters/francois.cpp
@@ -246,8 +246,8 @@ void LogicManager::HAND_Francois_SaveGame(HAND_PARAMS) {
if (msg->action == 12) {
save(
kCharacterFrancois,
- getCharacter(kCharacterFrancois).callParams[getCharacter(kCharacterFrancois).currentCall].parameters[0],
- getCharacter(kCharacterFrancois).callParams[getCharacter(kCharacterFrancois).currentCall].parameters[1]
+ getCharacterCurrentParams(kCharacterFrancois)[0],
+ getCharacterCurrentParams(kCharacterFrancois)[1]
);
getCharacter(kCharacterFrancois).currentCall--;
diff --git a/engines/lastexpress/characters/ivo.cpp b/engines/lastexpress/characters/ivo.cpp
index 25e9ced014d..f498f0b7f20 100644
--- a/engines/lastexpress/characters/ivo.cpp
+++ b/engines/lastexpress/characters/ivo.cpp
@@ -238,12 +238,12 @@ void LogicManager::CONS_Ivo_FinishSeqOtis(CONS_PARAMS) {
void LogicManager::HAND_Ivo_FinishSeqOtis(HAND_PARAMS) {
if (msg->action == 0) {
- if (getCharacter(kCharacterIvo).direction == 4)
- return;
- goto LABEL_5;
- }
- if (msg->action == 3) {
- LABEL_5:
+ if (getCharacter(kCharacterIvo).direction != 4) {
+ getCharacter(kCharacterIvo).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
+ fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
+ }
+ } else if (msg->action == 3) {
getCharacter(kCharacterIvo).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
@@ -282,13 +282,7 @@ void LogicManager::CONS_Ivo_WaitRCClear(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_WaitRCClear(HAND_PARAMS) {
- if (msg->action == 0) {
- if (!rcClear())
- return;
- goto LABEL_7;
- }
- if (msg->action == 12 && rcClear()) {
- LABEL_7:
+ if ((msg->action == 0 && rcClear()) || (msg->action == 12 && rcClear())) {
getCharacter(kCharacterIvo).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
diff --git a/engines/lastexpress/characters/master.cpp b/engines/lastexpress/characters/master.cpp
index ec94e929aeb..4bfa29f7a2f 100644
--- a/engines/lastexpress/characters/master.cpp
+++ b/engines/lastexpress/characters/master.cpp
@@ -198,7 +198,7 @@ void LogicManager::HAND_Master_Depart(HAND_PARAMS) {
}
}
} else {
- bumpCath(5, 82, 255);
+ bumpCath(kCarRestaurant, 82, 255);
}
}
getCharacterParams(kCharacterMaster, 8)[1] = 0;
@@ -212,8 +212,8 @@ void LogicManager::HAND_Master_Depart(HAND_PARAMS) {
send(kCharacterMaster, kCharacterClerk, 203419131, 0);
- setDoor(26, 0, 1, 0, 9);
- setDoor(27, 0, 1, 0, 9);
+ setDoor(26, kCharacterCath, 1, 0, 9);
+ setDoor(27, kCharacterCath, 1, 0, 9);
_gameProgress[kProgressIsTrainRunning] = 1;
@@ -222,7 +222,8 @@ void LogicManager::HAND_Master_Depart(HAND_PARAMS) {
getCharacter(kCharacterMaster).currentCall--;
_engine->getMessageManager()->setMessageHandle(
kCharacterMaster,
- _functionsMaster[getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall]]);
+ _functionsMaster[getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall]]
+ );
fedEx(kCharacterMaster, kCharacterMaster, 18, 0);
}
@@ -409,7 +410,7 @@ void LogicManager::HAND_Master_FirstDream(HAND_PARAMS) {
_gameTimeTicksDelta = 3;
_gameProgress[kProgressField18] = 1;
- setDoor(63, 0, 0, 10, 9);
+ setDoor(63, kCharacterCath, 0, 10, 9);
_gameProgress[kProgressField84] = 0;
@@ -418,7 +419,8 @@ void LogicManager::HAND_Master_FirstDream(HAND_PARAMS) {
getCharacter(kCharacterMaster).currentCall--;
_engine->getMessageManager()->setMessageHandle(
kCharacterMaster,
- _functionsMaster[getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall]]);
+ _functionsMaster[getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall]]
+ );
fedEx(kCharacterMaster, kCharacterMaster, 18, 0);
} else {
@@ -487,8 +489,8 @@ void LogicManager::HAND_Master_StartPart1(HAND_PARAMS) {
_gameProgress[kProgressField7C] = 1;
- setDoor(1, 0, 0, 10, 9);
- setDoor(9, 0, 0, 255, 255);
+ setDoor(1, kCharacterCath, 0, 10, 9);
+ setDoor(9, kCharacterCath, 0, 255, 255);
getCharacterCurrentParams(kCharacterMaster)[0] = 1;
@@ -509,22 +511,22 @@ void LogicManager::HAND_Master_StartPart1(HAND_PARAMS) {
setModel(98, 1);
setModel(55, 1);
- setDoor(25, 0, 0, 0, 1);
- setDoor(23, 0, 0, 0, 1);
- setDoor(24, 0, 0, 0, 1);
- setDoor(28, 0, 0, 0, 1);
- setDoor(56, 0, 0, 0, 1);
- setDoor(54, 0, 0, 0, 1);
- setDoor(55, 0, 0, 0, 1);
- setDoor(59, 0, 0, 0, 1);
- setDoor(66, 0, 0, 0, 1);
- setDoor(64, 0, 0, 0, 1);
- setDoor(65, 0, 0, 0, 1);
- setDoor(69, 0, 0, 0, 1);
- setDoor(98, 0, 0, 0, 1);
- setDoor(26, 0, 1, 0, 9);
- setDoor(27, 0, 1, 0, 9);
- setDoor(101, 0, 1, 10, 9);
+ 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);
}
@@ -1509,8 +1511,8 @@ void LogicManager::HAND_Master_InitPart4(HAND_PARAMS) {
_gameProgress[kProgressIsTrainRunning] = 1;
- setDoor(26, 0, 1, 0, 9);
- setDoor(27, 0, 1, 0, 9);
+ setDoor(26, kCharacterCath, 1, 0, 9);
+ setDoor(27, kCharacterCath, 1, 0, 9);
send(kCharacterMaster, kCharacterClerk, 203419131, 0);
send(kCharacterMaster, kCharacterTableA, 103798704, 0);
diff --git a/engines/lastexpress/characters/vesna.cpp b/engines/lastexpress/characters/vesna.cpp
index 87ea2abc0d5..45828a4d7b3 100644
--- a/engines/lastexpress/characters/vesna.cpp
+++ b/engines/lastexpress/characters/vesna.cpp
@@ -172,8 +172,12 @@ void LogicManager::CONS_Vesna_DoWalk(CONS_PARAMS) {
void LogicManager::HAND_Vesna_DoWalk(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (walk(kCharacterVesna, getCharacterCurrentParams(kCharacterVesna)[0], getCharacterCurrentParams(kCharacterVesna)[1]))
- goto LABEL_10;
+ case 12:
+ if (walk(kCharacterVesna, getCharacterCurrentParams(kCharacterVesna)[0], getCharacterCurrentParams(kCharacterVesna)[1])) {
+ getCharacter(kCharacterVesna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
+ fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
+ }
break;
case 5:
if (rnd(2) == 0) {
@@ -186,16 +190,8 @@ void LogicManager::HAND_Vesna_DoWalk(HAND_PARAMS) {
case 6:
playChrExcuseMe(kCharacterVesna, kCharacterCath, 0);
break;
- case 12:
- if (walk(kCharacterVesna, getCharacterCurrentParams(kCharacterVesna)[0], getCharacterCurrentParams(kCharacterVesna)[1])) {
- LABEL_10:
- getCharacter(kCharacterVesna).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
- fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
- }
- break;
default:
- return;
+ break;
}
}
@@ -249,7 +245,7 @@ void LogicManager::HAND_Vesna_DoWalkBehind(HAND_PARAMS) {
}
return;
}
- LABEL_16:
+
walk(kCharacterVesna, getCharacterCurrentParams(kCharacterVesna)[0], getCharacterCurrentParams(kCharacterVesna)[1]);
return;
}
@@ -264,8 +260,9 @@ void LogicManager::HAND_Vesna_DoWalkBehind(HAND_PARAMS) {
getCharacter(kCharacterVesna).waitedTicksUntilCycleRestart = 0;
getCharacterCurrentParams(kCharacterVesna)[2] = 1;
}
- if (!getCharacterCurrentParams(kCharacterVesna)[2])
- goto LABEL_16;
+ if (!getCharacterCurrentParams(kCharacterVesna)[2]) {
+ walk(kCharacterVesna, getCharacterCurrentParams(kCharacterVesna)[0], getCharacterCurrentParams(kCharacterVesna)[1]);
+ }
}
void LogicManager::CONS_Vesna_WaitRCClear(CONS_PARAMS) {
@@ -279,13 +276,7 @@ void LogicManager::CONS_Vesna_WaitRCClear(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_WaitRCClear(HAND_PARAMS) {
- if (msg->action == 0) {
- if (!rcClear())
- return;
- goto LABEL_7;
- }
- if (msg->action == 12 && rcClear()) {
- LABEL_7:
+ if ((msg->action == 0 && rcClear()) || (msg->action == 12 && rcClear())) {
getCharacter(kCharacterVesna).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
@@ -304,12 +295,12 @@ void LogicManager::CONS_Vesna_FinishSeqOtis(CONS_PARAMS) {
void LogicManager::HAND_Vesna_FinishSeqOtis(HAND_PARAMS) {
if (msg->action == 0) {
- if (getCharacter(kCharacterVesna).direction == 4)
- return;
- goto LABEL_5;
- }
- if (msg->action == 3) {
- LABEL_5:
+ if (getCharacter(kCharacterVesna).direction != 4) {
+ getCharacter(kCharacterVesna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
+ fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
+ }
+ } else if (msg->action == 3) {
getCharacter(kCharacterVesna).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
@@ -415,8 +406,7 @@ void LogicManager::HAND_Vesna_HomeAlone(HAND_PARAMS) {
Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterVesna)[3], 12, "VES1015B");
}
}
-
- LABEL_27:
+
setDoor(38, kCharacterVesna, 3, 0, 0);
if (msg->action == 9) {
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 1;
@@ -926,7 +916,7 @@ void LogicManager::HAND_Vesna_KillAnna(HAND_PARAMS) {
if (getCharacter(kCharacterVesna).characterPosition.position < 2087)
getCharacter(kCharacterVesna).characterPosition.position = 2088;
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 2;
- VesnaCall(&LogicManager::CONS_Vesna_DoWalk, 5, 850, 0, 0);
+ VesnaCall(&LogicManager::CONS_Vesna_DoWalk, kCarRestaurant, 850, 0, 0);
break;
case 2:
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 3;
@@ -966,7 +956,7 @@ void LogicManager::HAND_Vesna_KillAnna(HAND_PARAMS) {
break;
case 8:
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 9;
- VesnaCall(&LogicManager::CONS_Vesna_DoWalk, 4, 3050, 0, 0);
+ VesnaCall(&LogicManager::CONS_Vesna_DoWalk, kCarRedSleeping, 3050, 0, 0);
break;
case 9:
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 10;
diff --git a/engines/lastexpress/data/archive.cpp b/engines/lastexpress/data/archive.cpp
index 81204758947..74877a2e75d 100644
--- a/engines/lastexpress/data/archive.cpp
+++ b/engines/lastexpress/data/archive.cpp
@@ -226,7 +226,7 @@ bool ArchiveManager::lockCache(char *filename) {
void ArchiveManager::initHPFS() {
g_HDFilePosition = 0;
- if (!g_HDFilePointer || !g_HDFilePointer->open("HD.hpf")) {
+ if (!g_HDFilePointer || !g_HDFilePointer->open(_engine->isDemo() ? "DEMO.HPF" : "HD.hpf")) {
error("Hard drive cache not found (please reinstall)");
}
@@ -239,7 +239,7 @@ void ArchiveManager::initHPFS() {
g_HDArchiveNumFiles = g_HDFilePointer->readUint32LE();
if (g_HDFilePointer->err()) {
- error("Error reading from file \"%s\"", "HD.hpf");
+ error("Error reading from file \"%s\"", _engine->isDemo() ? "DEMO.HPF" : "HD.hpf");
}
g_HDFilePosition += 4;
@@ -258,7 +258,7 @@ void ArchiveManager::initHPFS() {
}
if (g_HDFilePointer->err()) {
- error("Error reading from file \"%s\"", "HD.hpf");
+ error("Error reading from file \"%s\"", _engine->isDemo() ? "DEMO.HPF" : "HD.hpf");
}
g_HDFilePosition += g_HDArchiveNumFiles;
diff --git a/engines/lastexpress/debug.cpp b/engines/lastexpress/debug.cpp
index 4bc6f51e6c8..53dfae8025f 100644
--- a/engines/lastexpress/debug.cpp
+++ b/engines/lastexpress/debug.cpp
@@ -428,7 +428,7 @@ void LogicManager::renderCharacterList(int &selectedCharacter) {
}
Common::StringArray LogicManager::getCharacterFunctionNames(int character) {
- return _funcNames[character];
+ return _engine->isDemo() ? _demoFuncNames[character] : _funcNames[character];
}
void LogicManager::showTrainMapWindow() {
diff --git a/engines/lastexpress/detection.cpp b/engines/lastexpress/detection.cpp
index 0183d8dd219..8902ad2fce6 100644
--- a/engines/lastexpress/detection.cpp
+++ b/engines/lastexpress/detection.cpp
@@ -88,7 +88,7 @@ static const ADGameDescription gameDescriptions[] = {
// express.exe ???
{
"lastexpress",
- "",
+ "Interplay Release",
{
{"HD.HPF", 0, "bcc32d977f92bb52c060a0b4e8589cac", 30715904},
{"CD1.HPF", 0, "8c86db47304033fcff32c69fddd5a920", 525522944},
diff --git a/engines/lastexpress/fight/opponent_vesna1.cpp b/engines/lastexpress/fight/opponent_vesna1.cpp
index d27ac1780e0..00b730afac2 100644
--- a/engines/lastexpress/fight/opponent_vesna1.cpp
+++ b/engines/lastexpress/fight/opponent_vesna1.cpp
@@ -36,7 +36,7 @@ COpponent2::COpponent2(LastExpressEngine *engine, CFight *fight) : COpponent(eng
_seqs[5] = _engine->getArchiveManager()->loadSeq("2002okml.seq", 15, 0);
_seqs[6] = _engine->getArchiveManager()->loadSeq("2002okm.seq", 15, 0);
- _engine->getLogicManager()->playDialog(kCharacterTableA, "MUS030", 16, 0);
+ _engine->getLogicManager()->playDialog(kCharacterTableA, engine->isDemo() ? "MUS030D" : "MUS030", 16, 0);
_timer = 30;
}
diff --git a/engines/lastexpress/game/action.cpp b/engines/lastexpress/game/action.cpp
index b4cbb27f388..75060005cda 100644
--- a/engines/lastexpress/game/action.cpp
+++ b/engines/lastexpress/game/action.cpp
@@ -2429,7 +2429,7 @@ void LogicManager::doPreFunction(int *sceneOut) {
break;
case kCarLocomotive:
- if (_trainData[*sceneOut].parameter1 < 32) {
+ if (_trainData[*sceneOut].parameter1 < (_engine->isDemo() ? 16 : 32)) {
if (_softBlockedEntitiesBits[_trainData[*sceneOut].parameter1] || _blockedEntitiesBits[_trainData[*sceneOut].parameter1]) {
if (_engine->getOtisManager()->fDirection(_trainNodeIndex) &&
_engine->getOtisManager()->fDirection(*sceneOut) &&
@@ -2482,7 +2482,7 @@ void LogicManager::doPreFunction(int *sceneOut) {
fadeDialog(kCharacterTableE);
}
- if (_engine->_beetle) {
+ if (!_engine->isDemo() && _engine->_beetle) {
if (_trainData[*sceneOut].car != 130)
_engine->endBeetle();
}
@@ -2515,13 +2515,6 @@ void LogicManager::doPostFunction() {
do {
tmp.copyFrom(_trainData[tmp.scene].link);
doAction(&tmp);
-
- // TODO: Figure out why this happens when canceling fast-walks mode
- // in between cars...
- if (tmp.action == 0) {
- warning("Possible loop for link with action 0");
- //break;
- }
} while (_trainData[tmp.scene].car == 128);
}
@@ -2561,11 +2554,17 @@ void LogicManager::doPostFunction() {
return;
}
case 129:
+ if (_engine->isDemo())
+ break;
+
if (_gameProgress[kProgressField18] == 2)
send(kCharacterCath, kCharacterMaster, 190346110, 0);
return;
case 130:
+ if (_engine->isDemo())
+ break;
+
_engine->doBeetle();
return;
case 131:
@@ -2836,6 +2835,9 @@ void LogicManager::doAction(Link *link) {
break;
case kActionSetItem:
+ if (_engine->isDemo())
+ break;
+
if (link->param1 < 32) {
if (!_gameInventory[link->param1].isPresent) {
_gameInventory[link->param1].location = link->param2;
@@ -2848,6 +2850,9 @@ void LogicManager::doAction(Link *link) {
break;
case kActionPickItem:
+ if (_engine->isDemo())
+ break;
+
if (link->param1 >= 32)
return;
@@ -2910,6 +2915,9 @@ void LogicManager::doAction(Link *link) {
break;
case kActionDropItem:
+ if (_engine->isDemo())
+ break;
+
if (link->param1 >= 32 || !_gameInventory[link->param1].isPresent || !link->param2)
return;
@@ -2947,6 +2955,9 @@ void LogicManager::doAction(Link *link) {
break;
case kActionLeanOutWindow:
+ if (_engine->isDemo())
+ break;
+
if (!_gameEvents[kEventCathLookOutsideWindowDay] && !_gameEvents[kEventCathLookOutsideWindowNight] && getModel(1) != 1 || !_gameProgress[kProgressIsTrainRunning] || link->param1 == 45 && (inComp(kCharacterRebecca, kCarRedSleeping, 4840) || _gameObjects[kObjectOutsideBetweenCompartments].door != 2) || _inventorySelectedItemIdx == kItemBriefcase || _inventorySelectedItemIdx == kItemFirebird) {
if (link->param1 == 9 || link->param1 >= 44 && link->param1 <= 45) {
if (isNight()) {
@@ -3001,6 +3012,9 @@ void LogicManager::doAction(Link *link) {
break;
case kActionAlmostFall:
+ if (_engine->isDemo())
+ break;
+
if (link->param1 == 9) {
if (isNight()) {
playNIS(kEventCathSlipTylerCompartmentNight);
@@ -3031,6 +3045,9 @@ void LogicManager::doAction(Link *link) {
cleanNIS();
break;
case kActionClimbInWindow:
+ if (_engine->isDemo())
+ break;
+
switch (link->param1) {
case 9:
if (isNight()) {
@@ -3068,6 +3085,9 @@ void LogicManager::doAction(Link *link) {
cleanNIS();
break;
case kActionClimbLadder:
+ if (_engine->isDemo())
+ break;
+
if (link->param1 == 1) {
if (_gameProgress[kProgressChapter] == 2 || _gameProgress[kProgressChapter] == 3) {
playNIS(kEventCathTopTrainGreenJacket);
@@ -3096,6 +3116,9 @@ void LogicManager::doAction(Link *link) {
cleanNIS();
break;
case kActionClimbDownTrain:
+ if (_engine->isDemo())
+ break;
+
if (_gameProgress[kProgressChapter] == 2 || _gameProgress[kProgressChapter] == 3) {
nisId = kEventCathClimbDownTrainGreenJacket;
} else if (_gameProgress[kProgressChapter] == 5) {
@@ -3118,6 +3141,9 @@ void LogicManager::doAction(Link *link) {
break;
case kActionKronosSanctum:
+ if (_engine->isDemo())
+ break;
+
switch (link->param1) {
case 1:
send(kCharacterCath, 32, 225056224, 0);
@@ -3162,6 +3188,9 @@ void LogicManager::doAction(Link *link) {
break;
case kActionEscapeBaggage:
+ if (_engine->isDemo())
+ break;
+
switch (link->param1) {
case 1:
nisId = kEventCathStruggleWithBonds;
@@ -3213,10 +3242,16 @@ void LogicManager::doAction(Link *link) {
break;
case 3:
queueSFX(kCharacterCath, 43, 0);
- if (cathHasItem(kItemKey)) {
- if (!_gameEvents[kEventAnnaBaggageArgument]) {
- forceJump(kCharacterAnna, &LogicManager::CONS_Anna_BaggageFight);
- link->scene = kSceneNone;
+
+ if (_engine->isDemo()) {
+ forceJump(kCharacterAnna, &LogicManager::CONS_DemoAnna_BaggageFight);
+ link->scene = kSceneNone;
+ } else {
+ if (cathHasItem(kItemKey)) {
+ if (!_gameEvents[kEventAnnaBaggageArgument]) {
+ forceJump(kCharacterAnna, &LogicManager::CONS_Anna_BaggageFight);
+ link->scene = kSceneNone;
+ }
}
}
@@ -3225,6 +3260,9 @@ void LogicManager::doAction(Link *link) {
break;
case kActionBombPuzzle:
+ if (_engine->isDemo())
+ break;
+
switch (link->param1) {
case 1:
send(kCharacterCath, kCharacterMaster, 158610240, 0);
@@ -3259,6 +3297,9 @@ void LogicManager::doAction(Link *link) {
break;
case kActionConductors:
+ if (_engine->isDemo())
+ break;
+
if (!cathRunningDialog("LIB031"))
queueSFX(kCharacterCath, 31, 0);
@@ -3270,6 +3311,9 @@ void LogicManager::doAction(Link *link) {
break;
case kActionKronosConcert:
+ if (_engine->isDemo())
+ break;
+
if (link->param1 == 1) {
nisId = kEventConcertSit;
} else if (link->param1 == 2) {
@@ -3284,6 +3328,9 @@ void LogicManager::doAction(Link *link) {
break;
case kActionPlayMusic2:
+ if (_engine->isDemo())
+ break;
+
_gameProgress[kProgressFieldC] = 1;
queueSFX(kCharacterCath, link->param1, link->param2);
Common::sprintf_s(filename, "MUS%03d", link->param3);
@@ -3292,6 +3339,9 @@ void LogicManager::doAction(Link *link) {
break;
case kActionCatchBeetle:
+ if (_engine->isDemo())
+ break;
+
if (_engine->_beetle && _engine->_beetle->click()) {
_engine->endBeetle();
_gameInventory[kItemBeetle].location = 1;
@@ -3307,28 +3357,32 @@ void LogicManager::doAction(Link *link) {
bool skipFlag = false;
if (link->action != kActionCompartment) {
- if (link->action == kActionExitCompartment) {
- if (!_gameProgress[kProgressField30] && _gameProgress[kProgressJacket]) {
- _engine->getVCR()->writeSavePoint(1, kCharacterCath, 0);
- _gameProgress[kProgressField30] = 1;
- }
+ if (!_engine->isDemo()) {
+ if (link->action == kActionExitCompartment) {
+ if (!_gameProgress[kProgressField30] && _gameProgress[kProgressJacket]) {
+ _engine->getVCR()->writeSavePoint(1, kCharacterCath, 0);
+ _gameProgress[kProgressField30] = 1;
+ }
- setModel(1, link->param2);
- }
+ setModel(1, link->param2);
+ }
- if (_gameObjects[kItemMatchBox].door != 1 && _gameObjects[kItemMatchBox].door != 3 && _inventorySelectedItemIdx != kItemKey) {
- if (!_gameProgress[kProgressEventFoundCorpse]) {
- _engine->getVCR()->writeSavePoint(1, kCharacterCath, 0);
- playDialog(kCharacterCath, "LIB014", -1, 0);
- playNIS(kEventCathFindCorpse);
- playDialog(kCharacterCath, "LIB015", -1, 0);
- _gameProgress[kProgressEventFoundCorpse] = 1;
- link->scene = kSceneCompartmentCorpse;
+ if (_gameObjects[kItemMatchBox].door != 1 && _gameObjects[kItemMatchBox].door != 3 && _inventorySelectedItemIdx != kItemKey) {
+ if (!_gameProgress[kProgressEventFoundCorpse]) {
+ _engine->getVCR()->writeSavePoint(1, kCharacterCath, 0);
+ playDialog(kCharacterCath, "LIB014", -1, 0);
+ playNIS(kEventCathFindCorpse);
+ playDialog(kCharacterCath, "LIB015", -1, 0);
+ _gameProgress[kProgressEventFoundCorpse] = 1;
+ link->scene = kSceneCompartmentCorpse;
- return;
+ return;
+ }
+ } else {
+ skipFlag = true;
}
} else {
- skipFlag = true;
+ link->action = kActionCompartment;
}
}
@@ -3342,9 +3396,11 @@ void LogicManager::doAction(Link *link) {
return;
}
- if (bumpCathTowardsCond(link->param1, 1, 1)) {
- link->scene = kSceneNone;
- return;
+ if (!_engine->isDemo()) {
+ if (bumpCathTowardsCond(link->param1, 1, 1)) {
+ link->scene = kSceneNone;
+ return;
+ }
}
if (_gameObjects[link->param1].door == 1 || _gameObjects[link->param1].door == 3 || preventEnterComp(link->param1)) {
@@ -3394,21 +3450,26 @@ void LogicManager::doAction(Link *link) {
return;
}
- queueSFX(kCharacterCath, 14, 0);
- queueSFX(kCharacterCath, 15, 22);
+ if (!_engine->isDemo()) {
+ queueSFX(kCharacterCath, 14, 0);
+ queueSFX(kCharacterCath, 15, 22);
- if (_gameProgress[kProgressField78] && !dialogRunning("MUS003")) {
- playDialog(kCharacterCath, "MUS003", 16, 0);
- _gameProgress[kProgressField78] = 0;
- }
+ if (_gameProgress[kProgressField78] && !dialogRunning("MUS003")) {
+ playDialog(kCharacterCath, "MUS003", 16, 0);
+ _gameProgress[kProgressField78] = 0;
+ }
- bumpCath(kCarGreenSleeping, 77, 255);
- link->scene = kSceneNone;
+ bumpCath(kCarGreenSleeping, 77, 255);
+ link->scene = kSceneNone;
+ }
break;
}
case kActionOutsideTrain:
+ if (_engine->isDemo())
+ break;
+
switch (link->param1) {
case 1:
send(kCharacterCath, kCharacterSalko, 167992577, 0);
@@ -3441,6 +3502,9 @@ void LogicManager::doAction(Link *link) {
break;
case kActionFirebirdPuzzle:
+ if (_engine->isDemo())
+ break;
+
if (_gameEvents[kEventKronosBringFirebird]) {
switch (link->param1) {
case 1:
@@ -3498,6 +3562,9 @@ void LogicManager::doAction(Link *link) {
break;
case kActionOpenMatchBox:
+ if (_engine->isDemo())
+ break;
+
if (_gameInventory[kItemMatch].location && !_gameInventory[kItemMatch].isPresent) {
_gameInventory[kItemMatch].isPresent = 1;
_gameInventory[kItemMatch].location = 0;
@@ -3509,6 +3576,9 @@ void LogicManager::doAction(Link *link) {
queueSFX(kCharacterCath, 59, 0);
break;
case kActionHintDialog:
+ if (_engine->isDemo())
+ break;
+
if (dialogRunning(getHintDialog(link->param1))) {
endDialog(getHintDialog(link->param1));
}
@@ -3517,6 +3587,9 @@ void LogicManager::doAction(Link *link) {
break;
case kActionMusicEggBox:
+ if (_engine->isDemo())
+ break;
+
queueSFX(kCharacterCath, 43, 0);
if (_gameProgress[kProgressField7C] && !dialogRunning("MUS003")) {
playDialog(kCharacterCath, "MUS003", 16, 0);
@@ -3525,6 +3598,9 @@ void LogicManager::doAction(Link *link) {
break;
case kActionPlayMusic3:
+ if (_engine->isDemo())
+ break;
+
queueSFX(kCharacterCath, 24, 0);
if (_gameProgress[kProgressField80] && !dialogRunning("MUS003")) {
playDialog(kCharacterCath, "MUS003", 16, 0);
@@ -3534,6 +3610,9 @@ void LogicManager::doAction(Link *link) {
break;
case kActionKnockInside:
case kActionBed:
+ if (_engine->isDemo())
+ break;
+
if (link->action == kActionBed) {
queueSFX(kCharacterCath, 85, 0);
}
@@ -3567,6 +3646,9 @@ void LogicManager::doAction(Link *link) {
break;
case kActionPlayMusicChapterSetupTrain:
+ if (_engine->isDemo())
+ break;
+
switch (_gameProgress[kProgressChapter]) {
case 1:
musId = 1;
@@ -3592,6 +3674,9 @@ void LogicManager::doAction(Link *link) {
break;
case kActionEasterEggs:
+ if (_engine->isDemo())
+ break;
+
if (link->param1 == 1) {
send(kCharacterCath, kCharacterRebecca, 205034665, 0);
} else if (link->param1 == 2) {
diff --git a/engines/lastexpress/game/credits.cpp b/engines/lastexpress/game/credits.cpp
index d9f03e8388b..4b6ab1bb7da 100644
--- a/engines/lastexpress/game/credits.cpp
+++ b/engines/lastexpress/game/credits.cpp
@@ -461,4 +461,94 @@ void LastExpressEngine::constructPalette(TGAHeader *tgaHeader, uint16 *palette)
getGraphicsManager()->modifyPalette(palette, 256);
}
+bool LastExpressEngine::demoEnding(bool wonGame) {
+ bool exitFlag = false;
+ int frameIndex = 0;
+ bool savedMouseState = getGraphicsManager()->canDrawMouse();
+
+ const char backgroundNames[35][9] = {
+ "CROSSING", "ABBOT", "ANCATH", "MORNING", "GUNS", "DRINKUP", "SERBSRES",
+ "ANALXR13", "TATIANA", "KRONAN", "CONCERT", "AUDIENCE", "COUPLE", "RUSSIANS",
+ "SPIES", "1017DOG", "CARRIAGE", "TYLEREGG", "TRNM2", "MAHMUD", "CATHMIL",
+ "FRANCY", "ONROOF", "COPS2", "MILOSVES", "KAHINGUN", "1041KISS", "EVERYONE",
+ "BONDAGE", "KILL", "HIGHFITE", "1315GUNS", "BOOM2", "ISTANBUL", "LASTSHOT"};
+
+ if (wonGame) {
+ getMessageManager()->setEventHandle(1, &LastExpressEngine::emptyHandler);
+ } else {
+ getMessageManager()->setEventHandle(1, &LastExpressEngine::demoEndingMouseWrapper);
+ }
+
+ getMessageManager()->setEventHandle(3, &LastExpressEngine::demoEndingTimerWrapper);
+ getGraphicsManager()->setMouseDrawable(false);
+
+ mouseSetRightClicked(false);
+
+ if (getGraphicsManager()->acquireSurface()) {
+ getGraphicsManager()->clear(getGraphicsManager()->_screenSurface, 0, 0, 640, 480);
+ getGraphicsManager()->unlockSurface();
+ }
+
+ getGraphicsManager()->burstAll();
+ getSoundManager()->playSoundFile("MUSSELL.SND", kSoundTypeNIS | kVolumeFull, 0, 0);
+
+ while (!exitFlag && frameIndex < 35) {
+ Slot *soundSlot = getSoundManager()->_soundCache;
+ int frameDuration = 180;
+
+ if (soundSlot) {
+ while (soundSlot && soundSlot->getTag() != kSoundTagNIS)
+ soundSlot = soundSlot->getNext();
+
+ if (soundSlot)
+ frameDuration = 2 * soundSlot->getBlockCount() / (35 - frameIndex);
+ }
+
+ int targetTime = getSoundFrameCounter() + frameDuration;
+ int bgResult = getArchiveManager()->loadBG(backgroundNames[frameIndex]);
+
+ if (bgResult < 0) {
+ exitFlag = true;
+ break;
+ }
+
+ TBM *renderBox = (bgResult == 0) ? &getGraphicsManager()->_renderBox1 : &getGraphicsManager()->_renderBox2;
+ getGraphicsManager()->stepDissolve(renderBox);
+
+ while (getSoundFrameCounter() < targetTime && !exitFlag) {
+ if (wonGame) {
+ if (mouseHasRightClicked()) {
+ exitFlag = true;
+ }
+ } else {
+ if (getMenu()->getEggTimerDelta())
+ exitFlag = true;
+ }
+
+ if (!exitFlag) {
+ getMessageManager()->process();
+ getSoundManager()->soundThread();
+ getSubtitleManager()->subThread();
+ handleEvents();
+ }
+ }
+
+ frameIndex++;
+ }
+
+ getGraphicsManager()->setMouseDrawable(savedMouseState);
+ getMenu()->setEggTimerDelta(2700);
+
+ return exitFlag;
+}
+
+void LastExpressEngine::demoEndingMouse(Event *event) {
+ if (event->flags || ABS<int32>((int32)event->x - _cursorX) > 5 || ABS<int32>((int32)event->y - _cursorY) > 5)
+ getMenu()->setEggTimerDelta(2700);
+}
+
+void LastExpressEngine::demoEndingTimer(Event *event) {
+ setEventTickInternal(false);
+}
+
} // End of namespace LastExpress
diff --git a/engines/lastexpress/game/events.cpp b/engines/lastexpress/game/events.cpp
index 1ff07655c0c..3fa646a21d5 100644
--- a/engines/lastexpress/game/events.cpp
+++ b/engines/lastexpress/game/events.cpp
@@ -69,9 +69,12 @@ void MessageManager::addEvent(int channel, int x, int y, int flags) {
_engine->setEventTickInternal(true);
} else if (channel == 1) {
if ((flags & 1) != 0) {
- _engine->mouseSetLeftClicked(true);
-
+ // Originally _engine->mouseSetLeftClicked(true); was called from here,
+ // but it's been moved under the "if" because this lead to fake double
+ // clicks when registering mouse movement events (which are re-paired
+ // with RMOUSE and LMOUSE flags when sent to the engine via this function).
if (!_systemEventLeftMouseDown) {
+ _engine->mouseSetLeftClicked(true);
flags |= 0x8;
_systemEventLeftMouseDown = true;
@@ -88,9 +91,12 @@ void MessageManager::addEvent(int channel, int x, int y, int flags) {
}
if ((flags & 2) != 0) {
- _engine->_mouseHasRightClicked = true;
-
+ // Originally _engine->mouseSetRightClicked(true); was called from here,
+ // but it's been moved under the "if" because this lead to fake double
+ // clicks when registering mouse movement events (which are re-paired
+ // with RMOUSE and LMOUSE flags when sent to the engine via this function).
if (!_systemEventRightMouseDown) {
+ _engine->mouseSetRightClicked(true);
flags |= 0x10;
_systemEventRightMouseDown = true;
}
diff --git a/engines/lastexpress/game/logic.cpp b/engines/lastexpress/game/logic.cpp
index dafc8b2e116..6f40cc9d572 100644
--- a/engines/lastexpress/game/logic.cpp
+++ b/engines/lastexpress/game/logic.cpp
@@ -617,24 +617,28 @@ void LogicManager::sendAll(int character, int action, ConsCallParam param) {
void LogicManager::fedEx(int sender, int receiver, int action, ConsCallParam param) {
Message msg;
- msg.sender = sender;
- msg.receiver = receiver;
- msg.action = action;
- msg.param = param;
- _engine->getMessageManager()->forceMessage(&msg);
+ if (!_engine->isDemo() || _engine->_navigationEngineIsRunning) {
+ msg.sender = sender;
+ msg.receiver = receiver;
+ msg.action = action;
+ msg.param = param;
+ _engine->getMessageManager()->forceMessage(&msg);
+ }
}
void LogicManager::forceJump(int character, void (LogicManager::*functionPointer)(CONS_PARAMS)) {
- getCharacter(character).currentCall = 0;
- getCharacter(character).inventoryItem = 0;
+ if (!_engine->isDemo() || _engine->_navigationEngineIsRunning) {
+ getCharacter(character).currentCall = 0;
+ getCharacter(character).inventoryItem = 0;
- if (whoRunningDialog(character))
- endDialog(character);
+ if (whoRunningDialog(character))
+ endDialog(character);
- endGraphics(character);
- releaseEverything(character);
+ endGraphics(character);
+ releaseEverything(character);
- (this->*functionPointer)(0, 0, 0, 0);
+ (this->*functionPointer)(0, 0, 0, 0);
+ }
}
void LogicManager::autoMessage(int character, int action, ConsCallParam param) {
@@ -665,10 +669,14 @@ bool LogicManager::doAutoMessage(Message *msg) {
}
void LogicManager::save(int character, int type, int event) {
- _engine->getVCR()->writeSavePoint(type, character, event);
+ if (!_engine->isDemo() || _engine->_navigationEngineIsRunning)
+ _engine->getVCR()->writeSavePoint(type, character, event);
}
void LogicManager::endGame(int type, int value, int sceneIndex, bool showScene) {
+ if (_engine->isDemo() && !_engine->_navigationEngineIsRunning)
+ return;
+
_engine->getSoundManager()->endAmbient();
_engine->getOtisManager()->wipeAllGSysInfo();
@@ -717,13 +725,22 @@ void LogicManager::endGame(int type, int value, int sceneIndex, bool showScene)
}
void LogicManager::winGame() {
- _engine->getSoundManager()->endAmbient();
- playNIS(kEventFinalSequence);
- _engine->doCredits();
- _engine->getOtisManager()->wipeAllGSysInfo();
- _engine->getMessageManager()->reset();
- _engine->_stopUpdatingCharacters = true;
- _engine->getMenu()->doEgg(false, 0, 0);
+ if (_engine->isDemo() && _engine->_navigationEngineIsRunning) {
+ _engine->getSoundManager()->endAmbient();
+ _engine->getOtisManager()->wipeAllGSysInfo();
+ _engine->getMessageManager()->reset();
+ _engine->_stopUpdatingCharacters = true;
+ _engine->demoEnding(true);
+ _engine->getMenu()->doEgg(false, 0, 0);
+ } else {
+ _engine->getSoundManager()->endAmbient();
+ playNIS(kEventFinalSequence);
+ _engine->doCredits();
+ _engine->getOtisManager()->wipeAllGSysInfo();
+ _engine->getMessageManager()->reset();
+ _engine->_stopUpdatingCharacters = true;
+ _engine->getMenu()->doEgg(false, 0, 0);
+ }
}
void LogicManager::killGracePeriod() {
@@ -1608,7 +1625,9 @@ int LogicManager::getBumpNode(int car, int position, int param) {
}
void LogicManager::bumpCath(int car, int position, int param) {
- bumpCathNode(getBumpNode(car, position, param));
+ if (!_engine->isDemo() || _engine->_navigationEngineIsRunning) {
+ bumpCathNode(getBumpNode(car, position, param));
+ }
}
bool LogicManager::obstacleBetween(int character1, int character2) {
@@ -2219,7 +2238,9 @@ int LogicManager::getSmartBumpNode(int node) {
}
void LogicManager::smartBumpCath() {
- bumpCathNode(getSmartBumpNode(_trainNodeIndex));
+ if (!_engine->isDemo() || _engine->_navigationEngineIsRunning) {
+ bumpCathNode(getSmartBumpNode(_trainNodeIndex));
+ }
}
void LogicManager::bumpCathCloseUp(int item) {
@@ -2236,10 +2257,17 @@ void LogicManager::bumpCathCloseUp(int item) {
}
int LogicManager::playFight(int fightId) {
- return _engine->doFight(fightId);
+ if (!_engine->isDemo() || _engine->_navigationEngineIsRunning) {
+ return _engine->doFight(fightId);
+ } else {
+ return 1;
+ }
}
void LogicManager::playNIS(int nisId) {
+ if (_engine->isDemo() && !_engine->_navigationEngineIsRunning)
+ return;
+
char filename[16];
bool videoWithoutFade = false;
@@ -2290,6 +2318,9 @@ void LogicManager::playNIS(int nisId) {
}
void LogicManager::cleanNIS() {
+ if (_engine->isDemo() && !_engine->_navigationEngineIsRunning)
+ return;
+
if (_useLastSavedNodeIndex) {
int largeItem = findLargeItem();
_useLastSavedNodeIndex = 0;
@@ -2612,12 +2643,12 @@ void LogicManager::playChrExcuseMe(int character, int receivingCharacter, int vo
if (receivingCharacter == kCharacterCath && _gameProgress[kProgressJacket] == 2 && rnd(2) != 0) {
if (isNight()) {
if (_gameProgress[kProgressField18] != 2) {
- playDialog(0, "CON1110E", -1, 0);
+ playDialog(0, "CON1110E", volume, 0);
} else {
- playDialog(0, "CON1110F", -1, 0);
+ playDialog(0, "CON1110F", volume, 0);
}
} else {
- playDialog(0, "CON1110D", -1, 0);
+ playDialog(0, "CON1110D", volume, 0);
}
} else {
switch (rnd(3)) {
@@ -2700,11 +2731,11 @@ void LogicManager::playChrExcuseMe(int character, int receivingCharacter, int vo
if (isFemale(receivingCharacter)) {
switch (rnd(2)) {
case 0:
- playDialog(0, "TRA1113A", -1, 0);
+ playDialog(0, "TRA1113A", volume, 0);
break;
case 1:
default:
- playDialog(0, "TRA1113B", -1, 0);
+ playDialog(0, "TRA1113B", volume, 0);
}
} else {
playDialog(0, "TRA1112", volume, 0);
@@ -3997,73 +4028,99 @@ void LogicManager::makeAllJump(int chapter) {
_softBlockedEntitiesBits[i] = 0;
}
- // Originally the game checked only for kSoundTagMenu;
+ // Originally the first edition of the game checked only for kSoundTagMenu;
// I added kSoundTagLink since otherwise the music coda playing after
// the very first cutscene is immediately killed by this function, which
// is also happening in the original. But the latter gets the news of the
// sound getting killed a bit later, so we manage to hear it anyway; not
// here though...
- _engine->getSoundManager()->killAllExcept(kSoundTagMenu, kSoundTagLink, 0, 0, 0, 0, 0);
- }
-
- CONS_Anna(chapter);
- CONS_August(chapter);
- CONS_Cond1(chapter);
- CONS_Cond2(chapter);
- CONS_HeadWait(chapter);
- CONS_Waiter1(chapter);
- CONS_Waiter2(chapter);
- CONS_Cook(chapter);
- CONS_TrainM(chapter);
- CONS_Tatiana(chapter);
- CONS_Vassili(chapter);
- CONS_Alexei(chapter);
- CONS_Abbot(chapter);
- CONS_Milos(chapter);
- CONS_Vesna(chapter);
- CONS_Ivo(chapter);
- CONS_Salko(chapter);
- CONS_Rebecca(chapter);
- CONS_Sophie(chapter);
- CONS_Francois(chapter);
- CONS_Madame(chapter);
- CONS_Monsieur(chapter);
- CONS_Kronos(chapter);
- CONS_Kahina(chapter);
- CONS_Mahmud(chapter);
- CONS_Yasmin(chapter);
- CONS_Hadija(chapter);
- CONS_Alouan(chapter);
- CONS_Police(chapter);
- CONS_Max(chapter);
-
- if (chapter < 2)
- CONS_Master(chapter);
-
- CONS_Clerk(chapter);
- CONS_TableA(chapter);
- CONS_TableB(chapter);
- CONS_TableC(chapter);
- CONS_TableD(chapter);
- CONS_TableE(chapter);
- CONS_TableF(chapter);
- CONS_Mitchell(chapter);
+ //
+ // Incidentally this is what the demo and subsequent releases do.
+ if (chapter == 1 || chapter == 3) {
+ _engine->getSoundManager()->killAllExcept(kSoundTagMenu, kSoundTagLink, 0, 0, 0, 0, 0);
+ } else {
+ _engine->getSoundManager()->killAllExcept(kSoundTagMenu, 0, 0, 0, 0, 0, 0);
+ }
+ }
+
+ if (_engine->isDemo()) {
+ CONS_DemoAnna(chapter);
+ CONS_DemoAugust(chapter);
+ CONS_DemoCond2(chapter);
+ CONS_DemoWaiter1(chapter);
+ CONS_DemoTatiana(chapter);
+ CONS_DemoAbbot(chapter);
+ CONS_DemoVesna(chapter);
+ CONS_DemoIvo(chapter);
+ CONS_DemoRebecca(chapter);
+ CONS_DemoFrancois(chapter);
+ CONS_DemoMadame(chapter);
+ CONS_DemoMonsieur(chapter);
+
+ if (chapter < 2)
+ CONS_DemoMaster(chapter);
+
+ CONS_DemoTableA(chapter);
+ CONS_DemoTableB(chapter);
+ CONS_DemoTableC(chapter);
+ CONS_DemoTableD(chapter);
+ CONS_DemoTableE(chapter);
+ CONS_DemoTableF(chapter);
+ } else {
+ CONS_Anna(chapter);
+ CONS_August(chapter);
+ CONS_Cond1(chapter);
+ CONS_Cond2(chapter);
+ CONS_HeadWait(chapter);
+ CONS_Waiter1(chapter);
+ CONS_Waiter2(chapter);
+ CONS_Cook(chapter);
+ CONS_TrainM(chapter);
+ CONS_Tatiana(chapter);
+ CONS_Vassili(chapter);
+ CONS_Alexei(chapter);
+ CONS_Abbot(chapter);
+ CONS_Milos(chapter);
+ CONS_Vesna(chapter);
+ CONS_Ivo(chapter);
+ CONS_Salko(chapter);
+ CONS_Rebecca(chapter);
+ CONS_Sophie(chapter);
+ CONS_Francois(chapter);
+ CONS_Madame(chapter);
+ CONS_Monsieur(chapter);
+ CONS_Kronos(chapter);
+ CONS_Kahina(chapter);
+ CONS_Mahmud(chapter);
+ CONS_Yasmin(chapter);
+ CONS_Hadija(chapter);
+ CONS_Alouan(chapter);
+ CONS_Police(chapter);
+ CONS_Max(chapter);
+
+ if (chapter < 2)
+ CONS_Master(chapter);
+
+ CONS_Clerk(chapter);
+ CONS_TableA(chapter);
+ CONS_TableB(chapter);
+ CONS_TableC(chapter);
+ CONS_TableD(chapter);
+ CONS_TableE(chapter);
+ CONS_TableF(chapter);
+ CONS_Mitchell(chapter);
+ }
}
void LogicManager::CONS_All(bool isFirstChapter, int character) {
- bool bumpCathNodeFlag = false;
-
makeAllJump(isFirstChapter ? 1 : 0);
- if (!isFirstChapter) {
- _flagBumpCathNode = false;
- if (character) {
- fedEx(kCharacterCath, character, 0, 0);
- bumpCathNodeFlag = _flagBumpCathNode;
- }
+ _flagBumpCathNode = false;
+
+ if (!isFirstChapter && character) {
+ fedEx(kCharacterCath, character, 0, 0);
}
- _flagBumpCathNode = bumpCathNodeFlag;
if (!_flagBumpCathNode)
bumpCathNode(_trainNodeIndex);
diff --git a/engines/lastexpress/game/logic.h b/engines/lastexpress/game/logic.h
index 4f6cee324ea..3fed5222720 100644
--- a/engines/lastexpress/game/logic.h
+++ b/engines/lastexpress/game/logic.h
@@ -329,6 +329,7 @@ private:
int _navigationItemBrightness = 0;
int _navigationItemBrighnessStep = 1;
int32 _eventTicksUntilNextSavePoint = 450;
+ int32 _eventTicksSinceLastDemoSavegame = 150;
bool _actionJustPerformed = false;
bool _mitchellFlag = false;
@@ -5580,6 +5581,716 @@ private:
_tablesFuncNames,
_mitchellFuncNames
};
+
+
+ ////////////////////////////////////
+ // DEMO FUNCTIONS
+ ////////////////////////////////////
+
+ // CHAPTER SELECTOR
+ void CONS_DemoAbbot(int chapter);
+ void CONS_DemoAnna(int chapter);
+ void CONS_DemoAugust(int chapter);
+ void CONS_DemoCond2(int chapter);
+ void CONS_DemoFrancois(int chapter);
+ void CONS_DemoIvo(int chapter);
+ void CONS_DemoMadame(int chapter);
+ void CONS_DemoMaster(int chapter);
+ void CONS_DemoMonsieur(int chapter);
+ void CONS_DemoRebecca(int chapter);
+ void CONS_DemoTableA(int chapter);
+ void CONS_DemoTableB(int chapter);
+ void CONS_DemoTableC(int chapter);
+ void CONS_DemoTableD(int chapter);
+ void CONS_DemoTableE(int chapter);
+ void CONS_DemoTableF(int chapter);
+ void CONS_DemoTatiana(int chapter);
+ void CONS_DemoVesna(int chapter);
+ void CONS_DemoWaiter1(int chapter);
+
+ // DEMO ANNA EVENTS
+
+ void DemoAnnaCall(CALL_PARAMS);
+
+ void CONS_DemoAnna_DoSeqOtis(CONS_PARAMS);
+ void HAND_DemoAnna_DoSeqOtis(HAND_PARAMS);
+
+ void CONS_DemoAnna_FinishSeqOtis(CONS_PARAMS);
+ void HAND_DemoAnna_FinishSeqOtis(HAND_PARAMS);
+
+ void CONS_DemoAnna_DoCorrOtis(CONS_PARAMS);
+ void HAND_DemoAnna_DoCorrOtis(HAND_PARAMS);
+
+ void CONS_DemoAnna_WaitRCClear(CONS_PARAMS);
+ void HAND_DemoAnna_WaitRCClear(HAND_PARAMS);
+
+ void CONS_DemoAnna_SaveGame(CONS_PARAMS);
+ void HAND_DemoAnna_SaveGame(HAND_PARAMS);
+
+ void CONS_DemoAnna_DoWalk(CONS_PARAMS);
+ void HAND_DemoAnna_DoWalk(HAND_PARAMS);
+
+ void CONS_DemoAnna_Birth(CONS_PARAMS);
+ void HAND_DemoAnna_Birth(HAND_PARAMS);
+
+ void CONS_DemoAnna_GoBagg(CONS_PARAMS);
+ void HAND_DemoAnna_GoBagg(HAND_PARAMS);
+
+ void CONS_DemoAnna_InBagg(CONS_PARAMS);
+ void HAND_DemoAnna_InBagg(HAND_PARAMS);
+
+ void CONS_DemoAnna_DeadBagg(CONS_PARAMS);
+ void HAND_DemoAnna_DeadBagg(HAND_PARAMS);
+
+ void CONS_DemoAnna_BaggageFight(CONS_PARAMS);
+ void HAND_DemoAnna_BaggageFight(HAND_PARAMS);
+
+ void CONS_DemoAnna_StartPart2(CONS_PARAMS);
+ void HAND_DemoAnna_StartPart2(HAND_PARAMS);
+
+ void CONS_DemoAnna_StartPart3(CONS_PARAMS);
+ void HAND_DemoAnna_StartPart3(HAND_PARAMS);
+
+ void CONS_DemoAnna_StartPart4(CONS_PARAMS);
+ void HAND_DemoAnna_StartPart4(HAND_PARAMS);
+
+ void CONS_DemoAnna_StartPart5(CONS_PARAMS);
+ void HAND_DemoAnna_StartPart5(HAND_PARAMS);
+
+ Common::StringArray _demoAnnaFuncNames = {
+ "DoSeqOtis",
+ "FinishSeqOtis",
+ "DoCorrOtis",
+ "WaitRCClear",
+ "SaveGame",
+ "DoWalk",
+ "Birth",
+ "GoBagg",
+ "InBagg",
+ "DeadBagg",
+ "BaggageFight",
+ "StartPart2",
+ "StartPart3",
+ "StartPart4",
+ "StartPart5"
+ };
+
+
+ // DEMO ABBOT EVENTS
+
+ void DemoAbbotCall(CALL_PARAMS);
+
+ void CONS_DemoAbbot_DoWait(CONS_PARAMS);
+ void HAND_DemoAbbot_DoWait(HAND_PARAMS);
+
+ void CONS_DemoAbbot_DoJoinedSeqOtis(CONS_PARAMS);
+ void HAND_DemoAbbot_DoJoinedSeqOtis(HAND_PARAMS);
+
+ void CONS_DemoAbbot_WaitRCClear(CONS_PARAMS);
+ void HAND_DemoAbbot_WaitRCClear(HAND_PARAMS);
+
+ void CONS_DemoAbbot_Birth(CONS_PARAMS);
+ void HAND_DemoAbbot_Birth(HAND_PARAMS);
+
+ void CONS_DemoAbbot_StartPart2(CONS_PARAMS);
+ void HAND_DemoAbbot_StartPart2(HAND_PARAMS);
+
+ void CONS_DemoAbbot_StartPart3(CONS_PARAMS);
+ void HAND_DemoAbbot_StartPart3(HAND_PARAMS);
+
+ void CONS_DemoAbbot_StartPart4(CONS_PARAMS);
+ void HAND_DemoAbbot_StartPart4(HAND_PARAMS);
+
+ void CONS_DemoAbbot_StartPart5(CONS_PARAMS);
+ void HAND_DemoAbbot_StartPart5(HAND_PARAMS);
+
+ Common::StringArray _demoAbbotFuncNames = {
+ "DoWait",
+ "DoJoinedSeqOtis",
+ "WaitRCClear",
+ "Birth",
+ "StartPart2",
+ "StartPart3",
+ "StartPart4",
+ "StartPart5"
+ };
+
+
+ // DEMO AUGUST EVENTS
+
+ void DemoAugustCall(CALL_PARAMS);
+
+ void CONS_DemoAugust_SaveGame(CONS_PARAMS);
+ void HAND_DemoAugust_SaveGame(HAND_PARAMS);
+
+ void CONS_DemoAugust_Birth(CONS_PARAMS);
+ void HAND_DemoAugust_Birth(HAND_PARAMS);
+
+ void CONS_DemoAugust_StartPart2(CONS_PARAMS);
+ void HAND_DemoAugust_StartPart2(HAND_PARAMS);
+
+ void CONS_DemoAugust_StartPart3(CONS_PARAMS);
+ void HAND_DemoAugust_StartPart3(HAND_PARAMS);
+
+ void CONS_DemoAugust_StartPart4(CONS_PARAMS);
+ void HAND_DemoAugust_StartPart4(HAND_PARAMS);
+
+ void CONS_DemoAugust_StartPart5(CONS_PARAMS);
+ void HAND_DemoAugust_StartPart5(HAND_PARAMS);
+
+ Common::StringArray _demoAugustFuncNames = {
+ "SaveGame",
+ "Birth",
+ "StartPart2",
+ "StartPart3",
+ "StartPart4",
+ "StartPart5"
+ };
+
+
+ // DEMO COND2 EVENTS
+
+ void DemoCond2Call(CALL_PARAMS);
+
+ void CONS_DemoCond2_DoSeqOtis(CONS_PARAMS);
+ void HAND_DemoCond2_DoSeqOtis(HAND_PARAMS);
+
+ void CONS_DemoCond2_FinishSeqOtis(CONS_PARAMS);
+ void HAND_DemoCond2_FinishSeqOtis(HAND_PARAMS);
+
+ void CONS_DemoCond2_SitDown(CONS_PARAMS);
+ void HAND_DemoCond2_SitDown(HAND_PARAMS);
+
+ void CONS_DemoCond2_Birth(CONS_PARAMS);
+ void HAND_DemoCond2_Birth(HAND_PARAMS);
+
+ void CONS_DemoCond2_StartPart2(CONS_PARAMS);
+ void HAND_DemoCond2_StartPart2(HAND_PARAMS);
+
+ void CONS_DemoCond2_StartPart3(CONS_PARAMS);
+ void HAND_DemoCond2_StartPart3(HAND_PARAMS);
+
+ void CONS_DemoCond2_StartPart4(CONS_PARAMS);
+ void HAND_DemoCond2_StartPart4(HAND_PARAMS);
+
+ void CONS_DemoCond2_StartPart5(CONS_PARAMS);
+ void HAND_DemoCond2_StartPart5(HAND_PARAMS);
+
+ Common::StringArray _demoCond2FuncNames = {
+ "DoSeqOtis",
+ "FinishSeqOtis",
+ "SitDown",
+ "Birth",
+ "StartPart2",
+ "StartPart3",
+ "StartPart4",
+ "StartPart5"
+ };
+
+
+ // DEMO FRANCOIS EVENTS
+
+ void DemoFrancoisCall(CALL_PARAMS);
+
+ void CONS_DemoFrancois_DoSeqOtis(CONS_PARAMS);
+ void HAND_DemoFrancois_DoSeqOtis(HAND_PARAMS);
+
+ void CONS_DemoFrancois_SaveGame(CONS_PARAMS);
+ void HAND_DemoFrancois_SaveGame(HAND_PARAMS);
+
+ void CONS_DemoFrancois_Birth(CONS_PARAMS);
+ void HAND_DemoFrancois_Birth(HAND_PARAMS);
+
+ void CONS_DemoFrancois_StartPart2(CONS_PARAMS);
+ void HAND_DemoFrancois_StartPart2(HAND_PARAMS);
+
+ void CONS_DemoFrancois_StartPart3(CONS_PARAMS);
+ void HAND_DemoFrancois_StartPart3(HAND_PARAMS);
+
+ void CONS_DemoFrancois_StartPart4(CONS_PARAMS);
+ void HAND_DemoFrancois_StartPart4(HAND_PARAMS);
+
+ void CONS_DemoFrancois_StartPart5(CONS_PARAMS);
+ void HAND_DemoFrancois_StartPart5(HAND_PARAMS);
+
+ Common::StringArray _demoFrancoisFuncNames = {
+ "DoSeqOtis",
+ "SaveGame",
+ "Birth",
+ "StartPart2",
+ "StartPart3",
+ "StartPart4",
+ "StartPart5"
+ };
+
+
+ // DEMO IVO EVENTS
+
+ void DemoIvoCall(CALL_PARAMS);
+
+ void CONS_DemoIvo_WaitRCClear(CONS_PARAMS);
+ void HAND_DemoIvo_WaitRCClear(HAND_PARAMS);
+
+ void CONS_DemoIvo_DoSeqOtis(CONS_PARAMS);
+ void HAND_DemoIvo_DoSeqOtis(HAND_PARAMS);
+
+ void CONS_DemoIvo_FinishSeqOtis(CONS_PARAMS);
+ void HAND_DemoIvo_FinishSeqOtis(HAND_PARAMS);
+
+ void CONS_DemoIvo_DoSplitOtis023A(CONS_PARAMS);
+ void HAND_DemoIvo_DoSplitOtis023A(HAND_PARAMS);
+
+ void CONS_DemoIvo_Birth(CONS_PARAMS);
+ void HAND_DemoIvo_Birth(HAND_PARAMS);
+
+ void CONS_DemoIvo_StartPart2(CONS_PARAMS);
+ void HAND_DemoIvo_StartPart2(HAND_PARAMS);
+
+ void CONS_DemoIvo_StartPart3(CONS_PARAMS);
+ void HAND_DemoIvo_StartPart3(HAND_PARAMS);
+
+ void CONS_DemoIvo_StartPart4(CONS_PARAMS);
+ void HAND_DemoIvo_StartPart4(HAND_PARAMS);
+
+ void CONS_DemoIvo_StartPart5(CONS_PARAMS);
+ void HAND_DemoIvo_StartPart5(HAND_PARAMS);
+
+ Common::StringArray _demoIvoFuncNames = {
+ "WaitRCClear",
+ "DoSeqOtis",
+ "FinishSeqOtis",
+ "DoSplitOtis023A",
+ "Birth",
+ "StartPart2",
+ "StartPart3",
+ "StartPart4",
+ "StartPart5"
+ };
+
+
+ // DEMO MADAME EVENTS
+
+ void DemoMadameCall(CALL_PARAMS);
+
+ void CONS_DemoMadame_DoDialog(CONS_PARAMS);
+ void HAND_DemoMadame_DoDialog(HAND_PARAMS);
+
+ void CONS_DemoMadame_Birth(CONS_PARAMS);
+ void HAND_DemoMadame_Birth(HAND_PARAMS);
+
+ void CONS_DemoMadame_StartPart2(CONS_PARAMS);
+ void HAND_DemoMadame_StartPart2(HAND_PARAMS);
+
+ void CONS_DemoMadame_StartPart3(CONS_PARAMS);
+ void HAND_DemoMadame_StartPart3(HAND_PARAMS);
+
+ void CONS_DemoMadame_StartPart4(CONS_PARAMS);
+ void HAND_DemoMadame_StartPart4(HAND_PARAMS);
+
+ void CONS_DemoMadame_StartPart5(CONS_PARAMS);
+ void HAND_DemoMadame_StartPart5(HAND_PARAMS);
+
+ Common::StringArray _demoMadameFuncNames = {
+ "DoDialog",
+ "Birth",
+ "StartPart2",
+ "StartPart3",
+ "StartPart4",
+ "StartPart5"
+ };
+
+
+ // DEMO MASTER EVENTS
+
+ void DemoMasterCall(CALL_PARAMS);
+
+ void CONS_DemoMaster_SaveGame(CONS_PARAMS);
+ void HAND_DemoMaster_SaveGame(HAND_PARAMS);
+
+ void CONS_DemoMaster_Birth(CONS_PARAMS);
+ void HAND_DemoMaster_Birth(HAND_PARAMS);
+
+ void CONS_DemoMaster_StartPart2(CONS_PARAMS);
+ void HAND_DemoMaster_StartPart2(HAND_PARAMS);
+
+ void CONS_DemoMaster_StartPart3(CONS_PARAMS);
+ void HAND_DemoMaster_StartPart3(HAND_PARAMS);
+
+ void CONS_DemoMaster_StartPart4(CONS_PARAMS);
+ void HAND_DemoMaster_StartPart4(HAND_PARAMS);
+
+ void CONS_DemoMaster_StartPart5(CONS_PARAMS);
+ void HAND_DemoMaster_StartPart5(HAND_PARAMS);
+
+ Common::StringArray _demoMasterFuncNames = {
+ "SaveGame",
+ "Birth",
+ "StartPart2",
+ "StartPart3",
+ "StartPart4",
+ "StartPart5"
+ };
+
+
+ // DEMO MONSIEUR EVENTS
+
+ void DemoMonsieurCall(CALL_PARAMS);
+
+ void CONS_DemoMonsieur_Birth(CONS_PARAMS);
+ void HAND_DemoMonsieur_Birth(HAND_PARAMS);
+
+ void CONS_DemoMonsieur_StartPart2(CONS_PARAMS);
+ void HAND_DemoMonsieur_StartPart2(HAND_PARAMS);
+
+ void CONS_DemoMonsieur_StartPart3(CONS_PARAMS);
+ void HAND_DemoMonsieur_StartPart3(HAND_PARAMS);
+
+ void CONS_DemoMonsieur_StartPart4(CONS_PARAMS);
+ void HAND_DemoMonsieur_StartPart4(HAND_PARAMS);
+
+ void CONS_DemoMonsieur_StartPart5(CONS_PARAMS);
+ void HAND_DemoMonsieur_StartPart5(HAND_PARAMS);
+
+ Common::StringArray _demoMonsieurFuncNames = {
+ "Birth",
+ "StartPart2",
+ "StartPart3",
+ "StartPart4",
+ "StartPart5"
+ };
+
+
+ // DEMO REBECCA EVENTS
+
+ void DemoRebeccaCall(CALL_PARAMS);
+
+ void CONS_DemoRebecca_DoDialog(CONS_PARAMS);
+ void HAND_DemoRebecca_DoDialog(HAND_PARAMS);
+
+ void CONS_DemoRebecca_Birth(CONS_PARAMS);
+ void HAND_DemoRebecca_Birth(HAND_PARAMS);
+
+ void CONS_DemoRebecca_StartPart2(CONS_PARAMS);
+ void HAND_DemoRebecca_StartPart2(HAND_PARAMS);
+
+ void CONS_DemoRebecca_StartPart3(CONS_PARAMS);
+ void HAND_DemoRebecca_StartPart3(HAND_PARAMS);
+
+ void CONS_DemoRebecca_StartPart4(CONS_PARAMS);
+ void HAND_DemoRebecca_StartPart4(HAND_PARAMS);
+
+ void CONS_DemoRebecca_StartPart5(CONS_PARAMS);
+ void HAND_DemoRebecca_StartPart5(HAND_PARAMS);
+
+ Common::StringArray _demoRebeccaFuncNames = {
+ "DoDialog",
+ "Birth",
+ "StartPart2",
+ "StartPart3",
+ "StartPart4",
+ "StartPart5"
+ };
+
+
+ // DEMO TABLEA EVENTS
+
+ void CONS_DemoTableA_Birth(CONS_PARAMS);
+ void HAND_DemoTableA_Birth(HAND_PARAMS);
+
+ void CONS_DemoTableA_StartPart2(CONS_PARAMS);
+ void HAND_DemoTableA_StartPart2(HAND_PARAMS);
+
+ void CONS_DemoTableA_StartPart3(CONS_PARAMS);
+ void HAND_DemoTableA_StartPart3(HAND_PARAMS);
+
+ void CONS_DemoTableA_StartPart4(CONS_PARAMS);
+ void HAND_DemoTableA_StartPart4(HAND_PARAMS);
+
+ void CONS_DemoTableA_StartPart5(CONS_PARAMS);
+ void HAND_DemoTableA_StartPart5(HAND_PARAMS);
+
+
+ // DEMO TABLEB EVENTS
+
+ void CONS_DemoTableB_Birth(CONS_PARAMS);
+ void HAND_DemoTableB_Birth(HAND_PARAMS);
+
+ void CONS_DemoTableB_StartPart2(CONS_PARAMS);
+ void HAND_DemoTableB_StartPart2(HAND_PARAMS);
+
+ void CONS_DemoTableB_StartPart3(CONS_PARAMS);
+ void HAND_DemoTableB_StartPart3(HAND_PARAMS);
+
+ void CONS_DemoTableB_StartPart4(CONS_PARAMS);
+ void HAND_DemoTableB_StartPart4(HAND_PARAMS);
+
+ void CONS_DemoTableB_StartPart5(CONS_PARAMS);
+ void HAND_DemoTableB_StartPart5(HAND_PARAMS);
+
+
+ // DEMO TABLEC EVENTS
+
+ void CONS_DemoTableC_Birth(CONS_PARAMS);
+ void HAND_DemoTableC_Birth(HAND_PARAMS);
+
+ void CONS_DemoTableC_StartPart2(CONS_PARAMS);
+ void HAND_DemoTableC_StartPart2(HAND_PARAMS);
+
+ void CONS_DemoTableC_StartPart3(CONS_PARAMS);
+ void HAND_DemoTableC_StartPart3(HAND_PARAMS);
+
+ void CONS_DemoTableC_StartPart4(CONS_PARAMS);
+ void HAND_DemoTableC_StartPart4(HAND_PARAMS);
+
+ void CONS_DemoTableC_StartPart5(CONS_PARAMS);
+ void HAND_DemoTableC_StartPart5(HAND_PARAMS);
+
+
+ // DEMO TABLED EVENTS
+
+ void CONS_DemoTableD_Birth(CONS_PARAMS);
+ void HAND_DemoTableD_Birth(HAND_PARAMS);
+
+ void CONS_DemoTableD_StartPart2(CONS_PARAMS);
+ void HAND_DemoTableD_StartPart2(HAND_PARAMS);
+
+ void CONS_DemoTableD_StartPart3(CONS_PARAMS);
+ void HAND_DemoTableD_StartPart3(HAND_PARAMS);
+
+ void CONS_DemoTableD_StartPart4(CONS_PARAMS);
+ void HAND_DemoTableD_StartPart4(HAND_PARAMS);
+
+ void CONS_DemoTableD_StartPart5(CONS_PARAMS);
+ void HAND_DemoTableD_StartPart5(HAND_PARAMS);
+
+
+ // DEMO TABLEE EVENTS
+
+ void CONS_DemoTableE_Birth(CONS_PARAMS);
+ void HAND_DemoTableE_Birth(HAND_PARAMS);
+
+ void CONS_DemoTableE_StartPart2(CONS_PARAMS);
+ void HAND_DemoTableE_StartPart2(HAND_PARAMS);
+
+ void CONS_DemoTableE_StartPart3(CONS_PARAMS);
+ void HAND_DemoTableE_StartPart3(HAND_PARAMS);
+
+ void CONS_DemoTableE_StartPart4(CONS_PARAMS);
+ void HAND_DemoTableE_StartPart4(HAND_PARAMS);
+
+ void CONS_DemoTableE_StartPart5(CONS_PARAMS);
+ void HAND_DemoTableE_StartPart5(HAND_PARAMS);
+
+
+ // DEMO TABLEF EVENTS
+
+ void CONS_DemoTableF_Birth(CONS_PARAMS);
+ void HAND_DemoTableF_Birth(HAND_PARAMS);
+
+ void CONS_DemoTableF_StartPart2(CONS_PARAMS);
+ void HAND_DemoTableF_StartPart2(HAND_PARAMS);
+
+ void CONS_DemoTableF_StartPart3(CONS_PARAMS);
+ void HAND_DemoTableF_StartPart3(HAND_PARAMS);
+
+ void CONS_DemoTableF_StartPart4(CONS_PARAMS);
+ void HAND_DemoTableF_StartPart4(HAND_PARAMS);
+
+ void CONS_DemoTableF_StartPart5(CONS_PARAMS);
+ void HAND_DemoTableF_StartPart5(HAND_PARAMS);
+
+ Common::StringArray _demoTablesFuncNames = {
+ "Birth",
+ "StartPart2",
+ "StartPart3",
+ "StartPart4",
+ "StartPart5"
+ };
+
+
+ // DEMO TATIANA EVENTS
+
+ void CONS_DemoTatiana_Birth(CONS_PARAMS);
+ void HAND_DemoTatiana_Birth(HAND_PARAMS);
+
+ void CONS_DemoTatiana_StartPart2(CONS_PARAMS);
+ void HAND_DemoTatiana_StartPart2(HAND_PARAMS);
+
+ void CONS_DemoTatiana_StartPart3(CONS_PARAMS);
+ void HAND_DemoTatiana_StartPart3(HAND_PARAMS);
+
+ void CONS_DemoTatiana_StartPart4(CONS_PARAMS);
+ void HAND_DemoTatiana_StartPart4(HAND_PARAMS);
+
+ void CONS_DemoTatiana_StartPart5(CONS_PARAMS);
+ void HAND_DemoTatiana_StartPart5(HAND_PARAMS);
+
+ Common::StringArray _demoTatianaFuncNames = {
+ "Birth",
+ "StartPart2",
+ "StartPart3",
+ "StartPart4",
+ "StartPart5"
+ };
+
+
+ // DEMO VESNA EVENTS
+
+ void DemoVesnaCall(CALL_PARAMS);
+
+ void CONS_DemoVesna_DoCorrOtis(CONS_PARAMS);
+ void HAND_DemoVesna_DoCorrOtis(HAND_PARAMS);
+
+ void CONS_DemoVesna_DoSeqOtis(CONS_PARAMS);
+ void HAND_DemoVesna_DoSeqOtis(HAND_PARAMS);
+
+ void CONS_DemoVesna_DoWalk(CONS_PARAMS);
+ void HAND_DemoVesna_DoWalk(HAND_PARAMS);
+
+ void CONS_DemoVesna_WaitRCClear(CONS_PARAMS);
+ void HAND_DemoVesna_WaitRCClear(HAND_PARAMS);
+
+ void CONS_DemoVesna_FinishSeqOtis(CONS_PARAMS);
+ void HAND_DemoVesna_FinishSeqOtis(HAND_PARAMS);
+
+ void CONS_DemoVesna_Birth(CONS_PARAMS);
+ void HAND_DemoVesna_Birth(HAND_PARAMS);
+
+ void CONS_DemoVesna_InComp(CONS_PARAMS);
+ void HAND_DemoVesna_InComp(HAND_PARAMS);
+
+ void CONS_DemoVesna_KillAnna(CONS_PARAMS);
+ void HAND_DemoVesna_KillAnna(HAND_PARAMS);
+
+ void CONS_DemoVesna_StartPart2(CONS_PARAMS);
+ void HAND_DemoVesna_StartPart2(HAND_PARAMS);
+
+ void CONS_DemoVesna_StartPart3(CONS_PARAMS);
+ void HAND_DemoVesna_StartPart3(HAND_PARAMS);
+
+ void CONS_DemoVesna_StartPart4(CONS_PARAMS);
+ void HAND_DemoVesna_StartPart4(HAND_PARAMS);
+
+ void CONS_DemoVesna_StartPart5(CONS_PARAMS);
+ void HAND_DemoVesna_StartPart5(HAND_PARAMS);
+
+ Common::StringArray _demoVesnaFuncNames = {
+ "DoCorrOtis",
+ "DoSeqOtis",
+ "DoWalk",
+ "WaitRCClear",
+ "FinishSeqOtis",
+ "Birth",
+ "InComp",
+ "KillAnna",
+ "StartPart2",
+ "StartPart3",
+ "StartPart4",
+ "StartPart5"
+ };
+
+
+ // DEMO WAITER1 EVENTS
+
+ void DemoWaiter1Call(CALL_PARAMS);
+
+ void CONS_DemoWaiter1_DoSeqOtis(CONS_PARAMS);
+ void HAND_DemoWaiter1_DoSeqOtis(HAND_PARAMS);
+
+ void CONS_DemoWaiter1_Birth(CONS_PARAMS);
+ void HAND_DemoWaiter1_Birth(HAND_PARAMS);
+
+ void CONS_DemoWaiter1_RebeccaFeedUs(CONS_PARAMS);
+ void HAND_DemoWaiter1_RebeccaFeedUs(HAND_PARAMS);
+
+ void CONS_DemoWaiter1_StartPart2(CONS_PARAMS);
+ void HAND_DemoWaiter1_StartPart2(HAND_PARAMS);
+
+ void CONS_DemoWaiter1_StartPart3(CONS_PARAMS);
+ void HAND_DemoWaiter1_StartPart3(HAND_PARAMS);
+
+ void CONS_DemoWaiter1_StartPart4(CONS_PARAMS);
+ void HAND_DemoWaiter1_StartPart4(HAND_PARAMS);
+
+ void CONS_DemoWaiter1_StartPart5(CONS_PARAMS);
+ void HAND_DemoWaiter1_StartPart5(HAND_PARAMS);
+
+ Common::StringArray _demoWaiter1FuncNames = {
+ "DoSeqOtis",
+ "Birth",
+ "RebeccaFeedUs",
+ "StartPart2",
+ "StartPart3",
+ "StartPart4",
+ "StartPart5"
+ };
+
+
+ static void (LogicManager::*_functionsDemoAbbot[])(HAND_PARAMS);
+ static void (LogicManager::*_functionsDemoAnna[])(HAND_PARAMS);
+ static void (LogicManager::*_functionsDemoAugust[])(HAND_PARAMS);
+ static void (LogicManager::*_functionsDemoCond2[])(HAND_PARAMS);
+ static void (LogicManager::*_functionsDemoFrancois[])(HAND_PARAMS);
+ static void (LogicManager::*_functionsDemoIvo[])(HAND_PARAMS);
+ static void (LogicManager::*_functionsDemoMadame[])(HAND_PARAMS);
+ static void (LogicManager::*_functionsDemoMaster[])(HAND_PARAMS);
+ static void (LogicManager::*_functionsDemoMonsieur[])(HAND_PARAMS);
+ static void (LogicManager::*_functionsDemoRebecca[])(HAND_PARAMS);
+ static void (LogicManager::*_functionsDemoSophie[])(HAND_PARAMS);
+ static void (LogicManager::*_functionsDemoTableA[])(HAND_PARAMS);
+ static void (LogicManager::*_functionsDemoTableB[])(HAND_PARAMS);
+ static void (LogicManager::*_functionsDemoTableC[])(HAND_PARAMS);
+ static void (LogicManager::*_functionsDemoTableD[])(HAND_PARAMS);
+ static void (LogicManager::*_functionsDemoTableE[])(HAND_PARAMS);
+ static void (LogicManager::*_functionsDemoTableF[])(HAND_PARAMS);
+ static void (LogicManager::*_functionsDemoTatiana[])(HAND_PARAMS);
+ static void (LogicManager::*_functionsDemoVesna[])(HAND_PARAMS);
+ static void (LogicManager::*_functionsDemoWaiter1[])(HAND_PARAMS);
+
+
+ // For the debugger
+ Common::Array<Common::StringArray> _demoFuncNames = {
+ _cathFuncNames,
+ _demoAnnaFuncNames,
+ _demoAugustFuncNames,
+ _cathFuncNames,
+ _demoCond2FuncNames,
+ _cathFuncNames,
+ _demoWaiter1FuncNames,
+ _cathFuncNames,
+ _cathFuncNames,
+ _cathFuncNames,
+ _demoTatianaFuncNames,
+ _cathFuncNames,
+ _cathFuncNames,
+ _demoAbbotFuncNames,
+ _cathFuncNames,
+ _demoVesnaFuncNames,
+ _demoIvoFuncNames,
+ _cathFuncNames,
+ _cathFuncNames,
+ _cathFuncNames,
+ _demoFrancoisFuncNames,
+ _demoMadameFuncNames,
+ _demoMonsieurFuncNames,
+ _demoRebeccaFuncNames,
+ _cathFuncNames,
+ _cathFuncNames,
+ _cathFuncNames,
+ _cathFuncNames,
+ _cathFuncNames,
+ _cathFuncNames,
+ _cathFuncNames,
+ _demoMasterFuncNames,
+ _cathFuncNames,
+ _demoTablesFuncNames,
+ _demoTablesFuncNames,
+ _demoTablesFuncNames,
+ _demoTablesFuncNames,
+ _demoTablesFuncNames,
+ _demoTablesFuncNames,
+ _cathFuncNames
+ };
};
} // End of namespace LastExpress
diff --git a/engines/lastexpress/game/navigation.cpp b/engines/lastexpress/game/navigation.cpp
index 5ad4d3bbffb..8f380cce3a4 100644
--- a/engines/lastexpress/game/navigation.cpp
+++ b/engines/lastexpress/game/navigation.cpp
@@ -253,13 +253,23 @@ void LogicManager::nodeStepTimer(Event *event) {
_gameTime += ticks * _gameTimeTicksDelta;
if (_gameTimeTicksDelta) {
- if (!_eventTicksUntilNextSavePoint--) {
- _eventTicksUntilNextSavePoint = 450;
- _engine->getVCR()->writeSavePoint(4, 31, 0);
- }
+ if (_engine->isDemo()) {
+ if (!_eventTicksSinceLastDemoSavegame--) {
+ _eventTicksSinceLastDemoSavegame = 150;
+ _engine->getVCR()->writeSavePoint(4, 31, 0);
+ }
+
+ if ((_currentGameSessionTicks - _lastSavegameSessionTicks) > 450)
+ _engine->getVCR()->writeSavePoint(5, 31, 0);
+ } else {
+ if (!_eventTicksUntilNextSavePoint--) {
+ _eventTicksUntilNextSavePoint = 450;
+ _engine->getVCR()->writeSavePoint(4, 31, 0);
+ }
- if ((_currentGameSessionTicks - _lastSavegameSessionTicks) > 2700)
- _engine->getVCR()->writeSavePoint(5, 31, 0);
+ if ((_currentGameSessionTicks - _lastSavegameSessionTicks) > 2700)
+ _engine->getVCR()->writeSavePoint(5, 31, 0);
+ }
}
}
@@ -290,7 +300,7 @@ void LogicManager::nodeStepTimer(Event *event) {
}
if (_engine->_navigationEngineIsRunning) {
- if (_engine->_beetle)
+ if (!_engine->isDemo() && _engine->_beetle)
_engine->_beetle->tick();
_engine->getMessageManager()->flushTime();
@@ -530,7 +540,7 @@ void LogicManager::nodeStepMouse(Event *event) {
flag = false;
}
- if (actionLink.action == 43 &&
+ if (!_engine->isDemo() && actionLink.action == 43 &&
actionLink.param1 == _gameProgress[kProgressChapter] &&
(event->flags & 2) != 0) {
doF4();
diff --git a/engines/lastexpress/game/savegame.cpp b/engines/lastexpress/game/savegame.cpp
index 3d3f06f4dfe..80d29a35531 100644
--- a/engines/lastexpress/game/savegame.cpp
+++ b/engines/lastexpress/game/savegame.cpp
@@ -1332,8 +1332,8 @@ void SaveManager::validateSaveFile(bool flag) {
error("Out of memory");
}
- _engine->_savePointHeaders->gameTime = 1037700;
- _engine->_savePointHeaders->chapter = 1;
+ _engine->_savePointHeaders->gameTime = _engine->isDemo() ? 2241000 : 1037700;
+ _engine->_savePointHeaders->chapter = _engine->isDemo() ? 3 : 1;
}
saveFile->open(_engine->_savegameFilename, CVCRMODE_RB);
@@ -1359,8 +1359,8 @@ void SaveManager::validateSaveFile(bool flag) {
error("Out of memory");
}
- _engine->_savePointHeaders->gameTime = 1037700;
- _engine->_savePointHeaders->chapter = 1;
+ _engine->_savePointHeaders->gameTime = _engine->isDemo() ? 2241000 : 1037700;
+ _engine->_savePointHeaders->chapter = _engine->isDemo() ? 3 : 1;
}
for (int i = 0; fileSize >= sizeof(SVCRFileHeader) && i < fileHeader.numSavePoints; ++i) {
@@ -1445,8 +1445,8 @@ void SaveManager::validateSaveFile(bool flag) {
error("Out of memory");
}
- _engine->_savePointHeaders->gameTime = 1037700;
- _engine->_savePointHeaders->chapter = 1;
+ _engine->_savePointHeaders->gameTime = _engine->isDemo() ? 2241000 : 1037700;
+ _engine->_savePointHeaders->chapter = _engine->isDemo() ? 3 : 1;
}
int offset = sizeof(SVCRFileHeader);
diff --git a/engines/lastexpress/game/vcr.cpp b/engines/lastexpress/game/vcr.cpp
index 2a302ac393c..b5d9a9d914f 100644
--- a/engines/lastexpress/game/vcr.cpp
+++ b/engines/lastexpress/game/vcr.cpp
@@ -173,7 +173,7 @@ void VCR::shuffleGames() {
}
// If slot is empty, try to find a valid save to move here
- if (!slotFilled && currentSlot < ARRAYSIZE(_engine->_savegameNames)) {
+ if (!slotFilled && currentSlot < ARRAYSIZE(_engine->_savegameNames) - 1) {
for (const char **candidateFile = &_engine->_savegameNames[currentSlot + 1];
candidateFile < _engine->_savegameTempNames;
candidateFile++) {
@@ -213,7 +213,7 @@ void VCR::shuffleGames() {
}
// Set the current game color based on the most recent save...
- Common::String currentSaveName = _engine->getTargetName() + "-" + Common::String(_engine->_savegameNames[currentSlot]);
+ Common::String currentSaveName = _engine->getTargetName() + "-" + Common::String(_engine->_savegameNames[currentSlot % 6]);
if (_engine->_currentGameFileColorId == -1 || !_engine->getSaveFileManager()->exists(currentSaveName)) {
setCurrentGameColor(0); // Default color
int32 newestSaveSecs = 0;
@@ -258,11 +258,11 @@ void VCR::setCurrentGameColor(int index) {
}
void VCR::init(bool doSaveGameFlag, int saveType, int32 time) {
- int32 chosenTime;
int cdNum;
SVCRFileHeader header;
char path[80];
+ int32 chosenTime = 0;
bool flag = true;
bool writeSavePoint = false;
@@ -270,41 +270,62 @@ void VCR::init(bool doSaveGameFlag, int saveType, int32 time) {
_engine->_savegame->close();
if (_engine->_gracePeriodTimer) {
- chosenTime = 0;
-
- if (_engine->getLogicManager()->_gameProgress[kProgressChapter] <= 1) {
- cdNum = 1;
- } else {
- cdNum = (_engine->getLogicManager()->_gameProgress[kProgressChapter] > 3) + 2;
- }
-
- if (_engine->getArchiveManager()->isCDAvailable(cdNum, path, sizeof(path))) {
- writeSavePoint = 0;
+ if (_engine->isDemo()) {
+ time = 0;
_engine->_gracePeriodTimer = 0;
+ doSaveGameFlag = false;
if (_engine->getSaveManager()->removeSavegame(_engine->_savegameFilename)) {
error("Error deleting file \"%s\"", _engine->_savegameFilename);
}
- flag = false;
_engine->_currentSavePoint = _engine->_gracePeriodIndex;
+ flag = false;
_engine->_savegameFilename = _engine->_savegameNames[_engine->_currentGameFileColorId];
} else {
- writeSavePoint = false;
+ chosenTime = 0;
+
+ if (_engine->getLogicManager()->_gameProgress[kProgressChapter] <= 1) {
+ cdNum = 1;
+ } else {
+ cdNum = (_engine->getLogicManager()->_gameProgress[kProgressChapter] > 3) + 2;
+ }
+
+ if (_engine->getArchiveManager()->isCDAvailable(cdNum, path, sizeof(path))) {
+ writeSavePoint = 0;
+ _engine->_gracePeriodTimer = 0;
+
+ if (_engine->getSaveManager()->removeSavegame(_engine->_savegameFilename)) {
+ error("Error deleting file \"%s\"", _engine->_savegameFilename);
+ }
+
+ flag = false;
+ _engine->_currentSavePoint = _engine->_gracePeriodIndex;
+ _engine->_savegameFilename = _engine->_savegameNames[_engine->_currentGameFileColorId];
+ } else {
+ writeSavePoint = false;
+ }
}
} else {
- if (_engine->_savegameTempNames[_engine->_currentGameFileColorId] == _engine->_savegameFilename)
+ if (_engine->_savegameFilename == _engine->_savegameTempNames[_engine->_currentGameFileColorId])
_engine->getVCR()->makePermanent();
- writeSavePoint = doSaveGameFlag;
- chosenTime = time;
+ if (!_engine->isDemo()) {
+ writeSavePoint = doSaveGameFlag;
+ chosenTime = time;
+ }
}
if (!_engine->getSaveManager()->fileExists(_engine->_savegameFilename))
_engine->getVCR()->virginSaveFile();
- if (writeSavePoint)
- _engine->getVCR()->writeSavePoint(3, kCharacterCath, 0);
+ if (_engine->isDemo()) {
+ if (doSaveGameFlag)
+ _engine->getVCR()->writeSavePoint(3, kCharacterCath, 0);
+ } else {
+ if (writeSavePoint)
+ _engine->getVCR()->writeSavePoint(3, kCharacterCath, 0);
+ }
if (!_engine->_gracePeriodTimer &&
_engine->getSaveManager()->fileExists(_engine->_savegameTempNames[_engine->_currentGameFileColorId]) &&
@@ -343,7 +364,13 @@ void VCR::init(bool doSaveGameFlag, int saveType, int32 time) {
if (_engine->_gameTimeOfLastSavePointInFile >= 1061100) {
_engine->getClock()->startClock(_engine->getLogicManager()->_gameTime);
- _engine->getVCR()->autoRewind(saveType, chosenTime);
+
+ if (_engine->isDemo()) {
+ // Demo: use modified time parameter
+ _engine->getVCR()->autoRewind(saveType, time);
+ } else {
+ _engine->getVCR()->autoRewind(saveType, chosenTime);
+ }
}
}
diff --git a/engines/lastexpress/graphics.cpp b/engines/lastexpress/graphics.cpp
index 68e0abb7d22..edad8c8b9bb 100644
--- a/engines/lastexpress/graphics.cpp
+++ b/engines/lastexpress/graphics.cpp
@@ -311,13 +311,6 @@ void GraphicsManager::stepDissolve(TBM *tbm) {
// Not present in the original, like above.
_engine->handleEvents();
-
- // Also not present in the original; but this is an enhancement which makes it easier
- // and more reliable to get out of the fast-walk transitions before getting to the next car by mistake...
- if (_engine->getLogicManager()->_doubleClickFlag && i > 1 && _engine->mouseHasLeftClicked()) {
- debug("GraphicsManager::stepDissolve(): breaking out of transition in fast-walk mode; REMEMBER TO MAKE THIS AN ENHANCEMENT");
- break;
- }
}
if (acquireSurface()) {
diff --git a/engines/lastexpress/lastexpress.cpp b/engines/lastexpress/lastexpress.cpp
index 9dcfa8c19cb..776bff9305a 100644
--- a/engines/lastexpress/lastexpress.cpp
+++ b/engines/lastexpress/lastexpress.cpp
@@ -47,6 +47,7 @@
#include "common/timer.h"
#include "engines/util.h"
+#include "engines/advancedDetector.h"
const char *g_actionNames[] = {"None", "Action1", "Action2", "ExitCompartment", "Action4", "ExcuseMeCath", "ExcuseMe", "INVALID", "Knock", "OpenDoor", "Action10", "Action11", "Default", "INVALID", "INVALID", "INVALID", "Action16", "DrawScene", "Callback"};
const char *g_directionNames[] = { "None", "Up", "Down", "Left", "Right", "Switch"};
@@ -112,7 +113,7 @@ void LastExpressEngine::startUp() {
getGraphicsManager()->setMouseDrawable(false);
initGameData();
getSubtitleManager()->initSubtitles();
- getLogicManager()->loadTrain(1);
+ getLogicManager()->loadTrain(isDemo() ? 2 : 1);
}
void LastExpressEngine::shutDown() {
@@ -385,15 +386,15 @@ void LastExpressEngine::initGameData() {
getLogicManager()->_gameInventory[kItemArticle].scene = 36;
getLogicManager()->_gameInventory[kItemTelegram].isPresent = 1;
getLogicManager()->_gameInventory[kItemArticle].isPresent = 1;
- getLogicManager()->_gameProgress[kProgressPortrait] = 32;
- getLogicManager()->_gameProgress[kProgressChapter] = 1;
+ getLogicManager()->_gameProgress[kProgressPortrait] = isDemo() ? 34: 32;
+ getLogicManager()->_gameProgress[kProgressChapter] = isDemo() ? 3 : 1;
getLogicManager()->_lastSavegameSessionTicks = 0;
getLogicManager()->_currentGameSessionTicks = 0;
getLogicManager()->_useLastSavedNodeIndex = 0;
getLogicManager()->_lastNodeIndex = 0;
getLogicManager()->_lastSavedNodeIndex = 0;
getLogicManager()->_inventorySelectedItemIdx = 0;
- getLogicManager()->_gameTime = 1037700;
+ getLogicManager()->_gameTime = isDemo() ? 2241000 : 1037700;
getLogicManager()->_gameTimeTicksDelta = 3;
getLogicManager()->_trainNodeIndex = 40;
}
@@ -409,7 +410,7 @@ void LastExpressEngine::engineEventHandler(Event *event) {
//++g_numClicks;
getNISManager()->abortNIS();
warning("abortFight() missing from engineEventHandler");
- //abortFight();
+ abortFight();
abortCredits();
if (shouldQuit()) {
// g_flag_running = 0;
@@ -435,14 +436,14 @@ void LastExpressEngine::engineEventHandler(Event *event) {
break;
case 2:
getNISManager()->abortNIS();
- //abortFight();
+ abortFight();
warning("abortFight() missing from engineEventHandler");
abortCredits();
if (!shouldQuit() && !getMenu()->isShowingMenu()) {
if (getMessageManager()->getEventHandle(1) != &LastExpressEngine::nodeStepMouseWrapper || getVCR()->isVirgin(_currentGameFileColorId))
getMessageManager()->addEvent(4, 0, 0, 2);
else
- getMenu()->doEgg(1, 0, 0);
+ getMenu()->doEgg(true, 0, 0);
}
break;
case 3:
@@ -597,7 +598,7 @@ bool LastExpressEngine::handleEvents() {
if (!getLogicManager()->_doubleClickFlag) {
if (_systemEventLeftMouseDown)
curFlags |= 1;
-
+
if (_systemEventRightMouseDown)
curFlags |= 2;
}
@@ -743,6 +744,14 @@ void LastExpressEngine::creditsTimerWrapper(Event *event) {
creditsTimer(event);
}
+void LastExpressEngine::demoEndingMouseWrapper(Event *event) {
+ demoEndingMouse(event);
+}
+
+void LastExpressEngine::demoEndingTimerWrapper(Event *event) {
+ demoEndingTimer(event);
+}
+
void LastExpressEngine::fightMouseWrapper(Event *event) {
_fight->mouse(event);
}
@@ -751,6 +760,10 @@ void LastExpressEngine::fightTimerWrapper(Event *event) {
_fight->timer(event, true);
}
+void LastExpressEngine::emptyHandler(Event *event) {
+ // No-op
+}
+
///////////////////////////////////////////////////////////////////////////////////
/// Event Handling
///////////////////////////////////////////////////////////////////////////////////
diff --git a/engines/lastexpress/lastexpress.h b/engines/lastexpress/lastexpress.h
index f2e85ea2a59..db8875a6441 100644
--- a/engines/lastexpress/lastexpress.h
+++ b/engines/lastexpress/lastexpress.h
@@ -691,6 +691,12 @@ public:
int32 readTGAIntoMemory(const char *filename, TGAHeader *tgaHeader);
void constructPalette(TGAHeader *tgaHeader, uint16 *palette);
+ // DEMO CREDITS
+ bool demoEnding(bool wonGame);
+ void demoEndingMouse(Event *event);
+ void demoEndingTimer(Event *event);
+
+ // EVENT HANDLERS
void engineEventHandlerWrapper(Event *event);
void nodeStepMouseWrapper(Event *event);
@@ -705,9 +711,14 @@ public:
void creditsMouseWrapper(Event *event);
void creditsTimerWrapper(Event *event);
+ void demoEndingMouseWrapper(Event *event);
+ void demoEndingTimerWrapper(Event *event);
+
void fightMouseWrapper(Event *event);
void fightTimerWrapper(Event *event);
+ void emptyHandler(Event *event);
+
int _savedFrameCounter = 0;
int32 _savedFrameInterval = 0;
int _doCredits = 0;
diff --git a/engines/lastexpress/menu/menu.cpp b/engines/lastexpress/menu/menu.cpp
index 75466305a93..1b9a1dba4de 100644
--- a/engines/lastexpress/menu/menu.cpp
+++ b/engines/lastexpress/menu/menu.cpp
@@ -1352,16 +1352,22 @@ void MenuOld::setBrightness(uint32 brightness) const {
Menu::Menu(LastExpressEngine *engine) {
_engine = engine;
+
+ if (_engine->isDemo())
+ _eggTimerDelta = 2700;
}
void Menu::doEgg(bool doSaveGame, int type, int32 time) {
if (!_isShowingMenu) {
_isShowingMenu = true;
+ if (_engine->isDemo())
+ _eggTimerDelta = 2700;
+
_engine->getOtisManager()->wipeAllGSysInfo();
if (!_engine->mouseHasRightClicked()) {
- if (_engine->getVCR()->isVirgin(0) && _engine->getArchiveManager()->lockCD(1)) {
+ if (!_engine->isDemo() && _engine->getVCR()->isVirgin(0) && _engine->getArchiveManager()->lockCD(1)) {
if (!_hasShownIntro) {
_engine->getNISManager()->doNIS("1930.NIS", 0x4000);
_engine->getMessageManager()->clearClickEvents();
@@ -1447,6 +1453,9 @@ void Menu::eggFree() {
}
void Menu::eggMouse(Event *event) {
+ if (_engine->isDemo())
+ _eggTimerDelta = 2700;
+
if (_engine->getGraphicsManager()->canDrawMouse()) {
bool redrawMouse = true;
@@ -1517,8 +1526,17 @@ void Menu::eggTimer(Event *event) {
}
if (!_eggTimerDelta--) {
- updateEgg();
- _eggTimerDelta = 15;
+ if (_engine->isDemo()) {
+ endEgg();
+
+ if (!_engine->demoEnding(false))
+ _engine->getSaveManager()->removeSavegame(_engine->_savegameNames[_engine->_currentGameFileColorId]);
+
+ doEgg(false, 0, 0);
+ } else {
+ updateEgg();
+ _eggTimerDelta = 15;
+ }
}
}
@@ -1563,7 +1581,11 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
setSprite(1, 6, true);
setSprite(0, -1, true);
- _engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
+ if (_engine->isDemo()) {
+ _engine->getSoundManager()->playSoundFile("LIB046.SND", 16, 0, 0);
+ } else {
+ _engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
+ }
clearSprites();
@@ -1590,7 +1612,12 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
_engine->getSoundManager()->killAllSlots();
_engine->getSoundManager()->soundThread();
- _engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
+
+ if (_engine->isDemo()) {
+ _engine->getSoundManager()->playSoundFile("LIB046.SND", 16, 0, 0);
+ } else {
+ _engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
+ }
while (_engine->getLogicManager()->dialogRunning("LIB046"))
_engine->getSoundManager()->soundThread();
@@ -1611,6 +1638,11 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
case kMenuAction4:
{
if (action == kMenuAction4) {
+ if (_engine->isDemo()) {
+ clearSprites();
+ return true;
+ }
+
if ((flags & 8) != 0)
_engine->_currentSavePoint = 0;
}
@@ -1624,15 +1656,10 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
if (_engine->getLogicManager()->_gameProgress[kProgressChapter] > 1)
whichCD = (_engine->getLogicManager()->_gameProgress[kProgressChapter] > 3) + 2;
- char path[80];
- if (_engine->getArchiveManager()->isCDAvailable(whichCD, path, sizeof(path))) {
- if (_gameInNotStartedInFile) {
- setSprite(1, 0, true);
- setSprite(0, 31, true);
- } else {
+ if (_engine->isDemo()) {
+ if (!_gameInNotStartedInFile) {
setSprite(1, 7, true);
-
- if (_engine->_lastSavePointIdInFile == _engine->_currentSavePoint) {
+ if (_engine->_currentSavePoint == _engine->_lastSavePointIdInFile) {
if (_engine->getVCR()->currentEndsGame()) {
setSprite(0, 6, true);
} else {
@@ -1642,59 +1669,117 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
setSprite(0, 5, true);
}
}
+
+ if ((flags & 8) == 0)
+ return true;
+
+ _engine->getLogicManager()->loadTrain(whichCD);
+ setSprite(0, -1, true);
+ _engine->getSoundManager()->playSoundFile("LIB046.SND", 16, 0, 0);
+ _engine->getMessageManager()->reset();
+ endEgg();
+
+ Slot *slot = _engine->getSoundManager()->_soundCache;
+ if (_engine->getSoundManager()->_soundCache) {
+ do {
+ if (slot->_tag == kSoundTagIntro)
+ break;
+ slot = slot->_next;
+ } while (slot);
+
+ if (slot)
+ slot->setFade(0);
+ }
+
+ _engine->getLogicManager()->fadeToBlack();
} else {
- setSprite(1, -1, true);
- setSprite(0, whichCD - 1, true);
- }
+ char path[80];
+ if (_engine->getArchiveManager()->isCDAvailable(whichCD, path, sizeof(path))) {
+ if (_gameInNotStartedInFile) {
+ setSprite(1, 0, true);
+ setSprite(0, 31, true);
+ } else {
+ setSprite(1, 7, true);
- if ((flags & 8) == 0)
- return true;
+ if (_engine->_lastSavePointIdInFile == _engine->_currentSavePoint) {
+ if (_engine->getVCR()->currentEndsGame()) {
+ setSprite(0, 6, true);
+ } else {
+ setSprite(0, 3, true);
+ }
+ } else {
+ setSprite(0, 5, true);
+ }
+ }
+ } else {
+ setSprite(1, -1, true);
+ setSprite(0, whichCD - 1, true);
+ }
- if (!_engine->getArchiveManager()->lockCD(whichCD))
- return true;
+ if ((flags & 8) == 0)
+ return true;
- _engine->getLogicManager()->loadTrain(whichCD);
+ if (!_engine->getArchiveManager()->lockCD(whichCD))
+ return true;
- setSprite(0, -1, true);
+ _engine->getLogicManager()->loadTrain(whichCD);
- _engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
- _engine->getMessageManager()->reset();
- endEgg();
+ setSprite(0, -1, true);
- if (!_engine->_currentSavePoint) {
+ _engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
+ _engine->getMessageManager()->reset();
+ endEgg();
- if (!_engine->mouseHasRightClicked()) {
- _engine->getLogicManager()->bumpCathNode(5 * _engine->_currentGameFileColorId + 3);
+ if (!_engine->_currentSavePoint) {
if (!_engine->mouseHasRightClicked()) {
- _engine->getLogicManager()->bumpCathNode(5 * _engine->_currentGameFileColorId + 4);
+ _engine->getLogicManager()->bumpCathNode(5 * _engine->_currentGameFileColorId + 3);
if (!_engine->mouseHasRightClicked()) {
- _engine->getLogicManager()->bumpCathNode(5 * _engine->_currentGameFileColorId + 5);
+ _engine->getLogicManager()->bumpCathNode(5 * _engine->_currentGameFileColorId + 4);
if (!_engine->mouseHasRightClicked()) {
- Slot *slot = _engine->getSoundManager()->_soundCache;
- if (_engine->getSoundManager()->_soundCache) {
- do {
- if (slot->_tag == kSoundTagIntro)
- break;
+ _engine->getLogicManager()->bumpCathNode(5 * _engine->_currentGameFileColorId + 5);
- slot = slot->_next;
- } while (slot);
+ if (!_engine->mouseHasRightClicked()) {
+ Slot *slot = _engine->getSoundManager()->_soundCache;
+ if (_engine->getSoundManager()->_soundCache) {
+ do {
+ if (slot->_tag == kSoundTagIntro)
+ break;
- if (slot)
- slot->setFade(0);
- }
+ slot = slot->_next;
+ } while (slot);
+
+ if (slot)
+ slot->setFade(0);
+ }
- _engine->getNISManager()->doNIS("1601.NIS", 0x4000);
- _engine->getLogicManager()->_gameEvents[kEventIntro] = 1;
+ _engine->getNISManager()->doNIS("1601.NIS", 0x4000);
+ _engine->getLogicManager()->_gameEvents[kEventIntro] = 1;
+ }
}
}
}
- }
- if (!_engine->getLogicManager()->_gameEvents[kEventIntro]) {
- _engine->getLogicManager()->_gameEvents[kEventIntro] = 1;
+ if (!_engine->getLogicManager()->_gameEvents[kEventIntro]) {
+ _engine->getLogicManager()->_gameEvents[kEventIntro] = 1;
+ Slot *slot = _engine->getSoundManager()->_soundCache;
+ if (_engine->getSoundManager()->_soundCache) {
+ do {
+ if (slot->_tag == kSoundTagIntro)
+ break;
+
+ slot = slot->_next;
+ } while (slot);
+
+ if (slot)
+ slot->setFade(0);
+
+ _engine->getLogicManager()->fadeToBlack();
+ }
+ }
+ } else {
Slot *slot = _engine->getSoundManager()->_soundCache;
if (_engine->getSoundManager()->_soundCache) {
do {
@@ -1710,21 +1795,6 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
_engine->getLogicManager()->fadeToBlack();
}
}
- } else {
- Slot *slot = _engine->getSoundManager()->_soundCache;
- if (_engine->getSoundManager()->_soundCache) {
- do {
- if (slot->_tag == kSoundTagIntro)
- break;
-
- slot = slot->_next;
- } while (slot);
-
- if (slot)
- slot->setFade(0);
-
- _engine->getLogicManager()->fadeToBlack();
- }
}
_engine->_navigationEngineIsRunning = true;
@@ -1741,50 +1811,60 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
return true;
}
- if ((flags & 8) != 0) {
- setSprite(3, 1, true);
- setSprite(0, -1, true);
+ if (_engine->isDemo()) {
+ // Demo: simplified implementation
+ if ((flags & 0x88) != 0)
+ return true;
- _engine->getLogicManager()->playDialog(0, "LIB047", -1, 0);
+ setSprite(3, 0, true);
+ setSprite(0, 7, true);
+ return true;
+ } else {
+ if ((flags & 8) != 0) {
+ setSprite(3, 1, true);
+ setSprite(0, -1, true);
- switchEggs(_engine->getVCR()->switchGames());
+ _engine->getLogicManager()->playDialog(0, "LIB047", -1, 0);
- _engine->_fightSkipCounter = 0;
- return true;
- }
+ switchEggs(_engine->getVCR()->switchGames());
- if ((flags & 0x80) != 0)
- return true;
+ _engine->_fightSkipCounter = 0;
+ return true;
+ }
- setSprite(3, 0, true);
+ if ((flags & 0x80) != 0)
+ return true;
- if (_gameInNotStartedInFile || _engine->_currentGameFileColorId == 5) {
- setSprite(0, 25, true);
- } else if (_engine->getVCR()->isVirgin(_engine->_currentGameFileColorId + 1)) {
- setSprite(0, 7, true);
- } else {
- switch (_engine->_currentGameFileColorId) {
- case 0:
- setSprite(0, 26, true);
- break;
- case 1:
- setSprite(0, 28, true);
- break;
- case 2:
- setSprite(0, 30, true);
- break;
- case 3:
- setSprite(0, 29, true);
- break;
- case 4:
- setSprite(0, 27, true);
- break;
- default:
- break;
+ setSprite(3, 0, true);
+
+ if (_gameInNotStartedInFile || _engine->_currentGameFileColorId == 5) {
+ setSprite(0, 25, true);
+ } else if (_engine->getVCR()->isVirgin(_engine->_currentGameFileColorId + 1)) {
+ setSprite(0, 7, true);
+ } else {
+ switch (_engine->_currentGameFileColorId) {
+ case 0:
+ setSprite(0, 26, true);
+ break;
+ case 1:
+ setSprite(0, 28, true);
+ break;
+ case 2:
+ setSprite(0, 30, true);
+ break;
+ case 3:
+ setSprite(0, 29, true);
+ break;
+ case 4:
+ setSprite(0, 27, true);
+ break;
+ default:
+ break;
+ }
}
- }
- return true;
+ return true;
+ }
case kMenuActionRewind:
if (!_engine->_currentSavePoint) {
clearSprites();
@@ -1806,7 +1886,12 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
setSprite(1, 2, true);
setSprite(0, -1, true);
- _engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
+ if (_engine->isDemo()) {
+ _engine->getSoundManager()->playSoundFile("LIB046.SND", 16, 0, 0);
+ } else {
+ _engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
+ }
+
_engine->getVCR()->rewind();
_moveClockHandsFlag = false;
@@ -1839,7 +1924,12 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
setSprite(1, 4, true);
setSprite(0, -1, true);
- _engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
+ if (_engine->isDemo()) {
+ _engine->getSoundManager()->playSoundFile("LIB046.SND", 16, 0, 0);
+ } else {
+ _engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
+ }
+
_engine->getVCR()->forward();
_moveClockHandsFlag = false;
@@ -1859,22 +1949,31 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
setCity(0);
- if ((flags & 8) != 0) {
- setSprite(0, -1, true);
-
- _engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
- _engine->getVCR()->seekToTime(1037700);
+ if (_engine->isDemo()) {
+ // Demo doesn't implement time seeking...
+ if ((flags & 0x88) != 0)
+ return true;
- _moveClockHandsFlag = true;
+ setSprite(0, 13, true);
return true;
- }
+ } else {
+ if ((flags & 8) != 0) {
+ setSprite(0, -1, true);
- if ((flags & 0x80) != 0)
- return true;
+ _engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
+ _engine->getVCR()->seekToTime(1037700);
- setSprite(0, 13, true);
+ _moveClockHandsFlag = true;
+ return true;
+ }
- return true;
+ if ((flags & 0x80) != 0)
+ return true;
+
+ setSprite(0, 13, true);
+
+ return true;
+ }
case kMenuActionGoToStrasbourg:
if (_engine->_gameTimeOfLastSavePointInFile < 1490400 || _engine->getClock()->getTimeShowing() == 1490400 || _engine->getClock()->getTimeTo() == 1490400) {
clearSprites();
@@ -1883,26 +1982,40 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
setCity(1);
- if ((flags & 8) != 0) {
- setSprite(0, -1, true);
+ if (_engine->isDemo()) {
+ // Demo doesn't implement time seeking...
+ if ((flags & 0x88) != 0)
+ return true;
- _engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
- _engine->getVCR()->seekToTime(1490400);
+ if (_engine->getClock()->getTimeShowing() <= 1490400) {
+ setSprite(0, 14, true);
+ } else {
+ setSprite(0, 15, true);
+ }
- _moveClockHandsFlag = true;
return true;
- }
+ } else {
+ if ((flags & 8) != 0) {
+ setSprite(0, -1, true);
- if ((flags & 0x80) != 0)
- return true;
+ _engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
+ _engine->getVCR()->seekToTime(1490400);
- if (_engine->getClock()->getTimeShowing() <= 1490400) {
- setSprite(0, 14, true);
- } else {
- setSprite(0, 15, true);
- }
+ _moveClockHandsFlag = true;
+ return true;
+ }
- return true;
+ if ((flags & 0x80) != 0)
+ return true;
+
+ if (_engine->getClock()->getTimeShowing() <= 1490400) {
+ setSprite(0, 14, true);
+ } else {
+ setSprite(0, 15, true);
+ }
+
+ return true;
+ }
case kMenuActionGoToMunich:
if (_engine->_gameTimeOfLastSavePointInFile < 1852200 || _engine->getClock()->getTimeShowing() == 1852200 || _engine->getClock()->getTimeTo() == 1852200) {
clearSprites();
@@ -1911,27 +2024,46 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
setCity(2);
- if ((flags & 8) != 0) {
- setSprite(0, -1, true);
+ if (_engine->isDemo()) {
+ // Demo doesn't implement time seeking...
+ if ((flags & 0x88) != 0)
+ return true;
- _engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
- _engine->getVCR()->seekToTime(1852200);
+ if (_engine->getClock()->getTimeShowing() <= 1852200) {
+ setSprite(0, 17, true);
+ } else {
+ setSprite(0, 16, true);
+ }
- _moveClockHandsFlag = true;
return true;
- }
+ } else {
+ if ((flags & 8) != 0) {
+ setSprite(0, -1, true);
- if ((flags & 0x80) != 0)
- return true;
+ _engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
+ _engine->getVCR()->seekToTime(1852200);
- if (_engine->getClock()->getTimeShowing() <= 1852200) {
- setSprite(0, 17, true);
- } else {
- setSprite(0, 16, true);
- }
+ _moveClockHandsFlag = true;
+ return true;
+ }
- return true;
+ if ((flags & 0x80) != 0)
+ return true;
+
+ if (_engine->getClock()->getTimeShowing() <= 1852200) {
+ setSprite(0, 17, true);
+ } else {
+ setSprite(0, 16, true);
+ }
+
+ return true;
+ }
case kMenuActionGoToVienna:
+ if (_engine->isDemo()) {
+ clearSprites();
+ return true;
+ }
+
if (_engine->_gameTimeOfLastSavePointInFile < 2268000 || _engine->getClock()->getTimeShowing() == 2268000 || _engine->getClock()->getTimeTo() == 2268000) {
clearSprites();
return true;
@@ -1960,6 +2092,11 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
return true;
case kMenuActionGoToBudapest:
+ if (_engine->isDemo()) {
+ clearSprites();
+ return true;
+ }
+
if (_engine->_gameTimeOfLastSavePointInFile < 2551500 || _engine->getClock()->getTimeShowing() == 2551500 || _engine->getClock()->getTimeTo() == 2551500) {
clearSprites();
return true;
@@ -1988,6 +2125,11 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
return true;
case kMenuActionGoToBelgrad:
+ if (_engine->isDemo()) {
+ clearSprites();
+ return true;
+ }
+
if (_engine->_gameTimeOfLastSavePointInFile < 2952000 || _engine->getClock()->getTimeShowing() == 2952000 || _engine->getClock()->getTimeTo() == 2952000) {
clearSprites();
return true;
@@ -2016,6 +2158,11 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
return true;
case kMenuActionGoToCostantinople:
+ if (_engine->isDemo()) {
+ clearSprites();
+ return true;
+ }
+
if (_engine->_gameTimeOfLastSavePointInFile < 4941000 || _engine->getClock()->getTimeShowing() == 4941000 || _engine->getClock()->getTimeTo() == 4941000) {
clearSprites();
return true;
@@ -2060,7 +2207,12 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
setSprite(2, 0, true);
- _engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
+ if (_engine->isDemo()) {
+ _engine->getSoundManager()->playSoundFile("LIB046.SND", 16, 0, 0);
+ } else {
+ _engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
+ }
+
_engine->getSoundManager()->setMasterVolume(_engine->getSoundManager()->getMasterVolume() - 1);
_engine->getVCR()->storeSettings();
@@ -2088,7 +2240,11 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
setSprite(0, 8, true);
if ((flags & 8) != 0) {
- _engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
+ if (_engine->isDemo()) {
+ _engine->getSoundManager()->playSoundFile("LIB046.SND", 16, 0, 0);
+ } else {
+ _engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
+ }
setSprite(2, 4, true);
@@ -2131,7 +2287,12 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
setSprite(2, 5, true);
- _engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
+ if (_engine->isDemo()) {
+ _engine->getSoundManager()->playSoundFile("LIB046.SND", 16, 0, 0);
+ } else {
+ _engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
+ }
+
_engine->getGraphicsManager()->setGammaLevel(_engine->getGraphicsManager()->getGammaLevel() - 1);
_engine->getVCR()->storeSettings();
@@ -2173,7 +2334,12 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
if ((flags & 8) != 0) {
setSprite(2, 9, true);
- _engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
+ if (_engine->isDemo()) {
+ _engine->getSoundManager()->playSoundFile("LIB046.SND", 16, 0, 0);
+ } else {
+ _engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
+ }
+
_engine->getGraphicsManager()->setGammaLevel(_engine->getGraphicsManager()->getGammaLevel() + 1);
_engine->getVCR()->storeSettings();
@@ -2248,9 +2414,9 @@ void Menu::switchEggs(int whichEgg) {
_menuSeqs[3] = nullptr;
}
- _gameInNotStartedInFile = _engine->_gameTimeOfLastSavePointInFile < 1061100;
+ _gameInNotStartedInFile = _engine->isDemo() || _engine->_gameTimeOfLastSavePointInFile < 1061100;
- if (_engine->_gameTimeOfLastSavePointInFile >= 1061100) {
+ if (_engine->isDemo() || _engine->_gameTimeOfLastSavePointInFile >= 1061100) {
_engine->getLogicManager()->bumpCathNode((5 * whichEgg) + 1);
} else {
_engine->getLogicManager()->bumpCathNode((5 * whichEgg) + 2);
@@ -2259,6 +2425,12 @@ void Menu::switchEggs(int whichEgg) {
_engine->getGraphicsManager()->setMouseDrawable(true);
_engine->getLogicManager()->mouseStatus();
+ if (_engine->isDemo()) {
+ Common::strcpy_s(_eggButtonsSeqNames[3], "aconred.seq");
+ _menuSeqs[3] = _engine->getArchiveManager()->loadSeq(_eggButtonsSeqNames[3], 15, 0);
+ return;
+ }
+
if (_gameInNotStartedInFile && whichEgg == 0) {
return;
}
@@ -2297,4 +2469,12 @@ bool Menu::isShowingMenu() {
return _isShowingMenu;
}
+void Menu::setEggTimerDelta(int delta) {
+ _eggTimerDelta = delta;
+}
+
+int Menu::getEggTimerDelta() {
+ return _eggTimerDelta;
+}
+
} // End of namespace LastExpress
diff --git a/engines/lastexpress/menu/menu.h b/engines/lastexpress/menu/menu.h
index 8eb9f61438d..7532a2a9bb7 100644
--- a/engines/lastexpress/menu/menu.h
+++ b/engines/lastexpress/menu/menu.h
@@ -226,7 +226,10 @@ public:
void switchEggs(int whichEgg);
bool isShowingMenu();
-private:
+ void setEggTimerDelta(int delta);
+ int getEggTimerDelta();
+
+protected:
LastExpressEngine *_engine = nullptr;
bool _isShowingMenu = false;
bool _hasShownIntro = false;
diff --git a/engines/lastexpress/module.mk b/engines/lastexpress/module.mk
index 76f0556a7d5..7e7a29ea030 100644
--- a/engines/lastexpress/module.mk
+++ b/engines/lastexpress/module.mk
@@ -1,6 +1,25 @@
MODULE := engines/lastexpress
MODULE_OBJS := \
+ characters/demo/demo_abbot.o \
+ characters/demo/demo_anna.o \
+ characters/demo/demo_august.o \
+ characters/demo/demo_cond2.o \
+ characters/demo/demo_francois.o \
+ characters/demo/demo_ivo.o \
+ characters/demo/demo_madame.o \
+ characters/demo/demo_master.o \
+ characters/demo/demo_monsieur.o \
+ characters/demo/demo_rebecca.o \
+ characters/demo/demo_tablea.o \
+ characters/demo/demo_tableb.o \
+ characters/demo/demo_tablec.o \
+ characters/demo/demo_tabled.o \
+ characters/demo/demo_tablee.o \
+ characters/demo/demo_tablef.o \
+ characters/demo/demo_tatiana.o \
+ characters/demo/demo_vesna.o \
+ characters/demo/demo_waiter1.o \
characters/abbot.o \
characters/alexei.o \
characters/alouan.o \
diff --git a/engines/lastexpress/sound/sound.cpp b/engines/lastexpress/sound/sound.cpp
index efbbe0c10bc..0d3158409df 100644
--- a/engines/lastexpress/sound/sound.cpp
+++ b/engines/lastexpress/sound/sound.cpp
@@ -1674,7 +1674,11 @@ void SoundManager::ambientAI(int id) {
_loopingSoundDuration = ((rnd(UINT_MAX)) % 320) + 260;
if (soundId != 99) {
- playSoundFile(newAmbientSoundName, kSoundTypeAmbient | kSoundFlagLooped | kVolume1, kCharacterSteam, 0);
+ if (_engine->isDemo()) {
+ playSoundFile(newAmbientSoundName, kSoundTypeAmbient | kSoundFlagLooped | kVolume2, kCharacterSteam, 0);
+ } else {
+ playSoundFile(newAmbientSoundName, kSoundTypeAmbient | kSoundFlagLooped | kVolume1, kCharacterSteam, 0);
+ }
if (oldAmbientSlot1)
oldAmbientSlot1->setFade(kVolumeNone);
Commit: b5f33424ebdfe0e7da1a6beecf7eb7c7f0199674
https://github.com/scummvm/scummvm/commit/b5f33424ebdfe0e7da1a6beecf7eb7c7f0199674
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Remove old engine code
Changed paths:
R engines/lastexpress/data/animation.cpp
R engines/lastexpress/data/animation.h
R engines/lastexpress/data/background.cpp
R engines/lastexpress/data/background.h
R engines/lastexpress/data/cursor.cpp
R engines/lastexpress/data/cursor.h
R engines/lastexpress/data/font.cpp
R engines/lastexpress/data/font.h
R engines/lastexpress/data/scene.cpp
R engines/lastexpress/data/scene.h
R engines/lastexpress/data/sequence.cpp
R engines/lastexpress/data/sequence.h
R engines/lastexpress/data/snd.cpp
R engines/lastexpress/data/snd.h
R engines/lastexpress/data/subtitle.cpp
R engines/lastexpress/data/subtitle.h
R engines/lastexpress/drawable.h
R engines/lastexpress/entities/abbot.cpp
R engines/lastexpress/entities/abbot.h
R engines/lastexpress/entities/alexei.cpp
R engines/lastexpress/entities/alexei.h
R engines/lastexpress/entities/alouan.cpp
R engines/lastexpress/entities/alouan.h
R engines/lastexpress/entities/anna.cpp
R engines/lastexpress/entities/anna.h
R engines/lastexpress/entities/august.cpp
R engines/lastexpress/entities/august.h
R engines/lastexpress/entities/boutarel.cpp
R engines/lastexpress/entities/boutarel.h
R engines/lastexpress/entities/chapters.cpp
R engines/lastexpress/entities/chapters.h
R engines/lastexpress/entities/cooks.cpp
R engines/lastexpress/entities/cooks.h
R engines/lastexpress/entities/coudert.cpp
R engines/lastexpress/entities/coudert.h
R engines/lastexpress/entities/entity.cpp
R engines/lastexpress/entities/entity.h
R engines/lastexpress/entities/entity39.cpp
R engines/lastexpress/entities/entity39.h
R engines/lastexpress/entities/entity_intern.h
R engines/lastexpress/entities/francois.cpp
R engines/lastexpress/entities/francois.h
R engines/lastexpress/entities/gendarmes.cpp
R engines/lastexpress/entities/gendarmes.h
R engines/lastexpress/entities/hadija.cpp
R engines/lastexpress/entities/hadija.h
R engines/lastexpress/entities/ivo.cpp
R engines/lastexpress/entities/ivo.h
R engines/lastexpress/entities/kahina.cpp
R engines/lastexpress/entities/kahina.h
R engines/lastexpress/entities/kronos.cpp
R engines/lastexpress/entities/kronos.h
R engines/lastexpress/entities/mahmud.cpp
R engines/lastexpress/entities/mahmud.h
R engines/lastexpress/entities/max.cpp
R engines/lastexpress/entities/max.h
R engines/lastexpress/entities/mertens.cpp
R engines/lastexpress/entities/mertens.h
R engines/lastexpress/entities/milos.cpp
R engines/lastexpress/entities/milos.h
R engines/lastexpress/entities/mmeboutarel.cpp
R engines/lastexpress/entities/mmeboutarel.h
R engines/lastexpress/entities/pascale.cpp
R engines/lastexpress/entities/pascale.h
R engines/lastexpress/entities/rebecca.cpp
R engines/lastexpress/entities/rebecca.h
R engines/lastexpress/entities/salko.cpp
R engines/lastexpress/entities/salko.h
R engines/lastexpress/entities/sophie.cpp
R engines/lastexpress/entities/sophie.h
R engines/lastexpress/entities/tables.cpp
R engines/lastexpress/entities/tables.h
R engines/lastexpress/entities/tatiana.cpp
R engines/lastexpress/entities/tatiana.h
R engines/lastexpress/entities/train.cpp
R engines/lastexpress/entities/train.h
R engines/lastexpress/entities/vassili.cpp
R engines/lastexpress/entities/vassili.h
R engines/lastexpress/entities/verges.cpp
R engines/lastexpress/entities/verges.h
R engines/lastexpress/entities/vesna.cpp
R engines/lastexpress/entities/vesna.h
R engines/lastexpress/entities/waiter1.cpp
R engines/lastexpress/entities/waiter1.h
R engines/lastexpress/entities/waiter2.cpp
R engines/lastexpress/entities/waiter2.h
R engines/lastexpress/entities/yasmin.cpp
R engines/lastexpress/entities/yasmin.h
R engines/lastexpress/eventhandler.h
R engines/lastexpress/game/action.h
R engines/lastexpress/game/entities.cpp
R engines/lastexpress/game/entities.h
R engines/lastexpress/game/inventory.cpp
R engines/lastexpress/game/inventory.h
R engines/lastexpress/game/object.cpp
R engines/lastexpress/game/object.h
R engines/lastexpress/game/savepoint.cpp
R engines/lastexpress/game/savepoint.h
R engines/lastexpress/game/scenes.cpp
R engines/lastexpress/game/scenes.h
R engines/lastexpress/game/state.cpp
R engines/lastexpress/game/state.h
R engines/lastexpress/menu/trainline.cpp
R engines/lastexpress/menu/trainline.h
R engines/lastexpress/resource.cpp
R engines/lastexpress/resource.h
R engines/lastexpress/sound/entry.cpp
R engines/lastexpress/sound/entry.h
R engines/lastexpress/sound/mixer.h
R engines/lastexpress/sound/queue.cpp
R engines/lastexpress/sound/queue.h
R engines/lastexpress/strings.h
engines/lastexpress/data/archive.cpp
engines/lastexpress/data/archive.h
engines/lastexpress/data/cvcrfile.cpp
engines/lastexpress/debug.cpp
engines/lastexpress/debug.h
engines/lastexpress/game/action.cpp
engines/lastexpress/game/beetle.cpp
engines/lastexpress/game/beetle.h
engines/lastexpress/game/credits.cpp
engines/lastexpress/game/logic.cpp
engines/lastexpress/game/logic.h
engines/lastexpress/game/navigation.cpp
engines/lastexpress/game/savegame.cpp
engines/lastexpress/game/savegame.h
engines/lastexpress/game/vcr.cpp
engines/lastexpress/graphics.cpp
engines/lastexpress/graphics.h
engines/lastexpress/helpers.h
engines/lastexpress/lastexpress.cpp
engines/lastexpress/lastexpress.h
engines/lastexpress/memory.cpp
engines/lastexpress/menu/clock.cpp
engines/lastexpress/menu/clock.h
engines/lastexpress/menu/menu.cpp
engines/lastexpress/menu/menu.h
engines/lastexpress/metaengine.cpp
engines/lastexpress/module.mk
engines/lastexpress/sound/mixer.cpp
engines/lastexpress/sound/sound.cpp
engines/lastexpress/sound/sound.h
engines/lastexpress/sound/subtitle.h
diff --git a/engines/lastexpress/data/animation.cpp b/engines/lastexpress/data/animation.cpp
deleted file mode 100644
index 670228c4565..00000000000
--- a/engines/lastexpress/data/animation.cpp
+++ /dev/null
@@ -1,301 +0,0 @@
-/* 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/>.
- *
- */
-
-// Based on Deniz Oezmen's code: http://oezmen.eu/
-
-#include "lastexpress/data/animation.h"
-
-#include "lastexpress/data/sequence.h"
-#include "lastexpress/data/snd.h"
-
-#include "lastexpress/debug.h"
-#include "lastexpress/helpers.h"
-
-#include "common/events.h"
-#include "common/rational.h"
-#include "common/stream.h"
-#include "common/system.h"
-
-#include "engines/engine.h"
-
-namespace LastExpress {
-
-Animation::Animation() : _stream(nullptr), _currentChunk(nullptr), _overlay(nullptr), _background1(nullptr), _background2(nullptr), _backgroundCurrent(0), _audio(nullptr), _startTime(0), _changed(false) {
-}
-
-Animation::~Animation() {
- reset();
-}
-
-void Animation::reset() {
- SAFE_DELETE(_overlay);
- SAFE_DELETE(_background1);
- SAFE_DELETE(_background2);
- SAFE_DELETE(_audio);
-
- _backgroundCurrent = 0;
- _chunks.clear();
-
- _currentChunk = nullptr;
-
- SAFE_DELETE(_stream);
-}
-
-bool Animation::load(Common::SeekableReadStream *stream, int flag) {
- if (!stream)
- return false;
-
- reset();
-
- // Keep stream for later decoding of animation
- _stream = stream;
-
- // Read header to get the number of chunks
- uint32 numChunks = _stream->readUint32LE();
- debugC(3, kLastExpressDebugGraphics, "Number of chunks in NIS file: %d", numChunks);
-
- // Check if there is enough data
- if (_stream->size() - _stream->pos() < (signed)(numChunks * sizeof(Chunk))) {
- debugC(2, kLastExpressDebugGraphics, "NIS file seems to be corrupted");
- return false;
- }
-
- // Read all the chunks
- for (uint32 i = 0; i < numChunks; ++i) {
- Chunk chunk;
- chunk.type = (ChunkType)_stream->readUint16LE();
- chunk.frame = _stream->readUint16LE();
- chunk.size = _stream->readUint32LE();
-
- _chunks.push_back(chunk);
-
- debugC(9, kLastExpressDebugGraphics, "Chunk Entry: type 0x%.4x, frame=%d, size=%d", chunk.type, chunk.frame, chunk.size);
- }
- _currentChunk = _chunks.begin();
- _changed = false;
- _startTime = g_system->getMillis();
-
- return true;
-}
-
-bool Animation::process() {
- if (!_currentChunk)
- error("[Animation::process] Current chunk iterator is invalid");
-
- if (_stream == nullptr || _chunks.size() == 0)
- error("[Animation::process] Trying to show an animation before loading data");
-
- // TODO: - subtract the time paused by the GUI
- // - Re-implement to be closer to the original engine
- // - Add support for subtitles
- // - Use engine sound queue instead of our own appendable sound instance
- int32 currentFrame = (g_system->getMillis() - _startTime) * 3 / 100;
-
- // Process all chunks until the current frame
- while (!_changed && _currentChunk != nullptr && currentFrame > _currentChunk->frame && !hasEnded()) {
- switch(_currentChunk->type) {
- //TODO: some info chunks are probably subtitle/sync related
- case kChunkTypeUnknown1:
- case kChunkTypeUnknown2:
- case kChunkTypeUnknown5:
- debugC(9, kLastExpressDebugGraphics, " info chunk: type 0x%.4x (size %d)", _currentChunk->type, _currentChunk->size);
- assert (_currentChunk->frame == 0);
- //TODO: _currentChunk->size?
- break;
-
- case kChunkTypeAudioInfo:
- debugC(9, kLastExpressDebugGraphics, " audio info: %d blocks", _currentChunk->size);
- assert (_currentChunk->frame == 0);
- //TODO: save the size?
- _audio = new AppendableSound();
- break;
-
- case kChunkTypeUnknown4:
- debugC(9, kLastExpressDebugGraphics, " info block 4");
- assert (_currentChunk->frame == 0 && _currentChunk->size == 0);
- //TODO unknown type of chunk
- break;
-
- case kChunkTypeBackground1:
- debugC(9, kLastExpressDebugGraphics, " background frame 1 (%d bytes, frame %d)", _currentChunk->size, _currentChunk->frame);
- delete _background1;
- _background1 = processChunkFrame(_stream, *_currentChunk);
- break;
-
- case kChunkTypeSelectBackground1:
- debugC(9, kLastExpressDebugGraphics, " select background 1");
- assert (_currentChunk->frame == 0 && _currentChunk->size == 0);
- _backgroundCurrent = 1;
- break;
-
- case kChunkTypeBackground2:
- debugC(9, kLastExpressDebugGraphics, " background frame 2 (%d bytes, frame %d)", _currentChunk->size, _currentChunk->frame);
- delete _background2;
- _background2 = processChunkFrame(_stream, *_currentChunk);
- break;
-
- case kChunkTypeSelectBackground2:
- debugC(9, kLastExpressDebugGraphics, " select background 2");
- assert (_currentChunk->frame == 0 && _currentChunk->size == 0);
- _backgroundCurrent = 2;
- break;
-
- case kChunkTypeOverlay:
- debugC(9, kLastExpressDebugGraphics, " overlay frame (%d bytes, frame %d)", _currentChunk->size, _currentChunk->frame);
- delete _overlay;
- _overlay = processChunkFrame(_stream, *_currentChunk);
- break;
-
- case kChunkTypeUpdate:
- case kChunkTypeUpdateTransition:
- debugC(9, kLastExpressDebugGraphics, " update%s: frame %d", _currentChunk->type == 15 ? "" : " with transition", _currentChunk->frame);
- assert (_currentChunk->size == 0);
- _changed = true;
- break;
-
- case kChunkTypeAudioData:
- debugC(9, kLastExpressDebugGraphics, " audio (%d blocks, %d bytes, frame %d)", _currentChunk->size / _soundBlockSize, _currentChunk->size, _currentChunk->frame);
- processChunkAudio(_stream, *_currentChunk);
-
- // Synchronize the audio by resetting the start time
- if (_currentChunk->frame == 0)
- _startTime = g_system->getMillis();
- break;
-
- case kChunkTypeAudioEnd:
- debugC(9, kLastExpressDebugGraphics, " audio end: %d blocks", _currentChunk->frame);
- assert (_currentChunk->size == 0);
- _audio->finish();
- //TODO: we need to start the linked sound (.LNK) after the audio from the animation ends
- break;
-
- default:
- error("[Animation::process] UNKNOWN chunk type=%x frame=%d size=%d", _currentChunk->type, _currentChunk->frame, _currentChunk->size);
- break;
- }
- _currentChunk++;
- }
-
- return true;
-}
-
-bool Animation::hasEnded() {
- return _currentChunk == _chunks.end();
-}
-
-Common::Rect Animation::draw(Graphics::Surface *surface) {
- if (!_overlay)
- error("[Animation::draw] Current overlay animation frame is invalid");
-
- // Paint the background
- if (_backgroundCurrent == 1 && _background1)
- _background1->draw(surface);
- else if (_backgroundCurrent == 2 && _background2)
- _background2->draw(surface);
-
- // Paint the overlay
- _overlay->draw(surface);
-
- //TODO
- return Common::Rect();
-}
-
-AnimFrame *Animation::processChunkFrame(Common::SeekableReadStream *in, const Chunk &c) const {
- assert (c.frame == 0);
-
- // Create a temporary chunk buffer
- Common::SeekableReadStream *str = in->readStream(c.size);
-
- // Read the frame information
- FrameInfo i;
- i.read(str, false);
-
- // Decode the frame
- AnimFrame *f = new AnimFrame(str, i, true);
-
- // Delete the temporary chunk buffer
- delete str;
-
- return f;
-}
-
-void Animation::processChunkAudio(Common::SeekableReadStream *in, const Chunk &c) {
- if (!_audio)
- error("[Animation::processChunkAudio] Audio stream is invalid");
-
- // Skip the Snd header, to queue just the audio blocks
- uint32 size = c.size;
- if ((c.size % 739) != 0) {
- // Read Snd header
- uint32 header1 = in->readUint32LE();
- uint16 header2 = in->readUint16LE();
- debugC(4, kLastExpressDebugSound, "Start ADPCM: %d, %d", header1, header2);
- size -= 6;
- }
-
- // Append the current chunk to the Snd
- _audio->queueBuffer(in->readStream(size));
-}
-
-// TODO: this method will probably go away and be integrated in the main loop
-void Animation::play() {
- Common::EventManager *eventMan = g_system->getEventManager();
- while (!hasEnded() && !Engine::shouldQuit()) {
- process();
-
- if (_changed) {
- // Create a temporary surface to merge the overlay with the background
- Graphics::Surface *s = new Graphics::Surface;
- s->create(640, 480, Graphics::PixelFormat(2, 5, 5, 5, 0, 10, 5, 0, 0));
-
- draw(s);
-
- // XXX: Update the screen
- g_system->copyRectToScreen(s->getPixels(), s->pitch, 0, 0, s->w, s->h);
-
- // Free the temporary surface
- s->free();
- delete s;
-
- _changed = false;
- }
-
- g_system->updateScreen();
-
- //FIXME: implement subtitles
- g_system->delayMillis(20);
-
- // Handle right-click to interrupt animations
- Common::Event ev = Common::Event();
- while (eventMan->pollEvent(ev)) {
- if (ev.type == Common::EVENT_RBUTTONUP) {
- // Stop audio
- if (_audio)
- _audio->finish();
-
- // TODO start LNK file sound?
- return;
- }
- }
- }
-}
-
-} // End of namespace LastExpress
diff --git a/engines/lastexpress/data/animation.h b/engines/lastexpress/data/animation.h
deleted file mode 100644
index bf0962e5b96..00000000000
--- a/engines/lastexpress/data/animation.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/* 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/>.
- *
- */
-
-#ifndef LASTEXPRESS_ANIMATION_H
-#define LASTEXPRESS_ANIMATION_H
-
-/*
- Animation format (.NIS)
-
- uint32 {4} - Number of chunks
-
- // for each chunk
- uint16 {2} - Type
- uint16 {2} - Tag
- uint32 {4} - Size of chunk
- byte {x} - Data (for "data" chunks: backgrounds, overlay & audio data)
-*/
-
-#include "lastexpress/drawable.h"
-
-#include "common/array.h"
-
-namespace Common {
-class SeekableReadStream;
-}
-
-namespace LastExpress {
-
-class AnimFrame;
-class AppendableSound;
-
-class Animation : public Drawable {
-public:
- enum FlagType {
- kFlagDefault = 16384,
- kFlagProcess = 49152
- };
-
- Animation();
- ~Animation() override;
-
- bool load(Common::SeekableReadStream *stream, int flag = kFlagDefault);
- bool process();
- bool hasEnded();
- Common::Rect draw(Graphics::Surface *surface) override;
- void play();
-
-private:
- static const uint32 _soundBlockSize = 739;
-
- // despite their size field, info chunks don't have a payload
- enum ChunkType {
- kChunkTypeNone = 0,
- kChunkTypeUnknown1 = 1,
- kChunkTypeUnknown2 = 2,
- kChunkTypeAudioInfo = 3,
- kChunkTypeUnknown4 = 4,
- kChunkTypeUnknown5 = 5,
- kChunkTypeBackground1 = 10,
- kChunkTypeSelectBackground1 = 11,
- kChunkTypeBackground2 = 12,
- kChunkTypeSelectBackground2 = 13,
- kChunkTypeOverlay = 20,
- kChunkTypeUpdate = 21,
- kChunkTypeUpdateTransition = 22,
- kChunkTypeSound1 = 30,
- kChunkTypeSound2 = 31,
- kChunkTypeAudioData = 32,
- kChunkTypeAudioEnd = 99
- };
-
- struct Chunk {
- ChunkType type;
- uint16 frame;
- uint32 size;
-
- Chunk() {
- type = kChunkTypeNone;
- frame = 0;
- size = 0;
- }
- };
-
- void reset();
- AnimFrame *processChunkFrame(Common::SeekableReadStream *in, const Chunk &c) const;
- void processChunkAudio(Common::SeekableReadStream *in, const Chunk &c);
-
- Common::SeekableReadStream *_stream;
- Common::Array<Chunk> _chunks;
- Common::Array<Chunk>::iterator _currentChunk;
- AnimFrame *_overlay, *_background1, *_background2;
- byte _backgroundCurrent;
- AppendableSound *_audio;
-
- uint32 _startTime;
- bool _changed;
-};
-
-} // End of namespace LastExpress
-
-#endif // LASTEXPRESS_ANIMATION_H
diff --git a/engines/lastexpress/data/archive.cpp b/engines/lastexpress/data/archive.cpp
index 74877a2e75d..07f92786576 100644
--- a/engines/lastexpress/data/archive.cpp
+++ b/engines/lastexpress/data/archive.cpp
@@ -24,96 +24,13 @@
#include "lastexpress/lastexpress.h"
#include "lastexpress/data/archive.h"
-#include "lastexpress/debug.h"
#include "common/debug.h"
#include "common/file.h"
-#include "common/substream.h"
-#include "common/savefile.h"
+#include "common/memstream.h"
namespace LastExpress {
-HPFArchive::HPFArchive(const Common::Path &path) {
- _filename = path;
-
- // Open a stream to the archive
- Common::SeekableReadStream *archive = SearchMan.createReadStreamForMember(_filename);
- if (!archive) {
- debugC(2, kLastExpressDebugResource, "Error opening file: %s", path.toString(Common::Path::kNativeSeparator).c_str());
- return;
- }
-
- debugC(2, kLastExpressDebugResource, "Opened archive: %s", path.toString(Common::Path::kNativeSeparator).c_str());
-
- // Read header to get the number of files
- uint32 numFiles = archive->readUint32LE();
- debugC(3, kLastExpressDebugResource, "Number of files in archive: %d", numFiles);
-
- // Read the list of files
- for (unsigned int i = 0; i < numFiles; ++i) {
- char name[13];
- HPFEntry entry;
-
- archive->read(&name, sizeof(char) * _archiveNameSize);
- entry.offset = archive->readUint32LE();
- entry.size = archive->readUint32LE();
- entry.isOnHD = archive->readUint16LE();
-
- // Terminate string
- name[12] = '\0';
-
- Common::String filename(name);
- filename.toLowercase();
-
- _files[filename] = entry;
-
- //debugC(9, kLastExpressDebugResource, "File entry: %s (offset:%d - Size: %d - HD: %u)", &eraseData, entry.offset, entry.size, entry.isOnHD);
- }
-
- // Close stream
- delete archive;
-}
-
-bool HPFArchive::hasFile(const Common::Path &path) const {
- Common::String name = path.toString();
- return (_files.find(name) != _files.end());
-}
-
-int HPFArchive::listMembers(Common::ArchiveMemberList &list) const {
- int numMembers = 0;
-
- for (FileMap::const_iterator i = _files.begin(); i != _files.end(); ++i) {
- list.push_back(Common::ArchiveMemberList::value_type(new Common::GenericArchiveMember(i->_key, *this)));
- numMembers++;
- }
-
- return numMembers;
-}
-
-const Common::ArchiveMemberPtr HPFArchive::getMember(const Common::Path &path) const {
- if (!hasFile(path))
- return Common::ArchiveMemberPtr();
-
- return Common::ArchiveMemberPtr(new Common::GenericArchiveMember(path, *this));
-}
-
-Common::SeekableReadStream *HPFArchive::createReadStreamForMember(const Common::Path &path) const {
- Common::String name = path.toString();
- FileMap::const_iterator fDesc = _files.find(name);
- if (fDesc == _files.end())
- return nullptr;
-
- Common::File *archive = new Common::File();
- if (!archive->open(_filename)) {
- delete archive;
- return nullptr;
- }
-
- return new Common::SeekableSubReadStream(archive, fDesc->_value.offset * _archiveSectorSize, fDesc->_value.offset * _archiveSectorSize + fDesc->_value.size * _archiveSectorSize, DisposeAfterUse::YES);
-}
-
-// NEW ARCHIVE
-
ArchiveManager::ArchiveManager(LastExpressEngine *engine) {
_engine = engine;
diff --git a/engines/lastexpress/data/archive.h b/engines/lastexpress/data/archive.h
index d7d2b49fb95..1e727f97320 100644
--- a/engines/lastexpress/data/archive.h
+++ b/engines/lastexpress/data/archive.h
@@ -22,58 +22,11 @@
#ifndef LASTEXPRESS_HPF_H
#define LASTEXPRESS_HPF_H
-/*
- HPF Archive Format
-
- * uint32 {4} Number of files
-
- For each file:
- * char {12} Name (zero-terminated)
- * uint32 {4} Offset (expressed in sectors of 2048 bytes)
- * uint16 {2} Size (expressed in sectors of 2048 bytes)
- * uint16 {2} Current position (expressed in sectors of 2048 bytes)
- * uint16 {2} File status flags:
- - Bit 0: "Is on CD"
- - Bit 1: "Is loaded"
-*/
-
-#include "common/archive.h"
-#include "common/hash-str.h"
-#include "common/hashmap.h"
-#include "common/str.h"
-#include "common/file.h"
-
#include "lastexpress/lastexpress.h"
-namespace LastExpress {
-
-class HPFArchive : public Common::Archive {
-public:
- HPFArchive(const Common::Path &path);
-
- bool hasFile(const Common::Path &path) const override;
- int listMembers(Common::ArchiveMemberList &list) const override;
- const Common::ArchiveMemberPtr getMember(const Common::Path &path) const override;
- Common::SeekableReadStream *createReadStreamForMember(const Common::Path &path) const override;
-
- int count() { return _files.size(); }
-
-private:
- static const unsigned int _archiveNameSize = 12;
- static const unsigned int _archiveSectorSize = 2048;
-
- // File entry
- struct HPFEntry {
- uint32 offset; ///< Offset (in sectors of 2048 bytes)
- uint32 size; ///< Size (in sectors of 2048 bytes)
- uint16 isOnHD; ///< File location (1: on HD; 0: on CD)
- };
-
- typedef Common::HashMap<Common::String, HPFEntry, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> FileMap;
+#include "common/file.h"
- FileMap _files; ///< List of files
- Common::Path _filename; ///< Filename of the archive
-};
+namespace LastExpress {
struct Seq;
diff --git a/engines/lastexpress/data/background.cpp b/engines/lastexpress/data/background.cpp
deleted file mode 100644
index 823168a2812..00000000000
--- a/engines/lastexpress/data/background.cpp
+++ /dev/null
@@ -1,140 +0,0 @@
-/* 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/>.
- *
- */
-
-// Based on Deniz Oezmen's code and Xentax Wiki documentation
-// http://oezmen.eu/
-// http://wiki.xentax.com/index.php/The_Last_Express_BG
-
-#include "lastexpress/data/background.h"
-
-#include "lastexpress/debug.h"
-
-#include "common/rect.h"
-#include "common/stream.h"
-
-namespace LastExpress {
-
-Background::Background() : _data(nullptr) {
- memset(&_header, 0, sizeof(BackgroundHeader));
-}
-
-Background::~Background() {
- delete[] _data;
-}
-
-bool Background::load(Common::SeekableReadStream *stream) {
- if (!stream)
- return false;
-
- // Reset data
- delete[] _data;
-
- // Load Background header
- _header.posX = stream->readUint32LE();
- _header.posY = stream->readUint32LE();
- _header.width = stream->readUint32LE();
- _header.height = stream->readUint32LE();
- _header.redSize = stream->readUint32LE();
- _header.blueSize = stream->readUint32LE();
- _header.greenSize = stream->readUint32LE();
-
- debugC(3, kLastExpressDebugGraphics, "Background Info: (%d, %d) - (%d x %d) - (%d, %d, %d)",
- _header.posX, _header.posY, _header.width, _header.height,
- _header.redSize, _header.blueSize, _header.greenSize);
-
- // Load and decompress Background channel data
- uint32 numPix = _header.width * _header.height;
- byte *dataR = decodeComponent(stream, _header.redSize, numPix);
- byte *dataB = decodeComponent(stream, _header.blueSize, numPix);
- byte *dataG = decodeComponent(stream, _header.greenSize, numPix);
-
- // Save to pixel buffer
- // FIXME handle big-endian case
- _data = new uint16[_header.width * _header.height];
- for (uint i = 0; i < _header.width * _header.height; i++)
- _data[i] = (uint16)((dataR[i] << 10) + (dataG[i] << 5) + dataB[i]);
-
- // Cleanup buffers
- delete[] dataR;
- delete[] dataG;
- delete[] dataB;
-
- delete stream;
-
- return true;
-}
-
-Common::Rect Background::draw(Graphics::Surface *surface) {
- if (!_data) {
- debugC(2, kLastExpressDebugGraphics, "Trying to show a background before loading data");
- return Common::Rect();
- }
-
- int i = 0;
- for (uint16 y = 0; y < _header.height; y++) {
- for (uint16 x = 0; x < _header.width; x++) {
- surface->fillRect(Common::Rect((int16)(_header.posX + x), (int16)(_header.posY + y), (int16)(_header.posX + x + 1), (int16)(_header.posY + y + 1)), _data[i]);
- i ++;
- }
- }
-
- return Common::Rect((int16)_header.posX, (int16)_header.posY, (int16)(_header.posX + _header.width), (int16)(_header.posY + _header.height));
-}
-
-byte *Background::decodeComponent(Common::SeekableReadStream *in, uint32 inSize, uint32 outSize) const {
- // Create the destination array
- byte *out = new byte[outSize]();
- if (!out)
- return nullptr;
-
- // Initialize the decoding
- uint32 inPos = 0;
- uint32 outPos = 0;
-
- // Decode
- while (inPos < inSize) {
- byte inByte = in->readByte();
- inPos++;
-
- if (inByte < 0x80) {
- // Direct decompression (RLE)
- byte len = (inByte >> 5) + 1;
- byte data = inByte & 0x1f;
- for (int i = 0; i < len && outPos < outSize; i++)
- out[outPos++] = data;
- } else {
- // Buffer back reference, 4096 byte window
- // Take inByte and the following value as a big endian
- // OfsLen while zeroing the first bit
- uint16 ofsLen = ((inByte & 0x7F) << 8) | in->readByte();
- inPos++;
-
- int32 len = (ofsLen >> 12) + 3;
- int32 hisPos = (int32)(outPos + (ofsLen & 0x0FFF) - 4096);
- for (int i = 0; i < len && outPos < outSize; i++)
- out[outPos++] = out[hisPos++];
- }
- }
-
- return out;
-}
-
-} // End of namespace LastExpress
diff --git a/engines/lastexpress/data/background.h b/engines/lastexpress/data/background.h
deleted file mode 100644
index e87ee911c9c..00000000000
--- a/engines/lastexpress/data/background.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* 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/>.
- *
- */
-
-#ifndef LASTEXPRESS_BACKGROUND_H
-#define LASTEXPRESS_BACKGROUND_H
-
-/*
- Background file format (.BG)
-
- header:
- uint32 {4} - position X on screen
- uint32 {4} - position Y on screen
- uint32 {4} - image width
- uint32 {4} - image height
- uint32 {4} - red color channel data size
- uint32 {4} - blue color channel data size
- uint32 {4} - green color channel data size
-
- data:
- byte {x} - red color channel data
- byte {x} - blue color channel data
- byte {x} - green color channel data
-*/
-
-#include "lastexpress/drawable.h"
-
-namespace Common {
-class SeekableReadStream;
-}
-
-namespace LastExpress {
-
-class Background : public Drawable {
-public:
- Background();
- ~Background() override;
-
- bool load(Common::SeekableReadStream *stream);
-
- Common::Rect draw(Graphics::Surface *surface) override;
-
-private:
- struct BackgroundHeader {
- uint32 posX; ///< position X on screen
- uint32 posY; ///< position Y on screen
- uint32 width; ///< image width
- uint32 height; ///< image height
- uint32 redSize; ///< red color channel data size
- uint32 blueSize; ///< blue color channel data size
- uint32 greenSize; ///< green color channel data size
- };
-
- BackgroundHeader _header;
- uint16 *_data; ///< decoded background data
-
- byte *decodeComponent(Common::SeekableReadStream *in, uint32 inSize, uint32 outSize) const;
-};
-
-} // End of namespace LastExpress
-
-#endif // LASTEXPRESS_BACKGROUND_H
diff --git a/engines/lastexpress/data/cursor.cpp b/engines/lastexpress/data/cursor.cpp
deleted file mode 100644
index 4a5ad671d6d..00000000000
--- a/engines/lastexpress/data/cursor.cpp
+++ /dev/null
@@ -1,144 +0,0 @@
-/* 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/data/cursor.h"
-
-#include "lastexpress/lastexpress.h"
-
-#include "common/stream.h"
-#include "common/system.h"
-#include "graphics/cursorman.h"
-
-namespace LastExpress {
-
-uint16 brigthnessData[4] = { 0, 0x7BDE, 0x739C, 0x6318 };
-
-Cursor::Cursor() : _current(kCursorMAX) {
- memset(&_cursors, 0, sizeof(_cursors));
-}
-
-bool Cursor::load(Common::SeekableReadStream *stream) {
- if (!stream)
- return false;
-
- // Load the whole file to memory
- Common::SeekableReadStream *data = stream->readStream((uint32) stream->size());
- delete stream;
- if (!data)
- return false;
-
- // Read the hotspot data
- for (int i = 0; i < kCursorMAX; i++) {
- _cursors[i].hotspotX = data->readUint16LE();
- _cursors[i].hotspotY = data->readUint16LE();
- debugC(15, kLastExpressDebugCursor,
- "Cursor %d hotspot x: %d, hotspot y: %d",
- i, _cursors[i].hotspotX, _cursors[i].hotspotY);
- }
-
- // Read the pixel data
- for (int i = 0; i < kCursorMAX; i++)
- for (int pix = 0; pix < 32 * 32; pix++)
- _cursors[i].image[pix] = data->readUint16LE();
-
- delete data;
- return true;
-}
-
-void Cursor::show(bool visible) const {
- CursorMan.showMouse(visible);
-}
-
-bool Cursor::checkStyle(CursorStyle style) const {
- if (style >= kCursorMAX) {
- debugC(2, kLastExpressDebugGraphics, "Trying to use an invalid cursor style: was %d, max %d", (int)style, kCursorMAX);
- return false;
- }
-
- return true;
-}
-
-void Cursor::setStyle(CursorStyle style) {
- if (!checkStyle(style))
- return;
-
- if (style == _current)
- return;
-
- debugC(10, kLastExpressDebugCursor, "Cursor: setting style: %d", style);
-
- // Save the new cursor
- _current = style;
-
- // Reuse the screen pixel format
- Graphics::PixelFormat pf = g_system->getScreenFormat();
- CursorMan.replaceCursor(getCursorImage(style),
- 32, 32, _cursors[style].hotspotX, _cursors[style].hotspotY,
- 0, false, &pf);
-}
-
-const uint16 *Cursor::getCursorImage(CursorStyle style) const {
- if (!checkStyle(style))
- return nullptr;
-
- return _cursors[style].image;
-}
-
-
-Icon::Icon(CursorStyle style) : _style(style), _x(0), _y(0), _brightnessIndex(-1) {}
-
-void Icon::setPosition(int16 x, int16 y) {
- _x = x;
- _y = y;
-}
-
-void Icon::setBrightness(int16 brightnessIndex) {
- assert(brightnessIndex < ARRAYSIZE(brigthnessData));
-
- _brightnessIndex = brightnessIndex;
-}
-
-Common::Rect Icon::draw(Graphics::Surface *surface) {
- const uint16 *image = ((LastExpressEngine *)g_engine)->getCursor()->getCursorImage((CursorStyle)_style);
- if (!image)
- return Common::Rect();
-
- // TODO adjust brightness. The original game seems to be using a table for that (at least in the highlighting case)
- for (int j = 0; j < 32; j++) {
- uint16 *s = (uint16 *)surface->getBasePtr(_x, _y + j);
- for (int i = 0; i < 32; i++) {
-
- // Adjust brightness
- if (_brightnessIndex == -1 || _brightnessIndex >= ARRAYSIZE(brigthnessData))
- *s = *image;
- else
- *s = (*image & brigthnessData[_brightnessIndex]) >> _brightnessIndex;
-
- // Update the image and surface pointers
- image++;
- s++;
- }
- }
-
- return Common::Rect(_x, _y, _x + 32, _y + 32);
-}
-
-} // End of namespace LastExpress
diff --git a/engines/lastexpress/data/cursor.h b/engines/lastexpress/data/cursor.h
deleted file mode 100644
index b55f20d4ffc..00000000000
--- a/engines/lastexpress/data/cursor.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* 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/>.
- *
- */
-
-#ifndef LASTEXPRESS_CURSOR_H
-#define LASTEXPRESS_CURSOR_H
-
-/*
- Cursor format (CURSORS.TBM)
-
- style table:
- (for each cursor)
- uint16 {2} - hotspot X
- uint16 {2} - hotspot Y
-
- data:
- (for each cursor)
- uint16 {32*32} - cursor data
-*/
-
-#include "lastexpress/drawable.h"
-
-#include "lastexpress/shared.h"
-
-namespace Common {
-class SeekableReadStream;
-}
-
-namespace LastExpress {
-
-class Icon : public Drawable {
-public:
- Icon(CursorStyle style);
-
- void setPosition(int16 x, int16 y);
- void setBrightness(int16 brightnessIndex);
- Common::Rect draw(Graphics::Surface *surface) override;
-
-private:
- CursorStyle _style;
- int16 _x, _y;
- int16 _brightnessIndex;
-};
-
-class Cursor {
-public:
- Cursor();
-
- bool load(Common::SeekableReadStream *stream);
- void show(bool visible) const;
-
- void setStyle(CursorStyle style);
- CursorStyle getStyle() const { return _current; }
-
-private:
- // Style
- CursorStyle _current;
-
- // Cursors data
- struct {
- uint16 image[32 * 32];
- uint16 hotspotX, hotspotY;
- } _cursors[kCursorMAX];
-
- bool checkStyle(CursorStyle style) const;
- const uint16 *getCursorImage(CursorStyle style) const;
-
- // Only allow full access for drawing (needed for getCursorImage)
- friend Common::Rect Icon::draw(Graphics::Surface *surface);
-};
-
-} // End of namespace LastExpress
-
-#endif // LASTEXPRESS_CURSOR_H
diff --git a/engines/lastexpress/data/cvcrfile.cpp b/engines/lastexpress/data/cvcrfile.cpp
index b38fad51bbe..3682ac69068 100644
--- a/engines/lastexpress/data/cvcrfile.cpp
+++ b/engines/lastexpress/data/cvcrfile.cpp
@@ -24,7 +24,9 @@
#include "common/file.h"
#include "common/memstream.h"
+#include "common/savefile.h"
#include "common/stream.h"
+
#include "engines/metaengine.h"
namespace LastExpress {
diff --git a/engines/lastexpress/data/font.cpp b/engines/lastexpress/data/font.cpp
deleted file mode 100644
index 9c8a6344671..00000000000
--- a/engines/lastexpress/data/font.cpp
+++ /dev/null
@@ -1,204 +0,0 @@
-/* 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/data/font.h"
-
-#include "common/rect.h"
-#include "common/stream.h"
-#include "common/system.h"
-#include "common/textconsole.h"
-
-namespace LastExpress {
-
-Font::Font() : _numGlyphs(0), _glyphs(nullptr), _glyphWidths(nullptr) {
- memset(&_palette, 0, sizeof(_palette));
- memset(&_charMap, 0, sizeof(_charMap));
-}
-
-Font::~Font() {
- reset();
-}
-
-void Font::reset() {
- delete[] _glyphs;
- delete[] _glyphWidths;
-}
-
-bool Font::load(Common::SeekableReadStream *stream) {
- if (!stream)
- return false;
-
- // Reset data
- reset();
-
- // Read the palette
- for (uint i = 0; i < _paletteSize; i++) {
- _palette[i] = stream->readUint16LE();
- }
-
- // Read the character map
- stream->read(_charMap, _charMapSize);
-
- // Read the glyphs
- _numGlyphs = stream->readUint16LE();
- _glyphs = new byte[_numGlyphs * 18 * 8];
- stream->read(_glyphs, _numGlyphs * 18 * 8);
-
- // TODO: Read something else?
- //uint16 unknown = fontFile->readByte();
- //warning("unknown = %d", unknown);
- //warning("pos = %d", fontFile->pos());
- //warning("left = %d", fontFile->size() - fontFile->pos());
-
- //while (!fontFile->eos()) {
- //unknown = fontFile->readByte();
- //warning("val = %d", unknown);
- //}
-
- // Precalculate glyph widths
- _glyphWidths = new byte[_numGlyphs];
- for (uint16 i = 0; i < _numGlyphs; i++) {
- _glyphWidths[i] = getGlyphWidth(i);
- }
-
- delete stream;
-
- return true;
-}
-
-
-uint16 Font::getCharGlyph(uint16 c) const {
- //warning("%c", c);
- if (c >= 0x200)
- error("[Font::getCharGlyph] Invalid character %d", c);
-
- return _charMap[c];
-}
-
-byte *Font::getGlyphImg(uint16 g) {
- if (!_glyphs)
- error("[Font::getGlyphImg] Invalid glyphs");
-
- if (g >= _numGlyphs)
- error("[Font::getGlyphImg] Invalid glyph %d (%d available)", g, _numGlyphs);
-
- return _glyphs + g * 18 * 8;
-}
-
-uint8 Font::getGlyphWidth(uint16 g) {
- byte *p = getGlyphImg(g);
-
- uint8 maxLineWidth = 0;
- for (int j = 0; j < 18; j++) {
- uint8 currentLineWidth = 0;
- for (uint8 i = 0; i < 16; i++) {
- byte index;
- if (i % 2)
- index = *p & 0xf;
- else
- index = *p >> 4;
- uint16 color = _palette[index];
- if (color != 0x1f)
- currentLineWidth = i;
- if (i % 2)
- p++;
- }
- if (currentLineWidth > maxLineWidth)
- maxLineWidth = currentLineWidth;
- }
-
- return maxLineWidth;
-}
-
-byte *Font::getCharImg(uint16 c) {
- return getGlyphImg(getCharGlyph(c));
-}
-
-uint8 Font::getCharWidth(uint16 c) const{
- if (c == 0x20) {
- // Space is a special case
- // TODO: this is an arbitrary value
- return 10;
- } else {
- if (!_glyphWidths)
- error("[Font::getCharWidth] Invalid glyphs widths");
-
- return _glyphWidths[getCharGlyph(c)];
- }
-}
-
-uint16 Font::getStringWidth(Common::String str) const {
- uint16 width = 0;
- for (uint i = 0; i < str.size(); i++)
- width += getCharWidth((unsigned char)str[i]);
-
- return width;
-}
-
-uint16 Font::getStringWidth(const uint16 *str, uint16 length) const {
- uint16 width = 0;
- for (uint i = 0; i < length; i++)
- width += getCharWidth(str[i]);
-
- return width;
-}
-
-void Font::drawChar(Graphics::Surface *surface, int16 x, int16 y, uint16 c) {
- byte *p = getCharImg(c);
-
- for (int16 j = 0; j < 18; j++) {
- for (int16 i = 0; i < 16; i++) {
- byte index;
- if (i % 2)
- index = *p & 0xf;
- else
- index = *p >> 4;
- uint16 color = _palette[index];
- if (color != 0x1f) {
- surface->fillRect(Common::Rect(x+i, y+j, x+i+1, y+j+1), color);
- }
- if (i % 2)
- p++;
- }
- }
-}
-
-Common::Rect Font::drawString(Graphics::Surface *surface, int16 x, int16 y, Common::String str) {
- int16 currentX = x;
- for (uint i = 0; i < str.size(); i++) {
- drawChar(surface, currentX, y, (unsigned char)str[i]);
- currentX += getCharWidth((unsigned char)str[i]);
- }
-
- return Common::Rect(x, y, x + currentX, y + (int16)_charHeight);
-}
-
-Common::Rect Font::drawString(Graphics::Surface *surface, int16 x, int16 y, const uint16 *str, uint16 length) {
- int16 currentX = x;
- for (uint i = 0; i < length; i++) {
- drawChar(surface, currentX, y, str[i]);
- currentX += getCharWidth(str[i]);
- }
-
- return Common::Rect(x, y, x + currentX, y + (int16)_charHeight);
-}
-
-} // End of namespace LastExpress
diff --git a/engines/lastexpress/data/font.h b/engines/lastexpress/data/font.h
deleted file mode 100644
index 16cbcc21349..00000000000
--- a/engines/lastexpress/data/font.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* 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/>.
- *
- */
-
-#ifndef LASTEXPRESS_FONT_H
-#define LASTEXPRESS_FONT_H
-
-/*
- Font format (FONT.DAT)
-
- uint16 {40} - Palette data
- byte {200} - Character map
- uint16 {2} - Number of glyphs
-
- // For each glyph
- byte {18*8} - Glyph data
-
- byte {x} - Unknown data (probably just garbage)
-*/
-
-#include "common/str.h"
-#include "graphics/surface.h"
-
-namespace Common {
-class SeekableReadStream;
-struct Rect;
-}
-
-namespace LastExpress {
-
-class Font {
-public:
- Font();
- ~Font();
-
- bool load(Common::SeekableReadStream *stream);
- Common::Rect drawString(Graphics::Surface *surface, int16 x, int16 y, Common::String str);
- Common::Rect drawString(Graphics::Surface *surface, int16 x, int16 y, const uint16 *str, uint16 length);
-
-private:
- static const uint32 _paletteSize = 0x10;
- static const uint32 _charMapSize = 0x200;
- static const uint32 _charHeight = 16;
-
- void reset();
-
- uint16 getCharGlyph(uint16 c) const;
- byte *getGlyphImg(uint16 g);
- uint8 getGlyphWidth(uint16 g);
- byte *getCharImg(uint16 c);
- uint8 getCharWidth(uint16 c) const;
- uint16 getStringWidth(Common::String str) const;
- uint16 getStringWidth(const uint16 *str, uint16 length) const;
- void drawChar(Graphics::Surface *surface, int16 x, int16 y, uint16 c);
-
- // Font data
- uint16 _palette[_paletteSize];
- uint8 _charMap[_charMapSize];
- uint16 _numGlyphs;
- byte *_glyphs;
- uint8 *_glyphWidths;
-};
-
-} // End of namespace LastExpress
-
-#endif // LASTEXPRESS_FONT_H
diff --git a/engines/lastexpress/data/scene.cpp b/engines/lastexpress/data/scene.cpp
deleted file mode 100644
index 1d18f8657fb..00000000000
--- a/engines/lastexpress/data/scene.cpp
+++ /dev/null
@@ -1,298 +0,0 @@
-/* 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/data/scene.h"
-
-#include "lastexpress/data/background.h"
-
-#include "lastexpress/helpers.h"
-#include "lastexpress/lastexpress.h"
-#include "lastexpress/resource.h"
-
-#include "common/stream.h"
-
-namespace LastExpress {
-
-SceneHotspot::~SceneHotspot() {
- for (uint i = 0; i < _coords.size(); i++)
- SAFE_DELETE(_coords[i]);
-
- _coords.clear();
-}
-
-SceneHotspot *SceneHotspot::load(Common::SeekableReadStream *stream) {
- SceneHotspot *hs = new SceneHotspot();
-
- // Rect
- hs->rect.left = (int16)stream->readUint16LE();
- hs->rect.right = (int16)stream->readUint16LE();
- hs->rect.top = (int16)stream->readUint16LE();
- hs->rect.bottom = (int16)stream->readUint16LE();
-
- hs->coordsOffset = stream->readUint32LE();
- hs->scene = (SceneIndex)stream->readUint16LE();
- hs->location = stream->readByte();
- hs->action = (Action)stream->readByte();
- hs->param1 = stream->readByte();
- hs->param2 = stream->readByte();
- hs->param3 = stream->readByte();
- hs->cursor = stream->readByte();
- hs->next = stream->readUint32LE();
-
- debugC(10, kLastExpressDebugScenes, "\thotspot: scene=%d location=%02d action=%d param1=%02d param2=%02d param3=%02d cursor=%02d rect=(%d, %d)x(%d, %d)",
- hs->scene, hs->location, hs->action, hs->param1, hs->param2, hs->param3, hs->cursor, hs->rect.left, hs->rect.top, hs->rect.right, hs->rect.bottom);
- debugC(10, kLastExpressDebugScenes, "\t coords=%d next=%d ", hs->coordsOffset, hs->next);
-
- // Read all coords data
- uint32 offset = hs->coordsOffset;
- while (offset != 0) {
-
- SceneCoord *sceneCoord = new SceneCoord;
-
- stream->seek(offset, SEEK_SET);
-
- sceneCoord->field_0 = stream->readSint32LE();
- sceneCoord->field_4 = stream->readSint32LE();
- sceneCoord->field_8 = stream->readByte();
- sceneCoord->next = stream->readUint32LE();
-
- hs->_coords.push_back(sceneCoord);
-
- offset = sceneCoord->next;
- }
-
- return hs;
-}
-
-Common::String SceneHotspot::toString() const {
- Common::String output = "";
-
- output += Common::String::format(" hotspot: scene=%d location=%02d action=%d param1=%02d param2=%02d param3=%02d cursor=%02d rect=(%d, %d)x(%d, %d)",
- scene, location, action, param1, param2, param3, cursor, rect.left, rect.top, rect.right, rect.bottom);
-
- return output;
-}
-
-bool SceneHotspot::isInside(const Common::Point &point) {
-
- bool contains = rect.contains(point);
-
- if (_coords.empty() || !contains)
- return contains;
-
- // Checks extended coordinates
- for (uint i = 0; i < _coords.size(); i++) {
-
- SceneCoord *sCoord = _coords[i];
-
- bool cont;
- if (sCoord->field_8)
- cont = (sCoord->field_4 + point.x * sCoord->field_0 + 1000 * point.y) >= 0;
- else
- cont = (sCoord->field_4 + point.x * sCoord->field_0 + 1000 * point.y) <= 0;
-
- if (!cont)
- return false;
- }
-
- return true;
-}
-
-//////////////////////////////////////////////////////////////////////////
-// Scene
-Scene::~Scene() {
- // Free the hotspots
- for (uint i = 0; i < _hotspots.size(); i++)
- delete _hotspots[i];
-}
-
-Scene *Scene::load(Common::SeekableReadStream *stream) {
- Scene *scene = new Scene();
-
- stream->read(&scene->_name, sizeof(scene->_name));
- scene->_sig = stream->readByte();
- scene->entityPosition = (EntityPosition)stream->readUint16LE();
- scene->location = (Location)stream->readUint16LE();
- scene->car = (CarIndex)stream->readUint16LE();
- scene->position = stream->readByte();
- scene->type = (Type)stream->readByte();
- scene->param1 = stream->readByte();
- scene->param2 = stream->readByte();
- scene->param3 = stream->readByte();
- scene->_hotspot = stream->readUint32LE();
-
- return scene;
-}
-
-void Scene::loadHotspots(Common::SeekableReadStream *stream) {
- if (!_hotspots.empty())
- return;
-
- debugC(10, kLastExpressDebugScenes, "Scene: name=%s, sig=%02d, entityPosition=%d, location=%d", _name, _sig, entityPosition, location);
- debugC(10, kLastExpressDebugScenes, "\tcar=%02d, position=%02d, type=%02d, param1=%02d", car, position, type, param1);
- debugC(10, kLastExpressDebugScenes, "\tparam2=%02d, param3=%02d, hotspot=%d\n", param2, param3, _hotspot);
-
- // Read all hotspots
- if (_hotspot != 0) {
- stream->seek((int32)_hotspot, SEEK_SET);
- SceneHotspot *hotspot = SceneHotspot::load(stream);
- while (hotspot) {
- _hotspots.push_back(hotspot);
-
- if (hotspot->next == 0)
- break;
-
- stream->seek((int32)hotspot->next, SEEK_SET);
- hotspot = SceneHotspot::load(stream);
- }
- }
-}
-
-bool Scene::checkHotSpot(const Common::Point &coord, SceneHotspot **hotspot) {
- bool found = false;
- int _location = 0;
-
- for (uint i = 0; i < _hotspots.size(); i++) {
- if (_hotspots[i]->isInside(coord)) {
- if (_location <= _hotspots[i]->location) {
- _location = _hotspots[i]->location;
- *hotspot = _hotspots[i];
- found = true;
- }
- }
- }
-
- return found;
-}
-
-SceneHotspot *Scene::getHotspot(uint index) {
- if (_hotspots.empty())
- error("[Scene::getHotspot] Scene does not have any hotspots");
-
- if (index >= _hotspots.size())
- error("[Scene::getHotspot] Invalid index (was: %d, max: %d)", index, _hotspots.size() - 1);
-
- return _hotspots[index];
-}
-
-Common::Rect Scene::draw(Graphics::Surface *surface) {
- // Safety checks
- Common::Rect rect;
-
- Common::String sceneName(_name);
- sceneName.trim();
- if (sceneName.empty())
- error("[Scene::draw] This scene is not a valid drawing scene");
-
- // Load background
- Background *background = ((LastExpressEngine *)g_engine)->getResourceManager()->loadBackground(sceneName);
- if (background) {
- rect = background->draw(surface);
- delete background;
- }
-
- return rect;
-}
-
-Common::String Scene::toString() {
- Common::String output = "";
-
- output += Common::String::format("Scene: name=%s, sig=%02d, entityPosition=%d, location=%d\n", _name, _sig, entityPosition, location);
- output += Common::String::format(" car=%02d, position=%02d, type=%02d, param1=%02d\n", car, position, type, param1);
- output += Common::String::format(" param2=%02d, param3=%02d, hotspot=%d\n", param2, param3, _hotspot);
-
- // Hotspots
- if (_hotspots.size() != 0) {
- output += "\nHotspots:\n";
- for (uint i = 0; i < _hotspots.size(); i++)
- output += _hotspots[i]->toString() + "\n";
- }
-
- return output;
-}
-
-//////////////////////////////////////////////////////////////////////////
-// SceneLoader
-SceneLoader::SceneLoader() : _stream(nullptr) {}
-
-SceneLoader::~SceneLoader() {
- clear();
-}
-
-void SceneLoader::clear() {
- // Remove all scenes
- for (uint i = 0; i < _scenes.size(); i++)
- delete _scenes[i];
-
- _scenes.clear();
-
- delete _stream;
-}
-
-bool SceneLoader::load(Common::SeekableReadStream *stream) {
- if (!stream)
- return false;
-
- clear();
-
- _stream = stream;
-
- // Read the default scene to get the total number of scenes
- Scene *header = Scene::load(_stream);
- if (!header)
- error("[SceneLoader::load] Invalid data file");
-
- debugC(2, kLastExpressDebugScenes, " found %d entries", header->entityPosition); /* Header entityPosition is the scene count */
-
- if (header->entityPosition > 2500) {
- delete header;
-
- return false;
- }
-
- _scenes.push_back(header);
-
- // Read all the chunks
- for (uint i = 0; i < (uint)header->entityPosition; ++i) {
- Scene *scene = Scene::load(_stream);
- if (!scene)
- break;
-
- _scenes.push_back(scene);
- }
-
- return true;
-}
-
-Scene *SceneLoader::get(SceneIndex index) {
- if (_scenes.empty())
- return nullptr;
-
- if (index > _scenes.size())
- return nullptr;
-
- // Load the hotspots if needed
- _scenes[(uint)index]->loadHotspots(_stream);
-
- return _scenes[(uint)index];
-}
-
-} // End of namespace LastExpress
diff --git a/engines/lastexpress/data/scene.h b/engines/lastexpress/data/scene.h
deleted file mode 100644
index b0dfbf21a98..00000000000
--- a/engines/lastexpress/data/scene.h
+++ /dev/null
@@ -1,259 +0,0 @@
-/* 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/>.
- *
- */
-
-#ifndef LASTEXPRESS_SCENE_H
-#define LASTEXPRESS_SCENE_H
-
-/*
- Scene format (CDTRAIN.DAT)
-
- (text:00484750)
- header (24 bytes)
- char {8} - entry eraseData (null terminated)
- byte {1} - 0xCD
- uint16 {2} - number of scenes (for first entry - always 0 after?)
- uint16 {2} - 11 ??
- uint16 {2} - car
- byte {1} - camera position (used to get the proper sequences to show)
- byte {1} - type
- byte {1} - param1
- byte {1} - param2
- byte {1} - param3
- uint32 {4} - Offset to hotspot info struct
-
- probably contains cursor type too / scene index : 0 - 2500 (max)
-
- hotspot info (24 bytes)
- uint16 {2} - left
- uint16 {2} - right
- uint16 {2} - top
- uint16 {2} - bottom
- uint32 {4} - scene coords data
- uint16 {2} - scene
- byte {1} - location;
- byte {1} - action;
- byte {1} - param1;
- byte {1} - param2;
- byte {1} - param3
- byte {1} - cursor
- uint32{4} - offset to next hotpost
-
- coords data (9 bytes)
- uint32 {4} - ??
- uint32 {4} - ??
- byte {1} - ??
- uint32 {4} - offset to next coords data structure
-
-*/
-
-#include "lastexpress/drawable.h"
-#include "lastexpress/shared.h"
-
-#include "common/array.h"
-#include "common/rect.h"
-
-namespace Common {
-class SeekableReadStream;
-class String;
-}
-
-namespace LastExpress {
-
-class Scene;
-
-class SceneHotspot {
-public:
- enum Action {
- kActionNoneHS = 0,
- kActionInventory = 1,
- kActionSavePoint = 2,
- kActionPlaySound = 3,
- kActionPlayMusic = 4,
- kActionKnockOnDoor = 5,
- kActionCompartment = 6,
- kActionPlaySounds = 7,
- kActionPlayAnimation = 8,
- kActionOpenCloseObject = 9,
- kActionObjectUpdateLocation2 = 10,
- kActionSetItemLocation = 11,
- kAction12 = 12,
- kActionPickItem = 13,
- kActionDropItem = 14,
- kAction15 = 15,
- kActionEnterCompartment = 16,
- kActionGetOutsideTrain = 18,
- kActionSlip = 19,
- kActionGetInsideTrain = 20,
- kActionClimbUpTrain = 21,
- kActionClimbDownTrain = 22,
- kActionJumpUpDownTrain = 23,
- kActionUnbound = 24,
- kAction25 = 25,
- kAction26 = 26,
- kAction27 = 27,
- kActionConcertSitCough = 28,
- kAction29 = 29,
- kActionCatchBeetleHS = 30,
- kActionExitCompartmentHS = 31,
- kAction32 = 32,
- KActionUseWhistle = 33,
- kActionOpenMatchBox = 34,
- kActionOpenBed = 35,
- kActionDialog = 37,
- kActionEggBox = 38,
- kAction39 = 39,
- kActionBed = 40,
- kAction41 = 41,
- kAction42 = 42,
- kActionSwitchChapter = 43,
- kAction44 = 44
- };
-
- struct SceneCoord {
- int32 field_0;
- int32 field_4;
- byte field_8;
- uint32 next;
-
- SceneCoord() {
- field_0 = 0;
- field_4 = 0;
- field_8 = 0;
- next = 0;
- }
- };
-
- Common::Rect rect;
- uint32 coordsOffset;
- SceneIndex scene;
- byte location;
- Action action;
- byte param1;
- byte param2;
- byte param3;
- byte cursor;
- uint32 next;
-
- SceneHotspot() {
- coordsOffset = 0;
- scene = kSceneNone;
- location = 0;
- action = kActionNoneHS;
- param1 = 0;
- param2 = 0;
- param3 = 0;
- cursor = 0;
- next = 0;
- }
- ~SceneHotspot();
-
- static SceneHotspot *load(Common::SeekableReadStream *stream);
-
- bool isInside(const Common::Point &point);
-
- Common::String toString() const;
-
-private:
- Common::Array<SceneCoord *> _coords;
-};
-
-class SceneLoader {
-public:
- SceneLoader();
- ~SceneLoader();
-
- bool load(Common::SeekableReadStream *stream);
- Scene *get(SceneIndex index);
-
- uint32 count() const { return _scenes.size() - 1; }
-
-private:
- Common::SeekableReadStream *_stream;
- Common::Array<Scene *> _scenes;
-
- void clear();
-};
-
-class Scene : public Drawable {
-public:
- // Enumerations
- enum Type {
- // PreProcess
- kTypeObject = 1,
- kTypeItem = 2,
- kTypeItem2 = 3,
- kTypeObjectItem = 4,
- kTypeItem3 = 5,
- kTypeObjectLocation2 = 6,
- kTypeCompartments = 7,
- kTypeCompartmentsItem = 8,
-
- // PostProcess
- kTypeList = 128,
- kTypeSavePointChapter = 129,
- kTypeLoadBeetleSequences = 130,
- kTypeGameOver = 131,
- kTypeReadText = 132,
- kType133 = 133
- };
-
- // Data
- EntityPosition entityPosition;
- Location location;
- CarIndex car;
- PositionOld position;
- Type type;
- byte param1;
- byte param2;
- byte param3;
-
- ~Scene() override;
-
- Common::Rect draw(Graphics::Surface *surface) override;
-
- // Hotspots
- Common::Array<SceneHotspot *> *getHotspots() { return &_hotspots; }
- bool checkHotSpot(const Common::Point &coord, SceneHotspot **hotspot);
- SceneHotspot *getHotspot(uint index = 0);
-
- Common::String toString();
-
-private:
- char _name[8];
- byte _sig;
- uint32 _hotspot;
-
- Scene() {}
- Common::Array<SceneHotspot *> _hotspots;
-
- static Scene *load(Common::SeekableReadStream *stream);
- void loadHotspots(Common::SeekableReadStream *stream);
-
- void clear();
-
- // Only allow full access for loading the scene and the hotspots
- friend bool SceneLoader::load(Common::SeekableReadStream *stream);
- friend Scene *SceneLoader::get(SceneIndex index);
-};
-
-} // End of namespace LastExpress
-
-#endif // LASTEXPRESS_SCENE_H
diff --git a/engines/lastexpress/data/sequence.cpp b/engines/lastexpress/data/sequence.cpp
deleted file mode 100644
index 3ae0b8c32c3..00000000000
--- a/engines/lastexpress/data/sequence.cpp
+++ /dev/null
@@ -1,480 +0,0 @@
-/* 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/>.
- *
- */
-
-// Based on Deniz Oezmen's code: http://oezmen.eu/
-
-#include "lastexpress/data/sequence.h"
-
-#include "lastexpress/debug.h"
-
-#include "common/stream.h"
-
-namespace LastExpress {
-
-void FrameInfo::read(Common::SeekableReadStream *in, bool isSequence) {
- // Save the current position
- int32 basePos = in->pos();
-
- dataOffset = in->readUint32LE();
- unknown = in->readUint32LE();
- paletteOffset = in->readUint32LE();
- xPos1 = in->readUint32LE();
- yPos1 = in->readUint32LE();
- xPos2 = in->readUint32LE();
- yPos2 = in->readUint32LE();
- initialSkip = in->readUint32LE();
- decompressedEndOffset = in->readUint32LE();
-
- // Read the compression type for NIS files
- if (!isSequence) {
- in->seek(basePos + 0x124);
- } else {
- hotspot.left = (int16)in->readUint16LE();
- hotspot.right = (int16)in->readUint16LE();
- hotspot.top = (int16)in->readUint16LE();
- hotspot.bottom = (int16)in->readUint16LE();
- }
-
- compressionType = in->readByte();
- subType = (FrameSubType)in->readByte();
-
- // Sequence information
- field_2E = in->readByte();
- keepPreviousFrame = in->readByte();
- field_30 = in->readByte();
- field_31 = in->readByte();
- soundAction = in->readByte();
- field_33 = in->readByte();
- position = in->readByte();
- field_35 = in->readByte();
- field_36 = in->readUint16LE();
- field_38 = in->readUint32LE();
- entityPosition = (EntityPosition)in->readUint16LE();
- location = in->readUint16LE();
- next = in->readUint32LE();
-}
-
-
-// AnimFrame
-
-AnimFrame::AnimFrame(Common::SeekableReadStream *in, const FrameInfo &f, bool /* ignoreSubtype */) : _palette(nullptr) {
- _palSize = 1;
- // TODO: use just the needed rectangle
- _image.create(640, 480, Graphics::PixelFormat::createFormatCLUT8());
-
- //debugC(6, kLastExpressDebugGraphics, " Offsets: data=%d, unknown=%d, palette=%d", f.dataOffset, f.unknown, f.paletteOffset);
- //debugC(6, kLastExpressDebugGraphics, " Position: (%d, %d) - (%d, %d)", f.xPos1, f.yPos1, f.xPos2, f.yPos2);
- //debugC(6, kLastExpressDebugGraphics, " Initial Skip: %d", f.initialSkip);
- //debugC(6, kLastExpressDebugGraphics, " Decompressed end offset: %d", f.decompressedEndOffset);
- //debugC(6, kLastExpressDebugGraphics, " Hotspot: (%d, %d) x (%d, %d)\n", f.hotspot.left, f.hotspot.top, f.hotspot.right, f.hotspot.bottom);
- //debugC(6, kLastExpressDebugGraphics, " Compression type: %u / %u", f.compressionType, f.subType);
- //debugC(6, kLastExpressDebugGraphics, " Unknown: %u - %u - %u - %u - %u - %u - %u - %d", f.field_2E, f.field_2F, f.field_30, f.field_31, f.field_33, f.field_35, f.field_36, f.field_38);
- //debugC(6, kLastExpressDebugGraphics, " Sound action: %u", f.soundAction);
- //debugC(6, kLastExpressDebugGraphics, " Position: %d", f.position);
- //debugC(6, kLastExpressDebugGraphics, " Entity Position: %d", f.entityPosition);
- //debugC(6, kLastExpressDebugGraphics, " Location: %d", f.location);
- //debugC(6, kLastExpressDebugGraphics, " next: %d", f.next);
-
- switch (f.compressionType) {
- case 0:
- // Empty frame
- break;
- case 3:
- decomp3(in, f);
- break;
- case 4:
- decomp4(in, f);
- break;
- case 5:
- decomp5(in, f);
- break;
- case 7:
- decomp7(in, f);
- break;
- case 255:
- decompFF(in, f);
- break;
- default:
- error("[AnimFrame::AnimFrame] Unknown frame compression: %d", f.compressionType);
- }
-
- readPalette(in, f);
- _rect = Common::Rect((int16)f.xPos1, (int16)f.yPos1, (int16)f.xPos2, (int16)f.yPos2);
- //_rect.debugPrint(0, "Frame rect:");
-}
-
-AnimFrame::~AnimFrame() {
- _image.free();
- delete[] _palette;
-}
-
-Common::Rect AnimFrame::draw(Graphics::Surface *s) {
- byte *inp = (byte *)_image.getPixels();
- uint16 *outp = (uint16 *)s->getPixels();
- for (int i = 0; i < 640 * 480; i++, inp++, outp++) {
- if (*inp)
- *outp = _palette[*inp];
- }
- return _rect;
-}
-
-void AnimFrame::readPalette(Common::SeekableReadStream *in, const FrameInfo &f) {
- // Read the palette
- in->seek((int)f.paletteOffset);
- _palette = new uint16[_palSize];
- for (uint32 i = 0; i < _palSize; i++) {
- _palette[i] = in->readUint16LE();
- }
-}
-
-void AnimFrame::decomp3(Common::SeekableReadStream *in, const FrameInfo &f) {
- decomp34(in, f, 0x7, 3);
-}
-
-void AnimFrame::decomp4(Common::SeekableReadStream *in, const FrameInfo &f) {
- decomp34(in, f, 0xf, 4);
-}
-
-void AnimFrame::decomp34(Common::SeekableReadStream *in, const FrameInfo &f, byte mask, byte shift) {
- byte *p = (byte *)_image.getPixels();
-
- uint32 skip = f.initialSkip / 2;
- uint32 size = f.decompressedEndOffset / 2;
- //warning("skip: %d, %d", skip % 640, skip / 640);
- //warning("size: %d, %d", size % 640, size / 640);
- //assert (f.yPos1 == skip / 640);
- //assert (f.yPos2 == size / 640);
-
- uint32 numBlanks = 640 - (f.xPos2 - f.xPos1);
-
- in->seek((int)f.dataOffset);
- for (uint32 out = skip; out < size; ) {
- uint16 opcode = in->readByte();
-
- if (opcode & 0x80) {
- if (opcode & 0x40) {
- opcode &= 0x3f;
- out += numBlanks + opcode + 1;
- } else {
- opcode &= 0x3f;
- if (opcode & 0x20) {
- opcode = ((opcode & 0x1f) << 8) + in->readByte();
- if (opcode & 0x1000) {
- out += opcode & 0xfff;
- continue;
- }
- }
- out += opcode + 2;
- }
- } else {
- byte value = opcode & mask;
- opcode >>= shift;
- if (_palSize <= value)
- _palSize = value + 1;
- if (!opcode)
- opcode = in->readByte();
- for (int i = 0; i < opcode; i++, out++) {
- p[out] = value;
- }
- }
- }
-}
-
-void AnimFrame::decomp5(Common::SeekableReadStream *in, const FrameInfo &f) {
- byte *p = (byte *)_image.getPixels();
-
- uint32 skip = f.initialSkip / 2;
- uint32 size = f.decompressedEndOffset / 2;
- //warning("skip: %d, %d", skip % 640, skip / 640);
- //warning("size: %d, %d", size % 640, size / 640);
- //assert (f.yPos1 == skip / 640);
- //assert (f.yPos2 == size / 640);
-
- in->seek((int)f.dataOffset);
- for (uint32 out = skip; out < size; ) {
- uint16 opcode = in->readByte();
- if (!(opcode & 0x1f)) {
- opcode = (uint16)((opcode << 3) + in->readByte());
- if (opcode & 0x400) {
- // skip these 10 bits
- out += (opcode & 0x3ff);
- } else {
- out += opcode + 2;
- }
- } else {
- byte value = opcode & 0x1f;
- opcode >>= 5;
- if (_palSize <= value)
- _palSize = value + 1;
- if (!opcode)
- opcode = in->readByte();
- for (int i = 0; i < opcode; i++, out++) {
- p[out] = value;
- }
- }
- }
-}
-
-void AnimFrame::decomp7(Common::SeekableReadStream *in, const FrameInfo &f) {
- byte *p = (byte *)_image.getPixels();
-
- uint32 skip = f.initialSkip / 2;
- uint32 size = f.decompressedEndOffset / 2;
- //warning("skip: %d, %d", skip % 640, skip / 640);
- //warning("size: %d, %d", size % 640, size / 640);
- //assert (f.yPos1 == skip / 640);
- //assert (f.yPos2 == size / 640);
-
- uint32 numBlanks = 640 - (f.xPos2 - f.xPos1);
-
- in->seek((int)f.dataOffset);
- for (uint32 out = skip; out < size; ) {
- uint16 opcode = in->readByte();
- if (opcode & 0x80) {
- if (opcode & 0x40) {
- if (opcode & 0x20) {
- opcode &= 0x1f;
- out += numBlanks + opcode + 1;
- } else {
- opcode &= 0x1f;
- if (opcode & 0x10) {
- opcode = ((opcode & 0xf) << 8) + in->readByte();
- if (opcode & 0x800) {
- // skip these 11 bits
- out += (opcode & 0x7ff);
- continue;
- }
- }
-
- // skip these 4 bits
- out += opcode + 2;
- }
- } else {
- opcode &= 0x3f;
- byte value = in->readByte();
- if (_palSize <= value)
- _palSize = value + 1;
- for (int i = 0; i < opcode; i++, out++) {
- p[out] = value;
- }
- }
- } else {
- if (_palSize <= opcode)
- _palSize = opcode + 1;
- // set the given value
- p[out] = (byte)opcode;
- out++;
- }
- }
-}
-
-void AnimFrame::decompFF(Common::SeekableReadStream *in, const FrameInfo &f) {
- byte *p = (byte *)_image.getPixels();
-
- uint32 skip = f.initialSkip / 2;
- uint32 size = f.decompressedEndOffset / 2;
-
- in->seek((int)f.dataOffset);
- for (uint32 out = skip; out < size; ) {
- uint16 opcode = in->readByte();
-
- if (opcode < 0x80) {
- if (_palSize <= opcode)
- _palSize = opcode + 1;
- // set the given value
- p[out] = (byte)opcode;
- out++;
- } else {
- if (opcode < 0xf0) {
- if (opcode < 0xe0) {
- // copy old part
- uint32 old = out + ((opcode & 0x7) << 8) + in->readByte() - 2048;
- opcode = ((opcode >> 3) & 0xf) + 3;
- for (int i = 0; i < opcode; i++, out++, old++) {
- p[out] = p[old];
- }
- } else {
- opcode = (opcode & 0xf) + 1;
- byte value = in->readByte();
- if (_palSize <= value)
- _palSize = value + 1;
- for (int i = 0; i < opcode; i++, out++) {
- p[out] = value;
- }
- }
- } else {
- out += ((opcode & 0xf) << 8) + in->readByte();
- }
- }
- }
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-// SEQUENCE
-//////////////////////////////////////////////////////////////////////////
-
-Sequence::~Sequence() {
- reset();
-}
-
-void Sequence::reset() {
- _frames.clear();
- delete _stream;
- _stream = nullptr;
-}
-
-Sequence *Sequence::load(Common::String name, Common::SeekableReadStream *stream, byte field30) {
- Sequence *sequence = new Sequence(name);
-
- if (!sequence->load(stream, field30)) {
- delete sequence;
- return nullptr;
- }
-
- return sequence;
-}
-
-bool Sequence::load(Common::SeekableReadStream *stream, byte field30) {
- if (!stream)
- return false;
-
- // Reset data
- reset();
-
- _field30 = field30;
-
- // Keep stream for later decoding of sequence
- _stream = stream;
-
- // Read header to get the number of frames
- _stream->seek(0);
- uint32 numframes = _stream->readUint32LE();
- uint32 unknown = _stream->readUint32LE();
- debugC(3, kLastExpressDebugGraphics, "Number of frames in sequence: %d / unknown=0x%x", numframes, unknown);
-
- // Store frames information
- for (uint i = 0; i < numframes; i++) {
-
- // Move stream to start of frame
- _stream->seek((int32)(_sequenceHeaderSize + i * _sequenceFrameSize), SEEK_SET);
- if (_stream->eos())
- error("[Sequence::load] Couldn't seek to the current frame data");
-
- // Check if there is enough data
- if ((unsigned)(_stream->size() - _stream->pos()) < _sequenceFrameSize)
- error("[Sequence::load] The sequence frame does not have a valid header");
-
- FrameInfo info;
- info.read(_stream, true);
- _frames.push_back(info);
- }
-
- _isLoaded = true;
-
- return true;
-}
-
-FrameInfo *Sequence::getFrameInfo(uint16 index) {
- if (_frames.size() == 0)
- error("[Sequence::getFrameInfo] Trying to decode a sequence before loading its data");
-
- if (index > _frames.size() - 1)
- error("[Sequence::getFrameInfo] Invalid sequence frame requested: %d, max %d", index, _frames.size() - 1);
-
- return &_frames[index];
-}
-
-AnimFrame *Sequence::getFrame(uint16 index) {
-
- FrameInfo *frame = getFrameInfo(index);
-
- if (!frame)
- return nullptr;
-
- // Skip "invalid" frames
- if (frame->compressionType == 0)
- return nullptr;
-
- debugC(9, kLastExpressDebugGraphics, "Decoding sequence %s: frame %d / %d", _name.c_str(), index, _frames.size() - 1);
-
- return new AnimFrame(_stream, *frame);
-}
-
-//////////////////////////////////////////////////////////////////////////
-// SequenceFrame
-SequenceFrame::~SequenceFrame() {
- if (_dispose && _sequence) {
- delete _sequence;
- }
-
- _sequence = nullptr;
-}
-
-Common::Rect SequenceFrame::draw(Graphics::Surface *surface) {
- if (!_sequence || _frame >= _sequence->count())
- return Common::Rect();
-
- AnimFrame *f = _sequence->getFrame(_frame);
- if (!f)
- return Common::Rect();
-
- Common::Rect rect = f->draw(surface);
-
- delete f;
-
- return rect;
-}
-
-bool SequenceFrame::setFrame(uint16 frame) {
- if (!_sequence)
- return false;
-
- if (frame < _sequence->count()) {
- _frame = frame;
- return true;
- } else
- return false;
-}
-
-bool SequenceFrame::nextFrame() {
- return setFrame(_frame + 1);
-}
-
-FrameInfo *SequenceFrame::getInfo() {
- if (!_sequence)
- error("[SequenceFrame::getInfo] Invalid sequence");
-
- return _sequence->getFrameInfo(_frame);
-}
-
-Common::String SequenceFrame::getName() {
- if (!_sequence)
- error("[SequenceFrame::getName] Invalid sequence");
-
- return _sequence->getName();
-}
-
-bool SequenceFrame::equal(const SequenceFrame *other) const {
- return _sequence->getName() == other->_sequence->getName() && _frame == other->_frame;
-}
-
-} // End of namespace LastExpress
diff --git a/engines/lastexpress/data/sequence.h b/engines/lastexpress/data/sequence.h
deleted file mode 100644
index 929e1d44ae1..00000000000
--- a/engines/lastexpress/data/sequence.h
+++ /dev/null
@@ -1,207 +0,0 @@
-/* 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/>.
- *
- */
-
-#ifndef LASTEXPRESS_SEQUENCE_H
-#define LASTEXPRESS_SEQUENCE_H
-
-/*
- Sequence format (.SEQ / .NIS (frame header & data only))
-
- uint32 {4} - Number of frames in sequence
- uint32 {4} - Unknown
-
- frames headers (68 bytes):
- // for each frame
- uint32 {4} - Data offset (from beginning of file)
- uint32 {4} - Unknown
- uint32 {4} - Palette offset (from beginning of file)
- uint32 {4} - Top-left X coordinate
- uint32 {4} - Top-left Y coordinate
- uint32 {4} - Bottom-right X coordinate
- uint32 {4} - Bottom-right Y coordinate
- uint32 {4} - Initial offset of decompressed data (doubled, since each pixel occupies one color word)
- uint32 {4} - End of data after decompression
-
- (for SEQ files only)
- uint16 {2} - Hotspot left
- uint16 {2} - Hotspot right
- uint16 {2} - Hotspot top
- uint16 {2} - Hotspot bottom
- byte {1} - Compression type
- byte {1} - Subtype (determines which set of decompression functions will be called) => 0, 1, 2, 3
- byte {1} - Unknown
- byte {1} - Keep previous frame while drawing
- byte {1} - Unknown
- byte {1} - Unknown
- byte {1} - Sound action
- byte {1} - Unknown
- uint32 {4} - positionId
- uint32 {4} - Unknown
- uint16 {2} - Entity Position
- uint16 {2} - Location (~z-order)
- uint32 {4} - Next sequence in the linked list
-
- (for NIS files: found at 0x124)
- byte {1} - Compression type
-
- palette data:
- uint16 {x} - palette data (max size: 256)
-
- data
- byte {x} - compressed image data
-*/
-
-#include "lastexpress/drawable.h"
-
-#include "lastexpress/shared.h"
-
-#include "common/array.h"
-#include "common/rect.h"
-#include "common/str.h"
-
-namespace Common {
-class SeekableReadStream;
-}
-
-namespace LastExpress {
-
-enum FrameSubType {
- kFrameTypeNone = 0,
- kFrameType1 = 1,
- kFrameType2 = 2,
- kFrameType3 = 3
-};
-
-struct FrameInfo {
- void read(Common::SeekableReadStream *in, bool isSequence);
-
- uint32 dataOffset; ///< Data offset (from beginning of file)
- uint32 unknown; ///< FIXME: unknown data
- uint32 paletteOffset; ///< Palette offset (from beginning of file)
- uint32 xPos1; ///< Top-left X coordinate
- uint32 yPos1; ///< Top-left Y coordinate
- uint32 xPos2; ///< Bottom-right X coordinate
- uint32 yPos2; ///< Bottom-right Y coordinate
- uint32 initialSkip; ///< Initial on-screen offset of decompressed data (doubled, since each pixel occupies one color word)
- uint32 decompressedEndOffset; ///< End of data after decompression
-
- // NIS frame headers end here. SEQ frame headers have additional 32 bytes of
- // data, notably the compression type at the position outlined above in
- // CompPos_SEQ
-
- Common::Rect hotspot;
-
- byte compressionType; ///< Type of frame compression (0x03, 0x04, 0x05, 0x07, 0xFF)
- FrameSubType subType; ///< Subtype (byte)
-
- byte field_2E;
- byte keepPreviousFrame;
- byte field_30;
- byte field_31;
- byte soundAction;
- byte field_33;
- PositionOld position;
- byte field_35;
- int16 field_36;
- uint32 field_38;
- EntityPosition entityPosition;
- uint16 location;
- uint32 next;
-};
-
-class AnimFrame : public Drawable {
-public:
- AnimFrame(Common::SeekableReadStream *in, const FrameInfo &f, bool ignoreSubtype = false);
- ~AnimFrame() override;
- Common::Rect draw(Graphics::Surface *s) override;
-
-private:
- void decomp3(Common::SeekableReadStream *in, const FrameInfo &f);
- void decomp4(Common::SeekableReadStream *in, const FrameInfo &f);
- void decomp34(Common::SeekableReadStream *in, const FrameInfo &f, byte mask, byte shift);
- void decomp5(Common::SeekableReadStream *in, const FrameInfo &f);
- void decomp7(Common::SeekableReadStream *in, const FrameInfo &f);
- void decompFF(Common::SeekableReadStream *in, const FrameInfo &f);
- void readPalette(Common::SeekableReadStream *in, const FrameInfo &f);
-
- Graphics::Surface _image;
- uint16 _palSize;
- uint16 *_palette;
- Common::Rect _rect;
-};
-
-class Sequence {
-public:
- Sequence(Common::String name) : _stream(NULL), _isLoaded(false), _name(name), _field30(15) {}
- ~Sequence();
-
- static Sequence *load(Common::String name, Common::SeekableReadStream *stream = NULL, byte field30 = 15);
-
- bool load(Common::SeekableReadStream *stream, byte field30 = 15);
-
- uint16 count() const { return (uint16)_frames.size(); }
- AnimFrame *getFrame(uint16 index = 0);
- FrameInfo *getFrameInfo(uint16 index = 0);
-
- Common::String getName() { return _name; }
- byte getField30() { return _field30; }
-
- bool isLoaded() { return _isLoaded; }
-
-private:
- static const uint32 _sequenceHeaderSize = 8;
- static const uint32 _sequenceFrameSize = 68;
-
- void reset();
-
- Common::Array<FrameInfo> _frames;
- Common::SeekableReadStream *_stream;
- bool _isLoaded;
-
- Common::String _name;
- byte _field30; // used when copying sequences
-};
-
-class SequenceFrame : public Drawable {
-public:
- SequenceFrame(Sequence *sequence, uint16 frame = 0, bool dispose = false) : _sequence(sequence), _frame(frame), _dispose(dispose) {}
- ~SequenceFrame() override;
-
- Common::Rect draw(Graphics::Surface *surface) override;
-
- bool setFrame(uint16 frame);
- uint32 getFrame() { return _frame; }
- bool nextFrame();
-
- Common::String getName();
- FrameInfo *getInfo();
-
- bool equal(const SequenceFrame *other) const;
-
-private:
- Sequence *_sequence;
- uint16 _frame;
- bool _dispose;
-};
-
-} // End of namespace LastExpress
-
-#endif // LASTEXPRESS_SEQUENCE_H
diff --git a/engines/lastexpress/data/snd.cpp b/engines/lastexpress/data/snd.cpp
deleted file mode 100644
index 7d48e563669..00000000000
--- a/engines/lastexpress/data/snd.cpp
+++ /dev/null
@@ -1,608 +0,0 @@
-/* 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/>.
- *
- */
-
-// Based on the Xentax Wiki documentation:
-// http://wiki.xentax.com/index.php/The_Last_Express_SND
-
-#include "lastexpress/data/snd.h"
-
-#include "lastexpress/debug.h"
-
-#include "audio/decoders/adpcm_intern.h"
-#include "common/debug.h"
-#include "common/memstream.h"
-#include "common/system.h"
-
-namespace LastExpress {
-
-#pragma region Sound filters tables
-
-static const int stepTable[1424] = {
- 0, 0, 0, 0, 128, 256, 384, 512, 0, 0, 0, 0, 128, 256,
- 384, 512, 0, 0, 0, 0, 192, 320, 448, 576, 0, 0, 0, 0,
- 192, 320, 448, 576, 64, 64, 64, 64, 256, 384, 512, 640,
- 64, 64, 64, 64, 256, 384, 512, 640, 128, 128, 128, 128,
- 320, 448, 576, 704, 128, 128, 128, 128, 320, 448, 576,
- 704, 192, 192, 192, 192, 384, 512, 640, 768, 192, 192,
- 192, 192, 384, 512, 640, 768, 256, 256, 256, 256, 448,
- 576, 704, 832, 256, 256, 256, 256, 448, 576, 704, 832,
- 320, 320, 320, 320, 512, 640, 768, 896, 320, 320, 320,
- 320, 512, 640, 768, 896, 384, 384, 384, 384, 576, 704,
- 832, 960, 384, 384, 384, 384, 576, 704, 832, 960, 448,
- 448, 448, 448, 640, 768, 896, 1024, 448, 448, 448, 448,
- 640, 768, 896, 1024, 512, 512, 512, 512, 704, 832, 960,
- 1088, 512, 512, 512, 512, 704, 832, 960, 1088, 576,
- 576, 576, 576, 768, 896, 1024, 1152, 576, 576, 576,
- 576, 768, 896, 1024, 1152, 640, 640, 640, 640, 832,
- 960, 1088, 1216, 640, 640, 640, 640, 832, 960, 1088,
- 1216, 704, 704, 704, 704, 896, 1024, 1152, 1280, 704,
- 704, 704, 704, 896, 1024, 1152, 1280, 768, 768, 768,
- 768, 960, 1088, 1216, 1344, 768, 768, 768, 768, 960,
- 1088, 1216, 1344, 832, 832, 832, 832, 1024, 1152, 1280,
- 1408, 832, 832, 832, 832, 1024, 1152, 1280, 1408, 896,
- 896, 896, 896, 1088, 1216, 1344, 1472, 896, 896, 896,
- 896, 1088, 1216, 1344, 1472, 960, 960, 960, 960, 1152,
- 1280, 1408, 1536, 960, 960, 960, 960, 1152, 1280, 1408,
- 1536, 1024, 1024, 1024, 1024, 1216, 1344, 1472, 1600,
- 1024, 1024, 1024, 1024, 1216, 1344, 1472, 1600, 1088,
- 1088, 1088, 1088, 1280, 1408, 1536, 1664, 1088, 1088,
- 1088, 1088, 1280, 1408, 1536, 1664, 1152, 1152, 1152,
- 1152, 1344, 1472, 1600, 1728, 1152, 1152, 1152, 1152,
- 1344, 1472, 1600, 1728, 1216, 1216, 1216, 1216, 1408,
- 1536, 1664, 1792, 1216, 1216, 1216, 1216, 1408, 1536,
- 1664, 1792, 1280, 1280, 1280, 1280, 1472, 1600, 1728,
- 1856, 1280, 1280, 1280, 1280, 1472, 1600, 1728, 1856,
- 1344, 1344, 1344, 1344, 1536, 1664, 1792, 1920, 1344,
- 1344, 1344, 1344, 1536, 1664, 1792, 1920, 1408, 1408,
- 1408, 1408, 1600, 1728, 1856, 1984, 1408, 1408, 1408,
- 1408, 1600, 1728, 1856, 1984, 1472, 1472, 1472, 1472,
- 1664, 1792, 1920, 2048, 1472, 1472, 1472, 1472, 1664,
- 1792, 1920, 2048, 1536, 1536, 1536, 1536, 1728, 1856,
- 1984, 2112, 1536, 1536, 1536, 1536, 1728, 1856, 1984,
- 2112, 1600, 1600, 1600, 1600, 1792, 1920, 2048, 2176,
- 1600, 1600, 1600, 1600, 1792, 1920, 2048, 2176, 1664,
- 1664, 1664, 1664, 1856, 1984, 2112, 2240, 1664, 1664,
- 1664, 1664, 1856, 1984, 2112, 2240, 1728, 1728, 1728,
- 1728, 1920, 2048, 2176, 2304, 1728, 1728, 1728, 1728,
- 1920, 2048, 2176, 2304, 1792, 1792, 1792, 1792, 1984,
- 2112, 2240, 2368, 1792, 1792, 1792, 1792, 1984, 2112,
- 2240, 2368, 1856, 1856, 1856, 1856, 2048, 2176, 2304,
- 2432, 1856, 1856, 1856, 1856, 2048, 2176, 2304, 2432,
- 1920, 1920, 1920, 1920, 2112, 2240, 2368, 2496, 1920,
- 1920, 1920, 1920, 2112, 2240, 2368, 2496, 1984, 1984,
- 1984, 1984, 2176, 2304, 2432, 2560, 1984, 1984, 1984,
- 1984, 2176, 2304, 2432, 2560, 2048, 2048, 2048, 2048,
- 2240, 2368, 2496, 2624, 2048, 2048, 2048, 2048, 2240,
- 2368, 2496, 2624, 2112, 2112, 2112, 2112, 2304, 2432,
- 2560, 2688, 2112, 2112, 2112, 2112, 2304, 2432, 2560,
- 2688, 2176, 2176, 2176, 2176, 2368, 2496, 2624, 2752,
- 2176, 2176, 2176, 2176, 2368, 2496, 2624, 2752, 2240,
- 2240, 2240, 2240, 2432, 2560, 2688, 2816, 2240, 2240,
- 2240, 2240, 2432, 2560, 2688, 2816, 2304, 2304, 2304,
- 2304, 2496, 2624, 2752, 2880, 2304, 2304, 2304, 2304,
- 2496, 2624, 2752, 2880, 2368, 2368, 2368, 2368, 2560,
- 2688, 2816, 2944, 2368, 2368, 2368, 2368, 2560, 2688,
- 2816, 2944, 2432, 2432, 2432, 2432, 2624, 2752, 2880,
- 3008, 2432, 2432, 2432, 2432, 2624, 2752, 2880, 3008,
- 2496, 2496, 2496, 2496, 2688, 2816, 2944, 3072, 2496,
- 2496, 2496, 2496, 2688, 2816, 2944, 3072, 2560, 2560,
- 2560, 2560, 2752, 2880, 3008, 3136, 2560, 2560, 2560,
- 2560, 2752, 2880, 3008, 3136, 2624, 2624, 2624, 2624,
- 2816, 2944, 3072, 3200, 2624, 2624, 2624, 2624, 2816,
- 2944, 3072, 3200, 2688, 2688, 2688, 2688, 2880, 3008,
- 3136, 3264, 2688, 2688, 2688, 2688, 2880, 3008, 3136,
- 3264, 2752, 2752, 2752, 2752, 2944, 3072, 3200, 3328,
- 2752, 2752, 2752, 2752, 2944, 3072, 3200, 3328, 2816,
- 2816, 2816, 2816, 3008, 3136, 3264, 3392, 2816, 2816,
- 2816, 2816, 3008, 3136, 3264, 3392, 2880, 2880, 2880,
- 2880, 3072, 3200, 3328, 3456, 2880, 2880, 2880, 2880,
- 3072, 3200, 3328, 3456, 2944, 2944, 2944, 2944, 3136,
- 3264, 3392, 3520, 2944, 2944, 2944, 2944, 3136, 3264,
- 3392, 3520, 3008, 3008, 3008, 3008, 3200, 3328, 3456,
- 3584, 3008, 3008, 3008, 3008, 3200, 3328, 3456, 3584,
- 3072, 3072, 3072, 3072, 3264, 3392, 3520, 3648, 3072,
- 3072, 3072, 3072, 3264, 3392, 3520, 3648, 3136, 3136,
- 3136, 3136, 3328, 3456, 3584, 3712, 3136, 3136, 3136,
- 3136, 3328, 3456, 3584, 3712, 3200, 3200, 3200, 3200,
- 3392, 3520, 3648, 3776, 3200, 3200, 3200, 3200, 3392,
- 3520, 3648, 3776, 3264, 3264, 3264, 3264, 3456, 3584,
- 3712, 3840, 3264, 3264, 3264, 3264, 3456, 3584, 3712,
- 3840, 3328, 3328, 3328, 3328, 3520, 3648, 3776, 3904,
- 3328, 3328, 3328, 3328, 3520, 3648, 3776, 3904, 3392,
- 3392, 3392, 3392, 3584, 3712, 3840, 3968, 3392, 3392,
- 3392, 3392, 3584, 3712, 3840, 3968, 3456, 3456, 3456,
- 3456, 3648, 3776, 3904, 4032, 3456, 3456, 3456, 3456,
- 3648, 3776, 3904, 4032, 3520, 3520, 3520, 3520, 3712,
- 3840, 3968, 4096, 3520, 3520, 3520, 3520, 3712, 3840,
- 3968, 4096, 3584, 3584, 3584, 3584, 3776, 3904, 4032,
- 4160, 3584, 3584, 3584, 3584, 3776, 3904, 4032, 4160,
- 3648, 3648, 3648, 3648, 3840, 3968, 4096, 4224, 3648,
- 3648, 3648, 3648, 3840, 3968, 4096, 4224, 3712, 3712,
- 3712, 3712, 3904, 4032, 4160, 4288, 3712, 3712, 3712,
- 3712, 3904, 4032, 4160, 4288, 3776, 3776, 3776, 3776,
- 3968, 4096, 4224, 4352, 3776, 3776, 3776, 3776, 3968,
- 4096, 4224, 4352, 3840, 3840, 3840, 3840, 4032, 4160,
- 4288, 4416, 3840, 3840, 3840, 3840, 4032, 4160, 4288,
- 4416, 3904, 3904, 3904, 3904, 4096, 4224, 4352, 4480,
- 3904, 3904, 3904, 3904, 4096, 4224, 4352, 4480, 3968,
- 3968, 3968, 3968, 4160, 4288, 4416, 4544, 3968, 3968,
- 3968, 3968, 4160, 4288, 4416, 4544, 4032, 4032, 4032,
- 4032, 4224, 4352, 4480, 4608, 4032, 4032, 4032, 4032,
- 4224, 4352, 4480, 4608, 4096, 4096, 4096, 4096, 4288,
- 4416, 4544, 4672, 4096, 4096, 4096, 4096, 4288, 4416,
- 4544, 4672, 4160, 4160, 4160, 4160, 4352, 4480, 4608,
- 4736, 4160, 4160, 4160, 4160, 4352, 4480, 4608, 4736,
- 4224, 4224, 4224, 4224, 4416, 4544, 4672, 4800, 4224,
- 4224, 4224, 4224, 4416, 4544, 4672, 4800, 4288, 4288,
- 4288, 4288, 4480, 4608, 4736, 4864, 4288, 4288, 4288,
- 4288, 4480, 4608, 4736, 4864, 4352, 4352, 4352, 4352,
- 4544, 4672, 4800, 4928, 4352, 4352, 4352, 4352, 4544,
- 4672, 4800, 4928, 4416, 4416, 4416, 4416, 4608, 4736,
- 4864, 4992, 4416, 4416, 4416, 4416, 4608, 4736, 4864,
- 4992, 4480, 4480, 4480, 4480, 4672, 4800, 4928, 5056,
- 4480, 4480, 4480, 4480, 4672, 4800, 4928, 5056, 4544,
- 4544, 4544, 4544, 4736, 4864, 4992, 5120, 4544, 4544,
- 4544, 4544, 4736, 4864, 4992, 5120, 4608, 4608, 4608,
- 4608, 4800, 4928, 5056, 5184, 4608, 4608, 4608, 4608,
- 4800, 4928, 5056, 5184, 4672, 4672, 4672, 4672, 4864,
- 4992, 5120, 5248, 4672, 4672, 4672, 4672, 4864, 4992,
- 5120, 5248, 4736, 4736, 4736, 4736, 4928, 5056, 5184,
- 5312, 4736, 4736, 4736, 4736, 4928, 5056, 5184, 5312,
- 4800, 4800, 4800, 4800, 4992, 5120, 5248, 5376, 4800,
- 4800, 4800, 4800, 4992, 5120, 5248, 5376, 4864, 4864,
- 4864, 4864, 5056, 5184, 5312, 5440, 4864, 4864, 4864,
- 4864, 5056, 5184, 5312, 5440, 4928, 4928, 4928, 4928,
- 5120, 5248, 5376, 5504, 4928, 4928, 4928, 4928, 5120,
- 5248, 5376, 5504, 4992, 4992, 4992, 4992, 5184, 5312,
- 5440, 5568, 4992, 4992, 4992, 4992, 5184, 5312, 5440,
- 5568, 5056, 5056, 5056, 5056, 5248, 5376, 5504, 5632,
- 5056, 5056, 5056, 5056, 5248, 5376, 5504, 5632, 5120,
- 5120, 5120, 5120, 5312, 5440, 5568, 5632, 5120, 5120,
- 5120, 5120, 5312, 5440, 5568, 5632, 5184, 5184, 5184,
- 5184, 5376, 5504, 5632, 5632, 5184, 5184, 5184, 5184,
- 5376, 5504, 5632, 5632, 5248, 5248, 5248, 5248, 5440,
- 5568, 5632, 5632, 5248, 5248, 5248, 5248, 5440, 5568,
- 5632, 5632, 5312, 5312, 5312, 5312, 5504, 5632, 5632,
- 5632, 5312, 5312, 5312, 5312, 5504, 5632, 5632, 5632,
- 5376, 5376, 5376, 5376, 5568, 5632, 5632, 5632, 5376,
- 5376, 5376, 5376, 5568, 5632, 5632, 5632, 5440, 5440,
- 5440, 5440, 5632, 5632, 5632, 5632, 5440, 5440, 5440,
- 5440, 5632, 5632, 5632, 5632, 5504, 5504, 5504, 5504,
- 5632, 5632, 5632, 5632, 5504, 5504, 5504, 5504, 5632,
- 5632, 5632, 5632, 5568, 5568, 5568, 5568, 5632, 5632,
- 5632, 5632, 5568, 5568, 5568, 5568, 5632, 5632, 5632,
- 5632
-};
-
-static const int imaTable[1424] = {
- 0, 2, 4, 6, 7, 9, 11, 13, 0, -2, -4, -6, -7, -9, -11,
- -13, 1, 3, 5, 7, 9, 11, 13, 15, -1, -3, -5, -7, -9,
- -11, -13, -15, 1, 3, 5, 7, 10, 12, 14, 16, -1, -3, -5,
- -7, -10, -12, -14, -16, 1, 3, 6, 8, 11, 13, 16, 18,
- -1, -3, -6, -8, -11, -13, -16, -18, 1, 4, 6, 9, 12,
- 15, 17, 20, -1, -4, -6, -9, -12, -15, -17, -20, 1, 4,
- 7, 10, 13, 16, 19, 22, -1, -4, -7, -10, -13, -16, -19,
- -22, 1, 4, 8, 11, 14, 17, 21, 24, -1, -4, -8, -11, -14,
- -17, -21, -24, 1, 5, 8, 12, 15, 19, 22, 26, -1, -5,
- -8, -12, -15, -19, -22, -26, 2, 6, 10, 14, 18, 22, 26,
- 30, -2, -6, -10, -14, -18, -22, -26, -30, 2, 6, 10,
- 14, 19, 23, 27, 31, -2, -6, -10, -14, -19, -23, -27,
- -31, 2, 7, 11, 16, 21, 26, 30, 35, -2, -7, -11, -16,
- -21, -26, -30, -35, 2, 7, 13, 18, 23, 28, 34, 39, -2,
- -7, -13, -18, -23, -28, -34, -39, 2, 8, 14, 20, 25,
- 31, 37, 43, -2, -8, -14, -20, -25, -31, -37, -43, 3,
- 9, 15, 21, 28, 34, 40, 46, -3, -9, -15, -21, -28, -34,
- -40, -46, 3, 10, 17, 24, 31, 38, 45, 52, -3, -10, -17,
- -24, -31, -38, -45, -52, 3, 11, 19, 27, 34, 42, 50,
- 58, -3, -11, -19, -27, -34, -42, -50, -58, 4, 12, 21,
- 29, 38, 46, 55, 63, -4, -12, -21, -29, -38, -46, -55,
- -63, 4, 13, 23, 32, 41, 50, 60, 69, -4, -13, -23, -32,
- -41, -50, -60, -69, 5, 15, 25, 35, 46, 56, 66, 76, -5,
- -15, -25, -35, -46, -56, -66, -76, 5, 16, 28, 39, 50,
- 61, 73, 84, -5, -16, -28, -39, -50, -61, -73, -84, 6,
- 18, 31, 43, 56, 68, 81, 93, -6, -18, -31, -43, -56,
- -68, -81, -93, 6, 20, 34, 48, 61, 75, 89, 103, -6, -20,
- -34, -48, -61, -75, -89, -103, 7, 22, 37, 52, 67, 82,
- 97, 112, -7, -22, -37, -52, -67, -82, -97, -112, 8,
- 24, 41, 57, 74, 90, 107, 123, -8, -24, -41, -57, -74,
- -90, -107, -123, 9, 27, 45, 63, 82, 100, 118, 136, -9,
- -27, -45, -63, -82, -100, -118, -136, 10, 30, 50, 70,
- 90, 110, 130, 150, -10, -30, -50, -70, -90, -110, -130,
- -150, 11, 33, 55, 77, 99, 121, 143, 165, -11, -33, -55,
- -77, -99, -121, -143, -165, 12, 36, 60, 84, 109, 133,
- 157, 181, -12, -36, -60, -84, -109, -133, -157, -181,
- 13, 40, 66, 93, 120, 147, 173, 200, -13, -40, -66, -93,
- -120, -147, -173, -200, 14, 44, 73, 103, 132, 162, 191,
- 221, -14, -44, -73, -103, -132, -162, -191, -221, 16,
- 48, 81, 113, 146, 178, 211, 243, -16, -48, -81, -113,
- -146, -178, -211, -243, 17, 53, 89, 125, 160, 196, 232,
- 268, -17, -53, -89, -125, -160, -196, -232, -268, 19,
- 58, 98, 137, 176, 215, 255, 294, -19, -58, -98, -137,
- -176, -215, -255, -294, 21, 64, 108, 151, 194, 237,
- 281, 324, -21, -64, -108, -151, -194, -237, -281, -324,
- 23, 71, 118, 166, 213, 261, 308, 356, -23, -71, -118,
- -166, -213, -261, -308, -356, 26, 78, 130, 182, 235,
- 287, 339, 391, -26, -78, -130, -182, -235, -287, -339,
- -391, 28, 86, 143, 201, 258, 316, 373, 431, -28, -86,
- -143, -201, -258, -316, -373, -431, 31, 94, 158, 221,
- 284, 347, 411, 474, -31, -94, -158, -221, -284, -347,
- -411, -474, 34, 104, 174, 244, 313, 383, 453, 523, -34,
- -104, -174, -244, -313, -383, -453, -523, 38, 115, 191,
- 268, 345, 422, 498, 575, -38, -115, -191, -268, -345,
- -422, -498, -575, 42, 126, 210, 294, 379, 463, 547,
- 631, -42, -126, -210, -294, -379, -463, -547, -631,
- 46, 139, 231, 324, 417, 510, 602, 695, -46, -139, -231,
- -324, -417, -510, -602, -695, 51, 153, 255, 357, 459,
- 561, 663, 765, -51, -153, -255, -357, -459, -561, -663,
- -765, 56, 168, 280, 392, 505, 617, 729, 841, -56, -168,
- -280, -392, -505, -617, -729, -841, 61, 185, 308, 432,
- 555, 679, 802, 926, -61, -185, -308, -432, -555, -679,
- -802, -926, 68, 204, 340, 476, 612, 748, 884, 1020,
- -68, -204, -340, -476, -612, -748, -884, -1020, 74,
- 224, 373, 523, 672, 822, 971, 1121, -74, -224, -373,
- -523, -672, -822, -971, -1121, 82, 246, 411, 575, 740,
- 904, 1069, 1233, -82, -246, -411, -575, -740, -904,
- -1069, -1233, 90, 271, 452, 633, 814, 995, 1176, 1357,
- -90, -271, -452, -633, -814, -995, -1176, -1357, 99,
- 298, 497, 696, 895, 1094, 1293, 1492, -99, -298, -497,
- -696, -895, -1094, -1293, -1492, 109, 328, 547, 766,
- 985, 1204, 1423, 1642, -109, -328, -547, -766, -985,
- -1204, -1423, -1642, 120, 361, 601, 842, 1083, 1324,
- 1564, 1805, -120, -361, -601, -842, -1083, -1324, -1564,
- -1805, 132, 397, 662, 927, 1192, 1457, 1722, 1987, -132,
- -397, -662, -927, -1192, -1457, -1722, -1987, 145, 437,
- 728, 1020, 1311, 1603, 1894, 2186, -145, -437, -728,
- -1020, -1311, -1603, -1894, -2186, 160, 480, 801, 1121,
- 1442, 1762, 2083, 2403, -160, -480, -801, -1121, -1442,
- -1762, -2083, -2403, 176, 529, 881, 1234, 1587, 1940,
- 2292, 2645, -176, -529, -881, -1234, -1587, -1940, -2292,
- -2645, 194, 582, 970, 1358, 1746, 2134, 2522, 2910,
- -194, -582, -970, -1358, -1746, -2134, -2522, -2910,
- 213, 640, 1066, 1493, 1920, 2347, 2773, 3200, -213,
- -640, -1066, -1493, -1920, -2347, -2773, -3200, 234,
- 704, 1173, 1643, 2112, 2582, 3051, 3521, -234, -704,
- -1173, -1643, -2112, -2582, -3051, -3521, 258, 774,
- 1291, 1807, 2324, 2840, 3357, 3873, -258, -774, -1291,
- -1807, -2324, -2840, -3357, -3873, 284, 852, 1420, 1988,
- 2556, 3124, 3692, 4260, -284, -852, -1420, -1988, -2556,
- -3124, -3692, -4260, 312, 937, 1561, 2186, 2811, 3436,
- 4060, 4685, -312, -937, -1561, -2186, -2811, -3436,
- -4060, -4685, 343, 1030, 1718, 2405, 3092, 3779, 4467,
- 5154, -343, -1030, -1718, -2405, -3092, -3779, -4467,
- -5154, 378, 1134, 1890, 2646, 3402, 4158, 4914, 5670,
- -378, -1134, -1890, -2646, -3402, -4158, -4914, -5670,
- 415, 1247, 2079, 2911, 3742, 4574, 5406, 6238, -415,
- -1247, -2079, -2911, -3742, -4574, -5406, -6238, 457,
- 1372, 2287, 3202, 4117, 5032, 5947, 6862, -457, -1372,
- -2287, -3202, -4117, -5032, -5947, -6862, 503, 1509,
- 2516, 3522, 4529, 5535, 6542, 7548, -503, -1509, -2516,
- -3522, -4529, -5535, -6542, -7548, 553, 1660, 2767,
- 3874, 4981, 6088, 7195, 8302, -553, -1660, -2767, -3874,
- -4981, -6088, -7195, -8302, 608, 1826, 3044, 4262, 5479,
- 6697, 7915, 9133, -608, -1826, -3044, -4262, -5479,
- -6697, -7915, -9133, 669, 2009, 3348, 4688, 6027, 7367,
- 8706, 10046, -669, -2009, -3348, -4688, -6027, -7367,
- -8706, -10046, 736, 2210, 3683, 5157, 6630, 8104, 9577,
- 11051, -736, -2210, -3683, -5157, -6630, -8104, -9577,
- -11051, 810, 2431, 4052, 5673, 7294, 8915, 10536, 12157,
- -810, -2431, -4052, -5673, -7294, -8915, -10536, -12157,
- 891, 2674, 4457, 6240, 8023, 9806, 11589, 13372, -891,
- -2674, -4457, -6240, -8023, -9806, -11589, -13372, 980,
- 2941, 4903, 6864, 8825, 10786, 12748, 14709, -980, -2941,
- -4903, -6864, -8825, -10786, -12748, -14709, 1078, 3236,
- 5393, 7551, 9708, 11866, 14023, 16181, -1078, -3236,
- -5393, -7551, -9708, -11866, -14023, -16181, 1186, 3559,
- 5933, 8306, 10679, 13052, 15426, 17799, -1186, -3559,
- -5933, -8306, -10679, -13052, -15426, -17799, 1305,
- 3915, 6526, 9136, 11747, 14357, 16968, 19578, -1305,
- -3915, -6526, -9136, -11747, -14357, -16968, -19578,
- 1435, 4307, 7179, 10051, 12922, 15794, 18666, 21538,
- -1435, -4307, -7179, -10051, -12922, -15794, -18666,
- -21538, 1579, 4738, 7896, 11055, 14214, 17373, 20531,
- 23690, -1579, -4738, -7896, -11055, -14214, -17373,
- -20531, -23690, 1737, 5212, 8686, 12161, 15636, 19111,
- 22585, 26060, -1737, -5212, -8686, -12161, -15636, -19111,
- -22585, -26060, 1911, 5733, 9555, 13377, 17200, 21022,
- 24844, 28666, -1911, -5733, -9555, -13377, -17200, -21022,
- -24844, -28666, 2102, 6306, 10511, 14715, 18920, 23124,
- 27329, 31533, -2102, -6306, -10511, -14715, -18920,
- -23124, -27329, -31533, 2312, 6937, 11562, 16187, 20812,
- 25437, 30062, 32767, -2312, -6937, -11562, -16187, -20812,
- -25437, -30062, -32767, 2543, 7631, 12718, 17806, 22893,
- 27981, 32767, 32767, -2543, -7631, -12718, -17806, -22893,
- -27981, -32767, -32767, 2798, 8394, 13990, 19586, 25183,
- 30779, 32767, 32767, -2798, -8394, -13990, -19586, -25183,
- -30779, -32767, -32767, 3077, 9233, 15389, 21545, 27700,
- 32767, 32767, 32767, -3077, -9233, -15389, -21545, -27700,
- -32767, -32767, -32767, 3385, 10157, 16928, 23700, 30471,
- 32767, 32767, 32767, -3385, -10157, -16928, -23700,
- -30471, -32767, -32767, -32767, 3724, 11172, 18621,
- 26069, 32767, 32767, 32767, 32767, -3724, -11172, -18621,
- -26069, -32767, -32767, -32767, -32767, 4095, 12287,
- 20479, 28671, 32767, 32767, 32767, 32767, -4095, -12287,
- -20479, -28671, -32767, -32767, -32767, -32767
-};
-
-#pragma endregion
-
-// Last Express ADPCM is similar to MS IMA mono, but inverts its nibbles
-// and does not have the 4 byte per channel requirement
-
-class LastExpress_ADPCMStream : public Audio::ADPCMStream {
-public:
- LastExpress_ADPCMStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeAfterUse, uint32 size, uint32 blockSize, uint32 volume, bool looped) :
- Audio::ADPCMStream(stream, disposeAfterUse, size, 44100, 1, blockSize) {
- _decodedSampleCount = 0;
- _currentVolume = 0;
- _nextVolume = volume;
- _smoothChangeTarget = volume;
- _volumeHoldBlocks = 0;
- _running = true;
- _looped = looped;
- }
-
- bool endOfData() const override {
- return !_running || (!_looped && Audio::ADPCMStream::endOfData());
- }
-
- void seekToBlock(uint32 block) {
- reset();
- _stream->seek(_startpos + _blockAlign * block);
- }
-
- int readBuffer(int16 *buffer, const int numSamples) override {
- int samples = 0;
-
- while (_running && samples < numSamples) {
- if (Audio::ADPCMStream::endOfData()) {
- if (!_looped)
- break;
- rewind();
- }
- if (_blockPos[0] == _blockAlign) {
- // read block header
- _status.ima_ch[0].last = _stream->readSint16LE();
- _status.ima_ch[0].stepIndex = _stream->readSint16LE() << 6;
- _blockPos[0] = 4;
-
- // sanity check against broken stream
- if ((unsigned)_status.ima_ch[0].stepIndex >= ARRAYSIZE(stepTable) * 4) {
- // the original game sets kSoundFlagDecodeError here and stops playing
- _status.ima_ch[0].stepIndex = 0;
- }
-
- if (!smoothVolumeChangeStep()) {
- _running = false;
- break;
- }
-
- // Get current volume
- _currentVolume = _nextVolume;
- }
-
- for (; samples < numSamples && _blockPos[0] < _blockAlign && !_stream->eos() && _stream->pos() < _endpos; samples++) {
- if (_decodedSampleCount == 0) {
- int step, sample;
- byte idx;
-
- byte data = _stream->readByte();
- _blockPos[0]++;
-
- // First nibble
- idx = data >> 4;
- step = stepTable[idx + _status.ima_ch[0].stepIndex / 4];
- sample = CLIP<int>(imaTable[idx + _status.ima_ch[0].stepIndex / 4] + _status.ima_ch[0].last, -32767, 32767);
- _decodedSamples[0] = (sample * _currentVolume) >> 4;
-
- // Second nibble
- idx = data & 0xF;
- _status.ima_ch[0].stepIndex = stepTable[idx + step / 4];
- _status.ima_ch[0].last = CLIP(imaTable[idx + step / 4] + sample, -32767, 32767);
- _decodedSamples[1] = (_status.ima_ch[0].last * _currentVolume) >> 4;
-
- _decodedSampleCount = 2;
- }
-
- // (1 - (count - 1)) ensures that _decodedSamples acts as a FIFO of depth 2
- buffer[samples] = _decodedSamples[1 - (_decodedSampleCount - 1)];
- _decodedSampleCount--;
- }
- }
-
- return samples;
- }
-
- void setVolume(uint32 newVolume) { _smoothChangeTarget = _nextVolume = newVolume; }
- void setVolumeSmoothly(uint32 newVolume) { _smoothChangeTarget = newVolume; }
-
-private:
- uint8 _decodedSampleCount;
- int16 _decodedSamples[2];
-
- uint32 _currentVolume;
- uint32 _nextVolume;
- uint32 _smoothChangeTarget;
- uint32 _volumeHoldBlocks; // smooth change of volume keeps volume on hold for 4 blocks = 133ms for every value; this is the counter
- bool _running, _looped;
-
- bool smoothVolumeChangeStep() {
- if (_nextVolume == _smoothChangeTarget)
- return true; // the original game clears kSoundFlagVolumeChanging here
- if (_volumeHoldBlocks <= 3) {
- _volumeHoldBlocks++;
- return true;
- }
- if (_nextVolume < _smoothChangeTarget)
- ++_nextVolume;
- else
- --_nextVolume;
- _volumeHoldBlocks = 0;
- return (_nextVolume != 0);
- }
-};
-
-//////////////////////////////////////////////////////////////////////////
-// Sound
-//////////////////////////////////////////////////////////////////////////
-SimpleSound::SimpleSound() : _size(0), _blocks(0), _blockSize(0) {}
-
-SimpleSound::~SimpleSound() {
-}
-
-// Stop the sound
-void SimpleSound::stop() const {
- g_system->getMixer()->stopHandle(_handle);
-}
-
-void SimpleSound::loadHeader(Common::SeekableReadStream *in) {
- _size = in->readUint32LE();
- _blocks = in->readUint16LE();
- debugC(5, kLastExpressDebugSound, " sound header data: size=\"%d\", %d blocks", _size, _blocks);
-
- assert (_size % _blocks == 0);
- _blockSize = _size / _blocks;
-}
-
-LastExpress_ADPCMStream *SimpleSound::makeDecoder(Common::SeekableReadStream *in, uint32 size, uint32 volume, bool looped) const {
- return new LastExpress_ADPCMStream(in, DisposeAfterUse::YES, size, _blockSize, volume, looped);
-}
-
-void SimpleSound::play(Audio::AudioStream *as, DisposeAfterUse::Flag autofreeStream) {
- g_system->getMixer()->playStream(Audio::Mixer::kPlainSoundType, &_handle, as,
- -1, Audio::Mixer::kMaxChannelVolume, 0, autofreeStream);
-}
-
-uint32 SimpleSound::getTimeMS() {
- return g_system->getMixer()->getSoundElapsedTime(_handle);
-}
-
-//////////////////////////////////////////////////////////////////////////
-// StreamedSound
-//////////////////////////////////////////////////////////////////////////
-StreamedSound::StreamedSound() : _as(nullptr), _loaded(false) {}
-
-StreamedSound::~StreamedSound() {
- stop(); // should execute before disposal of _as, so don't move in ~SimpleSound
- delete _as;
- _as = nullptr;
-}
-
-bool StreamedSound::load(Common::SeekableReadStream *stream, uint32 volume, bool looped, uint32 startBlock) {
- if (!stream)
- return false;
-
- g_system->getMixer()->stopHandle(_handle);
-
- loadHeader(stream);
-
- if (_as) {
- stop();
- delete _as;
- }
- // Start decoding the input stream
- _as = makeDecoder(stream, _size, volume, looped);
- if (startBlock)
- _as->seekToBlock(startBlock);
-
- // Start playing the decoded audio stream
- play(_as, DisposeAfterUse::NO);
-
- _loaded = true;
-
- return true;
-}
-
-bool StreamedSound::isFinished() {
- if (!_loaded)
- return false;
-
- return !g_system->getMixer()->isSoundHandleActive(_handle);
-}
-
-void StreamedSound::setVolume(uint32 newVolume) {
- if (!_as)
- return;
-
- _as->setVolume(newVolume);
-}
-
-void StreamedSound::setVolumeSmoothly(uint32 newVolume) {
- if (!_as)
- return;
-
- _as->setVolumeSmoothly(newVolume);
-}
-
-//////////////////////////////////////////////////////////////////////////
-// StreamedSound
-//////////////////////////////////////////////////////////////////////////
-AppendableSound::AppendableSound() : SimpleSound() {
- // Create an audio stream where the decoded chunks will be appended
- _as = Audio::makeQueuingAudioStream(44100, false);
- _finished = false;
-
- // Start playing the decoded audio stream
- play(_as, DisposeAfterUse::YES);
-
- // Initialize the block size
- // TODO: get it as an argument?
- _blockSize = 739;
-}
-
-AppendableSound::~AppendableSound() {
- finish();
- stop();
-
- _as = nullptr;
-}
-
-void AppendableSound::queueBuffer(const byte *data, uint32 size) {
- Common::MemoryReadStream *buffer = new Common::MemoryReadStream(data, size);
- queueBuffer(buffer);
-}
-
-void AppendableSound::queueBuffer(Common::SeekableReadStream *bufferIn) {
- if (!_as)
- error("[AppendableSound::queueBuffer] Audio stream is invalid");
-
- // Setup the ADPCM decoder
- uint32 sizeIn = (uint32)bufferIn->size();
- LastExpress_ADPCMStream *adpcm = makeDecoder(bufferIn, sizeIn, kVolumeFull, false);
-
- // Queue the stream
- _as->queueAudioStream(adpcm);
-}
-
-void AppendableSound::finish() {
- if (!_as)
- error("[AppendableSound::finish] Audio stream is invalid");
-
- if (!_finished)
- _as->finish();
-
- _finished = true;
-}
-
-bool AppendableSound::isFinished() {
- return _as->endOfStream();
-}
-
-} // End of namespace LastExpress
diff --git a/engines/lastexpress/data/snd.h b/engines/lastexpress/data/snd.h
deleted file mode 100644
index 0df415f8e23..00000000000
--- a/engines/lastexpress/data/snd.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/* 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/>.
- *
- */
-
-#ifndef LASTEXPRESS_SND_H
-#define LASTEXPRESS_SND_H
-
-/*
- Sound format (.SND / .LNK)
-
- uint32 {4} - data size
- uint16 {2} - number of blocks
-
- // for each block
- int16 {2} - initial sample
- byte {1} - initial index
- byte {1} - unused (00)
- byte {x} - IMA ADPCM sample codes
-*/
-
-#include "audio/mixer.h"
-
-namespace Audio {
-class AudioStream;
-class QueuingAudioStream;
-}
-
-namespace Common {
-class SeekableReadStream;
-}
-
-namespace LastExpress {
-
-class LastExpress_ADPCMStream;
-
-class SimpleSound {
-public:
- SimpleSound();
- virtual ~SimpleSound();
-
- void stop() const;
- virtual bool isFinished() = 0;
-
- uint32 getTimeMS();
-
-protected:
- void loadHeader(Common::SeekableReadStream *in);
- LastExpress_ADPCMStream *makeDecoder(Common::SeekableReadStream *in, uint32 size, uint32 volume, bool looped) const;
- void play(Audio::AudioStream *as, DisposeAfterUse::Flag autofreeStream);
-
- uint32 _size; ///< data size
- ///< - NIS: size of all blocks, including those located in the matching LNK file
- ///< - LNK: size of the LNK file itself, including the header
- ///< - SND: size of all blocks
- uint16 _blocks; ///< number of blocks
- uint32 _blockSize;
- Audio::SoundHandle _handle;
-};
-
-class StreamedSound : public SimpleSound {
-public:
- StreamedSound();
- ~StreamedSound() override;
-
- bool load(Common::SeekableReadStream *stream, uint32 volume, bool looped, uint32 startBlock = 0);
- bool isFinished() override;
-
- void setVolume(uint32 newVolume);
- void setVolumeSmoothly(uint32 newVolume);
-
-private:
- LastExpress_ADPCMStream *_as;
- bool _loaded;
-};
-
-class AppendableSound : public SimpleSound {
-public:
- AppendableSound();
- ~AppendableSound() override;
-
- void queueBuffer(const byte *data, uint32 size);
- void queueBuffer(Common::SeekableReadStream *bufferIn);
- void finish();
-
- bool isFinished() override;
-
-private:
- Audio::QueuingAudioStream *_as;
- bool _finished;
-};
-
-} // End of namespace LastExpress
-
-#endif // LASTEXPRESS_SND_H
diff --git a/engines/lastexpress/data/subtitle.cpp b/engines/lastexpress/data/subtitle.cpp
deleted file mode 100644
index 36f7604398f..00000000000
--- a/engines/lastexpress/data/subtitle.cpp
+++ /dev/null
@@ -1,243 +0,0 @@
-/* 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/>.
- *
- */
-
-// Based on the Xentax Wiki documentation:
-// http://wiki.xentax.com/index.php/The_Last_Express_SBE
-
-#include "lastexpress/data/subtitle.h"
-
-#include "lastexpress/data/font.h"
-
-#include "lastexpress/debug.h"
-
-#include "common/debug.h"
-#include "common/rect.h"
-#include "common/stream.h"
-#include "subtitle.h"
-
-namespace LastExpress {
-
-//////////////////////////////////////////////////////////////////////////
-// Subtitle
-//////////////////////////////////////////////////////////////////////////
-class SubtitleOld {
-public:
- SubtitleOld() : _timeStart(0), _timeStop(0), _topLength(0), _topText(nullptr),
- _bottomLength(0), _bottomText(nullptr) {}
- ~SubtitleOld() { reset(); }
-
- bool load(Common::SeekableReadStream *in);
- Common::Rect draw(Graphics::Surface *surface, Font *font);
-
- uint16 getTimeStart() const { return _timeStart; }
- uint16 getTimeStop() const { return _timeStop; }
-
-private:
- uint16 _timeStart; ///< display start time
- uint16 _timeStop; ///< display stop time
-
- uint16 _topLength; ///< top line length
- uint16 *_topText; ///< bottom line length
-
- uint16 _bottomLength; ///< top line (UTF-16 string)
- uint16 *_bottomText; ///< bottom line (UTF-16 string)
-
- void reset();
-};
-
-void SubtitleOld::reset() {
- delete[] _topText;
- delete[] _bottomText;
- _topText = nullptr;
- _bottomText = nullptr;
-}
-
-template<typename T>
-T *newArray(size_t n) {
- if (n <= (size_t)-1 / sizeof(T))
- return new T[n];
-
- // n is too large
- return nullptr;
-}
-
-bool SubtitleOld::load(Common::SeekableReadStream *in) {
- reset();
-
- if (!in)
- return false;
-
- // Read the display times
- _timeStart = in->readUint16LE();
- _timeStop = in->readUint16LE();
-
- // Read the text lengths
- _topLength = in->readUint16LE();
- _bottomLength = in->readUint16LE();
-
- // Create the buffers
- if (_topLength) {
- _topText = newArray<uint16>(_topLength + 1);
- if (!_topText)
- return false;
-
- _topText[_topLength] = 0;
- }
- if (_bottomLength) {
- _bottomText = newArray<uint16>(_bottomLength + 1);
- if (!_bottomText)
- return false;
-
- _bottomText[_bottomLength] = 0;
- }
-
- // Read the texts
- for (int i = 0; i < _topLength; i++)
- _topText[i] = in->readUint16LE();
- for (int i = 0; i < _bottomLength; i++)
- _bottomText[i] = in->readUint16LE();
-
- debugC(9, kLastExpressDebugSubtitle, " %d -> %d:", _timeStart, _timeStop);
- if (_topLength)
- debugC(9, kLastExpressDebugSubtitle, "\t%ls", (wchar_t *)_topText);
- if (_bottomLength)
- debugC(9, kLastExpressDebugSubtitle, "\t%ls", (wchar_t *)_bottomText);
-
- return true;
-}
-
-Common::Rect SubtitleOld::draw(Graphics::Surface *surface, Font *font) {
- Common::Rect rectTop, rectBottom;
-
- //FIXME find out proper subtitles coordinates (and hope it's hardcoded and not stored in the sequence or animation)
- rectTop = font->drawString(surface, 100, 100, _topText, _topLength);
- rectBottom = font->drawString(surface, 100, 300, _bottomText, _bottomLength);
-
- rectTop.extend(rectBottom);
-
- return rectTop;
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-// SubtitleManager
-//////////////////////////////////////////////////////////////////////////
-SubtitleManagerOld::SubtitleManagerOld(Font *font) : _font(font), _maxTime(0), _currentIndex(-1), _lastIndex(-1) {}
-
-SubtitleManagerOld::~SubtitleManagerOld() {
- reset();
-
- // Zero passed pointers
- _font = nullptr;
-}
-
-void SubtitleManagerOld::reset() {
- for (uint i = 0; i < _subtitles.size(); i++)
- delete _subtitles[i];
-
- _subtitles.clear();
- _currentIndex = -1;
- _lastIndex = -1;
-}
-
-bool SubtitleManagerOld::load(Common::SeekableReadStream *stream) {
- if (!stream)
- return false;
-
- reset();
-
- // Read header to get the number of subtitles
- uint32 numSubtitles = stream->readUint16LE();
- if (stream->eos())
- error("[SubtitleManager::load] Cannot read from subtitle file");
-
- debugC(3, kLastExpressDebugSubtitle, "Number of subtitles in file: %d", numSubtitles);
-
- // TODO: Check that stream contain enough data
- //if (stream->size() < (signed)(numSubtitles * sizeof(SubtitleData))) {
- //debugC(2, kLastExpressDebugSubtitle, "Subtitle file does not contain valid data");
- //return false;
- //}
-
- // Read the list of subtitles
- _maxTime = 0;
- for (uint i = 0; i < numSubtitles; i++) {
- SubtitleOld *subtitle = new SubtitleOld();
- if (!subtitle->load(stream)) {
- // Failed to read this line
- reset();
-
- delete subtitle;
-
- return false;
- }
-
- // Update the max time
- if (subtitle->getTimeStop() > _maxTime)
- _maxTime = subtitle->getTimeStop();
-
- _subtitles.push_back(subtitle);
- }
-
- delete stream;
-
- return true;
-}
-
-uint16 SubtitleManagerOld::getMaxTime() const {
- return _maxTime;
-}
-
-void SubtitleManagerOld::setTime(uint16 time) {
- _currentIndex = -1;
-
- // Find the appropriate line to show
- for (uint i = 0; i < _subtitles.size(); i++) {
- if ((time >= _subtitles[i]->getTimeStart()) && (time <= _subtitles[i]->getTimeStop())) {
- // Keep the index of the line to show
- _currentIndex = (int16)i;
- return;
- }
- }
-}
-
-bool SubtitleManagerOld::hasChanged() const {
- // TODO: mark the old line rect as dirty
- if (_currentIndex != _lastIndex)
- return true;
- else
- return false;
-}
-
-Common::Rect SubtitleManagerOld::draw(Graphics::Surface *surface) {
- // Update the last drawn index
- _lastIndex = _currentIndex;
-
- // Return if we don't have to draw any line
- if (_currentIndex == -1)
- return Common::Rect();
-
- // Draw the current line
- assert(_currentIndex >= 0 && _currentIndex < (int16)_subtitles.size());
- return _subtitles[(uint16)_currentIndex]->draw(surface, _font);
-}
-
-} // End of namespace LastExpress
diff --git a/engines/lastexpress/data/subtitle.h b/engines/lastexpress/data/subtitle.h
deleted file mode 100644
index 136fafc02de..00000000000
--- a/engines/lastexpress/data/subtitle.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* 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/>.
- *
- */
-
-#ifndef LASTEXPRESS_SUBTITLE_H
-#define LASTEXPRESS_SUBTITLE_H
-
-/*
- Subtitle format (.SBE)
-
- uint16 {2} - number of subtitles
-
- // for each subtitle
- uint16 {2} - display start time
- uint16 {2} - display stop time
- uint16 {2} - top line length
- uint16 {2} - bottom line length
- byte {x} - top line (UTF-16 string)
- byte {x} - bottom line (UTF-16 string)
-
- Subtitles seem to be drawn on screen at (80, 420) x (560, 458)
-*/
-
-#include "lastexpress/drawable.h"
-
-#include "common/array.h"
-
-namespace Common {
-class SeekableReadStream;
-}
-
-namespace LastExpress {
-
-class Font;
-class SubtitleOld;
-
-class SubtitleManagerOld : public Drawable {
-public:
- SubtitleManagerOld(Font *font);
- ~SubtitleManagerOld() override;
-
- bool load(Common::SeekableReadStream *stream);
- uint16 getMaxTime() const;
- void setTime(uint16 time);
- bool hasChanged() const;
- Common::Rect draw(Graphics::Surface *surface) override;
-
-private:
- Common::Array<SubtitleOld *> _subtitles;
- Font *_font;
- uint16 _maxTime;
-
- int16 _currentIndex;
- int16 _lastIndex;
-
- void reset();
-};
-
-} // End of namespace LastExpress
-
-#endif // LASTEXPRESS_SUBTITLE_H
diff --git a/engines/lastexpress/debug.cpp b/engines/lastexpress/debug.cpp
index 53dfae8025f..3048b0f9c3a 100644
--- a/engines/lastexpress/debug.cpp
+++ b/engines/lastexpress/debug.cpp
@@ -22,33 +22,17 @@
#include "lastexpress/debug.h"
// Data
-#include "lastexpress/data/animation.h"
-#include "lastexpress/data/background.h"
-#include "lastexpress/data/cursor.h"
-#include "lastexpress/data/scene.h"
-#include "lastexpress/data/sequence.h"
-#include "lastexpress/data/subtitle.h"
#include "lastexpress/fight/fight.h"
-#include "lastexpress/game/action.h"
#include "lastexpress/game/beetle.h"
-#include "lastexpress/game/entities.h"
-#include "lastexpress/game/inventory.h"
#include "lastexpress/game/logic.h"
-#include "lastexpress/game/object.h"
#include "lastexpress/game/savegame.h"
-#include "lastexpress/game/savepoint.h"
-#include "lastexpress/game/scenes.h"
-#include "lastexpress/game/state.h"
#include "lastexpress/menu/clock.h"
-#include "lastexpress/sound/queue.h"
-
#include "lastexpress/graphics.h"
#include "lastexpress/lastexpress.h"
-#include "lastexpress/resource.h"
#include "common/debug-channels.h"
#include "common/md5.h"
@@ -1157,1127 +1141,26 @@ void LastExpressEngine::showEngineInfo() {
#endif
-Debugger::Debugger(LastExpressEngine *engine) : _engine(engine), _command(nullptr), _numParams(0), _commandParams(nullptr) {
-
+Debugger::Debugger(LastExpressEngine *engine) : _engine(engine) {
//////////////////////////////////////////////////////////////////////////
// Register the debugger commands
+ //////////////////////////////////////////////////////////////////////////
// General
registerCmd("help", WRAP_METHOD(Debugger, cmdHelp));
-
- // Data
- registerCmd("ls", WRAP_METHOD(Debugger, cmdListFiles));
- registerCmd("dump", WRAP_METHOD(Debugger, cmdDumpFiles));
-
- registerCmd("showframe", WRAP_METHOD(Debugger, cmdShowFrame));
- registerCmd("showbg", WRAP_METHOD(Debugger, cmdShowBg));
- registerCmd("playseq", WRAP_METHOD(Debugger, cmdPlaySeq));
- registerCmd("playsnd", WRAP_METHOD(Debugger, cmdPlaySnd));
- registerCmd("playsbe", WRAP_METHOD(Debugger, cmdPlaySbe));
- registerCmd("playnis", WRAP_METHOD(Debugger, cmdPlayNis));
-
- // Scene & interaction
- registerCmd("loadscene", WRAP_METHOD(Debugger, cmdLoadScene));
- registerCmd("fight", WRAP_METHOD(Debugger, cmdFight));
- registerCmd("beetle", WRAP_METHOD(Debugger, cmdBeetle));
-
- // Game
- registerCmd("delta", WRAP_METHOD(Debugger, cmdTimeDelta));
- registerCmd("time", WRAP_METHOD(Debugger, cmdTime));
- registerCmd("show", WRAP_METHOD(Debugger, cmdShow));
- registerCmd("character", WRAP_METHOD(Debugger, cmdEntity));
-
- // Misc
- registerCmd("chapter", WRAP_METHOD(Debugger, cmdSwitchChapter));
- registerCmd("clear", WRAP_METHOD(Debugger, cmdClear));
-
- resetCommand();
-
- _soundStream = new StreamedSound();
}
Debugger::~Debugger() {
- SAFE_DELETE(_soundStream);
- resetCommand();
-
- _command = nullptr;
- _commandParams = nullptr;
-
// Zero passed pointers
_engine = nullptr;
}
-//////////////////////////////////////////////////////////////////////////
-// Helper functions
-//////////////////////////////////////////////////////////////////////////
-bool Debugger::hasCommand() const {
- return (_numParams != 0);
-}
-
-void Debugger::resetCommand() {
- SAFE_DELETE(_command);
-
- if (_commandParams)
- for (int i = 0; i < _numParams; i++)
- free(_commandParams[i]);
-
- free(_commandParams);
- _commandParams = nullptr;
- _numParams = 0;
-}
-
-int Debugger::getNumber(const char *arg) const {
- return strtol(arg, (char **)nullptr, 0);
-}
-
-void Debugger::copyCommand(int argc, const char **argv) {
- _commandParams = (char **)malloc(sizeof(char *) * (uint)argc);
- if (!_commandParams)
- return;
-
- _numParams = argc;
-
- for (int i = 0; i < _numParams; i++) {
- size_t ln = strlen(argv[i]) + 1;
- _commandParams[i] = (char *)malloc(ln);
- if (_commandParams[i] == nullptr)
- error("[Debugger::copyCommand] Cannot allocate memory for command parameters");
-
- memset(_commandParams[i], 0, strlen(argv[i]) + 1);
- Common::strcpy_s(_commandParams[i], ln, argv[i]);
- }
-
- // Exit the debugger!
- cmdExit(0, nullptr);
-}
-
-void Debugger::callCommand() {
- if (_command)
- (*_command)(_numParams, const_cast<const char **>(_commandParams));
-}
-
-bool Debugger::loadArchive(int index) {
- if (index < 1 || index > 3) {
- debugPrintf("Invalid cd number (was: %d, valid: [1-3])\n", index);
- return false;
- }
-
- if (!_engine->getResourceManager()->loadArchive((ArchiveIndex)index))
- return false;
-
- getScenes()->loadSceneDataFile((ArchiveIndex)index);
-
- return true;
-}
-
-// Restore loaded archive
-void Debugger::restoreArchive() const {
-
- ArchiveIndex index = kArchiveCd1;
-
- switch (getProgress().chapter) {
- default:
- case kChapter1:
- index = kArchiveCd1;
- break;
-
- case kChapter2:
- case kChapter3:
- index = kArchiveCd2;
- break;
-
- case kChapter4:
- case kChapter5:
- index = kArchiveCd3;
- break;
- }
-
- _engine->getResourceManager()->loadArchive(index);
- getScenes()->loadSceneDataFile(index);
-}
-
//////////////////////////////////////////////////////////////////////////
// Debugger commands
//////////////////////////////////////////////////////////////////////////
bool Debugger::cmdHelp(int, const char **) {
- debugPrintf("Debug flags\n");
- debugPrintf("-----------\n");
- debugPrintf(" debugflag_list - Lists the available debug flags and their status\n");
- debugPrintf(" debugflag_enable - Enables a debug flag\n");
- debugPrintf(" debugflag_disable - Disables a debug flag\n");
- debugPrintf("\n");
- debugPrintf("Commands\n");
- debugPrintf("--------\n");
- debugPrintf(" ls - list files in the archive\n");
- debugPrintf(" dump - dump a list of files in all archives\n");
- debugPrintf("\n");
- debugPrintf(" showframe - show a frame from a sequence\n");
- debugPrintf(" showbg - show a background\n");
- debugPrintf(" playseq - play a sequence\n");
- debugPrintf(" playsnd - play a sound\n");
- debugPrintf(" playsbe - play a subtitle\n");
- debugPrintf(" playnis - play an animation\n");
+ debugPrintf("No commands");
debugPrintf("\n");
- debugPrintf(" loadscene - load a scene\n");
- debugPrintf(" fight - start a fight\n");
- debugPrintf(" beetle - start the beetle game\n");
- debugPrintf("\n");
- debugPrintf(" delta - Adjust the time delta\n");
- debugPrintf(" show - show game data\n");
- debugPrintf(" character - show character data\n");
- debugPrintf("\n");
- debugPrintf(" loadgame - load a saved game\n");
- debugPrintf(" chapter - switch to a specific chapter\n");
- debugPrintf(" clear - clear the screen\n");
- debugPrintf("\n");
- return true;
-}
-
-/**
- * Command: list files in archive
- *
- * @param argc The argument count.
- * @param argv The values.
- *
- * @return true if it was handled, false otherwise
- */
-bool Debugger::cmdListFiles(int argc, const char **argv) {
- if (argc == 2 || argc == 3) {
- Common::Path filter(const_cast<char *>(argv[1]));
-
- // Load the proper archive
- if (argc == 3) {
- if (!loadArchive(getNumber(argv[2])))
- return true;
- }
-
- Common::ArchiveMemberList list;
- int count = _engine->getResourceManager()->listMatchingMembers(list, filter);
-
- debugPrintf("Number of matches: %d\n", count);
- for (Common::ArchiveMemberList::iterator it = list.begin(); it != list.end(); ++it)
- debugPrintf(" %s\n", (*it)->getName().c_str());
-
- // Restore archive
- if (argc == 3)
- restoreArchive();
- } else {
- debugPrintf("Syntax: ls <filter> (use * for all) (<cd number>)\n");
- }
-
- return true;
-}
-
-/**
- * Command: Dump the list of files in the archive
- *
- * @param argc The argument count.
- * @param argv The values.
- *
- * @return true if it was handled, false otherwise
- */
-bool Debugger::cmdDumpFiles(int argc, const char **) {
-#define OUTPUT_ARCHIVE_FILES(name, filename) { \
- _engine->getResourceManager()->reset(); \
- _engine->getResourceManager()->loadArchive(filename); \
- Common::ArchiveMemberList list; \
- int count = _engine->getResourceManager()->listMatchingMembers(list, "*"); \
- debugC(1, kLastExpressDebugResource, "\n\n--------------------------------------------------------------------\n"); \
- debugC(1, kLastExpressDebugResource, "-- " #name " (%d files)\n", count); \
- debugC(1, kLastExpressDebugResource, "--------------------------------------------------------------------\n\n"); \
- debugC(1, kLastExpressDebugResource, "Filename,Size,MD5\n"); \
- for (Common::ArchiveMemberList::iterator it = list.begin(); it != list.end(); ++it) { \
- Common::SeekableReadStream *stream = getArchiveMember((*it)->getName()); \
- if (!stream) { \
- debugPrintf("ERROR: Cannot create stream for file: %s\n", (*it)->getName().c_str()); \
- restoreArchive(); \
- return true; \
- } \
- Common::String md5str = Common::computeStreamMD5AsString(*stream); \
- debugC(1, kLastExpressDebugResource, "%s, %d, %s", (*it)->getName().c_str(), (int)stream->size(), md5str.c_str()); \
- delete stream; \
- } \
-}
-
- if (argc == 1) {
- // For each archive file, dump the list of files
- if (_engine->isDemo()) {
- OUTPUT_ARCHIVE_FILES("DEMO", "DEMO.HPF");
- } else {
- OUTPUT_ARCHIVE_FILES("HD", "HD.HPF");
- OUTPUT_ARCHIVE_FILES("CD 1", "CD1.HPF");
- OUTPUT_ARCHIVE_FILES("CD 2", "CD2.HPF");
- OUTPUT_ARCHIVE_FILES("CD 3", "CD3.HPF");
- }
-
- // Restore current loaded archive
- restoreArchive();
- } else {
- debugPrintf("Syntax: dump");
- }
-
- return true;
-}
-
-/**
- * Command: Shows a frame
- *
- * @param argc The argument count.
- * @param argv The values.
- *
- * @return true if it was handled, false otherwise
- */
-bool Debugger::cmdShowFrame(int argc, const char **argv) {
- if (argc == 3 || argc == 4) {
- Common::String filename(const_cast<char *>(argv[1]));
- filename += ".seq";
-
- if (argc == 4) {
- if (!loadArchive(getNumber(argv[3])))
- return true;
- }
-
- if (!_engine->getResourceManager()->hasFile(Common::Path(filename))) {
- debugPrintf("Cannot find file: %s\n", filename.c_str());
- return true;
- }
-
- // Store command
- if (!hasCommand()) {
- _command = WRAP_METHOD(Debugger, cmdShowFrame);
- copyCommand(argc, argv);
-
- return cmdExit(0, nullptr);
- } else {
- Sequence sequence(filename);
- if (sequence.load(getArchiveMember(filename))) {
- _engine->getCursor()->show(false);
- clearBg(GraphicsManagerOld::kBackgroundOverlay);
-
- AnimFrame *frame = sequence.getFrame((uint16)getNumber(argv[2]));
- if (!frame) {
- debugPrintf("Invalid frame index '%s'\n", argv[2]);
- resetCommand();
- return true;
- }
-
- _engine->getGraphicsManagerOld()->draw(frame, GraphicsManagerOld::kBackgroundOverlay);
- delete frame;
-
- askForRedraw();
- redrawScreen();
-
- _engine->_system->delayMillis(1000);
- _engine->getCursor()->show(true);
- }
-
- resetCommand();
-
- if (argc == 4)
- restoreArchive();
- }
- } else {
- debugPrintf("Syntax: cmd_showframe <seqname> <index> (<cd number>)\n");
- }
- return true;
-}
-
-/**
- * Command: shows a background
- *
- * @param argc The argument count.
- * @param argv The values.
- *
- * @return true if it was handled, false otherwise
- */
-bool Debugger::cmdShowBg(int argc, const char **argv) {
- if (argc == 2 || argc == 3) {
- Common::String filename(const_cast<char *>(argv[1]));
-
- if (argc == 3) {
- if (!loadArchive(getNumber(argv[2])))
- return true;
- }
-
- if (!_engine->getResourceManager()->hasFile(Common::Path(filename + ".BG"))) {
- debugPrintf("Cannot find file: %s\n", (filename + ".BG").c_str());
- return true;
- }
-
- // Store command
- if (!hasCommand()) {
- _command = WRAP_METHOD(Debugger, cmdShowBg);
- copyCommand(argc, argv);
-
- return cmdExit(0, nullptr);
- } else {
- clearBg(GraphicsManagerOld::kBackgroundC);
-
- Background *background = _engine->getResourceManager()->loadBackground(filename);
- if (background) {
- _engine->getGraphicsManagerOld()->draw(background, GraphicsManagerOld::kBackgroundC);
- delete background;
- askForRedraw();
- }
-
- redrawScreen();
-
- if (argc == 3)
- restoreArchive();
-
- // Pause for a second to be able to see the background
- _engine->_system->delayMillis(1000);
-
- resetCommand();
- }
- } else {
- debugPrintf("Syntax: showbg <bgname> (<cd number>)\n");
- }
- return true;
-}
-
-/**
- * Command: plays a sequence.
- *
- * @param argc The argument count.
- * @param argv The values.
- *
- * @return true if it was handled, false otherwise
- */
-bool Debugger::cmdPlaySeq(int argc, const char **argv) {
- if (argc == 2 || argc == 3) {
- Common::String filename(const_cast<char *>(argv[1]));
- filename += ".seq";
-
- if (argc == 3) {
- if (!loadArchive(getNumber(argv[2])))
- return true;
- }
-
- if (!_engine->getResourceManager()->hasFile(Common::Path(filename))) {
- debugPrintf("Cannot find file: %s\n", filename.c_str());
- return true;
- }
-
- // Store command
- if (!hasCommand()) {
- _command = WRAP_METHOD(Debugger, cmdPlaySeq);
- copyCommand(argc, argv);
-
- return cmdExit(0, nullptr);
- } else {
- Sequence *sequence = new Sequence(filename);
- if (sequence->load(getArchiveMember(filename))) {
-
- // Check that we have at least a frame to show
- if (sequence->count() == 0) {
- delete sequence;
- return false;
- }
-
- _engine->getCursor()->show(false);
-
- SequenceFrame player(sequence, 0, true);
- do {
- // Clear screen
- clearBg(GraphicsManagerOld::kBackgroundA);
-
- _engine->getGraphicsManagerOld()->draw(&player, GraphicsManagerOld::kBackgroundA);
-
- askForRedraw();
- redrawScreen();
-
- // Handle right-click to interrupt sequence
- Common::Event ev;
- if (_engine->getEventManager()->pollEvent(ev) && ev.type == Common::EVENT_RBUTTONUP)
- break;
-
- _engine->_system->delayMillis(175);
-
- // go to the next frame
- } while (player.nextFrame());
- _engine->getCursor()->show(true);
- } else {
- // Sequence player is deleting his reference to the sequence, but we need to take care of it if the
- // sequence could not be loaded
- delete sequence;
- }
-
- resetCommand();
-
- if (argc == 3)
- restoreArchive();
- }
- } else {
- debugPrintf("Syntax: playseq <seqname> (<cd number>)\n");
- }
- return true;
-}
-
-/**
- * Command: plays a sound
- *
- * @param argc The argument count.
- * @param argv The values.
- *
- * @return true if it was handled, false otherwise
- */
-bool Debugger::cmdPlaySnd(int argc, const char **argv) {
- if (argc == 2 || argc == 3) {
-
- if (argc == 3) {
- if (!loadArchive(getNumber(argv[2])))
- return true;
- }
-
- // Add .SND at the end of the filename if needed
- Common::String name(const_cast<char *>(argv[1]));
- if (!name.contains('.'))
- name += ".SND";
-
- if (!_engine->getResourceManager()->hasFile(Common::Path(name))) {
- debugPrintf("Cannot find file: %s\n", name.c_str());
- return true;
- }
-
- _engine->_system->getMixer()->stopAll();
-
- _soundStream->load(getArchiveMember(name), kVolumeFull, false);
-
- if (argc == 3)
- restoreArchive();
- } else {
- debugPrintf("Syntax: playsnd <sndname> (<cd number>)\n");
- }
- return true;
-}
-
-/**
- * Command: plays subtitles
- *
- * @param argc The argument count.
- * @param argv The values.
- *
- * @return true if it was handled, false otherwise
- */
-bool Debugger::cmdPlaySbe(int argc, const char **argv) {
- if (argc == 2 || argc == 3) {
- Common::String filename(const_cast<char *>(argv[1]));
-
- if (argc == 3) {
- if (!loadArchive(getNumber(argv[2])))
- return true;
- }
-
- filename += ".sbe";
-
- if (!_engine->getResourceManager()->hasFile(Common::Path(filename))) {
- debugPrintf("Cannot find file: %s\n", filename.c_str());
- return true;
- }
-
- // Store command
- if (!hasCommand()) {
- _command = WRAP_METHOD(Debugger, cmdPlaySbe);
- copyCommand(argc, argv);
-
- return cmdExit(0, nullptr);
- } else {
- SubtitleManagerOld subtitle(_engine->getFont());
- if (subtitle.load(getArchiveMember(filename))) {
- _engine->getCursor()->show(false);
- for (uint16 i = 0; i < subtitle.getMaxTime(); i += 25) {
- clearBg(GraphicsManagerOld::kBackgroundAll);
-
- subtitle.setTime(i);
- _engine->getGraphicsManagerOld()->draw(&subtitle, GraphicsManagerOld::kBackgroundOverlay);
-
- askForRedraw();
- redrawScreen();
-
- // Handle right-click to interrupt sequence
- Common::Event ev;
- if (!_engine->getEventManager()->pollEvent(ev))
- break;
-
- if (ev.type == Common::EVENT_RBUTTONUP)
- break;
-
- _engine->_system->delayMillis(500);
- }
- _engine->getCursor()->show(true);
- }
-
- if (argc == 3)
- restoreArchive();
-
- resetCommand();
- }
- } else {
- debugPrintf("Syntax: playsbe <sbename> (<cd number>)\n");
- }
- return true;
-}
-
-/**
- * Command: plays a NIS animation sequence.
- *
- * @param argc The argument count.
- * @param argv The values.
- *
- * @return true if it was handled, false otherwise
- */
-bool Debugger::cmdPlayNis(int argc, const char **argv) {
- if (argc == 2 || argc == 3) {
- Common::String name(const_cast<char *>(argv[1]));
-
- if (argc == 3) {
- if (!loadArchive(getNumber(argv[2])))
- return true;
- }
-
- // If we got a nis filename, check that the file exists
- if (name.contains('.') && !_engine->getResourceManager()->hasFile(Common::Path(name))) {
- debugPrintf("Cannot find file: %s\n", name.c_str());
- return true;
- }
-
- // Store command
- if (!hasCommand()) {
- _command = WRAP_METHOD(Debugger, cmdPlayNis);
- copyCommand(argc, argv);
-
- return cmdExit(0, nullptr);
- } else {
- // Make sure we are not called in a loop
- _numParams = 0;
-
- // Check if we got a nis filename or an animation index
- if (name.contains('.')) {
- Animation animation;
- if (animation.load(getArchiveMember(name))) {
- _engine->getCursor()->show(false);
- animation.play();
- _engine->getCursor()->show(true);
- }
- } else {
- getActionOld()->playAnimation((EventIndex)atoi(name.c_str()), true);
- }
-
- if (argc == 3)
- restoreArchive();
-
- resetCommand();
- }
- } else {
- debugPrintf("Syntax: playnis <nisname.nis or animation index> (<cd number>)\n");
- }
- return true;
-}
-
-/**
- * Command: loads a scene
- *
- * @param argc The argument count.
- * @param argv The values.
- *
- * @return true if it was handled, false otherwise
- */
-bool Debugger::cmdLoadScene(int argc, const char **argv) {
- if (argc == 2 || argc == 3) {
- int cd = 1;
- SceneIndex index = (SceneIndex)getNumber(argv[1]);
-
- // Check args
- if (argc == 3) {
- if (!loadArchive(getNumber(argv[2])))
- return true;
- }
-
- if (index > 2500) {
- debugPrintf("Error: invalid index value (0-2500)");
- return true;
- }
-
- // Store command
- if (!hasCommand()) {
- _command = WRAP_METHOD(Debugger, cmdLoadScene);
- copyCommand(argc, argv);
-
- return cmdExit(0, nullptr);
- } else {
-
- clearBg(GraphicsManagerOld::kBackgroundAll);
-
- /************ DEBUG *************************/
- // Use to find scenes with certain values
-
- //for (int i = index; i < 2500; i++) {
- // loadSceneObject(scene, i);
-
- // if (scene.getHeader() && scene.getHeader()->car == 5 && scene.getHeader()->position == 81) {
- // debugPrintf("Found scene: %d", i);
-
- // // Draw scene found
- // _engine->getGraphicsManagerOld()->draw(&scene, GraphicsManagerOld::kBackgroundC);
-
- // askForRedraw();
- // redrawScreen();
- // _engine->_system->delayMillis(500);
-
- // break;
- // }
- //}
-
- //delete _sceneLoader;
- //resetCommand();
- //return true;
-
- /*********************************************/
- Scene *scene = getScenes()->get(index);
- if (!scene) {
- debugPrintf("Cannot load scene %i from CD %i", index, cd);
- resetCommand();
-
- return true;
- }
-
- _engine->getGraphicsManagerOld()->draw(scene, GraphicsManagerOld::kBackgroundC);
-
- askForRedraw();
- redrawScreen();
-
- // Pause for a second to be able to see the scene
- _engine->_system->delayMillis(500);
-
- if (argc == 3)
- restoreArchive();
-
- resetCommand();
- }
- } else {
- debugPrintf("Syntax: loadscene <scene index> (<cd number>)\n");
- }
- return true;
-}
-
-/**
- * Command: starts a fight sequence
- *
- * @param argc The argument count.
- * @param argv The values.
- *
- * @return true if it was handled, false otherwise
- */
-bool Debugger::cmdFight(int argc, const char **argv) {
- if (argc == 2) {
- FightType type = (FightType)getNumber(argv[1]);
-
- // Load proper data file
- ArchiveIndex index = kArchiveCd1;
- switch (type) {
- default:
- goto error;
-
- case kFightMilos:
- index = kArchiveCd1;
- break;
-
- case kFightAnna:
- index = kArchiveCd2;
- break;
-
- case kFightIvo:
- case kFightSalko:
- case kFightVesna:
- index = kArchiveCd3;
- break;
- }
-
- if (!loadArchive(index)) {
- debugPrintf("Error: failed to load archive %d\n", index);
- return true;
- }
-
- // Store command
- if (!hasCommand()) {
- _command = WRAP_METHOD(Debugger, cmdFight);
- copyCommand(argc, argv);
-
- return false;
- } else {
- // Make sure we are not called in a loop
- _numParams = 0;
-
- clearBg(GraphicsManagerOld::kBackgroundAll);
- askForRedraw();
- redrawScreen();
-
- SceneIndex lastScene = getState()->scene;
-
- //getFight()->setup(type) ? debugPrintf("Lost fight!\n") : debugPrintf("Won fight!\n");
-
- // Pause for a second to be able to see the final scene
- _engine->_system->delayMillis(1000);
-
- // Restore loaded archive
- restoreArchive();
-
- // Stop audio and restore scene
- getSoundQueue()->stopAllSound();
-
- clearBg(GraphicsManagerOld::kBackgroundAll);
-
- Scene *scene = getScenes()->get(lastScene);
- _engine->getGraphicsManagerOld()->draw(scene, GraphicsManagerOld::kBackgroundC);
-
- askForRedraw();
- redrawScreen();
-
- resetCommand();
- }
- } else {
-error:
- debugPrintf("Syntax: fight <id> (id=2001-2005)\n");
- }
-
- return true;
-}
-
-/**
- * Command: starts the beetle sequence
- *
- * @param argc The argument count.
- * @param argv The values.
- *
- * @return true if it was handled, false otherwise
- */
-bool Debugger::cmdBeetle(int argc, const char **argv) {
- if (argc == 1) {
- // Load proper data file (beetle game in in Cd2)
- if (!loadArchive(kArchiveCd2)) {
- debugPrintf("Error: failed to load archive 2");
- return true;
- }
-
- // Store command
- if (!hasCommand()) {
- _command = WRAP_METHOD(Debugger, cmdBeetle);
- copyCommand(argc, argv);
-
- return false;
- } else {
- clearBg(GraphicsManagerOld::kBackgroundAll);
- askForRedraw();
- redrawScreen();
-
- // Save current state
- SceneIndex previousScene = getState()->scene;
- ObjectLocation previousLocation = getInventory()->get(kItemBeetle)->location;
- ChapterIndex previousChapter = (ChapterIndex)getProgress().chapter;
-
- // Setup scene & inventory
- getProgress().chapter = kChapter2;
- Scene *scene = getScenes()->get(kSceneBeetle);
- getInventory()->get(kItemBeetle)->location = kObjectLocation3;
-
- askForRedraw();
- redrawScreen();
-
- // Load the beetle game
- Action *action = nullptr;
- Beetle *beetle = new Beetle(_engine);
- if (!beetle->isLoaded())
- beetle->load();
-
- // Play the game
- Common::Event ev;
- bool playgame = true;
- while (playgame) {
- // Update beetle
- beetle->update();
-
- askForRedraw();
- redrawScreen();
-
- while (g_system->getEventManager()->pollEvent(ev)) {
-
- switch (ev.type) {
- default:
- break;
-
- case Common::EVENT_KEYDOWN:
- // Exit beetle game on escape
- if (ev.kbd.keycode == Common::KEYCODE_ESCAPE)
- playgame = false;
-
- break;
-
- case Common::EVENT_MOUSEMOVE: {
- // Update cursor
- CursorStyle style = kCursorNormal;
- SceneHotspot *hotspot = nullptr;
- if (scene->checkHotSpot(ev.mouse, &hotspot)) {
- if (!action)
- action = new Action(_engine);
-
- style = action->getCursor(*hotspot);
- }
-
- _engine->getCursor()->setStyle(style);
- break;
- }
-
- case Common::EVENT_LBUTTONUP:
- case Common::EVENT_RBUTTONUP:
- // Update coordinates
- getLogic()->getGameState()->setCoordinates(ev.mouse);
-
- if (beetle->catchBeetle())
- playgame = false;
- break;
- }
-
- _engine->_system->delayMillis(10);
- }
- }
-
- // Cleanup
- beetle->unload();
- delete beetle;
- delete action;
-
- // Pause for a second to be able to see the final scene
- _engine->_system->delayMillis(1000);
-
- // Restore state
- getProgress().chapter = previousChapter;
- getInventory()->get(kItemBeetle)->location = previousLocation;
-
- // Restore loaded archive
- restoreArchive();
-
- // Stop audio and restore scene
- getSoundQueue()->stopAllSound();
-
- clearBg(GraphicsManagerOld::kBackgroundAll);
-
- Scene *oldScene = getScenes()->get(previousScene);
- _engine->getGraphicsManagerOld()->draw(oldScene, GraphicsManagerOld::kBackgroundC);
-
- askForRedraw();
- redrawScreen();
-
- resetCommand();
- }
- } else {
- debugPrintf("Syntax: beetle\n");
- }
-
- return true;
-}
-
-/**
- * Command: adjusts the time delta
- *
- * @param argc The argument count.
- * @param argv The values.
- *
- * @return true if it was handled, false otherwise
- */
-bool Debugger::cmdTimeDelta(int argc, const char **argv) {
- if (argc == 2) {
- int delta = getNumber(argv[1]);
-
- if (delta <= 0 || delta > 500)
- goto label_error;
-
- getState()->timeDelta = (uint)delta;
- } else {
-label_error:
- debugPrintf("Syntax: delta <time delta> (delta=1-500)\n");
- }
-
- return true;
-}
-
-/**
- * Command: Convert between in-game time and human readable time
- *
- * @param argc The argument count.
- * @param argv The values.
- *
- * @return true if it was handled, false otherwise
- */
-bool Debugger::cmdTime(int argc, const char **argv) {
- if (argc == 2) {
- int32 time = getNumber(argv[1]);
-
- if (time < 0)
- goto label_error;
-
- // Convert to human-readable form
- uint8 hours = 0;
- uint8 minutes = 0;
- State::getHourMinutes((uint32)time, &hours, &minutes);
-
- debugPrintf("%02d:%02d\n", hours, minutes);
- } else {
-label_error:
- debugPrintf("Syntax: time <time to convert> (time=0-INT_MAX)\n");
- }
-
- return true;
-}
-
-/**
- * Command: show game logic data
- *
- * @param argc The argument count.
- * @param argv The values.
- *
- * @return true if it was handled, false otherwise
- */
-bool Debugger::cmdShow(int argc, const char **argv) {
-#define OUTPUT_DUMP(name, text) \
- debugPrintf(#name "\n"); \
- debugPrintf("--------------------------------------------------------------------\n\n"); \
- debugPrintf("%s", text); \
- debugPrintf("\n");
-
- if (argc == 2) {
-
- Common::String name(const_cast<char *>(argv[1]));
-
- if (name == "state" || name == "st") {
- OUTPUT_DUMP("Game state", getState()->toString().c_str());
- } else if (name == "progress" || name == "pr") {
- OUTPUT_DUMP("Progress", getProgress().toString().c_str());
- } else if (name == "flags" || name == "fl") {
- OUTPUT_DUMP("Flags", getFlags()->toString().c_str());
- } else if (name == "inventory" || name == "inv") {
- OUTPUT_DUMP("Inventory", getInventory()->toString().c_str());
- } else if (name == "objects" || name == "obj") {
- OUTPUT_DUMP("Objects", getObjects()->toString().c_str());
- } else if (name == "savepoints" || name == "pt") {
- OUTPUT_DUMP("SavePoints", getSavePoints()->toString().c_str());
- } else if (name == "scene" || name == "sc") {
- OUTPUT_DUMP("Current scene", getScenes()->get(getState()->scene)->toString().c_str());
- } else {
- goto label_error;
- }
-
- } else {
-label_error:
- debugPrintf("Syntax: state <option>\n");
- debugPrintf(" state / st\n");
- debugPrintf(" progress / pr\n");
- debugPrintf(" flags / fl\n");
- debugPrintf(" inventory / inv\n");
- debugPrintf(" objects / obj\n");
- debugPrintf(" savepoints / pt\n");
- debugPrintf(" scene / sc\n");
- }
-
- return true;
-
-#undef OUTPUT_DUMP
-}
-
-/**
- * Command: shows character data
- *
- * @param argc The argument count.
- * @param argv The values.
- *
- * @return true if it was handled, false otherwise
- */
-bool Debugger::cmdEntity(int argc, const char **argv) {
- if (argc == 2) {
- CharacterIndex index = (CharacterIndex)getNumber(argv[1]);
-
- if (index > 39)
- goto label_error;
-
- debugPrintf("Entity %s\n", ENTITY_NAME(index));
- debugPrintf("--------------------------------------------------------------------\n\n");
- debugPrintf("%s", getEntities()->getData(index)->toString().c_str());
-
- // The Player character does not have any callback data
- if (index != kCharacterCath) {
- EntityData *data = getEntities()->get(index)->getParamData();
- for (uint callback = 0; callback < 9; callback++) {
- debugPrintf("Call parameters %d:\n", callback);
- for (byte ix = 0; ix < 4; ix++)
- debugPrintf(" %s", data->getParameters(callback, ix)->toString().c_str());
- }
- }
-
- debugPrintf("\n");
- } else {
-label_error:
- debugPrintf("Syntax: character <index>\n");
- for (int i = 0; i < 40; i += 4)
- debugPrintf(" %s - %d %s - %d %s - %d %s - %d\n", ENTITY_NAME(i), i, ENTITY_NAME(i+1), i+1, ENTITY_NAME(i+2), i+2, ENTITY_NAME(i+3), i+3);
- }
-
- return true;
-}
-
-/**
- * Command: switch to a specific chapter
- *
- * @param argc The argument count.
- * @param argv The values.
- *
- * @return true if it was handled, false otherwise
- */
-bool Debugger::cmdSwitchChapter(int argc, const char **argv) {
- if (argc == 2) {
- int id = getNumber(argv[1]);
-
- if (id <= 1 || id > 6)
- goto error;
-
- // Store command
- if (!hasCommand()) {
- _command = WRAP_METHOD(Debugger, cmdSwitchChapter);
- copyCommand(argc, argv);
-
- return false;
- } else {
- // Sets the current chapter and then call Logic::switchChapter to proceed to the next chapter
- getState()->progress.chapter = (ChapterIndex)(id - 1);
-
- getLogic()->switchChapter();
-
- resetCommand();
- }
- } else {
-error:
- debugPrintf("Syntax: chapter <id> (id=2-6)\n");
- }
-
- return true;
-}
-
-/**
- * Command: clears the screen
- *
- * @param argc The argument count.
- * @param argv The values.
- *
- * @return true if it was handled, false otherwise
- */
-bool Debugger::cmdClear(int argc, const char **) {
- if (argc == 1) {
- clearBg(GraphicsManagerOld::kBackgroundAll);
- askForRedraw();
- redrawScreen();
- } else {
- debugPrintf("Syntax: clear - clear the screen\n");
- }
-
return true;
}
diff --git a/engines/lastexpress/debug.h b/engines/lastexpress/debug.h
index 9242a72d1b6..c978e384282 100644
--- a/engines/lastexpress/debug.h
+++ b/engines/lastexpress/debug.h
@@ -24,10 +24,6 @@
#include "gui/debugger.h"
-#include "lastexpress/data/snd.h"
-
-#include "lastexpress/shared.h"
-
namespace LastExpress {
#ifdef USE_IMGUI
@@ -59,49 +55,10 @@ public:
Debugger(LastExpressEngine *engine);
~Debugger() override;
- bool hasCommand() const;
- void callCommand();
-
private:
LastExpressEngine *_engine;
bool cmdHelp(int argc, const char **argv);
-
- bool cmdListFiles(int argc, const char **argv);
- bool cmdDumpFiles(int argc, const char **argv);
-
- bool cmdShowFrame(int argc, const char **argv);
- bool cmdShowBg(int argc, const char **argv);
- bool cmdPlaySeq(int argc, const char **argv);
- bool cmdPlaySnd(int argc, const char **argv);
- bool cmdPlaySbe(int argc, const char **argv);
- bool cmdPlayNis(int argc, const char **argv);
-
- bool cmdLoadScene(int argc, const char **argv);
- bool cmdFight(int argc, const char **argv);
- bool cmdBeetle(int argc, const char **argv);
-
- bool cmdTimeDelta(int argc, const char **argv);
- bool cmdTime(int argc, const char **argv);
- bool cmdShow(int argc, const char **argv);
- bool cmdEntity(int argc, const char **argv);
-
- bool cmdSwitchChapter(int argc, const char **argv);
- bool cmdClear(int argc, const char **argv);
-
- void resetCommand();
- void copyCommand(int argc, const char **argv);
- int getNumber(const char *arg) const;
-
- bool loadArchive(int index);
- void restoreArchive() const;
-
- Debuglet *_command;
- int _numParams;
- char **_commandParams;
-
- // Special sound stream for playing sounds
- StreamedSound *_soundStream;
};
} // End of namespace LastExpress
diff --git a/engines/lastexpress/drawable.h b/engines/lastexpress/drawable.h
deleted file mode 100644
index c27b639e984..00000000000
--- a/engines/lastexpress/drawable.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* 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/>.
- *
- */
-
-#ifndef LASTEXPRESS_DRAWABLE_H
-#define LASTEXPRESS_DRAWABLE_H
-
-#include "graphics/surface.h"
-
-namespace LastExpress {
-
-class Drawable {
-public:
- virtual ~Drawable() {}
-
- virtual Common::Rect draw(Graphics::Surface *surface) = 0;
-};
-
-} // End of namespace LastExpress
-
-#endif // LASTEXPRESS_DRAWABLE_H
diff --git a/engines/lastexpress/entities/abbot.cpp b/engines/lastexpress/entities/abbot.cpp
deleted file mode 100644
index 4047421ffc6..00000000000
--- a/engines/lastexpress/entities/abbot.cpp
+++ /dev/null
@@ -1,1921 +0,0 @@
-/* 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/entities/abbot.h"
-
-#include "lastexpress/entities/verges.h"
-
-#include "lastexpress/game/action.h"
-#include "lastexpress/game/entities.h"
-#include "lastexpress/game/inventory.h"
-#include "lastexpress/game/logic.h"
-#include "lastexpress/game/object.h"
-#include "lastexpress/game/savepoint.h"
-#include "lastexpress/game/scenes.h"
-#include "lastexpress/game/state.h"
-
-#include "lastexpress/sound/queue.h"
-
-#include "lastexpress/lastexpress.h"
-
-namespace LastExpress {
-
-Abbot::Abbot(LastExpressEngine *engine) : Entity(engine, kCharacterAbbot) {
- ADD_CALLBACK_FUNCTION(Abbot, reset);
- ADD_CALLBACK_FUNCTION_S(Abbot, draw);
- ADD_CALLBACK_FUNCTION_SI(Abbot, enterExitCompartment);
- ADD_CALLBACK_FUNCTION_SI(Abbot, enterExitCompartment2);
- ADD_CALLBACK_FUNCTION(Abbot, callbackActionOnDirection);
- ADD_CALLBACK_FUNCTION_SSI(Abbot, draw2);
- ADD_CALLBACK_FUNCTION_I(Abbot, updateFromTime);
- ADD_CALLBACK_FUNCTION_I(Abbot, updateFromTicks);
- ADD_CALLBACK_FUNCTION_S(Abbot, playSound);
- ADD_CALLBACK_FUNCTION_II(Abbot, savegame);
- ADD_CALLBACK_FUNCTION_II(Abbot, updateEntity);
- ADD_CALLBACK_FUNCTION_SIIS(Abbot, callSavepoint);
- ADD_CALLBACK_FUNCTION_SII(Abbot, updatePosition);
- ADD_CALLBACK_FUNCTION(Abbot, callbackActionRestaurantOrSalon);
- ADD_CALLBACK_FUNCTION(Abbot, chapter1);
- ADD_CALLBACK_FUNCTION(Abbot, chapter2);
- ADD_CALLBACK_FUNCTION(Abbot, chapter3);
- ADD_CALLBACK_FUNCTION(Abbot, inKitchen);
- ADD_CALLBACK_FUNCTION(Abbot, openCompartment);
- ADD_CALLBACK_FUNCTION(Abbot, readPaper);
- ADD_CALLBACK_FUNCTION(Abbot, goToLunch);
- ADD_CALLBACK_FUNCTION(Abbot, haveLunch);
- ADD_CALLBACK_FUNCTION(Abbot, leaveLunch);
- ADD_CALLBACK_FUNCTION(Abbot, closedCompartment);
- ADD_CALLBACK_FUNCTION(Abbot, goSalon1);
- ADD_CALLBACK_FUNCTION(Abbot, inSalon1);
- ADD_CALLBACK_FUNCTION(Abbot, goCompartment);
- ADD_CALLBACK_FUNCTION(Abbot, openCompartment2);
- ADD_CALLBACK_FUNCTION(Abbot, goWander);
- ADD_CALLBACK_FUNCTION(Abbot, goSalon2);
- ADD_CALLBACK_FUNCTION(Abbot, inSalon2);
- ADD_CALLBACK_FUNCTION(Abbot, goCompartment3);
- ADD_CALLBACK_FUNCTION(Abbot, openCompartment3);
- ADD_CALLBACK_FUNCTION(Abbot, goSalon3);
- ADD_CALLBACK_FUNCTION(Abbot, inSalon3);
- ADD_CALLBACK_FUNCTION(Abbot, withAugust);
- ADD_CALLBACK_FUNCTION(Abbot, goCompartment4);
- ADD_CALLBACK_FUNCTION(Abbot, inCompartment4);
- ADD_CALLBACK_FUNCTION(Abbot, chapter4);
- ADD_CALLBACK_FUNCTION_II(Abbot, doWalkSearchingForCath);
- ADD_CALLBACK_FUNCTION(Abbot, chapter4Handler);
- ADD_CALLBACK_FUNCTION(Abbot, leaveDinner);
- ADD_CALLBACK_FUNCTION(Abbot, inCompartment);
- ADD_CALLBACK_FUNCTION(Abbot, function44);
- ADD_CALLBACK_FUNCTION(Abbot, conferring);
- ADD_CALLBACK_FUNCTION(Abbot, goSalon4);
- ADD_CALLBACK_FUNCTION(Abbot, beforeBomb);
- ADD_CALLBACK_FUNCTION(Abbot, afterBomb);
- ADD_CALLBACK_FUNCTION(Abbot, catchCath);
- ADD_CALLBACK_FUNCTION(Abbot, chapter5);
- ADD_CALLBACK_FUNCTION(Abbot, chapter5Handler);
- ADD_CALLBACK_FUNCTION(Abbot, function52);
- ADD_CALLBACK_FUNCTION(Abbot, runningTrain);
-}
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(1, Abbot, reset)
- Entity::reset(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_S(2, Abbot, draw)
- Entity::draw(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_SI(3, Abbot, enterExitCompartment, ObjectIndex)
- Entity::enterExitCompartment(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_SI(4, Abbot, enterExitCompartment2, ObjectIndex)
- Entity::enterExitCompartment(savepoint, kPosition_6470, kPosition_6130, kCarRedSleeping, kObjectCompartmentC, true, true);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(5, Abbot, callbackActionOnDirection)
- Entity::callbackActionOnDirection(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_SSI(6, Abbot, draw2, CharacterIndex)
- Entity::draw2(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_I(7, Abbot, updateFromTime, uint32)
- Entity::updateFromTime(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_I(8, Abbot, updateFromTicks, uint32)
- Entity::updateFromTicks(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_S(9, Abbot, playSound)
- Entity::playSound(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_II(10, Abbot, savegame, SavegameType, uint32)
- Entity::savegame(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_II(11, Abbot, updateEntity, CarIndex, EntityPosition)
- if (savepoint.action == kCharacterActionExcuseMeCath) {
- if (getEntities()->isPlayerPosition(kCarGreenSleeping, 18) || getEntities()->isPlayerPosition(kCarRedSleeping, 18)) {
- getSound()->excuseMe(kCharacterAbbot);
- } else {
- if (HELPERgetEvent(kEventAbbotIntroduction))
- getSound()->playSound(kCharacterCath, "CAT1013");
- else
- getSound()->excuseMeCath();
- }
- return;
- }
-
- Entity::updateEntity(savepoint, true);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_SIIS(12, Abbot, callSavepoint, CharacterIndex, CharacterActions)
- Entity::callSavepoint(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_SII(13, Abbot, updatePosition, CarIndex, PositionOld)
- Entity::updatePosition(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(14, Abbot, callbackActionRestaurantOrSalon)
- Entity::callbackActionRestaurantOrSalon(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(15, Abbot, chapter1)
- if (savepoint.action == kCharacterActionDefault)
- getSavePoints()->addData(kCharacterAbbot, kCharacterAction203073664, 0);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(16, Abbot, chapter2)
- if (savepoint.action == kCharacterActionDefault)
- getEntities()->clearSequences(kCharacterAbbot);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(17, Abbot, chapter3)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- setup_inKitchen();
- break;
-
- case kCharacterActionDefault:
- getEntities()->clearSequences(kCharacterAbbot);
-
- getData()->entityPosition = kPosition_5900;
- getData()->location = kLocationInsideCompartment;
- getData()->car = kCarRestaurant;
- getData()->inventoryItem = kItemNone;
- getData()->clothes = kClothesDefault;
-
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(18, Abbot, inKitchen)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getData()->entityPosition = kPosition_5800;
- getData()->location = kLocationOutsideCompartment;
-
- setCallback(2);
- setup_draw("804DD");
- break;
-
- case 2:
- getSavePoints()->push(kCharacterAbbot, kCharacterCook, kCharacterAction236976550);
- getEntities()->drawSequenceRight(kCharacterAbbot, "804DS");
-
- if (getEntities()->isInRestaurant(kCharacterCath))
- getEntities()->updateFrame(kCharacterAbbot);
-
- setCallback(3);
- setup_callbackActionOnDirection();
- break;
-
- case 3:
- setCallback(4);
- setup_updateEntity(kCarRedSleeping, kPosition_6470);
- break;
-
- case 4:
- getObjects()->update(kObjectCompartmentC, kCharacterCath, kObjectLocation1, kCursorKeepValue, kCursorKeepValue);
-
- setCallback(5);
- setup_enterExitCompartment("617AC", kObjectCompartmentC);
- break;
-
- case 5:
- getObjects()->update(kObjectCompartmentC, kCharacterCath, kObjectLocation2, kCursorKeepValue, kCursorKeepValue);
- getData()->entityPosition = kPosition_6470;
- getData()->location = kLocationInsideCompartment;
-
- setup_openCompartment();
- break;
- }
- break;
-
- case kCharacterAction192054567:
- setCallback(1);
- setup_callbackActionRestaurantOrSalon();
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(19, Abbot, openCompartment)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (getState()->time > kTime1953000) {
- if (!params->param1) {
- params->param1 = 1;
- setCallback(3);
- setup_playSound("MrB3010");
- }
- }
- break;
-
- case kCharacterActionDefault:
- getEntities()->drawSequenceLeft(kCharacterAbbot, "508A");
- getSavePoints()->push(kCharacterAbbot, kCharacterMonsieur, kCharacterAction122358304);
-
- setCallback(1);
- setup_playSound("Abb3010");
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- setCallback(2);
- setup_updateFromTime(900);
- break;
-
- case 2:
- getEntities()->drawSequenceLeft(kCharacterAbbot, "508B");
- break;
-
- case 3:
- getSavePoints()->push(kCharacterAbbot, kCharacterMonsieur, kCharacterAction122288808);
- setup_readPaper();
- break;
- }
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(20, Abbot, readPaper)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (getState()->time > kTime1966500 && getEntities()->isInRestaurant(kCharacterMonsieur))
- setup_goToLunch();
- break;
-
- case kCharacterActionDefault:
- getEntities()->drawSequenceLeft(kCharacterAbbot, "509A");
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(21, Abbot, goToLunch)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- setCallback(1);
- setup_draw("509B");
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getObjects()->update(kObjectCompartmentC, kCharacterCath, kObjectLocationNone, kCursorHandKnock, kCursorHand);
- getObjects()->update(kObject50, kCharacterCath, kObjectLocationNone, kCursorHandKnock, kCursorHand);
-
- setCallback(2);
- setup_enterExitCompartment("617Mc", kObjectCompartmentC);
- break;
-
- case 2:
- getData()->location = kLocationOutsideCompartment;
-
- setCallback(3);
- setup_updateEntity(kCarRestaurant, kPosition_850);
- break;
-
- case 3:
- setCallback(4);
- setup_callbackActionRestaurantOrSalon();
- break;
-
- case 4:
- getData()->entityPosition = kPosition_1540;
- getData()->location = kLocationOutsideCompartment;
-
- setCallback(5);
- setup_draw("804US");
- break;
-
- case 5:
- getEntities()->drawSequenceRight(kCharacterAbbot, "029J");
- if (getEntities()->isInSalon(kCharacterCath))
- getEntities()->updateFrame(kCharacterAbbot);
-
- setCallback(6);
- setup_callbackActionOnDirection();
- break;
-
- case 6:
- getEntities()->drawSequenceLeft(kCharacterAbbot, "029H");
- getSavePoints()->push(kCharacterAbbot, kCharacterHeadWait, kCharacterAction207769280);
- break;
-
- case 7:
- setup_haveLunch();
- break;
- }
- break;
-
- case kCharacterAction122288808:
- getSavePoints()->push(kCharacterAbbot, kCharacterTableE, kCharacterAction136455232);
- getData()->location = kLocationInsideCompartment;
-
- setCallback(7);
- setup_draw("029B");
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(22, Abbot, haveLunch)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- Entity::timeCheckSavepoint(kTime1971000, params->param1, kCharacterAbbot, kCharacterWaiter1, kCharacterAction218586752);
-
- if (getState()->time > kTime1989000 && getEntities()->isSomebodyInsideRestaurantOrSalon()) {
- getData()->inventoryItem = kItemNone;
- setup_leaveLunch();
- }
- break;
-
- case kCharacterAction1:
- getData()->inventoryItem = kItemNone;
-
- setCallback(1);
- setup_savegame(kSavegameTypeEvent, kEventAbbotIntroduction);
- break;
-
- case kCharacterActionDefault:
- getEntities()->drawSequenceLeft(kCharacterAbbot, "029E");
- if (!HELPERgetEvent(kEventAbbotIntroduction))
- getData()->inventoryItem = (InventoryItem)kCursorProcess;
- break;
-
- case kCharacterActionCallback:
- if (getCallback() != 1)
- break;
-
- getActionOld()->playAnimation(kEventAbbotIntroduction);
- getSound()->playSound(kCharacterCath, "LIB036");
- getScenes()->loadSceneFromPosition(kCarRestaurant, 61);
- break;
-
- case kCharacterAction122288808:
- getEntities()->drawSequenceLeft(kCharacterAbbot, "029E");
- break;
-
- case kCharacterAction122358304:
- getEntities()->drawSequenceLeft(kCharacterAbbot, "BLANK");
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(23, Abbot, leaveLunch)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- getData()->location = kLocationOutsideCompartment;
- getEntities()->updatePositionEnter(kCharacterAbbot, kCarRestaurant, 67);
-
- setCallback(1);
- setup_callSavepoint("029F", kCharacterTableE, kCharacterActionDrawTablesWithChairs, "029G");
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getEntities()->updatePositionExit(kCharacterAbbot, kCarRestaurant, 67);
- getSavePoints()->push(kCharacterAbbot, kCharacterWaiter1, kCharacterAction270068760);
- getSavePoints()->push(kCharacterAbbot, kCharacterAnna, kCharacterAction238936000);
- getEntities()->drawSequenceRight(kCharacterAbbot, "804DS");
-
- if (getEntities()->isInRestaurant(kCharacterCath))
- getEntities()->updateFrame(kCharacterAbbot);
-
- setCallback(2);
- setup_callbackActionOnDirection();
- break;
-
- case 2:
- setCallback(3);
- setup_updateEntity(kCarRedSleeping, kPosition_6470);
- break;
-
- case 3:
- setCallback(4);
- setup_enterExitCompartment2("617Cc", kObjectCompartmentC);
- break;
-
- case 4:
- getData()->location = kLocationInsideCompartment;
-
- setup_closedCompartment();
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(24, Abbot, closedCompartment)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (!Entity::updateParameter(params->param1, getState()->time, 900))
- break;
-
- setup_goSalon1();
- break;
-
- case kCharacterActionKnock:
- case kCharacterActionOpenDoor:
- getObjects()->update(kObjectCompartmentC, kCharacterAbbot, kObjectLocation1, kCursorNormal, kCursorNormal);
- getObjects()->update(kObject50, kCharacterAbbot, kObjectLocation1, kCursorNormal, kCursorNormal);
-
- if (savepoint.action == kCharacterActionKnock) {
- setCallback(1);
- setup_playSound("LIB012");
- } else {
- setCallback(2);
- setup_playSound("LIB013");
- }
- break;
-
- case kCharacterActionDefault:
- getEntities()->clearSequences(kCharacterAbbot);
- getObjects()->update(kObjectCompartmentC, kCharacterAbbot, kObjectLocationNone, kCursorHandKnock, kCursorHand);
- getObjects()->update(kObject50, kCharacterAbbot, kObjectLocationNone, kCursorHandKnock, kCursorHand);
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- case 2:
- setCallback(3);
- setup_playSound("Abb3001");
- break;
-
- case 3:
- getObjects()->update(kObjectCompartmentC, kCharacterAbbot, kObjectLocation1, kCursorHandKnock, kCursorHand);
- getObjects()->update(kObject50, kCharacterAbbot, kObjectLocation1, kCursorHandKnock, kCursorHand);
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(25, Abbot, goSalon1)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- setCallback(1);
- setup_enterExitCompartment("617Dc", kObjectCompartmentC);
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getData()->location = kLocationOutsideCompartment;
- getObjects()->update(kObjectCompartmentC, kCharacterCath, kObjectLocationNone, kCursorHandKnock, kCursorHand);
- getObjects()->update(kObject50, kCharacterCath, kObjectLocationNone, kCursorHandKnock, kCursorHand);
-
- setCallback(2);
- setup_updateEntity(kCarRestaurant, kPosition_850);
- break;
-
- case 2:
- setCallback(3);
- setup_callbackActionRestaurantOrSalon();
- break;
-
- case 3:
- getData()->entityPosition = kPosition_1540;
- getData()->location = kLocationOutsideCompartment;
-
- setCallback(4);
- setup_updatePosition("115A", kCarRestaurant, 56);
- break;
-
- case 4:
- getData()->location = kLocationInsideCompartment;
- getScenes()->loadSceneFromItemPosition(kItem3);
-
- setup_inSalon1();
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(26, Abbot, inSalon1)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (!params->param1 || !Entity::updateParameterCheck(params->param2, getState()->time, 4500))
- break;
-
- if (getEntities()->isSomebodyInsideRestaurantOrSalon())
- setup_goCompartment();
- break;
-
- case kCharacterActionDefault:
- getSavePoints()->push(kCharacterAbbot, kCharacterKronos, kCharacterAction157159392);
- getEntities()->drawSequenceLeft(kCharacterAbbot, "115B");
- break;
-
- case kCharacterAction101169422:
- params->param1 = 1;
- break;
-
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(27, Abbot, goCompartment)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- setCallback(1);
- setup_callbackActionRestaurantOrSalon();
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getData()->location = kLocationOutsideCompartment;
-
- setCallback(2);
- setup_updatePosition("115C", kCarRestaurant, 56);
- break;
-
- case 2:
- getInventory()->setLocationAndProcess(kItem3, kObjectLocation1);
-
- setCallback(3);
- setup_updateEntity(kCarRedSleeping, kPosition_6470);
- break;
-
- case 3:
- getObjects()->update(kObjectCompartmentC, kCharacterCath, kObjectLocation1, kCursorKeepValue, kCursorKeepValue);
-
- setCallback(4);
- setup_enterExitCompartment("617Ac", kObjectCompartmentC);
- break;
-
- case 4:
- getObjects()->update(kObjectCompartmentC, kCharacterCath, kObjectLocation2, kCursorKeepValue, kCursorKeepValue);
- getData()->entityPosition = kPosition_6470;
- getData()->location = kLocationInsideCompartment;
-
- setup_openCompartment2();
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(28, Abbot, openCompartment2)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- Entity::timeCheckCallback(kTime2052000, params->param1, 2, WRAP_SETUP_FUNCTION(Abbot, setup_goWander));
- break;
-
- case kCharacterActionDefault:
- getSavePoints()->push(kCharacterAbbot, kCharacterMonsieur, kCharacterAction122358304);
- getEntities()->drawSequenceLeft(kCharacterAbbot, "508A");
-
- setCallback(1);
- setup_playSound("Abb3013");
- break;
-
- case kCharacterActionCallback:
- if (getCallback() == 1)
- getEntities()->drawSequenceLeft(kCharacterAbbot, "508B");
- break;
-
- case kCharacterAction222609266:
- setup_goSalon2();
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(29, Abbot, goWander)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- getSavePoints()->push(kCharacterAbbot, kCharacterMonsieur, kCharacterAction122288808);
- getObjects()->update(kObjectCompartmentC, kCharacterCath, kObjectLocation1, kCursorKeepValue, kCursorKeepValue);
-
- setCallback(1);
- setup_enterExitCompartment("617Bc", kObjectCompartmentC);
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getObjects()->update(kObjectCompartmentC, kCharacterCath, kObjectLocation2, kCursorKeepValue, kCursorKeepValue);
-
- setCallback(2);
- setup_updateEntity(kCarRedSleeping, kPosition_9460);
- break;
-
- case 2:
- setCallback(3);
- setup_updateFromTicks(450);
- break;
-
- case 3:
- setCallback(4);
- setup_updateEntity(kCarGreenSleeping, kPosition_540);
- break;
-
- case 4:
- // compare with callback 2.
- // This is taken from the original game as is,
- // but do we really want real-time 30s in case 2 but simulated-time 15s (aka real-time 5s) here?
- setCallback(5);
- setup_updateFromTime(225);
- break;
-
- case 5:
- setCallback(6);
- setup_updateEntity(kCarRedSleeping, kPosition_6470);
- break;
-
- case 6:
- getObjects()->update(kObjectCompartmentC, kCharacterCath, kObjectLocation1, kCursorKeepValue, kCursorKeepValue);
-
- setCallback(7);
- setup_enterExitCompartment("617Ac", kObjectCompartmentC);
- break;
-
- case 7:
- getObjects()->update(kObjectCompartmentC, kCharacterCath, kObjectLocation2, kCursorKeepValue, kCursorKeepValue);
- getSavePoints()->push(kCharacterAbbot, kCharacterMonsieur, kCharacterAction122358304);
- getEntities()->drawSequenceLeft(kCharacterAbbot, "508B");
-
- callbackAction();
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(30, Abbot, goSalon2)
-switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- setCallback(1);
- setup_playSound("Abb3030");
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getSavePoints()->push(kCharacterAbbot, kCharacterMonsieur, kCharacterAction122288808);
- getObjects()->update(kObjectCompartmentC, kCharacterCath, kObjectLocation1, kCursorKeepValue, kCursorKeepValue);
-
- setCallback(2);
- setup_enterExitCompartment("617Bc", kObjectCompartmentC);
- break;
-
- case 2:
- getObjects()->update(kObjectCompartmentC, kCharacterCath, kObjectLocation2, kCursorKeepValue, kCursorKeepValue);
- getData()->location = kLocationOutsideCompartment;
-
- setCallback(3);
- setup_updateEntity(kCarRestaurant, kPosition_850);
- break;
-
- case 3:
- setCallback(4);
- setup_callbackActionRestaurantOrSalon();
- break;
-
- case 4:
- getData()->entityPosition = kPosition_1540;
- getData()->location = kLocationOutsideCompartment;
-
- setCallback(5);
- setup_updatePosition("115A", kCarRestaurant, 56);
- break;
-
- case 5:
- getScenes()->loadSceneFromItemPosition(kItem3);
- getData()->location = kLocationInsideCompartment;
-
- setup_inSalon2();
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(31, Abbot, inSalon2)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (params->param4 != kTimeInvalid && params->param2 < getState()->time) {
- if (params->param3 < getState()->time) {
- params->param4 = kTimeInvalid;
-
- setCallback(1);
- setup_callbackActionRestaurantOrSalon();
- break;
- } else {
- if (!getEntities()->isInSalon(kCharacterCath) || !params->param4)
- params->param4 = (uint)getState()->time + 450;
-
- if (params->param4 < getState()->time) {
- params->param4 = kTimeInvalid;
-
- setCallback(1);
- setup_callbackActionRestaurantOrSalon();
- break;
- }
- }
- }
-
- if (!params->param1)
- break;
-
- if (!Entity::updateParameter(params->param5, getState()->time, 450))
- break;
-
- setCallback(6);
- setup_callbackActionRestaurantOrSalon();
- break;
-
- case kCharacterActionDefault:
- params->param2 = (uint)getState()->time + 4500;
- params->param3 = (uint)getState()->time + 18000;
-
- getEntities()->drawSequenceLeft(kCharacterAbbot, "115B");
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getData()->location = kLocationOutsideCompartment;
-
- setCallback(2);
- setup_updatePosition("115E", kCarRestaurant, 56);
- break;
-
- case 2:
- getInventory()->setLocationAndProcess(kItem3, kObjectLocation1);
- getSavePoints()->push(kCharacterAbbot, kCharacterAlexei, kCharacterAction122358304);
- getSound()->playSound(kCharacterAbbot, "Abb3020");
-
- setCallback(3);
- setup_updatePosition("125A", kCarRestaurant, 52);
- break;
-
- case 3:
- getData()->location = kLocationInsideCompartment;
- getEntities()->drawSequenceLeft(kCharacterAbbot, "125B");
-
- setCallback(4);
- setup_playSound("Abb3021");
- break;
-
- case 4:
- getSound()->playSound(kCharacterAbbot, "Abb3023");
- getEntities()->updatePositionEnter(kCharacterAbbot, kCarRestaurant, 52);
-
- setCallback(5);
- setup_draw2("125C1", "125C2", kCharacterAlexei);
- break;
-
- case 5:
- getEntities()->updatePositionExit(kCharacterAbbot, kCarRestaurant, 52);
- getEntities()->drawSequenceLeft(kCharacterAbbot, "125D");
- getSavePoints()->push(kCharacterAbbot, kCharacterAlexei, kCharacterAction122288808);
- params->param1 = 1;
-
- if (!Entity::updateParameter(params->param5, getState()->time, 450))
- break;
-
- setCallback(6);
- setup_callbackActionRestaurantOrSalon();
- break;
-
- case 6:
- getData()->location = kLocationOutsideCompartment;
-
- setCallback(7);
- setup_updatePosition("125E", kCarRestaurant, 52);
- break;
-
- case 7:
- setup_goCompartment3();
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(32, Abbot, goCompartment3)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- setCallback(1);
- setup_updateEntity(kCarRedSleeping, kPosition_6470);
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getObjects()->update(kObjectCompartmentC, kCharacterCath, kObjectLocation1, kCursorKeepValue, kCursorKeepValue);
-
- setCallback(2);
- setup_enterExitCompartment("617Ac", kObjectCompartmentC);
- break;
-
- case 2:
- getObjects()->update(kObjectCompartmentC, kCharacterCath, kObjectLocation2, kCursorKeepValue, kCursorKeepValue);
- getData()->entityPosition = kPosition_6470;
- getData()->location = kLocationInsideCompartment;
- getSavePoints()->push(kCharacterAbbot, kCharacterMonsieur, kCharacterAction122358304);
-
- setup_openCompartment3();
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(33, Abbot, openCompartment3)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (params->param1 != kTimeInvalid && getState()->time > kTime2115000) {
- if (getState()->time <= kTime2124000) {
- if (!getEntities()->isDistanceBetweenEntities(kCharacterAbbot, kCharacterCath, 2000) || !params->param1)
- params->param1 = (uint)getState()->time;
-
- if (params->param1 >= getState()->time)
- break;
- }
-
- params->param1 = kTimeInvalid;
-
- setCallback(1);
- setup_playSound("Abb3014");
- }
- break;
-
- case kCharacterActionDefault:
- getEntities()->drawSequenceLeft(kCharacterAbbot, "508A");
- break;
-
- case kCharacterActionCallback:
- if (getCallback() == 1)
- getEntities()->drawSequenceLeft(kCharacterAbbot, "508B");
- break;
-
- case kCharacterAction123712592:
- setup_goSalon3();
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(34, Abbot, goSalon3)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- setCallback(1);
- setup_playSound("Abb3031");
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getSavePoints()->push(kCharacterAbbot, kCharacterMonsieur, kCharacterAction122288808);
- getObjects()->update(kObjectCompartmentC, kCharacterCath, kObjectLocation1, kCursorKeepValue, kCursorKeepValue);
-
- setCallback(2);
- setup_enterExitCompartment("617Bc", kObjectCompartmentC);
- break;
-
- case 2:
- getObjects()->update(kObjectCompartmentC, kCharacterCath, kObjectLocation2, kCursorKeepValue, kCursorKeepValue);
- getData()->location = kLocationOutsideCompartment;
-
- setCallback(3);
- setup_updateEntity(kCarRestaurant, kPosition_850);
- break;
-
- case 3:
- setCallback(4);
- setup_callbackActionRestaurantOrSalon();
- break;
-
- case 4:
- getData()->entityPosition = kPosition_1540;
- getData()->location = kLocationOutsideCompartment;
-
- setCallback(5);
- setup_updatePosition("115A", kCarRestaurant, 56);
- break;
-
- case 5:
- getScenes()->loadSceneFromItemPosition(kItem3);
-
- getData()->location = kLocationInsideCompartment;
- setup_inSalon3();
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(35, Abbot, inSalon3)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (params->param2 == kTimeInvalid)
- break;
-
- if (params->param1 >= getState()->time) {
- if (!getEntities()->isInSalon(kCharacterCath) || !params->param2)
- params->param2 = (uint)getState()->time + 450;
-
- if (params->param2 >= getState()->time)
- break;
- }
-
- params->param2 = kTimeInvalid;
-
- getSavePoints()->push(kCharacterAbbot, kCharacterAugust, kCharacterAction136196244);
-
- setCallback(1);
- setup_updateFromTime(0);
- break;
-
- case kCharacterActionDefault:
- getEntities()->drawSequenceLeft(kCharacterAbbot, "115B");
- params->param1 = (uint)getState()->time + 9000;
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- setCallback(2);
- setup_callbackActionRestaurantOrSalon();
- break;
-
- case 2:
- getData()->location = kLocationOutsideCompartment;
- getSound()->playSound(kCharacterAbbot, "Abb3040", kSoundVolumeEntityDefault, 45);
- getEntities()->updatePositionEnter(kCharacterAbbot, kCarRestaurant, 57);
-
- setCallback(3);
- setup_callSavepoint("121A", kCharacterAugust, kCharacterAction122358304, "BOGUS");
- break;
-
- case 3:
- getEntities()->updatePositionExit(kCharacterAbbot, kCarRestaurant, 57);
- getInventory()->setLocationAndProcess(kItem3, kObjectLocation1);
- getData()->location = kLocationInsideCompartment;
-
- setup_withAugust();
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(36, Abbot, withAugust)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- switch (params->param2) {
- default:
- break;
-
- case 1:
- if (params->param3 == kTimeInvalid)
- break;
-
- if (params->param1 >= getState()->time) {
-
- if (!getEntities()->isInSalon(kCharacterCath) || !params->param3)
- params->param3 = (uint)getState()->time + 675;
-
- if (params->param3 >= getState()->time)
- break;
- }
-
- params->param3 = kTimeInvalid;
-
- getSound()->playSound(kCharacterAbbot, "Abb3041");
- break;
-
- case 2:
- if (!Entity::updateParameter(params->param4, getState()->time, 900))
- break;
-
- getSound()->playSound(kCharacterAbbot, "Abb3042");
- break;
-
- case 3:
- getSound()->playSound(kCharacterAbbot, "Abb3043");
- getEntities()->updatePositionEnter(kCharacterAbbot, kCarRestaurant, 57);
-
- setCallback(1);
- setup_callSavepoint("121D", kCharacterAugust, kCharacterAction122288808, "BOGUS");
- break;
- }
- break;
-
- case kCharacterActionEndSound:
- ++params->param2;
- break;
-
- case kCharacterActionDefault:
- params->param1 = (uint)getState()->time + 4500;
- getEntities()->drawSequenceLeft(kCharacterAbbot, "121B");
- break;
-
- case kCharacterActionDrawScene:
- if (getEntities()->isPlayerPosition(kCarRestaurant, 57))
- getScenes()->loadSceneFromPosition(kCarRestaurant, 50);
- break;
-
- case kCharacterActionCallback:
- if (getCallback() == 1) {
- getEntities()->updatePositionExit(kCharacterAbbot, kCarRestaurant, 57);
- setup_goCompartment4();
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(37, Abbot, goCompartment4)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- setCallback(1);
- setup_updateEntity(kCarRedSleeping, kPosition_6470);
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getObjects()->update(kObjectCompartmentC, kCharacterCath, kObjectLocation1, kCursorKeepValue, kCursorKeepValue);
-
- setCallback(2);
- setup_enterExitCompartment("617Ac", kObjectCompartmentC);
- break;
-
- case 2:
- getObjects()->update(kObjectCompartmentC, kCharacterCath, kObjectLocation2, kCursorKeepValue, kCursorKeepValue);
- getData()->entityPosition = kPosition_6470;
- getData()->location = kLocationInsideCompartment;
- getSavePoints()->push(kCharacterAbbot, kCharacterMonsieur, kCharacterAction122358304);
-
- setup_inCompartment4();
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(38, Abbot, inCompartment4)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- getEntities()->drawSequenceLeft(kCharacterAbbot, "508A");
-
- setCallback(1);
- setup_playSound("Abb3014A");
- break;
-
- case kCharacterActionCallback:
- if (getCallback() == 1)
- getEntities()->drawSequenceLeft(kCharacterAbbot, "508B");
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(39, Abbot, chapter4)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- setup_chapter4Handler();
- break;
-
- case kCharacterActionDefault:
- getEntities()->clearSequences(kCharacterAbbot);
-
- getData()->car = kCarRestaurant;
- getData()->inventoryItem = kItemNone;
-
- ENTITY_PARAM(0, 1) = 0;
-
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_II(40, Abbot, doWalkSearchingForCath, CarIndex, EntityPosition)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (getEntities()->updateEntity(kCharacterAbbot, (CarIndex)params->param1, (EntityPosition)params->param2)) {
- callbackAction();
- } else if (!HELPERgetEvent(kEventAbbotInvitationDrink)
- && getEntities()->isDistanceBetweenEntities(kCharacterAbbot, kCharacterCath, 1000)
- && !getEntities()->isInsideCompartments(kCharacterCath)
- && !getEntities()->checkFields10(kCharacterCath)) {
-
- if (getData()->car == kCarGreenSleeping || getData()->car == kCarRedSleeping) {
- setCallback(1);
- setup_savegame(kSavegameTypeEvent, kEventAbbotInvitationDrink);
- }
- }
- break;
-
- case kCharacterActionDefault:
- if (getEntities()->updateEntity(kCharacterAbbot, (CarIndex)params->param1, (EntityPosition)params->param2))
- callbackAction();
- break;
-
- case kCharacterActionCallback:
- if (getCallback() == 1) {
- getActionOld()->playAnimation(kEventAbbotInvitationDrink);
- getEntities()->loadSceneFromEntityPosition(getData()->car, (EntityPosition)(getData()->entityPosition + (750 * (getData()->direction == kDirectionUp ? -1 : 1))), getData()->direction == kDirectionUp);
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(41, Abbot, chapter4Handler)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- Entity::timeCheckSavepoint(kTime2358000, params->param1, kCharacterAbbot, kCharacterWaiter1, kCharacterAction218128129);
-
- if (getState()->time > kTime2389500 && getEntities()->isSomebodyInsideRestaurantOrSalon())
- setup_leaveDinner();
-
- break;
-
- case kCharacterActionDefault:
- getSavePoints()->push(kCharacterAbbot, kCharacterTableE, kCharacterAction136455232);
- getEntities()->drawSequenceLeft(kCharacterAbbot, "029E");
- getData()->location = kLocationInsideCompartment;
- break;
-
- case kCharacterAction122288808:
- getEntities()->drawSequenceLeft(kCharacterAbbot, "029E");
- break;
-
- case kCharacterAction122358304:
- getEntities()->drawSequenceLeft(kCharacterAbbot, "BLANK");
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(42, Abbot, leaveDinner)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- getData()->location = kLocationOutsideCompartment;
- getEntities()->updatePositionEnter(kCharacterAbbot, kCarRestaurant, 67);
-
- setCallback(1);
- setup_callSavepoint("029F", kCharacterTableE, kCharacterActionDrawTablesWithChairs, "029G");
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getEntities()->updatePositionExit(kCharacterAbbot, kCarRestaurant, 67);
- getSavePoints()->push(kCharacterAbbot, kCharacterWaiter1, kCharacterAction270068760);
- getEntities()->drawSequenceRight(kCharacterAbbot, "804DS");
-
- if (getEntities()->isInRestaurant(kCharacterCath))
- getEntities()->updateFrame(kCharacterAbbot);
-
- setCallback(2);
- setup_callbackActionOnDirection();
- break;
-
- case 2:
- setCallback(3);
- setup_updateEntity(kCarRedSleeping, kPosition_6470);
- break;
-
- case 3:
- setCallback(4);
- setup_enterExitCompartment2("617Cc", kObjectCompartmentC);
- break;
-
- case 4:
- getData()->location = kLocationInsideCompartment;
- getEntities()->clearSequences(kCharacterAbbot);
-
- setup_inCompartment();
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(43, Abbot, inCompartment)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (params->param1 && params->param4 != kTimeInvalid) {
- if (getState()->time > kTime2452500) {
- params->param4 = kTimeInvalid;
-
- setCallback(1);
- setup_playSound("Abb4002");
- break;
- } else {
- if (!getEntities()->isDistanceBetweenEntities(kCharacterAbbot, kCharacterCath, 1000) || getSoundQueue()->isBuffered(kCharacterMonsieur) || !params->param4)
- params->param4 = (uint)getState()->time;
-
- if (params->param4 < getState()->time) {
- params->param4 = kTimeInvalid;
-
- setCallback(1);
- setup_playSound("Abb4002");
- break;
- }
- }
- }
-
-label_callback_1:
- if (Entity::timeCheck(kTime2466000, params->param5, WRAP_SETUP_FUNCTION(Abbot, setup_function44)))
- break;
-
- if (params->param3) {
- if (!Entity::updateParameter(params->param6, getState()->timeTicks, 75))
- break;
-
- params->param2 = 1;
- params->param3 = 0;
-
- getObjects()->update(kObjectCompartmentC, kCharacterAbbot, kObjectLocation1, kCursorNormal, kCursorNormal);
- getObjects()->update(kObject50, kCharacterAbbot, kObjectLocation1, kCursorNormal, kCursorNormal);
- }
-
- params->param6 = 0;
- break;
-
- case kCharacterActionKnock:
- case kCharacterActionOpenDoor:
- getObjects()->update(kObjectCompartmentC, kCharacterAbbot, kObjectLocation1, kCursorNormal, kCursorNormal);
- getObjects()->update(kObject50, kCharacterAbbot, kObjectLocation1, kCursorNormal, kCursorNormal);
-
- if (params->param3) {
- setCallback(savepoint.param.intValue == 50 ? 5 : 6);
- setup_playSound(savepoint.param.intValue == 50 ? getSound()->justAMinuteCath() : getSound()->wrongDoorCath());
- } else {
- setCallback(savepoint.action == kCharacterActionKnock ? 2 : 3);
- setup_playSound(savepoint.action == kCharacterActionKnock ? "LIB012" : "LIB013");
- }
- break;
-
- case kCharacterActionDefault:
- getObjects()->update(kObjectCompartmentC, kCharacterAbbot, kObjectLocation1, kCursorHandKnock, kCursorHand);
- getObjects()->update(kObject50, kCharacterAbbot, kObjectLocation1, kCursorHandKnock, kCursorHand);
- break;
-
- case kCharacterActionDrawScene:
- if (params->param2 || params->param3) {
- getObjects()->update(kObjectCompartmentC, kCharacterAbbot, kObjectLocation1, kCursorHandKnock, kCursorHand);
- getObjects()->update(kObject50, kCharacterAbbot, kObjectLocation1, kCursorHandKnock, kCursorHand);
-
- params->param2 = 0;
- params->param3 = 0;
- }
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- goto label_callback_1;
-
- case 2:
- case 3:
- setCallback(4);
- setup_playSound("Abb3001");
- break;
-
- case 4:
- getObjects()->update(kObjectCompartmentC, kCharacterAbbot, kObjectLocation1, kCursorTalk, kCursorNormal);
- getObjects()->update(kObject50, kCharacterAbbot, kObjectLocation1, kCursorTalk, kCursorNormal);
-
- params->param3 = 1;
- break;
-
- case 5:
- case 6:
- params->param2 = 1;
- params->param3 = 0;
- break;
- }
- break;
-
- case kCharacterAction101687594:
- params->param1 = 1;
- break;
-
- case kCharacterAction159003408:
- params->param1 = 0;
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(44, Abbot, function44)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- getData()->entityPosition = kPosition_6470;
- getData()->location = kLocationInsideCompartment;
- getData()->car = kCarRedSleeping;
-
- getEntities()->clearSequences(kCharacterAbbot);
-
- getObjects()->update(kObjectCompartmentC, kCharacterCath, kObjectLocation1, kCursorHandKnock, kCursorHand);
- getObjects()->update(kObject50, kCharacterCath, kObjectLocation1, kCursorHandKnock, kCursorHand);
- break;
-
- case kCharacterAction104060776:
- setup_conferring();
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(45, Abbot, conferring)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- getData()->entityPosition = kPosition_6471;
- getData()->car = kCarRedSleeping;
- getData()->location = kLocationOutsideCompartment;
-
- RESET_ENTITY_STATE(kCharacterTrainM, Verges, setup_resetState);
-
- getEntities()->drawSequenceLeft(kCharacterAbbot, "617Ec");
- getEntities()->enterCompartment(kCharacterAbbot, kObjectCompartmentC, true);
-
- setCallback(1);
- setup_playSound("Abb4010");
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- setCallback(2);
- setup_enterExitCompartment("617Kc", kObjectCompartmentC);
- break;
-
- case 2:
- getEntities()->exitCompartment(kCharacterAbbot, kObjectCompartmentC, true);
- getSavePoints()->push(kCharacterAbbot, kCharacterTrainM, kCharacterAction125233040);
-
- setup_goSalon4();
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(46, Abbot, goSalon4)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- getData()->entityPosition = kPosition_6471;
-
- setCallback(1);
- setup_doWalkSearchingForCath(kCarRestaurant, kPosition_850);
- break;
-
- case kCharacterActionCallback:
- if (getCallback() == 1)
- setup_beforeBomb();
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(47, Abbot, beforeBomb)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterAction1:
- setCallback(3);
- setup_savegame(kSavegameTypeEvent, kEventAbbotDrinkGiveDetonator);
- break;
-
- case kCharacterActionDefault:
- setCallback(1);
- setup_callbackActionRestaurantOrSalon();
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getData()->entityPosition = kPosition_1540;
- getData()->location = kLocationOutsideCompartment;
-
- setCallback(2);
- setup_draw("126A");
- break;
-
- case 2:
- getData()->location = kLocationInsideCompartment;
- getEntities()->drawSequenceLeft(kCharacterAbbot, "126B");
- getData()->inventoryItem = kItemBomb;
- break;
-
- case 3:
- getActionOld()->playAnimation(kEventAbbotDrinkGiveDetonator);
- getLogic()->gameOver(kSavegameTypeIndex, 1, kSceneNone, true);
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(48, Abbot, afterBomb)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (ENTITY_PARAM(0, 1))
- getData()->inventoryItem = kItemInvalid;
-
- if (Entity::updateParameter(params->param1, getState()->time, 1800)) {
- getData()->inventoryItem = kItemNone;
-
- setCallback(4);
- setup_updatePosition("126C", kCarRestaurant, 52);
- break;
- }
-
- Entity::timeCheckCallbackInventory(kTime2533500, params->param2, 5, WRAP_SETUP_FUNCTION(Abbot, setup_callbackActionRestaurantOrSalon));
- break;
-
- case kCharacterAction1:
- getData()->inventoryItem = kItemNone;
-
- setCallback(9);
- setup_savegame(kSavegameTypeEvent, kEventAbbotDrinkDefuse);
- break;
-
- case kCharacterActionDefault:
- getData()->entityPosition = kPosition_850;
- getData()->location = kLocationOutsideCompartment;
- getData()->car = kCarRedSleeping;
- getData()->inventoryItem = kItemNone;
-
- getSavePoints()->push(kCharacterAbbot, kCharacterTrainM, kCharacterAction125233040);
-
- setCallback(1);
- setup_updateEntity(kCarRestaurant, kPosition_850);
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- setCallback(2);
- setup_callbackActionRestaurantOrSalon();
- break;
-
- case 2:
- getData()->entityPosition = kPosition_1540;
- getData()->location = kLocationOutsideCompartment;
-
- setCallback(3);
- setup_updatePosition("126A", kCarRestaurant, 52);
- break;
-
- case 3:
- getData()->location = kLocationInsideCompartment;
- getEntities()->drawSequenceLeft(kCharacterAbbot, "126B");
- break;
-
- case 4:
- if (!HELPERgetEvent(kEventAbbotDrinkDefuse) && ENTITY_PARAM(0, 1))
- getData()->inventoryItem = kItemInvalid;
-
- getEntities()->drawSequenceLeft(kCharacterAbbot, "126B");
- params->param1 = 0;
-
- Entity::timeCheckCallbackInventory(kTime2533500, params->param2, 5, WRAP_SETUP_FUNCTION(Abbot, setup_callbackActionRestaurantOrSalon));
- break;
-
- case 5:
- getData()->location = kLocationInsideCompartment;
-
- setCallback(6);
- setup_updatePosition("126D", kCarRestaurant, 52);
- break;
-
- case 6:
- setCallback(7);
- setup_updateEntity(kCarRedSleeping, kPosition_6470);
- break;
-
- case 7:
- setCallback(8);
- setup_enterExitCompartment2("617Cc", kObjectCompartmentC);
- break;
-
- case 8:
- getData()->location = kLocationInsideCompartment;
- getEntities()->clearSequences(kCharacterAbbot);
-
- setup_function44();
- break;
-
- case 9:
- getActionOld()->playAnimation(kEventAbbotDrinkDefuse);
- getEntities()->drawSequenceLeft(kCharacterAbbot, "126B");
- getSavePoints()->push(kCharacterAbbot, kCharacterAnna, kCharacterAction100969180);
- getScenes()->loadSceneFromPosition(kCarRestaurant, 58);
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(49, Abbot, catchCath)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (!Entity::updateParameter(params->param1, getState()->timeTicks, 150))
- break;
-
- getSavePoints()->push(kCharacterAbbot, kCharacterAbbot, kCharacterAction157489665);
- break;
-
- case kCharacterActionKnock:
- if (!getSoundQueue()->isBuffered("LIB012", true))
- getSound()->playSound(kCharacterCath, "LIB012");
- break;
-
- case kCharacterActionOpenDoor:
- case kCharacterAction157489665:
- getSavePoints()->push(kCharacterAbbot, kCharacterTatiana, kCharacterAction238790488);
- getObjects()->update(kObjectCompartment2, kCharacterCath, kObjectLocationNone, kCursorHandKnock, kCursorHand);
- getObjects()->update(kObjectHandleInsideBathroom, kCharacterCath, kObjectLocationNone, kCursorHandKnock, kCursorHand);
-
- setCallback(1);
- setup_savegame(kSavegameTypeEvent, kEventAbbotWrongCompartment);
- break;
-
- case kCharacterActionDefault:
- getData()->car = kCarGreenSleeping;
- getData()->entityPosition = kPosition_7500;
- getData()->location = kLocationInsideCompartment;
-
- getSavePoints()->call(kCharacterAbbot, kCharacterTableE, kCharacterActionDrawTablesWithChairs, "029G");
- getSavePoints()->push(kCharacterAbbot, kCharacterWaiter1, kCharacterAction270068760);
- getSavePoints()->push(kCharacterAbbot, kCharacterMonsieur, kCharacterAction125039808);
- getObjects()->update(kObjectCompartment2, kCharacterAbbot, kObjectLocation1, kCursorHandKnock, kCursorHand);
- getObjects()->update(kObjectHandleInsideBathroom, kCharacterAbbot, kObjectLocation1, kCursorHandKnock, kCursorHand);
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getActionOld()->playAnimation(getObjects()->get(kObjectCompartment2).model == kObjectModel1 ? kEventAbbotWrongCompartmentBed : kEventAbbotWrongCompartment);
- getEntities()->updateEntity(kCharacterAbbot, kCarRedSleeping, kPosition_6470);
- getSound()->playSound(kCharacterCath, "LIB015");
- getScenes()->loadSceneFromObject(kObjectCompartment2, true);
-
- setCallback(2);
- setup_updateEntity(kCarRedSleeping, kPosition_6470);
- break;
-
- case 2:
- setCallback(3);
- setup_enterExitCompartment2("617Cc", kObjectCompartmentC);
- break;
-
- case 3:
- getData()->location = kLocationInsideCompartment;
- getEntities()->clearSequences(kCharacterAbbot);
- getObjects()->update(kObjectCompartmentC, kCharacterAbbot, kObjectLocation1, kCursorHandKnock, kCursorHand);
-
- setup_inCompartment();
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(50, Abbot, chapter5)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- setup_chapter5Handler();
- break;
-
- case kCharacterActionDefault:
- getEntities()->clearSequences(kCharacterAbbot);
-
- getData()->entityPosition = kPosition_3969;
- getData()->location = kLocationInsideCompartment;
- getData()->car = kCarRestaurant;
- getData()->inventoryItem = kItemNone;
- getData()->clothes = kClothesDefault;
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(51, Abbot, chapter5Handler)
- if (savepoint.action == kCharacterActionProceedChapter5)
- setup_function52();
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(52, Abbot, function52)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- getEntities()->clearSequences(kCharacterAbbot);
-
- getData()->entityPosition = kPositionNone;
- getData()->location = kLocationOutsideCompartment;
- getData()->car = kCarNone;
- break;
-
- case kCharacterAction135600432:
- setup_runningTrain();
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(53, Abbot, runningTrain)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- getInventory()->setLocationAndProcess(kItem25, kObjectLocation1);
- getSavePoints()->push(kCharacterAbbot, kCharacterAnna, kCharacterAction158480160);
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getActionOld()->playAnimation(kEventLocomotiveAbbotGetSomeRest);
- getScenes()->processScene();
- break;
-
- case 2:
- getActionOld()->playAnimation(kEventLocomotiveAbbotShoveling);
- getScenes()->processScene();
- break;
- }
- break;
-
- case kCharacterAction168646401:
- if (!HELPERgetEvent(kEventLocomotiveAbbotGetSomeRest)) {
- setCallback(1);
- setup_savegame(kSavegameTypeEvent, kEventLocomotiveAbbotGetSomeRest);
- break;
- }
-
- if (!HELPERgetEvent(kEventLocomotiveAbbotShoveling)) {
- setCallback(2);
- setup_savegame(kSavegameTypeEvent, kEventLocomotiveAbbotShoveling);
- break;
- }
-
- getActionOld()->playAnimation(kEventLocomotiveAbbotShoveling);
- getScenes()->processScene();
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-} // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/abbot.h b/engines/lastexpress/entities/abbot.h
deleted file mode 100644
index dbb92c47919..00000000000
--- a/engines/lastexpress/entities/abbot.h
+++ /dev/null
@@ -1,220 +0,0 @@
-/* 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/>.
- *
- */
-
-#ifndef LASTEXPRESS_ABBOT_H
-#define LASTEXPRESS_ABBOT_H
-
-#include "lastexpress/entities/entity.h"
-
-namespace LastExpress {
-
-class LastExpressEngine;
-
-class Abbot : public Entity {
-public:
- Abbot(LastExpressEngine *engine);
- ~Abbot() override {}
-
- /**
- * Resets the character
- */
- DECLARE_FUNCTION(reset)
-
- /**
- * Draws the character
- *
- * @param sequence The sequence to draw
- */
- DECLARE_FUNCTION_1(draw, const char *sequence)
-
- /**
- * Handles entering/exiting a compartment.
- *
- * @param sequence The sequence to draw
- * @param compartment The compartment
- */
- DECLARE_VFUNCTION_2(enterExitCompartment, const char *sequence, ObjectIndex compartment)
-
- /**
- * Handles entering/exiting a compartment and updates position/play animation
- *
- * @param sequence The sequence to draw
- * @param compartment The compartment
- */
- DECLARE_FUNCTION_2(enterExitCompartment2, const char *sequence, ObjectIndex compartment)
-
- /**
- * Process callback action when the character direction is not kDirectionRight
- */
- DECLARE_FUNCTION(callbackActionOnDirection)
-
- /**
- * Draws the character along with another one
- *
- * @param sequence1 The sequence to draw
- * @param sequence2 The sequence to draw for the second character
- * @param character The CharacterIndex of the second character
- */
- DECLARE_FUNCTION_3(draw2, const char *sequence1, const char *sequence2, CharacterIndex entity)
-
- /**
- * Updates parameter 2 using time value
- *
- * @param time The time to add
- */
- DECLARE_FUNCTION_1(updateFromTime, uint32 time)
-
- /**
- * Updates parameter 2 using ticks value
- *
- * @param ticks The number of ticks to add
- */
- DECLARE_FUNCTION_1(updateFromTicks, uint32 ticks)
-
- /**
- * Plays sound
- *
- * @param filename The sound filename
- */
- DECLARE_VFUNCTION_1(playSound, const char *filename)
-
- /**
- * Saves the game
- *
- * @param savegameType The type of the savegame
- * @param param The param for the savegame (EventIndex or TimeValue)
- */
- DECLARE_VFUNCTION_2(savegame, SavegameType savegameType, uint32 param)
-
- /**
- * Updates the character
- *
- * @param car The car
- * @param entityPosition The character position
- */
- DECLARE_VFUNCTION_2(updateEntity, CarIndex car, EntityPosition entityPosition)
-
- /**
- * Call a savepoint (or draw sequence in default case)
- *
- * @param sequence1 The sequence to draw in the default case
- * @param character The character
- * @param action The action
- * @param sequence2 The sequence eraseData for the savepoint
- */
- DECLARE_FUNCTION_4(callSavepoint, const char *sequence1, CharacterIndex entity, CharacterActions action, const char *sequence2)
-
- /**
- * Updates the position
- *
- * @param sequence1 The sequence to draw
- * @param car The car
- * @param position The position
- */
- DECLARE_FUNCTION_3(updatePosition, const char *sequence1, CarIndex car, PositionOld position)
-
- /**
- * Process callback action when somebody is standing in the restaurant or salon.
- */
- DECLARE_FUNCTION(callbackActionRestaurantOrSalon)
-
- /**
- * Setup Chapter 1
- */
- DECLARE_VFUNCTION(chapter1)
-
- /**
- * Setup Chapter 2
- */
- DECLARE_VFUNCTION(chapter2)
-
- /**
- * Setup Chapter 3
- */
- DECLARE_VFUNCTION(chapter3)
-
- /**
- * Handle Chapter 3 events
- */
- DECLARE_FUNCTION(inKitchen)
- DECLARE_FUNCTION(openCompartment)
- DECLARE_FUNCTION(readPaper)
- DECLARE_FUNCTION(goToLunch)
- DECLARE_FUNCTION(haveLunch)
- DECLARE_FUNCTION(leaveLunch)
- DECLARE_FUNCTION(closedCompartment)
- DECLARE_FUNCTION(goSalon1)
- DECLARE_FUNCTION(inSalon1)
- DECLARE_FUNCTION(goCompartment)
- DECLARE_FUNCTION(openCompartment2)
- DECLARE_FUNCTION(goWander)
- DECLARE_FUNCTION(goSalon2)
- DECLARE_FUNCTION(inSalon2)
- DECLARE_FUNCTION(goCompartment3)
- DECLARE_FUNCTION(openCompartment3)
- DECLARE_FUNCTION(goSalon3)
- DECLARE_FUNCTION(inSalon3)
- DECLARE_FUNCTION(withAugust)
- DECLARE_FUNCTION(goCompartment4)
- DECLARE_FUNCTION(inCompartment4)
-
- /**
- * Setup Chapter 4
- */
- DECLARE_VFUNCTION(chapter4)
-
- /**
- * Search Cath by walking around
- *
- * @param car The car
- * @param entityPosition The character position
- */
- DECLARE_FUNCTION_2(doWalkSearchingForCath, CarIndex car, EntityPosition position)
-
- /**
- * Handle Chapter 4 events
- */
- DECLARE_FUNCTION(chapter4Handler)
- DECLARE_FUNCTION(leaveDinner)
- DECLARE_FUNCTION(inCompartment)
- DECLARE_FUNCTION(function44)
- DECLARE_FUNCTION(conferring)
- DECLARE_FUNCTION(goSalon4)
- DECLARE_FUNCTION(beforeBomb)
- DECLARE_FUNCTION(afterBomb)
- DECLARE_FUNCTION(catchCath)
-
- /**
- * Setup Chapter 5
- */
- DECLARE_VFUNCTION(chapter5)
-
- /**
- * Handle Chapter 5 events
- */
- DECLARE_FUNCTION(chapter5Handler)
- DECLARE_FUNCTION(function52)
- DECLARE_FUNCTION(runningTrain)
-};
-
-} // End of namespace LastExpress
-
-#endif // LASTEXPRESS_ABBOT_H
diff --git a/engines/lastexpress/entities/alexei.cpp b/engines/lastexpress/entities/alexei.cpp
deleted file mode 100644
index ecbc853460c..00000000000
--- a/engines/lastexpress/entities/alexei.cpp
+++ /dev/null
@@ -1,1999 +0,0 @@
-/* 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/entities/alexei.h"
-
-#include "lastexpress/game/action.h"
-#include "lastexpress/game/entities.h"
-#include "lastexpress/game/inventory.h"
-#include "lastexpress/game/logic.h"
-#include "lastexpress/game/object.h"
-#include "lastexpress/game/savepoint.h"
-#include "lastexpress/game/scenes.h"
-#include "lastexpress/game/state.h"
-
-#include "lastexpress/lastexpress.h"
-
-namespace LastExpress {
-
-Alexei::Alexei(LastExpressEngine *engine) : Entity(engine, kCharacterAlexei) {
- ADD_CALLBACK_FUNCTION(Alexei, reset);
- ADD_CALLBACK_FUNCTION_S(Alexei, playSound);
- ADD_CALLBACK_FUNCTION_I(Alexei, updateFromTime);
- ADD_CALLBACK_FUNCTION_S(Alexei, draw);
- ADD_CALLBACK_FUNCTION_SII(Alexei, updatePosition);
- ADD_CALLBACK_FUNCTION_SI(Alexei, enterExitCompartment);
- ADD_CALLBACK_FUNCTION(Alexei, callbackActionOnDirection);
- ADD_CALLBACK_FUNCTION_SIIS(Alexei, callSavepoint);
- ADD_CALLBACK_FUNCTION_II(Alexei, savegame);
- ADD_CALLBACK_FUNCTION_II(Alexei, updateEntity);
- ADD_CALLBACK_FUNCTION_SSI(Alexei, draw2);
- ADD_CALLBACK_FUNCTION(Alexei, callbackActionRestaurantOrSalon);
- ADD_CALLBACK_FUNCTION(Alexei, enterComparment);
- ADD_CALLBACK_FUNCTION(Alexei, exitCompartment);
- ADD_CALLBACK_FUNCTION(Alexei, pacingAtWindow);
- ADD_CALLBACK_FUNCTION_IS(Alexei, compartmentLogic);
- ADD_CALLBACK_FUNCTION(Alexei, chapter1);
- ADD_CALLBACK_FUNCTION(Alexei, atDinner);
- ADD_CALLBACK_FUNCTION(Alexei, returnCompartment);
- ADD_CALLBACK_FUNCTION(Alexei, goSalon);
- ADD_CALLBACK_FUNCTION(Alexei, sitting);
- ADD_CALLBACK_FUNCTION(Alexei, standingAtWindow);
- ADD_CALLBACK_FUNCTION(Alexei, waitingForTatiana);
- ADD_CALLBACK_FUNCTION(Alexei, upset);
- ADD_CALLBACK_FUNCTION(Alexei, returnCompartmentNight);
- ADD_CALLBACK_FUNCTION(Alexei, function26);
- ADD_CALLBACK_FUNCTION(Alexei, function27);
- ADD_CALLBACK_FUNCTION(Alexei, chapter2);
- ADD_CALLBACK_FUNCTION(Alexei, inCompartment2);
- ADD_CALLBACK_FUNCTION(Alexei, atBreakfast);
- ADD_CALLBACK_FUNCTION(Alexei, returnCompartment2);
- ADD_CALLBACK_FUNCTION(Alexei, chapter3);
- ADD_CALLBACK_FUNCTION(Alexei, playingChess);
- ADD_CALLBACK_FUNCTION(Alexei, inPart3);
- ADD_CALLBACK_FUNCTION(Alexei, pacing3);
- ADD_CALLBACK_FUNCTION(Alexei, goSalon3);
- ADD_CALLBACK_FUNCTION(Alexei, chapter4);
- ADD_CALLBACK_FUNCTION(Alexei, inCompartment4);
- ADD_CALLBACK_FUNCTION(Alexei, meetTatiana);
- ADD_CALLBACK_FUNCTION(Alexei, leavePlatform);
- ADD_CALLBACK_FUNCTION(Alexei, inCompartmentAgain);
- ADD_CALLBACK_FUNCTION(Alexei, goSalon4);
- ADD_CALLBACK_FUNCTION(Alexei, pacing);
- ADD_CALLBACK_FUNCTION(Alexei, goToPlatform);
- ADD_CALLBACK_FUNCTION(Alexei, returnCompartment4);
- ADD_CALLBACK_FUNCTION(Alexei, bombPlanB);
- ADD_CALLBACK_FUNCTION(Alexei, function47);
- ADD_CALLBACK_FUNCTION(Alexei, chapter5);
-}
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(1, Alexei, reset)
- Entity::reset(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_S(2, Alexei, playSound)
- Entity::playSound(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_I(3, Alexei, updateFromTime, uint32)
- Entity::updateFromTime(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_S(4, Alexei, draw)
- Entity::draw(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_SII(5, Alexei, updatePosition, CarIndex, PositionOld)
- Entity::updatePosition(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_SI(6, Alexei, enterExitCompartment, ObjectIndex)
- Entity::enterExitCompartment(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(7, Alexei, callbackActionOnDirection)
- Entity::callbackActionOnDirection(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_SIIS(8, Alexei, callSavepoint, CharacterIndex, CharacterActions)
- Entity::callSavepoint(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_II(9, Alexei, savegame, SavegameType, uint32)
- Entity::savegame(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_II(10, Alexei, updateEntity, CarIndex, EntityPosition)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionExcuseMeCath:
- if (getEntities()->isPlayerPosition(kCarGreenSleeping, 18) || getEntities()->isPlayerPosition(kCarRedSleeping, 18)) {
- getSound()->excuseMe(kCharacterAlexei);
- } else {
- if (HELPERgetEvent(kEventAlexeiSalonVassili) || (HELPERgetEvent(kEventTatianaAskMatchSpeakRussian) && getInventory()->hasItem(kItemPassengerList))) {
- getSound()->playSound(kCharacterCath, rnd(2) ? "CAT1012" : "CAT1012A");
- } else {
- getSound()->excuseMeCath();
- }
- }
- // Stop execution here
- return;
-
- case kCharacterActionDefault:
- getData()->inventoryItem = kItemNone;
- break;
- }
-
- Entity::updateEntity(savepoint, true);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_NOSETUP(11, Alexei, draw2)
- Entity::draw2(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(12, Alexei, callbackActionRestaurantOrSalon)
- Entity::callbackActionRestaurantOrSalon(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(13, Alexei, enterComparment)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- setCallback(1);
- setup_updateEntity(kCarGreenSleeping, kPosition_7500);
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getSavePoints()->push(kCharacterAlexei, kCharacterCond1, kCharacterAction302614416);
- getEntities()->drawSequenceLeft(kCharacterAlexei, "602DB");
- getEntities()->enterCompartment(kCharacterAlexei, kObjectCompartment2, true);
-
- getData()->location = kLocationInsideCompartment;
-
- if (getEntities()->isInsideCompartment(kCharacterCath, kCarGreenSleeping, kPosition_7500)) {
- getActionOld()->playAnimation(isNightOld() ? kEventCathTurningNight : kEventCathTurningDay);
- getSound()->playSound(kCharacterCath, "BUMP");
- getScenes()->loadSceneFromObject(kObjectCompartment2, true);
- }
- break;
-
- case 2:
- getEntities()->exitCompartment(kCharacterAlexei, kObjectCompartment2, true);
- getData()->location = kLocationInsideCompartment;
- getData()->entityPosition = kPosition_7500;
- getEntities()->clearSequences(kCharacterAlexei);
-
- callbackAction();
- break;
- }
- break;
-
- case kCharacterAction135664192:
- setCallback(2);
- setup_enterExitCompartment("602Eb", kObjectCompartment2);
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(14, Alexei, exitCompartment)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- setCallback(1);
- setup_enterExitCompartment("602Fb", kObjectCompartment2);
- break;
-
- case kCharacterActionCallback:
- if (getCallback() == 1) {
- getData()->location = kLocationOutsideCompartment;
- getSavePoints()->push(kCharacterAlexei, kCharacterCond1, kCharacterAction302614416);
- getEntities()->drawSequenceLeft(kCharacterAlexei, "602DB");
- getEntities()->enterCompartment(kCharacterAlexei, kObjectCompartment2, true);
- }
- break;
-
- case kCharacterAction135664192:
- getObjects()->update(kObjectCompartment2, kCharacterCath, kObjectLocation1, kCursorHandKnock, kCursorHand);
- getEntities()->exitCompartment(kCharacterAlexei, kObjectCompartment2, true);
-
- callbackAction();
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(15, Alexei, pacingAtWindow)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (Entity::updateParameterCheck(params->param2, getState()->time, params->param1)) {
- if (getEntities()->isSomebodyInsideRestaurantOrSalon()) {
- getData()->location = kLocationOutsideCompartment;
-
- setCallback(3);
- setup_updatePosition("103D", kCarRestaurant, 52);
- }
- }
- break;
-
- case kCharacterActionDefault:
- params->param1 = 5 * (3 * rnd(60) + 90);
-
- setCallback(1);
- setup_callbackActionRestaurantOrSalon();
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getData()->location = kLocationOutsideCompartment;
-
- setCallback(2);
- setup_updatePosition("103C", kCarRestaurant, 52);
- break;
-
- case 2:
- getData()->location = kLocationInsideCompartment;
- getEntities()->drawSequenceLeft(kCharacterAlexei, "103E");
- break;
-
- case 3:
- getData()->location = kLocationInsideCompartment;
- getEntities()->drawSequenceLeft(kCharacterAlexei, "103B");
-
- callbackAction();
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_IS(16, Alexei, compartmentLogic, TimeValue)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (!params->param7 && params->param1 < getState()->time && !params->param8) {
- params->param8 = 1;
-
- getObjects()->update(kObjectCompartment2, kCharacterCath, kObjectLocation1, kCursorHandKnock, kCursorHand);
- getObjects()->update(kObjectHandleInsideBathroom, kCharacterCath, kObjectLocation1, kCursorHandKnock, kCursorHand);
-
- callbackAction();
- break;
- }
-
- if (params->param5) {
- if (!Entity::updateParameter(CURRENT_PARAM(1, 1), getState()->timeTicks, 75))
- break;
-
- params->param5 = 0;
- params->param6 = 1;
-
- getObjects()->update(kObjectCompartment2, kCharacterAlexei, kObjectLocation1, kCursorNormal, kCursorNormal);
- getObjects()->update(kObjectHandleInsideBathroom, kCharacterAlexei, kObjectLocation1, kCursorNormal, kCursorNormal);
- }
-
- CURRENT_PARAM(1, 1) = 0;
- break;
-
- case kCharacterActionKnock:
- case kCharacterActionOpenDoor:
- getObjects()->update(kObjectCompartment2, kCharacterAlexei, kObjectLocation1, kCursorNormal, kCursorNormal);
- getObjects()->update(kObjectHandleInsideBathroom, kCharacterAlexei, kObjectLocation1, kCursorNormal, kCursorNormal);
-
- if (params->param5) {
- if (savepoint.param.intValue == 18) {
- setCallback(4);
- setup_playSound(getSound()->justAMinuteCath());
- break;
- }
-
- if (getInventory()->hasItem(kItemPassengerList)) {
- setCallback(5);
- setup_playSound(rnd(2) ? getSound()->wrongDoorCath() : "CAT1503");
- } else {
- setCallback(6);
- setup_playSound(getSound()->wrongDoorCath());
- }
- } else {
- setCallback(savepoint.action == kCharacterActionKnock ? 1 : 2);
- setup_playSound(savepoint.action == kCharacterActionKnock ? "LIB012" : "LIB013");
- }
- break;
-
- case kCharacterActionDefault:
- getEntities()->drawSequenceLeft(kCharacterAlexei, (char *)¶ms->seq);
- getObjects()->update(kObjectCompartment2, kCharacterAlexei, kObjectLocation1, kCursorHandKnock, kCursorHand);
- getObjects()->update(kObjectHandleInsideBathroom, kCharacterAlexei, kObjectLocation1, kCursorHandKnock, kCursorHand);
- break;
-
- case kCharacterActionDrawScene:
- if (params->param6 || params->param5) {
- getObjects()->update(kObjectCompartment2, kCharacterAlexei, kObjectLocation1, kCursorHandKnock, kCursorHand);
- getObjects()->update(kObjectHandleInsideBathroom, kCharacterAlexei, kObjectLocation1, kCursorHandKnock, kCursorHand);
-
- params->param5 = 0;
- params->param6 = 0;
- }
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- case 2:
- setCallback(3);
- setup_playSound("ALX1134A");
- break;
-
- case 3:
- getObjects()->update(kObjectCompartment2, kCharacterAlexei, kObjectLocation1, kCursorTalk, kCursorNormal);
- getObjects()->update(kObjectHandleInsideBathroom, kCharacterAlexei, kObjectLocation1, kCursorTalk, kCursorNormal);
- params->param5 = 1;
- break;
-
- case 4:
- case 5:
- case 6:
- params->param5 = 0;
- params->param6 = 1;
- break;
-
- case 7:
- setCallback(8);
- setup_updateFromTime(300);
- break;
-
- case 8:
- setCallback(9);
- setup_enterExitCompartment("602Gb", kObjectCompartment2);
- break;
-
- case 9:
- getData()->location = kLocationOutsideCompartment;
- getSavePoints()->push(kCharacterAlexei, kCharacterCond1, kCharacterAction156567128);
- getEntities()->drawSequenceLeft(kCharacterAlexei, "602Hb");
- getEntities()->enterCompartment(kCharacterAlexei, kObjectCompartment2, true);
- break;
-
- case 10:
- getEntities()->exitCompartment(kCharacterAlexei, kObjectCompartment2, true);
-
- getData()->location = kLocationInsideCompartment;
- getData()->entityPosition = kPosition_7500;
-
- getEntities()->drawSequenceLeft(kCharacterAlexei, (char *)¶ms->seq);
- getObjects()->update(kObjectCompartment2, kCharacterAlexei, kObjectLocation1, kCursorHandKnock, kCursorHand);
- getObjects()->update(kObjectHandleInsideBathroom, kCharacterAlexei, kObjectLocation1, kCursorHandKnock, kCursorHand);
-
- params->param7 = 0;
- break;
- }
- break;
-
- case kCharacterAction124697504:
- setCallback(10);
- setup_enterExitCompartment("602Ib", kObjectCompartment2);
- break;
-
- case kCharacterAction221617184:
- params->param7 = 1;
- getSavePoints()->push(kCharacterAlexei, kCharacterCond1, kCharacterAction100906246);
-
- setCallback(7);
- setup_playSound("CON1024");
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(17, Alexei, chapter1)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Alexei, setup_atDinner));
- break;
-
- case kCharacterActionDefault:
- getObjects()->update(kObjectCompartment2, kCharacterCath, kObjectLocation1, kCursorHandKnock, kCursorHand);
- getObjects()->update(kObject10, kCharacterCath, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue);
- getObjects()->update(kObjectHandleInsideBathroom, kCharacterCath, kObjectLocation1, kCursorHandKnock, kCursorHand);
-
- getData()->entityPosition = kPosition_3969;
- getData()->location = kLocationInsideCompartment;
- getData()->car = kCarRestaurant;
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(18, Alexei, atDinner)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (getState()->time > kTime1089000 && getEntities()->isSomebodyInsideRestaurantOrSalon()) {
- params->param2 = kItemNone;
-
- getData()->location = kLocationOutsideCompartment;
- getData()->inventoryItem = kItemNone;
-
- getEntities()->updatePositionEnter(kCharacterAlexei, kCarRestaurant, 63);
- getInventory()->setLocationAndProcess(kItem17, kObjectLocation1);
-
- setCallback(1);
- setup_callSavepoint("005D", kCharacterTableB, kCharacterActionDrawTablesWithChairs, "005E");
- break;
- }
-
- if (params->param1) {
- if (!Entity::updateParameter(params->param3, getState()->timeTicks, 90))
- break;
-
- getScenes()->loadSceneFromPosition(kCarRestaurant, 61);
- } else {
- params->param3 = 0;
- }
- break;
-
- case kCharacterAction1:
- params->param2 = kItemNone;
- getData()->inventoryItem = kItemNone;
-
- setCallback(2);
- setup_savegame(kSavegameTypeEvent, kEventAlexeiDiner);
- break;
-
- case kCharacterActionDefault:
- getSavePoints()->push(kCharacterAlexei, kCharacterTableB, kCharacterAction136455232);
- getEntities()->drawSequenceLeft(kCharacterAlexei, "005B");
-
- params->param2 = kItemInvalid;
- getData()->inventoryItem = kItemInvalid;
- break;
-
- case kCharacterActionDrawScene:
- params->param1 = getEntities()->isPlayerPosition(kCarRestaurant, 63) ? 1 : 0;
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getEntities()->updatePositionExit(kCharacterAlexei, kCarRestaurant, 63);
- setup_returnCompartment();
- break;
-
- case 2:
- getActionOld()->playAnimation(getProgress().jacket == kJacketGreen ? kEventAlexeiDiner : kEventAlexeiDinerOriginalJacket);
- getSavePoints()->push(kCharacterAlexei, kCharacterTableB, kCharacterActionDrawTablesWithChairs, "005E");
-
- getData()->entityPosition = kPosition_3650;
- getData()->location = kLocationOutsideCompartment;
-
- getEntities()->clearSequences(kCharacterAlexei);
- getInventory()->get(kItem17)->location = kObjectLocation1;
- getScenes()->loadSceneFromPosition(kCarRestaurant, 63);
-
- setup_returnCompartment();
- break;
- }
- break;
-
- case kCharacterAction168046720:
- getData()->inventoryItem = kItemNone;
- break;
-
- case kCharacterAction168627977:
- getData()->inventoryItem = (InventoryItem)LOW_BYTE(params->param2);
- break;
-
- case kCharacterAction225182640:
- getData()->inventoryItem = kItemNone;
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(19, Alexei, returnCompartment)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- setCallback(1);
- setup_draw("811DS");
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- setCallback(2);
- setup_updateEntity(kCarGreenSleeping, kPosition_9460);
- break;
-
- case 2:
- setCallback(3);
- setup_updateEntity(kCarRestaurant, kPosition_850);
- break;
-
- case 3:
- setCallback(4);
- setup_callbackActionRestaurantOrSalon();
- break;
-
- case 4:
- getData()->entityPosition = kPosition_1540;
- getData()->location = kLocationOutsideCompartment;
-
- setCallback(5);
- setup_draw("811US");
- break;
-
- case 5:
- setCallback(6);
- setup_draw("933");
- break;
-
- case 6:
- getEntities()->updatePositionEnter(kCharacterAlexei, kCarRestaurant, 63);
- getScenes()->loadSceneFromItemPosition(kItem17);
- getSavePoints()->push(kCharacterAlexei, kCharacterTableB, kCharacterAction136455232);
-
- setCallback(7);
- setup_callSavepoint("005F", kCharacterTableB, kCharacterActionDrawTablesWithChairs, "005G");
- break;
-
- case 7:
- getEntities()->updatePositionExit(kCharacterAlexei, kCarRestaurant, 63);
- getSavePoints()->push(kCharacterAlexei, kCharacterWaiter2, kCharacterAction302996448);
-
- setCallback(8);
- setup_draw("934");
- break;
-
- case 8:
- setCallback(9);
- setup_draw("811DS");
- break;
-
- case 9:
- setCallback(10);
- setup_enterComparment();
- break;
-
- case 10:
- if (getEntities()->isPlayerPosition(kCarGreenSleeping, 61))
- getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49);
-
- setCallback(11);
- setup_compartmentLogic(kTime1098000, "411");
- break;
-
- case 11:
- setup_goSalon();
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(20, Alexei, goSalon)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- setCallback(1);
- setup_exitCompartment();
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- setCallback(2);
- setup_updateEntity(kCarRestaurant, kPosition_850);
- break;
-
- case 2:
- setCallback(3);
- setup_callbackActionRestaurantOrSalon();
- break;
-
- case 3:
- getData()->entityPosition = kPosition_1540;
- getData()->location = kLocationOutsideCompartment;
-
- setCallback(4);
- setup_updatePosition("103A", kCarRestaurant, 52);
- break;
-
- case 4:
- getData()->location = kLocationInsideCompartment;
- setup_sitting();
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(21, Alexei, sitting)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (Entity::updateParameterCheck(params->param2, getState()->time, params->param1) && getEntities()->isSomebodyInsideRestaurantOrSalon()) {
- getData()->location = kLocationOutsideCompartment;
- getData()->inventoryItem = kItemNone;
-
- setCallback(1);
- setup_updatePosition("103C", kCarRestaurant, 52);
- }
- break;
-
- case kCharacterAction1:
- getData()->inventoryItem = kItemNone;
-
- setCallback(2);
- setup_savegame(kSavegameTypeEvent, kEventAlexeiSalonPoem);
- break;
-
- case kCharacterActionDefault:
- getEntities()->drawSequenceLeft(kCharacterAlexei, "103B");
- params->param1 = 225 * (4 * rnd(3) + 4);
-
- if (!HELPERgetEvent(kEventAlexeiSalonPoem))
- getData()->inventoryItem = kItemParchemin;
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getData()->location = kLocationInsideCompartment;
- setup_standingAtWindow();
- break;
-
- case 2:
- getActionOld()->playAnimation(kEventAlexeiSalonPoem);
- getData()->location = kLocationOutsideCompartment;
-
- getEntities()->drawSequenceRight(kCharacterAlexei, "103D");
- getScenes()->loadSceneFromPosition(kCarRestaurant, 55);
- getEntities()->updatePositionEnter(kCharacterAlexei, kCarRestaurant, 52);
-
- setCallback(3);
- setup_callbackActionOnDirection();
- break;
-
- case 3:
- getEntities()->drawSequenceLeft(kCharacterAlexei, "103B");
- getEntities()->updatePositionExit(kCharacterAlexei, kCarRestaurant, 52);
- getData()->location = kLocationInsideCompartment;
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(22, Alexei, standingAtWindow)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (Entity::updateParameterCheck(params->param2, getState()->time, params->param1)) {
- if (getEntities()->isSomebodyInsideRestaurantOrSalon()) {
- getData()->location = kLocationOutsideCompartment;
- getData()->inventoryItem = kItemNone;
-
- setCallback(1);
- setup_updatePosition("103D", kCarRestaurant, 52);
- break;
- }
- }
-
- if (params->param3 == kTimeInvalid || getState()->time <= kTime1111500)
- break;
-
- if (getState()->time > kTime1138500) {
- params->param3 = kTimeInvalid;
- } else {
- if ((!getEntities()->isInSalon(kCharacterCath) && !getEntities()->isInRestaurant(kCharacterCath)) || !params->param3)
- params->param3 = (uint)getState()->time;
-
- if (params->param3 >= getState()->time)
- break;
-
- params->param3 = kTimeInvalid;
- }
-
- getData()->inventoryItem = kItemNone;
-
- setup_waitingForTatiana();
- break;
-
- case kCharacterAction1:
- setCallback(2);
- setup_savegame(kSavegameTypeEvent, kEventAlexeiSalonPoem);
- break;
-
- case kCharacterActionDefault:
- params->param1 = 225 * (4 * rnd(4) + 8);
- getEntities()->drawSequenceLeft(kCharacterAlexei, "103E");
- if (!HELPERgetEvent(kEventAlexeiSalonPoem))
- getData()->inventoryItem = kItemParchemin;
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getData()->location = kLocationInsideCompartment;
- setup_sitting();
- break;
-
- case 2:
- getActionOld()->playAnimation(kEventAlexeiSalonPoem);
- getData()->inventoryItem = kItemNone;
- getData()->location = kLocationOutsideCompartment;
-
- getEntities()->drawSequenceRight(kCharacterAlexei, "103D");
- getEntities()->updatePositionEnter(kCharacterAlexei, kCarRestaurant, 52);
- getScenes()->loadSceneFromPosition(kCarRestaurant, 55);
-
- setCallback(3);
- setup_callbackActionOnDirection();
- break;
-
- case 3:
- getEntities()->updatePositionExit(kCharacterAlexei, kCarRestaurant, 52);
- getData()->location = kLocationInsideCompartment;
-
- setup_sitting();
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(23, Alexei, waitingForTatiana)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- getData()->inventoryItem = (!getEntities()->isInRestaurant(kCharacterTatiana) || HELPERgetEvent(kEventAlexeiSalonPoem)) ? kItemNone : kItemParchemin;
- break;
-
- case kCharacterAction1:
- setCallback(2);
- setup_savegame(kSavegameTypeEvent, kEventAlexeiSalonPoem);
- break;
-
- case kCharacterActionDefault:
- getData()->location = kLocationInsideCompartment;
- getSavePoints()->push(kCharacterAlexei, kCharacterTatiana, kCharacterAction124973510);
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getActionOld()->playAnimation(kEventAlexeiSalonVassili);
-
- getData()->location = kLocationOutsideCompartment;
-
- getEntities()->drawSequenceLeft(kCharacterAlexei, "103F");
- getScenes()->processScene();
-
- setup_upset();
- break;
-
- case 2:
- getActionOld()->playAnimation(kEventAlexeiSalonPoem);
-
- getData()->inventoryItem = kItemNone;
-
- getScenes()->loadSceneFromPosition(kCarRestaurant, 55);
- break;
- }
- break;
-
- case kCharacterAction157159392:
- if (getEntities()->isInSalon(kCharacterCath)) {
- setCallback(1);
- setup_savegame(kSavegameTypeEvent, kEventAlexeiSalonVassili);
- } else {
- setup_upset();
- }
- break;
-
- case kCharacterAction188784532:
- setup_upset();
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(24, Alexei, upset)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterAction1:
- getData()->inventoryItem = kItemNone;
- setCallback(1);
- setup_savegame(kSavegameTypeEvent, kEventAlexeiSalonCath);
- break;
-
- case kCharacterActionDefault:
- if (HELPERgetEvent(kEventAlexeiSalonVassili))
- getData()->inventoryItem = kItemInvalid;
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getActionOld()->playAnimation(kEventAlexeiSalonCath);
- getData()->car = kCarRedSleeping;
- getData()->entityPosition = kPosition_9460;
- getEntities()->clearSequences(kCharacterAlexei);
- getScenes()->loadSceneFromPosition(kCarRestaurant, 55);
- setup_returnCompartmentNight();
- break;
-
- case 2:
- setup_returnCompartmentNight();
- break;
- }
- break;
-
- case kCharacterAction135854208:
- getData()->inventoryItem = kItemNone;
- setCallback(2);
- setup_draw("103G");
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(25, Alexei, returnCompartmentNight)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- setCallback(1);
- setup_enterComparment();
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- if (getEntities()->isPlayerPosition(kCarGreenSleeping, 61))
- getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49);
-
- setCallback(2);
- setup_compartmentLogic(kTime1179000, "411");
- break;
-
- case 2:
- setCallback(3);
- setup_compartmentLogic(kTime1323000, "412");
- break;
-
- case 3:
- setup_function26();
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(26, Alexei, function26)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- Entity::timeCheck(kTime1512000, params->param1, WRAP_SETUP_FUNCTION(Alexei, setup_function27));
- break;
-
- case kCharacterActionDefault:
- getData()->entityPosition = kPosition_7500;
- getData()->car = kCarGreenSleeping;
- getData()->location = kLocationInsideCompartment;
-
- getObjects()->update(kObjectCompartment2, kCharacterCath, kObjectLocation1, kCursorHandKnock, kCursorHand);
- getObjects()->update(kObjectHandleInsideBathroom, kCharacterCath, kObjectLocation1, kCursorHandKnock, kCursorHand);
- getObjects()->update(kObject10, kCharacterCath, kObjectLocation1, kCursorKeepValue, kCursorKeepValue);
-
- if (getEntities()->isPlayerPosition(kCarGreenSleeping, 61))
- getScenes()->loadSceneFromPosition(kCarGreenSleeping, 66);
-
- getEntities()->clearSequences(kCharacterAlexei);
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(27, Alexei, function27)
- if (savepoint.action == kCharacterActionDefault) {
- getObjects()->update(kObject10, kCharacterCath, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue);
-
- if (getEntities()->isPlayerPosition(kCarGreenSleeping, 66))
- getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49);
-
- getEntities()->drawSequenceLeft(kCharacterAlexei, "412");
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(28, Alexei, chapter2)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- setup_inCompartment2();
- break;
-
- case kCharacterActionDefault:
- getEntities()->clearSequences(kCharacterAlexei);
-
- getObjects()->update(kObjectCompartment2, kCharacterAlexei, kObjectLocation1, kCursorHandKnock, kCursorHand);
- getObjects()->update(kObject10, kCharacterCath, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue);
- getObjects()->update(kObjectHandleInsideBathroom, kCharacterAlexei, kObjectLocation1, kCursorHandKnock, kCursorHand);
-
- getData()->entityPosition = kPosition_7500;
- getData()->location = kLocationInsideCompartment;
- getData()->car = kCarGreenSleeping;
- getData()->clothes = kClothesDefault;
- getData()->inventoryItem = kItemNone;
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(29, Alexei, inCompartment2)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- setCallback(1);
- setup_compartmentLogic(kTime1791000, "411");
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- setCallback(2);
- setup_exitCompartment();
- break;
-
- case 2:
- setCallback(3);
- setup_updateEntity(kCarRestaurant, kPosition_850);
- break;
-
- case 3:
- setCallback(4);
- setup_callbackActionRestaurantOrSalon();
- break;
-
- case 4:
- getData()->entityPosition = kPosition_1540;
- getData()->location = kLocationOutsideCompartment;
-
- setCallback(5);
- setup_draw("811US");
- break;
-
- case 5:
- getEntities()->updatePositionEnter(kCharacterAlexei, kCarRestaurant, 63);
-
- setCallback(6);
- setup_callSavepoint("018B", kCharacterTableB, kCharacterAction136455232, "BOGUS");
- break;
-
- case 6:
- getEntities()->updatePositionExit(kCharacterAlexei, kCarRestaurant, 63);
- getSavePoints()->push(kCharacterAlexei, kCharacterTatiana, kCharacterAction290869168);
- setup_atBreakfast();
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(30, Alexei, atBreakfast)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- getObjects()->update(kObjectCompartment2, kCharacterCath, kObjectLocation1, kCursorHandKnock, kCursorHand);
- getData()->car = kCarRestaurant;
- getData()->location = kLocationInsideCompartment;
-
- getEntities()->drawSequenceLeft(kCharacterAlexei, "018C");
- getSavePoints()->push(kCharacterAlexei, kCharacterTableB, kCharacterAction136455232);
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getEntities()->updatePositionExit(kCharacterAlexei, kCarRestaurant, 63);
- getSavePoints()->push(kCharacterAlexei, kCharacterTatiana, kCharacterAction156444784);
- getEntities()->drawSequenceLeft(kCharacterAlexei, "018E");
-
- if (getEntities()->isInRestaurant(kCharacterCath))
- getProgress().field_68 = 1;
-
- setCallback(2);
- setup_playSound("TAT2116");
- break;
-
- case 2:
- getSound()->playSound(kCharacterAlexei, "TAT2116A");
- getEntities()->updatePositionEnter(kCharacterAlexei, kCarRestaurant, 63);
-
- setCallback(3);
- setup_callSavepoint("018F", kCharacterTatiana, kCharacterAction123857088, "BOGUS");
- break;
-
- case 3:
- getEntities()->updatePositionExit(kCharacterAlexei, kCarRestaurant, 63);
- setup_returnCompartment2();
- break;
- }
- break;
-
- case kCharacterAction236053296:
- getEntities()->drawSequenceRight(kCharacterAlexei, "018D1");
- getEntities()->drawSequenceRight(kCharacterTatiana, "018D2");
- getEntities()->updatePositionEnter(kCharacterAlexei, kCarRestaurant, 63);
-
- if (savepoint.param.intValue)
- getScenes()->loadSceneFromPosition(kCarRestaurant, (PositionOld)savepoint.param.intValue);
-
- setCallback(1);
- setup_callbackActionOnDirection();
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(31, Alexei, returnCompartment2)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- getEntities()->drawSequenceRight(kCharacterAlexei, "811DS");
- if (getEntities()->isInRestaurant(kCharacterCath))
- getEntities()->updateFrame(kCharacterAlexei);
-
- setCallback(1);
- setup_callbackActionOnDirection();
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- setCallback(2);
- setup_enterComparment();
- break;
-
- case 2:
- if (getEntities()->isPlayerPosition(kCarGreenSleeping, 61))
- getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49);
-
- setCallback(3);
- setup_compartmentLogic(kTimeEnd, "411");
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(32, Alexei, chapter3)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- setup_playingChess();
- break;
-
- case kCharacterActionDefault:
- getEntities()->clearSequences(kCharacterAlexei);
-
- getObjects()->update(kObjectCompartment2, kCharacterCath, kObjectLocation1, kCursorHandKnock, kCursorHand);
- getObjects()->update(kObject10, kCharacterCath, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue);
- getObjects()->update(kObjectHandleInsideBathroom, kCharacterCath, kObjectLocation1, kCursorHandKnock, kCursorHand);
-
- getData()->location = kLocationInsideCompartment;
- getData()->car = kCarRestaurant;
- getData()->clothes = kClothesDefault;
- getData()->inventoryItem = kItemNone;
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(33, Alexei, playingChess)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionCallback:
- if (getCallback() == 1)
- setup_inPart3();
- break;
-
- case kCharacterAction122288808:
- getData()->entityPosition = kPosition_9270;
- getData()->location = kLocationOutsideCompartment;
- getData()->car = kCarRedSleeping;
-
- setCallback(1);
- setup_enterComparment();
- break;
-
- case kCharacterAction122358304:
- getEntities()->drawSequenceLeft(kCharacterAlexei, "BLANK");
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(34, Alexei, inPart3)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- if (getEntities()->isPlayerPosition(kCarGreenSleeping, 61))
- getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49);
-
- setCallback(1);
- setup_compartmentLogic(kTime2083500, "411");
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- setCallback(2);
- setup_exitCompartment();
- break;
-
- case 2:
- setCallback(3);
- setup_updateEntity(kCarRestaurant, kPosition_850);
- break;
-
- case 3:
- setCallback(4);
- setup_callbackActionRestaurantOrSalon();
- break;
-
- case 4:
- getData()->entityPosition = kPosition_1540;
- getData()->location = kLocationOutsideCompartment;
-
- setCallback(5);
- setup_updatePosition("103A", kCarRestaurant, 52);
- break;
-
- case 5:
- setCallback(6);
- setup_pacing3();
- break;
-
- case 6:
- setCallback(7);
- setup_enterComparment();
- break;
-
- case 7:
- getObjects()->update(kObject10, kCharacterCath, kObjectLocation1, kCursorKeepValue, kCursorKeepValue);
- if (getEntities()->isPlayerPosition(kCarGreenSleeping, 61))
- getScenes()->loadSceneFromPosition(kCarGreenSleeping, 66);
-
- setCallback(8);
- setup_compartmentLogic(kTime2124000, "NONE");
- break;
-
- case 8:
- setCallback(9);
- setup_exitCompartment();
- break;
-
- case 9:
- setCallback(10);
- setup_goSalon3();
- break;
-
- case 10:
- getObjects()->update(kObject10, kCharacterCath, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue);
- if (getEntities()->isPlayerPosition(kCarGreenSleeping, 66))
- getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49);
-
- setCallback(11);
- setup_compartmentLogic(kTime16451100, "411");
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(35, Alexei, pacing3)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (getEntities()->isInSalon(kCharacterCath)) {
- if (Entity::updateParameterCheck(params->param2, getState()->time, 2700)) {
- setCallback(1);
- setup_callbackActionRestaurantOrSalon();
- break;
- }
- } else {
- params->param2 = 0;
- }
-
- if (Entity::updateParameterCheck(params->param3, getState()->time, params->param1)) {
- if (getEntities()->isSomebodyInsideRestaurantOrSalon()) {
- setCallback(3);
- setup_pacingAtWindow();
- break;
- }
- }
-
-label_callback_3:
- if (!Entity::updateParameter(params->param4, getState()->time, 9000))
- break;
-
- setCallback(4);
- setup_callbackActionRestaurantOrSalon();
- break;
-
- case kCharacterActionDefault:
- params->param1 = 15 * rnd(120);
- getEntities()->drawSequenceLeft(kCharacterAlexei, "103B");
- getData()->location = kLocationInsideCompartment;
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- case 4:
- getData()->location = kLocationOutsideCompartment;
-
- setCallback(getCallback() + 1);
- setup_updatePosition("124C", kCarRestaurant, 52);
- break;
-
- case 2:
- case 5:
- callbackAction();
- break;
-
- case 3:
- params->param1 = 15 * rnd(120);
- params->param3 = 0;
- goto label_callback_3;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(36, Alexei, goSalon3)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (params->param3 || params->param2)
- break;
-
- if (!Entity::updateParameter(params->param4, getState()->timeTicks, params->param1))
- break;
-
- getEntities()->drawSequenceRight(kCharacterAlexei, "124B");
-
- params->param2 = 1;
- params->param4 = 0;
- break;
-
- case kCharacterActionExitCompartment:
- if (params->param2) {
- getEntities()->drawSequenceLeft(kCharacterAlexei, "124A");
- params->param1 = 5 * (3 * rnd(15) + 15);
- params->param2 = 0;
- }
- break;
-
- case kCharacterActionDefault:
- params->param1 = 5 * (3 * rnd(15) + 15);
-
- setCallback(1);
- setup_updateEntity(kCarRestaurant, kPosition_850);
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- setCallback(2);
- setup_callbackActionRestaurantOrSalon();
- break;
-
- case 2:
- getSavePoints()->push(kCharacterAlexei, kCharacterAbbot, kCharacterAction222609266);
- getData()->entityPosition = kPosition_1540;
- getData()->location = kLocationOutsideCompartment;
-
- setCallback(3);
- setup_updatePosition("103A", kCarRestaurant, 52);
- break;
-
- case 3:
- getData()->location = kLocationInsideCompartment;
- getEntities()->drawSequenceLeft(kCharacterAlexei, "124A");
- break;
-
- case 4:
- callbackAction();
- break;
- }
- break;
-
- case kCharacterAction122288808:
- setCallback(4);
- setup_enterComparment();
- break;
-
- case kCharacterAction122358304:
- getEntities()->drawSequenceLeft(kCharacterAlexei, "BLANK");
- params->param3 = 1;
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(37, Alexei, chapter4)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- setup_inCompartment4();
- break;
-
- case kCharacterActionDefault:
- getEntities()->clearSequences(kCharacterAlexei);
-
- getObjects()->update(kObjectCompartment2, kCharacterCath, kObjectLocation1, kCursorHandKnock, kCursorHand);
- getObjects()->update(kObject10, kCharacterCath, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue);
- getObjects()->update(kObjectHandleInsideBathroom, kCharacterCath, kObjectLocation1, kCursorHandKnock, kCursorHand);
-
- getData()->entityPosition = kPosition_7500;
- getData()->location = kLocationInsideCompartment;
- getData()->car = kCarGreenSleeping;
- getData()->inventoryItem = kItemNone;
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(38, Alexei, inCompartment4)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- setCallback(1);
- setup_compartmentLogic(kTime2354400, "411");
- break;
-
- case kCharacterActionCallback:
- if (getCallback() == 1)
- setup_meetTatiana();
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(39, Alexei, meetTatiana)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (!params->param2)
- break;
-
- if (!params->param4) {
- params->param3 = (uint)getState()->time + 4500;
- params->param4 = (uint)getState()->time + 9000;
- }
-
- if (params->param5 != kTimeInvalid && params->param3 < getState()->time) {
-
- if (params->param4 >= getState()->time) {
- if (getEntities()->isInGreenCarEntrance(kCharacterCath) || !params->param5)
- params->param5 = (uint)getState()->time;
-
- if (params->param5 >= getState()->time)
- break;
- }
-
- params->param5 = kTimeInvalid;
-
- getEntities()->updatePositionExit(kCharacterAlexei, kCarGreenSleeping, 70);
- getEntities()->updatePositionExit(kCharacterAlexei, kCarGreenSleeping, 71);
-
- if (getEntities()->isInGreenCarEntrance(kCharacterCath)) {
- getSound()->excuseMe(kCharacterAlexei);
-
- if (getEntities()->isPlayerPosition(kCarGreenSleeping, 62))
- getScenes()->loadSceneFromPosition(kCarGreenSleeping, 72);
- }
-
- setup_leavePlatform();
- }
- break;
-
- case kCharacterActionExitCompartment:
- if (!params->param1 && !params->param2)
- getEntities()->drawSequenceLeft(kCharacterAlexei, "306F");
- break;
-
- case kCharacterActionDefault:
- setCallback(1);
- setup_enterExitCompartment("602FB", kObjectCompartment2);
- break;
-
- case kCharacterActionDrawScene:
- if (getEntities()->isPlayerPosition(kCarGreenSleeping, 62)) {
- if (params->param1) {
- if (!params->param2)
- break;
- } else if (!params->param2) {
- getEntities()->drawSequenceRight(kCharacterAlexei, "306A");
- break;
- }
-
- setup_leavePlatform();
- }
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getObjects()->update(kObjectCompartment2, kCharacterCath, kObjectLocationNone, kCursorHandKnock, kCursorHand);
- getData()->location = kLocationOutsideCompartment;
-
- setCallback(2);
- setup_updateEntity(kCarGreenSleeping, kPosition_540);
- break;
-
- case 2:
- getEntities()->clearSequences(kCharacterAlexei);
-
- if (getEntities()->isInGreenCarEntrance(kCharacterCath)) {
- getSound()->excuseMe(kCharacterAlexei);
-
- if (getEntities()->isPlayerPosition(kCarGreenSleeping, 62))
- getScenes()->loadSceneFromPosition(kCarGreenSleeping, 72);
- }
-
- getEntities()->updatePositionEnter(kCharacterAlexei, kCarGreenSleeping, 70);
- getEntities()->updatePositionEnter(kCharacterAlexei, kCarGreenSleeping, 71);
- break;
- }
- break;
-
- case kCharacterAction123536024:
- params->param2 = 1;
- break;
-
- case kCharacterAction123712592:
- getEntities()->clearSequences(kCharacterAlexei);
- params->param1 = 1;
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(40, Alexei, leavePlatform)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- setCallback(1);
- setup_updateEntity(kCarGreenSleeping, kPosition_7500);
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getEntities()->drawSequenceRight(kCharacterAlexei, "602Eb");
- getEntities()->enterCompartment(kCharacterAlexei, kObjectCompartment2);
-
- getData()->location = kLocationInsideCompartment;
-
- if (getEntities()->isInsideCompartment(kCharacterCath, kCarGreenSleeping, kPosition_7500)) {
- getActionOld()->playAnimation(isNightOld() ? kEventCathTurningNight : kEventCathTurningDay);
- getSound()->playSound(kCharacterCath, "BUMP");
- getScenes()->loadSceneFromObject(kObjectCompartment2);
- }
-
- setCallback(2);
- setup_callbackActionOnDirection();
- break;
-
- case 2:
- getEntities()->exitCompartment(kCharacterAlexei, kObjectCompartment2);
- getData()->entityPosition = kPosition_7500;
- getData()->location = kLocationInsideCompartment;
- getEntities()->clearSequences(kCharacterAlexei);
-
- setup_inCompartmentAgain();
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(41, Alexei, inCompartmentAgain)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- if (getEntities()->isPlayerPosition(kCarGreenSleeping, 66))
- getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49);
-
- setCallback(1);
- setup_compartmentLogic(kTime2403000, "411");
- break;
-
- case kCharacterActionCallback:
- if (getCallback() == 1)
- setup_goSalon4();
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(42, Alexei, goSalon4)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- setCallback(1);
- setup_exitCompartment();
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getSavePoints()->push(kCharacterAlexei, kCharacterTatiana, kCharacterAction191198209);
-
- setCallback(2);
- setup_updateEntity(kCarRestaurant, kPosition_850);
- break;
-
- case 2:
- setCallback(3);
- setup_updatePosition("103A", kCarRestaurant, 52);
- break;
-
- case 3:
- getData()->location = kLocationInsideCompartment;
- setup_pacing();
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(43, Alexei, pacing)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (getState()->time < kTime1806300 && Entity::updateParameterCheck(params->param2, getState()->time, params->param1)) {
- if (getEntities()->isSomebodyInsideRestaurantOrSalon()) {
- setCallback(1);
- setup_pacingAtWindow();
- break;
- }
- }
-
-label_callback_1:
- if (getState()->time > kTime2457000 && !params->param3) {
- params->param3 = 1;
-
- setCallback(2);
- setup_callbackActionRestaurantOrSalon();
- }
- break;
-
- case kCharacterActionDefault:
- params->param1 = 5 * (3 * rnd(120) + 180);
- getEntities()->drawSequenceLeft(kCharacterAlexei, "103B");
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- params->param1 = 5 * (3 * rnd(120) + 180);
- params->param2 = 0;
- goto label_callback_1;
-
- case 2:
- getData()->location = kLocationOutsideCompartment;
-
- setCallback(3);
- setup_updatePosition("124C", kCarRestaurant, 52);
- break;
-
- case 3:
- setup_goToPlatform();
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(44, Alexei, goToPlatform)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (getState()->time > kTime2475000 && !params->param1) {
- params->param1 = 1;
-
- getEntities()->updatePositionExit(kCharacterAlexei, kCarGreenSleeping, 70);
- getEntities()->updatePositionExit(kCharacterAlexei, kCarGreenSleeping, 71);
-
- if (getEntities()->isInGreenCarEntrance(kCharacterCath)) {
- getSound()->excuseMe(kCharacterAlexei);
-
- if (getEntities()->isPlayerPosition(kCarGreenSleeping, 62))
- getScenes()->loadSceneFromPosition(kCarGreenSleeping, 72);
-
- }
- setup_returnCompartment4();
- }
- break;
-
- case kCharacterActionDefault:
- getData()->car = kCarRedSleeping;
- getData()->location = kLocationOutsideCompartment;
- getData()->entityPosition = kPosition_9460;
-
- setCallback(1);
- setup_updateEntity(kCarGreenSleeping, kPosition_540);
- break;
-
- case kCharacterActionDrawScene:
- if (getEntities()->isPlayerPosition(kCarGreenSleeping, 62)) {
- setCallback(2);
- setup_draw("306A");
- }
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getEntities()->clearSequences(kCharacterAlexei);
-
- if (getEntities()->isInGreenCarEntrance(kCharacterCath)) {
- getSound()->excuseMe(kCharacterAlexei);
-
- if (getEntities()->isPlayerPosition(kCarGreenSleeping, 62))
- getScenes()->loadSceneFromPosition(kCarGreenSleeping, 72);
- }
-
- getEntities()->updatePositionEnter(kCharacterAlexei, kCarGreenSleeping, 70);
- getEntities()->updatePositionEnter(kCharacterAlexei, kCarGreenSleeping, 71);
- break;
-
- case 2:
- getEntities()->drawSequenceLeft(kCharacterAlexei, "306F");
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(45, Alexei, returnCompartment4)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- setCallback(1);
- setup_enterComparment();
- break;
-
- case kCharacterActionCallback:
- if (getCallback() == 1) {
- if (getEntities()->isPlayerPosition(kCarGreenSleeping, 66))
- getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49);
-
- if (getInventory()->hasItem(kItemBomb)) {
- setup_bombPlanB();
- } else {
- setCallback(2);
- setup_compartmentLogic(kTimeEnd, "412");
- }
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(46, Alexei, bombPlanB)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (params->param1 == kTimeInvalid)
- break;
-
- if (getState()->time <= kTime2493000) {
-
- if (getEntities()->isInSalon(kCharacterCath) || getEntities()->isInSalon(kCharacterAugust) || !params->param1)
- params->param1 = (uint)getState()->time;
-
- if (params->param1 >= getState()->time)
- break;
- }
-
- params->param1 = kTimeInvalid;
-
- getScenes()->loadSceneFromItemPosition(kItem22);
-
- if (getEntities()->isInSalon(kCharacterCath)) {
- getSound()->excuseMe(kCharacterAlexei);
-
- getScenes()->loadSceneFromPosition(kCarRestaurant, getScenes()->get(getState()->scene)->position);
- }
-
- setCallback(4);
- setup_enterComparment();
- break;
-
- case kCharacterActionDefault:
- setCallback(1);
- setup_compartmentLogic(kTime2488500, "411");
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- setCallback(2);
- setup_exitCompartment();
- break;
-
- case 2:
- setCallback(3);
- setup_updateEntity(kCarRedSleeping, kPosition_9460);
- break;
-
- case 4:
- if (getEntities()->isPlayerPosition(kCarGreenSleeping, 66))
- getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49);
-
- setCallback(5);
- setup_compartmentLogic(kTime2507400, "412");
- break;
-
- case 5:
- setCallback(6);
- setup_enterExitCompartment("602Fb", kObjectCompartment2);
- break;
-
- case 6:
- getObjects()->update(kObjectCompartment2, kCharacterCath, kObjectLocationNone, kCursorHandKnock, kCursorHand);
- getData()->location = kLocationOutsideCompartment;
-
- setCallback(7);
- setup_updateEntity(kCarRedSleeping, kPosition_7500);
- break;
-
- case 7:
- getEntities()->drawSequenceRight(kCharacterAlexei, "602Eb");
- getEntities()->enterCompartment(kCharacterAlexei, kObjectCompartmentB);
- getData()->location = kLocationInsideCompartment;
-
- if (getEntities()->checkFields19(kCharacterCath, kCarRedSleeping, kPosition_7850)) {
- getActionOld()->playAnimation(isNightOld() ? kEventCathTurningNight : kEventCathTurningDay);
- getSound()->playSound(kCharacterCath, "BUMP");
- getScenes()->loadSceneFromObject(kObjectCompartmentB);
- }
-
- setCallback(8);
- setup_callbackActionOnDirection();
- break;
-
- case 8:
- getEntities()->exitCompartment(kCharacterAlexei, kObjectCompartmentB);
- getEntities()->clearSequences(kCharacterAlexei);
- getData()->entityPosition = kPosition_8200;
- getData()->location = kLocationInsideCompartment;
- getObjects()->update(kObjectCompartmentA, kCharacterCath, kObjectLocation1, kCursorNormal, kCursorNormal);
- getObjects()->update(kObject48, kCharacterCath, kObjectLocation1, kCursorNormal, kCursorNormal);
-
- setCallback(9);
- setup_playSound("TAT4167");
- break;
-
- case 9:
- getSavePoints()->push(kCharacterAlexei, kCharacterMaster, kCharacterAction156435676);
- setup_function47();
- break;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(47, Alexei, function47)
- if (savepoint.action == kCharacterActionDefault) {
- getEntities()->clearSequences(kCharacterAlexei);
-
- getData()->entityPosition = kPositionNone;
- getData()->location = kLocationOutsideCompartment;
- getData()->car = kCarLocomotive;
-
- getObjects()->update(kObjectCompartment2, kCharacterCath, kObjectLocationNone, kCursorHandKnock, kCursorHand);
- getObjects()->update(kObjectHandleInsideBathroom, kCharacterCath, kObjectLocationNone, kCursorHandKnock, kCursorHand);
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(48, Alexei, chapter5)
- if (savepoint.action == kCharacterActionDefault)
- getEntities()->clearSequences(kCharacterAlexei);
-IMPLEMENT_FUNCTION_END
-
-} // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/alexei.h b/engines/lastexpress/entities/alexei.h
deleted file mode 100644
index 9499d50dd79..00000000000
--- a/engines/lastexpress/entities/alexei.h
+++ /dev/null
@@ -1,208 +0,0 @@
-/* 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/>.
- *
- */
-
-#ifndef LASTEXPRESS_ALEXEI_H
-#define LASTEXPRESS_ALEXEI_H
-
-#include "lastexpress/entities/entity.h"
-
-namespace LastExpress {
-
-class LastExpressEngine;
-
-class Alexei : public Entity {
-public:
- Alexei(LastExpressEngine *engine);
- ~Alexei() override {}
-
- /**
- * Resets the character
- */
- DECLARE_FUNCTION(reset)
-
- /**
- * Plays sound
- *
- * @param filename The sound filename
- */
- DECLARE_VFUNCTION_1(playSound, const char *filename)
-
- /**
- * Updates parameter 2 using time value
- *
- * @param time The time to add
- */
- DECLARE_FUNCTION_1(updateFromTime, uint32 time)
-
- /**
- * Draws the character
- *
- * @param sequence The sequence to draw
- */
- DECLARE_FUNCTION_1(draw, const char *sequence)
-
- /**
- * Updates the position
- *
- * @param sequence1 The sequence to draw
- * @param car The car
- * @param position The position
- */
- DECLARE_FUNCTION_3(updatePosition, const char *sequence1, CarIndex car, PositionOld position)
-
- /**
- * Handles entering/exiting a compartment.
- *
- * @param sequence The sequence to draw
- * @param compartment The compartment
- */
- DECLARE_VFUNCTION_2(enterExitCompartment, const char *sequence, ObjectIndex compartment)
-
- /**
- * Process callback action when the character direction is not kDirectionRight
- */
- DECLARE_FUNCTION(callbackActionOnDirection)
-
- /**
- * Call a savepoint (or draw sequence in default case)
- *
- * @param sequence1 The sequence to draw in the default case
- * @param character The character
- * @param action The action
- * @param sequence2 The sequence eraseData for the savepoint
- */
- DECLARE_FUNCTION_4(callSavepoint, const char *sequence1, CharacterIndex entity, CharacterActions action, const char *sequence2)
-
- /**
- * Saves the game
- *
- * @param savegameType The type of the savegame
- * @param param The param for the savegame (EventIndex or TimeValue)
- */
- DECLARE_VFUNCTION_2(savegame, SavegameType savegameType, uint32 param)
-
- /**
- * Updates the character
- *
- * @param car The car
- * @param entityPosition The character position
- */
- DECLARE_VFUNCTION_2(updateEntity, CarIndex car, EntityPosition entityPosition)
-
- /**
- * Draws the character along with another one
- *
- * @param savepoint The savepoint
- * - The sequence to draw
- * - The sequence to draw for the second character
- * - The CharacterIndex of the second character
- */
- DECLARE_FUNCTION_NOSETUP(draw2)
-
- /**
- * Process callback action when somebody is standing in the restaurant or salon.
- */
- DECLARE_FUNCTION(callbackActionRestaurantOrSalon)
-
- DECLARE_FUNCTION(enterComparment)
- DECLARE_FUNCTION(exitCompartment)
- DECLARE_FUNCTION(pacingAtWindow)
-
- /**
- * ???
- *
- * @param timeValue The time value
- * @param sequence The sequence to draw
- */
- DECLARE_FUNCTION_2(compartmentLogic, TimeValue timeValue, const char *sequence)
-
- /**
- * Setup Chapter 1
- */
- DECLARE_VFUNCTION(chapter1)
-
- /**
- * Handle Chapter 1 events
- */
- DECLARE_FUNCTION(atDinner)
- DECLARE_FUNCTION(returnCompartment)
- DECLARE_FUNCTION(goSalon)
- DECLARE_FUNCTION(sitting)
- DECLARE_FUNCTION(standingAtWindow)
- DECLARE_FUNCTION(waitingForTatiana)
- DECLARE_FUNCTION(upset)
- DECLARE_FUNCTION(returnCompartmentNight)
- DECLARE_FUNCTION(function26)
- DECLARE_FUNCTION(function27)
-
- /**
- * Setup Chapter 2
- */
- DECLARE_VFUNCTION(chapter2)
-
- /**
- * Handle Chapter 2 events
- */
- DECLARE_FUNCTION(inCompartment2)
- DECLARE_FUNCTION(atBreakfast)
- DECLARE_FUNCTION(returnCompartment2)
-
- /**
- * Setup Chapter 3
- */
- DECLARE_VFUNCTION(chapter3)
-
- /**
- * Handle Chapter 3 events
- */
- DECLARE_FUNCTION(playingChess)
- DECLARE_FUNCTION(inPart3)
- DECLARE_FUNCTION(pacing3)
- DECLARE_FUNCTION(goSalon3)
-
- /**
- * Setup Chapter 4
- */
- DECLARE_VFUNCTION(chapter4)
-
- /**
- * Handle Chapter 4 events
- */
- DECLARE_FUNCTION(inCompartment4)
- DECLARE_FUNCTION(meetTatiana)
- DECLARE_FUNCTION(leavePlatform)
- DECLARE_FUNCTION(inCompartmentAgain)
- DECLARE_FUNCTION(goSalon4)
- DECLARE_FUNCTION(pacing)
- DECLARE_FUNCTION(goToPlatform)
- DECLARE_FUNCTION(returnCompartment4)
- DECLARE_FUNCTION(bombPlanB)
- DECLARE_FUNCTION(function47)
-
- /**
- * Setup Chapter 5
- */
- DECLARE_VFUNCTION(chapter5)
-};
-
-} // End of namespace LastExpress
-
-#endif // LASTEXPRESS_ALEXEI_H
diff --git a/engines/lastexpress/entities/alouan.cpp b/engines/lastexpress/entities/alouan.cpp
deleted file mode 100644
index 84789440645..00000000000
--- a/engines/lastexpress/entities/alouan.cpp
+++ /dev/null
@@ -1,511 +0,0 @@
-/* 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/entities/alouan.h"
-
-#include "lastexpress/game/entities.h"
-#include "lastexpress/game/logic.h"
-#include "lastexpress/game/object.h"
-#include "lastexpress/game/savepoint.h"
-#include "lastexpress/game/state.h"
-
-#include "lastexpress/lastexpress.h"
-
-namespace LastExpress {
-
-Alouan::Alouan(LastExpressEngine *engine) : Entity(engine, kCharacterAlouan) {
- ADD_CALLBACK_FUNCTION(Alouan, reset);
- ADD_CALLBACK_FUNCTION_SI(Alouan, enterExitCompartment);
- ADD_CALLBACK_FUNCTION_S(Alouan, playSound);
- ADD_CALLBACK_FUNCTION_I(Alouan, updateFromTime);
- ADD_CALLBACK_FUNCTION_II(Alouan, updateEntity);
- ADD_CALLBACK_FUNCTION(Alouan, peekF);
- ADD_CALLBACK_FUNCTION(Alouan, peekH);
- ADD_CALLBACK_FUNCTION(Alouan, goFtoH);
- ADD_CALLBACK_FUNCTION(Alouan, goHtoF);
- ADD_CALLBACK_FUNCTION(Alouan, chapter1);
- ADD_CALLBACK_FUNCTION(Alouan, chapter1Handler);
- ADD_CALLBACK_FUNCTION(Alouan, function12);
- ADD_CALLBACK_FUNCTION(Alouan, chapter2);
- ADD_CALLBACK_FUNCTION(Alouan, chapter2Handler);
- ADD_CALLBACK_FUNCTION(Alouan, chapter3);
- ADD_CALLBACK_FUNCTION(Alouan, chapter3Handler);
- ADD_CALLBACK_FUNCTION(Alouan, chapter4);
- ADD_CALLBACK_FUNCTION(Alouan, chapter4Handler);
- ADD_CALLBACK_FUNCTION(Alouan, function19);
- ADD_CALLBACK_FUNCTION(Alouan, chapter5);
- ADD_CALLBACK_FUNCTION(Alouan, chapter5Handler);
- ADD_CALLBACK_FUNCTION(Alouan, function22);
- ADD_CALLBACK_FUNCTION(Alouan, hiding);
- ADD_NULL_FUNCTION();
-}
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(1, Alouan, reset)
- Entity::reset(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_SI(2, Alouan, enterExitCompartment, ObjectIndex)
- Entity::enterExitCompartment(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_S(3, Alouan, playSound)
- Entity::playSound(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_I(4, Alouan, updateFromTime, uint32)
- Entity::updateFromTime(savepoint);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_II(5, Alouan, updateEntity, CarIndex, EntityPosition)
- Entity::updateEntity(savepoint, true);
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(6, Alouan, peekF)
- Entity::goToCompartment(savepoint, kObjectCompartment6, kPosition_4070, "621Cf", "621Df");
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(7, Alouan, peekH)
- Entity::goToCompartment(savepoint, kObjectCompartment8, kPosition_2740, "621Ch", "621Dh");
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(8, Alouan, goFtoH)
- Entity::goToCompartmentFromCompartment(savepoint, kObjectCompartment6, kPosition_4070, "621Bf", kObjectCompartment8, kPosition_2740, "621Ah");
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(9, Alouan, goHtoF)
- Entity::goToCompartmentFromCompartment(savepoint, kObjectCompartment8, kPosition_2740, "621Bh", kObjectCompartment6, kPosition_4070, "621Af");
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(10, Alouan, chapter1)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Alouan, setup_chapter1Handler));
- break;
-
- case kCharacterActionDefault:
- getData()->entityPosition = kPosition_2740;
- getData()->location = kLocationInsideCompartment;
- getData()->car = kCarGreenSleeping;
-
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(11, Alouan, chapter1Handler)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
-
- if (Entity::timeCheckCallback(kTime1096200, params->param1, 1, WRAP_SETUP_FUNCTION(Alouan, setup_goHtoF)))
- break;
-
-label_callback1:
- if (getState()->time > kTime1162800 && !params->param2) {
- params->param2 = 1;
- getSavePoints()->push(kCharacterAlouan, kCharacterClerk, kCharacterAction191070912, kPosition_4070);
- getData()->entityPosition = kPosition_4070;
- }
-
- if (getState()->time > kTime1179000 && !params->param3) {
- params->param3 = 1;
- getSavePoints()->push(kCharacterAlouan, kCharacterClerk, kCharacterAction191070912, kPosition_4840);
-
- setCallback(2);
- setup_goFtoH();
- }
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getData()->entityPosition = kPosition_4840;
- goto label_callback1;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(12, Alouan, function12)
- if (savepoint.action == kCharacterActionDefault) {
- getObjects()->update(kObjectCompartment7, kCharacterCath, kObjectLocation3, kCursorHandKnock, kCursorHand);
- getObjects()->update(kObjectCompartment5, kCharacterCath, kObjectLocation3, kCursorHandKnock, kCursorHand);
-
- getData()->entityPosition = kPosition_4070;
- getData()->location = kLocationInsideCompartment;
- getData()->car = kCarGreenSleeping;
-
- getEntities()->clearSequences(kCharacterAlouan);
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(13, Alouan, chapter2)
- if (savepoint.action != kCharacterActionDefault)
- return;
-
- getEntities()->clearSequences(kCharacterAlouan);
-
- getData()->entityPosition = kPosition_2740;
- getData()->location = kLocationInsideCompartment;
- getData()->car = kCarGreenSleeping;
- getData()->clothes = kClothesDefault;
- getData()->inventoryItem = kItemNone;
-
- setup_chapter2Handler();
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(14, Alouan, chapter2Handler)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (params->param2 == kTimeInvalid)
- break;
-
- if (getState()->time <= kTime1777500) {
- if (!getEntities()->isPlayerInCar(kCarGreenSleeping) || !params->param2)
- params->param2 = (uint)getState()->time + 75;
-
- if (params->param2 >= getState()->time)
- break;
- }
-
- params->param2 = kTimeInvalid;
-
- setCallback(params->param1 ? 1 : 2);
- if (params->param1)
- setup_peekH();
- else
- setup_peekF();
- break;
-
- case kCharacterActionDefault:
- getSavePoints()->push(kCharacterAlouan, kCharacterClerk, kCharacterAction191070912, kPosition_4840);
- params->param1 = 1;
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 3:
- params->param1 = 0;
- setCallback(4);
- setup_playSound("Har2011");
- break;
-
- case 4:
- setCallback(5);
- setup_updateFromTime(900);
- break;
-
- case 5:
- getSavePoints()->push(kCharacterAlouan, kCharacterFrancois, kCharacterAction190219584);
- break;
- }
- break;
-
- case kCharacterAction189489753:
- setCallback(3);
- setup_goHtoF();
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(15, Alouan, chapter3)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- setup_chapter3Handler();
- break;
-
- case kCharacterActionDefault:
- getEntities()->clearSequences(kCharacterAlouan);
-
- getData()->entityPosition = kPosition_2740;
- getData()->location = kLocationInsideCompartment;
- getData()->car = kCarGreenSleeping;
-
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(16, Alouan, chapter3Handler)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (Entity::timeCheckCallback(kTimeCitySalzbourg, params->param1, 1, WRAP_SETUP_FUNCTION(Alouan, setup_goHtoF)))
- break;
-
-label_callback1:
- if (params->param2 != kTimeInvalid && getState()->time > kTime1989000) {
- if (Entity::timeCheckCar(kTime2119500, params->param2, 2, WRAP_SETUP_FUNCTION(Alouan, setup_peekF)))
- break;
- }
-
-label_callback2:
- if (Entity::timeCheckCallback(kTime2052000, params->param3, 3, "Har1005", WRAP_SETUP_FUNCTION_S(Alouan, setup_playSound)))
- break;
-
-label_callback3:
- if (Entity::timeCheckCallback(kTime2133000, params->param4, 4, WRAP_SETUP_FUNCTION(Alouan, setup_goFtoH)))
- break;
-
-label_callback4:
- if (params->param5 != kTimeInvalid && getState()->time > kTime2151000) {
- if (Entity::timeCheckCar(kTime2241000, params->param5, 5, WRAP_SETUP_FUNCTION(Alouan, setup_peekH)))
- break;
- }
- break;
-
- case kCharacterActionDefault:
- getSavePoints()->push(kCharacterAlouan, kCharacterClerk, kCharacterAction191070912, kPosition_4840);
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- getData()->entityPosition = kPosition_4840;
- goto label_callback1;
-
- case 2:
- goto label_callback2;
-
- case 3:
- goto label_callback3;
-
- case 4:
- goto label_callback4;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(17, Alouan, chapter4)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- setup_chapter4Handler();
- break;
-
- case kCharacterActionDefault:
- getEntities()->clearSequences(kCharacterAlouan);
-
- getData()->entityPosition = kPosition_2740;
- getData()->location = kLocationInsideCompartment;
- getData()->car = kCarGreenSleeping;
-
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(18, Alouan, chapter4Handler)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (params->param1 != kTimeInvalid) {
- if (Entity::timeCheckCar(kTime2443500, params->param1, 1, WRAP_SETUP_FUNCTION(Alouan, setup_peekH)))
- break;
- }
-
-label_callback1:
- if (Entity::timeCheckCallback(kTime2455200, params->param2, 2, WRAP_SETUP_FUNCTION(Alouan, setup_goHtoF)))
- break;
-
-label_callback2:
- if (getState()->time > kTime2475000 && !params->param3) {
- params->param3 = 1;
- getSavePoints()->push(kCharacterAlouan, kCharacterClerk, kCharacterAction191070912, kPosition_4840);
-
- setCallback(3);
- setup_goFtoH();
- }
- break;
-
- case kCharacterActionDefault:
- getSavePoints()->push(kCharacterAlouan, kCharacterClerk, kCharacterAction191070912, kPosition_4840);
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- goto label_callback1;
-
- case 2:
- getSavePoints()->push(kCharacterAlouan, kCharacterClerk, kCharacterAction191070912, kPosition_4070);
- goto label_callback2;
- }
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(19, Alouan, function19)
- if (savepoint.action == kCharacterActionDefault) {
- getObjects()->update(kObjectCompartment7, kCharacterCath, kObjectLocation3, kCursorHandKnock, kCursorHand);
- getObjects()->update(kObjectCompartment5, kCharacterCath, kObjectLocation3, kCursorHandKnock, kCursorHand);
-
- getData()->entityPosition = kPosition_2740;
- getData()->location = kLocationInsideCompartment;
- getData()->car = kCarGreenSleeping;
-
- getEntities()->clearSequences(kCharacterAlouan);
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(20, Alouan, chapter5)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- setup_chapter5Handler();
- break;
-
- case kCharacterActionDefault:
- getEntities()->clearSequences(kCharacterAlouan);
-
- getData()->entityPosition = kPosition_3969;
- getData()->location = kLocationInsideCompartment;
- getData()->car = kCarRestaurant;
- getData()->clothes = kClothesDefault;
- getData()->inventoryItem = kItemNone;
-
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(21, Alouan, chapter5Handler)
- if (savepoint.action == kCharacterActionProceedChapter5)
- setup_function22();
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(22, Alouan, function22)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionNone:
- if (!Entity::updateParameter(params->param1, getState()->time, 2700))
- break;
-
- setup_hiding();
- break;
-
- case kCharacterActionDefault:
- getData()->entityPosition = kPosition_5000;
- getData()->location = kLocationOutsideCompartment;
- getData()->car = kCarGreenSleeping;
- break;
-
- case kCharacterActionDrawScene:
- if (getEntities()->isInsideTrainCar(kCharacterCath, kCarGreenSleeping))
- setup_hiding();
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(23, Alouan, hiding)
- switch (savepoint.action) {
- default:
- break;
-
- case kCharacterActionDefault:
- setCallback(1);
- setup_updateEntity(kCarGreenSleeping, kPosition_4070);
- break;
-
- case kCharacterActionCallback:
- switch (getCallback()) {
- default:
- break;
-
- case 1:
- setCallback(2);
- setup_enterExitCompartment("619AF", kObjectCompartment6);
- break;
-
- case 2:
- getEntities()->clearSequences(kCharacterAlouan);
-
- getData()->entityPosition = kPosition_4070;
- getData()->location = kLocationInsideCompartment;
-
- getObjects()->update(kObjectCompartment6, kCharacterCath, kObjectLocation1, kCursorHandKnock, kCursorHand);
- break;
- }
- break;
-
- case kCharacterAction135800432:
- setup_nullfunction();
- break;
- }
-IMPLEMENT_FUNCTION_END
-
-//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_NULL_FUNCTION(24, Alouan)
-
-} // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/alouan.h b/engines/lastexpress/entities/alouan.h
deleted file mode 100644
index 733fac86358..00000000000
--- a/engines/lastexpress/entities/alouan.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/* 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/>.
- *
- */
-
-#ifndef LASTEXPRESS_ALOUAN_H
-#define LASTEXPRESS_ALOUAN_H
-
-#include "lastexpress/entities/entity.h"
-
-namespace LastExpress {
-
-class LastExpressEngine;
-
-class Alouan : public Entity {
-public:
- Alouan(LastExpressEngine *engine);
- ~Alouan() override {}
-
- /**
- * Resets the character
- */
- DECLARE_FUNCTION(reset)
-
- /**
- * Handles entering/exiting a compartment.
- *
- * @param sequence The sequence to draw
- * @param compartment The compartment
- */
- DECLARE_VFUNCTION_2(enterExitCompartment, const char *sequence, ObjectIndex compartment)
-
- /**
- * Plays sound
- *
- * @param filename The sound filename
- */
- DECLARE_VFUNCTION_1(playSound, const char *filename)
-
- /**
- * Updates parameter 2 using time value
- *
- * @param time The time to add
- */
- DECLARE_FUNCTION_1(updateFromTime, uint32 time)
-
- /**
- * Updates the character
- *
- * @param car The car
- * @param entityPosition The character position
- */
- DECLARE_VFUNCTION_2(updateEntity, CarIndex car, EntityPosition entityPosition)
-
- DECLARE_FUNCTION(peekF)
- DECLARE_FUNCTION(peekH)
- DECLARE_FUNCTION(goFtoH)
- DECLARE_FUNCTION(goHtoF)
-
- /**
- * Setup Chapter 1
- */
- DECLARE_VFUNCTION(chapter1)
-
- /**
- * Handle Chapter 1 events
- */
- DECLARE_FUNCTION(chapter1Handler)
- DECLARE_FUNCTION(function12)
-
- /**
- * Setup Chapter 2
- */
- DECLARE_VFUNCTION(chapter2)
-
- /**
- * Handle Chapter 2 events
- */
- DECLARE_FUNCTION(chapter2Handler)
-
- /**
- * Setup Chapter 3
- */
- DECLARE_VFUNCTION(chapter3)
-
- /**
- * Handle Chapter 3 events
- */
- DECLARE_FUNCTION(chapter3Handler)
Commit: 3c4eeaeec6e437aab8a14252587bed323dd29059
https://github.com/scummvm/scummvm/commit/3c4eeaeec6e437aab8a14252587bed323dd29059
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix trivial MSVC warnings
Changed paths:
engines/lastexpress/characters/vesna.cpp
engines/lastexpress/game/events.cpp
engines/lastexpress/game/logic.cpp
engines/lastexpress/game/nis.cpp
engines/lastexpress/game/nis.h
engines/lastexpress/game/otis.cpp
engines/lastexpress/game/vcr.cpp
engines/lastexpress/sound/mixer.cpp
engines/lastexpress/sound/slot.cpp
engines/lastexpress/sound/sound.cpp
engines/lastexpress/sound/subtitle.cpp
diff --git a/engines/lastexpress/characters/vesna.cpp b/engines/lastexpress/characters/vesna.cpp
index 45828a4d7b3..b1af56b88b2 100644
--- a/engines/lastexpress/characters/vesna.cpp
+++ b/engines/lastexpress/characters/vesna.cpp
@@ -760,7 +760,6 @@ void LogicManager::HAND_Vesna_InComp(HAND_PARAMS) {
}
}
- LABEL_40:
setDoor(38, kCharacterVesna, 3, 0, 0);
if (msg->action == 9) {
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 1;
diff --git a/engines/lastexpress/game/events.cpp b/engines/lastexpress/game/events.cpp
index 3fa646a21d5..60cf2567c58 100644
--- a/engines/lastexpress/game/events.cpp
+++ b/engines/lastexpress/game/events.cpp
@@ -255,10 +255,10 @@ void MessageManager::saveMessages(CVCRFile *file) {
assert(msgData);
for (int i = 0; i < 128; i++) {
- WRITE_LE_UINT32(msgData + (i * 16) + 0, _autoMessages[i].receiver);
- WRITE_LE_UINT32(msgData + (i * 16) + 4, _autoMessages[i].action);
- WRITE_LE_UINT32(msgData + (i * 16) + 8, _autoMessages[i].sender);
- WRITE_LE_UINT32(msgData + (i * 16) + 12, _autoMessages[i].param.intParam);
+ WRITE_LE_INT32(msgData + (i * 16) + 0, _autoMessages[i].receiver);
+ WRITE_LE_INT32(msgData + (i * 16) + 4, _autoMessages[i].action);
+ WRITE_LE_INT32(msgData + (i * 16) + 8, _autoMessages[i].sender);
+ WRITE_LE_INT32(msgData + (i * 16) + 12, _autoMessages[i].param.intParam);
}
file->writeRLE(msgData, 16, 128);
@@ -276,10 +276,10 @@ void MessageManager::saveMessages(CVCRFile *file) {
msgData = (byte *)malloc(16);
assert(msgData);
- WRITE_LE_UINT32(msgData + 0, msgToSave->receiver);
- WRITE_LE_UINT32(msgData + 4, msgToSave->action);
- WRITE_LE_UINT32(msgData + 8, msgToSave->sender);
- WRITE_LE_UINT32(msgData + 12, msgToSave->param.intParam);
+ WRITE_LE_INT32(msgData + 0, msgToSave->receiver);
+ WRITE_LE_INT32(msgData + 4, msgToSave->action);
+ WRITE_LE_INT32(msgData + 8, msgToSave->sender);
+ WRITE_LE_INT32(msgData + 12, msgToSave->param.intParam);
nextIdx = (nextIdx + 1) & 0x7F;
file->writeRLE(msgData, 16, 1);
@@ -297,10 +297,10 @@ void MessageManager::loadMessages(CVCRFile *file) {
file->readRLE(msgData, 16, 128);
for (int i = 0; i < 128; i++) {
- _autoMessages[i].receiver = READ_LE_UINT32(msgData + (i * 16) + 0);
- _autoMessages[i].action = READ_LE_UINT32(msgData + (i * 16) + 4);
- _autoMessages[i].sender = READ_LE_UINT32(msgData + (i * 16) + 8);
- _autoMessages[i].param.intParam = READ_LE_UINT32(msgData + (i * 16) + 12);
+ _autoMessages[i].receiver = READ_LE_INT32(msgData + (i * 16) + 0);
+ _autoMessages[i].action = READ_LE_INT32(msgData + (i * 16) + 4);
+ _autoMessages[i].sender = READ_LE_INT32(msgData + (i * 16) + 8);
+ _autoMessages[i].param.intParam = READ_LE_INT32(msgData + (i * 16) + 12);
_autoMessages[i].param.stringParam = nullptr;
}
@@ -317,12 +317,11 @@ void MessageManager::loadMessages(CVCRFile *file) {
file->readRLE(msgData, 16, 1);
- uint32 receiver = READ_LE_UINT32(msgData + 0);
- uint32 action = READ_LE_UINT32(msgData + 4);
- uint32 sender = READ_LE_UINT32(msgData + 8);
- ConsCallParam param;
- param.intParam = READ_LE_UINT32(msgData + 12);
- param.stringParam = nullptr;
+ loadedMsg.receiver = READ_LE_INT32(msgData + 0);
+ loadedMsg.action = READ_LE_INT32(msgData + 4);
+ loadedMsg.sender = READ_LE_INT32(msgData + 8);
+ loadedMsg.param.intParam = READ_LE_INT32(msgData + 12);
+ loadedMsg.param.stringParam = nullptr;
addMessage(loadedMsg.receiver, loadedMsg.action, loadedMsg.sender, loadedMsg.param);
free(msgData);
diff --git a/engines/lastexpress/game/logic.cpp b/engines/lastexpress/game/logic.cpp
index 5ceca32f0d1..0074c0c87ed 100644
--- a/engines/lastexpress/game/logic.cpp
+++ b/engines/lastexpress/game/logic.cpp
@@ -1091,9 +1091,9 @@ bool LogicManager::obstacleBetween(int character1, int character2) {
char2Pos = getCharacter(character2).characterPosition.position;
}
- for (i = 7; i > -1 && _objectPosition[i] < char1Pos; i--);
+ for (i = 7; i > -1 && _objectPosition[i] < (int)char1Pos; i--);
- for (j = 0; j < 8 && _objectPosition[j] > char2Pos; j++);
+ for (j = 0; j < 8 && _objectPosition[j] > (int)char2Pos; j++);
if (i > -1 && j < 8) {
while (j <= i) {
@@ -1471,7 +1471,6 @@ void LogicManager::bumpCathTylerComp() {
}
int LogicManager::getSmartBumpNode(int node) {
- int result;
uint8 effDir;
uint16 car = _trainData[node].nodePosition.car;
@@ -1874,140 +1873,139 @@ void LogicManager::queueSFX(int character, uint8 action, uint8 delay) {
if (inSalon(character) == inSalon(kCharacterCath)) {
sndNum = action;
volume = getVolume(character);
- if (action < 256) {
- switch (action) {
- case 36:
- ambientLevel = 16;
- if (volume <= 9)
- ambientLevel = volume + 7;
- _engine->getSoundManager()->raiseAmbient(ambientLevel, delay);
- break;
- case 37:
- _engine->getSoundManager()->levelAmbient(delay);
- break;
- case 150:
- sndArray[0] = 151;
- sndArray[1] = 152;
- sndArray[2] = 153;
- sndArray[3] = 154;
- sndArray[4] = 155;
- sndNum = sndArray[rnd(5)];
- break;
- case 156:
- sndArray[0] = 157;
- sndArray[1] = 158;
- sndArray[2] = 159;
- sndArray[3] = 160;
- sndArray[4] = 161;
- sndNum = sndArray[rnd(5)];
- break;
- case 162:
- sndArray[0] = 163;
- sndArray[1] = 164;
- sndArray[2] = 165;
- sndArray[3] = 166;
- sndArray[4] = 167;
- sndNum = sndArray[rnd(5)];
- break;
- case 168:
- sndArray[0] = 169;
- sndArray[1] = 170;
- sndArray[2] = 171;
- sndArray[3] = 172;
- sndArray[4] = 173;
- sndNum = sndArray[rnd(5)];
- break;
- case 174:
- sndArray[0] = 175;
- sndArray[1] = 176;
- sndArray[2] = 177;
- sndNum = sndArray[rnd(3)];
- break;
- case 180:
- sndArray[0] = 181;
- sndArray[1] = 182;
- sndArray[2] = 183;
- sndArray[3] = 184;
- sndNum = sndArray[rnd(4)];
- break;
- case 184:
- sndArray[0] = 185;
- sndArray[1] = 186;
- sndArray[2] = 187;
- sndNum = sndArray[rnd(3)];
- break;
- case 188:
- sndArray[0] = 189;
- sndArray[1] = 190;
- sndArray[2] = 191;
- sndArray[3] = 192;
- sndArray[4] = 193;
- sndNum = sndArray[rnd(5)];
- break;
- case 194:
- sndArray[0] = -61;
- sndArray[1] = 196;
- sndArray[2] = 197;
- sndNum = sndArray[rnd(3)];
- break;
- case 198:
- sndArray[0] = -57;
- sndArray[1] = 200;
- sndArray[2] = 201;
- sndArray[3] = 202;
- sndArray[4] = 203;
- sndNum = sndArray[rnd(5)];
- break;
- case 246:
- sndArray[0] = 0;
- memcpy(&sndArray[1], "hint", 4);
- sndNum = sndArray[rnd(5)];
- break;
- case 247:
- sndArray[0] = 11;
- memcpy(&sndArray[1], "{|", 2);
- sndNum = sndArray[rnd(3)];
- break;
- case 248:
- sndArray[0] = 0;
- memcpy(&sndArray[1], "glm", 3);
- sndNum = sndArray[rnd(4)];
- break;
- case 249:
- sndArray[0] = 0;
- memcpy(&sndArray[1], "8pq", 3);
- sndNum = sndArray[rnd(4)];
- break;
- case 250:
- sndArray[0] = 0;
- memcpy(&sndArray[1], "ksu", 3);
- sndNum = sndArray[rnd(4)];
- break;
- case 251:
- sndArray[0] = 0;
- sndArray[1] = 11;
- memcpy(&sndArray[2], "8q", 2);
- sndNum = sndArray[rnd(4)];
- break;
- case 252:
- sndArray[0] = 0;
- sndArray[1] = 6;
- memcpy(&sndArray[2], "my", 2);
- sndNum = sndArray[rnd(4)];
- break;
- case 254:
- sndArray[0] = 0;
- memcpy(&sndArray[1], "hxy", 3);
- sndNum = sndArray[rnd(4)];
- break;
- case 255:
- sndArray[0] = 0;
- memcpy(&sndArray[1], "js", 2);
- sndNum = sndArray[rnd(3)];
- break;
- default:
- break;
- }
+
+ switch (action) {
+ case 36:
+ ambientLevel = 16;
+ if (volume <= 9)
+ ambientLevel = volume + 7;
+ _engine->getSoundManager()->raiseAmbient(ambientLevel, delay);
+ break;
+ case 37:
+ _engine->getSoundManager()->levelAmbient(delay);
+ break;
+ case 150:
+ sndArray[0] = 151;
+ sndArray[1] = 152;
+ sndArray[2] = 153;
+ sndArray[3] = 154;
+ sndArray[4] = 155;
+ sndNum = sndArray[rnd(5)];
+ break;
+ case 156:
+ sndArray[0] = 157;
+ sndArray[1] = 158;
+ sndArray[2] = 159;
+ sndArray[3] = 160;
+ sndArray[4] = 161;
+ sndNum = sndArray[rnd(5)];
+ break;
+ case 162:
+ sndArray[0] = 163;
+ sndArray[1] = 164;
+ sndArray[2] = 165;
+ sndArray[3] = 166;
+ sndArray[4] = 167;
+ sndNum = sndArray[rnd(5)];
+ break;
+ case 168:
+ sndArray[0] = 169;
+ sndArray[1] = 170;
+ sndArray[2] = 171;
+ sndArray[3] = 172;
+ sndArray[4] = 173;
+ sndNum = sndArray[rnd(5)];
+ break;
+ case 174:
+ sndArray[0] = 175;
+ sndArray[1] = 176;
+ sndArray[2] = 177;
+ sndNum = sndArray[rnd(3)];
+ break;
+ case 180:
+ sndArray[0] = 181;
+ sndArray[1] = 182;
+ sndArray[2] = 183;
+ sndArray[3] = 184;
+ sndNum = sndArray[rnd(4)];
+ break;
+ case 184:
+ sndArray[0] = 185;
+ sndArray[1] = 186;
+ sndArray[2] = 187;
+ sndNum = sndArray[rnd(3)];
+ break;
+ case 188:
+ sndArray[0] = 189;
+ sndArray[1] = 190;
+ sndArray[2] = 191;
+ sndArray[3] = 192;
+ sndArray[4] = 193;
+ sndNum = sndArray[rnd(5)];
+ break;
+ case 194:
+ sndArray[0] = 195;
+ sndArray[1] = 196;
+ sndArray[2] = 197;
+ sndNum = sndArray[rnd(3)];
+ break;
+ case 198:
+ sndArray[0] = 198;
+ sndArray[1] = 200;
+ sndArray[2] = 201;
+ sndArray[3] = 202;
+ sndArray[4] = 203;
+ sndNum = sndArray[rnd(5)];
+ break;
+ case 246:
+ sndArray[0] = 0;
+ memcpy(&sndArray[1], "hint", 4);
+ sndNum = sndArray[rnd(5)];
+ break;
+ case 247:
+ sndArray[0] = 11;
+ memcpy(&sndArray[1], "{|", 2);
+ sndNum = sndArray[rnd(3)];
+ break;
+ case 248:
+ sndArray[0] = 0;
+ memcpy(&sndArray[1], "glm", 3);
+ sndNum = sndArray[rnd(4)];
+ break;
+ case 249:
+ sndArray[0] = 0;
+ memcpy(&sndArray[1], "8pq", 3);
+ sndNum = sndArray[rnd(4)];
+ break;
+ case 250:
+ sndArray[0] = 0;
+ memcpy(&sndArray[1], "ksu", 3);
+ sndNum = sndArray[rnd(4)];
+ break;
+ case 251:
+ sndArray[0] = 0;
+ sndArray[1] = 11;
+ memcpy(&sndArray[2], "8q", 2);
+ sndNum = sndArray[rnd(4)];
+ break;
+ case 252:
+ sndArray[0] = 0;
+ sndArray[1] = 6;
+ memcpy(&sndArray[2], "my", 2);
+ sndNum = sndArray[rnd(4)];
+ break;
+ case 254:
+ sndArray[0] = 0;
+ memcpy(&sndArray[1], "hxy", 3);
+ sndNum = sndArray[rnd(4)];
+ break;
+ case 255:
+ sndArray[0] = 0;
+ memcpy(&sndArray[1], "js", 2);
+ sndNum = sndArray[rnd(3)];
+ break;
+ default:
+ break;
}
if (sndNum) {
@@ -3293,7 +3291,7 @@ bool LogicManager::walk(int character, int car, int position) {
if (!_engine->getOtisManager()->rDirection(0))
return false;
} else {
- if (cathPos >= characterPosition || characterPosition - cathPos < 500 || characterPosition - cathPos >= (uint16)getCharacter(character).walkStepSize + 500) {
+ if (cathPos >= characterPosition || characterPosition - cathPos < 500 || (int32)(characterPosition - cathPos) >= getCharacter(character).walkStepSize + 500) {
return false;
}
diff --git a/engines/lastexpress/game/nis.cpp b/engines/lastexpress/game/nis.cpp
index ef3312425c7..cee8a57f96c 100644
--- a/engines/lastexpress/game/nis.cpp
+++ b/engines/lastexpress/game/nis.cpp
@@ -92,7 +92,7 @@ void NISManager::convertNSPR16(byte *spriteData, NisSprite *outSprite) {
outSprite->eraseMask = &spriteData[eraseMaskOffset];
}
-void NISManager::getStream(byte *data, uint32 size) {
+void NISManager::getStream(byte *data, int32 size) {
if (size > _remainingStreamBytes) {
Slot *slot;
@@ -128,10 +128,10 @@ void NISManager::getStream(byte *data, uint32 size) {
}
}
-void NISManager::loadSnd(uint32 size) {
+void NISManager::loadSnd(int32 size) {
byte *currentBufferPtr = _currentNISSound->getCurrentBufferPtr();
byte *dataEnd = _currentNISSound->getDataEnd();
- uint32 availableSize = dataEnd - currentBufferPtr;
+ int32 availableSize = dataEnd - currentBufferPtr;
if (size < dataEnd - currentBufferPtr) {
getStream(_currentNISSound->getCurrentBufferPtr(), size);
@@ -148,7 +148,7 @@ void NISManager::loadSnd(uint32 size) {
memcpy(_currentNISSound->getDataEnd(), _currentNISSound->getDataStart(), NIS_SOUND_CHUNK_SIZE);
}
-int NISManager::loadChunk(uint32 size) {
+int NISManager::loadChunk(int32 size) {
int32 sizeToLoad = _totalStreamPages - ((_remainingStreamBytes + 2047) / PAGE_SIZE);
if (!_archive || (_archive->status & 2) == 0)
@@ -194,7 +194,6 @@ int NISManager::loadChunk(uint32 size) {
bool NISManager::initNIS(const char *filename, int32 flags) {
int32 chunkSizeRead = 0;
int32 eventSize = 0;
- int32 *p_eventSize = nullptr;
Slot *slot;
_currentNISSound = nullptr;
diff --git a/engines/lastexpress/game/nis.h b/engines/lastexpress/game/nis.h
index 9efe940eeb6..977246a9627 100644
--- a/engines/lastexpress/game/nis.h
+++ b/engines/lastexpress/game/nis.h
@@ -49,9 +49,9 @@ public:
void clearBounds();
void addBounds(Extent extent);
void convertNSPR16(byte *spriteData, NisSprite *outSprite);
- void getStream(byte *data, uint32 size);
- void loadSnd(uint32 size);
- int loadChunk(uint32 size);
+ void getStream(byte *data, int32 size);
+ void loadSnd(int32 size);
+ int loadChunk(int32 size);
bool initNIS(const char *filename, int32 flags);
void endNIS();
void abortNIS();
@@ -88,7 +88,7 @@ private:
Slot *_chainedSoundSlot = nullptr;
int32 _streamCurrentPosition = 0;
- uint32 _currentStreamPage = 0;
+ int32 _currentStreamPage = 0;
int32 _totalStreamPages = 0;
int32 _remainingStreamBytes = 0;
int32 _streamBufferSize = 0;
diff --git a/engines/lastexpress/game/otis.cpp b/engines/lastexpress/game/otis.cpp
index 205dc3f622d..d061d35460a 100644
--- a/engines/lastexpress/game/otis.cpp
+++ b/engines/lastexpress/game/otis.cpp
@@ -98,7 +98,6 @@ void OtisManager::wipeAllGSysInfo() {
bool OtisManager::fDirection(int nodeIdx) {
uint16 car;
uint8 cathDir;
- bool result = false;
if (!nodeIdx)
nodeIdx = _engine->getLogicManager()->_trainNodeIndex;
@@ -117,7 +116,6 @@ bool OtisManager::fDirection(int nodeIdx) {
bool OtisManager::rDirection(int nodeIdx) {
uint16 car;
uint8 cathDir;
- bool result = false;
if (!nodeIdx)
nodeIdx = _engine->getLogicManager()->_trainNodeIndex;
@@ -136,7 +134,6 @@ bool OtisManager::rDirection(int nodeIdx) {
bool OtisManager::doorView() {
uint16 car;
uint8 cathDir;
- bool result = false;
int32 nodeIdx = _engine->getLogicManager()->_trainNodeIndex;
@@ -157,7 +154,6 @@ bool OtisManager::doorView() {
bool OtisManager::corrRender(int nodeIdx) {
uint16 car;
uint8 cathDir;
- bool result = false;
if (!nodeIdx)
nodeIdx = _engine->getLogicManager()->_trainNodeIndex;
@@ -703,10 +699,10 @@ void OtisManager::drawLooseSprites() {
int offset;
if (corrRender(0)) {
- if (getCharacter(kCharacterCath).characterPosition.car == 3) {
+ if (getCharacter(kCharacterCath).characterPosition.car == kCarGreenSleeping) {
offset = 1;
} else {
- if (getCharacter(kCharacterCath).characterPosition.car != 4)
+ if (getCharacter(kCharacterCath).characterPosition.car != kCarRedSleeping)
return;
offset = 32;
}
@@ -714,10 +710,10 @@ void OtisManager::drawLooseSprites() {
for (int k = offset; k < offset + 8; ++k) {
if (_engine->getLogicManager()->_gameObjects[k].door == 2) {
Common::sprintf_s(seqName, "633X%c-%02d.seq", k - offset + 65, _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_trainNodeIndex].cathDir);
- _engine->_doorSeqs[k - offset] = _engine->getArchiveManager()->loadSeq(seqName, 0xFFu, 0);
+ _engine->_doorSeqs[k - offset] = _engine->getArchiveManager()->loadSeq(seqName, 255, 0);
if (_engine->_doorSeqs[k - offset]) {
if (fDirection(0)) {
- _engine->_doorSeqs[k - offset]->sprites->hotspotPriority = -1 - (k - offset);
+ _engine->_doorSeqs[k - offset]->sprites->hotspotPriority = offset - k - 1;
} else {
_engine->_doorSeqs[k - offset]->sprites->hotspotPriority = k - offset - 8;
}
@@ -726,13 +722,13 @@ void OtisManager::drawLooseSprites() {
}
}
}
- } else if (_engine->getLogicManager()->_trainData[_engine->getLogicManager()->_trainNodeIndex].nodePosition.car == 5 && _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_trainNodeIndex].cathDir == 81) {
+ } else if (_engine->getLogicManager()->_trainData[_engine->getLogicManager()->_trainNodeIndex].nodePosition.car == kCarRestaurant && _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_trainNodeIndex].cathDir == 81) {
Common::sprintf_s(seqName, "SCLKH-%02d.seq", _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_trainNodeIndex].cathDir);
- _engine->_clockHandsSeqs[0] = _engine->getArchiveManager()->loadSeq(seqName, 0xFFu, 0);
+ _engine->_clockHandsSeqs[0] = _engine->getArchiveManager()->loadSeq(seqName, 255, 0);
int32 hours = _engine->getLogicManager()->_gameTime % 1296000 % 54000 / 900;
Common::sprintf_s(seqName, "SCLKM-%02d.seq", _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_trainNodeIndex].cathDir);
- _engine->_clockHandsSeqs[1] = _engine->getArchiveManager()->loadSeq(seqName, 0xFFu, 0);
+ _engine->_clockHandsSeqs[1] = _engine->getArchiveManager()->loadSeq(seqName, 255, 0);
int32 period = _engine->getLogicManager()->_gameTime % 1296000 / 54000;
if (period >= 12)
@@ -741,11 +737,11 @@ void OtisManager::drawLooseSprites() {
int32 minutes = hours / 12 + 5 * period;
if (_engine->_clockHandsSeqs[0] && _engine->_clockHandsSeqs[1]) {
- _engine->_clockHandsSeqs[0]->sprites[hours].hotspotPriority = -2;
+ _engine->_clockHandsSeqs[0]->sprites[hours].hotspotPriority = 0xFFFE;
_engine->getSpriteManager()->drawSprite(&_engine->_clockHandsSeqs[0]->sprites[hours]);
_engine->_clockHandsValues[0] = hours;
- _engine->_clockHandsSeqs[1]->sprites[minutes].hotspotPriority = -1;
+ _engine->_clockHandsSeqs[1]->sprites[minutes].hotspotPriority = 0xFFFF;
_engine->getSpriteManager()->drawSprite(&_engine->_clockHandsSeqs[1]->sprites[minutes]);
_engine->_clockHandsValues[1] = minutes;
}
@@ -928,7 +924,7 @@ int OtisManager::findFrame(int character, Seq *sequence, int position, bool doPr
}
void OtisManager::initCurFrame(int character) {
- uint32 ticks;
+ int32 ticks;
int curFrameIdx;
int tmpRemainingFrames;
bool foundCurrentFrame = false;
@@ -1066,7 +1062,7 @@ void OtisManager::initCurFrame(int character) {
tmpRemainingFrames = -1;
while (!foundCurrentFrame && curFrameIdx < getCharacter(character).sequence1->numFrames) {
- if (ticks + getCharacter(character).sequence1->sprites[curFrameIdx].ticksToWaitUntilCycleRestart >= (uint16)getCharacter(character).elapsedFrames) {
+ if (ticks + getCharacter(character).sequence1->sprites[curFrameIdx].ticksToWaitUntilCycleRestart >= getCharacter(character).elapsedFrames) {
foundCurrentFrame = true;
} else {
if (ticks > (getCharacter(character).elapsedFrames - 10) && getCharacter(character).sequence1->sprites[curFrameIdx].soundAction) {
diff --git a/engines/lastexpress/game/vcr.cpp b/engines/lastexpress/game/vcr.cpp
index bf074665019..fb58f1370ff 100644
--- a/engines/lastexpress/game/vcr.cpp
+++ b/engines/lastexpress/game/vcr.cpp
@@ -640,7 +640,7 @@ void VCR::seekToTime(int32 time) {
}
void VCR::updateCurGame(int32 fromTime, int32 toTime, bool searchEntry) {
- uint32 minTimeDiff = 0xFFFFFFFF;
+ int32 minTimeDiff = 0x7FFFFFFF;
int newMenuIdx = 0;
if (toTime != fromTime) {
diff --git a/engines/lastexpress/sound/mixer.cpp b/engines/lastexpress/sound/mixer.cpp
index 67ff26232bf..afeaac99577 100644
--- a/engines/lastexpress/sound/mixer.cpp
+++ b/engines/lastexpress/sound/mixer.cpp
@@ -455,7 +455,6 @@ void SoundManager::mixEngine() {
Slot *cachedSlot;
Slot *nextCachedSlot;
- Slot *soundEntry;
Slot *soundChannels[6];
if (_soundEngineToggle) {
diff --git a/engines/lastexpress/sound/slot.cpp b/engines/lastexpress/sound/slot.cpp
index c6b13e605d0..d6bd5b10206 100644
--- a/engines/lastexpress/sound/slot.cpp
+++ b/engines/lastexpress/sound/slot.cpp
@@ -390,7 +390,7 @@ bool Slot::getBuffer() {
for (chosenSlot = nullptr; cacheSlots; cacheSlots = cacheSlots->getNext()) {
if ((cacheSlots->getStatusFlags() & kSoundFlagMute) == 0) {
- if (cacheSlots->getPriority() + (getStatusFlags() & kSoundVolumeMask) < effPrio) {
+ if (cacheSlots->getPriority() + (int)(getStatusFlags() & kSoundVolumeMask) < effPrio) {
chosenSlot = cacheSlots;
effPrio = cacheSlots->getPriority() + (getStatusFlags() & kSoundVolumeMask);
}
diff --git a/engines/lastexpress/sound/sound.cpp b/engines/lastexpress/sound/sound.cpp
index b8698d667be..a5eee300a89 100644
--- a/engines/lastexpress/sound/sound.cpp
+++ b/engines/lastexpress/sound/sound.cpp
@@ -403,7 +403,7 @@ void SoundManager::soundThread() {
if (_numActiveChannels < 6 && (cachedSlot->getStatusFlags() & kSoundVolumeMask) != 0) {
priority = cachedSlot->getPriority();
- if (priority + (cachedSlot->getStatusFlags() & kSoundVolumeMask) > maxPriority) {
+ if (priority + (int)(cachedSlot->getStatusFlags() & kSoundVolumeMask) > maxPriority) {
slotToDevirtualize = cachedSlot;
maxPriority = (cachedSlot->getStatusFlags() & kSoundVolumeMask) + priority;
}
diff --git a/engines/lastexpress/sound/subtitle.cpp b/engines/lastexpress/sound/subtitle.cpp
index a135834b598..71cedfb4080 100644
--- a/engines/lastexpress/sound/subtitle.cpp
+++ b/engines/lastexpress/sound/subtitle.cpp
@@ -209,7 +209,7 @@ void SubtitleManager::initSubtitles() {
assert(_font->fontData);
- for (int i = 0; !fontStream->eos() && i < sizeOfData; i++) {
+ for (uint i = 0; !fontStream->eos() && i < sizeOfData; i++) {
_font->fontData[i] = fontStream->readByte();
}
Commit: 77835fc7e8802786d6d793d65c4cff5b4b56f828
https://github.com/scummvm/scummvm/commit/77835fc7e8802786d6d793d65c4cff5b4b56f828
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Rewrite Master logic
Changed paths:
engines/lastexpress/characters/master.cpp
diff --git a/engines/lastexpress/characters/master.cpp b/engines/lastexpress/characters/master.cpp
index 4bfa29f7a2f..9d2162fbfd8 100644
--- a/engines/lastexpress/characters/master.cpp
+++ b/engines/lastexpress/characters/master.cpp
@@ -28,7 +28,8 @@ void LogicManager::CONS_Master(int chapter) {
case 0:
_engine->getMessageManager()->setMessageHandle(
kCharacterMaster,
- _functionsMaster[getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall]]);
+ _functionsMaster[getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall]]
+ );
break;
case 1:
@@ -47,7 +48,7 @@ void LogicManager::CONS_Master(int chapter) {
CONS_Master_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -71,29 +72,33 @@ void LogicManager::CONS_Master_SaveGame(CONS_PARAMS) {
}
void LogicManager::HAND_Master_SaveGame(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- save(
- kCharacterMaster,
- getCharacterCurrentParams(kCharacterMaster)[0],
- getCharacterCurrentParams(kCharacterMaster)[1]
- );
-
- getCharacter(kCharacterMaster).currentCall--;
+ switch (msg->action) {
+ case 0:
+ getCharacter(kCharacterMaster).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(
+ kCharacterMaster,
+ _functionsMaster[getCharacter(kCharacterMaster).callbacks[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]
+ );
- fedEx(kCharacterMaster, kCharacterMaster, 18, 0);
- }
- } else {
getCharacter(kCharacterMaster).currentCall--;
+
_engine->getMessageManager()->setMessageHandle(
kCharacterMaster,
_functionsMaster[getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall]]);
fedEx(kCharacterMaster, kCharacterMaster, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -111,7 +116,8 @@ void LogicManager::CONS_Master_Arrive(CONS_PARAMS) {
}
void LogicManager::HAND_Master_Arrive(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (getCharacterParams(kCharacterMaster, 8)[1] || getCharacterParams(kCharacterMaster, 8)[2]) {
endDialog(kCharacterMaster);
@@ -120,20 +126,20 @@ void LogicManager::HAND_Master_Arrive(HAND_PARAMS) {
if (getCharacter(kCharacterCath).characterPosition.location == 2) {
if (cathOutHisWindow()) {
- bumpCath(3, 49, 255);
+ bumpCath(kCarGreenSleeping, 49, 255);
} else if (cathOutRebeccaWindow()) {
- bumpCath(4, 49, 255);
- } else if (getCharacter(kCharacterCath).characterPosition.car < 4 || getCharacter(kCharacterCath).characterPosition.car > 7) {
- if (getCharacter(kCharacterCath).characterPosition.car && getCharacter(kCharacterCath).characterPosition.car <= 3) {
- if (checkCathDir(3, 98)) {
+ 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(3, 71, 255);
+ bumpCath(kCarGreenSleeping, 71, 255);
} else {
- bumpCath(3, 82, 255);
+ bumpCath(kCarGreenSleeping, 82, 255);
}
}
} else {
- bumpCath(5, 82, 255);
+ bumpCath(kCarRestaurant, 82, 255);
}
}
@@ -157,9 +163,13 @@ void LogicManager::HAND_Master_Arrive(HAND_PARAMS) {
getCharacter(kCharacterMaster).currentCall--;
_engine->getMessageManager()->setMessageHandle(
kCharacterMaster,
- _functionsMaster[getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall]]);
+ _functionsMaster[getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall]]
+ );
fedEx(kCharacterMaster, kCharacterMaster, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -176,7 +186,8 @@ void LogicManager::CONS_Master_Depart(CONS_PARAMS) {
}
void LogicManager::HAND_Master_Depart(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (getCharacterParams(kCharacterMaster, 8)[1] || getCharacterParams(kCharacterMaster, 8)[2]) {
endDialog(kCharacterMaster);
@@ -188,8 +199,8 @@ void LogicManager::HAND_Master_Depart(HAND_PARAMS) {
bumpCath(kCarGreenSleeping, 49, 255);
} else 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) {
+ } 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);
@@ -226,6 +237,9 @@ void LogicManager::HAND_Master_Depart(HAND_PARAMS) {
);
fedEx(kCharacterMaster, kCharacterMaster, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -240,9 +254,13 @@ void LogicManager::CONS_Master_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Master_Birth(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
autoMessage(kCharacterMaster, 171843264, 0);
CONS_Master_StartPart1(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -257,7 +275,8 @@ void LogicManager::CONS_Master_WalkTest(CONS_PARAMS) {
}
void LogicManager::HAND_Master_WalkTest(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
forceJump(kCharacterAbbot, &LogicManager::CONS_Abbot_DebugWalks);
forceJump(kCharacterAlexei, &LogicManager::CONS_Alexei_DebugWalks);
forceJump(kCharacterAlouan, &LogicManager::CONS_Alouan_DebugWalks);
@@ -288,9 +307,13 @@ void LogicManager::HAND_Master_WalkTest(HAND_PARAMS) {
getCharacter(kCharacterMaster).currentCall--;
_engine->getMessageManager()->setMessageHandle(
kCharacterMaster,
- _functionsMaster[getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall]]);
+ _functionsMaster[getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall]]
+ );
fedEx(kCharacterMaster, kCharacterMaster, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -305,12 +328,16 @@ void LogicManager::CONS_Master_FirstDream(CONS_PARAMS) {
}
void LogicManager::HAND_Master_FirstDream(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
playDialog(kCharacterMaster, "MUS009", 16, 0);
- } else if (msg->action == 8) {
+ break;
+ case 8:
if (!cathRunningDialog("LIB012"))
playDialog(kCharacterCath, "LIB012", -1, 0);
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
forceJump(kCharacterHeadWait, &LogicManager::CONS_HeadWait_LockUp);
forceJump(kCharacterWaiter1, &LogicManager::CONS_Waiter1_LockUp);
forceJump(kCharacterWaiter2, &LogicManager::CONS_Waiter2_LockUp);
@@ -394,7 +421,8 @@ void LogicManager::HAND_Master_FirstDream(HAND_PARAMS) {
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 1;
MasterCall(&LogicManager::CONS_Master_SaveGame, 1, 0, 0, 0);
- } else if (msg->action == 9) {
+ break;
+ case 9:
if (getCharacterCurrentParams(kCharacterMaster)[0]) {
endGraphics(kCharacterMaster);
@@ -435,7 +463,9 @@ void LogicManager::HAND_Master_FirstDream(HAND_PARAMS) {
setDoor(63, kCharacterMaster, 0, 10, 9);
getCharacterCurrentParams(kCharacterMaster)[0] = 1;
}
- } else if (msg->action == 225358684) {
+
+ break;
+ case 225358684:
getCharacterCurrentParams(kCharacterMaster)[1]++;
if (getCharacterCurrentParams(kCharacterMaster)[1] >= 3) {
@@ -443,10 +473,14 @@ void LogicManager::HAND_Master_FirstDream(HAND_PARAMS) {
playDialog(kCharacterCath, "LIB031", -1, 0);
if (getCharacterCurrentParams(kCharacterMaster)[1] == 3) {
- getCharacter(kCharacterMaster).characterPosition.car = 8;
+ getCharacter(kCharacterMaster).characterPosition.car = kCarLocomotive;
startCycOtis(kCharacterMaster, "JUGL");
}
}
+
+ break;
+ default:
+ break;
}
}
@@ -461,7 +495,8 @@ void LogicManager::CONS_Master_StartPart1(CONS_PARAMS) {
}
void LogicManager::HAND_Master_StartPart1(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
_gameProgress[kProgressChapter] = 1;
_engine->getSoundManager()->startAmbient();
@@ -529,6 +564,9 @@ void LogicManager::HAND_Master_StartPart1(HAND_PARAMS) {
setDoor(101, kCharacterCath, 1, 10, 9);
CONS_Master_MovingNight(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -543,116 +581,12 @@ void LogicManager::CONS_Master_MovingNight(CONS_PARAMS) {
}
void LogicManager::HAND_Master_MovingNight(HAND_PARAMS) {
-
- int v6;
-
- uint16 car;
- int v9;
- int v10;
- int v11;
- int v12;
- int v13;
- int v14;
-
- if (msg->action > 12) {
- if (msg->action > 169629818) {
- if (msg->action == 190346110) {
- _gameProgress[6] = 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);
- }
- }
- } else {
- switch (msg->action) {
- case 169629818:
- getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 22;
- MasterCall(&LogicManager::CONS_Master_Arrive, "Unschedu", 0x10, 0, 0);
- break;
- case 17:
- if (!getCharacterCurrentParams(kCharacterMaster)[2] && checkCathDir(3, 1)) {
- _gameTime = 1062000;
- _gameTimeTicksDelta = 3;
- getCharacterCurrentParams(kCharacterMaster)[2] = 1;
- }
- break;
- case 18:
- switch (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8]) {
- case 1:
- goto LABEL_75;
- case 2:
- goto LABEL_78;
- case 3:
- goto LABEL_81;
- case 4:
- getCharacterCurrentParams(kCharacterMaster)[4] = 0;
- goto LABEL_57;
- case 5:
- goto LABEL_84;
- case 6:
- goto LABEL_87;
- case 7:
- goto LABEL_90;
- case 8:
- goto LABEL_93;
- case 9:
- goto LABEL_99;
- case 10:
- goto LABEL_102;
- case 11:
- goto LABEL_105;
- case 12:
- goto LABEL_108;
- case 13:
- goto LABEL_111;
- case 14:
- goto LABEL_114;
- case 15:
- goto LABEL_117;
- case 16:
- _gameTime = 1424700;
- goto LABEL_65;
- case 17:
- _gameProgress[6] = 1;
- getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 18;
- MasterCall(&LogicManager::CONS_Master_Arrive, "Strasbou", 7, 0, 0);
- break;
- case 18:
- goto LABEL_120;
- case 19:
- _gameTimeTicksDelta = 1;
- goto LABEL_70;
- case 20:
- goto LABEL_123;
- case 21:
- goto LABEL_126;
- case 22:
- getCharacterCurrentParams(kCharacterMaster)[4] = 1;
- break;
- case 23:
- getCharacterCurrentParams(kCharacterMaster)[0] = 1;
- break;
- default:
- return;
- }
- break;
- }
- }
- return;
- }
-
- if (msg->action == 12) {
- getCharacterCurrentParams(kCharacterMaster)[1] = 225 * (4 * rnd(5) + 20);
- return;
- }
-
- if (!msg->action) {
- if (_gameProgress[20] && _gameTime < 1458000) {
+ switch (msg->action) {
+ case 0:
+ if (_gameProgress[kProgressIsTrainRunning] && _gameTime < 1458000) {
if (!getCharacterCurrentParams(kCharacterMaster)[5]) {
getCharacterCurrentParams(kCharacterMaster)[5] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[1];
- if (_currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[1] == 0)
+ if (getCharacterCurrentParams(kCharacterMaster)[5] == 0)
goto LABEL_19;
}
if (getCharacterCurrentParams(kCharacterMaster)[5] < _currentGameSessionTicks) {
@@ -660,19 +594,19 @@ void LogicManager::HAND_Master_MovingNight(HAND_PARAMS) {
LABEL_19:
switch (rnd(5)) {
case 0:
- playDialog(kCharacterCath, "ZFX1005", rnd(15) + 2, 0);
+ playDialog(0, "ZFX1005", rnd(15) + 2, 0);
break;
case 1:
- playDialog(kCharacterCath, "ZFX1006", rnd(15) + 2, 0);
+ playDialog(0, "ZFX1006", rnd(15) + 2, 0);
break;
case 2:
- playDialog(kCharacterCath, "ZFX1007", rnd(15) + 2, 0);
+ playDialog(0, "ZFX1007", rnd(15) + 2, 0);
break;
case 3:
- playDialog(kCharacterCath, "ZFX1007A", rnd(15) + 2, 0);
+ playDialog(0, "ZFX1007A", rnd(15) + 2, 0);
break;
case 4:
- playDialog(kCharacterCath, "ZFX1007B", rnd(15) + 2, 0);
+ playDialog(0, "ZFX1007B", rnd(15) + 2, 0);
break;
default:
break;
@@ -712,7 +646,7 @@ void LogicManager::HAND_Master_MovingNight(HAND_PARAMS) {
LABEL_57:
if (_gameTime > 1170000 && !getCharacterCurrentParams(kCharacterMaster)[9]) {
getCharacterCurrentParams(kCharacterMaster)[9] = 1;
- _gameProgress[6] = 2;
+ _gameProgress[kProgressField18] = 2;
}
if (!getCharacterCurrentParams(kCharacterMaster)[0]) {
if (_gameTime > 1170000 && !getCharacterCurrentParams(kCharacterMaster)[10]) {
@@ -837,34 +771,31 @@ void LogicManager::HAND_Master_MovingNight(HAND_PARAMS) {
MasterCall(&LogicManager::CONS_Master_Depart, "Strasbou", 0, 0, 0);
}
- return;
- }
-
- if (msg->action == 2) {
+ break;
+ case 2:
if (getCharacterParams(kCharacterMaster, 8)[1]) {
- send(kCharacterMaster, 32, 191350523, 0);
+ send(kCharacterMaster, kCharacterClerk, 191350523, 0);
if (getCharacter(kCharacterCath).characterPosition.location == 2) {
if (cathOutHisWindow()) {
- v14 = 49;
- LABEL_43:
- bumpCath(3, v14, 255);
+ bumpCath(kCarGreenSleeping, 49, 255);
goto LABEL_44;
}
if (cathOutRebeccaWindow()) {
- bumpCath(4, 49, 255);
+ bumpCath(kCarRedSleeping, 49, 255);
} else {
- if (getCharacter(kCharacterCath).characterPosition.car < 4u || getCharacter(kCharacterCath).characterPosition.car > 7) {
- if (!getCharacter(kCharacterCath).characterPosition.car || getCharacter(kCharacterCath).characterPosition.car > 3)
+ if (getCharacter(kCharacterCath).characterPosition.car < kCarRedSleeping || getCharacter(kCharacterCath).characterPosition.car > kCarCoalTender) {
+ if (!getCharacter(kCharacterCath).characterPosition.car || getCharacter(kCharacterCath).characterPosition.car > kCarGreenSleeping)
goto LABEL_44;
- if (checkCathDir(3, 98)) {
- playDialog(kCharacterCath, "LIB015", -1, 0);
- v14 = 71;
+ if (checkCathDir(kCarGreenSleeping, 98)) {
+ playDialog(0, "LIB015", -1, 0);
+ bumpCath(kCarGreenSleeping, 71, 255);
} else {
- v14 = 82;
+ bumpCath(kCarGreenSleeping, 82, 255);
}
- goto LABEL_43;
+
+ goto LABEL_44;
}
- bumpCath(5, 82, 255);
+ bumpCath(kCarRestaurant, 82, 255);
}
}
LABEL_44:
@@ -873,19 +804,104 @@ void LogicManager::HAND_Master_MovingNight(HAND_PARAMS) {
getCharacterParams(kCharacterMaster, 8)[1] = 0;
return;
}
-
if (getCharacterParams(kCharacterMaster, 8)[2]) {
_engine->getSoundManager()->startAmbient();
getCharacterParams(kCharacterMaster, 8)[2] = 0;
if (getCharacterCurrentParams(kCharacterMaster)[3]) {
- if (_gameProgress[9]) {
- send(kCharacterMaster, 9, 168187490, 0);
- } else {
- send(kCharacterMaster, 3, 224122407, 0);
- }
+ if (_gameProgress[kProgressField24])
+ send(kCharacterMaster, kCharacterTrainM, 168187490, 0);
+ else
+ send(kCharacterMaster, kCharacterCond1, 224122407, 0);
getCharacterCurrentParams(kCharacterMaster)[3] = 0;
}
}
+
+ break;
+ case 190346110:
+ _gameProgress[kProgressField18] = 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;
+ _gameTimeTicksDelta = 3;
+ getCharacterCurrentParams(kCharacterMaster)[2] = 1;
+ }
+ break;
+ case 18:
+ switch (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8]) {
+ case 1:
+ goto LABEL_75;
+ case 2:
+ goto LABEL_78;
+ case 3:
+ goto LABEL_81;
+ case 4:
+ getCharacterCurrentParams(kCharacterMaster)[4] = 0;
+ goto LABEL_57;
+ case 5:
+ goto LABEL_84;
+ case 6:
+ goto LABEL_87;
+ case 7:
+ goto LABEL_90;
+ case 8:
+ goto LABEL_93;
+ case 9:
+ goto LABEL_99;
+ case 10:
+ goto LABEL_102;
+ case 11:
+ goto LABEL_105;
+ case 12:
+ goto LABEL_108;
+ case 13:
+ goto LABEL_111;
+ case 14:
+ goto LABEL_114;
+ case 15:
+ goto LABEL_117;
+ case 16:
+ _gameTime = 1424700;
+ goto LABEL_65;
+ case 17:
+ _gameProgress[kProgressField18] = 1;
+ getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 18;
+ MasterCall(&LogicManager::CONS_Master_Arrive, "Strasbou", 7, 0, 0);
+ break;
+ case 18:
+ goto LABEL_120;
+ case 19:
+ _gameTimeTicksDelta = 1;
+ goto LABEL_70;
+ case 20:
+ goto LABEL_123;
+ case 21:
+ goto LABEL_126;
+ case 22:
+ getCharacterCurrentParams(kCharacterMaster)[4] = 1;
+ break;
+ case 23:
+ getCharacterCurrentParams(kCharacterMaster)[0] = 1;
+ break;
+ default:
+ break;
+ }
+
+ break;
}
}
@@ -900,7 +916,8 @@ void LogicManager::CONS_Master_SecondSleep(CONS_PARAMS) {
}
void LogicManager::HAND_Master_SecondSleep(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (getCharacterParams(kCharacterMaster, 8)[1] || getCharacterParams(kCharacterMaster, 8)[2]) {
endDialog(kCharacterMaster);
getCharacterParams(kCharacterMaster, 8)[1] = 0;
@@ -917,6 +934,9 @@ void LogicManager::HAND_Master_SecondSleep(HAND_PARAMS) {
}
CONS_Master_StartPart2(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -931,7 +951,8 @@ void LogicManager::CONS_Master_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Master_StartPart2(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (_gameProgress[kProgressChapter] != 2) {
_gameProgress[kProgressChapter] = 2;
makeAllJump(2);
@@ -943,13 +964,20 @@ void LogicManager::HAND_Master_StartPart2(HAND_PARAMS) {
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 1;
MasterCall(&LogicManager::CONS_Master_SaveGame, 1, 0, 0, 0);
- } else if (msg->action == 18 && 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(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;
}
}
@@ -964,21 +992,22 @@ void LogicManager::CONS_Master_InitPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Master_InitPart2(HAND_PARAMS) {
- if (msg->action == 12) {
- _gameProgress[20] = 1;
- setDoor(26, 0, 1, 0, 9);
- setDoor(27, 0, 1, 0, 9);
- _gameProgress[6] = 1;
- giveCathItem(21);
-
- _gameInventory[20].location = 0;
- _gameInventory[20].isPresent = 0;
- _gameProgress[1] = 2;
- _gameProgress[7] = 34;
- _gameProgress[2] = 1;
- _gameProgress[4] = 1;
- dropItem(14, 3);
- dropItem(3, 1);
+ switch (msg->action) {
+ case 12:
+ _gameProgress[kProgressIsTrainRunning] = 1;
+ setDoor(26, kCharacterCath, 1, 0, 9);
+ setDoor(27, kCharacterCath, 1, 0, 9);
+ _gameProgress[kProgressField18] = 1;
+ giveCathItem(kItemGreenJacket);
+
+ _gameInventory[kItemCorpse].location = 0;
+ _gameInventory[kItemCorpse].isPresent = 0;
+ _gameProgress[kProgressJacket] = 2;
+ _gameProgress[kProgressPortrait] = 34;
+ _gameProgress[kProgressEventCorpseMovedFromFloor] = 1;
+ _gameProgress[kProgressEventFoundCorpse] = 1;
+ dropItem(kItemBeetle, 3);
+ dropItem(kItem3, 1);
getCharacterCurrentParams(kCharacterMaster)[0] = 1;
do {
@@ -998,8 +1027,8 @@ void LogicManager::HAND_Master_InitPart2(HAND_PARAMS) {
send(kCharacterMaster, kCharacterTableD, 103798704, 0);
send(kCharacterMaster, kCharacterTableE, 103798704, 0);
- setDoor(1, 0, 0, 10, 9);
- setDoor(9, 0, 0, 255, 255);
+ setDoor(1, kCharacterCath, 0, 10, 9);
+ setDoor(9, kCharacterCath, 0, 255, 255);
if (getCharacterParams(kCharacterMaster, 8)[1] || getCharacterParams(kCharacterMaster, 8)[2]) {
endDialog(kCharacterMaster);
@@ -1009,13 +1038,16 @@ void LogicManager::HAND_Master_InitPart2(HAND_PARAMS) {
playNIS(kEventTrainPassing);
- if (cathHasItem(8)) {
+ if (cathHasItem(kItemScarf)) {
bumpCathTylerComp();
} else {
- bumpCath(3, 79, 255);
+ bumpCath(kCarGreenSleeping, 79, 255);
}
CONS_Master_MovingDay(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1030,49 +1062,51 @@ void LogicManager::CONS_Master_MovingDay(CONS_PARAMS) {
}
void LogicManager::HAND_Master_MovingDay(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacterCurrentParams(kCharacterMaster)[0] = 225 * (4 * rnd(5) + 20);
- } else if (msg->action == 139122728) {
- CONS_Master_StartPart3(0, 0, 0, 0);
- }
- } else {
- if (!_gameProgress[20])
- return;
+ switch (msg->action) {
+ case 0:
+ if (_gameProgress[kProgressIsTrainRunning]) {
+ if (getCharacterCurrentParams(kCharacterMaster)[1] ||
+ (getCharacterCurrentParams(kCharacterMaster)[1] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[0],
+ _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[0] != 0)) {
+ if (getCharacterCurrentParams(kCharacterMaster)[1] >= _currentGameSessionTicks)
+ return;
- int v3;
- if (getCharacterCurrentParams(kCharacterMaster)[1] ||
- (v3 = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[0] == 0,
- getCharacterCurrentParams(kCharacterMaster)[1] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[0],
- !v3)) {
- if (getCharacterCurrentParams(kCharacterMaster)[1] >= _currentGameSessionTicks)
- return;
+ getCharacterCurrentParams(kCharacterMaster)[1] = 0x7FFFFFFF;
+ }
- 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;
+ }
- 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);
- getCharacterCurrentParams(kCharacterMaster)[1] = 0;
+ break;
+ case 139122728:
+ CONS_Master_StartPart3(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1087,7 +1121,8 @@ void LogicManager::CONS_Master_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Master_StartPart3(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (_gameProgress[kProgressChapter] != 3) {
_gameProgress[kProgressChapter] = 3;
makeAllJump(3);
@@ -1097,6 +1132,9 @@ void LogicManager::HAND_Master_StartPart3(HAND_PARAMS) {
_gameTimeTicksDelta = 5;
CONS_Master_InitPart3(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1111,7 +1149,8 @@ void LogicManager::CONS_Master_InitPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Master_InitPart3(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
send(kCharacterMaster, kCharacterTableA, 103798704, 0);
send(kCharacterMaster, kCharacterTableB, 103798704, 0);
send(kCharacterMaster, kCharacterTableC, 103798704, 0);
@@ -1119,14 +1158,14 @@ void LogicManager::HAND_Master_InitPart3(HAND_PARAMS) {
send(kCharacterMaster, kCharacterTableE, 103798704, 0);
send(kCharacterMaster, kCharacterTableF, 103798704, 0);
- _gameProgress[20] = 1;
+ _gameProgress[kProgressIsTrainRunning] = 1;
- setDoor(26, 0, 1, 0, 9);
- setDoor(27, 0, 1, 0, 9);
- dropItem(19, 1);
- dropItem(3, 1);
+ setDoor(26, kCharacterCath, 1, 0, 9);
+ setDoor(27, kCharacterCath, 1, 0, 9);
+ dropItem(kItemBriefcase, 1);
+ dropItem(kItem3, 1);
setModel(1, 2);
- setDoor(107, 0, 3, 255, 255);
+ setDoor(107, kCharacterCath, 3, 255, 255);
if (getCharacterParams(kCharacterMaster, 8)[1] || getCharacterParams(kCharacterMaster, 8)[2]) {
endDialog(kCharacterMaster);
@@ -1141,8 +1180,15 @@ void LogicManager::HAND_Master_InitPart3(HAND_PARAMS) {
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 1;
MasterCall(&LogicManager::CONS_Master_SaveGame, 1, 0, 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] == 1) {
- CONS_Master_MovingAfternoon(0, 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;
}
}
@@ -1157,80 +1203,67 @@ void LogicManager::CONS_Master_MovingAfternoon(CONS_PARAMS) {
}
void LogicManager::HAND_Master_MovingAfternoon(HAND_PARAMS) {
- bool v4; // zf
- int v5; // eax
- unsigned int v6; // eax
- uint16 car; // ax
- int v8; // [esp-8h] [ebp-14h]
- int v9; // [esp-8h] [ebp-14h]
- int v10; // [esp-8h] [ebp-14h]
- int v11; // [esp-8h] [ebp-14h]
- int v12; // [esp-8h] [ebp-14h]
- int v13; // [esp-8h] [ebp-14h]
- int v14; // [esp-8h] [ebp-14h]
- int v15; // [esp-8h] [ebp-14h]
-
switch (msg->action) {
case 0:
- if (!_gameProgress[20])
- goto LABEL_14;
- if (!getCharacterCurrentParams(kCharacterMaster)[3]) {
- v4 = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[0] == 0;
- getCharacterCurrentParams(kCharacterMaster)[3] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[0];
- if (v4)
- goto LABEL_7;
- }
- if (getCharacterCurrentParams(kCharacterMaster)[3] < _currentGameSessionTicks) {
- getCharacterCurrentParams(kCharacterMaster)[3] = 0x7FFFFFFF;
- LABEL_7:
- switch (rnd(5)) {
- case 0:
- v8 = rnd(15) + 2;
- playDialog(kCharacterCath, "ZFX1005", v8, 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;
+ if (_gameProgress[kProgressIsTrainRunning]) {
+ if (!getCharacterCurrentParams(kCharacterMaster)[3]) {
+ getCharacterCurrentParams(kCharacterMaster)[3] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[0];
+ if (getCharacterCurrentParams(kCharacterMaster)[3] == 0)
+ goto LABEL_7;
}
- getCharacterCurrentParams(kCharacterMaster)[0] = 225 * (4 * rnd(5) + 20);
- getCharacterCurrentParams(kCharacterMaster)[3] = 0;
+ if (getCharacterCurrentParams(kCharacterMaster)[3] < _currentGameSessionTicks) {
+ getCharacterCurrentParams(kCharacterMaster)[3] = 0x7FFFFFFF;
+ LABEL_7:
+ 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;
+ }
}
- LABEL_14:
+
if (!getCharacterCurrentParams(kCharacterMaster)[4]) {
- v5 = getCharacterCurrentParams(kCharacterMaster)[1];
- v4 = _currentGameSessionTicks + v5 == 0;
- getCharacterCurrentParams(kCharacterMaster)[4] = _currentGameSessionTicks + v5;
- if (v4)
+ getCharacterCurrentParams(kCharacterMaster)[4] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[1];
+ if (getCharacterCurrentParams(kCharacterMaster)[4] == 0) {
goto LABEL_18;
+ }
}
+
if (getCharacterCurrentParams(kCharacterMaster)[4] < _currentGameSessionTicks) {
getCharacterCurrentParams(kCharacterMaster)[4] = 0x7FFFFFFF;
LABEL_18:
- v6 = rnd(2);
- if (v6) {
- if (v6 == 1) {
- v14 = rnd(0xF) + 2;
- playDialog(kCharacterCath, "ZFX1009", v14, 0);
- }
- } else {
- v13 = rnd(0xF) + 2;
- playDialog(kCharacterCath, "ZFX1008", v13, 0);
+ 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]) {
LABEL_49:
if (_gameTime <= 1989900 || getCharacterCurrentParams(kCharacterMaster)[6]) {
@@ -1296,52 +1329,65 @@ void LogicManager::HAND_Master_MovingAfternoon(HAND_PARAMS) {
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 1;
MasterCall(&LogicManager::CONS_Master_Arrive, "Salzburg", 9, 0, 0);
}
- return;
+
+ break;
case 2:
if (getCharacterParams(kCharacterMaster, 8)[1]) {
- send(31, 32, 191350523, 0);
- if (getCharacter(kCharacterCath).characterPosition.location != 2)
- goto LABEL_42;
- if (cathOutHisWindow()) {
- v15 = 49;
- } else {
- if (cathOutRebeccaWindow()) {
- bumpCath(4, 49, 255);
- goto LABEL_42;
- }
- car = getCharacter(kCharacterCath).characterPosition.car;
- if (car >= 4 && car <= 7) {
- bumpCath(5, 82, 255);
- goto LABEL_42;
- }
- if (!car || car > 3) {
- LABEL_42:
- _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);
- return;
- }
- if (checkCathDir(3, 98)) {
- playDialog(kCharacterCath, "LIB015", -1, 0);
- v15 = 71;
+ send(kCharacterMaster, kCharacterClerk, 191350523, 0);
+ if (getCharacter(kCharacterCath).characterPosition.location == 2) {
+ if (cathOutHisWindow()) {
+ bumpCath(kCarGreenSleeping, 49, 255);
} else {
- v15 = 82;
+ 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);
+ }
+ }
}
}
- bumpCath(3, v15, 255);
- goto LABEL_42;
- }
- if (getCharacterParams(kCharacterMaster, 8)[2]) {
+
+ _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;
}
- return;
+
+ break;
case 12:
getCharacterCurrentParams(kCharacterMaster)[0] = 225 * (4 * rnd(5) + 20);
getCharacterCurrentParams(kCharacterMaster)[1] = 225 * (4 * rnd(6) + 8);
- return;
+ break;
case 18:
switch (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8]) {
case 1:
@@ -1364,11 +1410,12 @@ void LogicManager::HAND_Master_MovingAfternoon(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterMaster)[2] = 1;
break;
default:
- return;
+ break;
}
- return;
+
+ break;
default:
- return;
+ break;
}
}
@@ -1383,81 +1430,83 @@ void LogicManager::CONS_Master_EndVienna(CONS_PARAMS) {
}
void LogicManager::HAND_Master_EndVienna(HAND_PARAMS) {
- Character *v1; // ecx
- uint8 *p_currentCall; // edx
- int action; // eax
- int v4; // eax
- int v5; // [esp-8h] [ebp-Ch]
-
- v1 = &getCharacter(kCharacterMaster);
- p_currentCall = &getCharacter(kCharacterMaster).currentCall;
- action = msg->action;
- if (action == 12) {
- getCharacter(kCharacterCath).characterPosition.car = 8;
- if (_gameEvents[30]) {
- if (_gameInventory[18].location == 5) {
- getCharacter(kCharacterMaster).callbacks[*p_currentCall + 8] = 2;
- MasterCall(&LogicManager::CONS_Master_SaveGame, 2, 165, 0, 0);
+ switch (msg->action) {
+ case 12:
+ getCharacter(kCharacterCath).characterPosition.car = kCarLocomotive;
+ if (_gameEvents[kEventAugustBringBriefcase]) {
+ if (_gameInventory[kItemFirebird].location == 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[*p_currentCall + 8] = 3;
- MasterCall(&LogicManager::CONS_Master_SaveGame, 2, 163, 0, 0);
+ getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 3;
+ MasterCall(&LogicManager::CONS_Master_SaveGame, 2, kEventVergesAnnaDead, 0, 0);
} else {
- getCharacter(kCharacterMaster).callbacks[*p_currentCall + 8] = 4;
- MasterCall(&LogicManager::CONS_Master_SaveGame, 2, 166, 0, 0);
+ getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 4;
+ MasterCall(&LogicManager::CONS_Master_SaveGame, 2, kEventViennaContinueGame, 0, 0);
}
} else {
- getCharacter(kCharacterMaster).callbacks[*p_currentCall + 8] = 1;
- MasterCall(&LogicManager::CONS_Master_SaveGame, 2, 164, 0, 0);
+ getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 1;
+ MasterCall(&LogicManager::CONS_Master_SaveGame, 2, kEventViennaAugustUnloadGuns, 0, 0);
}
- } else if (action == 18) {
- switch (getCharacter(kCharacterMaster).callbacks[*p_currentCall + 8]) {
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8]) {
case 1:
- playNIS(164);
- if (_gameEvents[215]) {
- endGame(1, 2187000, 0, 1);
+ playNIS(kEventViennaAugustUnloadGuns);
+
+ if (_gameEvents[kEventConcertLeaveWithBriefcase]) {
+ endGame(1, 2187000, 0, true);
} else {
- v5 = 0;
- if (!_gameEvents[253])
- goto LABEL_25;
- endGame(2, 253, 0, 1);
+ if (!_gameEvents[kEventCathJumpDownCeiling]) {
+ endGame(1, 2155500, 0, true);
+ } else {
+ endGame(2, 253, 0, true);
+ }
}
+
break;
case 2:
- playNIS(165);
- if (_gameEvents[58]) {
- endGame(3, 58, 60, 1);
- } else if (_gameEvents[59]) {
- endGame(1, 2155500, 60, 1);
+ playNIS(kEventViennaKronosFirebird);
+
+ if (_gameEvents[kEventKronosBringEggCeiling]) {
+ endGame(3, 58, 60, true);
+ } else if (_gameEvents[kEventKronosBringEgg]) {
+ endGame(1, 2155500, 60, true);
} else {
- v4 = _gameProgress[48];
- if (v4) {
- v5 = 61;
- if (_gameEvents[61]) {
- endGame(1, v4, 61, 1);
+ if (_gameProgress[kProgressFieldC0]) {
+ if (_gameEvents[kEventKronosReturnBriefcase]) {
+ endGame(1, 61, 61, true);
return;
+ } else {
+ endGame(1, 2155500, 59, true);
}
} else {
- v5 = 59;
- if (_gameEvents[61]) {
- endGame(2, 61, 59, 1);
+ if (_gameEvents[kEventKronosReturnBriefcase]) {
+ endGame(2, 61, 59, true);
return;
+ } else {
+ endGame(1, 2155500, 59, true);
}
}
- LABEL_25:
- endGame(1, 2155500, v5, 1);
}
+
break;
case 3:
- playNIS(163);
- endGame(1, 2250000, 58, 1);
+ playNIS(kEventVergesAnnaDead);
+ endGame(1, 2250000, 58, true);
break;
case 4:
- playNIS(166);
+ playNIS(kEventViennaContinueGame);
CONS_Master_StartPart4(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1472,7 +1521,8 @@ void LogicManager::CONS_Master_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Master_StartPart4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (_gameProgress[kProgressChapter] != 4) {
_gameProgress[kProgressChapter] = 4;
makeAllJump(4);
@@ -1484,13 +1534,20 @@ void LogicManager::HAND_Master_StartPart4(HAND_PARAMS) {
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 1;
MasterCall(&LogicManager::CONS_Master_SaveGame, 1, 0, 0, 0);
- } else if (msg->action == 18 && 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(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;
}
}
@@ -1505,7 +1562,8 @@ void LogicManager::CONS_Master_InitPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Master_InitPart4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
_engine->getSoundManager()->endAmbient();
_engine->getSoundManager()->startAmbient();
@@ -1522,14 +1580,14 @@ void LogicManager::HAND_Master_InitPart4(HAND_PARAMS) {
send(kCharacterMaster, kCharacterTableE, 103798704, 0);
send(kCharacterMaster, kCharacterTableF, 103798704, 0);
- takeItem(3);
- dropItem(16, 1);
+ takeItem(kItem3);
+ dropItem(kItemBomb, 1);
- if (_gameInventory[14].location == 3)
- takeItem(14);
+ if (_gameInventory[kItemBeetle].location == 3)
+ takeItem(kItemBeetle);
setModel(25, 2);
- setDoor(107, 0, 3, 255, 255);
+ setDoor(107, kCharacterCath, 3, 255, 255);
if (getCharacterParams(kCharacterMaster, 8)[1] || getCharacterParams(kCharacterMaster, 8)[2]) {
endDialog(kCharacterMaster);
@@ -1540,7 +1598,7 @@ void LogicManager::HAND_Master_InitPart4(HAND_PARAMS) {
fadeToBlack();
- if (cathHasItem(18)) {
+ if (cathHasItem(kItemFirebird)) {
bumpCath(kCarGreenSleeping, 76, 255);
} else {
bumpCath(kCarRestaurant, 69, 255);
@@ -1548,6 +1606,9 @@ void LogicManager::HAND_Master_InitPart4(HAND_PARAMS) {
restoreIcons();
CONS_Master_MovingSecondNight(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1562,133 +1623,111 @@ void LogicManager::CONS_Master_MovingSecondNight(CONS_PARAMS) {
}
void LogicManager::HAND_Master_MovingSecondNight(HAND_PARAMS) {
- uint8 *p_currentCall; // ebx
- Character *v2; // esi
- int currentCall; // ecx
- CharacterCallParams *v4; // edi
- unsigned int action; // eax
- int v6; // eax
- bool v7; // zf
- int v8; // eax
- unsigned int v9; // eax
- uint16 car; // ax
- int v11; // [esp-8h] [ebp-14h]
- int v12; // [esp-8h] [ebp-14h]
- int v13; // [esp-8h] [ebp-14h]
- int v14; // [esp-8h] [ebp-14h]
- int v15; // [esp-8h] [ebp-14h]
- int v16; // [esp-8h] [ebp-14h]
- int v17; // [esp-8h] [ebp-14h]
- int v18; // [esp-8h] [ebp-14h]
-
- p_currentCall = &getCharacter(kCharacterMaster).currentCall;
- v2 = &getCharacter(kCharacterMaster);
- currentCall = getCharacter(kCharacterMaster).currentCall;
- v4 = &getCharacter(kCharacterMaster).callParams[currentCall];
- action = msg->action;
- if (action > 12) {
- if (action > 139254416) {
- if (action > 158610240) {
- if (action > 190346110) {
- switch (action) {
+ if (msg->action > 12) {
+ if (msg->action > 139254416) {
+ if (msg->action > 158610240) {
+ if (msg->action > 190346110) {
+ switch (msg->action) {
case 191001984:
_gameTime = 2520000;
- if (whoRunningDialog(31))
- endDialog(31);
- endGraphics(31);
- takeCathItem(4);
+ if (whoRunningDialog(kCharacterMaster))
+ endDialog(kCharacterMaster);
+ endGraphics(kCharacterMaster);
+ takeCathItem(kItemTelegram);
_gameTimeTicksDelta = 5;
- v2->callbacks[*p_currentCall + 8] = 10;
- MasterCall(&LogicManager::CONS_Master_SaveGame, 2, 0x74, 0, 0);
+ getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 10;
+ MasterCall(&LogicManager::CONS_Master_SaveGame, 2, kEventDefuseBomb, 0, 0);
break;
case 201959744:
- if (whoRunningDialog(31))
- endDialog(31);
- playDialog(32, "ZFX4001", 16, 0);
+ if (whoRunningDialog(kCharacterMaster))
+ endDialog(kCharacterMaster);
+ playDialog(kCharacterClerk, "ZFX4001", 16, 0);
endGame(0, 0, 0, 1);
break;
case 225367984:
- v2->callbacks[currentCall + 8] = 9;
- MasterCall(&LogicManager::CONS_Master_SaveGame, 2, 0x108, 0, 0);
+ getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 9;
+ MasterCall(&LogicManager::CONS_Master_SaveGame, 2, kEventCathDefusingBomb, 0, 0);
break;
}
- } else if (action == 190346110) {
+ } else if (msg->action == 190346110) {
_gameProgress[6] = 3;
- v4->parameters[0] = 1;
- if (v2->callParams[8].parameters[1] || v2->callParams[8].parameters[2]) {
- endDialog(31);
- v2->callParams[8].parameters[1] = 0;
- v2->callParams[8].parameters[2] = 0;
+ 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(kCharacterCath, "MUS008", 16, 0);
+ playDialog(0, "MUS008", 16, 0);
_inventorySelectedItemIdx = 0;
fadeToBlack();
while (dialogRunning("MUS008"))
_engine->getSoundManager()->soundThread();
- if (cathHasItem(16)) {
- forceJump(12, &LogicManager::CONS_Alexei_Dead);
- forceJump(1, &LogicManager::CONS_Anna_Sulking);
- forceJump(2, &LogicManager::CONS_August_Asleep4);
- forceJump(3, &LogicManager::CONS_Cond1_OnDuty4);
- forceJump(4, &LogicManager::CONS_Cond2_OnDuty4);
- forceJump(6, &LogicManager::CONS_Waiter1_Serving4);
- forceJump(7, &LogicManager::CONS_Waiter2_Serving4);
- forceJump(5, &LogicManager::CONS_HeadWait_InPart4);
- forceJump(9, &LogicManager::CONS_TrainM_InOffice4);
- forceJump(10, &LogicManager::CONS_Tatiana_Asleep4);
- forceJump(13, &LogicManager::CONS_Abbot_Asleep4);
- forceJump(14, &LogicManager::CONS_Milos_EndPart4);
- forceJump(15, &LogicManager::CONS_Vesna_EndPart4);
- forceJump(16, &LogicManager::CONS_Ivo_EndPart4);
- forceJump(17, &LogicManager::CONS_Salko_EndPart4);
- forceJump(21, &LogicManager::CONS_Madame_Asleep4);
- forceJump(22, &LogicManager::CONS_Monsieur_Asleep4);
- forceJump(23, &LogicManager::CONS_Rebecca_Asleep4);
- forceJump(24, &LogicManager::CONS_Sophie_Asleep4);
- forceJump(26, &LogicManager::CONS_Yasmin_Asleep4);
- forceJump(27, &LogicManager::CONS_Hadija_Asleep4);
- forceJump(28, &LogicManager::CONS_Alouan_Asleep4);
- forceJump(30, &LogicManager::CONS_Max_InCageFriendly);
- send(31, 1, 201431954, 0);
- send(31, 3, 201431954, 0);
- send(31, 4, 201431954, 0);
- send(31, 6, 201431954, 0);
- send(31, 7, 201431954, 0);
- send(31, 5, 201431954, 0);
- send(31, 9, 201431954, 0);
- v2->callbacks[*p_currentCall + 8] = 6;
- MasterCall(&LogicManager::CONS_Master_SaveGame, 2, 93, 0, 0);
+ 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;
- v2->callbacks[*p_currentCall + 8] = 7;
- MasterCall(&LogicManager::CONS_Master_SaveGame, 2, 115, 0, 0);
+ getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 7;
+ MasterCall(&LogicManager::CONS_Master_SaveGame, 2, kEventTrainExplosionBridge, 0, 0);
}
- } else if (action == 169300225) {
+ } else if (msg->action == 169300225) {
if (_gameTime < 2519100)
_gameTime = 2519100;
- v4->parameters[2] = 1;
- startSeqOtis(31, "BOMB");
+ getCharacterCurrentParams(kCharacterMaster)[2] = 1;
+ startSeqOtis(kCharacterMaster, "BOMB");
}
- } else if (action == 158610240) {
- v2->callbacks[currentCall + 8] = 8;
+ } else if (msg->action == 158610240) {
+ getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 8;
MasterCall(&LogicManager::CONS_Master_SaveGame, 1, 0, 0, 0);
- } else if (action == 156435676) {
- send(31, 10, 169360385, 0);
- send(31, 4, 201431954, 0);
- send(31, 9, 201431954, 0);
+ } else if (msg->action == 156435676) {
+ send(kCharacterMaster, kCharacterTatiana, 169360385, 0);
+ send(kCharacterMaster, kCharacterCond2, 201431954, 0);
+ send(kCharacterMaster, kCharacterTrainM, 201431954, 0);
_gameTimeTicksDelta = 1;
_gameTime = 2511900;
- dropItem(2, 1);
- v2->characterPosition.car = 4;
- v2->characterPosition.position = 1500;
- v2->characterPosition.location = 1;
- playDialog(31, "ZFX1001", -1, 0);
+ dropItem(kItem2, 1);
+ getCharacter(kCharacterMaster).characterPosition.car = 4;
+ getCharacter(kCharacterMaster).characterPosition.position = 1500;
+ getCharacter(kCharacterMaster).characterPosition.location = 1;
+ playDialog(kCharacterMaster, "ZFX1001", -1, 0);
}
- } else if (action == 139254416) {
+ } else if (msg->action == 139254416) {
CONS_Master_StartPart5(0, 0, 0, 0);
- } else if (action == 18) {
- switch (v2->callbacks[currentCall + 8]) {
+ } else if (msg->action == 18) {
+ switch (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8]) {
case 1:
goto LABEL_82;
case 2:
@@ -1698,53 +1737,53 @@ void LogicManager::HAND_Master_MovingSecondNight(HAND_PARAMS) {
case 4:
goto LABEL_96;
case 5:
- if (whoRunningDialog(31))
- endDialog(31);
- playNIS(115);
+ if (whoRunningDialog(kCharacterMaster))
+ endDialog(kCharacterMaster);
+ playNIS(kEventTrainExplosionBridge);
endGame(0, 1, 0, 1);
break;
case 6:
_engine->getSoundManager()->endAmbient();
- playNIS(93);
+ playNIS(kEventTylerCastleDream);
_engine->getSoundManager()->startAmbient();
- _gameProgress[6] = 1;
+ _gameProgress[kProgressField18] = 1;
bumpCathTylerComp();
- send(31, 10, 169360385, 0);
+ send(kCharacterMaster, kCharacterTatiana, 169360385, 0);
_gameTimeTicksDelta = 1;
_gameTime = 2511900;
- dropItem(2, 1);
- takeItem(22);
- v2->characterPosition.car = 4;
- v2->characterPosition.position = 1500;
- v2->characterPosition.location = 1;
- playDialog(31, "ZFX1001", -1, 0);
+ 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(115);
+ playNIS(kEventTrainExplosionBridge);
endGame(1, 2430000, 0, 1);
break;
case 8:
- playDialog(kCharacterCath, "MUS022", -1, 0);
+ playDialog(0, "MUS022", -1, 0);
if (_gameTime < 2517300)
_gameTime = 2517300;
break;
case 9:
- playNIS(264);
- bumpCath(4, 73, 255);
+ playNIS(kEventCathDefusingBomb);
+ bumpCath(kCarRedSleeping, 73, 255);
break;
case 10:
- playNIS(116);
- forceJump(13, &LogicManager::CONS_Abbot_AfterBomb);
- send(31, 1, 191001984, 0);
- send(31, 4, 191001984, 0);
- takeItem(2);
- _gameInventory[2].location = 0;
- v4->parameters[1] = 1;
- bumpCath(4, 2, 255);
+ playNIS(kEventDefuseBomb);
+ forceJump(kCharacterAbbot, &LogicManager::CONS_Abbot_AfterBomb);
+ send(kCharacterMaster, kCharacterAnna, 191001984, 0);
+ send(kCharacterMaster, kCharacterCond2, 191001984, 0);
+ takeItem(kItem2);
+ _gameInventory[kItem2].location = 0;
+ getCharacterCurrentParams(kCharacterMaster)[1] = 1;
+ bumpCath(kCarRedSleeping, 2, 255);
break;
case 11:
- bumpCath(4, 74, 255);
- playDialog(32, "ZFX4001", 16, 0);
+ bumpCath(kCarRedSleeping, 74, 255);
+ playDialog(kCharacterClerk, "ZFX4001", 16, 0);
endGame(0, 1, 0, 1);
break;
default:
@@ -1753,164 +1792,173 @@ void LogicManager::HAND_Master_MovingSecondNight(HAND_PARAMS) {
}
return;
}
- if (action == 12) {
- v4->parameters[3] = 225 * (4 * rnd(5) + 20);
- v4->parameters[4] = 225 * (4 * rnd(6) + 8);
+ if (msg->action == 12) {
+ getCharacterCurrentParams(kCharacterMaster)[3] = 225 * (4 * rnd(5) + 20);
+ getCharacterCurrentParams(kCharacterMaster)[4] = 225 * (4 * rnd(6) + 8);
return;
}
- if (!action) {
- if (_gameProgress[20]) {
- if (v4->parameters[5] || (v6 = v4->parameters[3], v7 = _currentGameSessionTicks + v6 == 0, v4->parameters[5] = _currentGameSessionTicks + v6, !v7)) {
- if (v4->parameters[5] >= _currentGameSessionTicks)
+ if (msg->action == 0) {
+ if (_gameProgress[kProgressIsTrainRunning]) {
+ if (getCharacterCurrentParams(kCharacterMaster)[5] ||
+ (getCharacterCurrentParams(kCharacterMaster)[5] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[3], _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[3] != 0)) {
+ if (getCharacterCurrentParams(kCharacterMaster)[5] >= _currentGameSessionTicks)
goto LABEL_35;
- v4->parameters[5] = 0x7FFFFFFF;
+ getCharacterCurrentParams(kCharacterMaster)[5] = 0x7FFFFFFF;
}
switch (rnd(5)) {
case 0:
- v11 = rnd(15) + 2;
- playDialog(kCharacterCath, "ZFX1005", v11, 0);
+ playDialog(0, "ZFX1005", rnd(15) + 2, 0);
break;
case 1:
- v12 = rnd(15) + 2;
- playDialog(kCharacterCath, "ZFX1006", v12, 0);
+ playDialog(0, "ZFX1006", rnd(15) + 2, 0);
break;
case 2:
- v13 = rnd(15) + 2;
- playDialog(kCharacterCath, "ZFX1007", v13, 0);
+ playDialog(0, "ZFX1007", rnd(15) + 2, 0);
break;
case 3:
- v14 = rnd(15) + 2;
- playDialog(kCharacterCath, "ZFX1007A", v14, 0);
+ playDialog(0, "ZFX1007A", rnd(15) + 2, 0);
break;
case 4:
- v15 = rnd(15) + 2;
- playDialog(kCharacterCath, "ZFX1007B", v15, 0);
+ playDialog(0, "ZFX1007B", rnd(15) + 2, 0);
break;
default:
break;
}
- v4->parameters[3] = 225 * (4 * rnd(5) + 20);
- v4->parameters[5] = 0;
+
+ getCharacterCurrentParams(kCharacterMaster)[3] = 225 * (4 * rnd(5) + 20);
+ getCharacterCurrentParams(kCharacterMaster)[5] = 0;
}
LABEL_35:
- if (v4->parameters[6] || (v8 = v4->parameters[4], v7 = _currentGameSessionTicks + v8 == 0, v4->parameters[6] = _currentGameSessionTicks + v8, !v7)) {
- if (v4->parameters[6] >= _currentGameSessionTicks) {
+ if (getCharacterCurrentParams(kCharacterMaster)[6] ||
+ (getCharacterCurrentParams(kCharacterMaster)[6] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[4], _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[4] != 0)) {
+ if (getCharacterCurrentParams(kCharacterMaster)[6] >= _currentGameSessionTicks) {
LABEL_45:
- if (_gameTime > 2381400 && !v4->parameters[7]) {
- v4->parameters[7] = 1;
- v2->callbacks[*p_currentCall + 8] = 1;
- MasterCall(&LogicManager::CONS_Master_Arrive, "Pozsony", 0xE, 0, 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);
return;
}
LABEL_82:
- if (_gameTime > 2386800 && !v4->parameters[8]) {
- v4->parameters[8] = 1;
- v2->callbacks[*p_currentCall + 8] = 2;
+ 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);
return;
}
LABEL_85:
- if (getModel(1) == 1 && _gameTime > 2403000 && !v4->parameters[9]) {
- v4->parameters[9] = 1;
+ if (getModel(1) == 1 && _gameTime > 2403000 && !getCharacterCurrentParams(kCharacterMaster)[9]) {
+ getCharacterCurrentParams(kCharacterMaster)[9] = 1;
_gameProgress[6] = 2;
}
- if (v4->parameters[0])
+ if (getCharacterCurrentParams(kCharacterMaster)[0])
goto LABEL_96;
- if (_gameTime > 2416500 && !v4->parameters[10]) {
- v4->parameters[10] = 1;
- v2->callbacks[*p_currentCall + 8] = 3;
- MasterCall(&LogicManager::CONS_Master_Arrive, "Galanta", 0xF, 0, 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);
return;
}
LABEL_93:
- if (_gameTime <= 2421900 || v4->parameters[11]) {
+ if (_gameTime <= 2421900 || getCharacterCurrentParams(kCharacterMaster)[11]) {
LABEL_96:
- if (_gameTime > 2470500 && !v4->parameters[12]) {
- v4->parameters[12] = 1;
- if (_gameProgress[6] == 2)
+ if (_gameTime > 2470500 && !getCharacterCurrentParams(kCharacterMaster)[12]) {
+ getCharacterCurrentParams(kCharacterMaster)[12] = 1;
+ if (_gameProgress[kProgressField18] == 2)
_gameTimeTicksDelta = 1;
}
- if (_gameTime > 2506500 && !v4->parameters[13]) {
- v4->parameters[13] = 1;
- if (_gameProgress[6] == 2)
- _gameProgress[6] = 1;
+ if (_gameTime > 2506500 && !getCharacterCurrentParams(kCharacterMaster)[13]) {
+ getCharacterCurrentParams(kCharacterMaster)[13] = 1;
+ if (_gameProgress[kProgressField18] == 2)
+ _gameProgress[kProgressField18] = 1;
}
- if (_gameTime > 2520000 && !v4->parameters[14]) {
- v4->parameters[14] = 1;
- if (!v4->parameters[1] && !v4->parameters[2]) {
- v2->callbacks[*p_currentCall + 8] = 5;
- MasterCall(&LogicManager::CONS_Master_SaveGame, 2, 0x73, 0, 0);
+ 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);
}
}
} else {
- v4->parameters[11] = 1;
- v2->callbacks[*p_currentCall + 8] = 4;
+ getCharacterCurrentParams(kCharacterMaster)[11] = 1;
+ getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 4;
MasterCall(&LogicManager::CONS_Master_Depart, "Galanta", 0, 0, 0);
}
return;
}
- v4->parameters[6] = 0x7FFFFFFF;
+ getCharacterCurrentParams(kCharacterMaster)[6] = 0x7FFFFFFF;
}
- v9 = rnd(2);
- if (v9) {
- if (v9 == 1) {
- v17 = rnd(15) + 2;
- playDialog(kCharacterCath, "ZFX1009", v17, 0);
- }
- } else {
- v16 = rnd(15) + 2;
- playDialog(kCharacterCath, "ZFX1008", v16, 0);
+
+ switch (rnd(2)) {
+ case 0:
+ playDialog(0, "ZFX1008", rnd(15) + 2, 0);
+ break;
+ case 1:
+ default:
+ playDialog(0, "ZFX1009", rnd(15) + 2, 0);
+ break;
}
- v4->parameters[4] = 225 * (4 * rnd(6) + 8);
- v4->parameters[6] = 0;
+
+ getCharacterCurrentParams(kCharacterMaster)[4] = 225 * (4 * rnd(6) + 8);
+ getCharacterCurrentParams(kCharacterMaster)[6] = 0;
goto LABEL_45;
}
- if (action != 2) {
- if (action == 3) {
- endGraphics(31);
- v2->callbacks[*p_currentCall + 8] = 11;
+ if (msg->action != 2) {
+ if (msg->action == 3) {
+ endGraphics(kCharacterMaster);
+ getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 11;
MasterCall(&LogicManager::CONS_Master_SaveGame, 1, 0, 0, 0);
}
return;
}
if (getCharacterParams(kCharacterMaster, 8)[1]) {
- send(31, 32, 191350523, 0);
+ send(kCharacterMaster, kCharacterClerk, 191350523, 0);
if (getCharacter(kCharacterCath).characterPosition.location == 2) {
if (cathOutHisWindow()) {
- v18 = 49;
- LABEL_62:
- bumpCath(3, v18, 255);
- goto LABEL_63;
+ bumpCath(kCarGreenSleeping, 49, 255);
+ _engine->getSoundManager()->startAmbient();
+ _engine->getSoundManager()->startSteam(getCharacterParams(kCharacterMaster, 8)[3]);
+ getCharacterParams(kCharacterMaster, 8)[1] = 0;
+ return;
}
if (cathOutRebeccaWindow()) {
- bumpCath(4, 49, 255);
+ bumpCath(kCarRedSleeping, 49, 255);
} else {
- car = getCharacter(kCharacterCath).characterPosition.car;
- if (car < 4 || car > 7) {
- if (!car || car > 3)
- goto LABEL_63;
- if (checkCathDir(3, 98)) {
- playDialog(kCharacterCath, "LIB015", -1, 0);
- v18 = 71;
+ 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;
+ return;
+ }
+
+ if (checkCathDir(kCarGreenSleeping, 98)) {
+ playDialog(0, "LIB015", -1, 0);
+ bumpCath(kCarGreenSleeping, 71, 255);
} else {
- v18 = 82;
+ bumpCath(kCarGreenSleeping, 82, 255);
}
- goto LABEL_62;
+
+ _engine->getSoundManager()->startAmbient();
+ _engine->getSoundManager()->startSteam(getCharacterParams(kCharacterMaster, 8)[3]);
+ getCharacterParams(kCharacterMaster, 8)[1] = 0;
+ return;
}
- bumpCath(5, 82, 255);
+
+ bumpCath(kCarRestaurant, 82, 255);
}
}
- LABEL_63:
+
_engine->getSoundManager()->startAmbient();
- _engine->getSoundManager()->startSteam(v2->callParams[8].parameters[3]);
- v2->callParams[8].parameters[1] = 0;
+ _engine->getSoundManager()->startSteam(getCharacterParams(kCharacterMaster, 8)[3]);
+ getCharacterParams(kCharacterMaster, 8)[1] = 0;
return;
}
if (getCharacterParams(kCharacterMaster, 8)[2]) {
_engine->getSoundManager()->startAmbient();
- v2->callParams[8].parameters[2] = 0;
- } else if (!v4->parameters[1] && !v4->parameters[2]) {
- playDialog(31, "ZFX1001", -1, 0);
+ getCharacterParams(kCharacterMaster, 8)[2] = 0;
+ } else if (!getCharacterCurrentParams(kCharacterMaster)[1] && !getCharacterCurrentParams(kCharacterMaster)[2]) {
+ playDialog(kCharacterMaster, "ZFX1001", -1, 0);
}
}
@@ -1925,7 +1973,8 @@ void LogicManager::CONS_Master_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Master_StartPart5(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (_gameProgress[kProgressChapter] != 5) {
_gameProgress[kProgressChapter] = 5;
makeAllJump(5);
@@ -1935,6 +1984,9 @@ void LogicManager::HAND_Master_StartPart5(HAND_PARAMS) {
_gameTimeTicksDelta = 2;
CONS_Master_InitPart5(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1949,89 +2001,97 @@ void LogicManager::CONS_Master_InitPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Master_InitPart5(HAND_PARAMS) {
- if (msg->action == 12) {
- endGraphics(33);
- endGraphics(34);
- endGraphics(35);
- endGraphics(36);
- endGraphics(37);
- endGraphics(38);
-
- _gameProgress[20] = 1;
-
- setDoor(26, 0, 1, 0, 9);
- setDoor(27, 0, 1, 0, 9);
- setDoor(1, 0, 0, 10, 9);
- setDoor(2, 0, 0, 10, 9);
- setDoor(3, 0, 0, 10, 9);
- setDoor(4, 0, 3, 10, 9);
- setDoor(5, 0, 3, 10, 9);
- setDoor(6, 0, 3, 10, 9);
- setDoor(7, 0, 3, 10, 9);
- setDoor(8, 0, 3, 10, 9);
- setDoor(32, 0, 0, 10, 9);
- setDoor(33, 0, 0, 10, 9);
- setDoor(34, 0, 0, 10, 9);
- setDoor(35, 0, 0, 10, 9);
- setDoor(36, 0, 0, 10, 9);
- setDoor(37, 0, 0, 10, 9);
- setDoor(38, 0, 3, 10, 9);
- setDoor(39, 0, 3, 10, 9);
- setDoor(17, 0, 0, 10, 9);
- setDoor(18, 0, 0, 10, 9);
- setDoor(19, 0, 0, 10, 9);
- setDoor(20, 0, 3, 10, 9);
- setDoor(21, 0, 3, 10, 9);
- setDoor(22, 0, 3, 10, 9);
- setDoor(48, 0, 0, 10, 9);
- setDoor(49, 0, 0, 10, 9);
- setDoor(50, 0, 0, 10, 9);
- setDoor(51, 0, 0, 10, 9);
- setDoor(52, 0, 0, 10, 9);
- setDoor(53, 0, 0, 10, 9);
- setDoor(26, 0, 0, 10, 9);
- setDoor(27, 0, 0, 10, 9);
-
- _gameProgress[6] = 1;
+ switch (msg->action) {
+ case 12:
+ endGraphics(kCharacterTableA);
+ endGraphics(kCharacterTableB);
+ endGraphics(kCharacterTableC);
+ endGraphics(kCharacterTableD);
+ endGraphics(kCharacterTableE);
+ endGraphics(kCharacterTableF);
+
+ _gameProgress[kProgressIsTrainRunning] = 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);
+
+ _gameProgress[kProgressField18] = 1;
_inventorySelectedItemIdx = 0;
- _gameProgress[33] = 1;
- _gameProgress[7] = 36;
+ _gameProgress[kProgressField84] = 1;
+ _gameProgress[kProgressPortrait] = 36;
- takeCathItem(15);
- takeCathItem(16);
- takeCathItem(12);
+ takeCathItem(kItemKey);
+ takeCathItem(kItemBomb);
+ takeCathItem(kItemMatch);
- if (cathHasItem(18)) {
- takeCathItem(18);
- dropItem(18, 3);
+ if (cathHasItem(kItemFirebird)) {
+ takeCathItem(kItemFirebird);
+ dropItem(kItemFirebird, 3);
- if (cathHasItem(13)) {
- takeCathItem(13);
- dropItem(13, 3);
+ if (cathHasItem(kItemWhistle)) {
+ takeCathItem(kItemWhistle);
+ dropItem(kItemWhistle, 3);
}
}
- setDoor(93, 0, 2, 255, 255);
- setDoor(94, 0, 0, 255, 255);
- setDoor(101, 0, 0, 10, 9);
+ 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(31);
+ endDialog(kCharacterMaster);
getCharacterParams(kCharacterMaster, 8)[1] = 0;
getCharacterParams(kCharacterMaster, 8)[2] = 0;
}
fadeToBlack();
- bumpCath(1, 95, 255);
+ bumpCath(kCarBaggageRear, 95, 255);
restoreIcons();
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 1;
MasterCall(&LogicManager::CONS_Master_SaveGame, 1, 0, 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] == 1) {
- CONS_Master_MovingPart5(0, 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;
}
}
@@ -2046,44 +2106,54 @@ void LogicManager::CONS_Master_MovingPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Master_MovingPart5(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- if (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] == 1) {
- playNIS(46);
- endGame(1, 2898000, 51, 1);
- }
- } else if (msg->action == 135800432) {
- _gameProgress[14] = 1;
- _gameTime = 2916000;
- if (whoRunningDialog(31))
- endDialog(31);
- }
- } else if (msg->action == 12) {
- getCharacterCurrentParams(kCharacterMaster)[0] = 225 * (4 * rnd(10) + 20);
- } else if (msg->action) {
- if (msg->action == 2) {
- if (_gameTime <= 2943000) {
- getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 1;
- MasterCall(&LogicManager::CONS_Master_SaveGame, 2, 0x2E, 0, 0);
- } else {
- endGame(1, 2934000, 51, 1);
- }
- }
- } else {
+ switch (msg->action) {
+ case 0:
if (_gameTime > 2907000 && !getCharacterCurrentParams(kCharacterMaster)[1]) {
getCharacterCurrentParams(kCharacterMaster)[1] = 1;
- if (!_gameProgress[14]) {
- playDialog(31, "ARRIVE", 8, 0);
+ if (!_gameProgress[kProgressIsDayTime]) {
+ playDialog(kCharacterMaster, "ARRIVE", 8, 0);
_engine->getSoundManager()->endAmbient();
}
}
+
if (_gameTime > 2943000 && !getCharacterCurrentParams(kCharacterMaster)[2]) {
getCharacterCurrentParams(kCharacterMaster)[2] = 1;
- if (!_gameEvents[108] && !_gameEvents[109]) {
- playDialog(31, "ARRIVE", 8, 0);
+ if (!_gameEvents[kEventLocomotiveMilosDay] && !_gameEvents[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:
+ _gameProgress[kProgressIsDayTime] = 1;
+ _gameTime = 2916000;
+
+ if (whoRunningDialog(kCharacterMaster))
+ endDialog(kCharacterMaster);
+
+ break;
+ default:
+ break;
}
}
Commit: 6d0f5b1524798b9965912d93f7a6bfeb0862c73b
https://github.com/scummvm/scummvm/commit/6d0f5b1524798b9965912d93f7a6bfeb0862c73b
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up more code
Changed paths:
engines/lastexpress/data/archive.cpp
engines/lastexpress/data/archive.h
engines/lastexpress/game/nis.cpp
engines/lastexpress/game/nis.h
engines/lastexpress/graphics.cpp
engines/lastexpress/graphics.h
engines/lastexpress/lastexpress.cpp
diff --git a/engines/lastexpress/data/archive.cpp b/engines/lastexpress/data/archive.cpp
index 07f92786576..47339b6fbe2 100644
--- a/engines/lastexpress/data/archive.cpp
+++ b/engines/lastexpress/data/archive.cpp
@@ -34,13 +34,13 @@ namespace LastExpress {
ArchiveManager::ArchiveManager(LastExpressEngine *engine) {
_engine = engine;
- g_CDFilePointer = new Common::File();
- g_HDFilePointer = new Common::File();
+ _cdFilePointer = new Common::File();
+ _hdFilePointer = new Common::File();
}
ArchiveManager::~ArchiveManager() {
- SAFE_DELETE(g_CDFilePointer);
- SAFE_DELETE(g_HDFilePointer);
+ SAFE_DELETE(_cdFilePointer);
+ SAFE_DELETE(_hdFilePointer);
}
HPF *ArchiveManager::search(const char *name, HPF *archive, int archiveSize) {
@@ -69,17 +69,17 @@ HPF *ArchiveManager::search(const char *name, HPF *archive, int archiveSize) {
bool ArchiveManager::lockCD(int32 index) {
char filename[80];
- if (g_CDFilePointer && g_CDArchiveIndex == index)
+ if (_cdFilePointer && _cdArchiveIndex == index)
return true;
// Not present in the original, but we need it since we're about to reopen a new file...
- if (g_CDFilePointer && g_CDFilePointer->isOpen())
- g_CDFilePointer->close();
+ if (_cdFilePointer && _cdFilePointer->isOpen())
+ _cdFilePointer->close();
if (!isCDAvailable(index, filename, sizeof(filename)) || !lockCache(filename))
return false;
- g_CDArchiveIndex = index;
+ _cdArchiveIndex = index;
return true;
}
@@ -93,21 +93,21 @@ bool ArchiveManager::lockCache(char *filename) {
uint32 curSubFilesNum;
uint32 archiveIndex = 0;
- g_CDFilePosition = 0;
+ _cdFilePosition = 0;
- if (!g_CDFilePointer || !g_CDFilePointer->open(filename))
+ if (!_cdFilePointer || !_cdFilePointer->open(filename))
return false;
- g_CDArchiveNumFiles = g_CDFilePointer->readUint32LE();
+ _cdArchiveNumFiles = _cdFilePointer->readUint32LE();
- if (g_CDFilePointer->err()) {
+ if (_cdFilePointer->err()) {
error("Error reading from file \"%s\"", filename);
}
- remainingArchiveSize = g_CDArchiveNumFiles;
- g_CDFilePosition += 4;
+ remainingArchiveSize = _cdArchiveNumFiles;
+ _cdFilePosition += 4;
- if (g_CDArchiveNumFiles) {
+ if (_cdArchiveNumFiles) {
do {
curSubFilesNum = 500;
@@ -118,14 +118,14 @@ bool ArchiveManager::lockCache(char *filename) {
// This is not quite portable as the bytes are directly associated to the struct, which might
// have alignment differences, so instead we do it in the "ScummVM way"...
for (uint i = 0; i < curSubFilesNum; i++) {
- g_CDFilePointer->read(g_CDArchive[archiveIndex + i].name, sizeof(g_CDArchive[archiveIndex + i].name));
- g_CDArchive[archiveIndex + i].offset = g_CDFilePointer->readUint32LE();
- g_CDArchive[archiveIndex + i].size = g_CDFilePointer->readUint16LE();
- g_CDArchive[archiveIndex + i].currentPos = g_CDFilePointer->readUint16LE();
- g_CDArchive[archiveIndex + i].status = g_CDFilePointer->readUint16LE();
+ _cdFilePointer->read(_cdArchive[archiveIndex + i].name, sizeof(_cdArchive[archiveIndex + i].name));
+ _cdArchive[archiveIndex + i].offset = _cdFilePointer->readUint32LE();
+ _cdArchive[archiveIndex + i].size = _cdFilePointer->readUint16LE();
+ _cdArchive[archiveIndex + i].currentPos = _cdFilePointer->readUint16LE();
+ _cdArchive[archiveIndex + i].status = _cdFilePointer->readUint16LE();
}
- if (g_CDFilePointer->err()) {
+ if (_cdFilePointer->err()) {
error("Error reading from file \"%s\"", filename);
}
@@ -135,86 +135,86 @@ bool ArchiveManager::lockCache(char *filename) {
} while (remainingArchiveSize);
}
- g_CDFilePosition += 22 * g_CDArchiveNumFiles;
+ _cdFilePosition += 22 * _cdArchiveNumFiles;
return true;
}
void ArchiveManager::initHPFS() {
- g_HDFilePosition = 0;
+ _hdFilePosition = 0;
- if (!g_HDFilePointer || !g_HDFilePointer->open(_engine->isDemo() ? "DEMO.HPF" : "HD.hpf")) {
+ if (!_hdFilePointer || !_hdFilePointer->open(_engine->isDemo() ? "DEMO.HPF" : "HD.hpf")) {
error("Hard drive cache not found (please reinstall)");
}
- g_CDArchive = (HPF *)malloc(6500 * sizeof(HPF));
+ _cdArchive = (HPF *)malloc(6500 * sizeof(HPF));
- if (!g_CDArchive) {
+ if (!_cdArchive) {
error("Out of memory");
}
- g_HDArchiveNumFiles = g_HDFilePointer->readUint32LE();
+ _hdArchiveNumFiles = _hdFilePointer->readUint32LE();
- if (g_HDFilePointer->err()) {
+ if (_hdFilePointer->err()) {
error("Error reading from file \"%s\"", _engine->isDemo() ? "DEMO.HPF" : "HD.hpf");
}
- g_HDFilePosition += 4;
- g_HDArchive = (HPF *)malloc(g_HDArchiveNumFiles * sizeof(HPF));
+ _hdFilePosition += 4;
+ _hdArchive = (HPF *)malloc(_hdArchiveNumFiles * sizeof(HPF));
- if (!g_HDArchive) {
+ if (!_hdArchive) {
error("Out of memory");
}
- for (int i = 0; i < g_HDArchiveNumFiles; i++) {
- g_HDFilePointer->read(g_HDArchive[i].name, sizeof(g_HDArchive[i].name));
- g_HDArchive[i].offset = g_HDFilePointer->readUint32LE();
- g_HDArchive[i].size = g_HDFilePointer->readUint16LE();
- g_HDArchive[i].currentPos = g_HDFilePointer->readUint16LE();
- g_HDArchive[i].status = g_HDFilePointer->readUint16LE();
+ for (int i = 0; i < _hdArchiveNumFiles; i++) {
+ _hdFilePointer->read(_hdArchive[i].name, sizeof(_hdArchive[i].name));
+ _hdArchive[i].offset = _hdFilePointer->readUint32LE();
+ _hdArchive[i].size = _hdFilePointer->readUint16LE();
+ _hdArchive[i].currentPos = _hdFilePointer->readUint16LE();
+ _hdArchive[i].status = _hdFilePointer->readUint16LE();
}
- if (g_HDFilePointer->err()) {
+ if (_hdFilePointer->err()) {
error("Error reading from file \"%s\"", _engine->isDemo() ? "DEMO.HPF" : "HD.hpf");
}
- g_HDFilePosition += g_HDArchiveNumFiles;
+ _hdFilePosition += _hdArchiveNumFiles;
}
void ArchiveManager::shutDownHPFS() {
unlockCD();
- if (g_HDFilePointer)
- g_HDFilePointer->close();
+ if (_hdFilePointer)
+ _hdFilePointer->close();
- if (g_HDFilePointer && g_HDFilePointer->isOpen()) {
+ if (_hdFilePointer && _hdFilePointer->isOpen()) {
error("Error closing file \"%s\"", "HD cache file");
}
- if (g_HDArchive) {
- free(g_HDArchive);
- g_HDArchive = nullptr;
+ if (_hdArchive) {
+ free(_hdArchive);
+ _hdArchive = nullptr;
}
- if (g_CDArchive) {
- free(g_CDArchive);
- g_CDArchive = nullptr;
+ if (_cdArchive) {
+ free(_cdArchive);
+ _cdArchive = nullptr;
}
- delete g_HDFilePointer;
- g_HDFilePointer = nullptr;
+ delete _hdFilePointer;
+ _hdFilePointer = nullptr;
- g_HDArchiveNumFiles = 0;
- g_HDFilePosition = 0;
+ _hdArchiveNumFiles = 0;
+ _hdFilePosition = 0;
}
void ArchiveManager::unlockCD() {
- if (g_CDFilePointer)
- g_CDFilePointer->close();
+ if (_cdFilePointer)
+ _cdFilePointer->close();
- g_CDArchiveNumFiles = 0;
- g_CDFilePosition = 0;
- g_CDArchiveIndex = 0;
+ _cdArchiveNumFiles = 0;
+ _cdFilePosition = 0;
+ _cdArchiveIndex = 0;
}
HPF *ArchiveManager::openHPF(const char *filename) {
@@ -222,13 +222,13 @@ HPF *ArchiveManager::openHPF(const char *filename) {
Common::String filenameStr(filename);
filenameStr.toUppercase();
- if (!g_HDFilePointer)
+ if (!_hdFilePointer)
return nullptr;
- result = search(filenameStr.c_str(), g_HDArchive, g_HDArchiveNumFiles);
+ result = search(filenameStr.c_str(), _hdArchive, _hdArchiveNumFiles);
if (!result) {
- if (g_CDArchiveNumFiles)
- result = search(filenameStr.c_str(), g_CDArchive, g_CDArchiveNumFiles);
+ if (_cdArchiveNumFiles)
+ result = search(filenameStr.c_str(), _cdArchive, _cdArchiveNumFiles);
if (!result)
return nullptr;
@@ -244,36 +244,36 @@ HPF *ArchiveManager::openHPF(const char *filename) {
}
void ArchiveManager::readHD(void *dstBuf, int offset, uint32 size) {
- if (g_HDFilePointer && g_HDFilePointer->isOpen()) {
- if (offset != g_HDFilePosition) {
- if (!g_HDFilePointer->seek(offset * PAGE_SIZE, SEEK_SET)) {
+ if (_hdFilePointer && _hdFilePointer->isOpen()) {
+ if (offset != _hdFilePosition) {
+ if (!_hdFilePointer->seek(offset * PAGE_SIZE, SEEK_SET)) {
error("Error seeking in file \"%s\"", "HD cache file");
}
}
- uint32 readSize = g_HDFilePointer->read(dstBuf, size * PAGE_SIZE);
+ uint32 readSize = _hdFilePointer->read(dstBuf, size * PAGE_SIZE);
if (readSize != size * PAGE_SIZE) {
error("Error reading from file \"%s\"", "HD cache file");
}
- g_HDFilePosition = (offset + size);
+ _hdFilePosition = (offset + size);
}
}
void ArchiveManager::readCD(void *dstBuf, int offset, uint32 size) {
- if (g_CDFilePointer && g_CDFilePointer->isOpen()) {
- if (offset != g_CDFilePosition) {
- if (!g_CDFilePointer->seek(offset * PAGE_SIZE, SEEK_SET)) {
+ if (_cdFilePointer && _cdFilePointer->isOpen()) {
+ if (offset != _cdFilePosition) {
+ if (!_cdFilePointer->seek(offset * PAGE_SIZE, SEEK_SET)) {
error("Error seeking in file \"%s\"", "CD cache file");
}
}
- uint32 readSize = g_CDFilePointer->read(dstBuf, size * PAGE_SIZE);
+ uint32 readSize = _cdFilePointer->read(dstBuf, size * PAGE_SIZE);
if (readSize != size * PAGE_SIZE) {
error("Error reading from file \"%s\"", "CD cache file");
}
- g_CDFilePosition = (offset + readSize);
+ _cdFilePosition = (offset + readSize);
}
}
diff --git a/engines/lastexpress/data/archive.h b/engines/lastexpress/data/archive.h
index 1e727f97320..caa9e87f008 100644
--- a/engines/lastexpress/data/archive.h
+++ b/engines/lastexpress/data/archive.h
@@ -94,17 +94,17 @@ public:
private:
LastExpressEngine *_engine = nullptr;
- Common::File *g_CDFilePointer = nullptr;
- int32 g_CDFilePosition = 0;
- int32 g_CDArchiveNumFiles = 0;
+ Common::File *_cdFilePointer = nullptr;
+ int32 _cdFilePosition = 0;
+ int32 _cdArchiveNumFiles = 0;
- Common::File *g_HDFilePointer = nullptr;
- int32 g_HDFilePosition = 0;
- int32 g_HDArchiveNumFiles = 0;
+ Common::File *_hdFilePointer = nullptr;
+ int32 _hdFilePosition = 0;
+ int32 _hdArchiveNumFiles = 0;
- HPF *g_CDArchive = nullptr;
- HPF *g_HDArchive = nullptr;
- int32 g_CDArchiveIndex = 0;
+ HPF *_cdArchive = nullptr;
+ HPF *_hdArchive = nullptr;
+ int32 _cdArchiveIndex = 0;
};
} // End of namespace LastExpress
diff --git a/engines/lastexpress/game/nis.cpp b/engines/lastexpress/game/nis.cpp
index cee8a57f96c..1ec73a63975 100644
--- a/engines/lastexpress/game/nis.cpp
+++ b/engines/lastexpress/game/nis.cpp
@@ -330,12 +330,12 @@ void NISManager::abortNIS() {
_flags |= kNisFlagAbortRequested;
}
-void NISManager::NISMouse(Event *event) {
+void NISManager::nisMouse(Event *event) {
if ((event->flags & 0x10) != 0)
abortNIS();
}
-void NISManager::NISTimer(Event *event) {
+void NISManager::nisTimer(Event *event) {
_engine->setEventTickInternal(false);
}
diff --git a/engines/lastexpress/game/nis.h b/engines/lastexpress/game/nis.h
index 977246a9627..103bb7d6c7d 100644
--- a/engines/lastexpress/game/nis.h
+++ b/engines/lastexpress/game/nis.h
@@ -55,8 +55,8 @@ public:
bool initNIS(const char *filename, int32 flags);
void endNIS();
void abortNIS();
- void NISMouse(Event *event);
- void NISTimer(Event *event);
+ void nisMouse(Event *event);
+ void nisTimer(Event *event);
void drawSprite(NisSprite *sprite);
void waxSprite(NisSprite *sprite);
void waneSprite(NisSprite *sprite);
diff --git a/engines/lastexpress/graphics.cpp b/engines/lastexpress/graphics.cpp
index 51b1a75c70e..06ac73ea1c3 100644
--- a/engines/lastexpress/graphics.cpp
+++ b/engines/lastexpress/graphics.cpp
@@ -43,15 +43,24 @@ GraphicsManager::GraphicsManager(LastExpressEngine *engine) {
GraphicsManager::~GraphicsManager() {}
-bool GraphicsManager::goLockSurface() {
- return true;
-}
-
bool GraphicsManager::acquireSurface() {
+ // This function is technically useless, but I'm keeping it
+ // as a marker for when the engine wants to acquire the gfx context
+ // for when it has to draw something.
+ //
+ // It has proven to be useful during debugging,
+ // maybe it'll be useful in the future as well...
+
return true;
}
void GraphicsManager::unlockSurface() {
+ // As before, this function is technically useless, but I'm keeping it
+ // as a marker for when the engine wants to release the gfx context
+ // for when it finishes drawing something.
+ //
+ // It has proven to be useful during debugging,
+ // maybe it'll be useful in the future as well...
}
void GraphicsManager::burstAll() {
diff --git a/engines/lastexpress/graphics.h b/engines/lastexpress/graphics.h
index ef97f468761..8ab3e39b822 100644
--- a/engines/lastexpress/graphics.h
+++ b/engines/lastexpress/graphics.h
@@ -76,7 +76,6 @@ public:
GraphicsManager(LastExpressEngine *engine);
~GraphicsManager();
- bool goLockSurface();
bool acquireSurface();
void unlockSurface();
void burstAll();
diff --git a/engines/lastexpress/lastexpress.cpp b/engines/lastexpress/lastexpress.cpp
index 6e8c287abb9..8fb7889e0f1 100644
--- a/engines/lastexpress/lastexpress.cpp
+++ b/engines/lastexpress/lastexpress.cpp
@@ -57,10 +57,21 @@ LastExpressEngine::LastExpressEngine(OSystem *syst, const ADGameDescription *gd)
}
LastExpressEngine::~LastExpressEngine() {
- // Delete the remaining objects
+ SAFE_DELETE(_graphicsMan);
+ SAFE_DELETE(_spriteMan);
+ SAFE_DELETE(_otisMan);
+ SAFE_DELETE(_subtitleMan);
+ SAFE_DELETE(_archiveMan);
+ SAFE_DELETE(_memMan);
+ SAFE_DELETE(_msgMan);
+ SAFE_DELETE(_nisMan);
+ SAFE_DELETE(_soundMan);
+ SAFE_DELETE(_logicMan);
SAFE_DELETE(_menu);
+ SAFE_DELETE(_saveMan);
SAFE_DELETE(_clock);
SAFE_DELETE(_vcr);
+
//_debugger is deleted by Engine
// Zero passed pointers
@@ -133,11 +144,12 @@ Common::Error LastExpressEngine::run() {
if (gDebugLevel >= 3)
DebugMan.enableDebugChannel(kDebugConsole);
+ // Graphics manager
_graphicsMan = new GraphicsManager(this);
+ // Animation system
_spriteMan = new SpriteManager(this);
_otisMan = new OtisManager(this);
- _subtitleMan = new SubtitleManager(this);
// Archive manager
_archiveMan = new ArchiveManager(this);
@@ -151,8 +163,9 @@ Common::Error LastExpressEngine::run() {
// NIS manager
_nisMan = new NISManager(this);
- // Sound manager
+ // Sound&subtitles manager
_soundMan = new SoundManager(this);
+ _subtitleMan = new SubtitleManager(this);
// Logic manager
_logicMan = new LogicManager(this);
@@ -200,13 +213,6 @@ Common::Error LastExpressEngine::run() {
waitForTimer(4); // Wait 4 ticks (tick duration: 17 ms dictated by the sound timer)
elapsedMs += 4 * 17;
-
- // Simulate a WM_TIMER event every 250ms
- if (elapsedMs >= 250) {
- elapsedMs -= 250;
- //if (_canDrawMouse)
- // getMessageManager()->addEvent(4, 0, 0, 4);
- }
}
getTimerManager()->removeTimerProc(soundTimerHandler);
@@ -558,11 +564,11 @@ void LastExpressEngine::nodeStepTimerWrapper(Event *event) {
}
void LastExpressEngine::nisMouseWrapper(Event *event) {
- getNISManager()->NISMouse(event);
+ getNISManager()->nisMouse(event);
}
void LastExpressEngine::nisTimerWrapper(Event *event) {
- getNISManager()->NISTimer(event);
+ getNISManager()->nisTimer(event);
}
void LastExpressEngine::creditsMouseWrapper(Event *event) {
Commit: 4b0f18e4eb2f712c0f57e14151b1a76b603a9cb9
https://github.com/scummvm/scummvm/commit/4b0f18e4eb2f712c0f57e14151b1a76b603a9cb9
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up tables (ha-ha.)
Changed paths:
engines/lastexpress/characters/tablea.cpp
engines/lastexpress/characters/tableb.cpp
engines/lastexpress/characters/tablec.cpp
engines/lastexpress/characters/tabled.cpp
engines/lastexpress/characters/tablee.cpp
engines/lastexpress/characters/tablef.cpp
diff --git a/engines/lastexpress/characters/tablea.cpp b/engines/lastexpress/characters/tablea.cpp
index e49ae5f8b47..0b61d0ec832 100644
--- a/engines/lastexpress/characters/tablea.cpp
+++ b/engines/lastexpress/characters/tablea.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_TableA(int chapter) {
CONS_TableA_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -63,8 +63,13 @@ void LogicManager::CONS_TableA_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_TableA_Birth(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_TableA_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_TableA_StartPart2(CONS_PARAMS) {
@@ -78,8 +83,13 @@ void LogicManager::CONS_TableA_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_TableA_StartPart2(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_TableA_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_TableA_StartPart3(CONS_PARAMS) {
@@ -93,8 +103,13 @@ void LogicManager::CONS_TableA_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_TableA_StartPart3(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_TableA_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_TableA_StartPart4(CONS_PARAMS) {
@@ -108,8 +123,13 @@ void LogicManager::CONS_TableA_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_TableA_StartPart4(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_TableA_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_TableA_StartPart5(CONS_PARAMS) {
@@ -123,8 +143,13 @@ void LogicManager::CONS_TableA_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_TableA_StartPart5(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_TableA_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_TableA_Idling(CONS_PARAMS) {
diff --git a/engines/lastexpress/characters/tableb.cpp b/engines/lastexpress/characters/tableb.cpp
index 87c34e161d7..7730916e88f 100644
--- a/engines/lastexpress/characters/tableb.cpp
+++ b/engines/lastexpress/characters/tableb.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_TableB(int chapter) {
CONS_TableB_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -63,8 +63,13 @@ void LogicManager::CONS_TableB_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_TableB_Birth(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_TableB_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_TableB_StartPart2(CONS_PARAMS) {
@@ -78,8 +83,13 @@ void LogicManager::CONS_TableB_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_TableB_StartPart2(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_TableB_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_TableB_StartPart3(CONS_PARAMS) {
@@ -93,8 +103,13 @@ void LogicManager::CONS_TableB_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_TableB_StartPart3(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_TableB_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_TableB_StartPart4(CONS_PARAMS) {
@@ -108,8 +123,13 @@ void LogicManager::CONS_TableB_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_TableB_StartPart4(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_TableB_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_TableB_StartPart5(CONS_PARAMS) {
@@ -123,8 +143,13 @@ void LogicManager::CONS_TableB_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_TableB_StartPart5(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_TableB_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_TableB_Idling(CONS_PARAMS) {
diff --git a/engines/lastexpress/characters/tablec.cpp b/engines/lastexpress/characters/tablec.cpp
index 79fc77810c7..5eccf09ac28 100644
--- a/engines/lastexpress/characters/tablec.cpp
+++ b/engines/lastexpress/characters/tablec.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_TableC(int chapter) {
CONS_TableC_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -63,9 +63,13 @@ void LogicManager::CONS_TableC_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_TableC_Birth(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
_engine->getSoundManager()->playSoundFile("LOOP8A.SND", kSoundTypeWalla | kSoundFlagLooped | kVolume8, kCharacterTableC, 0);
CONS_TableC_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -80,9 +84,13 @@ void LogicManager::CONS_TableC_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_TableC_StartPart2(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
_engine->getSoundManager()->playSoundFile("LOOP8A.SND", kSoundTypeWalla | kSoundFlagLooped | kVolume8, kCharacterTableC, 0);
CONS_TableC_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -97,9 +105,13 @@ void LogicManager::CONS_TableC_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_TableC_StartPart3(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
_engine->getSoundManager()->playSoundFile("LOOP8A.SND", kSoundTypeWalla | kSoundFlagLooped | kVolume8, kCharacterTableC, 0);
CONS_TableC_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -114,9 +126,13 @@ void LogicManager::CONS_TableC_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_TableC_StartPart4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
_engine->getSoundManager()->playSoundFile("LOOP8A.SND", kSoundTypeWalla | kSoundFlagLooped | kVolume8, kCharacterTableC, 0);
CONS_TableC_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -131,11 +147,15 @@ void LogicManager::CONS_TableC_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_TableC_StartPart5(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (whoRunningDialog(kCharacterTableC))
fadeDialog(kCharacterTableC);
CONS_TableC_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
diff --git a/engines/lastexpress/characters/tabled.cpp b/engines/lastexpress/characters/tabled.cpp
index 7eb5418ac98..991bef0c976 100644
--- a/engines/lastexpress/characters/tabled.cpp
+++ b/engines/lastexpress/characters/tabled.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_TableD(int chapter) {
CONS_TableD_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -63,8 +63,13 @@ void LogicManager::CONS_TableD_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_TableD_Birth(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_TableD_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_TableD_StartPart2(CONS_PARAMS) {
@@ -78,8 +83,13 @@ void LogicManager::CONS_TableD_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_TableD_StartPart2(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_TableD_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_TableD_StartPart3(CONS_PARAMS) {
@@ -93,8 +103,13 @@ void LogicManager::CONS_TableD_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_TableD_StartPart3(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_TableD_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_TableD_StartPart4(CONS_PARAMS) {
@@ -108,8 +123,13 @@ void LogicManager::CONS_TableD_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_TableD_StartPart4(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_TableD_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_TableD_StartPart5(CONS_PARAMS) {
@@ -123,8 +143,13 @@ void LogicManager::CONS_TableD_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_TableD_StartPart5(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_TableD_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_TableD_Idling(CONS_PARAMS) {
diff --git a/engines/lastexpress/characters/tablee.cpp b/engines/lastexpress/characters/tablee.cpp
index 1449841e035..fa7247f64d0 100644
--- a/engines/lastexpress/characters/tablee.cpp
+++ b/engines/lastexpress/characters/tablee.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_TableE(int chapter) {
CONS_TableE_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -63,8 +63,13 @@ void LogicManager::CONS_TableE_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_TableE_Birth(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_TableE_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_TableE_StartPart2(CONS_PARAMS) {
@@ -78,8 +83,13 @@ void LogicManager::CONS_TableE_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_TableE_StartPart2(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_TableE_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_TableE_StartPart3(CONS_PARAMS) {
@@ -93,8 +103,13 @@ void LogicManager::CONS_TableE_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_TableE_StartPart3(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_TableE_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_TableE_StartPart4(CONS_PARAMS) {
@@ -108,8 +123,13 @@ void LogicManager::CONS_TableE_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_TableE_StartPart4(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_TableE_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_TableE_StartPart5(CONS_PARAMS) {
@@ -123,8 +143,13 @@ void LogicManager::CONS_TableE_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_TableE_StartPart5(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_TableE_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_TableE_Idling(CONS_PARAMS) {
diff --git a/engines/lastexpress/characters/tablef.cpp b/engines/lastexpress/characters/tablef.cpp
index 8f6ffddca4b..e592fb7f409 100644
--- a/engines/lastexpress/characters/tablef.cpp
+++ b/engines/lastexpress/characters/tablef.cpp
@@ -28,7 +28,8 @@ void LogicManager::CONS_TableF(int chapter) {
case 0:
_engine->getMessageManager()->setMessageHandle(
kCharacterTableF,
- _functionsTableF[getCharacter(kCharacterTableF).callbacks[getCharacter(kCharacterTableF).currentCall]]);
+ _functionsTableF[getCharacter(kCharacterTableF).callbacks[getCharacter(kCharacterTableF).currentCall]]
+ );
break;
case 1:
@@ -47,7 +48,7 @@ void LogicManager::CONS_TableF(int chapter) {
CONS_TableF_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -62,8 +63,13 @@ void LogicManager::CONS_TableF_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_TableF_Birth(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_TableF_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_TableF_StartPart2(CONS_PARAMS) {
@@ -77,8 +83,13 @@ void LogicManager::CONS_TableF_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_TableF_StartPart2(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_TableF_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_TableF_StartPart3(CONS_PARAMS) {
@@ -92,8 +103,13 @@ void LogicManager::CONS_TableF_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_TableF_StartPart3(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_TableF_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_TableF_StartPart4(CONS_PARAMS) {
@@ -107,8 +123,13 @@ void LogicManager::CONS_TableF_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_TableF_StartPart4(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_TableF_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_TableF_StartPart5(CONS_PARAMS) {
@@ -122,8 +143,13 @@ void LogicManager::CONS_TableF_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_TableF_StartPart5(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_TableF_Idling(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_TableF_Idling(CONS_PARAMS) {
Commit: 11fe839e47a0c814ee298febb4770f5fef18631b
https://github.com/scummvm/scummvm/commit/11fe839e47a0c814ee298febb4770f5fef18631b
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Yasmin logic
Changed paths:
engines/lastexpress/characters/yasmin.cpp
diff --git a/engines/lastexpress/characters/yasmin.cpp b/engines/lastexpress/characters/yasmin.cpp
index 92ac448d302..989737e6df5 100644
--- a/engines/lastexpress/characters/yasmin.cpp
+++ b/engines/lastexpress/characters/yasmin.cpp
@@ -28,8 +28,7 @@ void LogicManager::CONS_Yasmin(int chapter) {
case 0:
_engine->getMessageManager()->setMessageHandle(
kCharacterYasmin,
- _functionsYasmin[getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall]]
- );
+ _functionsYasmin[getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall]]);
break;
case 1:
@@ -48,7 +47,7 @@ void LogicManager::CONS_Yasmin(int chapter) {
CONS_Yasmin_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -77,6 +76,7 @@ void LogicManager::HAND_Yasmin_DebugWalks(HAND_PARAMS) {
else
getCharacterCurrentParams(kCharacterYasmin)[0] = 10000;
}
+
break;
case 5:
playCathExcuseMe();
@@ -110,14 +110,19 @@ void LogicManager::CONS_Yasmin_DoCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Yasmin_DoCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterYasmin, getCharacterCurrentParams(kCharacterYasmin)[3]);
getCharacter(kCharacterYasmin).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterYasmin, _functionsYasmin[getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall]]);
fedEx(kCharacterYasmin, kCharacterYasmin, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterYasmin, (char *)&getCharacterCurrentParams(kCharacterYasmin)[0]);
blockAtDoor(kCharacterYasmin, getCharacterCurrentParams(kCharacterYasmin)[3]);
+ break;
+ default:
+ break;
}
}
@@ -134,12 +139,17 @@ void LogicManager::CONS_Yasmin_DoDialog(CONS_PARAMS) {
}
void LogicManager::HAND_Yasmin_DoDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterYasmin).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterYasmin, _functionsYasmin[getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall]]);
fedEx(kCharacterYasmin, kCharacterYasmin, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterYasmin, (char *)&getCharacterCurrentParams(kCharacterYasmin)[0], -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -156,7 +166,8 @@ void LogicManager::CONS_Yasmin_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_Yasmin_DoWait(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterYasmin)[1] || (getCharacterCurrentParams(kCharacterYasmin)[1] = _gameTime + getCharacterCurrentParams(kCharacterYasmin)[0], _gameTime + getCharacterCurrentParams(kCharacterYasmin)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterYasmin)[1] >= _gameTime)
return;
@@ -167,6 +178,9 @@ void LogicManager::HAND_Yasmin_DoWait(HAND_PARAMS) {
getCharacter(kCharacterYasmin).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterYasmin, _functionsYasmin[getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall]]);
fedEx(kCharacterYasmin, kCharacterYasmin, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -223,12 +237,14 @@ void LogicManager::CONS_Yasmin_GoEtoG(CONS_PARAMS) {
}
void LogicManager::HAND_Yasmin_GoEtoG(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterYasmin).characterPosition.position = 4840;
getCharacter(kCharacterYasmin).characterPosition.location = 0;
getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 1;
YasminCall(&LogicManager::CONS_Yasmin_DoCorrOtis, "615Be", 5, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8]) {
case 1:
getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 2;
@@ -248,6 +264,10 @@ void LogicManager::HAND_Yasmin_GoEtoG(HAND_PARAMS) {
default:
break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -262,12 +282,14 @@ void LogicManager::CONS_Yasmin_GoGtoE(CONS_PARAMS) {
}
void LogicManager::HAND_Yasmin_GoGtoE(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterYasmin).characterPosition.position = 3050;
getCharacter(kCharacterYasmin).characterPosition.location = 0;
getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 1;
YasminCall(&LogicManager::CONS_Yasmin_DoCorrOtis, "615Bg", 7, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8]) {
case 1:
getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 2;
@@ -287,6 +309,10 @@ void LogicManager::HAND_Yasmin_GoGtoE(HAND_PARAMS) {
default:
break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -301,15 +327,21 @@ void LogicManager::CONS_Yasmin_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Yasmin_Birth(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterYasmin)[0]) {
getCharacterCurrentParams(kCharacterYasmin)[0] = 1;
CONS_Yasmin_Part1(0, 0, 0, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
getCharacter(kCharacterYasmin).characterPosition.position = 4840;
getCharacter(kCharacterYasmin).characterPosition.location = 1;
getCharacter(kCharacterYasmin).characterPosition.car = kCarGreenSleeping;
+ break;
+ default:
+ break;
}
}
@@ -324,71 +356,114 @@ void LogicManager::CONS_Yasmin_Part1(CONS_PARAMS) {
}
void LogicManager::HAND_Yasmin_Part1(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterYasmin).characterPosition.position = 2740;
- getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 2;
- YasminCall(&LogicManager::CONS_Yasmin_DoDialog, "Har1102", 0, 0, 0);
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1093500 && !getCharacterCurrentParams(kCharacterYasmin)[0]) {
+ getCharacterCurrentParams(kCharacterYasmin)[0] = 1;
+ getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 1;
+ YasminCall(&LogicManager::CONS_Yasmin_GoEtoG, 0, 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 1161000 && !getCharacterCurrentParams(kCharacterYasmin)[1]) {
+ getCharacterCurrentParams(kCharacterYasmin)[1] = 1;
+ getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 3;
+ YasminCall(&LogicManager::CONS_Yasmin_GoGtoE, 0, 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 1162800 && !getCharacterCurrentParams(kCharacterYasmin)[2]) {
+ getCharacterCurrentParams(kCharacterYasmin)[2] = 1;
+ getCharacter(kCharacterYasmin).characterPosition.position = 4070;
+ getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 4;
+ YasminCall(&LogicManager::CONS_Yasmin_DoDialog, "Har1102", 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 1165500 && !getCharacterCurrentParams(kCharacterYasmin)[3]) {
+ getCharacterCurrentParams(kCharacterYasmin)[3] = 1;
+ getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 5;
+ YasminCall(&LogicManager::CONS_Yasmin_DoDialog, "Har1104", 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 1174500 && !getCharacterCurrentParams(kCharacterYasmin)[4]) {
+ getCharacterCurrentParams(kCharacterYasmin)[4] = 1;
+ getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 6;
+ YasminCall(&LogicManager::CONS_Yasmin_DoDialog, "Har1106", 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 1183500 && !getCharacterCurrentParams(kCharacterYasmin)[5]) {
+ getCharacterCurrentParams(kCharacterYasmin)[5] = 1;
+ getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 7;
+ YasminCall(&LogicManager::CONS_Yasmin_GoEtoG, 0, 0, 0, 0);
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterYasmin).characterPosition.position = 2740;
+ getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 2;
+ YasminCall(&LogicManager::CONS_Yasmin_DoDialog, "Har1102", 0, 0, 0);
+ break;
+ case 2:
+ if (_gameTime > 1161000 && !getCharacterCurrentParams(kCharacterYasmin)[1]) {
+ getCharacterCurrentParams(kCharacterYasmin)[1] = 1;
+ getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 3;
+ YasminCall(&LogicManager::CONS_Yasmin_GoGtoE, 0, 0, 0, 0);
break;
- case 2:
- goto LABEL_9;
- case 3:
- goto LABEL_12;
- case 4:
- goto LABEL_15;
- case 5:
- goto LABEL_18;
- case 6:
- goto LABEL_21;
- default:
- return;
}
- }
- } else if (_gameTime <= 1093500 || getCharacterCurrentParams(kCharacterYasmin)[0]) {
- LABEL_9:
- if (_gameTime <= 1161000 || getCharacterCurrentParams(kCharacterYasmin)[1]) {
- LABEL_12:
- if (_gameTime <= 1162800 || getCharacterCurrentParams(kCharacterYasmin)[2]) {
- LABEL_15:
- if (_gameTime <= 1165500 || getCharacterCurrentParams(kCharacterYasmin)[3]) {
- LABEL_18:
- if (_gameTime <= 1174500 || getCharacterCurrentParams(kCharacterYasmin)[4]) {
- LABEL_21:
- if (_gameTime > 1183500 && !getCharacterCurrentParams(kCharacterYasmin)[5]) {
- getCharacterCurrentParams(kCharacterYasmin)[5] = 1;
- getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 7;
- YasminCall(&LogicManager::CONS_Yasmin_GoEtoG, 0, 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterYasmin)[4] = 1;
- getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 6;
- YasminCall(&LogicManager::CONS_Yasmin_DoDialog, "Har1106", 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterYasmin)[3] = 1;
- getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 5;
- YasminCall(&LogicManager::CONS_Yasmin_DoDialog, "Har1104", 0, 0, 0);
- }
- } else {
+
+ // fall through
+ case 3:
+ if (_gameTime > 1162800 && !getCharacterCurrentParams(kCharacterYasmin)[2]) {
getCharacterCurrentParams(kCharacterYasmin)[2] = 1;
getCharacter(kCharacterYasmin).characterPosition.position = 4070;
getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 4;
YasminCall(&LogicManager::CONS_Yasmin_DoDialog, "Har1102", 0, 0, 0);
+ break;
}
- } else {
- getCharacterCurrentParams(kCharacterYasmin)[1] = 1;
- getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 3;
- YasminCall(&LogicManager::CONS_Yasmin_GoGtoE, 0, 0, 0, 0);
+
+ // fall through
+ case 4:
+ if (_gameTime > 1165500 && !getCharacterCurrentParams(kCharacterYasmin)[3]) {
+ getCharacterCurrentParams(kCharacterYasmin)[3] = 1;
+ getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 5;
+ YasminCall(&LogicManager::CONS_Yasmin_DoDialog, "Har1104", 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 5:
+ if (_gameTime > 1174500 && !getCharacterCurrentParams(kCharacterYasmin)[4]) {
+ getCharacterCurrentParams(kCharacterYasmin)[4] = 1;
+ getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 6;
+ YasminCall(&LogicManager::CONS_Yasmin_DoDialog, "Har1106", 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 6:
+ if (_gameTime > 1183500 && !getCharacterCurrentParams(kCharacterYasmin)[5]) {
+ getCharacterCurrentParams(kCharacterYasmin)[5] = 1;
+ getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 7;
+ YasminCall(&LogicManager::CONS_Yasmin_GoEtoG, 0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
- } else {
- getCharacterCurrentParams(kCharacterYasmin)[0] = 1;
- getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 1;
- YasminCall(&LogicManager::CONS_Yasmin_GoEtoG, 0, 0, 0, 0);
+
+ break;
+ default:
+ break;
}
}
+
void LogicManager::CONS_Yasmin_Asleep(CONS_PARAMS) {
CharacterCallParams *params = &getCharacter(kCharacterYasmin).callParams[getCharacter(kCharacterYasmin).currentCall];
_engine->getMessageManager()->setMessageHandle(kCharacterYasmin, &LogicManager::HAND_Yasmin_Asleep);
@@ -400,12 +475,16 @@ void LogicManager::CONS_Yasmin_Asleep(CONS_PARAMS) {
}
void LogicManager::HAND_Yasmin_Asleep(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
setDoor(7, kCharacterCath, 3, 10, 9);
getCharacter(kCharacterYasmin).characterPosition.position = 3050;
getCharacter(kCharacterYasmin).characterPosition.location = 1;
getCharacter(kCharacterYasmin).characterPosition.car = kCarGreenSleeping;
endGraphics(kCharacterYasmin);
+ break;
+ default:
+ break;
}
}
@@ -420,7 +499,8 @@ void LogicManager::CONS_Yasmin_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Yasmin_StartPart2(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterYasmin);
getCharacter(kCharacterYasmin).characterPosition.position = 3050;
getCharacter(kCharacterYasmin).characterPosition.location = 1;
@@ -428,6 +508,9 @@ void LogicManager::HAND_Yasmin_StartPart2(HAND_PARAMS) {
getCharacter(kCharacterYasmin).inventoryItem = kItemNone;
getCharacter(kCharacterYasmin).clothes = 0;
CONS_Yasmin_Part2(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -442,7 +525,8 @@ void LogicManager::CONS_Yasmin_Part2(CONS_PARAMS) {
}
void LogicManager::HAND_Yasmin_Part2(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (_gameTime > 1759500 && !getCharacterCurrentParams(kCharacterYasmin)[0]) {
getCharacterCurrentParams(kCharacterYasmin)[0] = 1;
getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 1;
@@ -452,7 +536,9 @@ void LogicManager::HAND_Yasmin_Part2(HAND_PARAMS) {
getCharacter(kCharacterYasmin).characterPosition.position = 4070;
send(kCharacterYasmin, kCharacterClerk, 191070912, 4070);
}
- } else if (msg->action == 18) {
+
+ break;
+ case 18:
if (getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] == 1) {
if (_gameTime > 1800000 && !getCharacterCurrentParams(kCharacterYasmin)[1]) {
getCharacterCurrentParams(kCharacterYasmin)[1] = 1;
@@ -460,6 +546,10 @@ void LogicManager::HAND_Yasmin_Part2(HAND_PARAMS) {
send(kCharacterYasmin, kCharacterClerk, 191070912, 4070);
}
}
+
+ break;
+ default:
+ break;
}
}
@@ -474,13 +564,18 @@ void LogicManager::CONS_Yasmin_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Yasmin_StartPart3(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_Yasmin_Part3(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
endGraphics(kCharacterYasmin);
getCharacter(kCharacterYasmin).characterPosition.position = 3050;
getCharacter(kCharacterYasmin).characterPosition.location = 1;
getCharacter(kCharacterYasmin).characterPosition.car = kCarGreenSleeping;
+ break;
+ default:
+ break;
}
}
@@ -495,7 +590,8 @@ void LogicManager::CONS_Yasmin_Part3(CONS_PARAMS) {
}
void LogicManager::HAND_Yasmin_Part3(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (_gameTime > 2062800 && !getCharacterCurrentParams(kCharacterYasmin)[0]) {
getCharacterCurrentParams(kCharacterYasmin)[0] = 1;
getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 1;
@@ -509,7 +605,9 @@ void LogicManager::HAND_Yasmin_Part3(HAND_PARAMS) {
getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 3;
YasminCall(&LogicManager::CONS_Yasmin_GoEtoG, 0, 0, 0, 0);
}
- } else if (msg->action == 18) {
+
+ break;
+ case 18:
if (getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] != 1) {
if (getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] == 2) {
if (_gameTime > 2160000 && !getCharacterCurrentParams(kCharacterYasmin)[2]) {
@@ -519,6 +617,10 @@ void LogicManager::HAND_Yasmin_Part3(HAND_PARAMS) {
}
}
}
+
+ break;
+ default:
+ break;
}
}
@@ -533,12 +635,17 @@ void LogicManager::CONS_Yasmin_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Yasmin_StartPart4(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_Yasmin_Part4(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
getCharacter(kCharacterYasmin).characterPosition.position = 3050;
getCharacter(kCharacterYasmin).characterPosition.location = 1;
getCharacter(kCharacterYasmin).characterPosition.car = kCarGreenSleeping;
+ break;
+ default:
+ break;
}
}
@@ -553,7 +660,8 @@ void LogicManager::CONS_Yasmin_Part4(CONS_PARAMS) {
}
void LogicManager::HAND_Yasmin_Part4(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (_gameTime > 2457000 && !getCharacterCurrentParams(kCharacterYasmin)[0]) {
getCharacterCurrentParams(kCharacterYasmin)[0] = 1;
getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 1;
@@ -563,7 +671,9 @@ void LogicManager::HAND_Yasmin_Part4(HAND_PARAMS) {
getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 3;
YasminCall(&LogicManager::CONS_Yasmin_GoEtoG, 0, 0, 0, 0);
}
- } else if (msg->action == 18) {
+
+ break;
+ case 18:
if (getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] == 1) {
getCharacter(kCharacterYasmin).characterPosition.position = 4070;
getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 2;
@@ -576,6 +686,10 @@ void LogicManager::HAND_Yasmin_Part4(HAND_PARAMS) {
YasminCall(&LogicManager::CONS_Yasmin_GoEtoG, 0, 0, 0, 0);
}
}
+
+ break;
+ default:
+ break;
}
}
@@ -590,12 +704,16 @@ void LogicManager::CONS_Yasmin_Asleep4(CONS_PARAMS) {
}
void LogicManager::HAND_Yasmin_Asleep4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
setDoor(7, kCharacterCath, 3, 10, 9);
getCharacter(kCharacterYasmin).characterPosition.position = 3050;
getCharacter(kCharacterYasmin).characterPosition.location = 1;
getCharacter(kCharacterYasmin).characterPosition.car = kCarGreenSleeping;
endGraphics(kCharacterYasmin);
+ break;
+ default:
+ break;
}
}
@@ -610,15 +728,20 @@ void LogicManager::CONS_Yasmin_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Yasmin_StartPart5(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_Yasmin_Prisoner(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
endGraphics(kCharacterYasmin);
getCharacter(kCharacterYasmin).characterPosition.car = kCarRestaurant;
getCharacter(kCharacterYasmin).characterPosition.position = 3969;
getCharacter(kCharacterYasmin).characterPosition.location = 1;
getCharacter(kCharacterYasmin).clothes = 0;
getCharacter(kCharacterYasmin).inventoryItem = kItemNone;
+ break;
+ default:
+ break;
}
}
@@ -633,8 +756,13 @@ void LogicManager::CONS_Yasmin_Prisoner(CONS_PARAMS) {
}
void LogicManager::HAND_Yasmin_Prisoner(HAND_PARAMS) {
- if (msg->action == 70549068)
+ switch (msg->action) {
+ case 70549068:
CONS_Yasmin_Free(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Yasmin_Free(CONS_PARAMS) {
@@ -648,7 +776,8 @@ void LogicManager::CONS_Yasmin_Free(CONS_PARAMS) {
}
void LogicManager::HAND_Yasmin_Free(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterYasmin)[0] || (getCharacterCurrentParams(kCharacterYasmin)[0] = _gameTime + 2700, _gameTime != -2700)) {
if (getCharacterCurrentParams(kCharacterYasmin)[0] >= _gameTime)
return;
@@ -657,14 +786,20 @@ void LogicManager::HAND_Yasmin_Free(HAND_PARAMS) {
}
CONS_Yasmin_Hiding(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
getCharacter(kCharacterYasmin).characterPosition.car = kCarGreenSleeping;
getCharacter(kCharacterYasmin).characterPosition.position = 2500;
getCharacter(kCharacterYasmin).characterPosition.location = 0;
- } else if (msg->action == 17) {
+ break;
+ case 17:
if (checkLoc(kCharacterCath, kCarGreenSleeping)) {
CONS_Yasmin_Hiding(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -679,34 +814,42 @@ void LogicManager::CONS_Yasmin_Hiding(CONS_PARAMS) {
}
void LogicManager::HAND_Yasmin_Hiding(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- if (getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] == 1) {
- getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 2;
- YasminCall(&LogicManager::CONS_Yasmin_DoCorrOtis, "615BE", 5, 0, 0);
- } else if (getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] == 2) {
- endGraphics(kCharacterYasmin);
- getCharacter(kCharacterYasmin).characterPosition.location = 1;
- getCharacter(kCharacterYasmin).characterPosition.position = 3050;
- setDoor(7, kCharacterCath, 1, 10, 9);
- playDialog(kCharacterYasmin, "Har5001", -1, 0);
+ switch (msg->action) {
+ case 0:
+ if (!whoRunningDialog(kCharacterYasmin)) {
+ if (getCharacterCurrentParams(kCharacterYasmin)[0] || (getCharacterCurrentParams(kCharacterYasmin)[0] = _currentGameSessionTicks + 450, _currentGameSessionTicks != -450)) {
+ if (getCharacterCurrentParams(kCharacterYasmin)[0] >= _currentGameSessionTicks)
+ return;
+
+ getCharacterCurrentParams(kCharacterYasmin)[0] = 0x7FFFFFFF;
}
- } else if (msg->action == 135800432) {
- CONS_Yasmin_Disappear(0, 0, 0, 0);
+
+ playDialog(kCharacterYasmin, "Har5001", -1, 0);
+ getCharacterCurrentParams(kCharacterYasmin)[0] = 0;
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 1;
YasminCall(&LogicManager::CONS_Yasmin_DoWalk, 3, 4840, 0, 0);
- } else if (msg->action == 0 && !whoRunningDialog(kCharacterYasmin)) {
- if (getCharacterCurrentParams(kCharacterYasmin)[0] || (getCharacterCurrentParams(kCharacterYasmin)[0] = _currentGameSessionTicks + 450, _currentGameSessionTicks != -450)) {
- if (getCharacterCurrentParams(kCharacterYasmin)[0] >= _currentGameSessionTicks)
- return;
-
- getCharacterCurrentParams(kCharacterYasmin)[0] = 0x7FFFFFFF;
+ break;
+ case 18:
+ if (getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] == 1) {
+ getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] = 2;
+ YasminCall(&LogicManager::CONS_Yasmin_DoCorrOtis, "615BE", 5, 0, 0);
+ } else if (getCharacter(kCharacterYasmin).callbacks[getCharacter(kCharacterYasmin).currentCall + 8] == 2) {
+ endGraphics(kCharacterYasmin);
+ getCharacter(kCharacterYasmin).characterPosition.location = 1;
+ getCharacter(kCharacterYasmin).characterPosition.position = 3050;
+ setDoor(7, kCharacterCath, 1, 10, 9);
+ playDialog(kCharacterYasmin, "Har5001", -1, 0);
}
-
- playDialog(kCharacterYasmin, "Har5001", -1, 0);
- getCharacterCurrentParams(kCharacterYasmin)[0] = 0;
+ break;
+ case 135800432:
+ CONS_Yasmin_Disappear(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
Commit: 5acd485cb8b4dcd15a1daf6dc593bdc5cfac23cb
https://github.com/scummvm/scummvm/commit/5acd485cb8b4dcd15a1daf6dc593bdc5cfac23cb
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Hadija logic
Changed paths:
engines/lastexpress/characters/hadija.cpp
diff --git a/engines/lastexpress/characters/hadija.cpp b/engines/lastexpress/characters/hadija.cpp
index 151977899d9..40118aeeba2 100644
--- a/engines/lastexpress/characters/hadija.cpp
+++ b/engines/lastexpress/characters/hadija.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_Hadija(int chapter) {
CONS_Hadija_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -69,19 +69,25 @@ void LogicManager::CONS_Hadija_DebugWalks(CONS_PARAMS) {
}
void LogicManager::HAND_Hadija_DebugWalks(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterHadija).characterPosition.position = 0;
- getCharacter(kCharacterHadija).characterPosition.location = 0;
- getCharacter(kCharacterHadija).characterPosition.car = kCarGreenSleeping;
- getCharacterCurrentParams(kCharacterHadija)[0] = 10000;
- }
- } else if (walk(kCharacterHadija, kCarGreenSleeping, getCharacterCurrentParams(kCharacterHadija)[0])) {
- if (getCharacterCurrentParams(kCharacterHadija)[0] == 10000) {
- getCharacterCurrentParams(kCharacterHadija)[0] = 0;
- } else {
- getCharacterCurrentParams(kCharacterHadija)[0] = 10000;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterHadija, kCarGreenSleeping, getCharacterCurrentParams(kCharacterHadija)[0])) {
+ if (getCharacterCurrentParams(kCharacterHadija)[0] == 10000) {
+ getCharacterCurrentParams(kCharacterHadija)[0] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterHadija)[0] = 10000;
+ }
}
+
+ break;
+ case 12:
+ getCharacter(kCharacterHadija).characterPosition.position = 0;
+ getCharacter(kCharacterHadija).characterPosition.location = 0;
+ getCharacter(kCharacterHadija).characterPosition.car = kCarGreenSleeping;
+ getCharacterCurrentParams(kCharacterHadija)[0] = 10000;
+ break;
+ default:
+ break;
}
}
@@ -100,14 +106,19 @@ void LogicManager::CONS_Hadija_DoCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Hadija_DoCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterHadija, getCharacterCurrentParams(kCharacterHadija)[3]);
getCharacter(kCharacterHadija).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterHadija, _functionsHadija[getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall]]);
fedEx(kCharacterHadija, kCharacterHadija, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterHadija, (char *)&getCharacterCurrentParams(kCharacterHadija)[0]);
blockAtDoor(kCharacterHadija, getCharacterCurrentParams(kCharacterHadija)[3]);
+ break;
+ default:
+ break;
}
}
@@ -124,12 +135,17 @@ void LogicManager::CONS_Hadija_DoDialog(CONS_PARAMS) {
}
void LogicManager::HAND_Hadija_DoDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterHadija).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterHadija, _functionsHadija[getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall]]);
fedEx(kCharacterHadija, kCharacterHadija, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterHadija, (char *)&getCharacterCurrentParams(kCharacterHadija)[0], -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -147,7 +163,8 @@ void LogicManager::CONS_Hadija_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_Hadija_DoWait(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterHadija)[1] || (getCharacterCurrentParams(kCharacterHadija)[1] = _gameTime + getCharacterCurrentParams(kCharacterHadija)[0], _gameTime + getCharacterCurrentParams(kCharacterHadija)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterHadija)[1] >= _gameTime)
return;
@@ -158,6 +175,9 @@ void LogicManager::HAND_Hadija_DoWait(HAND_PARAMS) {
getCharacter(kCharacterHadija).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterHadija, _functionsHadija[getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall]]);
fedEx(kCharacterHadija, kCharacterHadija, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -214,11 +234,13 @@ void LogicManager::CONS_Hadija_PeekF(CONS_PARAMS) {
}
void LogicManager::HAND_Hadija_PeekF(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterHadija).characterPosition.position = 2740;
getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 1;
HadijaCall(&LogicManager::CONS_Hadija_DoCorrOtis, "619Cf", 6, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] == 1) {
getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 2;
HadijaCall(&LogicManager::CONS_Hadija_DoCorrOtis, "619Df", 6, 0, 0);
@@ -230,6 +252,10 @@ void LogicManager::HAND_Hadija_PeekF(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterHadija, _functionsHadija[getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall]]);
fedEx(kCharacterHadija, kCharacterHadija, 18, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -244,11 +270,13 @@ void LogicManager::CONS_Hadija_PeekH(CONS_PARAMS) {
}
void LogicManager::HAND_Hadija_PeekH(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterHadija).characterPosition.position = 2740;
getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 1;
HadijaCall(&LogicManager::CONS_Hadija_DoCorrOtis, "619Ch", 8, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] == 1) {
getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 2;
HadijaCall(&LogicManager::CONS_Hadija_DoCorrOtis, "619Dh", 8, 0, 0);
@@ -260,6 +288,10 @@ void LogicManager::HAND_Hadija_PeekH(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterHadija, _functionsHadija[getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall]]);
fedEx(kCharacterHadija, kCharacterHadija, 18, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -274,12 +306,14 @@ void LogicManager::CONS_Hadija_GoFtoH(CONS_PARAMS) {
}
void LogicManager::HAND_Hadija_GoFtoH(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterHadija).characterPosition.position = 4070;
getCharacter(kCharacterHadija).characterPosition.location = 0;
getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 1;
HadijaCall(&LogicManager::CONS_Hadija_DoCorrOtis, "619Bf", 6, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8]) {
case 1:
getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 2;
@@ -298,6 +332,10 @@ void LogicManager::HAND_Hadija_GoFtoH(HAND_PARAMS) {
fedEx(kCharacterHadija, kCharacterHadija, 18, 0);
break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -312,12 +350,14 @@ void LogicManager::CONS_Hadija_GoHtoF(CONS_PARAMS) {
}
void LogicManager::HAND_Hadija_GoHtoF(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterHadija).characterPosition.position = 2740;
getCharacter(kCharacterHadija).characterPosition.location = 0;
getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 1;
HadijaCall(&LogicManager::CONS_Hadija_DoCorrOtis, "619Bh", 8, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8]) {
case 1:
getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 2;
@@ -336,6 +376,10 @@ void LogicManager::HAND_Hadija_GoHtoF(HAND_PARAMS) {
fedEx(kCharacterHadija, kCharacterHadija, 18, 0);
break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -350,15 +394,21 @@ void LogicManager::CONS_Hadija_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Hadija_Birth(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterHadija)[0]) {
getCharacterCurrentParams(kCharacterHadija)[0] = 1;
CONS_Hadija_Part1(0, 0, 0, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
getCharacter(kCharacterHadija).characterPosition.position = 4070;
getCharacter(kCharacterHadija).characterPosition.location = 1;
getCharacter(kCharacterHadija).characterPosition.car = kCarGreenSleeping;
+ break;
+ default:
+ break;
}
}
@@ -373,82 +423,158 @@ void LogicManager::CONS_Hadija_Part1(CONS_PARAMS) {
}
void LogicManager::HAND_Hadija_Part1(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8]) {
- case 1:
- goto LABEL_8;
- case 2:
- goto LABEL_11;
- case 3:
- goto LABEL_21;
- case 4:
- goto LABEL_24;
- default:
- return;
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1075500 && !getCharacterCurrentParams(kCharacterHadija)[0]) {
+ getCharacterCurrentParams(kCharacterHadija)[0] = 1;
+ getCharacter(kCharacterHadija).characterPosition.position = 4840;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 1;
+ HadijaCall(&LogicManager::CONS_Hadija_DoDialog, "Har1100", 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 1084500 && !getCharacterCurrentParams(kCharacterHadija)[1]) {
+ getCharacterCurrentParams(kCharacterHadija)[1] = 1;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 2;
+ HadijaCall(&LogicManager::CONS_Hadija_GoFtoH, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterCurrentParams(kCharacterHadija)[2] != 0x7FFFFFFF && _gameTime > 1093500) {
+ if (_gameTime > 1134000) {
+ getCharacterCurrentParams(kCharacterHadija)[2] = 0x7FFFFFFF;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 3;
+ HadijaCall(&LogicManager::CONS_Hadija_PeekH, 0, 0, 0, 0);
+ break;
+ }
+
+ if (!cathInCorridor(kCarGreenSleeping) ||
+ !inComp(kCharacterMahmud, kCarGreenSleeping, 5790) ||
+ !getCharacterCurrentParams(kCharacterHadija)[2]) {
+ getCharacterCurrentParams(kCharacterHadija)[2] = _gameTime + 75;
+ if (_gameTime == -75) {
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 3;
+ HadijaCall(&LogicManager::CONS_Hadija_PeekH, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterHadija)[2] < _gameTime) {
+ getCharacterCurrentParams(kCharacterHadija)[2] = 0x7FFFFFFF;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 3;
+ HadijaCall(&LogicManager::CONS_Hadija_PeekH, 0, 0, 0, 0);
+ break;
}
}
- return;
- }
- if (_gameTime > 1075500 && !getCharacterCurrentParams(kCharacterHadija)[0]) {
- getCharacterCurrentParams(kCharacterHadija)[0] = 1;
- getCharacter(kCharacterHadija).characterPosition.position = 4840;
- getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 1;
- HadijaCall(&LogicManager::CONS_Hadija_DoDialog, "Har1100", 0, 0, 0);
- return;
- }
-LABEL_8:
- if (_gameTime > 1084500 && !getCharacterCurrentParams(kCharacterHadija)[1]) {
- getCharacterCurrentParams(kCharacterHadija)[1] = 1;
- getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 2;
- HadijaCall(&LogicManager::CONS_Hadija_GoFtoH, 0, 0, 0, 0);
- return;
- }
-LABEL_11:
- if (getCharacterCurrentParams(kCharacterHadija)[2] != 0x7FFFFFFF && _gameTime > 1093500) {
- if (_gameTime > 1134000)
- goto LABEL_19;
- if (!cathInCorridor(kCarGreenSleeping) ||
- !inComp(kCharacterMahmud, kCarGreenSleeping, 5790) ||
- !getCharacterCurrentParams(kCharacterHadija)[2]) {
- getCharacterCurrentParams(kCharacterHadija)[2] = _gameTime + 75;
- if (_gameTime == -75)
- goto LABEL_20;
- }
- if (getCharacterCurrentParams(kCharacterHadija)[2] < _gameTime) {
- LABEL_19:
- getCharacterCurrentParams(kCharacterHadija)[2] = 0x7FFFFFFF;
- LABEL_20:
- getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 3;
- HadijaCall(&LogicManager::CONS_Hadija_PeekH, 0, 0, 0, 0);
+
+ if (_gameTime > 1156500 && !getCharacterCurrentParams(kCharacterHadija)[3]) {
+ getCharacterCurrentParams(kCharacterHadija)[3] = 1;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 4;
+ HadijaCall(&LogicManager::CONS_Hadija_GoHtoF, 0, 0, 0, 0);
return;
}
- }
-LABEL_21:
- if (_gameTime > 1156500 && !getCharacterCurrentParams(kCharacterHadija)[3]) {
- getCharacterCurrentParams(kCharacterHadija)[3] = 1;
- getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 4;
- HadijaCall(&LogicManager::CONS_Hadija_GoHtoF, 0, 0, 0, 0);
- return;
- }
-LABEL_24:
- if (getCharacterCurrentParams(kCharacterHadija)[4] != 0x7FFFFFFF && _gameTime > 1165500) {
- if (_gameTime <= 1188000) {
- if (!cathInCorridor(kCarGreenSleeping) || !
- inComp(kCharacterMahmud, kCarGreenSleeping, 5790) ||
- !getCharacterCurrentParams(kCharacterHadija)[4]) {
- getCharacterCurrentParams(kCharacterHadija)[4] = _gameTime + 75;
- if (_gameTime == -75)
- goto LABEL_33;
+
+ if (getCharacterCurrentParams(kCharacterHadija)[4] != 0x7FFFFFFF && _gameTime > 1165500) {
+ if (_gameTime <= 1188000) {
+ if (!cathInCorridor(kCarGreenSleeping) || !inComp(kCharacterMahmud, kCarGreenSleeping, 5790) ||
+ !getCharacterCurrentParams(kCharacterHadija)[4]) {
+ getCharacterCurrentParams(kCharacterHadija)[4] = _gameTime + 75;
+ if (_gameTime == -75) {
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 5;
+ HadijaCall(&LogicManager::CONS_Hadija_PeekF, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterHadija)[4] >= _gameTime)
+ break;
}
- if (getCharacterCurrentParams(kCharacterHadija)[4] >= _gameTime)
- return;
+ getCharacterCurrentParams(kCharacterHadija)[4] = 0x7FFFFFFF;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 5;
+ HadijaCall(&LogicManager::CONS_Hadija_PeekF, 0, 0, 0, 0);
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8]) {
+ case 1:
+ if (_gameTime > 1084500 && !getCharacterCurrentParams(kCharacterHadija)[1]) {
+ getCharacterCurrentParams(kCharacterHadija)[1] = 1;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 2;
+ HadijaCall(&LogicManager::CONS_Hadija_GoFtoH, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 2:
+ if (getCharacterCurrentParams(kCharacterHadija)[2] != 0x7FFFFFFF && _gameTime > 1093500) {
+ if (_gameTime > 1134000) {
+ getCharacterCurrentParams(kCharacterHadija)[2] = 0x7FFFFFFF;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 3;
+ HadijaCall(&LogicManager::CONS_Hadija_PeekH, 0, 0, 0, 0);
+ break;
+ }
+
+ if (!cathInCorridor(kCarGreenSleeping) ||
+ !inComp(kCharacterMahmud, kCarGreenSleeping, 5790) ||
+ !getCharacterCurrentParams(kCharacterHadija)[2]) {
+ getCharacterCurrentParams(kCharacterHadija)[2] = _gameTime + 75;
+ if (_gameTime == -75) {
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 3;
+ HadijaCall(&LogicManager::CONS_Hadija_PeekH, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterHadija)[2] < _gameTime) {
+ getCharacterCurrentParams(kCharacterHadija)[2] = 0x7FFFFFFF;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 3;
+ HadijaCall(&LogicManager::CONS_Hadija_PeekH, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ // fall through
+ case 3:
+ if (_gameTime > 1156500 && !getCharacterCurrentParams(kCharacterHadija)[3]) {
+ getCharacterCurrentParams(kCharacterHadija)[3] = 1;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 4;
+ HadijaCall(&LogicManager::CONS_Hadija_GoHtoF, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 4:
+ if (getCharacterCurrentParams(kCharacterHadija)[4] != 0x7FFFFFFF && _gameTime > 1165500) {
+ if (_gameTime <= 1188000) {
+ if (!cathInCorridor(kCarGreenSleeping) || !inComp(kCharacterMahmud, kCarGreenSleeping, 5790) ||
+ !getCharacterCurrentParams(kCharacterHadija)[4]) {
+ getCharacterCurrentParams(kCharacterHadija)[4] = _gameTime + 75;
+ if (_gameTime == -75) {
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 5;
+ HadijaCall(&LogicManager::CONS_Hadija_PeekF, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterHadija)[4] >= _gameTime)
+ break;
+ }
+
+ getCharacterCurrentParams(kCharacterHadija)[4] = 0x7FFFFFFF;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 5;
+ HadijaCall(&LogicManager::CONS_Hadija_PeekF, 0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
- getCharacterCurrentParams(kCharacterHadija)[4] = 0x7FFFFFFF;
- LABEL_33:
- getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 5;
- HadijaCall(&LogicManager::CONS_Hadija_PeekF, 0, 0, 0, 0);
+
+ break;
+ default:
+ break;
}
}
@@ -463,12 +589,16 @@ void LogicManager::CONS_Hadija_Asleep(CONS_PARAMS) {
}
void LogicManager::HAND_Hadija_Asleep(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
setDoor(8, kCharacterCath, 3, 10, 9);
getCharacter(kCharacterHadija).characterPosition.position = 2740;
getCharacter(kCharacterHadija).characterPosition.location = 1;
getCharacter(kCharacterHadija).characterPosition.car = kCarGreenSleeping;
endGraphics(kCharacterHadija);
+ break;
+ default:
+ break;
}
}
@@ -483,7 +613,8 @@ void LogicManager::CONS_Hadija_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Hadija_StartPart2(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterHadija);
getCharacter(kCharacterHadija).characterPosition.position = 3050;
getCharacter(kCharacterHadija).characterPosition.location = 1;
@@ -491,6 +622,9 @@ void LogicManager::HAND_Hadija_StartPart2(HAND_PARAMS) {
getCharacter(kCharacterHadija).clothes = 0;
getCharacter(kCharacterHadija).inventoryItem = kItemNone;
CONS_Hadija_Part2(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -505,47 +639,67 @@ void LogicManager::CONS_Hadija_Part2(CONS_PARAMS) {
}
void LogicManager::HAND_Hadija_Part2(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (_gameTime > 1782000 && !getCharacterCurrentParams(kCharacterHadija)[0]) {
getCharacterCurrentParams(kCharacterHadija)[0] = 1;
getCharacter(kCharacterHadija).characterPosition.position = 2740;
}
- if (getCharacterCurrentParams(kCharacterHadija)[1] == 0x7FFFFFFF || _gameTime <= 1786500)
- goto LABEL_19;
+ if (getCharacterCurrentParams(kCharacterHadija)[1] == 0x7FFFFFFF || _gameTime <= 1786500) {
+ if (_gameTime > 1822500 && !getCharacterCurrentParams(kCharacterHadija)[2]) {
+ getCharacterCurrentParams(kCharacterHadija)[2] = 1;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 2;
+ HadijaCall(&LogicManager::CONS_Hadija_GoHtoF, 0, 0, 0, 0);
+ }
+
+ break;
+ }
if (_gameTime <= 1818000) {
if (!cathInCorridor(kCarGreenSleeping) || !getCharacterCurrentParams(kCharacterHadija)[1]) {
getCharacterCurrentParams(kCharacterHadija)[1] = _gameTime + 75;
- if (_gameTime == -75)
- goto LABEL_15;
+ if (_gameTime == -75) {
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 1;
+ HadijaCall(&LogicManager::CONS_Hadija_PeekH, 0, 0, 0, 0);
+ break;
+ }
}
- if (getCharacterCurrentParams(kCharacterHadija)[1] >= _gameTime)
- goto LABEL_19;
+ if (getCharacterCurrentParams(kCharacterHadija)[1] >= _gameTime) {
+ if (_gameTime > 1822500 && !getCharacterCurrentParams(kCharacterHadija)[2]) {
+ getCharacterCurrentParams(kCharacterHadija)[2] = 1;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 2;
+ HadijaCall(&LogicManager::CONS_Hadija_GoHtoF, 0, 0, 0, 0);
+ }
+
+ break;
+ }
}
+
getCharacterCurrentParams(kCharacterHadija)[1] = 0x7FFFFFFF;
- LABEL_15:
getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 1;
HadijaCall(&LogicManager::CONS_Hadija_PeekH, 0, 0, 0, 0);
- return;
- }
+ break;
+ case 18:
+ if (getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] != 1) {
+ if (getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] == 2) {
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 3;
+ HadijaCall(&LogicManager::CONS_Hadija_DoDialog, "Har2012", 0, 0, 0);
+ }
- if (msg->action != 18)
- return;
+ break;
+ }
- if (getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] != 1) {
- if (getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] == 2) {
- getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 3;
- HadijaCall(&LogicManager::CONS_Hadija_DoDialog, "Har2012", 0, 0, 0);
+ if (_gameTime > 1822500 && !getCharacterCurrentParams(kCharacterHadija)[2]) {
+ getCharacterCurrentParams(kCharacterHadija)[2] = 1;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 2;
+ HadijaCall(&LogicManager::CONS_Hadija_GoHtoF, 0, 0, 0, 0);
}
- return;
- }
-LABEL_19:
- if (_gameTime > 1822500 && !getCharacterCurrentParams(kCharacterHadija)[2]) {
- getCharacterCurrentParams(kCharacterHadija)[2] = 1;
- getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 2;
- HadijaCall(&LogicManager::CONS_Hadija_GoHtoF, 0, 0, 0, 0);
+
+ break;
+ default:
+ break;
}
}
@@ -560,13 +714,18 @@ void LogicManager::CONS_Hadija_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Hadija_StartPart3(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_Hadija_Part3(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
endGraphics(kCharacterHadija);
getCharacter(kCharacterHadija).characterPosition.position = 4070;
getCharacter(kCharacterHadija).characterPosition.location = 1;
getCharacter(kCharacterHadija).characterPosition.car = kCarGreenSleeping;
+ break;
+ default:
+ break;
}
}
@@ -581,65 +740,115 @@ void LogicManager::CONS_Hadija_Part3(CONS_PARAMS) {
}
void LogicManager::HAND_Hadija_Part3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8]) {
- case 1:
- goto LABEL_8;
- case 2:
- goto LABEL_11;
- case 3:
- goto LABEL_14;
- case 4:
- goto LABEL_17;
- default:
- return;
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1998000 && !getCharacterCurrentParams(kCharacterHadija)[0]) {
+ getCharacterCurrentParams(kCharacterHadija)[0] = 1;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 1;
+ HadijaCall(&LogicManager::CONS_Hadija_GoFtoH, 0, 0, 0, 0);
+ return;
+ }
+
+ if (_gameTime > 2020500 && !getCharacterCurrentParams(kCharacterHadija)[1]) {
+ getCharacterCurrentParams(kCharacterHadija)[1] = 1;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 2;
+ HadijaCall(&LogicManager::CONS_Hadija_GoHtoF, 0, 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2079000 && !getCharacterCurrentParams(kCharacterHadija)[2]) {
+ getCharacterCurrentParams(kCharacterHadija)[2] = 1;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 3;
+ HadijaCall(&LogicManager::CONS_Hadija_GoFtoH, 0, 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2187000 && !getCharacterCurrentParams(kCharacterHadija)[3]) {
+ getCharacterCurrentParams(kCharacterHadija)[3] = 1;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 4;
+ HadijaCall(&LogicManager::CONS_Hadija_GoHtoF, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterCurrentParams(kCharacterHadija)[4] != 0x7FFFFFFF && _gameTime > 2196000) {
+ if (_gameTime <= 2254500) {
+ if (!cathInCorridor(kCarGreenSleeping) || !getCharacterCurrentParams(kCharacterHadija)[4]) {
+ getCharacterCurrentParams(kCharacterHadija)[4] = _gameTime + 75;
+ if (_gameTime == -75) {
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 5;
+ HadijaCall(&LogicManager::CONS_Hadija_PeekF, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterHadija)[4] >= _gameTime)
+ break;
}
+
+ getCharacterCurrentParams(kCharacterHadija)[4] = 0x7FFFFFFF;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 5;
+ HadijaCall(&LogicManager::CONS_Hadija_PeekF, 0, 0, 0, 0);
}
- return;
- }
- if (_gameTime > 1998000 && !getCharacterCurrentParams(kCharacterHadija)[0]) {
- getCharacterCurrentParams(kCharacterHadija)[0] = 1;
- getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 1;
- HadijaCall(&LogicManager::CONS_Hadija_GoFtoH, 0, 0, 0, 0);
- return;
- }
-LABEL_8:
- if (_gameTime > 2020500 && !getCharacterCurrentParams(kCharacterHadija)[1]) {
- getCharacterCurrentParams(kCharacterHadija)[1] = 1;
- getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 2;
- HadijaCall(&LogicManager::CONS_Hadija_GoHtoF, 0, 0, 0, 0);
- return;
- }
-LABEL_11:
- if (_gameTime > 2079000 && !getCharacterCurrentParams(kCharacterHadija)[2]) {
- getCharacterCurrentParams(kCharacterHadija)[2] = 1;
- getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 3;
- HadijaCall(&LogicManager::CONS_Hadija_GoFtoH, 0, 0, 0, 0);
- return;
- }
-LABEL_14:
- if (_gameTime > 2187000 && !getCharacterCurrentParams(kCharacterHadija)[3]) {
- getCharacterCurrentParams(kCharacterHadija)[3] = 1;
- getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 4;
- HadijaCall(&LogicManager::CONS_Hadija_GoHtoF, 0, 0, 0, 0);
- return;
- }
-LABEL_17:
- if (getCharacterCurrentParams(kCharacterHadija)[4] != 0x7FFFFFFF && _gameTime > 2196000) {
- if (_gameTime <= 2254500) {
- if (!cathInCorridor(kCarGreenSleeping) || !getCharacterCurrentParams(kCharacterHadija)[4]) {
- getCharacterCurrentParams(kCharacterHadija)[4] = _gameTime + 75;
- if (_gameTime == -75)
- goto LABEL_25;
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8]) {
+ case 1:
+ if (_gameTime > 2020500 && !getCharacterCurrentParams(kCharacterHadija)[1]) {
+ getCharacterCurrentParams(kCharacterHadija)[1] = 1;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 2;
+ HadijaCall(&LogicManager::CONS_Hadija_GoHtoF, 0, 0, 0, 0);
+ break;
}
- if (getCharacterCurrentParams(kCharacterHadija)[4] >= _gameTime)
- return;
+
+ // fall through
+ case 2:
+ if (_gameTime > 2079000 && !getCharacterCurrentParams(kCharacterHadija)[2]) {
+ getCharacterCurrentParams(kCharacterHadija)[2] = 1;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 3;
+ HadijaCall(&LogicManager::CONS_Hadija_GoFtoH, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 3:
+ if (_gameTime > 2187000 && !getCharacterCurrentParams(kCharacterHadija)[3]) {
+ getCharacterCurrentParams(kCharacterHadija)[3] = 1;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 4;
+ HadijaCall(&LogicManager::CONS_Hadija_GoHtoF, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 4:
+ if (getCharacterCurrentParams(kCharacterHadija)[4] != 0x7FFFFFFF && _gameTime > 2196000) {
+ if (_gameTime <= 2254500) {
+ if (!cathInCorridor(kCarGreenSleeping) || !getCharacterCurrentParams(kCharacterHadija)[4]) {
+ getCharacterCurrentParams(kCharacterHadija)[4] = _gameTime + 75;
+ if (_gameTime == -75) {
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 5;
+ HadijaCall(&LogicManager::CONS_Hadija_PeekF, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterHadija)[4] >= _gameTime)
+ break;
+ }
+
+ getCharacterCurrentParams(kCharacterHadija)[4] = 0x7FFFFFFF;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 5;
+ HadijaCall(&LogicManager::CONS_Hadija_PeekF, 0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
- getCharacterCurrentParams(kCharacterHadija)[4] = 0x7FFFFFFF;
- LABEL_25:
- getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 5;
- HadijaCall(&LogicManager::CONS_Hadija_PeekF, 0, 0, 0, 0);
+
+ break;
+ default:
+ break;
}
}
@@ -654,12 +863,17 @@ void LogicManager::CONS_Hadija_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Hadija_StartPart4(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_Hadija_Part4(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
getCharacter(kCharacterHadija).characterPosition.position = 4070;
getCharacter(kCharacterHadija).characterPosition.location = 1;
getCharacter(kCharacterHadija).characterPosition.car = kCarGreenSleeping;
+ break;
+ default:
+ break;
}
}
@@ -674,65 +888,119 @@ void LogicManager::CONS_Hadija_Part4(CONS_PARAMS) {
}
void LogicManager::HAND_Hadija_Part4(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterHadija)[0] != 0x7FFFFFFF && _gameTime) {
- if (_gameTime > 1714500)
- goto LABEL_11;
+ if (_gameTime > 1714500) {
+ getCharacterCurrentParams(kCharacterHadija)[0] = 0x7FFFFFFF;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 1;
+ HadijaCall(&LogicManager::CONS_Hadija_PeekF, 0, 0, 0, 0);
+ break;
+ }
+
if (!cathInCorridor(kCarGreenSleeping) || !getCharacterCurrentParams(kCharacterHadija)[0]) {
getCharacterCurrentParams(kCharacterHadija)[0] = _gameTime + 75;
- if (_gameTime == -75)
- goto LABEL_12;
+ if (_gameTime == -75) {
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 1;
+ HadijaCall(&LogicManager::CONS_Hadija_PeekF, 0, 0, 0, 0);
+ break;
+ }
}
+
if (getCharacterCurrentParams(kCharacterHadija)[0] < _gameTime) {
- LABEL_11:
getCharacterCurrentParams(kCharacterHadija)[0] = 0x7FFFFFFF;
- LABEL_12:
getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 1;
HadijaCall(&LogicManager::CONS_Hadija_PeekF, 0, 0, 0, 0);
- return;
+ break;
}
}
- LABEL_17:
+
if (_gameTime > 2367000 && !getCharacterCurrentParams(kCharacterHadija)[1]) {
getCharacterCurrentParams(kCharacterHadija)[1] = 1;
getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 2;
HadijaCall(&LogicManager::CONS_Hadija_GoFtoH, 0, 0, 0, 0);
- return;
+ break;
}
- LABEL_20:
+
if (_gameTime > 2421000 && !getCharacterCurrentParams(kCharacterHadija)[2]) {
getCharacterCurrentParams(kCharacterHadija)[2] = 1;
getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 3;
HadijaCall(&LogicManager::CONS_Hadija_GoHtoF, 0, 0, 0, 0);
- return;
+ break;
}
- goto LABEL_23;
- }
- if (msg->action != 18)
- return;
-
- if (getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] == 1)
- goto LABEL_17;
- if (getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] == 2)
- goto LABEL_20;
- if (getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] != 3)
- return;
-LABEL_23:
- if (getCharacterCurrentParams(kCharacterHadija)[3] != 0x7FFFFFFF && _gameTime > 2425500) {
- if (_gameTime <= 2484000) {
- if (!cathInCorridor(kCarGreenSleeping) || !getCharacterCurrentParams(kCharacterHadija)[3]) {
- getCharacterCurrentParams(kCharacterHadija)[3] = _gameTime + 75;
- if (_gameTime == -75)
- goto LABEL_31;
+ if (getCharacterCurrentParams(kCharacterHadija)[3] != 0x7FFFFFFF && _gameTime > 2425500) {
+ if (_gameTime <= 2484000) {
+ if (!cathInCorridor(kCarGreenSleeping) || !getCharacterCurrentParams(kCharacterHadija)[3]) {
+ getCharacterCurrentParams(kCharacterHadija)[3] = _gameTime + 75;
+ if (_gameTime == -75) {
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 4;
+ HadijaCall(&LogicManager::CONS_Hadija_PeekF, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterHadija)[3] >= _gameTime)
+ break;
}
- if (getCharacterCurrentParams(kCharacterHadija)[3] >= _gameTime)
- return;
+
+ getCharacterCurrentParams(kCharacterHadija)[3] = 0x7FFFFFFF;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 4;
+ HadijaCall(&LogicManager::CONS_Hadija_PeekF, 0, 0, 0, 0);
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8]) {
+ case 1:
+ if (_gameTime > 2367000 && !getCharacterCurrentParams(kCharacterHadija)[1]) {
+ getCharacterCurrentParams(kCharacterHadija)[1] = 1;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 2;
+ HadijaCall(&LogicManager::CONS_Hadija_GoFtoH, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 2:
+ if (_gameTime > 2421000 && !getCharacterCurrentParams(kCharacterHadija)[2]) {
+ getCharacterCurrentParams(kCharacterHadija)[2] = 1;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 3;
+ HadijaCall(&LogicManager::CONS_Hadija_GoHtoF, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 3:
+ if (getCharacterCurrentParams(kCharacterHadija)[3] != 0x7FFFFFFF && _gameTime > 2425500) {
+ if (_gameTime <= 2484000) {
+ if (!cathInCorridor(kCarGreenSleeping) || !getCharacterCurrentParams(kCharacterHadija)[3]) {
+ getCharacterCurrentParams(kCharacterHadija)[3] = _gameTime + 75;
+ if (_gameTime == -75) {
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 4;
+ HadijaCall(&LogicManager::CONS_Hadija_PeekF, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterHadija)[3] >= _gameTime)
+ break;
+ }
+
+ getCharacterCurrentParams(kCharacterHadija)[3] = 0x7FFFFFFF;
+ getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 4;
+ HadijaCall(&LogicManager::CONS_Hadija_PeekF, 0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
- getCharacterCurrentParams(kCharacterHadija)[3] = 0x7FFFFFFF;
- LABEL_31:
- getCharacter(kCharacterHadija).callbacks[getCharacter(kCharacterHadija).currentCall + 8] = 4;
- HadijaCall(&LogicManager::CONS_Hadija_PeekF, 0, 0, 0, 0);
+
+
+
+ break;
+ default:
+ break;
}
}
@@ -747,12 +1015,16 @@ void LogicManager::CONS_Hadija_Asleep4(CONS_PARAMS) {
}
void LogicManager::HAND_Hadija_Asleep4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
setDoor(8, kCharacterCath, 3, 10, 9);
getCharacter(kCharacterHadija).characterPosition.position = 4070;
getCharacter(kCharacterHadija).characterPosition.location = 1;
getCharacter(kCharacterHadija).characterPosition.car = kCarGreenSleeping;
endGraphics(kCharacterHadija);
+ break;
+ default:
+ break;
}
}
@@ -767,15 +1039,20 @@ void LogicManager::CONS_Hadija_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Hadija_StartPart5(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_Hadija_Prisoner(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
endGraphics(kCharacterHadija);
getCharacter(kCharacterHadija).characterPosition.car = kCarRestaurant;
getCharacter(kCharacterHadija).characterPosition.position = 3969;
getCharacter(kCharacterHadija).characterPosition.location = 1;
getCharacter(kCharacterHadija).clothes = 0;
getCharacter(kCharacterHadija).inventoryItem = kItemNone;
+ break;
+ default:
+ break;
}
}
@@ -790,8 +1067,13 @@ void LogicManager::CONS_Hadija_Prisoner(CONS_PARAMS) {
}
void LogicManager::HAND_Hadija_Prisoner(HAND_PARAMS) {
- if (msg->action == 70549068)
+ switch (msg->action) {
+ case 70549068:
CONS_Hadija_Free(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Hadija_Free(CONS_PARAMS) {
@@ -805,7 +1087,8 @@ void LogicManager::CONS_Hadija_Free(CONS_PARAMS) {
}
void LogicManager::HAND_Hadija_Free(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterHadija)[0] ||
(getCharacterCurrentParams(kCharacterHadija)[0] = _gameTime + 2700, _gameTime != -2700)) {
if (getCharacterCurrentParams(kCharacterHadija)[0] >= _gameTime)
@@ -814,17 +1097,20 @@ void LogicManager::HAND_Hadija_Free(HAND_PARAMS) {
}
CONS_Hadija_Hiding(0, 0, 0, 0);
- return;
- }
- if (msg->action == 12) {
+ break;
+ case 12:
getCharacter(kCharacterHadija).characterPosition.car = kCarGreenSleeping;
getCharacter(kCharacterHadija).characterPosition.position = 5000;
getCharacter(kCharacterHadija).characterPosition.location = 0;
- return;
- }
- if (msg->action == 17 && checkLoc(kCharacterCath, kCarGreenSleeping)) {
- CONS_Hadija_Hiding(0, 0, 0, 0);
- return;
+ break;
+ case 17:
+ if (checkLoc(kCharacterCath, kCarGreenSleeping)) {
+ CONS_Hadija_Hiding(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -859,6 +1145,8 @@ void LogicManager::HAND_Hadija_Hiding(HAND_PARAMS) {
case 135800432:
CONS_Hadija_Disappear(0, 0, 0, 0);
break;
+ default:
+ break;
}
}
Commit: 03f08f37321f250c188725c96bbb7cc136c1e2ce
https://github.com/scummvm/scummvm/commit/03f08f37321f250c188725c96bbb7cc136c1e2ce
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Clerk logic
Changed paths:
engines/lastexpress/characters/clerk.cpp
diff --git a/engines/lastexpress/characters/clerk.cpp b/engines/lastexpress/characters/clerk.cpp
index 52195a31f58..10dd70d94f6 100644
--- a/engines/lastexpress/characters/clerk.cpp
+++ b/engines/lastexpress/characters/clerk.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_Clerk(int chapter) {
CONS_Clerk_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -72,11 +72,13 @@ void LogicManager::CONS_Clerk_SaveGame(CONS_PARAMS) {
}
void LogicManager::HAND_Clerk_SaveGame(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
getCharacter(kCharacterClerk).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterClerk, _functionsClerk[getCharacter(kCharacterClerk).callbacks[getCharacter(kCharacterClerk).currentCall]]);
fedEx(kCharacterClerk, kCharacterClerk, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
save(
kCharacterClerk,
getCharacterCurrentParams(kCharacterClerk)[0],
@@ -86,6 +88,9 @@ void LogicManager::HAND_Clerk_SaveGame(HAND_PARAMS) {
getCharacter(kCharacterClerk).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterClerk, _functionsClerk[getCharacter(kCharacterClerk).callbacks[getCharacter(kCharacterClerk).currentCall]]);
fedEx(kCharacterClerk, kCharacterClerk, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -100,8 +105,13 @@ void LogicManager::CONS_Clerk_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Clerk_Birth(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_Clerk_Processing(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Clerk_StartPart2(CONS_PARAMS) {
@@ -115,8 +125,13 @@ void LogicManager::CONS_Clerk_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Clerk_StartPart2(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_Clerk_Processing(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Clerk_StartPart3(CONS_PARAMS) {
@@ -130,8 +145,13 @@ void LogicManager::CONS_Clerk_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Clerk_StartPart3(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_Clerk_Processing(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Clerk_StartPart4(CONS_PARAMS) {
@@ -145,8 +165,13 @@ void LogicManager::CONS_Clerk_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Clerk_StartPart4(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_Clerk_Processing(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Clerk_StartPart5(CONS_PARAMS) {
@@ -160,8 +185,13 @@ void LogicManager::CONS_Clerk_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Clerk_StartPart5(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_Clerk_Processing(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Clerk_DoHaremKnock(CONS_PARAMS) {
@@ -178,7 +208,8 @@ void LogicManager::CONS_Clerk_DoHaremKnock(CONS_PARAMS) {
}
void LogicManager::HAND_Clerk_DoHaremKnock(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
switch (getCharacterCurrentParams(kCharacterClerk)[0]) {
case 5:
getCharacterCurrentParams(kCharacterClerk)[2] = 4840;
@@ -235,8 +266,8 @@ void LogicManager::HAND_Clerk_DoHaremKnock(HAND_PARAMS) {
break;
}
- _gameProgress[55] = 1;
- _gameProgress[56] = 1;
+ _gameProgress[kProgressFieldDC] = 1;
+ _gameProgress[kProgressFieldE0] = 1;
} else {
if (getCharacterCurrentParams(kCharacterClerk)[5] && getCharacterCurrentParams(kCharacterClerk)[6]) {
getCharacterParams(kCharacterClerk, 8)[5]++;
@@ -265,7 +296,7 @@ void LogicManager::HAND_Clerk_DoHaremKnock(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterClerk)[7] = 1;
}
- _gameProgress[56] = 1;
+ _gameProgress[kProgressFieldE0] = 1;
} else {
if (getCharacterCurrentParams(kCharacterClerk)[5]) {
@@ -288,7 +319,7 @@ void LogicManager::HAND_Clerk_DoHaremKnock(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterClerk)[7] = 1;
}
- _gameProgress[55] = 1;
+ _gameProgress[kProgressFieldDC] = 1;
} else {
if (getCharacterCurrentParams(kCharacterClerk)[6]) {
getCharacterParams(kCharacterClerk, 8)[3]++;
@@ -318,6 +349,10 @@ void LogicManager::HAND_Clerk_DoHaremKnock(HAND_PARAMS) {
getCharacter(kCharacterClerk).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterClerk, _functionsClerk[getCharacter(kCharacterClerk).callbacks[getCharacter(kCharacterClerk).currentCall]]);
fedEx(kCharacterClerk, kCharacterClerk, 18, 0);
+
+ break;
+ default:
+ break;
}
}
@@ -332,311 +367,47 @@ void LogicManager::CONS_Clerk_Processing(CONS_PARAMS) {
}
void LogicManager::HAND_Clerk_Processing(HAND_PARAMS) {
- if (msg->action > 8) {
- if (msg->action > 12) {
- if (msg->action > 191070912) {
- if (msg->action > 202613084) {
- if (msg->action > 203419131) {
- if (msg->action > 222746496) {
- if (msg->action == 225056224) {
- getCharacter(kCharacterClerk).callbacks[getCharacter(kCharacterClerk).currentCall + 8] = 6;
- ClerkCall(&LogicManager::CONS_Clerk_SaveGame, 2, 252, 0, 0);
- } else if (msg->action == 338494260) {
- getCharacter(kCharacterClerk).callbacks[getCharacter(kCharacterClerk).currentCall + 8] = 7;
- ClerkCall(&LogicManager::CONS_Clerk_SaveGame, 2, 253, 0, 0);
- }
- } else if (msg->action == 222746496) {
- if (msg->param.intParam) {
- switch (msg->param.intParam) {
- case 1:
- getCharacterCurrentParams(kCharacterClerk)[8] = 3;
- getCharacterCurrentParams(kCharacterClerk)[9] = 8200;
- getCharacterCurrentParams(kCharacterClerk)[10] = 7850;
- break;
- case 2:
- getCharacterCurrentParams(kCharacterClerk)[8] = 3;
- getCharacterCurrentParams(kCharacterClerk)[9] = 7500;
- getCharacterCurrentParams(kCharacterClerk)[10] = 7850;
- break;
- case 3:
- getCharacterCurrentParams(kCharacterClerk)[8] = 3;
- getCharacterCurrentParams(kCharacterClerk)[9] = 6470;
- getCharacterCurrentParams(kCharacterClerk)[10] = 6130;
- break;
- case 4:
- getCharacterCurrentParams(kCharacterClerk)[8] = 3;
- getCharacterCurrentParams(kCharacterClerk)[9] = 5790;
- getCharacterCurrentParams(kCharacterClerk)[10] = 6130;
- break;
- case 5:
- getCharacterCurrentParams(kCharacterClerk)[8] = 3;
- getCharacterCurrentParams(kCharacterClerk)[9] = 4840;
- getCharacterCurrentParams(kCharacterClerk)[10] = 4455;
- break;
- case 6:
- getCharacterCurrentParams(kCharacterClerk)[8] = 3;
- getCharacterCurrentParams(kCharacterClerk)[9] = 4070;
- getCharacterCurrentParams(kCharacterClerk)[10] = 4455;
- break;
- case 7:
- getCharacterCurrentParams(kCharacterClerk)[8] = 3;
- getCharacterCurrentParams(kCharacterClerk)[9] = 3050;
- getCharacterCurrentParams(kCharacterClerk)[10] = 0;
- break;
- case 8:
- getCharacterCurrentParams(kCharacterClerk)[8] = 3;
- getCharacterCurrentParams(kCharacterClerk)[9] = 2740;
- getCharacterCurrentParams(kCharacterClerk)[10] = 0;
- break;
- case kCharacterClerk:
- getCharacterCurrentParams(kCharacterClerk)[8] = 4;
- getCharacterCurrentParams(kCharacterClerk)[9] = 8200;
- getCharacterCurrentParams(kCharacterClerk)[10] = 7850;
- break;
- case 33:
- getCharacterCurrentParams(kCharacterClerk)[8] = 4;
- getCharacterCurrentParams(kCharacterClerk)[9] = 7500;
- getCharacterCurrentParams(kCharacterClerk)[10] = 7850;
- break;
- case 34:
- getCharacterCurrentParams(kCharacterClerk)[8] = 4;
- getCharacterCurrentParams(kCharacterClerk)[9] = 6470;
- getCharacterCurrentParams(kCharacterClerk)[10] = 6130;
- break;
- case 35:
- getCharacterCurrentParams(kCharacterClerk)[8] = 4;
- getCharacterCurrentParams(kCharacterClerk)[9] = 5790;
- getCharacterCurrentParams(kCharacterClerk)[10] = 6130;
- break;
- case 36:
- getCharacterCurrentParams(kCharacterClerk)[8] = 4;
- getCharacterCurrentParams(kCharacterClerk)[9] = 4840;
- getCharacterCurrentParams(kCharacterClerk)[10] = 4455;
- break;
- case 37:
- getCharacterCurrentParams(kCharacterClerk)[8] = 4;
- getCharacterCurrentParams(kCharacterClerk)[9] = 4070;
- getCharacterCurrentParams(kCharacterClerk)[10] = 4455;
- break;
- case 38:
- getCharacterCurrentParams(kCharacterClerk)[8] = 4;
- getCharacterCurrentParams(kCharacterClerk)[9] = 3050;
- getCharacterCurrentParams(kCharacterClerk)[10] = 0;
- break;
- case 39:
- getCharacterCurrentParams(kCharacterClerk)[8] = 4;
- getCharacterCurrentParams(kCharacterClerk)[9] = 2740;
- getCharacterCurrentParams(kCharacterClerk)[10] = 0;
- break;
- default:
- return;
- }
- }
- } else if (msg->action == 203863200 && msg->param.stringParam) {
- getCharacterCurrentParams(kCharacterClerk)[7] = 1;
- Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterClerk)[11], 12, msg->param.stringParam);
- }
- } else if (msg->action == 203419131) {
- if (!getCharacterCurrentParams(kCharacterClerk)[2]) {
- getCharacterCurrentParams(kCharacterClerk)[2] = 1;
- getCharacterCurrentParams(kCharacterClerk)[0] = 0;
- send(kCharacterClerk, kCharacterClerk, 17, 0);
- }
- } else if (msg->action == 203339360) {
- if (getCharacterCurrentParams(kCharacterClerk)[6]) {
- getCharacter(kCharacterClerk).callbacks[getCharacter(kCharacterClerk).currentCall + 8] = 5;
- ClerkCall(&LogicManager::CONS_Clerk_SaveGame, 2, 148, 0, 0);
+ switch (msg->action) {
+ case 0: {
+ if (cathInCorridor(kCarGreenSleeping) || cathInCorridor(kCarRedSleeping)) {
+ if (getCharacterCurrentParams(kCharacterClerk)[3]) {
+ if (!getCharacterCurrentParams(kCharacterClerk)[4]) {
+ getCharacterCurrentParams(kCharacterClerk)[3]--;
+
+ if (!getCharacterCurrentParams(kCharacterClerk)[3] && _gameProgress[kProgressJacket] == 2) {
+ if (isNight()) {
+ playNIS(kEventCathSmokeNight);
} else {
- getCharacterCurrentParams(kCharacterClerk)[6] = 1;
- playNIS(kEventLocomotiveConductorsLook);
- bumpCath(kCarCoalTender, 2, 255);
- }
- }
- } else if (msg->action == 202613084) {
- getCharacter(kCharacterClerk).callbacks[getCharacter(kCharacterClerk).currentCall + 8] = 8;
- ClerkCall(&LogicManager::CONS_Clerk_SaveGame, 2, 259, 0, 0);
- } else if (msg->action == 191350523) {
- getCharacterCurrentParams(kCharacterClerk)[2] = 0;
- endGraphics(kCharacterClerk);
- }
- } else {
- switch (msg->action) {
- case 191070912:
- getCharacterParams(kCharacterClerk, 8)[6] = msg->param.intParam;
- break;
- case 17:
- getCharacter(kCharacterClerk).characterPosition.car = getCharacter(kCharacterCath).characterPosition.car;
- if (checkCathDir(kCarRestaurant, 81)) {
- getCharacterCurrentParams(kCharacterClerk)[5] = 1;
- if (!dialogRunning("ZFX1001"))
- playDialog(0, "ZFX1001", -1, 0);
- } else {
- getCharacterCurrentParams(kCharacterClerk)[5] = 0;
- if (cathRunningDialog("ZFX1001"))
- endDialog("ZFX1001");
- }
- if ((getCharacterCurrentParams(kCharacterClerk)[2] && (getCharacter(kCharacterCath).characterPosition.car != getCharacterCurrentParams(kCharacterClerk)[0]) ||
- (isNight() != (getCharacterCurrentParams(kCharacterClerk)[1] != 0 ? true : false)))) {
- switch (getCharacter(kCharacterCath).characterPosition.car) {
- case 1:
- case 6:
- if (_gameProgress[kProgressIsDayTime]) {
- startCycOtis(kCharacterClerk, "B1WNM");
- } else if (isNight()) {
- startCycOtis(kCharacterClerk, "B1WNN");
- } else {
- startCycOtis(kCharacterClerk, "B1WND");
- }
- break;
- case 3:
- case 4:
- if (_gameProgress[kProgressIsDayTime]) {
- startCycOtis(kCharacterClerk, "S1WNM");
- } else if (isNight()) {
- startCycOtis(kCharacterClerk, "S1WNN");
- } else {
- startCycOtis(kCharacterClerk, "S1WND");
- }
- break;
- case 5:
- if (_gameProgress[kProgressIsDayTime]) {
- startCycOtis(kCharacterClerk, "RCWNM");
- } else if (isNight()) {
- startCycOtis(kCharacterClerk, "RCWNN");
- } else {
- startCycOtis(kCharacterClerk, "RCWND");
- }
- break;
- default:
- endGraphics(kCharacterClerk);
- break;
+ playNIS(kEventCathSmokeDay);
}
- getCharacterCurrentParams(kCharacterClerk)[0] = getCharacter(kCharacterCath).characterPosition.car;
- getCharacterCurrentParams(kCharacterClerk)[1] = isNight();
- }
-
- if (!getCharacterCurrentParams(kCharacterClerk)[4]) {
- getCharacterCurrentParams(kCharacterClerk)[3] = 2700;
- getCharacterCurrentParams(kCharacterClerk)[4] = 0;
- }
- if (_gameProgress[kProgressJacket] != 1)
- goto LABEL_105;
- if (checkCathDir(kCarRedSleeping, 18)) {
- getCharacter(kCharacterClerk).callbacks[getCharacter(kCharacterClerk).currentCall + 8] = 1;
- ClerkCall(&LogicManager::CONS_Clerk_SaveGame, 2, 123, 0, 0);
- return;
- }
- if (checkCathDir(kCarGreenSleeping, 22)) {
- getCharacter(kCharacterClerk).callbacks[getCharacter(kCharacterClerk).currentCall + 8] = 2;
- ClerkCall(&LogicManager::CONS_Clerk_SaveGame, 2, 123, 0, 0);
- } else {
- LABEL_105:
- if (getCharacterCurrentParams(kCharacterClerk)[7] && !inComp(kCharacterCath, getCharacterCurrentParams(kCharacterClerk)[8], getCharacterCurrentParams(kCharacterClerk)[9]) && !inComp(kCharacterCath, getCharacterCurrentParams(kCharacterClerk)[8], getCharacterCurrentParams(kCharacterClerk)[10])) {
- if (dialogRunning((char *)&getCharacterCurrentParams(kCharacterClerk)[11]))
- fadeDialog((char *)&getCharacterCurrentParams(kCharacterClerk)[11]);
- getCharacterCurrentParams(kCharacterClerk)[7] = 0;
- }
- }
- break;
- case 18:
- switch (getCharacter(kCharacterClerk).callbacks[getCharacter(kCharacterClerk).currentCall + 8]) {
- case 1:
- playNIS(kEventCoudertBloodJacket);
- goto LABEL_104;
- case 2:
- playNIS(kEventMertensBloodJacket);
- LABEL_104:
- endGame(0, 1, 55, true);
- goto LABEL_105;
- case 5:
- playNIS(kEventLocomotiveConductorsDiscovered);
- endGame(0, 1, 63, true);
- return;
- case 6:
- playNIS(kEventCathBreakCeiling);
- setDoor(73, 0, 2, 255, 255);
+ getCharacterCurrentParams(kCharacterClerk)[4] = 1;
cleanNIS();
- return;
- case 7:
- playNIS(kEventCathJumpDownCeiling);
- bumpCath(kCarKronos, 89, 255);
- return;
- case 8:
- playNIS(kEventCloseMatchbox);
- bumpCath(kCarRestaurant, 51, 255);
- return;
- default:
- return;
}
}
}
- } else if (msg->action == 12) {
- getCharacterCurrentParams(kCharacterClerk)[2] = 1;
- if (_gameProgress[11] < 5) {
- setDoor(5, kCharacterClerk, 3, 10, 9);
- setDoor(6, kCharacterClerk, 3, 10, 9);
- setDoor(7, kCharacterClerk, 3, 10, 9);
- setDoor(8, kCharacterClerk, 3, 10, 9);
- }
-
- getCharacter(kCharacterClerk).characterPosition.position = 30000;
- } else if (msg->action == 9) {
- if (msg->param.intParam == 5 || msg->param.intParam == 6 || msg->param.intParam == 7 || msg->param.intParam == 8) {
- getCharacter(kCharacterClerk).callbacks[getCharacter(kCharacterClerk).currentCall + 8] = 4;
- ClerkCall(&LogicManager::CONS_Clerk_DoHaremKnock, msg->param.intParam, 9, 0, 0);
- }
}
- } else {
- if (msg->action != 8) {
- if (msg->action)
- return;
-
- if (cathInCorridor(kCarGreenSleeping) || cathInCorridor(kCarRedSleeping)) {
- if (getCharacterCurrentParams(kCharacterClerk)[3]) {
- if (!getCharacterCurrentParams(kCharacterClerk)[4]) {
- getCharacterCurrentParams(kCharacterClerk)[3]--;
-
- if (!getCharacterCurrentParams(kCharacterClerk)[3] && _gameProgress[kProgressJacket] == 2) {
- if (isNight()) {
- playNIS(kEventCathSmokeNight);
- } else {
- playNIS(kEventCathSmokeDay);
- }
- getCharacterCurrentParams(kCharacterClerk)[4] = 1;
- cleanNIS();
- }
- }
- }
- }
+ // Horrible way to unroll a goto...
+ bool skip = false;
- if (getCharacterCurrentParams(kCharacterClerk)[5]) {
- if (getCharacterCurrentParams(kCharacterClerk)[14] || (getCharacterCurrentParams(kCharacterClerk)[14] = _gameTime + 900, (_gameTime != -900))) {
- if (getCharacterCurrentParams(kCharacterClerk)[14] >= _gameTime)
- goto LABEL_43;
+ if (getCharacterCurrentParams(kCharacterClerk)[5]) {
+ if (getCharacterCurrentParams(kCharacterClerk)[14] || (getCharacterCurrentParams(kCharacterClerk)[14] = _gameTime + 900, (_gameTime != -900))) {
+ if (getCharacterCurrentParams(kCharacterClerk)[14] >= _gameTime)
+ skip = true;
+ if (!skip)
getCharacterCurrentParams(kCharacterClerk)[14] = 0x7FFFFFFF;
- }
+ }
+ if (!skip)
bumpCath(kCarRestaurant, 58, 255);
- }
+ }
+ if (!skip)
getCharacterCurrentParams(kCharacterClerk)[14] = 0;
- LABEL_43:
- if (!getCharacterCurrentParams(kCharacterClerk)[6])
- goto LABEL_49;
-
- if (getCharacterCurrentParams(kCharacterClerk)[15] || (getCharacterCurrentParams(kCharacterClerk)[15] = _gameTime + 4500, (_gameTime != -4500))) {
- if (getCharacterCurrentParams(kCharacterClerk)[15] >= _gameTime)
- goto LABEL_49;
- getCharacterCurrentParams(kCharacterClerk)[15] = 0x7FFFFFFF;
- }
-
- getCharacterCurrentParams(kCharacterClerk)[6] = 0;
- getCharacterCurrentParams(kCharacterClerk)[15] = 0;
- LABEL_49:
+ if (!getCharacterCurrentParams(kCharacterClerk)[6]) {
if (getCharacterParams(kCharacterClerk, 8)[7] && !whoRunningDialog(kCharacterTableF)) {
setDoor(
getCharacterParams(kCharacterClerk, 8)[7],
@@ -645,6 +416,7 @@ void LogicManager::HAND_Clerk_Processing(HAND_PARAMS) {
10,
9
);
+
getCharacterParams(kCharacterClerk, 8)[7] = 0;
}
@@ -653,13 +425,356 @@ void LogicManager::HAND_Clerk_Processing(HAND_PARAMS) {
playDialog(0, "ZFX1001", -1, 0);
}
- return;
+ break;
+ }
+
+ if (getCharacterCurrentParams(kCharacterClerk)[15] || (getCharacterCurrentParams(kCharacterClerk)[15] = _gameTime + 4500, (_gameTime != -4500))) {
+ if (getCharacterCurrentParams(kCharacterClerk)[15] >= _gameTime) {
+ if (getCharacterParams(kCharacterClerk, 8)[7] && !whoRunningDialog(kCharacterTableF)) {
+ setDoor(
+ getCharacterParams(kCharacterClerk, 8)[7],
+ _gameObjects[getCharacterParams(kCharacterClerk, 8)[7]].character,
+ 3,
+ 10,
+ 9
+ );
+
+ getCharacterParams(kCharacterClerk, 8)[7] = 0;
+ }
+
+ if (getCharacterCurrentParams(kCharacterClerk)[5]) {
+ if (!cathRunningDialog("ZFX1001"))
+ playDialog(0, "ZFX1001", -1, 0);
+ }
+
+ break;
+ }
+
+ getCharacterCurrentParams(kCharacterClerk)[15] = 0x7FFFFFFF;
}
+ getCharacterCurrentParams(kCharacterClerk)[6] = 0;
+ getCharacterCurrentParams(kCharacterClerk)[15] = 0;
+
+ if (getCharacterParams(kCharacterClerk, 8)[7] && !whoRunningDialog(kCharacterTableF)) {
+ setDoor(
+ getCharacterParams(kCharacterClerk, 8)[7],
+ _gameObjects[getCharacterParams(kCharacterClerk, 8)[7]].character,
+ 3,
+ 10,
+ 9);
+
+ getCharacterParams(kCharacterClerk, 8)[7] = 0;
+ }
+
+ if (getCharacterCurrentParams(kCharacterClerk)[5]) {
+ if (!cathRunningDialog("ZFX1001"))
+ playDialog(0, "ZFX1001", -1, 0);
+ }
+
+ break;
+ }
+ case 8:
if (msg->param.intParam == 5 || msg->param.intParam == 6 || msg->param.intParam == 7 || msg->param.intParam == 8) {
getCharacter(kCharacterClerk).callbacks[getCharacter(kCharacterClerk).currentCall + 8] = 3;
ClerkCall(&LogicManager::CONS_Clerk_DoHaremKnock, msg->param.intParam, 8, 0, 0);
}
+
+ break;
+ case 9:
+ if (msg->param.intParam == 5 || msg->param.intParam == 6 || msg->param.intParam == 7 || msg->param.intParam == 8) {
+ getCharacter(kCharacterClerk).callbacks[getCharacter(kCharacterClerk).currentCall + 8] = 4;
+ ClerkCall(&LogicManager::CONS_Clerk_DoHaremKnock, msg->param.intParam, 9, 0, 0);
+ }
+
+ break;
+ case 12:
+ getCharacterCurrentParams(kCharacterClerk)[2] = 1;
+ if (_gameProgress[kProgressChapter] < 5) {
+ setDoor(5, kCharacterClerk, 3, 10, 9);
+ setDoor(6, kCharacterClerk, 3, 10, 9);
+ setDoor(7, kCharacterClerk, 3, 10, 9);
+ setDoor(8, kCharacterClerk, 3, 10, 9);
+ }
+
+ getCharacter(kCharacterClerk).characterPosition.position = 30000;
+ break;
+ case 17:
+ getCharacter(kCharacterClerk).characterPosition.car = getCharacter(kCharacterCath).characterPosition.car;
+
+ if (checkCathDir(kCarRestaurant, 81)) {
+ getCharacterCurrentParams(kCharacterClerk)[5] = 1;
+ if (!dialogRunning("ZFX1001"))
+ playDialog(0, "ZFX1001", -1, 0);
+ } else {
+ getCharacterCurrentParams(kCharacterClerk)[5] = 0;
+ if (cathRunningDialog("ZFX1001"))
+ endDialog("ZFX1001");
+ }
+
+ if ((getCharacterCurrentParams(kCharacterClerk)[2] && (getCharacter(kCharacterCath).characterPosition.car != getCharacterCurrentParams(kCharacterClerk)[0]) ||
+ (isNight() != (getCharacterCurrentParams(kCharacterClerk)[1] != 0 ? true : false)))) {
+
+ switch (getCharacter(kCharacterCath).characterPosition.car) {
+ case 1:
+ case 6:
+ if (_gameProgress[kProgressIsDayTime]) {
+ startCycOtis(kCharacterClerk, "B1WNM");
+ } else if (isNight()) {
+ startCycOtis(kCharacterClerk, "B1WNN");
+ } else {
+ startCycOtis(kCharacterClerk, "B1WND");
+ }
+
+ break;
+ case 3:
+ case 4:
+ if (_gameProgress[kProgressIsDayTime]) {
+ startCycOtis(kCharacterClerk, "S1WNM");
+ } else if (isNight()) {
+ startCycOtis(kCharacterClerk, "S1WNN");
+ } else {
+ startCycOtis(kCharacterClerk, "S1WND");
+ }
+
+ break;
+ case 5:
+ if (_gameProgress[kProgressIsDayTime]) {
+ startCycOtis(kCharacterClerk, "RCWNM");
+ } else if (isNight()) {
+ startCycOtis(kCharacterClerk, "RCWNN");
+ } else {
+ startCycOtis(kCharacterClerk, "RCWND");
+ }
+
+ break;
+ default:
+ endGraphics(kCharacterClerk);
+ break;
+ }
+
+ getCharacterCurrentParams(kCharacterClerk)[0] = getCharacter(kCharacterCath).characterPosition.car;
+ getCharacterCurrentParams(kCharacterClerk)[1] = isNight();
+ }
+
+ if (!getCharacterCurrentParams(kCharacterClerk)[4]) {
+ getCharacterCurrentParams(kCharacterClerk)[3] = 2700;
+ getCharacterCurrentParams(kCharacterClerk)[4] = 0;
+ }
+
+ if (_gameProgress[kProgressJacket] != 1) {
+ if (getCharacterCurrentParams(kCharacterClerk)[7] && !inComp(kCharacterCath, getCharacterCurrentParams(kCharacterClerk)[8], getCharacterCurrentParams(kCharacterClerk)[9]) && !inComp(kCharacterCath, getCharacterCurrentParams(kCharacterClerk)[8], getCharacterCurrentParams(kCharacterClerk)[10])) {
+ if (dialogRunning((char *)&getCharacterCurrentParams(kCharacterClerk)[11]))
+ fadeDialog((char *)&getCharacterCurrentParams(kCharacterClerk)[11]);
+ getCharacterCurrentParams(kCharacterClerk)[7] = 0;
+ }
+
+ break;
+ }
+
+ if (checkCathDir(kCarRedSleeping, 18)) {
+ getCharacter(kCharacterClerk).callbacks[getCharacter(kCharacterClerk).currentCall + 8] = 1;
+ ClerkCall(&LogicManager::CONS_Clerk_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
+ break;
+ }
+
+ if (checkCathDir(kCarGreenSleeping, 22)) {
+ getCharacter(kCharacterClerk).callbacks[getCharacter(kCharacterClerk).currentCall + 8] = 2;
+ ClerkCall(&LogicManager::CONS_Clerk_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
+ } else {
+ if (getCharacterCurrentParams(kCharacterClerk)[7] && !inComp(kCharacterCath, getCharacterCurrentParams(kCharacterClerk)[8], getCharacterCurrentParams(kCharacterClerk)[9]) && !inComp(kCharacterCath, getCharacterCurrentParams(kCharacterClerk)[8], getCharacterCurrentParams(kCharacterClerk)[10])) {
+ if (dialogRunning((char *)&getCharacterCurrentParams(kCharacterClerk)[11]))
+ fadeDialog((char *)&getCharacterCurrentParams(kCharacterClerk)[11]);
+
+ getCharacterCurrentParams(kCharacterClerk)[7] = 0;
+ }
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterClerk).callbacks[getCharacter(kCharacterClerk).currentCall + 8]) {
+ case 1:
+ playNIS(kEventCoudertBloodJacket);
+ endGame(0, 1, 55, true);
+
+ if (getCharacterCurrentParams(kCharacterClerk)[7] && !inComp(kCharacterCath, getCharacterCurrentParams(kCharacterClerk)[8], getCharacterCurrentParams(kCharacterClerk)[9]) && !inComp(kCharacterCath, getCharacterCurrentParams(kCharacterClerk)[8], getCharacterCurrentParams(kCharacterClerk)[10])) {
+ if (dialogRunning((char *)&getCharacterCurrentParams(kCharacterClerk)[11]))
+ fadeDialog((char *)&getCharacterCurrentParams(kCharacterClerk)[11]);
+
+ getCharacterCurrentParams(kCharacterClerk)[7] = 0;
+ }
+
+ break;
+ case 2:
+ playNIS(kEventMertensBloodJacket);
+ endGame(0, 1, 55, true);
+
+ if (getCharacterCurrentParams(kCharacterClerk)[7] && !inComp(kCharacterCath, getCharacterCurrentParams(kCharacterClerk)[8], getCharacterCurrentParams(kCharacterClerk)[9]) && !inComp(kCharacterCath, getCharacterCurrentParams(kCharacterClerk)[8], getCharacterCurrentParams(kCharacterClerk)[10])) {
+ if (dialogRunning((char *)&getCharacterCurrentParams(kCharacterClerk)[11]))
+ fadeDialog((char *)&getCharacterCurrentParams(kCharacterClerk)[11]);
+
+ getCharacterCurrentParams(kCharacterClerk)[7] = 0;
+ }
+
+ break;
+ case 5:
+ playNIS(kEventLocomotiveConductorsDiscovered);
+ endGame(0, 1, 63, true);
+ break;
+ case 6:
+ playNIS(kEventCathBreakCeiling);
+ setDoor(73, kCharacterCath, 2, 255, 255);
+ cleanNIS();
+ break;
+ case 7:
+ playNIS(kEventCathJumpDownCeiling);
+ bumpCath(kCarKronos, 89, 255);
+ break;
+ case 8:
+ playNIS(kEventCloseMatchbox);
+ bumpCath(kCarRestaurant, 51, 255);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 191070912:
+ getCharacterParams(kCharacterClerk, 8)[6] = msg->param.intParam;
+ break;
+ case 191350523:
+ getCharacterCurrentParams(kCharacterClerk)[2] = 0;
+ endGraphics(kCharacterClerk);
+ break;
+ case 202613084:
+ getCharacter(kCharacterClerk).callbacks[getCharacter(kCharacterClerk).currentCall + 8] = 8;
+ ClerkCall(&LogicManager::CONS_Clerk_SaveGame, 2, kEventCloseMatchbox, 0, 0);
+ break;
+ case 222746496:
+ if (msg->param.intParam) {
+ switch (msg->param.intParam) {
+ case 1:
+ getCharacterCurrentParams(kCharacterClerk)[8] = 3;
+ getCharacterCurrentParams(kCharacterClerk)[9] = 8200;
+ getCharacterCurrentParams(kCharacterClerk)[10] = 7850;
+ break;
+ case 2:
+ getCharacterCurrentParams(kCharacterClerk)[8] = 3;
+ getCharacterCurrentParams(kCharacterClerk)[9] = 7500;
+ getCharacterCurrentParams(kCharacterClerk)[10] = 7850;
+ break;
+ case 3:
+ getCharacterCurrentParams(kCharacterClerk)[8] = 3;
+ getCharacterCurrentParams(kCharacterClerk)[9] = 6470;
+ getCharacterCurrentParams(kCharacterClerk)[10] = 6130;
+ break;
+ case 4:
+ getCharacterCurrentParams(kCharacterClerk)[8] = 3;
+ getCharacterCurrentParams(kCharacterClerk)[9] = 5790;
+ getCharacterCurrentParams(kCharacterClerk)[10] = 6130;
+ break;
+ case 5:
+ getCharacterCurrentParams(kCharacterClerk)[8] = 3;
+ getCharacterCurrentParams(kCharacterClerk)[9] = 4840;
+ getCharacterCurrentParams(kCharacterClerk)[10] = 4455;
+ break;
+ case 6:
+ getCharacterCurrentParams(kCharacterClerk)[8] = 3;
+ getCharacterCurrentParams(kCharacterClerk)[9] = 4070;
+ getCharacterCurrentParams(kCharacterClerk)[10] = 4455;
+ break;
+ case 7:
+ getCharacterCurrentParams(kCharacterClerk)[8] = 3;
+ getCharacterCurrentParams(kCharacterClerk)[9] = 3050;
+ getCharacterCurrentParams(kCharacterClerk)[10] = 0;
+ break;
+ case 8:
+ getCharacterCurrentParams(kCharacterClerk)[8] = 3;
+ getCharacterCurrentParams(kCharacterClerk)[9] = 2740;
+ getCharacterCurrentParams(kCharacterClerk)[10] = 0;
+ break;
+ case 32:
+ getCharacterCurrentParams(kCharacterClerk)[8] = 4;
+ getCharacterCurrentParams(kCharacterClerk)[9] = 8200;
+ getCharacterCurrentParams(kCharacterClerk)[10] = 7850;
+ break;
+ case 33:
+ getCharacterCurrentParams(kCharacterClerk)[8] = 4;
+ getCharacterCurrentParams(kCharacterClerk)[9] = 7500;
+ getCharacterCurrentParams(kCharacterClerk)[10] = 7850;
+ break;
+ case 34:
+ getCharacterCurrentParams(kCharacterClerk)[8] = 4;
+ getCharacterCurrentParams(kCharacterClerk)[9] = 6470;
+ getCharacterCurrentParams(kCharacterClerk)[10] = 6130;
+ break;
+ case 35:
+ getCharacterCurrentParams(kCharacterClerk)[8] = 4;
+ getCharacterCurrentParams(kCharacterClerk)[9] = 5790;
+ getCharacterCurrentParams(kCharacterClerk)[10] = 6130;
+ break;
+ case 36:
+ getCharacterCurrentParams(kCharacterClerk)[8] = 4;
+ getCharacterCurrentParams(kCharacterClerk)[9] = 4840;
+ getCharacterCurrentParams(kCharacterClerk)[10] = 4455;
+ break;
+ case 37:
+ getCharacterCurrentParams(kCharacterClerk)[8] = 4;
+ getCharacterCurrentParams(kCharacterClerk)[9] = 4070;
+ getCharacterCurrentParams(kCharacterClerk)[10] = 4455;
+ break;
+ case 38:
+ getCharacterCurrentParams(kCharacterClerk)[8] = 4;
+ getCharacterCurrentParams(kCharacterClerk)[9] = 3050;
+ getCharacterCurrentParams(kCharacterClerk)[10] = 0;
+ break;
+ case 39:
+ getCharacterCurrentParams(kCharacterClerk)[8] = 4;
+ getCharacterCurrentParams(kCharacterClerk)[9] = 2740;
+ getCharacterCurrentParams(kCharacterClerk)[10] = 0;
+ break;
+ default:
+ break;
+ }
+ }
+
+ break;
+ case 203339360:
+ if (getCharacterCurrentParams(kCharacterClerk)[6]) {
+ getCharacter(kCharacterClerk).callbacks[getCharacter(kCharacterClerk).currentCall + 8] = 5;
+ ClerkCall(&LogicManager::CONS_Clerk_SaveGame, 2, kEventLocomotiveConductorsDiscovered, 0, 0);
+ } else {
+ getCharacterCurrentParams(kCharacterClerk)[6] = 1;
+ playNIS(kEventLocomotiveConductorsLook);
+ bumpCath(kCarCoalTender, 2, 255);
+ }
+
+ break;
+ case 203419131:
+ if (!getCharacterCurrentParams(kCharacterClerk)[2]) {
+ getCharacterCurrentParams(kCharacterClerk)[2] = 1;
+ getCharacterCurrentParams(kCharacterClerk)[0] = 0;
+ send(kCharacterClerk, kCharacterClerk, 17, 0);
+ }
+
+ break;
+ case 203863200:
+ if (msg->param.stringParam) {
+ getCharacterCurrentParams(kCharacterClerk)[7] = 1;
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterClerk)[11], 12, msg->param.stringParam);
+ }
+
+ break;
+ case 225056224:
+ getCharacter(kCharacterClerk).callbacks[getCharacter(kCharacterClerk).currentCall + 8] = 6;
+ ClerkCall(&LogicManager::CONS_Clerk_SaveGame, 2, kEventCathBreakCeiling, 0, 0);
+ break;
+ case 338494260:
+ getCharacter(kCharacterClerk).callbacks[getCharacter(kCharacterClerk).currentCall + 8] = 7;
+ ClerkCall(&LogicManager::CONS_Clerk_SaveGame, 2, kEventCathJumpDownCeiling, 0, 0);
+ break;
+ default:
+ break;
}
}
Commit: 66c968f5daf3e5aa35541bec0b9713f15e3db4bf
https://github.com/scummvm/scummvm/commit/66c968f5daf3e5aa35541bec0b9713f15e3db4bf
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Max logic
Changed paths:
engines/lastexpress/characters/max.cpp
diff --git a/engines/lastexpress/characters/max.cpp b/engines/lastexpress/characters/max.cpp
index 311c65f70b1..122c00f8286 100644
--- a/engines/lastexpress/characters/max.cpp
+++ b/engines/lastexpress/characters/max.cpp
@@ -69,19 +69,25 @@ void LogicManager::CONS_Max_DebugWalks(CONS_PARAMS) {
}
void LogicManager::HAND_Max_DebugWalks(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterMax).characterPosition.position = 0;
- getCharacter(kCharacterMax).characterPosition.location = 0;
- getCharacter(kCharacterMax).characterPosition.car = kCarGreenSleeping;
- getCharacterCurrentParams(kCharacterMax)[0] = 10000;
- }
- } else if (walk(kCharacterMax, kCarGreenSleeping, getCharacterCurrentParams(kCharacterMax)[0])) {
- if (getCharacterCurrentParams(kCharacterMax)[0] == 10000) {
- getCharacterCurrentParams(kCharacterMax)[0] = 0;
- } else {
- getCharacterCurrentParams(kCharacterMax)[0] = 10000;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterMax, kCarGreenSleeping, getCharacterCurrentParams(kCharacterMax)[0])) {
+ if (getCharacterCurrentParams(kCharacterMax)[0] == 10000) {
+ getCharacterCurrentParams(kCharacterMax)[0] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterMax)[0] = 10000;
+ }
}
+
+ break;
+ case 12:
+ getCharacter(kCharacterMax).characterPosition.position = 0;
+ getCharacter(kCharacterMax).characterPosition.location = 0;
+ getCharacter(kCharacterMax).characterPosition.car = kCarGreenSleeping;
+ getCharacterCurrentParams(kCharacterMax)[0] = 10000;
+ break;
+ default:
+ break;
}
}
@@ -98,12 +104,17 @@ void LogicManager::CONS_Max_DoDialog(CONS_PARAMS) {
}
void LogicManager::HAND_Max_DoDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterMax).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMax, _functionsMax[getCharacter(kCharacterMax).callbacks[getCharacter(kCharacterMax).currentCall]]);
fedEx(kCharacterMax, kCharacterMax, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterMax, (char *)&getCharacterCurrentParams(kCharacterMax)[0], -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -120,12 +131,17 @@ void LogicManager::CONS_Max_DoSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Max_DoSeqOtis(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterMax).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMax, _functionsMax[getCharacter(kCharacterMax).callbacks[getCharacter(kCharacterMax).currentCall]]);
fedEx(kCharacterMax, kCharacterMax, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterMax, (char *)&getCharacterCurrentParams(kCharacterMax)[0]);
+ break;
+ default:
+ break;
}
}
@@ -144,14 +160,19 @@ void LogicManager::CONS_Max_DoCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Max_DoCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterMax, getCharacterCurrentParams(kCharacterMax)[3]);
getCharacter(kCharacterMax).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMax, _functionsMax[getCharacter(kCharacterMax).callbacks[getCharacter(kCharacterMax).currentCall]]);
fedEx(kCharacterMax, kCharacterMax, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterMax, (char *)&getCharacterCurrentParams(kCharacterMax)[0]);
blockAtDoor(kCharacterMax, getCharacterCurrentParams(kCharacterMax)[3]);
+ break;
+ default:
+ break;
}
}
@@ -169,19 +190,25 @@ void LogicManager::CONS_Max_SaveGame(CONS_PARAMS) {
}
void LogicManager::HAND_Max_SaveGame(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
getCharacter(kCharacterMax).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMax, _functionsMax[getCharacter(kCharacterMax).callbacks[getCharacter(kCharacterMax).currentCall]]);
fedEx(kCharacterMax, kCharacterMax, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
save(
kCharacterMax,
getCharacterCurrentParams(kCharacterMax)[0],
- getCharacterCurrentParams(kCharacterMax)[1]);
+ getCharacterCurrentParams(kCharacterMax)[1]
+ );
getCharacter(kCharacterMax).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMax, _functionsMax[getCharacter(kCharacterMax).callbacks[getCharacter(kCharacterMax).currentCall]]);
fedEx(kCharacterMax, kCharacterMax, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -196,22 +223,11 @@ void LogicManager::CONS_Max_WithAnna(CONS_PARAMS) {
}
void LogicManager::HAND_Max_WithAnna(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action != 18) {
- if (msg->action == 71277948) {
- getCharacter(kCharacterMax).callbacks[getCharacter(kCharacterMax).currentCall + 8] = 1;
- MaxCall(&LogicManager::CONS_Max_GuardingComp, 0, 0, 0, 0);
- } else if (msg->action == 158007856 && !whoRunningDialog(kCharacterMax)) {
- playDialog(kCharacterMax, "Max1122", -1, 0);
- getCharacterCurrentParams(kCharacterMax)[0] = 225 * (4 * rnd(20) + 40);
- }
- }
- } else if (msg->action == 12) {
- getCharacterCurrentParams(kCharacterMax)[0] = 225 * (4 * rnd(20) + 40);
- } else if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterMax)[1] || (getCharacterCurrentParams(kCharacterMax)[1] = _gameTime + getCharacterCurrentParams(kCharacterMax)[0], _gameTime + getCharacterCurrentParams(kCharacterMax)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterMax)[1] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterMax)[1] = 0x7FFFFFFF;
}
@@ -221,6 +237,25 @@ void LogicManager::HAND_Max_WithAnna(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterMax)[0] = 225 * (4 * rnd(20) + 40);
getCharacterCurrentParams(kCharacterMax)[1] = 0;
+ break;
+ case 12:
+ getCharacterCurrentParams(kCharacterMax)[0] = 225 * (4 * rnd(20) + 40);
+ break;
+ case 18:
+ break;
+ case 71277948:
+ getCharacter(kCharacterMax).callbacks[getCharacter(kCharacterMax).currentCall + 8] = 1;
+ MaxCall(&LogicManager::CONS_Max_GuardingComp, 0, 0, 0, 0);
+ break;
+ case 158007856:
+ if (!whoRunningDialog(kCharacterMax)) {
+ playDialog(kCharacterMax, "Max1122", -1, 0);
+ getCharacterCurrentParams(kCharacterMax)[0] = 225 * (4 * rnd(20) + 40);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -235,53 +270,29 @@ void LogicManager::CONS_Max_GuardingComp(CONS_PARAMS) {
}
void LogicManager::HAND_Max_GuardingComp(HAND_PARAMS) {
- if (msg->action > 9) {
- if (msg->action > 17) {
- if (msg->action > 101687594) {
- if (msg->action == 122358304 || msg->action == 135204609) {
- send(kCharacterMax, kCharacterMax, 135204609, 0);
- setDoor(37, kCharacterCath, 0, 10, 9);
- setDoor(53, kCharacterCath, 0, 10, 9);
- getCharacter(kCharacterMax).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterMax, _functionsMax[getCharacter(kCharacterMax).callbacks[getCharacter(kCharacterMax).currentCall]]);
- fedEx(kCharacterMax, kCharacterMax, 18, 0);
- } else if (msg->action == 158007856 && !whoRunningDialog(kCharacterMax)) {
- playDialog(kCharacterMax, "Max1122", -1, 0);
- getCharacterCurrentParams(kCharacterMax)[0] = 225 * (4 * rnd(20) + 40);
- }
- } else if (msg->action == 101687594) {
- endGraphics(kCharacterMax);
- getCharacter(kCharacterMax).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterMax, _functionsMax[getCharacter(kCharacterMax).callbacks[getCharacter(kCharacterMax).currentCall]]);
- fedEx(kCharacterMax, kCharacterMax, 18, 0);
- } else if (msg->action == 18) {
- if (getCharacter(kCharacterMax).callbacks[getCharacter(kCharacterMax).currentCall + 8]) {
- if (getCharacter(kCharacterMax).callbacks[getCharacter(kCharacterMax).currentCall + 8] <= 2) {
- getCharacter(kCharacterMax).callbacks[getCharacter(kCharacterMax).currentCall + 8] = 3;
- MaxCall(&LogicManager::CONS_Max_DoDialog, "MAX1122", 0, 0, 0);
- } else if (getCharacter(kCharacterMax).callbacks[getCharacter(kCharacterMax).currentCall + 8] == 3) {
- setDoor(37, kCharacterMax, 1, 10, 9);
- setDoor(53, kCharacterMax, 1, 10, 9);
- }
- }
- }
- } else if (msg->action == 17) {
- if (!whoRunningDialog(kCharacterMax) && (checkCathDir(kCarRedSleeping, 56) || checkCathDir(kCarRedSleeping, 78))) {
- playDialog(kCharacterMax, "MAX1120", -1, 0);
- }
- } else if (msg->action == 12) {
- getCharacterCurrentParams(kCharacterMax)[0] = 225 * (4 * rnd(20) + 40);
- getCharacter(kCharacterMax).characterPosition.position = 4070;
- getCharacter(kCharacterMax).characterPosition.location = 1;
- getCharacter(kCharacterMax).characterPosition.car = kCarRedSleeping;
- setDoor(37, kCharacterMax, 1, 10, 9);
- setDoor(53, kCharacterMax, 1, 10, 9);
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterMax)[1] || (getCharacterCurrentParams(kCharacterMax)[1] = _gameTime + getCharacterCurrentParams(kCharacterMax)[0], _gameTime + getCharacterCurrentParams(kCharacterMax)[0] != 0)) {
+ if (getCharacterCurrentParams(kCharacterMax)[1] >= _gameTime)
+ break;
+
+ getCharacterCurrentParams(kCharacterMax)[1] = 0x7FFFFFFF;
}
- } else if (msg->action >= 8) {
+
+ if (!whoRunningDialog(kCharacterMax))
+ playDialog(kCharacterMax, "Max1122", -1, 0);
+
+ getCharacterCurrentParams(kCharacterMax)[0] = 225 * (4 * rnd(20) + 40);
+ getCharacterCurrentParams(kCharacterMax)[1] = 0;
+ break;
+ case 8:
+ case 9:
setDoor(37, kCharacterMax, 1, 0, 0);
setDoor(53, kCharacterMax, 1, 0, 0);
+
if (whoRunningDialog(kCharacterMax))
fadeDialog(kCharacterMax);
+
if (msg->action == 8) {
getCharacter(kCharacterMax).callbacks[getCharacter(kCharacterMax).currentCall + 8] = 1;
MaxCall(&LogicManager::CONS_Max_DoDialog, "LIB012", 0, 0, 0);
@@ -289,19 +300,58 @@ void LogicManager::HAND_Max_GuardingComp(HAND_PARAMS) {
getCharacter(kCharacterMax).callbacks[getCharacter(kCharacterMax).currentCall + 8] = 2;
MaxCall(&LogicManager::CONS_Max_DoDialog, "LIB013", 0, 0, 0);
}
- } else if (msg->action == 0) {
- if (getCharacterCurrentParams(kCharacterMax)[1] || (getCharacterCurrentParams(kCharacterMax)[1] = _gameTime + getCharacterCurrentParams(kCharacterMax)[0], _gameTime + getCharacterCurrentParams(kCharacterMax)[0] != 0)) {
- if (getCharacterCurrentParams(kCharacterMax)[1] >= _gameTime)
- return;
- getCharacterCurrentParams(kCharacterMax)[1] = 0x7FFFFFFF;
+ break;
+ case 12:
+ getCharacterCurrentParams(kCharacterMax)[0] = 225 * (4 * rnd(20) + 40);
+ getCharacter(kCharacterMax).characterPosition.position = 4070;
+ getCharacter(kCharacterMax).characterPosition.location = 1;
+ getCharacter(kCharacterMax).characterPosition.car = kCarRedSleeping;
+ setDoor(37, kCharacterMax, 1, 10, 9);
+ setDoor(53, kCharacterMax, 1, 10, 9);
+ break;
+ case 17:
+ if (!whoRunningDialog(kCharacterMax) && (checkCathDir(kCarRedSleeping, 56) || checkCathDir(kCarRedSleeping, 78))) {
+ playDialog(kCharacterMax, "MAX1120", -1, 0);
}
- if (!whoRunningDialog(kCharacterMax))
+ break;
+ case 18:
+ if (getCharacter(kCharacterMax).callbacks[getCharacter(kCharacterMax).currentCall + 8]) {
+ if (getCharacter(kCharacterMax).callbacks[getCharacter(kCharacterMax).currentCall + 8] <= 2) {
+ getCharacter(kCharacterMax).callbacks[getCharacter(kCharacterMax).currentCall + 8] = 3;
+ MaxCall(&LogicManager::CONS_Max_DoDialog, "MAX1122", 0, 0, 0);
+ } else if (getCharacter(kCharacterMax).callbacks[getCharacter(kCharacterMax).currentCall + 8] == 3) {
+ setDoor(37, kCharacterMax, 1, 10, 9);
+ setDoor(53, kCharacterMax, 1, 10, 9);
+ }
+ }
+
+ break;
+ case 101687594:
+ endGraphics(kCharacterMax);
+ getCharacter(kCharacterMax).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMax, _functionsMax[getCharacter(kCharacterMax).callbacks[getCharacter(kCharacterMax).currentCall]]);
+ fedEx(kCharacterMax, kCharacterMax, 18, 0);
+ break;
+ case 122358304:
+ case 135204609:
+ send(kCharacterMax, kCharacterMax, 135204609, 0);
+ setDoor(37, kCharacterCath, 0, 10, 9);
+ setDoor(53, kCharacterCath, 0, 10, 9);
+ getCharacter(kCharacterMax).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMax, _functionsMax[getCharacter(kCharacterMax).callbacks[getCharacter(kCharacterMax).currentCall]]);
+ fedEx(kCharacterMax, kCharacterMax, 18, 0);
+ break;
+ case 158007856:
+ if (!whoRunningDialog(kCharacterMax)) {
playDialog(kCharacterMax, "Max1122", -1, 0);
+ getCharacterCurrentParams(kCharacterMax)[0] = 225 * (4 * rnd(20) + 40);
+ }
- getCharacterCurrentParams(kCharacterMax)[0] = 225 * (4 * rnd(20) + 40);
- getCharacterCurrentParams(kCharacterMax)[1] = 0;
+ break;
+ default:
+ break;
}
}
@@ -322,7 +372,7 @@ void LogicManager::HAND_Max_InCageFriendly(HAND_PARAMS) {
(getCharacterCurrentParams(kCharacterMax)[2] = _gameTime + getCharacterCurrentParams(kCharacterMax)[1],
_gameTime + getCharacterCurrentParams(kCharacterMax)[1] != 0)) {
if (getCharacterCurrentParams(kCharacterMax)[2] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterMax)[2] = 0x7FFFFFFF;
}
@@ -369,13 +419,13 @@ void LogicManager::HAND_Max_InCageFriendly(HAND_PARAMS) {
playDialog(0, "LIB026", -1, 0);
playNIS(kEventCathMaxFree);
bumpCath(kCarBaggage, 92, 255);
- setDoor(109, 0, 0, 0, 9);
+ setDoor(109, kCharacterCath, 0, 0, 9);
CONS_Max_Escaped(0, 0, 0, 0);
}
break;
default:
- return;
+ break;
}
}
@@ -390,7 +440,8 @@ void LogicManager::CONS_Max_Escaped(CONS_PARAMS) {
}
void LogicManager::HAND_Max_Escaped(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterMax)[1] != 0x7FFFFFFF && _gameTime) {
if (getCharacterCurrentParams(kCharacterMax)[0] >= _gameTime) {
if (!whoOnScreen(kCharacterMax) || !getCharacterCurrentParams(kCharacterMax)[1]) {
@@ -405,7 +456,7 @@ void LogicManager::HAND_Max_Escaped(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterMax)[1] >= _gameTime)
- return;
+ break;
}
getCharacterCurrentParams(kCharacterMax)[1] = 0x7FFFFFFF;
@@ -415,13 +466,18 @@ void LogicManager::HAND_Max_Escaped(HAND_PARAMS) {
CONS_Max_LetMeIn4(0, 0, 0, 0);
}
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
getCharacter(kCharacterMax).characterPosition.position = 4070;
getCharacter(kCharacterMax).characterPosition.location = 0;
getCharacter(kCharacterMax).characterPosition.car = kCarRedSleeping;
startCycOtis(kCharacterMax, "630Af");
softBlockAtDoor(kCharacterMax, 37);
getCharacterCurrentParams(kCharacterMax)[0] = _gameTime + 2700;
+ break;
+ default:
+ break;
}
}
@@ -436,16 +492,22 @@ void LogicManager::CONS_Max_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Max_Birth(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterMax)[0]) {
getCharacterCurrentParams(kCharacterMax)[0] = 1;
CONS_Max_WithAnna(0, 0, 0, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
getCharacter(kCharacterMax).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterMax).characterPosition.position = 4070;
getCharacter(kCharacterMax).characterPosition.location = 1;
getCharacter(kCharacterMax).clothes = 0;
+ break;
+ default:
+ break;
}
}
@@ -460,15 +522,20 @@ void LogicManager::CONS_Max_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Max_StartPart2(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_Max_WithAnna(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
endGraphics(kCharacterMax);
getCharacter(kCharacterMax).characterPosition.position = 4070;
getCharacter(kCharacterMax).characterPosition.location = 1;
getCharacter(kCharacterMax).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterMax).clothes = 0;
getCharacter(kCharacterMax).inventoryItem = kItemNone;
+ break;
+ default:
+ break;
}
}
@@ -483,15 +550,20 @@ void LogicManager::CONS_Max_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Max_StartPart3(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_Max_WithAnna3(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
endGraphics(kCharacterMax);
getCharacter(kCharacterMax).characterPosition.position = 4070;
getCharacter(kCharacterMax).characterPosition.location = 1;
getCharacter(kCharacterMax).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterMax).clothes = 0;
getCharacter(kCharacterMax).inventoryItem = kItemNone;
+ break;
+ default:
+ break;
}
}
@@ -506,15 +578,16 @@ void LogicManager::CONS_Max_WithAnna3(CONS_PARAMS) {
}
void LogicManager::HAND_Max_WithAnna3(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterMax)[1]) {
getCharacter(kCharacterMax).characterPosition = getCharacter(kCharacterCond2).characterPosition;
- return;
+ break;
}
if (getCharacterCurrentParams(kCharacterMax)[2] || (getCharacterCurrentParams(kCharacterMax)[2] = _gameTime + getCharacterCurrentParams(kCharacterMax)[0], _gameTime + getCharacterCurrentParams(kCharacterMax)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterMax)[2] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterMax)[2] = 0x7FFFFFFF;
}
@@ -524,21 +597,30 @@ void LogicManager::HAND_Max_WithAnna3(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterMax)[0] = 225 * (4 * rnd(20) + 40);
getCharacterCurrentParams(kCharacterMax)[2] = 0;
- } else if (msg->action == 12) {
+ break;
+ case 12:
getCharacterCurrentParams(kCharacterMax)[0] = 225 * (4 * rnd(20) + 40);
getCharacter(kCharacterMax).characterPosition.position = 4070;
getCharacter(kCharacterMax).characterPosition.location = 1;
getCharacter(kCharacterMax).characterPosition.car = kCarRedSleeping;
- } else if (msg->action == 122358304) {
- getCharacterCurrentParams(kCharacterMax)[1] = 1;
- } else if (msg->action == 135204609) {
- CONS_Max_InCageMad(0, 0, 0, 0);
- } else if (msg->action == 158007856 && !getCharacterCurrentParams(kCharacterMax)[1] && !whoRunningDialog(30)) {
- playDialog(kCharacterMax, "Max1122", -1, 0);
- getCharacterCurrentParams(kCharacterMax)[0] = 225 * (4 * rnd(20) + 40);
- } else if (msg->action == 71277948) {
+ break;
+ case 71277948:
getCharacter(kCharacterMax).callbacks[getCharacter(kCharacterMax).currentCall + 8] = 1;
MaxCall(&LogicManager::CONS_Max_GuardingComp, 0, 0, 0, 0);
+ break;
+ case 122358304:
+ getCharacterCurrentParams(kCharacterMax)[1] = 1;
+ break;
+ case 135204609:
+ CONS_Max_InCageMad(0, 0, 0, 0);
+ break;
+ case 158007856:
+ if (!getCharacterCurrentParams(kCharacterMax)[1] && !whoRunningDialog(30)) {
+ playDialog(kCharacterMax, "Max1122", -1, 0);
+ getCharacterCurrentParams(kCharacterMax)[0] = 225 * (4 * rnd(20) + 40);
+ }
+
+ break;
}
}
@@ -623,7 +705,7 @@ void LogicManager::HAND_Max_LetMeIn3(HAND_PARAMS) {
if (!getCharacterCurrentParams(kCharacterMax)[0]) {
if (getCharacterCurrentParams(kCharacterMax)[2] || (getCharacterCurrentParams(kCharacterMax)[2] = _gameTime + 900, _gameTime != -900)) {
if (getCharacterCurrentParams(kCharacterMax)[2] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterMax)[2] = 0x7FFFFFFF;
}
@@ -682,13 +764,18 @@ void LogicManager::CONS_Max_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Max_StartPart4(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_Max_InCageFriendly(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
endGraphics(kCharacterMax);
getCharacter(kCharacterMax).characterPosition.position = 8000;
getCharacter(kCharacterMax).characterPosition.location = 1;
getCharacter(kCharacterMax).characterPosition.car = kCarBaggage;
+ break;
+ default:
+ break;
}
}
@@ -741,12 +828,16 @@ void LogicManager::CONS_Max_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Max_StartPart5(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterMax);
getCharacter(kCharacterMax).characterPosition.position = 0;
getCharacter(kCharacterMax).characterPosition.location = 0;
getCharacter(kCharacterMax).characterPosition.car = kCarNone;
setDoor(109, kCharacterCath, 0, 0, 9);
+ break;
+ default:
+ break;
}
}
Commit: 01357febf66d1098c4538548b93d008681d73eec
https://github.com/scummvm/scummvm/commit/01357febf66d1098c4538548b93d008681d73eec
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Sophie logic
Changed paths:
engines/lastexpress/characters/sophie.cpp
diff --git a/engines/lastexpress/characters/sophie.cpp b/engines/lastexpress/characters/sophie.cpp
index 2a5b2c33a11..56aa76cad52 100644
--- a/engines/lastexpress/characters/sophie.cpp
+++ b/engines/lastexpress/characters/sophie.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_Sophie(int chapter) {
CONS_Sophie_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -69,19 +69,25 @@ void LogicManager::CONS_Sophie_DebugWalks(CONS_PARAMS) {
}
void LogicManager::HAND_Sophie_DebugWalks(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterSophie).characterPosition.position = 0;
- getCharacter(kCharacterSophie).characterPosition.location = 0;
- getCharacter(kCharacterSophie).characterPosition.car = kCarGreenSleeping;
- getCharacterCurrentParams(kCharacterSophie)[0] = 10000;
- }
- } else if (walk(kCharacterSophie, kCarGreenSleeping, getCharacterCurrentParams(kCharacterSophie)[0])) {
- if (getCharacterCurrentParams(kCharacterSophie)[0] == 10000) {
- getCharacterCurrentParams(kCharacterSophie)[0] = 0;
- } else {
- getCharacterCurrentParams(kCharacterSophie)[0] = 10000;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterSophie, kCarGreenSleeping, getCharacterCurrentParams(kCharacterSophie)[0])) {
+ if (getCharacterCurrentParams(kCharacterSophie)[0] == 10000) {
+ getCharacterCurrentParams(kCharacterSophie)[0] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterSophie)[0] = 10000;
+ }
}
+
+ break;
+ case 12:
+ getCharacter(kCharacterSophie).characterPosition.position = 0;
+ getCharacter(kCharacterSophie).characterPosition.location = 0;
+ getCharacter(kCharacterSophie).characterPosition.car = kCarGreenSleeping;
+ getCharacterCurrentParams(kCharacterSophie)[0] = 10000;
+ break;
+ default:
+ break;
}
}
@@ -99,35 +105,40 @@ void LogicManager::CONS_Sophie_DoWalkBehind(CONS_PARAMS) {
}
void LogicManager::HAND_Sophie_DoWalkBehind(HAND_PARAMS) {
- if (msg->action > 5) {
- switch (msg->action) {
- case 6:
- playChrExcuseMe(kCharacterSophie, kCharacterCath, 0);
- break;
- case 12:
- walk(kCharacterSophie, getCharacterCurrentParams(kCharacterSophie)[0], getCharacterCurrentParams(kCharacterSophie)[1]);
- break;
- case 123668192:
- getCharacter(kCharacterSophie).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterSophie, _functionsSophie[getCharacter(kCharacterSophie).callbacks[getCharacter(kCharacterSophie).currentCall]]);
- fedEx(kCharacterSophie, kCharacterSophie, 18, 0);
- break;
- }
- } else if (msg->action == 5) {
- playCathExcuseMe();
- } else if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
getCharacterCurrentParams(kCharacterSophie)[2] = 0;
if (nearChar(kCharacterSophie, kCharacterRebecca, 500) ||
(getCharacter(kCharacterSophie).direction == 1) && ((getCharacter(kCharacterSophie).characterPosition.car > getCharacter(kCharacterRebecca).characterPosition.car) ||
- getCharacter(kCharacterSophie).characterPosition.car == getCharacter(kCharacterRebecca).characterPosition.car && getCharacter(kCharacterSophie).characterPosition.position > getCharacter(kCharacterRebecca).characterPosition.position) ||
- getCharacter(kCharacterSophie).direction == 2 && ((getCharacter(kCharacterSophie).characterPosition.car < getCharacter(kCharacterRebecca).characterPosition.car) ||
- getCharacter(kCharacterSophie).characterPosition.car == getCharacter(kCharacterRebecca).characterPosition.car && getCharacter(kCharacterSophie).characterPosition.position < getCharacter(kCharacterRebecca).characterPosition.position)) {
+ getCharacter(kCharacterSophie).characterPosition.car == getCharacter(kCharacterRebecca).characterPosition.car && getCharacter(kCharacterSophie).characterPosition.position > getCharacter(kCharacterRebecca).characterPosition.position) ||
+ getCharacter(kCharacterSophie).direction == 2 && ((getCharacter(kCharacterSophie).characterPosition.car < getCharacter(kCharacterRebecca).characterPosition.car) ||
+ getCharacter(kCharacterSophie).characterPosition.car == getCharacter(kCharacterRebecca).characterPosition.car && getCharacter(kCharacterSophie).characterPosition.position < getCharacter(kCharacterRebecca).characterPosition.position)) {
+
getCharacter(kCharacterSophie).waitedTicksUntilCycleRestart = 0;
getCharacterCurrentParams(kCharacterSophie)[2] = 1;
}
+
if (!getCharacterCurrentParams(kCharacterSophie)[2]) {
walk(kCharacterSophie, getCharacterCurrentParams(kCharacterSophie)[0], getCharacterCurrentParams(kCharacterSophie)[1]);
}
+
+ break;
+ case 5:
+ playCathExcuseMe();
+ break;
+ case 6:
+ playChrExcuseMe(kCharacterSophie, kCharacterCath, 0);
+ break;
+ case 12:
+ walk(kCharacterSophie, getCharacterCurrentParams(kCharacterSophie)[0], getCharacterCurrentParams(kCharacterSophie)[1]);
+ break;
+ case 123668192:
+ getCharacter(kCharacterSophie).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterSophie, _functionsSophie[getCharacter(kCharacterSophie).callbacks[getCharacter(kCharacterSophie).currentCall]]);
+ fedEx(kCharacterSophie, kCharacterSophie, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -142,35 +153,11 @@ void LogicManager::CONS_Sophie_WithRebecca(CONS_PARAMS) {
}
void LogicManager::HAND_Sophie_WithRebecca(HAND_PARAMS) {
- if (msg->action > 18) {
- if (msg->action > 136654208) {
- if (msg->action == 259921280) {
- getCharacter(kCharacterSophie).characterPosition.car = getCharacter(kCharacterRebecca).characterPosition.car;
- getCharacter(kCharacterSophie).characterPosition.location = getCharacter(kCharacterRebecca).characterPosition.location;
- getCharacter(kCharacterSophie).characterPosition.position = getCharacter(kCharacterRebecca).characterPosition.position + 100;
- getCharacter(kCharacterSophie).callbacks[getCharacter(kCharacterSophie).currentCall + 8] = 3;
- SophieCall(&LogicManager::CONS_Sophie_DoWalkBehind, 2, 9460, 0, 0);
- } else if (msg->action == 292775040) {
- getCharacter(kCharacterSophie).characterPosition.car = 2;
- getCharacter(kCharacterSophie).characterPosition.location = 0;
- getCharacter(kCharacterSophie).characterPosition.position = 9270;
- getCharacter(kCharacterSophie).callbacks[getCharacter(kCharacterSophie).currentCall + 8] = 4;
- SophieCall(&LogicManager::CONS_Sophie_DoWalkBehind, 4, 4840, 0, 0);
- }
- } else if (msg->action == 136654208) {
- getCharacter(kCharacterSophie).characterPosition.car = getCharacter(kCharacterRebecca).characterPosition.car;
- getCharacter(kCharacterSophie).characterPosition.location = getCharacter(kCharacterRebecca).characterPosition.location;
- getCharacter(kCharacterSophie).characterPosition.position = getCharacter(kCharacterRebecca).characterPosition.position + 100;
- getCharacter(kCharacterSophie).callbacks[getCharacter(kCharacterSophie).currentCall + 8] = 2;
- SophieCall(&LogicManager::CONS_Sophie_DoWalkBehind, 4, 4840, 0, 0);
- } else if (msg->action == 125242096) {
- getCharacter(kCharacterSophie).characterPosition.car = getCharacter(kCharacterRebecca).characterPosition.car;
- getCharacter(kCharacterSophie).characterPosition.location = getCharacter(kCharacterRebecca).characterPosition.location;
- getCharacter(kCharacterSophie).characterPosition.position = getCharacter(kCharacterRebecca).characterPosition.position - 100;
- getCharacter(kCharacterSophie).callbacks[getCharacter(kCharacterSophie).currentCall + 8] = 1;
- SophieCall(&LogicManager::CONS_Sophie_DoWalkBehind, 5, 850, 0, 0);
- }
- } else if (msg->action == 18) {
+ switch (msg->action) {
+ case 0:
+ getCharacter(kCharacterSophie).characterPosition = getCharacter(kCharacterRebecca).characterPosition;
+ break;
+ case 18:
switch (getCharacter(kCharacterSophie).callbacks[getCharacter(kCharacterSophie).currentCall + 8]) {
case 1:
case 3:
@@ -181,10 +168,40 @@ void LogicManager::HAND_Sophie_WithRebecca(HAND_PARAMS) {
startCycOtis(kCharacterSophie, "BLANK");
break;
default:
- return;
+ break;
}
- } else if (msg->action == 0) {
- getCharacter(kCharacterSophie).characterPosition = getCharacter(kCharacterRebecca).characterPosition;
+
+ break;
+ case 259921280:
+ getCharacter(kCharacterSophie).characterPosition.car = getCharacter(kCharacterRebecca).characterPosition.car;
+ getCharacter(kCharacterSophie).characterPosition.location = getCharacter(kCharacterRebecca).characterPosition.location;
+ getCharacter(kCharacterSophie).characterPosition.position = getCharacter(kCharacterRebecca).characterPosition.position + 100;
+ getCharacter(kCharacterSophie).callbacks[getCharacter(kCharacterSophie).currentCall + 8] = 3;
+ SophieCall(&LogicManager::CONS_Sophie_DoWalkBehind, 2, 9460, 0, 0);
+ break;
+ case 292775040:
+ getCharacter(kCharacterSophie).characterPosition.car = 2;
+ getCharacter(kCharacterSophie).characterPosition.location = 0;
+ getCharacter(kCharacterSophie).characterPosition.position = 9270;
+ getCharacter(kCharacterSophie).callbacks[getCharacter(kCharacterSophie).currentCall + 8] = 4;
+ SophieCall(&LogicManager::CONS_Sophie_DoWalkBehind, 4, 4840, 0, 0);
+ break;
+ case 136654208:
+ getCharacter(kCharacterSophie).characterPosition.car = getCharacter(kCharacterRebecca).characterPosition.car;
+ getCharacter(kCharacterSophie).characterPosition.location = getCharacter(kCharacterRebecca).characterPosition.location;
+ getCharacter(kCharacterSophie).characterPosition.position = getCharacter(kCharacterRebecca).characterPosition.position + 100;
+ getCharacter(kCharacterSophie).callbacks[getCharacter(kCharacterSophie).currentCall + 8] = 2;
+ SophieCall(&LogicManager::CONS_Sophie_DoWalkBehind, 4, 4840, 0, 0);
+ break;
+ case 125242096:
+ getCharacter(kCharacterSophie).characterPosition.car = getCharacter(kCharacterRebecca).characterPosition.car;
+ getCharacter(kCharacterSophie).characterPosition.location = getCharacter(kCharacterRebecca).characterPosition.location;
+ getCharacter(kCharacterSophie).characterPosition.position = getCharacter(kCharacterRebecca).characterPosition.position - 100;
+ getCharacter(kCharacterSophie).callbacks[getCharacter(kCharacterSophie).currentCall + 8] = 1;
+ SophieCall(&LogicManager::CONS_Sophie_DoWalkBehind, 5, 850, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -199,15 +216,21 @@ void LogicManager::CONS_Sophie_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Sophie_Birth(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterSophie).characterPosition.position = 4840;
- getCharacter(kCharacterSophie).characterPosition.location = 1;
- getCharacter(kCharacterSophie).characterPosition.car = kCarRedSleeping;
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterSophie)[0]) {
+ getCharacterCurrentParams(kCharacterSophie)[0] = 1;
+ CONS_Sophie_WithRebecca(0, 0, 0, 0);
}
- } else if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterSophie)[0]) {
- getCharacterCurrentParams(kCharacterSophie)[0] = 1;
- CONS_Sophie_WithRebecca(0, 0, 0, 0);
+
+ break;
+ case 12:
+ getCharacter(kCharacterSophie).characterPosition.position = 4840;
+ getCharacter(kCharacterSophie).characterPosition.location = 1;
+ getCharacter(kCharacterSophie).characterPosition.car = kCarRedSleeping;
+ break;
+ default:
+ break;
}
}
@@ -222,11 +245,15 @@ void LogicManager::CONS_Sophie_Asleep(CONS_PARAMS) {
}
void LogicManager::HAND_Sophie_Asleep(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterSophie).characterPosition.position = 4840;
getCharacter(kCharacterSophie).characterPosition.location = 1;
getCharacter(kCharacterSophie).characterPosition.car = kCarRedSleeping;
endGraphics(kCharacterSophie);
+ break;
+ default:
+ break;
}
}
@@ -241,17 +268,20 @@ void LogicManager::CONS_Sophie_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Sophie_StartPart2(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterSophie);
- getCharacter(kCharacterSophie).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterSophie).characterPosition.position = 4840;
- getCharacter(kCharacterSophie).characterPosition.location = 1;
- getCharacter(kCharacterSophie).clothes = 0;
- getCharacter(kCharacterSophie).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Sophie_WithRebecca(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterSophie);
+ getCharacter(kCharacterSophie).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterSophie).characterPosition.position = 4840;
+ getCharacter(kCharacterSophie).characterPosition.location = 1;
+ getCharacter(kCharacterSophie).clothes = 0;
+ getCharacter(kCharacterSophie).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -266,17 +296,20 @@ void LogicManager::CONS_Sophie_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Sophie_StartPart3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterSophie);
- getCharacter(kCharacterSophie).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterSophie).characterPosition.position = 4840;
- getCharacter(kCharacterSophie).characterPosition.location = 1;
- getCharacter(kCharacterSophie).clothes = 0;
- getCharacter(kCharacterSophie).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Sophie_WithRebecca(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterSophie);
+ getCharacter(kCharacterSophie).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterSophie).characterPosition.position = 4840;
+ getCharacter(kCharacterSophie).characterPosition.location = 1;
+ getCharacter(kCharacterSophie).clothes = 0;
+ getCharacter(kCharacterSophie).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -291,17 +324,20 @@ void LogicManager::CONS_Sophie_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Sophie_StartPart4(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterSophie);
- getCharacter(kCharacterSophie).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterSophie).characterPosition.position = 4840;
- getCharacter(kCharacterSophie).characterPosition.location = 1;
- getCharacter(kCharacterSophie).clothes = 0;
- getCharacter(kCharacterSophie).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Sophie_WithRebecca(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterSophie);
+ getCharacter(kCharacterSophie).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterSophie).characterPosition.position = 4840;
+ getCharacter(kCharacterSophie).characterPosition.location = 1;
+ getCharacter(kCharacterSophie).clothes = 0;
+ getCharacter(kCharacterSophie).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -316,11 +352,15 @@ void LogicManager::CONS_Sophie_Asleep4(CONS_PARAMS) {
}
void LogicManager::HAND_Sophie_Asleep4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterSophie).characterPosition.position = 4840;
getCharacter(kCharacterSophie).characterPosition.location = 1;
getCharacter(kCharacterSophie).characterPosition.car = kCarRedSleeping;
endGraphics(kCharacterSophie);
+ break;
+ default:
+ break;
}
}
@@ -335,16 +375,19 @@ void LogicManager::CONS_Sophie_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Sophie_StartPart5(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterSophie);
- getCharacter(kCharacterSophie).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterSophie).characterPosition.position = 3969;
- getCharacter(kCharacterSophie).characterPosition.location = 1;
- getCharacter(kCharacterSophie).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Sophie_Prisoner(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterSophie);
+ getCharacter(kCharacterSophie).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterSophie).characterPosition.position = 3969;
+ getCharacter(kCharacterSophie).characterPosition.location = 1;
+ getCharacter(kCharacterSophie).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -359,8 +402,13 @@ void LogicManager::CONS_Sophie_Prisoner(CONS_PARAMS) {
}
void LogicManager::HAND_Sophie_Prisoner(HAND_PARAMS) {
- if (msg->action == 70549068)
+ switch (msg->action) {
+ case 70549068:
CONS_Sophie_Free(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Sophie_Free(CONS_PARAMS) {
Commit: dafdbe320de0931b755e9d08dad3d0d9f801ab54
https://github.com/scummvm/scummvm/commit/dafdbe320de0931b755e9d08dad3d0d9f801ab54
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Police logic
Changed paths:
engines/lastexpress/characters/police.cpp
diff --git a/engines/lastexpress/characters/police.cpp b/engines/lastexpress/characters/police.cpp
index 9eab5c0356b..9121e62f8ac 100644
--- a/engines/lastexpress/characters/police.cpp
+++ b/engines/lastexpress/characters/police.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_Police(int chapter) {
CONS_Police_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -69,19 +69,25 @@ void LogicManager::CONS_Police_DebugWalks(CONS_PARAMS) {
}
void LogicManager::HAND_Police_DebugWalks(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterPolice).characterPosition.position = 0;
- getCharacter(kCharacterPolice).characterPosition.location = 0;
- getCharacter(kCharacterPolice).characterPosition.car = kCarGreenSleeping;
- getCharacterCurrentParams(kCharacterPolice)[0] = 10000;
- }
- } else if (walk(kCharacterPolice, kCarGreenSleeping, getCharacterCurrentParams(kCharacterPolice)[0])) {
- if (getCharacterCurrentParams(kCharacterPolice)[0] == 10000) {
- getCharacterCurrentParams(kCharacterPolice)[0] = 0;
- } else {
- getCharacterCurrentParams(kCharacterPolice)[0] = 10000;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterPolice, kCarGreenSleeping, getCharacterCurrentParams(kCharacterPolice)[0])) {
+ if (getCharacterCurrentParams(kCharacterPolice)[0] == 10000) {
+ getCharacterCurrentParams(kCharacterPolice)[0] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterPolice)[0] = 10000;
+ }
}
+
+ break;
+ case 12:
+ getCharacter(kCharacterPolice).characterPosition.position = 0;
+ getCharacter(kCharacterPolice).characterPosition.location = 0;
+ getCharacter(kCharacterPolice).characterPosition.car = kCarGreenSleeping;
+ getCharacterCurrentParams(kCharacterPolice)[0] = 10000;
+ break;
+ default:
+ break;
}
}
@@ -96,12 +102,19 @@ void LogicManager::CONS_Police_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Police_Birth(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12)
- getCharacter(kCharacterPolice).characterPosition.car = kCarNone;
- } else if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterPolice)[0]) {
- getCharacterCurrentParams(kCharacterPolice)[0] = 1;
- CONS_Police_ReadyToBoard(0, 0, 0, 0);
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterPolice)[0]) {
+ getCharacterCurrentParams(kCharacterPolice)[0] = 1;
+ CONS_Police_ReadyToBoard(0, 0, 0, 0);
+ }
+
+ break;
+ case 12:
+ getCharacter(kCharacterPolice).characterPosition.car = kCarNone;
+ break;
+ default:
+ break;
}
}
@@ -125,10 +138,12 @@ void LogicManager::HAND_Police_DoSeqOtis(HAND_PARAMS) {
playDialog(0, "MUS007", -1, 0);
getCharacterParams(kCharacterPolice, 8)[0] = 1;
}
+
if (nearChar(kCharacterPolice, kCharacterCath, 1000) && !getCharacter(kCharacterCath).characterPosition.location) {
getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 1;
PoliceCall(&LogicManager::CONS_Police_SaveGame, 2, kEventGendarmesArrestation, 0, 0);
}
+
break;
case 3:
getCharacter(kCharacterPolice).currentCall--;
@@ -143,9 +158,10 @@ void LogicManager::HAND_Police_DoSeqOtis(HAND_PARAMS) {
playNIS(kEventGendarmesArrestation);
endGame(0, 1, 57, 1);
}
+
break;
default:
- return;
+ break;
}
}
@@ -169,10 +185,12 @@ void LogicManager::HAND_Police_DoDialog(HAND_PARAMS) {
playDialog(0, "MUS007", -1, 0);
getCharacterParams(kCharacterPolice, 8)[0] = 1;
}
+
if (nearChar(kCharacterPolice, kCharacterCath, 1000) && !getCharacter(kCharacterCath).characterPosition.location) {
getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 1;
PoliceCall(&LogicManager::CONS_Police_SaveGame, 2, kEventGendarmesArrestation, 0, 0);
}
+
break;
case 2:
getCharacter(kCharacterPolice).currentCall--;
@@ -187,9 +205,10 @@ void LogicManager::HAND_Police_DoDialog(HAND_PARAMS) {
playNIS(kEventGendarmesArrestation);
endGame(0, 1, 57, true);
}
+
break;
default:
- return;
+ break;
}
}
@@ -214,7 +233,7 @@ void LogicManager::HAND_Police_DoDialogFullVol(HAND_PARAMS) {
getCharacterParams(kCharacterPolice, 8)[0] = 1;
}
- if (nearChar(kCharacterPolice, kCharacterCath, 0x3E8) && !getCharacter(kCharacterCath).characterPosition.location) {
+ if (nearChar(kCharacterPolice, kCharacterCath, 1000) && !getCharacter(kCharacterCath).characterPosition.location) {
getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 1;
PoliceCall(&LogicManager::CONS_Police_SaveGame, 2, kEventGendarmesArrestation, 0, 0);
}
@@ -236,7 +255,7 @@ void LogicManager::HAND_Police_DoDialogFullVol(HAND_PARAMS) {
break;
default:
- return;
+ break;
}
}
@@ -253,30 +272,39 @@ void LogicManager::CONS_Police_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_Police_DoWait(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action != 17) {
- if (msg->action == 18 && getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] == 1) {
- playNIS(kEventGendarmesArrestation);
- endGame(0, 1, 57, true);
- }
- return;
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterPolice)[0] < _gameTime && !getCharacterCurrentParams(kCharacterPolice)[1]) {
+ getCharacterCurrentParams(kCharacterPolice)[1] = 1;
+
+ getCharacter(kCharacterPolice).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterPolice, _functionsPolice[getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall]]);
+ fedEx(kCharacterPolice, kCharacterPolice, 18, 0);
+ break;
}
- } else if (getCharacterCurrentParams(kCharacterPolice)[0] < _gameTime && !getCharacterCurrentParams(kCharacterPolice)[1]) {
- getCharacterCurrentParams(kCharacterPolice)[1] = 1;
- getCharacter(kCharacterPolice).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterPolice, _functionsPolice[getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall]]);
- fedEx(kCharacterPolice, kCharacterPolice, 18, 0);
- return;
- }
+ if (!getCharacterParams(kCharacterPolice, 8)[0] && whoOnScreen(kCharacterPolice)) {
+ playDialog(0, "MUS007", -1, 0);
+ getCharacterParams(kCharacterPolice, 8)[0] = 1;
+ }
- if (!getCharacterParams(kCharacterPolice, 8)[0] && whoOnScreen(kCharacterPolice)) {
- playDialog(0, "MUS007", -1, 0);
- getCharacterParams(kCharacterPolice, 8)[0] = 1;
- }
- if (nearChar(kCharacterPolice, kCharacterCath, 1000) && !getCharacter(kCharacterCath).characterPosition.location) {
- getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 1;
- PoliceCall(&LogicManager::CONS_Police_SaveGame, 2, kEventGendarmesArrestation, 0, 0);
+ if (nearChar(kCharacterPolice, kCharacterCath, 1000) && !getCharacter(kCharacterCath).characterPosition.location) {
+ getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 1;
+ PoliceCall(&LogicManager::CONS_Police_SaveGame, 2, kEventGendarmesArrestation, 0, 0);
+ }
+
+ break;
+ case 17:
+ break;
+ case 18:
+ if (getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] == 1) {
+ playNIS(kEventGendarmesArrestation);
+ endGame(0, 1, 57, true);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -294,22 +322,25 @@ void LogicManager::CONS_Police_SaveGame(CONS_PARAMS) {
}
void LogicManager::HAND_Police_SaveGame(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- save(
- kCharacterPolice,
- getCharacterCurrentParams(kCharacterPolice)[0],
- getCharacterCurrentParams(kCharacterPolice)[1]
- );
+ switch (msg->action) {
+ case 0:
+ getCharacter(kCharacterPolice).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterPolice, _functionsPolice[getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall]]);
+ fedEx(kCharacterPolice, kCharacterPolice, 18, 0);
+ break;
+ case 12:
+ save(
+ kCharacterPolice,
+ getCharacterCurrentParams(kCharacterPolice)[0],
+ getCharacterCurrentParams(kCharacterPolice)[1]
+ );
- getCharacter(kCharacterPolice).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterPolice, _functionsPolice[getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall]]);
- fedEx(kCharacterPolice, kCharacterPolice, 18, 0);
- }
- } else {
getCharacter(kCharacterPolice).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterPolice, _functionsPolice[getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall]]);
fedEx(kCharacterPolice, kCharacterPolice, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -329,36 +360,51 @@ void LogicManager::CONS_Police_DoWalk(CONS_PARAMS) {
void LogicManager::HAND_Police_DoWalk(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (!walk(kCharacterPolice, getCharacterCurrentParams(kCharacterPolice)[0], getCharacterCurrentParams(kCharacterPolice)[1]))
- goto LABEL_9;
- goto LABEL_4;
+ if (!walk(kCharacterPolice, getCharacterCurrentParams(kCharacterPolice)[0], getCharacterCurrentParams(kCharacterPolice)[1])) {
+ if (!getCharacterParams(kCharacterPolice, 8)[0] && whoOnScreen(29)) {
+ playDialog(0, "MUS007", -1, 0);
+ getCharacterParams(kCharacterPolice, 8)[0] = 1;
+ }
+
+ if (nearChar(kCharacterPolice, kCharacterCath, 0x6D6) && !getCharacter(kCharacterCath).characterPosition.location && (!checkCathDir(kCarRedSleeping, 22) || nearChar(kCharacterPolice, kCharacterCath, 0xFA))) {
+ getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 1;
+ PoliceCall(&LogicManager::CONS_Police_SaveGame, 2, kEventGendarmesArrestation, 0, 0);
+ }
+ } else {
+ getCharacter(kCharacterPolice).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterPolice, _functionsPolice[getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall]]);
+ fedEx(kCharacterPolice, kCharacterPolice, 18, 0);
+ }
+
+ break;
case 12:
if (walk(kCharacterPolice, getCharacterCurrentParams(kCharacterPolice)[0], getCharacterCurrentParams(kCharacterPolice)[1])) {
- LABEL_4:
getCharacter(kCharacterPolice).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterPolice, _functionsPolice[getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall]]);
fedEx(kCharacterPolice, kCharacterPolice, 18, 0);
}
break;
case 17:
- LABEL_9:
if (!getCharacterParams(kCharacterPolice, 8)[0] && whoOnScreen(29)) {
playDialog(0, "MUS007", -1, 0);
getCharacterParams(kCharacterPolice, 8)[0] = 1;
}
+
if (nearChar(kCharacterPolice, kCharacterCath, 0x6D6) && !getCharacter(kCharacterCath).characterPosition.location && (!checkCathDir(kCarRedSleeping, 22) || nearChar(kCharacterPolice, kCharacterCath, 0xFA))) {
getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 1;
PoliceCall(&LogicManager::CONS_Police_SaveGame, 2, kEventGendarmesArrestation, 0, 0);
}
+
break;
case 18:
if (getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] == 1) {
playNIS(kEventGendarmesArrestation);
endGame(0, 1, 57, 1);
}
+
break;
default:
- return;
+ break;
}
}
@@ -378,126 +424,129 @@ void LogicManager::CONS_Police_DoComp(CONS_PARAMS) {
}
void LogicManager::HAND_Police_DoComp(HAND_PARAMS) {
- if (msg->action != 18) {
- if (msg->action == 12) {
- if (getCharacterCurrentParams(kCharacterPolice)[1] == 5790) {
- getCharacterCurrentParams(kCharacterPolice)[20] = 4;
- getCharacterCurrentParams(kCharacterPolice)[22] = 6130;
- } else if (getCharacterCurrentParams(kCharacterPolice)[1] >= 5790) {
- if (getCharacterCurrentParams(kCharacterPolice)[1] == 7500) {
- getCharacterCurrentParams(kCharacterPolice)[20] = 2;
+ switch (msg->action) {
+ case 12:
+ if (getCharacterCurrentParams(kCharacterPolice)[1] == 5790) {
+ getCharacterCurrentParams(kCharacterPolice)[20] = 4;
+ getCharacterCurrentParams(kCharacterPolice)[22] = 6130;
+ } else if (getCharacterCurrentParams(kCharacterPolice)[1] >= 5790) {
+ if (getCharacterCurrentParams(kCharacterPolice)[1] == 7500) {
+ getCharacterCurrentParams(kCharacterPolice)[20] = 2;
+ getCharacterCurrentParams(kCharacterPolice)[22] = 7850;
+ } else if (getCharacterCurrentParams(kCharacterPolice)[1] >= 7500) {
+ if (getCharacterCurrentParams(kCharacterPolice)[1] == 8200) {
+ getCharacterCurrentParams(kCharacterPolice)[20] = 1;
getCharacterCurrentParams(kCharacterPolice)[22] = 7850;
- } else if (getCharacterCurrentParams(kCharacterPolice)[1] >= 7500) {
- if (getCharacterCurrentParams(kCharacterPolice)[1] == 8200) {
- getCharacterCurrentParams(kCharacterPolice)[20] = 1;
- getCharacterCurrentParams(kCharacterPolice)[22] = 7850;
- getCharacterCurrentParams(kCharacterPolice)[21] = 1;
- }
- } else if (getCharacterCurrentParams(kCharacterPolice)[1] == 6470) {
- getCharacterCurrentParams(kCharacterPolice)[20] = 3;
- getCharacterCurrentParams(kCharacterPolice)[22] = 6130;
getCharacterCurrentParams(kCharacterPolice)[21] = 1;
}
- } else if (getCharacterCurrentParams(kCharacterPolice)[1] == 4070) {
- getCharacterCurrentParams(kCharacterPolice)[20] = 6;
+ } else if (getCharacterCurrentParams(kCharacterPolice)[1] == 6470) {
+ getCharacterCurrentParams(kCharacterPolice)[20] = 3;
+ getCharacterCurrentParams(kCharacterPolice)[22] = 6130;
+ getCharacterCurrentParams(kCharacterPolice)[21] = 1;
+ }
+ } else if (getCharacterCurrentParams(kCharacterPolice)[1] == 4070) {
+ getCharacterCurrentParams(kCharacterPolice)[20] = 6;
+ getCharacterCurrentParams(kCharacterPolice)[22] = 4455;
+ } else if (getCharacterCurrentParams(kCharacterPolice)[1] >= 4070) {
+ if (getCharacterCurrentParams(kCharacterPolice)[1] == 4840) {
+ getCharacterCurrentParams(kCharacterPolice)[20] = 5;
getCharacterCurrentParams(kCharacterPolice)[22] = 4455;
- } else if (getCharacterCurrentParams(kCharacterPolice)[1] >= 4070) {
- if (getCharacterCurrentParams(kCharacterPolice)[1] == 4840) {
- getCharacterCurrentParams(kCharacterPolice)[20] = 5;
- getCharacterCurrentParams(kCharacterPolice)[22] = 4455;
- getCharacterCurrentParams(kCharacterPolice)[21] = 1;
- }
- } else if (getCharacterCurrentParams(kCharacterPolice)[1] == 3050) {
- getCharacterCurrentParams(kCharacterPolice)[20] = 7;
getCharacterCurrentParams(kCharacterPolice)[21] = 1;
- } else if (getCharacterCurrentParams(kCharacterPolice)[1] == 2740) {
- getCharacterCurrentParams(kCharacterPolice)[20] = 8;
}
+ } else if (getCharacterCurrentParams(kCharacterPolice)[1] == 3050) {
+ getCharacterCurrentParams(kCharacterPolice)[20] = 7;
+ getCharacterCurrentParams(kCharacterPolice)[21] = 1;
+ } else if (getCharacterCurrentParams(kCharacterPolice)[1] == 2740) {
+ getCharacterCurrentParams(kCharacterPolice)[20] = 8;
+ }
- if (getCharacterCurrentParams(kCharacterPolice)[0] == kCarRedSleeping)
- getCharacterCurrentParams(kCharacterPolice)[20] += 31;
+ if (getCharacterCurrentParams(kCharacterPolice)[0] == kCarRedSleeping)
+ getCharacterCurrentParams(kCharacterPolice)[20] += 31;
- if (getCharacterCurrentParams(kCharacterPolice)[21]) {
- Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterPolice)[8], 12, "632A");
- Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterPolice)[11], 12, "632B");
- Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterPolice)[14], 12, "632C");
- } else {
- Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterPolice)[8], 12, "632D");
- Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterPolice)[11], 12, "632E");
- Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterPolice)[14], 12, "632F");
- }
+ if (getCharacterCurrentParams(kCharacterPolice)[21]) {
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterPolice)[8], 12, "632A");
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterPolice)[11], 12, "632B");
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterPolice)[14], 12, "632C");
+ } else {
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterPolice)[8], 12, "632D");
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterPolice)[11], 12, "632E");
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterPolice)[14], 12, "632F");
+ }
- Common::strcat_s((char *)&getCharacterCurrentParams(kCharacterPolice)[8], 12, (char *)&getCharacterCurrentParams(kCharacterPolice)[2]);
- Common::strcat_s((char *)&getCharacterCurrentParams(kCharacterPolice)[11], 12, (char *)&getCharacterCurrentParams(kCharacterPolice)[2]);
- Common::strcat_s((char *)&getCharacterCurrentParams(kCharacterPolice)[14], 12, (char *)&getCharacterCurrentParams(kCharacterPolice)[2]);
+ Common::strcat_s((char *)&getCharacterCurrentParams(kCharacterPolice)[8], 12, (char *)&getCharacterCurrentParams(kCharacterPolice)[2]);
+ Common::strcat_s((char *)&getCharacterCurrentParams(kCharacterPolice)[11], 12, (char *)&getCharacterCurrentParams(kCharacterPolice)[2]);
+ Common::strcat_s((char *)&getCharacterCurrentParams(kCharacterPolice)[14], 12, (char *)&getCharacterCurrentParams(kCharacterPolice)[2]);
- if ((inComp(kCharacterCath, getCharacterCurrentParams(kCharacterPolice)[0], getCharacterCurrentParams(kCharacterPolice)[1]) ||
- inComp(kCharacterCath, getCharacterCurrentParams(kCharacterPolice)[0], getCharacterCurrentParams(kCharacterPolice)[22]) ||
- (getCharacterCurrentParams(kCharacterPolice)[0] == kCarGreenSleeping && getCharacterCurrentParams(kCharacterPolice)[1] == 8200 && cathOutHisWindow())) &&
- !inComp(kCharacterCath, kCarRedSleeping, 7850)) {
- getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 1;
- PoliceCall(&LogicManager::CONS_Police_TrappedCath, getCharacterCurrentParams(kCharacterPolice)[0], getCharacterCurrentParams(kCharacterPolice)[1], getCharacterCurrentParams(kCharacterPolice)[20], 0);
+ if ((inComp(kCharacterCath, getCharacterCurrentParams(kCharacterPolice)[0], getCharacterCurrentParams(kCharacterPolice)[1]) ||
+ inComp(kCharacterCath, getCharacterCurrentParams(kCharacterPolice)[0], getCharacterCurrentParams(kCharacterPolice)[22]) ||
+ (getCharacterCurrentParams(kCharacterPolice)[0] == kCarGreenSleeping && getCharacterCurrentParams(kCharacterPolice)[1] == 8200 && cathOutHisWindow())) &&
+ !inComp(kCharacterCath, kCarRedSleeping, 7850)) {
+ getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 1;
+ PoliceCall(&LogicManager::CONS_Police_TrappedCath, getCharacterCurrentParams(kCharacterPolice)[0], getCharacterCurrentParams(kCharacterPolice)[1], getCharacterCurrentParams(kCharacterPolice)[20], 0);
+ } else {
+ startCycOtis(kCharacterPolice, (char *)&getCharacterCurrentParams(kCharacterPolice)[8]);
+ softBlockAtDoor(kCharacterPolice, getCharacterCurrentParams(kCharacterPolice)[20]);
+ if (getCharacterCurrentParams(kCharacterPolice)[21]) {
+ getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 2;
+ PoliceCall(&LogicManager::CONS_Police_DoDialog, "POL1044A", 0, 0, 0);
} else {
- startCycOtis(kCharacterPolice, (char *)&getCharacterCurrentParams(kCharacterPolice)[8]);
- softBlockAtDoor(kCharacterPolice, getCharacterCurrentParams(kCharacterPolice)[20]);
- if (getCharacterCurrentParams(kCharacterPolice)[21]) {
- getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 2;
- PoliceCall(&LogicManager::CONS_Police_DoDialog, "POL1044A", 0, 0, 0);
- } else {
- getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 3;
- PoliceCall(&LogicManager::CONS_Police_DoDialog, "POL1044B", 0, 0, 0);
- }
+ getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 3;
+ PoliceCall(&LogicManager::CONS_Police_DoDialog, "POL1044B", 0, 0, 0);
}
}
- return;
- }
-
- if (getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] < 4) {
- if (getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] != 1) {
- if (getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8]) {
- startCycOtis(kCharacterPolice, (char *)&getCharacterCurrentParams(kCharacterPolice)[11]);
- if (!emptyComp(getCharacterCurrentParams(kCharacterPolice)[0], getCharacterCurrentParams(kCharacterPolice)[1]) &&
- strcmp((char *)&getCharacterCurrentParams(kCharacterPolice)[5], "NODIALOG")) {
- Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterPolice)[17], 12, "POL1045");
- Common::strcat_s((char *)&getCharacterCurrentParams(kCharacterPolice)[17], 12, (char *)&getCharacterCurrentParams(kCharacterPolice)[5]);
- getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 5;
- PoliceCall(&LogicManager::CONS_Police_DoDialog, (char *)&getCharacterCurrentParams(kCharacterPolice)[17], 0, 0, 0);
- } else {
- getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 4;
- PoliceCall(&LogicManager::CONS_Police_DoWait, 150, 0, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] < 4) {
+ if (getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] != 1) {
+ if (getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8]) {
+ startCycOtis(kCharacterPolice, (char *)&getCharacterCurrentParams(kCharacterPolice)[11]);
+ if (!emptyComp(getCharacterCurrentParams(kCharacterPolice)[0], getCharacterCurrentParams(kCharacterPolice)[1]) &&
+ strcmp((char *)&getCharacterCurrentParams(kCharacterPolice)[5], "NODIALOG")) {
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterPolice)[17], 12, "POL1045");
+ Common::strcat_s((char *)&getCharacterCurrentParams(kCharacterPolice)[17], 12, (char *)&getCharacterCurrentParams(kCharacterPolice)[5]);
+ getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 5;
+ PoliceCall(&LogicManager::CONS_Police_DoDialog, (char *)&getCharacterCurrentParams(kCharacterPolice)[17], 0, 0, 0);
+ } else {
+ getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 4;
+ PoliceCall(&LogicManager::CONS_Police_DoWait, 150, 0, 0, 0);
+ }
}
+
+ break;
}
- return;
+ getCharacter(kCharacterPolice).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterPolice, _functionsPolice[getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall]]);
+ fedEx(kCharacterPolice, kCharacterPolice, 18, 0);
+ break;
}
- getCharacter(kCharacterPolice).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterPolice, _functionsPolice[getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall]]);
- fedEx(kCharacterPolice, kCharacterPolice, 18, 0);
- return;
- }
+ if (getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] == 6) {
+ getCharacter(kCharacterPolice).characterPosition.location = 0;
+ softReleaseAtDoor(kCharacterPolice, getCharacterCurrentParams(kCharacterPolice)[20]);
+ getCharacter(kCharacterPolice).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterPolice, _functionsPolice[getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall]]);
+ fedEx(kCharacterPolice, kCharacterPolice, 18, 0);
+ break;
+ }
- if (getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] == 6) {
- getCharacter(kCharacterPolice).characterPosition.location = 0;
- softReleaseAtDoor(kCharacterPolice, getCharacterCurrentParams(kCharacterPolice)[20]);
- getCharacter(kCharacterPolice).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterPolice, _functionsPolice[getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall]]);
- fedEx(kCharacterPolice, kCharacterPolice, 18, 0);
- return;
- }
+ if (getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] < 6) {
+ if (!emptyComp(getCharacterCurrentParams(kCharacterPolice)[0], getCharacterCurrentParams(kCharacterPolice)[1]) &&
+ strcmp((char *)&getCharacterCurrentParams(kCharacterPolice)[5], "NODIALOG")) {
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterPolice)[17], 12, "POL1043");
+ Common::strcat_s((char *)&getCharacterCurrentParams(kCharacterPolice)[17], 12, (char *)&getCharacterCurrentParams(kCharacterPolice)[5]);
+ playDialog(kCharacterPolice, (char *)&getCharacterCurrentParams(kCharacterPolice)[17], -1, 30);
+ }
- if (getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] < 6) {
- if (!emptyComp(getCharacterCurrentParams(kCharacterPolice)[0], getCharacterCurrentParams(kCharacterPolice)[1]) &&
- strcmp((char *)&getCharacterCurrentParams(kCharacterPolice)[5], "NODIALOG")) {
- Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterPolice)[17], 12, "POL1043");
- Common::strcat_s((char *)&getCharacterCurrentParams(kCharacterPolice)[17], 12, (char *)&getCharacterCurrentParams(kCharacterPolice)[5]);
- playDialog(kCharacterPolice, (char *)&getCharacterCurrentParams(kCharacterPolice)[17], -1, 30);
+ getCharacter(kCharacterPolice).characterPosition.location = 1;
+ getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 6;
+ PoliceCall(&LogicManager::CONS_Police_DoSeqOtis, (char *)&getCharacterCurrentParams(kCharacterPolice)[14], 0, 0, 0);
}
- getCharacter(kCharacterPolice).characterPosition.location = 1;
- getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 6;
- PoliceCall(&LogicManager::CONS_Police_DoSeqOtis, (char *)&getCharacterCurrentParams(kCharacterPolice)[14], 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -518,32 +567,40 @@ void LogicManager::CONS_Police_TrappedCath(CONS_PARAMS) {
void LogicManager::HAND_Police_TrappedCath(HAND_PARAMS) {
switch (msg->action) {
case 0:
+ {
if (!getCharacterCurrentParams(kCharacterPolice)[4] &&
- (getCharacterCurrentParams(kCharacterPolice)[4] = _currentGameSessionTicks + 75, _currentGameSessionTicks == -75) ||
+ (getCharacterCurrentParams(kCharacterPolice)[4] = _currentGameSessionTicks + 75, _currentGameSessionTicks == -75) ||
getCharacterCurrentParams(kCharacterPolice)[4] < _currentGameSessionTicks) {
if (!cathOutHisWindow() && checkDoor(getCharacterCurrentParams(kCharacterPolice)[2]) != 1) {
getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 2;
PoliceCall(&LogicManager::CONS_Police_SaveGame, 2, kEventGendarmesArrestation, 0, 0);
- return;
+ break;
}
}
+
+ bool skip = false; // Horrible way to unroll a goto...
+
if (!getCharacterCurrentParams(kCharacterPolice)[5]) {
getCharacterCurrentParams(kCharacterPolice)[5] = _currentGameSessionTicks + 150;
- if (_currentGameSessionTicks == -150)
- goto LABEL_13;
+ if (_currentGameSessionTicks == -150) {
+ skip = true;
+ playDialog(kCharacterPolice, "POL1046A", 16, 0);
+ }
}
- if (getCharacterCurrentParams(kCharacterPolice)[5] < _currentGameSessionTicks) {
+
+ if (!skip && getCharacterCurrentParams(kCharacterPolice)[5] < _currentGameSessionTicks) {
getCharacterCurrentParams(kCharacterPolice)[5] = 0x7FFFFFFF;
- LABEL_13:
playDialog(kCharacterPolice, "POL1046A", 16, 0);
}
+
if (getCharacterCurrentParams(kCharacterPolice)[6] || (getCharacterCurrentParams(kCharacterPolice)[6] = _currentGameSessionTicks + 300, _currentGameSessionTicks != -300)) {
if (getCharacterCurrentParams(kCharacterPolice)[6] >= _currentGameSessionTicks)
- return;
+ break;
+
getCharacterCurrentParams(kCharacterPolice)[6] = 0x7FFFFFFF;
}
+
if (!getCharacterCurrentParams(kCharacterPolice)[3] && cathOutHisWindow()) {
- LABEL_32:
setDoor(getCharacterCurrentParams(kCharacterPolice)[2], kCharacterCath, 0, 10, 9);
getCharacter(kCharacterPolice).currentCall--;
@@ -561,21 +618,23 @@ void LogicManager::HAND_Police_TrappedCath(HAND_PARAMS) {
PoliceCall(&LogicManager::CONS_Police_SaveGame, 2, kEventGendarmesArrestation, 0, 0);
}
}
+
break;
+ }
case 8:
setDoor(getCharacterCurrentParams(kCharacterPolice)[2], kCharacterPolice, checkDoor(getCharacterCurrentParams(kCharacterPolice)[2]), 0, 0);
getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 5;
PoliceCall(&LogicManager::CONS_Police_DoDialogFullVol, "POL1046B", 0, 0, 0);
- return;
+ break;
case 9:
getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 6;
PoliceCall(&LogicManager::CONS_Police_SaveGame, 2, kEventGendarmesArrestation, 0, 0);
- return;
+ break;
case 12:
setDoor(getCharacterCurrentParams(kCharacterPolice)[2], kCharacterPolice, checkDoor(getCharacterCurrentParams(kCharacterPolice)[2]), 0, 0);
getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 1;
PoliceCall(&LogicManager::CONS_Police_DoDialogFullVol, "POL1046", 0, 0, 0);
- return;
+ break;
case 18:
switch (getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8]) {
case 1:
@@ -590,21 +649,32 @@ void LogicManager::HAND_Police_TrappedCath(HAND_PARAMS) {
case 3:
playNIS((kEventCoudertBloodJacket - (getCharacterCurrentParams(kCharacterPolice)[0] == 3)));
endGame(0, 1, 55, true);
- goto LABEL_32;
+ setDoor(getCharacterCurrentParams(kCharacterPolice)[2], kCharacterCath, 0, 10, 9);
+
+ getCharacter(kCharacterPolice).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterPolice, _functionsPolice[getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall]]);
+ fedEx(kCharacterPolice, kCharacterPolice, 18, 0);
+ break;
case 4:
playNIS(kEventGendarmesArrestation);
endGame(0, 1, 57, true);
- goto LABEL_32;
+ setDoor(getCharacterCurrentParams(kCharacterPolice)[2], kCharacterCath, 0, 10, 9);
+
+ getCharacter(kCharacterPolice).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterPolice, _functionsPolice[getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall]]);
+ fedEx(kCharacterPolice, kCharacterPolice, 18, 0);
+ break;
case 5:
setDoor(getCharacterCurrentParams(kCharacterPolice)[2], kCharacterPolice, checkDoor(getCharacterCurrentParams(kCharacterPolice)[2]), 0, 9);
getCharacterCurrentParams(kCharacterPolice)[3] = 1;
break;
default:
- return;
+ break;
}
- return;
+
+ break;
default:
- return;
+ break;
}
}
@@ -619,9 +689,13 @@ void LogicManager::CONS_Police_ReadyToBoard(CONS_PARAMS) {
}
void LogicManager::HAND_Police_ReadyToBoard(HAND_PARAMS) {
- if (msg->action == 169499649) {
+ switch (msg->action) {
+ case 169499649:
send(kCharacterPolice, kCharacterCond1, 190082817, 0);
CONS_Police_SearchTrain(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -636,14 +710,16 @@ void LogicManager::CONS_Police_SearchTrain(CONS_PARAMS) {
}
void LogicManager::HAND_Police_SearchTrain(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterPolice).characterPosition.car = kCarGreenSleeping;
getCharacter(kCharacterPolice).characterPosition.location = 0;
getCharacter(kCharacterPolice).characterPosition.position = 540;
_gameProgress[kProgressField14] = 29;
getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 1;
PoliceCall(&LogicManager::CONS_Police_DoWalk, 3, 5540, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8]) {
case 1:
getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 2;
@@ -752,8 +828,12 @@ void LogicManager::HAND_Police_SearchTrain(HAND_PARAMS) {
CONS_Police_SearchDone(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -768,8 +848,13 @@ void LogicManager::CONS_Police_SearchDone(CONS_PARAMS) {
}
void LogicManager::HAND_Police_SearchDone(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterPolice).characterPosition.car = kCarNone;
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Police_StartPart2(CONS_PARAMS) {
@@ -783,8 +868,13 @@ void LogicManager::CONS_Police_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Police_StartPart2(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterPolice);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Police_StartPart3(CONS_PARAMS) {
@@ -798,8 +888,13 @@ void LogicManager::CONS_Police_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Police_StartPart3(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterPolice);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Police_StartPart4(CONS_PARAMS) {
@@ -813,8 +908,13 @@ void LogicManager::CONS_Police_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Police_StartPart4(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterPolice);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Police_StartPart5(CONS_PARAMS) {
@@ -828,8 +928,13 @@ void LogicManager::CONS_Police_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Police_StartPart5(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterPolice);
+ break;
+ default:
+ break;
+ }
}
void (LogicManager::*LogicManager::_functionsPolice[])(HAND_PARAMS) = {
Commit: 78277791b9b6a4c8e1aacae98c28583bb88dbbbb
https://github.com/scummvm/scummvm/commit/78277791b9b6a4c8e1aacae98c28583bb88dbbbb
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Salko logic
Changed paths:
engines/lastexpress/characters/salko.cpp
diff --git a/engines/lastexpress/characters/salko.cpp b/engines/lastexpress/characters/salko.cpp
index 2799496ea67..87f776385eb 100644
--- a/engines/lastexpress/characters/salko.cpp
+++ b/engines/lastexpress/characters/salko.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_Salko(int chapter) {
CONS_Salko_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -69,19 +69,25 @@ void LogicManager::CONS_Salko_DebugWalks(CONS_PARAMS) {
}
void LogicManager::HAND_Salko_DebugWalks(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterSalko).characterPosition.position = 0;
- getCharacter(kCharacterSalko).characterPosition.location = 0;
- getCharacter(kCharacterSalko).characterPosition.car = kCarGreenSleeping;
- getCharacterCurrentParams(kCharacterSalko)[0] = 10000;
- }
- } else if (walk(kCharacterSalko, kCarGreenSleeping, getCharacterCurrentParams(kCharacterSalko)[0])) {
- if (getCharacterCurrentParams(kCharacterSalko)[0] == 10000) {
- getCharacterCurrentParams(kCharacterSalko)[0] = 0;
- } else {
- getCharacterCurrentParams(kCharacterSalko)[0] = 10000;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterSalko, kCarGreenSleeping, getCharacterCurrentParams(kCharacterSalko)[0])) {
+ if (getCharacterCurrentParams(kCharacterSalko)[0] == 10000) {
+ getCharacterCurrentParams(kCharacterSalko)[0] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterSalko)[0] = 10000;
+ }
}
+
+ break;
+ case 12:
+ getCharacter(kCharacterSalko).characterPosition.position = 0;
+ getCharacter(kCharacterSalko).characterPosition.location = 0;
+ getCharacter(kCharacterSalko).characterPosition.car = kCarGreenSleeping;
+ getCharacterCurrentParams(kCharacterSalko)[0] = 10000;
+ break;
+ default:
+ break;
}
}
@@ -100,15 +106,20 @@ void LogicManager::CONS_Salko_DoCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Salko_DoCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterSalko, getCharacterCurrentParams(kCharacterSalko)[3]);
getCharacter(kCharacterSalko).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterSalko, _functionsSalko[getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall]]);
fedEx(kCharacterSalko, kCharacterSalko, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterSalko, (char *)&getCharacterCurrentParams(kCharacterSalko)[0]);
blockAtDoor(kCharacterSalko, getCharacterCurrentParams(kCharacterSalko)[3]);
+ break;
+ default:
+ break;
}
}
@@ -125,12 +136,17 @@ void LogicManager::CONS_Salko_DoSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Salko_DoSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
getCharacter(kCharacterSalko).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterSalko, _functionsSalko[getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall]]);
fedEx(kCharacterSalko, kCharacterSalko, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterSalko, (char *)&getCharacterCurrentParams(kCharacterSalko)[0]);
+ break;
+ default:
+ break;
}
}
@@ -148,16 +164,18 @@ void LogicManager::CONS_Salko_DoWalk(CONS_PARAMS) {
}
void LogicManager::HAND_Salko_DoWalk(HAND_PARAMS) {
- if (msg->action == 0) {
- if (!walk(kCharacterSalko, getCharacterCurrentParams(kCharacterSalko)[0], getCharacterCurrentParams(kCharacterSalko)[1]))
- return;
- goto LABEL_7;
- }
- if (msg->action == 12 && walk(kCharacterSalko, getCharacterCurrentParams(kCharacterSalko)[0], getCharacterCurrentParams(kCharacterSalko)[1])) {
- LABEL_7:
- getCharacter(kCharacterSalko).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterSalko, _functionsSalko[getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall]]);
- fedEx(kCharacterSalko, kCharacterSalko, 18, 0);
+ switch (msg->action) {
+ case 0:
+ case 12:
+ if (walk(kCharacterSalko, getCharacterCurrentParams(kCharacterSalko)[0], getCharacterCurrentParams(kCharacterSalko)[1])) {
+ getCharacter(kCharacterSalko).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterSalko, _functionsSalko[getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall]]);
+ fedEx(kCharacterSalko, kCharacterSalko, 18, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -174,16 +192,21 @@ void LogicManager::CONS_Salko_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_Salko_DoWait(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterSalko)[1] || (getCharacterCurrentParams(kCharacterSalko)[1] = _gameTime + getCharacterCurrentParams(kCharacterSalko)[0], _gameTime + getCharacterCurrentParams(kCharacterSalko)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterSalko)[1] >= _gameTime)
- return;
+ break;
+
getCharacterCurrentParams(kCharacterSalko)[1] = 0x7FFFFFFF;
}
getCharacter(kCharacterSalko).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterSalko, _functionsSalko[getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall]]);
fedEx(kCharacterSalko, kCharacterSalko, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -201,22 +224,25 @@ void LogicManager::CONS_Salko_SaveGame(CONS_PARAMS) {
}
void LogicManager::HAND_Salko_SaveGame(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- save(
- kCharacterSalko,
- getCharacterCurrentParams(kCharacterSalko)[0],
- getCharacterCurrentParams(kCharacterSalko)[1]
- );
+ switch (msg->action) {
+ case 0:
+ getCharacter(kCharacterSalko).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterSalko, _functionsSalko[getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall]]);
+ fedEx(kCharacterSalko, kCharacterSalko, 18, 0);
+ break;
+ case 12:
+ save(
+ kCharacterSalko,
+ getCharacterCurrentParams(kCharacterSalko)[0],
+ getCharacterCurrentParams(kCharacterSalko)[1]
+ );
- getCharacter(kCharacterSalko).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterSalko, _functionsSalko[getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall]]);
- fedEx(kCharacterSalko, kCharacterSalko, 18, 0);
- }
- } else {
getCharacter(kCharacterSalko).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterSalko, _functionsSalko[getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall]]);
fedEx(kCharacterSalko, kCharacterSalko, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -234,37 +260,43 @@ void LogicManager::CONS_Salko_DoWalkBehind(CONS_PARAMS) {
}
void LogicManager::HAND_Salko_DoWalkBehind(HAND_PARAMS) {
- if (msg->action > 6) {
- if (msg->action == 12) {
- LABEL_19:
- walk(kCharacterSalko, getCharacterCurrentParams(kCharacterSalko)[0], getCharacterCurrentParams(kCharacterSalko)[1]);
- return;
- }
- if (msg->action == 123668192) {
- getCharacter(kCharacterSalko).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterSalko, _functionsSalko[getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall]]);
- fedEx(kCharacterSalko, kCharacterSalko, 18, 0);
- }
- } else if (msg->action >= 5) {
- playDialog(0, "ZFX1002", getVolume(kCharacterSalko), 0);
- playDialog(kCharacterCath, "CAT1127A", -1, 0);
- } else if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
getCharacterCurrentParams(kCharacterSalko)[2] = 0;
if (nearChar(kCharacterSalko, kCharacterIvo, 500) ||
(getCharacter(kCharacterSalko).direction == 1) &&
- ((getCharacter(kCharacterSalko).characterPosition.car > getCharacter(kCharacterIvo).characterPosition.car) ||
- getCharacter(kCharacterSalko).characterPosition.car == getCharacter(kCharacterIvo).characterPosition.car &&
- getCharacter(kCharacterSalko).characterPosition.position > getCharacter(kCharacterIvo).characterPosition.position) ||
+ ((getCharacter(kCharacterSalko).characterPosition.car > getCharacter(kCharacterIvo).characterPosition.car) ||
+ getCharacter(kCharacterSalko).characterPosition.car == getCharacter(kCharacterIvo).characterPosition.car &&
+ getCharacter(kCharacterSalko).characterPosition.position > getCharacter(kCharacterIvo).characterPosition.position) ||
getCharacter(kCharacterSalko).direction == 2 &&
((getCharacter(kCharacterSalko).characterPosition.car < getCharacter(kCharacterIvo).characterPosition.car) ||
- getCharacter(kCharacterSalko).characterPosition.car == getCharacter(kCharacterIvo).characterPosition.car &&
- getCharacter(kCharacterSalko).characterPosition.position < getCharacter(kCharacterIvo).characterPosition.position)) {
+ getCharacter(kCharacterSalko).characterPosition.car == getCharacter(kCharacterIvo).characterPosition.car &&
+ getCharacter(kCharacterSalko).characterPosition.position < getCharacter(kCharacterIvo).characterPosition.position)) {
getCharacter(kCharacterSalko).waitedTicksUntilCycleRestart = 0;
getCharacterCurrentParams(kCharacterSalko)[2] = 1;
}
- if (!getCharacterCurrentParams(kCharacterSalko)[2])
- goto LABEL_19;
+
+ if (!getCharacterCurrentParams(kCharacterSalko)[2]) {
+ walk(kCharacterSalko, getCharacterCurrentParams(kCharacterSalko)[0], getCharacterCurrentParams(kCharacterSalko)[1]);
+ }
+
+ break;
+ case 5:
+ case 6:
+ playDialog(0, "ZFX1002", getVolume(kCharacterSalko), 0);
+ playDialog(kCharacterCath, "CAT1127A", -1, 0);
+ break;
+ case 12:
+ walk(kCharacterSalko, getCharacterCurrentParams(kCharacterSalko)[0], getCharacterCurrentParams(kCharacterSalko)[1]);
+ break;
+ case 123668192:
+ break;
+ default:
+ getCharacter(kCharacterSalko).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterSalko, _functionsSalko[getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall]]);
+ fedEx(kCharacterSalko, kCharacterSalko, 18, 0);
+ break;
}
}
@@ -279,10 +311,14 @@ void LogicManager::CONS_Salko_HomeTogether(CONS_PARAMS) {
}
void LogicManager::HAND_Salko_HomeTogether(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterSalko).characterPosition.position = 2740;
getCharacter(kCharacterSalko).characterPosition.location = 1;
getCharacter(kCharacterSalko).characterPosition.car = kCarRedSleeping;
+ break;
+ default:
+ break;
}
}
@@ -297,15 +333,21 @@ void LogicManager::CONS_Salko_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Salko_Birth(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterSalko).characterPosition.position = 4691;
- getCharacter(kCharacterSalko).characterPosition.location = 0;
- getCharacter(kCharacterSalko).characterPosition.car = kCarRestaurant;
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterSalko)[0]) {
+ getCharacterCurrentParams(kCharacterSalko)[0] = 1;
+ CONS_Salko_WithIvo(0, 0, 0, 0);
}
- } else if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterSalko)[0]) {
- getCharacterCurrentParams(kCharacterSalko)[0] = 1;
- CONS_Salko_WithIvo(0, 0, 0, 0);
+
+ break;
+ case 12:
+ getCharacter(kCharacterSalko).characterPosition.position = 4691;
+ getCharacter(kCharacterSalko).characterPosition.location = 0;
+ getCharacter(kCharacterSalko).characterPosition.car = kCarRestaurant;
+ break;
+ default:
+ break;
}
}
@@ -320,18 +362,23 @@ void LogicManager::CONS_Salko_WithIvo(CONS_PARAMS) {
}
void LogicManager::HAND_Salko_WithIvo(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 18) {
- if (getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] == 1) {
- startCycOtis(kCharacterSalko, "BLANK");
- CONS_Salko_HomeTogether(0, 0, 0, 0);
- }
- } else if (msg->action == 125242096) {
- getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 1;
- SalkoCall(&LogicManager::CONS_Salko_DoWalkBehind, 4, 2740, 0, 0);
- }
- } else {
+ switch (msg->action) {
+ case 0:
getCharacter(kCharacterSalko).characterPosition = getCharacter(kCharacterIvo).characterPosition;
+ break;
+ case 18:
+ if (getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] == 1) {
+ startCycOtis(kCharacterSalko, "BLANK");
+ CONS_Salko_HomeTogether(0, 0, 0, 0);
+ }
+
+ break;
+ case 125242096:
+ getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 1;
+ SalkoCall(&LogicManager::CONS_Salko_DoWalkBehind, 4, 2740, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -346,12 +393,16 @@ void LogicManager::CONS_Salko_Asleep(CONS_PARAMS) {
}
void LogicManager::HAND_Salko_Asleep(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterSalko).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterSalko).characterPosition.position = 2740;
getCharacter(kCharacterSalko).characterPosition.location = 1;
endGraphics(kCharacterSalko);
setDoor(39, kCharacterCath, 3, 10, 9);
+ break;
+ default:
+ break;
}
}
@@ -366,16 +417,21 @@ void LogicManager::CONS_Salko_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Salko_StartPart2(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterSalko);
getCharacter(kCharacterSalko).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterSalko).characterPosition.position = 2740;
getCharacter(kCharacterSalko).characterPosition.location = 1;
getCharacter(kCharacterSalko).clothes = 0;
getCharacter(kCharacterSalko).inventoryItem = 0;
- } else if (msg->action == 136184016) {
+ break;
+ case 136184016:
getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 1;
SalkoCall(&LogicManager::CONS_Salko_JoinIvo, 0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -411,11 +467,14 @@ void LogicManager::HAND_Salko_JoinIvo(HAND_PARAMS) {
CONS_Salko_HomeTogether(0, 0, 0, 0);
break;
}
+
break;
case 125242096:
getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 3;
SalkoCall(&LogicManager::CONS_Salko_DoWalkBehind, 4, 2740, 0, 0);
break;
+ default:
+ break;
}
}
@@ -430,17 +489,20 @@ void LogicManager::CONS_Salko_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Salko_StartPart3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterSalko);
- getCharacter(kCharacterSalko).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterSalko).characterPosition.position = 2740;
- getCharacter(kCharacterSalko).characterPosition.location = 1;
- getCharacter(kCharacterSalko).clothes = 0;
- getCharacter(kCharacterSalko).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Salko_InComp(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterSalko);
+ getCharacter(kCharacterSalko).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterSalko).characterPosition.position = 2740;
+ getCharacter(kCharacterSalko).characterPosition.location = 1;
+ getCharacter(kCharacterSalko).clothes = 0;
+ getCharacter(kCharacterSalko).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -455,19 +517,27 @@ void LogicManager::CONS_Salko_InComp(CONS_PARAMS) {
}
void LogicManager::HAND_Salko_InComp(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 18 && getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] == 1)
- getCharacterCurrentParams(kCharacterSalko)[0] = 0;
- } else {
- if (_gameTime >= 2200500)
- return;
- if (getCharacterCurrentParams(kCharacterSalko)[0] || (getCharacterCurrentParams(kCharacterSalko)[0] = _gameTime + 81000, _gameTime != -81000)) {
- if (getCharacterCurrentParams(kCharacterSalko)[0] >= _gameTime)
- return;
- getCharacterCurrentParams(kCharacterSalko)[0] = 0x7FFFFFFF;
+ switch (msg->action) {
+ case 0:
+ if (_gameTime < 2200500) {
+ if (getCharacterCurrentParams(kCharacterSalko)[0] || (getCharacterCurrentParams(kCharacterSalko)[0] = _gameTime + 81000, _gameTime != -81000)) {
+ if (getCharacterCurrentParams(kCharacterSalko)[0] >= _gameTime)
+ break;
+ getCharacterCurrentParams(kCharacterSalko)[0] = 0x7FFFFFFF;
+ }
+
+ getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 1;
+ SalkoCall(&LogicManager::CONS_Salko_EavesdropAnna, 0, 0, 0, 0);
}
- getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 1;
- SalkoCall(&LogicManager::CONS_Salko_EavesdropAnna, 0, 0, 0, 0);
+
+ break;
+ case 18:
+ if (getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] == 1)
+ getCharacterCurrentParams(kCharacterSalko)[0] = 0;
+
+ break;
+ default:
+ break;
}
}
@@ -482,77 +552,91 @@ void LogicManager::CONS_Salko_EavesdropAnna(CONS_PARAMS) {
}
void LogicManager::HAND_Salko_EavesdropAnna(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterSalko).characterPosition.location = 0;
- if (getCharacter(kCharacterSalko).characterPosition.position < 2087)
- getCharacter(kCharacterSalko).characterPosition.position = 2088;
- getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 2;
- SalkoCall(&LogicManager::CONS_Salko_DoWalk, 4, 4070, 0, 0);
- break;
- case 2:
- startCycOtis(kCharacterSalko, "612AF");
- softBlockAtDoor(kCharacterSalko, 37);
- break;
- case 3:
- send(kCharacterSalko, kCharacterSalko, 101169464, 0);
- goto LABEL_18;
- case 4:
- softReleaseAtDoor(kCharacterSalko, 37);
- getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 5;
- SalkoCall(&LogicManager::CONS_Salko_DoWalk, 4, 9460, 0, 0);
- break;
- case 5:
- getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 6;
- SalkoCall(&LogicManager::CONS_Salko_DoWait, 4500, 0, 0, 0);
- break;
- case 6:
- getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 7;
- SalkoCall(&LogicManager::CONS_Salko_DoWalk, 4, 2740, 0, 0);
- break;
- case 7:
- getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 8;
- SalkoCall(&LogicManager::CONS_Salko_DoCorrOtis, "612Ch", 39, 0, 0);
- break;
- case 8:
- getCharacter(kCharacterSalko).characterPosition.location = 1;
- getCharacter(kCharacterSalko).characterPosition.position = 2740;
- endGraphics(kCharacterSalko);
-
- getCharacter(kCharacterSalko).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterSalko, _functionsSalko[getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall]]);
- fedEx(kCharacterSalko, kCharacterSalko, 18, 0);
- break;
- default:
- return;
- }
- } else if (msg->action == 101169464) {
- getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 4;
- SalkoCall(&LogicManager::CONS_Salko_DoCorrOtis, "612Bf", 37, 0, 0);
+ switch (msg->action) {
+ case 0:
+ if (whoOnScreen(kCharacterSalko) && nearChar(kCharacterSalko, kCharacterCath, 5000)) {
+ send(kCharacterSalko, kCharacterMax, 158007856, 0);
+ getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 3;
+ SalkoCall(&LogicManager::CONS_Salko_DoWait, 75, 0, 0, 0);
+ break;
}
- } else {
- if (msg->action == 12) {
- getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 1;
- SalkoCall(&LogicManager::CONS_Salko_DoCorrOtis, "612DH", 0x27, 0, 0);
- return;
+
+ if (getCharacterCurrentParams(kCharacterSalko)[0] || (getCharacterCurrentParams(kCharacterSalko)[0] = _gameTime + 4500, _gameTime != -4500)) {
+ if (getCharacterCurrentParams(kCharacterSalko)[0] >= _gameTime)
+ break;
+
+ getCharacterCurrentParams(kCharacterSalko)[0] = 0x7FFFFFFF;
}
- if (msg->action == 0) {
- if (whoOnScreen(kCharacterSalko) && nearChar(kCharacterSalko, kCharacterCath, 5000)) {
- send(kCharacterSalko, kCharacterMax, 158007856, 0);
- getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 3;
- SalkoCall(&LogicManager::CONS_Salko_DoWait, 75, 0, 0, 0);
- return;
- }
- LABEL_18:
+
+ send(kCharacterSalko, kCharacterSalko, 101169464, 0);
+ break;
+ case 12:
+ getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 1;
+ SalkoCall(&LogicManager::CONS_Salko_DoCorrOtis, "612DH", 0x27, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterSalko).characterPosition.location = 0;
+
+ if (getCharacter(kCharacterSalko).characterPosition.position < 2087)
+ getCharacter(kCharacterSalko).characterPosition.position = 2088;
+
+ getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 2;
+ SalkoCall(&LogicManager::CONS_Salko_DoWalk, 4, 4070, 0, 0);
+ break;
+ case 2:
+ startCycOtis(kCharacterSalko, "612AF");
+ softBlockAtDoor(kCharacterSalko, 37);
+ break;
+ case 3:
+ send(kCharacterSalko, kCharacterSalko, 101169464, 0);
if (getCharacterCurrentParams(kCharacterSalko)[0] || (getCharacterCurrentParams(kCharacterSalko)[0] = _gameTime + 4500, _gameTime != -4500)) {
if (getCharacterCurrentParams(kCharacterSalko)[0] >= _gameTime)
- return;
+ break;
+
getCharacterCurrentParams(kCharacterSalko)[0] = 0x7FFFFFFF;
}
+
send(kCharacterSalko, kCharacterSalko, 101169464, 0);
+ break;
+ case 4:
+ softReleaseAtDoor(kCharacterSalko, 37);
+ getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 5;
+ SalkoCall(&LogicManager::CONS_Salko_DoWalk, 4, 9460, 0, 0);
+ break;
+ case 5:
+ getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 6;
+ SalkoCall(&LogicManager::CONS_Salko_DoWait, 4500, 0, 0, 0);
+ break;
+ case 6:
+ getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 7;
+ SalkoCall(&LogicManager::CONS_Salko_DoWalk, 4, 2740, 0, 0);
+ break;
+ case 7:
+ getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 8;
+ SalkoCall(&LogicManager::CONS_Salko_DoCorrOtis, "612Ch", 39, 0, 0);
+ break;
+ case 8:
+ getCharacter(kCharacterSalko).characterPosition.location = 1;
+ getCharacter(kCharacterSalko).characterPosition.position = 2740;
+ endGraphics(kCharacterSalko);
+
+ getCharacter(kCharacterSalko).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterSalko, _functionsSalko[getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall]]);
+ fedEx(kCharacterSalko, kCharacterSalko, 18, 0);
+ break;
+ default:
+ break;
}
+
+ break;
+ case 101169464:
+ getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 4;
+ SalkoCall(&LogicManager::CONS_Salko_DoCorrOtis, "612Bf", 37, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -567,7 +651,8 @@ void LogicManager::CONS_Salko_TellMilos(CONS_PARAMS) {
}
void LogicManager::HAND_Salko_TellMilos(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterSalko).characterPosition.car = kCarGreenSleeping;
getCharacter(kCharacterSalko).characterPosition.position = 6470;
getCharacter(kCharacterSalko).characterPosition.location = 0;
@@ -575,7 +660,8 @@ void LogicManager::HAND_Salko_TellMilos(HAND_PARAMS) {
getCharacter(kCharacterSalko).inventoryItem = 0;
getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 1;
SalkoCall(&LogicManager::CONS_Salko_DoWalk, 4, 2740, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] == 1) {
getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 2;
SalkoCall(&LogicManager::CONS_Salko_DoCorrOtis, "612Ch", 39, 0, 0);
@@ -586,6 +672,10 @@ void LogicManager::HAND_Salko_TellMilos(HAND_PARAMS) {
send(kCharacterSalko, kCharacterMilos, 157691176, 0);
CONS_Salko_InComp(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -600,16 +690,19 @@ void LogicManager::CONS_Salko_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Salko_StartPart4(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterSalko);
- getCharacter(kCharacterSalko).characterPosition.position = 5420;
- getCharacter(kCharacterSalko).characterPosition.location = 1;
- getCharacter(kCharacterSalko).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterSalko).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Salko_WithIvo4(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterSalko);
+ getCharacter(kCharacterSalko).characterPosition.position = 5420;
+ getCharacter(kCharacterSalko).characterPosition.location = 1;
+ getCharacter(kCharacterSalko).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterSalko).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -624,15 +717,21 @@ void LogicManager::CONS_Salko_WithIvo4(CONS_PARAMS) {
}
void LogicManager::HAND_Salko_WithIvo4(HAND_PARAMS) {
- if (msg->action == 18) {
+ switch (msg->action) {
+ case 18:
if (getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] == 1) {
startCycOtis(kCharacterSalko, "BLANK");
getCharacter(kCharacterSalko).characterPosition.location = 1;
CONS_Salko_InComp4(0, 0, 0, 0);
}
- } else if (msg->action == 125242096) {
+
+ break;
+ case 125242096:
getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 1;
SalkoCall(&LogicManager::CONS_Salko_DoWalkBehind, 4, 2740, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -647,7 +746,8 @@ void LogicManager::CONS_Salko_InComp4(CONS_PARAMS) {
}
void LogicManager::HAND_Salko_InComp4(HAND_PARAMS) {
- if (msg->action == 18) {
+ switch (msg->action) {
+ case 18:
if (getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] == 1) {
getCharacter(kCharacterSalko).characterPosition.location = 0;
@@ -660,9 +760,14 @@ void LogicManager::HAND_Salko_InComp4(HAND_PARAMS) {
endGraphics(kCharacterSalko);
CONS_Salko_Hiding(0, 0, 0, 0);
}
- } else if (msg->action == 55996766) {
+
+ break;
+ case 55996766:
getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 1;
SalkoCall(&LogicManager::CONS_Salko_DoCorrOtis, "612Dh", 39, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -677,19 +782,26 @@ void LogicManager::CONS_Salko_Hiding(CONS_PARAMS) {
}
void LogicManager::HAND_Salko_Hiding(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 18) {
- if (getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] == 1) {
- getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 2;
- SalkoCall(&LogicManager::CONS_Salko_DoCorrOtis, "612Ch", 39, 0, 0);
- } else if (getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] == 2) {
- CONS_Salko_EndPart4(0, 0, 0, 0);
- }
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 2422800 && !getCharacterCurrentParams(kCharacterSalko)[0]) {
+ getCharacterCurrentParams(kCharacterSalko)[0] = 1;
+ getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 1;
+ SalkoCall(&LogicManager::CONS_Salko_DoWalk, 4, 2740, 0, 0);
}
- } else if (_gameTime > 2422800 && !getCharacterCurrentParams(kCharacterSalko)[0]) {
- getCharacterCurrentParams(kCharacterSalko)[0] = 1;
- getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 1;
- SalkoCall(&LogicManager::CONS_Salko_DoWalk, 4, 2740, 0, 0);
+
+ break;
+ case 18:
+ if (getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] == 1) {
+ getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 2;
+ SalkoCall(&LogicManager::CONS_Salko_DoCorrOtis, "612Ch", 39, 0, 0);
+ } else if (getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] == 2) {
+ CONS_Salko_EndPart4(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -704,13 +816,17 @@ void LogicManager::CONS_Salko_EndPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Salko_EndPart4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterSalko);
setDoor(39, kCharacterCath, 3, 10, 9);
getCharacter(kCharacterSalko).characterPosition.location = 1;
getCharacter(kCharacterSalko).characterPosition.position = 2740;
getCharacter(kCharacterSalko).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterSalko).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -725,16 +841,19 @@ void LogicManager::CONS_Salko_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Salko_StartPart5(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterSalko);
- getCharacter(kCharacterSalko).characterPosition.location = 1;
- getCharacter(kCharacterSalko).characterPosition.position = 9460;
- getCharacter(kCharacterSalko).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterSalko).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Salko_Guarding(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterSalko);
+ getCharacter(kCharacterSalko).characterPosition.location = 1;
+ getCharacter(kCharacterSalko).characterPosition.position = 9460;
+ getCharacter(kCharacterSalko).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterSalko).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -749,9 +868,8 @@ void LogicManager::CONS_Salko_Guarding(CONS_PARAMS) {
}
void LogicManager::HAND_Salko_Guarding(HAND_PARAMS) {
- int fightOutcome = 0;
-
- if (msg->action == 18) {
+ switch (msg->action) {
+ case 18:
switch (getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8]) {
case 1:
if (dialogRunning("MUS050"))
@@ -761,7 +879,8 @@ void LogicManager::HAND_Salko_Guarding(HAND_PARAMS) {
SalkoCall(&LogicManager::CONS_Salko_SaveGame, 1, 0, 0, 0);
break;
case 2:
- fightOutcome = playFight(2004);
+ {
+ int fightOutcome = playFight(2004);
getCharacterCurrentParams(kCharacterSalko)[0] = fightOutcome;
if (fightOutcome) {
endGame(0, 0, 0, fightOutcome == 1);
@@ -770,17 +889,26 @@ void LogicManager::HAND_Salko_Guarding(HAND_PARAMS) {
getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 3;
SalkoCall(&LogicManager::CONS_Salko_SaveGame, 2, 176, 0, 0);
}
+
break;
+ }
case 3:
playNIS(kEventCathSalkoTrainTopWin);
send(kCharacterSalko, kCharacterVesna, 134427424, 0);
bumpCath(kCarRestaurant, 10, 255);
CONS_Salko_Disappear(0, 0, 0, 0);
break;
+ default:
+ break;
}
- } else if (msg->action == 167992577) {
+
+ break;
+ case 167992577:
getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall + 8] = 1;
SalkoCall(&LogicManager::CONS_Salko_SaveGame, 2, 172, 0, 0);
+ break;
+ default:
+ break;
}
}
Commit: e47afa2820c86881c5556851283834cc98e2544d
https://github.com/scummvm/scummvm/commit/e47afa2820c86881c5556851283834cc98e2544d
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Anna logic
Changed paths:
engines/lastexpress/characters/anna.cpp
diff --git a/engines/lastexpress/characters/anna.cpp b/engines/lastexpress/characters/anna.cpp
index 2832b0b19ac..0fb0e6e80d6 100644
--- a/engines/lastexpress/characters/anna.cpp
+++ b/engines/lastexpress/characters/anna.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_Anna(int chapter) {
CONS_Anna_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -69,23 +69,31 @@ void LogicManager::CONS_Anna_DebugWalks(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_DebugWalks(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 1) {
- getCharacter(kCharacterAnna).clothes++;
- if (getCharacter(kCharacterAnna).clothes > 3)
- getCharacter(kCharacterAnna).clothes = 0;
- } else if (msg->action == 12) {
- getCharacter(kCharacterAnna).characterPosition.position = 0;
- getCharacter(kCharacterAnna).characterPosition.location = 0;
- getCharacter(kCharacterAnna).characterPosition.car = kCarGreenSleeping;
- getCharacter(kCharacterAnna).inventoryItem = 0x80;
- getCharacterCurrentParams(kCharacterAnna)[0] = 10000;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterAnna, kCarGreenSleeping, getCharacterCurrentParams(kCharacterAnna)[0])) {
+ if (getCharacterCurrentParams(kCharacterAnna)[0] == 10000)
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+ else
+ getCharacterCurrentParams(kCharacterAnna)[0] = 10000;
}
- } else if (walk(kCharacterAnna, kCarGreenSleeping, getCharacterCurrentParams(kCharacterAnna)[0])) {
- if (getCharacterCurrentParams(kCharacterAnna)[0] == 10000)
- getCharacterCurrentParams(kCharacterAnna)[0] = 0;
- else
- getCharacterCurrentParams(kCharacterAnna)[0] = 10000;
+
+ break;
+ case 1:
+ getCharacter(kCharacterAnna).clothes++;
+ if (getCharacter(kCharacterAnna).clothes > 3)
+ getCharacter(kCharacterAnna).clothes = 0;
+
+ break;
+ case 12:
+ getCharacter(kCharacterAnna).characterPosition.position = 0;
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ getCharacter(kCharacterAnna).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterAnna).inventoryItem = 0x80;
+ getCharacterCurrentParams(kCharacterAnna)[0] = 10000;
+ break;
+ default:
+ break;
}
}
@@ -102,12 +110,17 @@ void LogicManager::CONS_Anna_DoSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_DoSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
getCharacter(kCharacterAnna).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterAnna, (char *)&getCharacterCurrentParams(kCharacterAnna)[0]);
+ break;
+ default:
+ break;
}
}
@@ -127,14 +140,19 @@ void LogicManager::CONS_Anna_DoBlockSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_DoBlockSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseView(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[3], getCharacterCurrentParams(kCharacterAnna)[4]);
getCharacter(kCharacterAnna).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterAnna, (char *)&getCharacterCurrentParams(kCharacterAnna)[0]);
blockView(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[3], getCharacterCurrentParams(kCharacterAnna)[4]);
+ break;
+ default:
+ break;
}
}
@@ -153,14 +171,19 @@ void LogicManager::CONS_Anna_DoCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_DoCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[3]);
getCharacter(kCharacterAnna).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterAnna, (char *)&getCharacterCurrentParams(kCharacterAnna)[0]);
blockAtDoor(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[3]);
+ break;
+ default:
+ break;
}
}
@@ -175,16 +198,22 @@ void LogicManager::CONS_Anna_FinishSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_FinishSeqOtis(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacter(kCharacterAnna).direction != 4) {
getCharacter(kCharacterAnna).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
}
- } else if (msg->action == 3) {
+
+ break;
+ case 3:
getCharacter(kCharacterAnna).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -221,6 +250,7 @@ void LogicManager::HAND_Anna_DoJoinedSeqOtis(HAND_PARAMS) {
fedEx(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[3], getCharacterCurrentParams(kCharacterAnna)[4], (char *)&getCharacterCurrentParams(kCharacterAnna)[5]);
getCharacterCurrentParams(kCharacterAnna)[8] = 1;
}
+
break;
case 12:
startSeqOtis(kCharacterAnna, (char *)&getCharacterCurrentParams(kCharacterAnna)[0]);
@@ -241,12 +271,17 @@ void LogicManager::CONS_Anna_DoDialog(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_DoDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterAnna).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterAnna, (char *)&getCharacterCurrentParams(kCharacterAnna)[0], -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -261,16 +296,18 @@ void LogicManager::CONS_Anna_WaitRCClear(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_WaitRCClear(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
+ case 12:
if (rcClear()) {
getCharacter(kCharacterAnna).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
}
- } else if (msg->action == 12 && rcClear()) {
- getCharacter(kCharacterAnna).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
- fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+
+ break;
+ default:
+ break;
}
}
@@ -288,22 +325,25 @@ void LogicManager::CONS_Anna_SaveGame(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_SaveGame(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- save(
- kCharacterAnna,
- getCharacterCurrentParams(kCharacterAnna)[0],
- getCharacterCurrentParams(kCharacterAnna)[1]
- );
+ switch (msg->action) {
+ case 0:
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ break;
+ case 12:
+ save(
+ kCharacterAnna,
+ getCharacterCurrentParams(kCharacterAnna)[0],
+ getCharacterCurrentParams(kCharacterAnna)[1]
+ );
- getCharacter(kCharacterAnna).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
- fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
- }
- } else {
getCharacter(kCharacterAnna).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -343,7 +383,7 @@ void LogicManager::HAND_Anna_DoWalk(HAND_PARAMS) {
playChrExcuseMe(kCharacterAnna, kCharacterCath, 0);
break;
default:
- return;
+ break;
}
}
@@ -360,11 +400,12 @@ void LogicManager::CONS_Anna_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_DoWait(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterAnna)[1] ||
(getCharacterCurrentParams(kCharacterAnna)[1] = _gameTime + getCharacterCurrentParams(kCharacterAnna)[0], _gameTime + getCharacterCurrentParams(kCharacterAnna)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterAnna)[1] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterAnna)[1] = 0x7FFFFFFF;
}
@@ -372,6 +413,9 @@ void LogicManager::HAND_Anna_DoWait(HAND_PARAMS) {
getCharacter(kCharacterAnna).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -390,38 +434,48 @@ void LogicManager::HAND_Anna_PracticeMusic(HAND_PARAMS) {
case 0:
if (!getCharacterCurrentParams(kCharacterAnna)[1] && getCharacterParams(kCharacterAnna, 8)[0])
getCharacterCurrentParams(kCharacterAnna)[1] = 1;
- if (!getCharacterCurrentParams(kCharacterAnna)[5])
- goto LABEL_11;
- if (!getCharacterCurrentParams(kCharacterAnna)[6]) {
- getCharacterCurrentParams(kCharacterAnna)[6] = _currentGameSessionTicks + 75;
- if (_currentGameSessionTicks == -75)
- goto LABEL_10;
- }
- if (getCharacterCurrentParams(kCharacterAnna)[6] < _currentGameSessionTicks) {
- getCharacterCurrentParams(kCharacterAnna)[6] = 0x7FFFFFFF;
- LABEL_10:
- send(kCharacterAnna, kCharacterAnna, 2, 0);
- getCharacterCurrentParams(kCharacterAnna)[5] = 0;
- getCharacterCurrentParams(kCharacterAnna)[6] = 0;
+
+ if (getCharacterCurrentParams(kCharacterAnna)[5]) {
+ bool skip = false; // Horrible way to unroll a goto...
+
+ if (!getCharacterCurrentParams(kCharacterAnna)[6]) {
+ getCharacterCurrentParams(kCharacterAnna)[6] = _currentGameSessionTicks + 75;
+ if (_currentGameSessionTicks == -75) {
+ skip = true;
+ send(kCharacterAnna, kCharacterAnna, 2, 0);
+ getCharacterCurrentParams(kCharacterAnna)[5] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[6] = 0;
+ }
+ }
+
+ if (!skip && getCharacterCurrentParams(kCharacterAnna)[6] < _currentGameSessionTicks) {
+ getCharacterCurrentParams(kCharacterAnna)[6] = 0x7FFFFFFF;
+ send(kCharacterAnna, kCharacterAnna, 2, 0);
+ getCharacterCurrentParams(kCharacterAnna)[5] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[6] = 0;
+ }
}
- LABEL_11:
+
if (getCharacterCurrentParams(kCharacterAnna)[3]) {
if (getCharacterCurrentParams(kCharacterAnna)[7] || (getCharacterCurrentParams(kCharacterAnna)[7] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
if (getCharacterCurrentParams(kCharacterAnna)[7] >= _currentGameSessionTicks)
- return;
+ break;
+
getCharacterCurrentParams(kCharacterAnna)[7] = 0x7FFFFFFF;
}
+
getCharacterCurrentParams(kCharacterAnna)[3] = 0;
getCharacterCurrentParams(kCharacterAnna)[4] = 1;
setDoor(37, kCharacterAnna, 1, 0, 9);
setDoor(53, kCharacterAnna, 1, 0, 9);
- --getCharacterCurrentParams(kCharacterAnna)[0];
+ getCharacterCurrentParams(kCharacterAnna)[0]--;
send(kCharacterAnna, kCharacterAnna, 2, 0);
getCharacterCurrentParams(kCharacterAnna)[7] = 0;
} else {
getCharacterCurrentParams(kCharacterAnna)[7] = 0;
}
- return;
+
+ break;
case 2:
if (getCharacterCurrentParams(kCharacterAnna)[1]) {
getCharacter(kCharacterAnna).currentCall--;
@@ -431,7 +485,8 @@ void LogicManager::HAND_Anna_PracticeMusic(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterAnna)[0]++;
switch (getCharacterCurrentParams(kCharacterAnna)[0]) {
case 1:
- goto LABEL_21;
+ playDialog(kCharacterAnna, "ANN2135A", -1, 0);
+ break;
case 2:
playDialog(kCharacterAnna, "ANN2135B", -1, 0);
break;
@@ -468,14 +523,16 @@ void LogicManager::HAND_Anna_PracticeMusic(HAND_PARAMS) {
fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
break;
default:
- return;
+ break;
}
}
- return;
+
+ break;
case 8:
if (getCharacterCurrentParams(kCharacterAnna)[3]) {
setDoor(37, kCharacterAnna, 1, 0, 9);
setDoor(53, kCharacterAnna, 1, 0, 9);
+
if (msg->param.intParam == 53) {
playDialog(kCharacterCath, getCathWCDialog(), -1, 0);
} else if (cathHasItem(kItemPassengerList)) {
@@ -488,7 +545,6 @@ void LogicManager::HAND_Anna_PracticeMusic(HAND_PARAMS) {
playDialog(kCharacterCath, "CAT1506", -1, 0);
}
}
-
} else {
playDialog(kCharacterCath, getCathSorryDialog(), -1, 0);
}
@@ -502,25 +558,29 @@ void LogicManager::HAND_Anna_PracticeMusic(HAND_PARAMS) {
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB012", 0, 0, 0);
}
- return;
+
+ break;
case 9:
endDialog(kCharacterAnna);
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB013", 0, 0, 0);
- return;
+ break;
case 12:
getCharacterCurrentParams(kCharacterAnna)[0] = 1;
setDoor(37, kCharacterAnna, 1, 10, 9);
setDoor(53, kCharacterAnna, 1, 10, 9);
setDoor(45, kCharacterCath, 0, 255, 255);
+
if (checkCathDir(kCarRedSleeping, 78))
bumpCath(kCarRedSleeping, 49, 255);
+
startCycOtis(kCharacterAnna, "418C");
+
if (whoRunningDialog(kCharacterAnna))
fadeDialog(kCharacterAnna);
- LABEL_21:
+
playDialog(kCharacterAnna, "ANN2135A", -1, 0);
- return;
+ break;
case 17:
if (getCharacterCurrentParams(kCharacterAnna)[4] || getCharacterCurrentParams(kCharacterAnna)[3]) {
setDoor(37, kCharacterAnna, 1, 10, 9);
@@ -537,7 +597,7 @@ void LogicManager::HAND_Anna_PracticeMusic(HAND_PARAMS) {
}
}
- return;
+ break;
case 18:
switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
case 1:
@@ -550,13 +610,16 @@ void LogicManager::HAND_Anna_PracticeMusic(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterAnna)[3] = 1;
break;
case 3:
- if (whoRunningDialog(kCharacterMax))
- goto LABEL_61;
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
- AnnaCall(&LogicManager::CONS_Anna_DoDialog, "MAX1120", 0, 0, 0);
+ if (whoRunningDialog(kCharacterMax)) {
+ getCharacterCurrentParams(kCharacterAnna)[0]--;
+ getCharacterCurrentParams(kCharacterAnna)[5] = 1;
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "MAX1120", 0, 0, 0);
+ }
+
break;
case 4:
- LABEL_61:
getCharacterCurrentParams(kCharacterAnna)[0]--;
getCharacterCurrentParams(kCharacterAnna)[5] = 1;
break;
@@ -564,11 +627,11 @@ void LogicManager::HAND_Anna_PracticeMusic(HAND_PARAMS) {
startCycOtis(kCharacterAnna, "418A");
break;
default:
- return;
+ break;
}
- return;
+ break;
default:
- return;
+ break;
}
}
@@ -588,13 +651,18 @@ void LogicManager::CONS_Anna_DoComplexSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_DoComplexSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
getCharacter(kCharacterAnna).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterAnna, (char *)&getCharacterCurrentParams(kCharacterAnna)[0]);
startSeqOtis(getCharacterCurrentParams(kCharacterAnna)[6], (char *)&getCharacterCurrentParams(kCharacterAnna)[3]);
+ break;
+ default:
+ break;
}
}
@@ -611,12 +679,13 @@ void LogicManager::CONS_Anna_DoWaitReal(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_DoWaitReal(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterAnna)[1] ||
(getCharacterCurrentParams(kCharacterAnna)[1] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterAnna)[0],
_currentGameSessionTicks + getCharacterCurrentParams(kCharacterAnna)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterAnna)[1] >= _currentGameSessionTicks)
- return;
+ break;
getCharacterCurrentParams(kCharacterAnna)[1] = 0x7FFFFFFF;
}
@@ -624,6 +693,9 @@ void LogicManager::HAND_Anna_DoWaitReal(HAND_PARAMS) {
getCharacter(kCharacterAnna).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -642,129 +714,135 @@ void LogicManager::CONS_Anna_CompLogic(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_CompLogic(HAND_PARAMS) {
- if (msg->action <= 18) {
- switch (msg->action) {
- case 0:
- if (getCharacterCurrentParams(kCharacterAnna)[0] < _gameTime && !getCharacterCurrentParams(kCharacterAnna)[6]) {
- getCharacterCurrentParams(kCharacterAnna)[6] = 1;
- setDoor(37, kCharacterCath, 1, 10, 9);
- setDoor(53, kCharacterCath, 1, 10, 9);
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAnna)[0] < _gameTime && !getCharacterCurrentParams(kCharacterAnna)[6]) {
+ getCharacterCurrentParams(kCharacterAnna)[6] = 1;
+ setDoor(37, kCharacterCath, 1, 10, 9);
+ setDoor(53, kCharacterCath, 1, 10, 9);
- getCharacter(kCharacterAnna).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
- fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
- return;
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ break;
+ }
+
+ if (getCharacterCurrentParams(kCharacterAnna)[4]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[7] || (getCharacterCurrentParams(kCharacterAnna)[7] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[7] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterAnna)[7] = 0x7FFFFFFF;
}
- if (getCharacterCurrentParams(kCharacterAnna)[4]) {
- if (getCharacterCurrentParams(kCharacterAnna)[7] || (getCharacterCurrentParams(kCharacterAnna)[7] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterAnna)[7] >= _currentGameSessionTicks)
- return;
- getCharacterCurrentParams(kCharacterAnna)[7] = 0x7FFFFFFF;
- }
- getCharacterCurrentParams(kCharacterAnna)[4] = 0;
- getCharacterCurrentParams(kCharacterAnna)[5] = 1;
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[5] = 1;
+
+ setDoor(37, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
+ setDoor(53, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
+ getCharacterCurrentParams(kCharacterAnna)[7] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterAnna)[7] = 0;
+ }
+
+ break;
+ case 8:
+ case 9:
+ if (msg->action == 9 && inComp(kCharacterMax, kCarRedSleeping, 4070)) {
+ setDoor(37, kCharacterAnna, 1, 0, 0);
+ setDoor(53, kCharacterAnna, 1, 0, 0);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB013", 0, 0, 0);
+ } else {
+ if (getCharacterCurrentParams(kCharacterAnna)[4]) {
setDoor(37, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
setDoor(53, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
- getCharacterCurrentParams(kCharacterAnna)[7] = 0;
- } else {
- getCharacterCurrentParams(kCharacterAnna)[7] = 0;
- }
- break;
- case 8:
- goto LABEL_26;
- case 9:
- if (inComp(kCharacterMax, kCarRedSleeping, 4070)) {
- setDoor(37, kCharacterAnna, 1, 0, 0);
- setDoor(53, kCharacterAnna, 1, 0, 0);
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
- AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB013", 0, 0, 0);
- } else {
- LABEL_26:
- if (getCharacterCurrentParams(kCharacterAnna)[4]) {
- setDoor(37, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
- setDoor(53, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
-
- if (msg->param.intParam == 53) {
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 6;
- AnnaCall(&LogicManager::CONS_Anna_DoDialog, getCathWCDialog(), 0, 0, 0);
- } else if (cathHasItem(kItemPassengerList)) {
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 7;
- if (rnd(2)) {
- AnnaCall(&LogicManager::CONS_Anna_DoDialog, getCathSorryDialog(), 0, 0, 0);
+
+ if (msg->param.intParam == 53) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 6;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, getCathWCDialog(), 0, 0, 0);
+ } else if (cathHasItem(kItemPassengerList)) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 7;
+ if (rnd(2)) {
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, getCathSorryDialog(), 0, 0, 0);
+ } else {
+ if (rnd(2) == 0) {
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "CAT1506A", 0, 0, 0);
} else {
- if (rnd(2) == 0) {
- AnnaCall(&LogicManager::CONS_Anna_DoDialog, "CAT1506A", 0, 0, 0);
- } else {
- AnnaCall(&LogicManager::CONS_Anna_DoDialog, "CAT1506", 0, 0, 0);
- }
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "CAT1506", 0, 0, 0);
}
- } else {
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 8;
- AnnaCall(&LogicManager::CONS_Anna_DoDialog, getCathSorryDialog(), 0, 0, 0);
}
} else {
- setDoor(37, kCharacterAnna, 1, 0, 0);
- setDoor(53, kCharacterAnna, 1, 0, 0);
- if (msg->action == 8) {
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
- AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB012", 0, 0, 0);
- } else {
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
- AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB013", 0, 0, 0);
- }
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 8;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, getCathSorryDialog(), 0, 0, 0);
+ }
+ } else {
+ setDoor(37, kCharacterAnna, 1, 0, 0);
+ setDoor(53, kCharacterAnna, 1, 0, 0);
+ if (msg->action == 8) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB012", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB013", 0, 0, 0);
}
}
- return;
- case 12:
+ }
+
+ break;
+ case 12:
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ startCycOtis(kCharacterAnna, (char *)&getCharacterCurrentParams(kCharacterAnna)[1]);
+ break;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterAnna)[5] || getCharacterCurrentParams(kCharacterAnna)[4]) {
setDoor(37, kCharacterAnna, 1, 10, 9);
setDoor(53, kCharacterAnna, 1, 10, 9);
- startCycOtis(kCharacterAnna, (char *)&getCharacterCurrentParams(kCharacterAnna)[1]);
- return;
- case 17:
- if (getCharacterCurrentParams(kCharacterAnna)[5] || getCharacterCurrentParams(kCharacterAnna)[4]) {
+ getCharacterCurrentParams(kCharacterAnna)[5] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0;
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ if (whoRunningDialog(kCharacterMax)) {
setDoor(37, kCharacterAnna, 1, 10, 9);
setDoor(53, kCharacterAnna, 1, 10, 9);
- getCharacterCurrentParams(kCharacterAnna)[5] = 0;
- getCharacterCurrentParams(kCharacterAnna)[4] = 0;
- }
- return;
- case 18:
- switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
- case 1:
- if (whoRunningDialog(kCharacterMax))
- goto LABEL_25;
+ } else {
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
AnnaCall(&LogicManager::CONS_Anna_DoDialog, "MAX1120", 0, 0, 0);
- break;
- case 2:
- LABEL_25:
- setDoor(37, kCharacterAnna, 1, 10, 9);
- setDoor(53, kCharacterAnna, 1, 10, 9);
- break;
- case 3:
- case 4:
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
- AnnaCall(&LogicManager::CONS_Anna_DoDialog, "ANN1016", 0, 0, 0);
- break;
- case 5:
- setDoor(37, kCharacterAnna, 1, 14, 0);
- setDoor(53, kCharacterAnna, 1, 14, 0);
- getCharacterCurrentParams(kCharacterAnna)[4] = 1;
- break;
- case 6:
- case 7:
- case 8:
- getCharacterCurrentParams(kCharacterAnna)[4] = 0;
- getCharacterCurrentParams(kCharacterAnna)[5] = 1;
- break;
- default:
- return;
}
- return;
+
+ break;
+ case 2:
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ break;
+ case 3:
+ case 4:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "ANN1016", 0, 0, 0);
+ break;
+ case 5:
+ setDoor(37, kCharacterAnna, 1, 14, 0);
+ setDoor(53, kCharacterAnna, 1, 14, 0);
+ getCharacterCurrentParams(kCharacterAnna)[4] = 1;
+ break;
+ case 6:
+ case 7:
+ case 8:
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[5] = 1;
+ break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -779,21 +857,27 @@ void LogicManager::CONS_Anna_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_Birth(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- autoMessage(kCharacterAnna, 291662081, 0);
- autoMessage(kCharacterAnna, 238936000, 1);
- setDoor(37, kCharacterCath, 1, 10, 9);
- setDoor(53, kCharacterCath, 1, 10, 9);
- setDoor(45, kCharacterCath, 1, 255, 255);
- getCharacter(kCharacterAnna).characterPosition.position = 8200;
- getCharacter(kCharacterAnna).characterPosition.location = 1;
- getCharacter(kCharacterAnna).characterPosition.car = kCarGreenSleeping;
- getCharacter(kCharacterAnna).clothes = 0;
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterAnna)[0]) {
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ CONS_Anna_FleeTyler(0, 0, 0, 0);
}
- } else if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterAnna)[0]) {
- getCharacterCurrentParams(kCharacterAnna)[0] = 1;
- CONS_Anna_FleeTyler(0, 0, 0, 0);
+
+ break;
+ case 12:
+ autoMessage(kCharacterAnna, 291662081, 0);
+ autoMessage(kCharacterAnna, 238936000, 1);
+ setDoor(37, kCharacterCath, 1, 10, 9);
+ setDoor(53, kCharacterCath, 1, 10, 9);
+ setDoor(45, kCharacterCath, 1, 255, 255);
+ getCharacter(kCharacterAnna).characterPosition.position = 8200;
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ getCharacter(kCharacterAnna).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterAnna).clothes = 0;
+ break;
+ default:
+ break;
}
}
@@ -827,7 +911,7 @@ void LogicManager::HAND_Anna_DoWalkP1(HAND_PARAMS) {
fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
}
- return;
+ break;
case 1:
if (msg->param.intParam == 8) {
getCharacter(kCharacterAnna).inventoryItem &= ~8;
@@ -839,7 +923,7 @@ void LogicManager::HAND_Anna_DoWalkP1(HAND_PARAMS) {
AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventGotALight, 0, 0);
}
- return;
+ break;
case 5:
if (_gameEvents[kEventAugustPresentAnna] || _gameEvents[kEventAugustPresentAnnaFirstIntroduction] || _gameProgress[kProgressChapter] >= 2) {
playDialog(kCharacterCath, "CAT1001", -1, 0);
@@ -847,10 +931,10 @@ void LogicManager::HAND_Anna_DoWalkP1(HAND_PARAMS) {
playCathExcuseMe();
}
- return;
+ break;
case 6:
playChrExcuseMe(kCharacterAnna, kCharacterCath, 0);
- return;
+ break;
case 12:
getCharacter(kCharacterAnna).inventoryItem = 0;
if (_gameProgress[kProgressJacket] == 2 && !_gameEvents[kEventGotALight] && !_gameEvents[kEventGotALightD] && !_gameEvents[kEventAugustPresentAnna] && !_gameEvents[kEventAugustPresentAnnaFirstIntroduction]) {
@@ -866,7 +950,8 @@ void LogicManager::HAND_Anna_DoWalkP1(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
}
- return;
+
+ break;
case 18:
if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
if (_gameEvents[kEventAnnaGiveScarf] || _gameEvents[kEventAnnaGiveScarfDiner] || _gameEvents[kEventAnnaGiveScarfSalon] || _gameEvents[kEventAnnaGiveScarfMonogram] || _gameEvents[kEventAnnaGiveScarfDinerMonogram] || _gameEvents[kEventAnnaGiveScarfSalonMonogram]) {
@@ -876,14 +961,13 @@ void LogicManager::HAND_Anna_DoWalkP1(HAND_PARAMS) {
} else {
playNIS(kEventAnnaGiveScarf);
}
+
if (getCharacter(kCharacterAnna).direction != 1) {
- LABEL_55:
bumpCathRx(getCharacter(kCharacterAnna).characterPosition.car, getCharacter(kCharacterAnna).characterPosition.position + 750);
- return;
}
} else {
if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] != 2)
- return;
+ break;
if (getCharacter(kCharacterAnna).direction == 1) {
playNIS(kEventGotALightD);
@@ -895,15 +979,18 @@ void LogicManager::HAND_Anna_DoWalkP1(HAND_PARAMS) {
int32 tmp = getCharacterCurrentParams(kCharacterAnna)[2] & 0xFFFFFF7F;
getCharacterCurrentParams(kCharacterAnna)[2] = tmp;
- if (_gameProgress[1] == 2 && !_gameEvents[204] && !_gameEvents[205] && !_gameEvents[206])
+ if (_gameProgress[kProgressJacket] == 2 && !_gameEvents[kEventAnnaGiveScarfAsk] && !_gameEvents[kEventAnnaGiveScarfDinerAsk] && !_gameEvents[kEventAnnaGiveScarfSalonAsk])
getCharacterCurrentParams(kCharacterAnna)[2] = tmp | 8;
- if (getCharacter(kCharacterAnna).direction != 1)
- goto LABEL_55;
+
+ if (getCharacter(kCharacterAnna).direction != 1) {
+ bumpCathRx(getCharacter(kCharacterAnna).characterPosition.car, getCharacter(kCharacterAnna).characterPosition.position + 750);
+ }
}
+
bumpCathFx(getCharacter(kCharacterAnna).characterPosition.car, getCharacter(kCharacterAnna).characterPosition.position - 750);
- return;
+ break;
default:
- return;
+ break;
}
}
@@ -920,108 +1007,133 @@ void LogicManager::CONS_Anna_DiningLogic(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_DiningLogic(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action <= 168046720) {
- switch (msg->action) {
- case 168046720:
- getCharacter(kCharacterAnna).inventoryItem = 0;
- getCharacterCurrentParams(kCharacterAnna)[3] = 1;
- break;
- case 17:
- getCharacterCurrentParams(kCharacterAnna)[2] = checkCathDir(kCarRestaurant, 62);
- break;
- case 18:
- if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
- if (_gameEvents[kEventAnnaGiveScarf] || _gameEvents[kEventAnnaGiveScarfDiner] || _gameEvents[kEventAnnaGiveScarfSalon] || _gameEvents[kEventAnnaGiveScarfMonogram] || _gameEvents[kEventAnnaGiveScarfDinerMonogram] || _gameEvents[kEventAnnaGiveScarfSalonMonogram]) {
- playNIS(kEventAnnaGiveScarfDinerAsk);
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAnna)[0] && _gameTime > getCharacterCurrentParams(kCharacterAnna)[0] && rcClear()) {
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ break;
+ }
+
+ if (getCharacterCurrentParams(kCharacterAnna)[4] && !getCharacterCurrentParams(kCharacterAnna)[3]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[5] || (getCharacterCurrentParams(kCharacterAnna)[5] = _gameTime + 900, _gameTime != -900)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[5] >= _gameTime) {
+ if (getCharacterCurrentParams(kCharacterAnna)[2]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[6] || (getCharacterCurrentParams(kCharacterAnna)[6] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[6] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterAnna)[6] = 0x7FFFFFFF;
+ }
+
+ bumpCath(kCarRestaurant, 61, 255);
} else {
- if (_gameEvents[kEventAugustPresentAnna] || _gameEvents[kEventAugustPresentAnnaFirstIntroduction])
- playNIS(kEventAnnaGiveScarfDinerMonogram);
- else
- playNIS(kEventAnnaGiveScarfDiner);
- getCharacterCurrentParams(kCharacterAnna)[4] = 1;
+ getCharacterCurrentParams(kCharacterAnna)[6] = 0;
}
- int32 tmp = getCharacterCurrentParams(kCharacterAnna)[1] & 0xFFFFFFF7;
- getCharacterCurrentParams(kCharacterAnna)[1] = tmp;
- getCharacter(kCharacterAnna).inventoryItem = tmp;
- bumpCath(kCarRestaurant, 61, 255);
- } else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
- playNIS(kEventDinerMindJoin);
- int32 tmp = getCharacterCurrentParams(kCharacterAnna)[1] & 0xFFFFFF7F;
- getCharacterCurrentParams(kCharacterAnna)[1] = tmp;
- if (_gameProgress[kProgressJacket] == 2 && !_gameEvents[kEventAnnaGiveScarfAsk] && !_gameEvents[kEventAnnaGiveScarfDinerAsk] && !_gameEvents[kEventAnnaGiveScarfSalonAsk]) {
- getCharacterCurrentParams(kCharacterAnna)[1] = tmp | 8;
- }
- getCharacter(kCharacterAnna).inventoryItem = getCharacterCurrentParams(kCharacterAnna)[1];
- bumpCath(kCarRestaurant, 61, 255);
+
+ break;
}
- break;
+
+ getCharacterCurrentParams(kCharacterAnna)[5] = 0x7FFFFFFF;
}
- return;
- }
- if (msg->action > 170016384) {
- if (msg->action != 259136835 && msg->action != 268773672)
- return;
- } else if (msg->action != 170016384) {
- if (msg->action == 168627977) {
- getCharacter(kCharacterAnna).inventoryItem = getCharacterCurrentParams(kCharacterAnna)[1];
- getCharacterCurrentParams(kCharacterAnna)[3] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[1] |= 8;
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[5] = 0;
+ }
+
+ if (getCharacterCurrentParams(kCharacterAnna)[2]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[6] || (getCharacterCurrentParams(kCharacterAnna)[6] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[6] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterAnna)[6] = 0x7FFFFFFF;
}
- return;
+
+ bumpCath(kCarRestaurant, 61, 255);
+ } else {
+ getCharacterCurrentParams(kCharacterAnna)[6] = 0;
}
- LABEL_77:
- getCharacter(kCharacterAnna).inventoryItem = 0;
- getCharacter(kCharacterAnna).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
- fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
- return;
- }
- if (msg->action == 12) {
+ break;
+ case 1:
+ if (msg->param.intParam == 8) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaGiveScarf, 0, 0);
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventDinerMindJoin, 0, 0);
+ }
+
+ break;
+ case 12:
if (_gameProgress[kProgressJacket] == 2 && !_gameEvents[kEventDinerMindJoin] && !_gameEvents[kEventAugustPresentAnna] && !_gameEvents[kEventAugustPresentAnnaFirstIntroduction]) {
getCharacterCurrentParams(kCharacterAnna)[1] |= 0x80;
}
+
if (_gameProgress[kProgressJacket] == 2 && !getCharacterCurrentParams(kCharacterAnna)[1] && !_gameEvents[kEventAnnaGiveScarfAsk] && !_gameEvents[kEventAnnaGiveScarfDinerAsk] && !_gameEvents[kEventAnnaGiveScarfSalonAsk]) {
getCharacterCurrentParams(kCharacterAnna)[1] = 8;
}
+
getCharacter(kCharacterAnna).inventoryItem = getCharacterCurrentParams(kCharacterAnna)[1];
- return;
- }
- if (msg->action) {
- if (msg->action == 1) {
- if (msg->param.intParam == 8) {
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
- AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaGiveScarf, 0, 0);
+ break;
+ case 17:
+ getCharacterCurrentParams(kCharacterAnna)[2] = checkCathDir(kCarRestaurant, 62);
+ break;
+ case 18:
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ if (_gameEvents[kEventAnnaGiveScarf] || _gameEvents[kEventAnnaGiveScarfDiner] || _gameEvents[kEventAnnaGiveScarfSalon] || _gameEvents[kEventAnnaGiveScarfMonogram] || _gameEvents[kEventAnnaGiveScarfDinerMonogram] || _gameEvents[kEventAnnaGiveScarfSalonMonogram]) {
+ playNIS(kEventAnnaGiveScarfDinerAsk);
} else {
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
- AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventDinerMindJoin, 0, 0);
+ if (_gameEvents[kEventAugustPresentAnna] || _gameEvents[kEventAugustPresentAnnaFirstIntroduction])
+ playNIS(kEventAnnaGiveScarfDinerMonogram);
+ else
+ playNIS(kEventAnnaGiveScarfDiner);
+
+ getCharacterCurrentParams(kCharacterAnna)[4] = 1;
+ }
+
+ int32 tmp = getCharacterCurrentParams(kCharacterAnna)[1] & 0xFFFFFFF7;
+ getCharacterCurrentParams(kCharacterAnna)[1] = tmp;
+ getCharacter(kCharacterAnna).inventoryItem = tmp;
+ bumpCath(kCarRestaurant, 61, 255);
+ } else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
+ playNIS(kEventDinerMindJoin);
+ int32 tmp = getCharacterCurrentParams(kCharacterAnna)[1] & 0xFFFFFF7F;
+ getCharacterCurrentParams(kCharacterAnna)[1] = tmp;
+
+ if (_gameProgress[kProgressJacket] == 2 && !_gameEvents[kEventAnnaGiveScarfAsk] && !_gameEvents[kEventAnnaGiveScarfDinerAsk] && !_gameEvents[kEventAnnaGiveScarfSalonAsk]) {
+ getCharacterCurrentParams(kCharacterAnna)[1] = tmp | 8;
}
+
+ getCharacter(kCharacterAnna).inventoryItem = getCharacterCurrentParams(kCharacterAnna)[1];
+ bumpCath(kCarRestaurant, 61, 255);
}
- return;
- }
- if (getCharacterCurrentParams(kCharacterAnna)[0] && _gameTime > getCharacterCurrentParams(kCharacterAnna)[0] && rcClear())
- goto LABEL_77;
- if (getCharacterCurrentParams(kCharacterAnna)[4] && !getCharacterCurrentParams(kCharacterAnna)[3]) {
- if (getCharacterCurrentParams(kCharacterAnna)[5] || (getCharacterCurrentParams(kCharacterAnna)[5] = _gameTime + 900, _gameTime != -900)) {
- if (getCharacterCurrentParams(kCharacterAnna)[5] >= _gameTime)
- goto LABEL_28;
- getCharacterCurrentParams(kCharacterAnna)[5] = 0x7FFFFFFF;
- }
- getCharacterCurrentParams(kCharacterAnna)[1] |= 8;
- getCharacterCurrentParams(kCharacterAnna)[4] = 0;
- getCharacterCurrentParams(kCharacterAnna)[5] = 0;
- }
-LABEL_28:
- if (getCharacterCurrentParams(kCharacterAnna)[2]) {
- if (getCharacterCurrentParams(kCharacterAnna)[6] || (getCharacterCurrentParams(kCharacterAnna)[6] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
- if (getCharacterCurrentParams(kCharacterAnna)[6] >= _currentGameSessionTicks)
- return;
- getCharacterCurrentParams(kCharacterAnna)[6] = 0x7FFFFFFF;
- }
- bumpCath(kCarRestaurant, 61, 255);
- } else {
- getCharacterCurrentParams(kCharacterAnna)[6] = 0;
+
+ break;
+ case 168046720:
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+ getCharacterCurrentParams(kCharacterAnna)[3] = 1;
+ break;
+ case 168627977:
+ getCharacter(kCharacterAnna).inventoryItem = getCharacterCurrentParams(kCharacterAnna)[1];
+ getCharacterCurrentParams(kCharacterAnna)[3] = 0;
+ break;
+ case 170016384:
+ case 259136835:
+ case 268773672:
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+
+ getCharacter(kCharacterAnna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
+ fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
+ break;
+ default:
+ break;
}
+ return;
}
void LogicManager::CONS_Anna_FleeTyler(CONS_PARAMS) {
@@ -1035,10 +1147,12 @@ void LogicManager::CONS_Anna_FleeTyler(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_FleeTyler(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "618Ca", 1, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
case 1:
getCharacter(kCharacterAnna).characterPosition.location = 0;
@@ -1056,7 +1170,13 @@ void LogicManager::HAND_Anna_FleeTyler(HAND_PARAMS) {
getCharacter(kCharacterAnna).characterPosition.location = 1;
CONS_Anna_WaitDinner(0, 0, 0, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1071,10 +1191,12 @@ void LogicManager::CONS_Anna_WaitDinner(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_WaitDinner(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_CompLogic, 1093500, "NONE", 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "618Bf", 37, 0, 0);
@@ -1083,6 +1205,10 @@ void LogicManager::HAND_Anna_WaitDinner(HAND_PARAMS) {
send(kCharacterAnna, kCharacterMax, 71277948, 0);
CONS_Anna_GoDinner(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -1097,10 +1223,12 @@ void LogicManager::CONS_Anna_GoDinner(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_GoDinner(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_DoWalkP1, 5, 850, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
case 1:
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
@@ -1114,8 +1242,10 @@ void LogicManager::HAND_Anna_GoDinner(HAND_PARAMS) {
break;
case 3:
startSeqOtis(kCharacterAnna, "001B");
+
if (inSalon(kCharacterCath))
advanceFrame(kCharacterAnna);
+
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
AnnaCall(&LogicManager::CONS_Anna_FinishSeqOtis, 0, 0, 0, 0);
break;
@@ -1123,8 +1253,12 @@ void LogicManager::HAND_Anna_GoDinner(HAND_PARAMS) {
CONS_Anna_WaitHW(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1139,12 +1273,17 @@ void LogicManager::CONS_Anna_WaitHW(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_WaitHW(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
startCycOtis(kCharacterAnna, "001A");
send(kCharacterAnna, kCharacterHeadWait, 223262556, 0);
- } else if (msg->action == 157370960) {
+ break;
+ case 157370960:
getCharacter(kCharacterAnna).characterPosition.location = 1;
CONS_Anna_WaitingDinner(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1159,13 +1298,15 @@ void LogicManager::CONS_Anna_WaitingDinner(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_WaitingDinner(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
startCycOtis(kCharacterAnna, "001D");
send(kCharacterAnna, kCharacterWaiter1, 270410280, 0);
send(kCharacterAnna, kCharacterTableA, 136455232, 0);
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_DiningLogic, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
case 1:
startCycOtis(kCharacterAnna, "001E");
@@ -1180,7 +1321,13 @@ void LogicManager::HAND_Anna_WaitingDinner(HAND_PARAMS) {
send(kCharacterAnna, kCharacterWaiter1, 203859488, 0);
CONS_Anna_WaitingDinner2(0, 0, 0, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1195,11 +1342,13 @@ void LogicManager::CONS_Anna_WaitingDinner2(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_WaitingDinner2(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
startCycOtis(kCharacterAnna, "001G");
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_DiningLogic, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
startCycOtis(kCharacterAnna, "001H");
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
@@ -1208,6 +1357,10 @@ void LogicManager::HAND_Anna_WaitingDinner2(HAND_PARAMS) {
send(kCharacterAnna, kCharacterWaiter1, 136702400, 0);
CONS_Anna_EatingDinner(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -1222,26 +1375,33 @@ void LogicManager::CONS_Anna_EatingDinner(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_EatingDinner(HAND_PARAMS) {
- if (msg->action > 18) {
- if (msg->action == 122358304) {
- startCycOtis(kCharacterAnna, "BLANK");
- } else if (msg->action == 201437056) {
- startCycOtis(kCharacterAnna, "001J");
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
- AnnaCall(&LogicManager::CONS_Anna_DiningLogic, 1138500, 0, 0, 0);
- }
- } else if (msg->action == 18) {
+ switch (msg->action) {
+ case 12:
+ startCycOtis(kCharacterAnna, "001J");
+ _gameProgress[kProgressField28] = 1;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DiningLogic, 0, 0, 0, 0);
+
+ break;
+ case 18:
if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
AnnaCall(&LogicManager::CONS_Anna_WaitRCClear, 0, 0, 0, 0);
} else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 3) {
CONS_Anna_LeaveDinner(0, 0, 0, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 122358304:
+ startCycOtis(kCharacterAnna, "BLANK");
+ break;
+ case 201437056:
startCycOtis(kCharacterAnna, "001J");
- _gameProgress[kProgressField28] = 1;
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
- AnnaCall(&LogicManager::CONS_Anna_DiningLogic, 0, 0, 0, 0);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DiningLogic, 1138500, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1256,17 +1416,20 @@ void LogicManager::CONS_Anna_LeaveDinner(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_LeaveDinner(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAnna).characterPosition.location = 0;
blockView(kCharacterAnna, kCarRestaurant, 62);
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_DoJoinedSeqOtis, "001L", 33, 103798704, "001M");
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
case 1:
releaseView(kCharacterAnna, kCarRestaurant, 62);
send(kCharacterAnna, kCharacterWaiter1, 237485916, 0);
startSeqOtis(kCharacterAnna, "801DS");
+
if (inDiningRoom(kCharacterCath))
advanceFrame(kCharacterAnna);
@@ -1288,8 +1451,12 @@ void LogicManager::HAND_Anna_LeaveDinner(HAND_PARAMS) {
CONS_Anna_FreshenUp(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1304,11 +1471,13 @@ void LogicManager::CONS_Anna_FreshenUp(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_FreshenUp(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
send(kCharacterAnna, kCharacterMax, 101687594, 0);
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_CompLogic, 1156500, "NONE", 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1 ||
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
if (_gameProgress[kProgressField14] == 29) {
@@ -1324,6 +1493,10 @@ void LogicManager::HAND_Anna_FreshenUp(HAND_PARAMS) {
send(kCharacterAnna, kCharacterMax, 71277948, 0);
CONS_Anna_GoSalon(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -1338,10 +1511,12 @@ void LogicManager::CONS_Anna_GoSalon(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_GoSalon(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_DoWalkP1, 5, 850, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
case 1:
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
@@ -1358,8 +1533,14 @@ void LogicManager::HAND_Anna_GoSalon(HAND_PARAMS) {
getCharacter(kCharacterAnna).characterPosition.location = 1;
CONS_Anna_WaitAugust(0, 0, 0, 0);
break;
+ default:
+ break;
}
- }
+
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Anna_WaitAugust(CONS_PARAMS) {
@@ -1373,94 +1554,120 @@ void LogicManager::CONS_Anna_WaitAugust(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_WaitAugust(HAND_PARAMS) {
- if (msg->action > 12) {
- switch (msg->action) {
- case 17:
- getCharacterCurrentParams(kCharacterAnna)[0] = checkCathDir(kCarRestaurant, 56);
- break;
- case 18:
- if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
- if (_gameEvents[kEventAnnaGiveScarf] ||
- _gameEvents[kEventAnnaGiveScarfDiner] ||
- _gameEvents[kEventAnnaGiveScarfSalon] ||
- _gameEvents[kEventAnnaGiveScarfMonogram] ||
- _gameEvents[kEventAnnaGiveScarfDinerMonogram] ||
- _gameEvents[kEventAnnaGiveScarfSalonMonogram]) {
- playNIS(kEventAnnaGiveScarfSalonAsk);
- } else {
- if (_gameEvents[kEventAugustPresentAnna] || _gameEvents[kEventAugustPresentAnnaFirstIntroduction])
- playNIS(kEventAnnaGiveScarfSalonMonogram);
- else
- playNIS(kEventAnnaGiveScarfSalon);
- getCharacterCurrentParams(kCharacterAnna)[1] = 1;
- }
- getCharacter(kCharacterAnna).inventoryItem &= ~8;
- bumpCath(kCarRestaurant, 51, 255);
- } else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
- if (_gameEvents[kEventAugustPresentAnna] || _gameEvents[kEventAugustPresentAnnaFirstIntroduction])
- playNIS(kEventAnnaConversationGoodNight);
- else
- playNIS(kEventAnnaIntroductionRejected);
-
- getCharacter(kCharacterAnna).inventoryItem &= ~0x80;
- if (_gameProgress[kProgressJacket] == 2 &&
- !_gameEvents[kEventAnnaGiveScarfAsk] &&
- !_gameEvents[kEventAnnaGiveScarfDinerAsk] &&
- !_gameEvents[kEventAnnaGiveScarfSalonAsk]) {
- getCharacter(kCharacterAnna).inventoryItem |= kItemScarf;
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAnna)[1]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[2] || (getCharacterCurrentParams(kCharacterAnna)[2] = _gameTime + 900, _gameTime != -900)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[2] >= _gameTime) {
+ if (getCharacterCurrentParams(kCharacterAnna)[0]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[3] || (getCharacterCurrentParams(kCharacterAnna)[3] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[3] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterAnna)[3] = 0x7FFFFFFF;
+ }
+
+ bumpCath(kCarRestaurant, 55, 255);
+ } else {
+ getCharacterCurrentParams(kCharacterAnna)[3] = 0;
+ }
+
+ break;
}
- bumpCath(kCarRestaurant, 51, 255);
+
+ getCharacterCurrentParams(kCharacterAnna)[2] = 0x7FFFFFFF;
}
- break;
- case 123712592:
- getCharacter(kCharacterAnna).inventoryItem = 0;
- CONS_Anna_FlirtAugust(0, 0, 0, 0);
- break;
+
+ getCharacter(kCharacterAnna).inventoryItem |= kItemScarf;
+ getCharacterCurrentParams(kCharacterAnna)[1] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[2] = 0;
}
- return;
- }
- if (msg->action == 12) {
+
+ if (getCharacterCurrentParams(kCharacterAnna)[0]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[3] || (getCharacterCurrentParams(kCharacterAnna)[3] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[3] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterAnna)[3] = 0x7FFFFFFF;
+ }
+
+ bumpCath(kCarRestaurant, 55, 255);
+ } else {
+ getCharacterCurrentParams(kCharacterAnna)[3] = 0;
+ }
+
+ break;
+ case 1:
+ if (msg->param.intParam == 8) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaGiveScarf, 0, 0);
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaIntroductionRejected, 0, 0);
+ }
+
+ break;
+ case 12:
getCharacter(kCharacterAnna).inventoryItem = 0;
- if (_gameProgress[kProgressJacket] == 2 && !_gameEvents[15] && !_gameEvents[14])
+
+ if (_gameProgress[kProgressJacket] == 2 && !_gameEvents[kEventAnnaConversationGoodNight] && !_gameEvents[kEventAnnaIntroductionRejected])
getCharacter(kCharacterAnna).inventoryItem = 0x80;
+
if (_gameProgress[kProgressJacket] == 2 && !getCharacter(kCharacterAnna).inventoryItem && !_gameEvents[kEventAnnaGiveScarfAsk] && !_gameEvents[kEventAnnaGiveScarfDinerAsk] && !_gameEvents[kEventAnnaGiveScarfSalonAsk]) {
getCharacter(kCharacterAnna).inventoryItem = 8;
}
+
startCycOtis(kCharacterAnna, "104B");
- return;
- }
- if (msg->action) {
- if (msg->action == 1) {
- if (msg->param.intParam == 8) {
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
- AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaGiveScarf, 0, 0);
+ break;
+ case 17:
+ getCharacterCurrentParams(kCharacterAnna)[0] = checkCathDir(kCarRestaurant, 56);
+ break;
+ case 18:
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ if (_gameEvents[kEventAnnaGiveScarf] ||
+ _gameEvents[kEventAnnaGiveScarfDiner] ||
+ _gameEvents[kEventAnnaGiveScarfSalon] ||
+ _gameEvents[kEventAnnaGiveScarfMonogram] ||
+ _gameEvents[kEventAnnaGiveScarfDinerMonogram] ||
+ _gameEvents[kEventAnnaGiveScarfSalonMonogram]) {
+ playNIS(kEventAnnaGiveScarfSalonAsk);
} else {
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
- AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaIntroductionRejected, 0, 0);
+ if (_gameEvents[kEventAugustPresentAnna] || _gameEvents[kEventAugustPresentAnnaFirstIntroduction]) {
+ playNIS(kEventAnnaGiveScarfSalonMonogram);
+ } else {
+ playNIS(kEventAnnaGiveScarfSalon);
+ }
+
+ getCharacterCurrentParams(kCharacterAnna)[1] = 1;
}
+
+ getCharacter(kCharacterAnna).inventoryItem &= ~8;
+ bumpCath(kCarRestaurant, 51, 255);
+ } else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
+ if (_gameEvents[kEventAugustPresentAnna] || _gameEvents[kEventAugustPresentAnnaFirstIntroduction]) {
+ playNIS(kEventAnnaConversationGoodNight);
+ } else {
+ playNIS(kEventAnnaIntroductionRejected);
+ }
+
+ getCharacter(kCharacterAnna).inventoryItem &= ~0x80;
+ if (_gameProgress[kProgressJacket] == 2 &&
+ !_gameEvents[kEventAnnaGiveScarfAsk] &&
+ !_gameEvents[kEventAnnaGiveScarfDinerAsk] &&
+ !_gameEvents[kEventAnnaGiveScarfSalonAsk]) {
+ getCharacter(kCharacterAnna).inventoryItem |= kItemScarf;
+ }
+
+ bumpCath(kCarRestaurant, 51, 255);
}
- return;
- }
- if (getCharacterCurrentParams(kCharacterAnna)[1]) {
- if (getCharacterCurrentParams(kCharacterAnna)[2] || (getCharacterCurrentParams(kCharacterAnna)[2] = _gameTime + 900, _gameTime != -900)) {
- if (getCharacterCurrentParams(kCharacterAnna)[2] >= _gameTime)
- goto LABEL_16;
- getCharacterCurrentParams(kCharacterAnna)[2] = 0x7FFFFFFF;
- }
- getCharacter(kCharacterAnna).inventoryItem |= kItemScarf;
- getCharacterCurrentParams(kCharacterAnna)[1] = 0;
- getCharacterCurrentParams(kCharacterAnna)[2] = 0;
- }
-LABEL_16:
- if (getCharacterCurrentParams(kCharacterAnna)[0]) {
- if (getCharacterCurrentParams(kCharacterAnna)[3] || (getCharacterCurrentParams(kCharacterAnna)[3] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
- if (getCharacterCurrentParams(kCharacterAnna)[3] >= _currentGameSessionTicks)
- return;
- getCharacterCurrentParams(kCharacterAnna)[3] = 0x7FFFFFFF;
- }
- bumpCath(kCarRestaurant, 55, 255);
- } else {
- getCharacterCurrentParams(kCharacterAnna)[3] = 0;
+
+ break;
+ case 123712592:
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+ CONS_Anna_FlirtAugust(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1477,62 +1684,76 @@ void LogicManager::CONS_Anna_FlirtAugust(CONS_PARAMS) {
void LogicManager::HAND_Anna_FlirtAugust(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (getCharacterCurrentParams(kCharacterAnna)[2] == 0x7FFFFFFF || !_gameTime)
- goto LABEL_12;
- if (_gameTime > 1188000)
- goto LABEL_10;
- if (!inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterAnna)[2]) {
- getCharacterCurrentParams(kCharacterAnna)[2] = _gameTime + 450;
- if (_gameTime == -450)
- goto LABEL_11;
- }
- if (getCharacterCurrentParams(kCharacterAnna)[2] < _gameTime) {
- LABEL_10:
- getCharacterCurrentParams(kCharacterAnna)[2] = 0x7FFFFFFF;
- LABEL_11:
- playDialog(kCharacterAnna, "AUG1004", -1, 0);
- }
- LABEL_12:
- if (!getCharacterCurrentParams(kCharacterAnna)[1] || getCharacterCurrentParams(kCharacterAnna)[3] == 0x7FFFFFFF || _gameTime <= 1179000)
- goto LABEL_22;
- if (_gameTime > 1192500)
- goto LABEL_20;
- if (!inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterAnna)[3]) {
- getCharacterCurrentParams(kCharacterAnna)[3] = _gameTime + 150;
- if (_gameTime == -150)
- goto LABEL_21;
- }
- if (getCharacterCurrentParams(kCharacterAnna)[3] < _gameTime) {
- LABEL_20:
- getCharacterCurrentParams(kCharacterAnna)[3] = 0x7FFFFFFF;
- LABEL_21:
- CONS_Anna_LeaveAugust(0, 0, 0, 0);
- return;
- }
- LABEL_22:
+ if (getCharacterCurrentParams(kCharacterAnna)[2] != 0x7FFFFFFF && _gameTime != 0) {
+ if (_gameTime <= 1188000) {
+ bool skip = false; // Horrible way to unroll a goto...
+
+ if (!inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterAnna)[2]) {
+ getCharacterCurrentParams(kCharacterAnna)[2] = _gameTime + 450;
+ if (_gameTime == -450) {
+ skip = true;
+ playDialog(kCharacterAnna, "AUG1004", -1, 0);
+ }
+ }
+
+ if (!skip && getCharacterCurrentParams(kCharacterAnna)[2] < _gameTime) {
+ getCharacterCurrentParams(kCharacterAnna)[2] = 0x7FFFFFFF;
+ playDialog(kCharacterAnna, "AUG1004", -1, 0);
+ }
+ } else {
+ getCharacterCurrentParams(kCharacterAnna)[2] = 0x7FFFFFFF;
+ playDialog(kCharacterAnna, "AUG1004", -1, 0);
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterAnna)[1] != 0 && getCharacterCurrentParams(kCharacterAnna)[3] != 0x7FFFFFFF && _gameTime > 1179000) {
+ if (_gameTime <= 1192500) {
+ if (!inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterAnna)[3]) {
+ getCharacterCurrentParams(kCharacterAnna)[3] = _gameTime + 150;
+ if (_gameTime == -150) {
+ CONS_Anna_LeaveAugust(0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterAnna)[3] < _gameTime) {
+ getCharacterCurrentParams(kCharacterAnna)[3] = 0x7FFFFFFF;
+ CONS_Anna_LeaveAugust(0, 0, 0, 0);
+ break;
+ }
+ } else {
+ getCharacterCurrentParams(kCharacterAnna)[3] = 0x7FFFFFFF;
+ CONS_Anna_LeaveAugust(0, 0, 0, 0);
+ break;
+ }
+ }
+
if (getCharacterCurrentParams(kCharacterAnna)[0]) {
if (getCharacterCurrentParams(kCharacterAnna)[4] || (getCharacterCurrentParams(kCharacterAnna)[4] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
if (getCharacterCurrentParams(kCharacterAnna)[4] >= _currentGameSessionTicks)
- return;
+ break;
+
getCharacterCurrentParams(kCharacterAnna)[4] = 0x7FFFFFFF;
}
+
bumpCath(kCarRestaurant, 55, 255);
} else {
getCharacterCurrentParams(kCharacterAnna)[4] = 0;
}
+
break;
case 2:
getCharacterCurrentParams(kCharacterAnna)[1] = 1;
- return;
+ break;
case 12:
send(kCharacterAnna, kCharacterAugust, 122358304, 0);
startCycOtis(kCharacterAnna, "106B");
- return;
+ break;
case 17:
getCharacterCurrentParams(kCharacterAnna)[0] = checkCathDir(kCarRestaurant, 56);
- return;
+ break;
default:
- return;
+ break;
}
}
@@ -1547,10 +1768,12 @@ void LogicManager::CONS_Anna_LeaveAugust(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_LeaveAugust(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_WaitRCClear, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
case 1:
getCharacter(kCharacterAnna).characterPosition.location = 0;
@@ -1569,7 +1792,13 @@ void LogicManager::HAND_Anna_LeaveAugust(HAND_PARAMS) {
send(kCharacterAnna, kCharacterAugust, 159332865, 0);
CONS_Anna_ReturnComp(0, 0, 0, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1584,10 +1813,12 @@ void LogicManager::CONS_Anna_ReturnComp(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_ReturnComp(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_DoWalkP1, 4, 4070, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "618Af", 37, 0, 0);
@@ -1597,6 +1828,10 @@ void LogicManager::HAND_Anna_ReturnComp(HAND_PARAMS) {
getCharacter(kCharacterAnna).characterPosition.location = 1;
CONS_Anna_ReadyForBed(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -1611,14 +1846,22 @@ void LogicManager::CONS_Anna_ReadyForBed(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_ReadyForBed(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
send(kCharacterAnna, kCharacterMax, 101687594, 0);
getCharacterCurrentParams(kCharacterAnna)[0] = _gameTime + 4500;
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_CompLogic, getCharacterCurrentParams(kCharacterAnna)[0], "NONE", 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
- setModel(37, 1);
- CONS_Anna_Asleep(0, 0, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ setModel(37, 1);
+ CONS_Anna_Asleep(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -1635,25 +1878,29 @@ void LogicManager::CONS_Anna_Asleep(CONS_PARAMS) {
void LogicManager::HAND_Anna_Asleep(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (getCharacterCurrentParams(kCharacterAnna)[0] || !checkCathDir(kCarRedSleeping, 60))
- goto LABEL_18;
- if (!getCharacterCurrentParams(kCharacterAnna)[1]) {
- getCharacterCurrentParams(kCharacterAnna)[1] = _gameTime + 150;
- if (_gameTime == -150)
- goto LABEL_9;
- }
- if (getCharacterCurrentParams(kCharacterAnna)[1] < _gameTime) {
- getCharacterCurrentParams(kCharacterAnna)[1] = 0x7FFFFFFF;
- LABEL_9:
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
- AnnaCall(&LogicManager::CONS_Anna_DoSeqOtis, "419B", 0, 0, 0);
- return;
+ if (!getCharacterCurrentParams(kCharacterAnna)[0] && checkCathDir(kCarRedSleeping, 60)) {
+ if (!getCharacterCurrentParams(kCharacterAnna)[1]) {
+ getCharacterCurrentParams(kCharacterAnna)[1] = _gameTime + 150;
+ if (_gameTime == -150) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoSeqOtis, "419B", 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterAnna)[1] < _gameTime) {
+ getCharacterCurrentParams(kCharacterAnna)[1] = 0x7FFFFFFF;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoSeqOtis, "419B", 0, 0, 0);
+ break;
+ }
}
- LABEL_18:
+
if (_gameTime > 1489500 && !getCharacterCurrentParams(kCharacterAnna)[2]) {
getCharacterCurrentParams(kCharacterAnna)[2] = 1;
CONS_Anna_WakeNight(0, 0, 0, 0);
}
+
break;
case 8:
case 9:
@@ -1666,7 +1913,8 @@ void LogicManager::HAND_Anna_Asleep(HAND_PARAMS) {
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB013", 0, 0, 0);
}
- return;
+
+ break;
case 12:
setDoor(37, kCharacterAnna, 1, 10, 9);
setDoor(53, kCharacterAnna, 1, 10, 9);
@@ -1679,31 +1927,40 @@ void LogicManager::HAND_Anna_Asleep(HAND_PARAMS) {
getCharacter(kCharacterAnna).characterPosition.position = 4070;
getCharacter(kCharacterAnna).characterPosition.location = 0;
startCycOtis(kCharacterAnna, "419A");
- return;
+ break;
case 18:
switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
case 1:
startCycOtis(kCharacterAnna, "419C");
getCharacterCurrentParams(kCharacterAnna)[0] = 1;
- goto LABEL_18;
+ if (_gameTime > 1489500 && !getCharacterCurrentParams(kCharacterAnna)[2]) {
+ getCharacterCurrentParams(kCharacterAnna)[2] = 1;
+ CONS_Anna_WakeNight(0, 0, 0, 0);
+ }
+
+ break;
case 2:
case 3:
- if (whoRunningDialog(kCharacterMax))
- goto LABEL_23;
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
- AnnaCall(&LogicManager::CONS_Anna_DoDialog, "MAX1120", 0, 0, 0);
+ if (whoRunningDialog(kCharacterMax)) {
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "MAX1120", 0, 0, 0);
+ }
+
break;
case 4:
- LABEL_23:
setDoor(37, kCharacterAnna, 1, 10, 9);
setDoor(53, kCharacterAnna, 1, 10, 9);
break;
default:
- return;
+ break;
}
- return;
+
+ break;
default:
- return;
+ break;
}
}
@@ -1718,37 +1975,47 @@ void LogicManager::CONS_Anna_WakeNight(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_WakeNight(HAND_PARAMS) {
- if (msg->action > 9) {
- if (msg->action > 18) {
- if (msg->action == 226031488) {
- if (whoRunningDialog(kCharacterAnna))
- fadeDialog(kCharacterAnna);
- send(kCharacterAnna, kCharacterMax, 71277948, 0);
- } else if (msg->action == 238358920) {
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
- AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "608Cf", 37, 0, 0);
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAnna)[0]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[2] || (getCharacterCurrentParams(kCharacterAnna)[2] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[2] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterAnna)[2] = 0x7FFFFFFF;
}
- } else if (msg->action == 18) {
- if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
- playNIS(kEventAnnaVisitToCompartmentGun);
- playDialog(0, "LIB015", -1, 0);
- getCharacter(kCharacterAnna).characterPosition.location = 0;
- getCharacter(kCharacterAnna).characterPosition.position = 4840;
- walk(kCharacterAnna, kCarRedSleeping, 8200);
- bumpCathFDoor(37);
- send(kCharacterAnna, kCharacterVassili, 339669520, 0);
- send(kCharacterAnna, kCharacterTrainM, 339669520, 0);
- send(kCharacterAnna, kCharacterCond2, 339669520, 0);
- send(kCharacterAnna, kCharacterMax, 71277948, 0);
- CONS_Anna_GoVassili(0, 0, 0, 0);
- } else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
- CONS_Anna_GoVassili(0, 0, 0, 0);
+
+ switch (getCharacterCurrentParams(kCharacterAnna)[1]) {
+ case 0:
+ playDialog(kCharacterAnna, "ANN2135E", -1, 0);
+ break;
+ case 1:
+ playDialog(kCharacterAnna, "ANN2135F", -1, 0);
+ break;
+ case 2:
+ playDialog(kCharacterAnna, "ANN2135G", -1, 0);
+ break;
+ case 3:
+ playDialog(kCharacterAnna, "ANN2135D", -1, 0);
+ break;
+ default:
+ break;
}
- } else if (msg->action == 12) {
- getCharacter(kCharacterAnna).clothes = 1;
- getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+
+ getCharacterCurrentParams(kCharacterAnna)[2] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
}
- } else if (msg->action >= 8) {
+
+ break;
+ case 2:
+ getCharacterCurrentParams(kCharacterAnna)[1]++;
+ if (getCharacterCurrentParams(kCharacterAnna)[1] > 3)
+ getCharacterCurrentParams(kCharacterAnna)[1] = 0;
+
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ break;
+ case 8:
+ case 9:
if (whoRunningDialog(kCharacterAnna))
fadeDialog(kCharacterAnna);
@@ -1757,44 +2024,41 @@ void LogicManager::HAND_Anna_WakeNight(HAND_PARAMS) {
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaVisitToCompartmentGun, 0, 0);
- } else if (msg->action) {
- if (msg->action == 2) {
- getCharacterCurrentParams(kCharacterAnna)[1]++;
- if (getCharacterCurrentParams(kCharacterAnna)[1] > 3)
- getCharacterCurrentParams(kCharacterAnna)[1] = 0;
-
- getCharacterCurrentParams(kCharacterAnna)[0] = 1;
- }
- } else {
- if (!getCharacterCurrentParams(kCharacterAnna)[0])
- return;
-
- if (getCharacterCurrentParams(kCharacterAnna)[2] || (getCharacterCurrentParams(kCharacterAnna)[2] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterAnna)[2] >= _currentGameSessionTicks)
- return;
-
- getCharacterCurrentParams(kCharacterAnna)[2] = 0x7FFFFFFF;
+ break;
+ case 12:
+ getCharacter(kCharacterAnna).clothes = 1;
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ break;
+ case 18:
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ playNIS(kEventAnnaVisitToCompartmentGun);
+ playDialog(0, "LIB015", -1, 0);
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ getCharacter(kCharacterAnna).characterPosition.position = 4840;
+ walk(kCharacterAnna, kCarRedSleeping, 8200);
+ bumpCathFDoor(37);
+ send(kCharacterAnna, kCharacterVassili, 339669520, 0);
+ send(kCharacterAnna, kCharacterTrainM, 339669520, 0);
+ send(kCharacterAnna, kCharacterCond2, 339669520, 0);
+ send(kCharacterAnna, kCharacterMax, 71277948, 0);
+ CONS_Anna_GoVassili(0, 0, 0, 0);
+ } else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
+ CONS_Anna_GoVassili(0, 0, 0, 0);
}
- switch (getCharacterCurrentParams(kCharacterAnna)[1]) {
- case 0:
- playDialog(kCharacterAnna, "ANN2135E", -1, 0);
- break;
- case 1:
- playDialog(kCharacterAnna, "ANN2135F", -1, 0);
- break;
- case 2:
- playDialog(kCharacterAnna, "ANN2135G", -1, 0);
- break;
- case 3:
- playDialog(kCharacterAnna, "ANN2135D", -1, 0);
- break;
- default:
- break;
- }
+ break;
+ case 226031488:
+ if (whoRunningDialog(kCharacterAnna))
+ fadeDialog(kCharacterAnna);
- getCharacterCurrentParams(kCharacterAnna)[2] = 0;
- getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+ send(kCharacterAnna, kCharacterMax, 71277948, 0);
+ break;
+ case 238358920:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "608Cf", 37, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1809,11 +2073,13 @@ void LogicManager::CONS_Anna_GoVassili(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_GoVassili(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
setDoor(37, kCharacterCath, 1, 10, 9);
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_DoWalk, 4, 8200, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
setDoor(32, kCharacterCath, 1, 255, 255);
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
@@ -1824,6 +2090,10 @@ void LogicManager::HAND_Anna_GoVassili(HAND_PARAMS) {
endGraphics(kCharacterAnna);
CONS_Anna_AtSeizure(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -1838,12 +2108,17 @@ void LogicManager::CONS_Anna_AtSeizure(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_AtSeizure(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAnna).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterAnna).characterPosition.position = 8200;
getCharacter(kCharacterAnna).characterPosition.location = 0;
- } else if (msg->action == 191477936) {
+ break;
+ case 191477936:
CONS_Anna_SpeakTatiana(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1858,15 +2133,23 @@ void LogicManager::CONS_Anna_SpeakTatiana(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_SpeakTatiana(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAnna).characterPosition.position = 7500;
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_DoDialog, "ANN1010", 0, 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
- playDialog(0, "MUS043", -1, 0);
- CONS_Anna_LeaveTatiana(0, 0, 0, 0);
- }
-}
+ break;
+ case 18:
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ playDialog(0, "MUS043", -1, 0);
+ CONS_Anna_LeaveTatiana(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
+ }
+}
void LogicManager::CONS_Anna_DoWalk1019(CONS_PARAMS) {
CharacterCallParams *params = &getCharacter(kCharacterAnna).callParams[getCharacter(kCharacterAnna).currentCall];
@@ -1884,41 +2167,44 @@ void LogicManager::CONS_Anna_DoWalk1019(CONS_PARAMS) {
void LogicManager::HAND_Anna_DoWalk1019(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (walk(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[0], getCharacterCurrentParams(kCharacterAnna)[1]))
- goto LABEL_4;
- break;
- case 1:
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
- AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaGoodNight, 0, 0);
- break;
- case 6:
- playDialog(kCharacterAnna, "ANN1107A", -1, 0);
- break;
case 12:
- getCharacter(kCharacterAnna).inventoryItem = 0;
- if (!_gameEvents[kEventAnnaGoodNight] && !_gameEvents[kEventAnnaGoodNightInverse])
- getCharacter(kCharacterAnna).inventoryItem = 0x80;
+ if (msg->action == 12) {
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+
+ if (!_gameEvents[kEventAnnaGoodNight] && !_gameEvents[kEventAnnaGoodNightInverse])
+ getCharacter(kCharacterAnna).inventoryItem = 0x80;
+ }
+
if (walk(kCharacterAnna, getCharacterCurrentParams(kCharacterAnna)[0], getCharacterCurrentParams(kCharacterAnna)[1])) {
- LABEL_4:
getCharacter(kCharacterAnna).inventoryItem = 0;
getCharacter(kCharacterAnna).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
}
+
+ break;
+ case 1:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaGoodNight, 0, 0);
+ break;
+ case 6:
+ playDialog(kCharacterAnna, "ANN1107A", -1, 0);
break;
case 18:
if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
playNIS((kEventAnnaGoodNightInverse - (getCharacter(kCharacterAnna).direction == 1)));
getCharacter(kCharacterAnna).inventoryItem = 0;
+
if (getCharacter(kCharacterAnna).direction == 1)
bumpCathFx(getCharacter(kCharacterAnna).characterPosition.car, getCharacter(kCharacterAnna).characterPosition.position - 750);
else
bumpCathRx(getCharacter(kCharacterAnna).characterPosition.car, getCharacter(kCharacterAnna).characterPosition.position + 750);
}
+
break;
default:
- return;
+ break;
}
}
@@ -1933,10 +2219,12 @@ void LogicManager::CONS_Anna_LeaveTatiana(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_LeaveTatiana(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
- AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "608Cb", 0x21, 0, 0);
- } else if (msg->action == 18) {
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "608Cb", 33, 0, 0);
+ break;
+ case 18:
switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
case 1:
getCharacter(kCharacterAnna).characterPosition.location = 0;
@@ -1992,8 +2280,12 @@ void LogicManager::HAND_Anna_LeaveTatiana(HAND_PARAMS) {
CONS_Anna_GoBackToSleep(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -2012,7 +2304,7 @@ void LogicManager::HAND_Anna_GoBackToSleep(HAND_PARAMS) {
case 0:
if (getCharacterCurrentParams(kCharacterAnna)[1] || (getCharacterCurrentParams(kCharacterAnna)[1] = _gameTime + 2700, _gameTime != -2700)) {
if (getCharacterCurrentParams(kCharacterAnna)[1] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterAnna)[1] = 0x7FFFFFFF;
}
@@ -2029,13 +2321,17 @@ void LogicManager::HAND_Anna_GoBackToSleep(HAND_PARAMS) {
startCycOtis(kCharacterAnna, "419C");
getCharacterCurrentParams(kCharacterAnna)[0] = 0;
break;
+ default:
+ break;
}
+
getCharacterCurrentParams(kCharacterAnna)[1] = 0;
- return;
+ break;
case 8:
case 9:
setDoor(37, kCharacterAnna, 1, 0, 0);
setDoor(53, kCharacterAnna, 1, 0, 0);
+
if (msg->action == 8) {
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB012", 0, 0, 0);
@@ -2043,30 +2339,33 @@ void LogicManager::HAND_Anna_GoBackToSleep(HAND_PARAMS) {
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB013", 0, 0, 0);
}
- return;
+
+ break;
case 12:
send(kCharacterAnna, kCharacterMax, 101687594, 0);
setDoor(37, kCharacterAnna, 1, 10, 9);
setDoor(53, kCharacterAnna, 1, 10, 9);
startCycOtis(kCharacterAnna, "419C");
- return;
+ break;
case 18:
- if (!getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8])
- return;
- if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] <= 2) {
- if (!whoRunningDialog(kCharacterMax)) {
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
- AnnaCall(&LogicManager::CONS_Anna_DoDialog, "MAX1120", 0, 0, 0);
- return;
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] <= 2) {
+ if (!whoRunningDialog(kCharacterMax)) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "MAX1120", 0, 0, 0);
+ break;
+ }
+ } else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] != 3) {
+ break;
}
- } else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] != 3) {
- return;
+
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
}
- setDoor(37, kCharacterAnna, 1, 10, 9);
- setDoor(53, kCharacterAnna, 1, 10, 9);
+
break;
default:
- return;
+ break;
}
}
@@ -2081,17 +2380,20 @@ void LogicManager::CONS_Anna_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_StartPart2(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterAnna);
- getCharacter(kCharacterAnna).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterAnna).characterPosition.position = 4070;
- getCharacter(kCharacterAnna).characterPosition.location = 1;
- getCharacter(kCharacterAnna).inventoryItem = kItemNone;
- getCharacter(kCharacterAnna).clothes = 1;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Anna_InPart2(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterAnna);
+ getCharacter(kCharacterAnna).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterAnna).characterPosition.position = 4070;
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ getCharacter(kCharacterAnna).inventoryItem = kItemNone;
+ getCharacter(kCharacterAnna).clothes = 1;
+ break;
+ default:
+ break;
}
}
@@ -2106,11 +2408,13 @@ void LogicManager::CONS_Anna_InPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_InPart2(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
setDoor(45, kCharacterCath, 0, 255, 255);
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_PracticeMusic, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
case 1:
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
@@ -2133,8 +2437,12 @@ void LogicManager::HAND_Anna_InPart2(HAND_PARAMS) {
AnnaCall(&LogicManager::CONS_Anna_CompLogic, 15803100, "418C", 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -2149,20 +2457,23 @@ void LogicManager::CONS_Anna_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_StartPart3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterAnna);
- getCharacter(kCharacterAnna).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterAnna).characterPosition.position = 4070;
- getCharacter(kCharacterAnna).characterPosition.location = 1;
- getCharacter(kCharacterAnna).clothes = 3;
- getCharacter(kCharacterAnna).inventoryItem = 0;
- setDoor(37, kCharacterCath, 1, 10, 9);
- setDoor(45, kCharacterCath, 0, 255, 255);
- setDoor(53, kCharacterCath, 1, 10, 9);
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Anna_Practicing(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterAnna);
+ getCharacter(kCharacterAnna).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterAnna).characterPosition.position = 4070;
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ getCharacter(kCharacterAnna).clothes = 3;
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+ setDoor(37, kCharacterCath, 1, 10, 9);
+ setDoor(45, kCharacterCath, 0, 255, 255);
+ setDoor(53, kCharacterCath, 1, 10, 9);
+ break;
+ default:
+ break;
}
}
@@ -2191,6 +2502,7 @@ void LogicManager::HAND_Anna_ExitComp(HAND_PARAMS) {
send(kCharacterAnna, kCharacterCond2, 185737168, 0);
else
send(kCharacterAnna, kCharacterCond2, 185671840, 0);
+
playDialog(kCharacterAnna, "Ann3147", -1, 0);
startCycOtis(kCharacterAnna, "625EF");
softBlockAtDoor(kCharacterAnna, 37);
@@ -2201,11 +2513,14 @@ void LogicManager::HAND_Anna_ExitComp(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
}
+
break;
case 157894320:
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
AnnaCall(&LogicManager::CONS_Anna_DoWait, 75, 0, 0, 0);
break;
+ default:
+ break;
}
}
@@ -2220,12 +2535,15 @@ void LogicManager::CONS_Anna_Practicing(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_Practicing(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (checkCathDir(kCarRedSleeping, 60))
bumpCath(kCarRedSleeping, 49, 255);
+
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_PracticeMusic, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1 ||
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
if (getCharacterParams(kCharacterAnna, 8)[0]) {
@@ -2235,6 +2553,10 @@ void LogicManager::HAND_Anna_Practicing(HAND_PARAMS) {
AnnaCall(&LogicManager::CONS_Anna_CompLogic, _gameTime + 4500, "418C", 0, 0);
}
}
+
+ break;
+ default:
+ break;
}
}
@@ -2249,12 +2571,14 @@ void LogicManager::CONS_Anna_GoLunch(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_GoLunch(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
setDoor(37, kCharacterCath, 1, 10, 9);
setDoor(53, kCharacterCath, 1, 10, 9);
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "688Bf", 0x25, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
case 1:
getCharacter(kCharacterAnna).characterPosition.location = 0;
@@ -2288,8 +2612,12 @@ void LogicManager::HAND_Anna_GoLunch(HAND_PARAMS) {
CONS_Anna_Lunch(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -2304,80 +2632,79 @@ void LogicManager::CONS_Anna_Lunch(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_Lunch(HAND_PARAMS) {
- if (msg->action > 12) {
- switch (msg->action) {
- case 18:
- switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
- AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Ann3137B", 0, 0, 0);
- break;
- case 2:
- send(kCharacterAnna, kCharacterWaiter1, 218983616, 0);
- break;
- case 3:
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
- AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Aug3006A", 0, 0, 0);
- break;
- case 4:
- goto LABEL_29;
- case 5:
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 6;
- AnnaCall(&LogicManager::CONS_Anna_DoWait, 900, 0, 0, 0);
- break;
- case 6:
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 7;
- AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Aug3006", 0, 0, 0);
- break;
- case 7:
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 8;
- AnnaCall(&LogicManager::CONS_Anna_DoWait, 2700, 0, 0, 0);
- break;
- case 8:
- startCycOtis(kCharacterAnna, "026H");
- getCharacterCurrentParams(kCharacterAnna)[0] = 1;
- break;
- default:
- return;
- }
- break;
- case 122288808:
- startCycOtis(kCharacterAnna, "026C");
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
- AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Ann3138A", 0, 0, 0);
- break;
- case 122358304:
- startCycOtis(kCharacterAnna, "BLANK");
- break;
- }
- } else {
- if (msg->action == 12) {
- startCycOtis(kCharacterAnna, "026c");
- getCharacter(kCharacterAnna).characterPosition.location = 1;
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
- AnnaCall(&LogicManager::CONS_Anna_DoWait, 450, 0, 0, 0);
- return;
- }
- if (msg->action == 0 && getCharacterCurrentParams(kCharacterAnna)[0]) {
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAnna)[0]) {
if (getCharacterCurrentParams(kCharacterAnna)[2] != 0x7FFFFFFF && _gameTime > 1969200) {
- if (_gameTime > 1983600)
- goto LABEL_18;
+ if (_gameTime > 1983600) {
+ getCharacterCurrentParams(kCharacterAnna)[2] = 0x7FFFFFFF;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Aug3007A", 0, 0, 0);
+ break;
+ }
if (!inDiningRoom(kCharacterCath) || whoRunningDialog(kCharacterMonsieur) || !getCharacterCurrentParams(kCharacterAnna)[2]) {
getCharacterCurrentParams(kCharacterAnna)[2] = _gameTime + 150;
- if (_gameTime == -150)
- goto LABEL_19;
+ if (_gameTime == -150) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Aug3007A", 0, 0, 0);
+ break;
+ }
}
+
if (getCharacterCurrentParams(kCharacterAnna)[2] < _gameTime) {
- LABEL_18:
getCharacterCurrentParams(kCharacterAnna)[2] = 0x7FFFFFFF;
- LABEL_19:
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Aug3007A", 0, 0, 0);
- return;
+ break;
+ }
+ }
+
+ if (getCharacterParams(kCharacterAnna, 8)[1]) {
+ if (!getCharacterCurrentParams(kCharacterAnna)[1])
+ getCharacterCurrentParams(kCharacterAnna)[1] = _gameTime + 4500;
+
+ if (getCharacterCurrentParams(kCharacterAnna)[3] != 0x7FFFFFFF && _gameTime) {
+ if (getCharacterCurrentParams(kCharacterAnna)[1] >= _gameTime) {
+ if (!inDiningRoom(kCharacterCath) || !getCharacterCurrentParams(kCharacterAnna)[3]) {
+ getCharacterCurrentParams(kCharacterAnna)[3] = _gameTime + 450;
+ if (_gameTime == -450) {
+ CONS_Anna_LeaveLunch(0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterAnna)[3] >= _gameTime)
+ break;
+ }
+
+ getCharacterCurrentParams(kCharacterAnna)[3] = 0x7FFFFFFF;
+ CONS_Anna_LeaveLunch(0, 0, 0, 0);
}
}
- LABEL_29:
+ }
+
+ break;
+ case 12:
+ startCycOtis(kCharacterAnna, "026c");
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoWait, 450, 0, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Ann3137B", 0, 0, 0);
+ break;
+ case 2:
+ send(kCharacterAnna, kCharacterWaiter1, 218983616, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Aug3006A", 0, 0, 0);
+ break;
+ case 4:
if (getCharacterParams(kCharacterAnna, 8)[1]) {
if (!getCharacterCurrentParams(kCharacterAnna)[1])
getCharacterCurrentParams(kCharacterAnna)[1] = _gameTime + 4500;
@@ -2386,20 +2713,53 @@ void LogicManager::HAND_Anna_Lunch(HAND_PARAMS) {
if (getCharacterCurrentParams(kCharacterAnna)[1] >= _gameTime) {
if (!inDiningRoom(kCharacterCath) || !getCharacterCurrentParams(kCharacterAnna)[3]) {
getCharacterCurrentParams(kCharacterAnna)[3] = _gameTime + 450;
- if (_gameTime == -450)
- goto LABEL_40;
+ if (_gameTime == -450) {
+ CONS_Anna_LeaveLunch(0, 0, 0, 0);
+ break;
+ }
}
if (getCharacterCurrentParams(kCharacterAnna)[3] >= _gameTime)
- return;
+ break;
}
getCharacterCurrentParams(kCharacterAnna)[3] = 0x7FFFFFFF;
- LABEL_40:
CONS_Anna_LeaveLunch(0, 0, 0, 0);
}
}
+
+ break;
+ case 5:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 6;
+ AnnaCall(&LogicManager::CONS_Anna_DoWait, 900, 0, 0, 0);
+ break;
+ case 6:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 7;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Aug3006", 0, 0, 0);
+ break;
+ case 7:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 8;
+ AnnaCall(&LogicManager::CONS_Anna_DoWait, 2700, 0, 0, 0);
+ break;
+ case 8:
+ startCycOtis(kCharacterAnna, "026H");
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ break;
+ default:
+ break;
}
+
+ break;
+ case 122288808:
+ startCycOtis(kCharacterAnna, "026C");
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Ann3138A", 0, 0, 0);
+ break;
+ case 122358304:
+ startCycOtis(kCharacterAnna, "BLANK");
+ break;
+ default:
+ break;
}
}
@@ -2414,17 +2774,22 @@ void LogicManager::CONS_Anna_DoOtis5026J(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_DoOtis5026J(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
send(kCharacterAnna, kCharacterTableD, 103798704, "010M");
endGraphics(kCharacterAugust);
getCharacter(kCharacterAnna).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterTableD, "026J3");
startSeqOtis(kCharacterAugust, "026J2");
startSeqOtis(kCharacterAnna, "026J1");
+ break;
+ default:
+ break;
}
}
@@ -2439,10 +2804,12 @@ void LogicManager::CONS_Anna_LeaveLunch(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_LeaveLunch(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Ann3141", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
case 1:
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
@@ -2456,7 +2823,13 @@ void LogicManager::HAND_Anna_LeaveLunch(HAND_PARAMS) {
case 3:
CONS_Anna_AfterLunch(0, 0, 0, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -2471,72 +2844,92 @@ void LogicManager::CONS_Anna_AfterLunch(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_AfterLunch(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action > 101169422) {
- if (msg->action == 122288808) {
- startCycOtis(kCharacterAnna, "112D");
- send(kCharacterAnna, kCharacterKronos, 157159392, 0);
- } else if (msg->action == 122358304) {
- startCycOtis(kCharacterAnna, "BLANK");
- }
- } else if (msg->action == 101169422) {
- if (_gameEvents[kEventKronosVisit]) {
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
- AnnaCall(&LogicManager::CONS_Anna_DoBlockSeqOtis, "112J", 5, 0x39, 0);
- } else {
- LABEL_22:
- if (_gameTime >= 2047500) {
- LABEL_28:
- getCharacterCurrentParams(kCharacterAnna)[0] = 1;
- } else {
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
- AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Ann3142A", 0, 0, 0);
- }
- }
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterAnna).characterPosition.location = 1;
- startCycOtis(kCharacterAnna, "112B");
- releaseView(kCharacterAnna, kCarRestaurant, 57);
- send(kCharacterAnna, kCharacterWaiter2, 219377792, 0);
- break;
- case 2:
- send(kCharacterAnna, kCharacterAugust, 122288808, 0);
- CONS_Anna_ReturnComp3(0, 0, 0, 0);
- break;
- case 3:
- startCycOtis(kCharacterAnna, "112D");
- goto LABEL_22;
- case 4:
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
- AnnaCall(&LogicManager::CONS_Anna_DoWait, 1800, 0, 0, 0);
- break;
- case 5:
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 6;
- AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Aug3007", 0, 0, 0);
- break;
- case 6:
- goto LABEL_28;
- default:
- return;
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAnna)[0]) {
+ if (rcClear()) {
+ playDialog(kCharacterAnna, "Aug3008", -1, 0);
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoComplexSeqOtis, "112E1", "112E2", 2, 0);
}
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
playDialog(kCharacterAnna, "Ann3142", -1, 30);
- blockView(1, 5, 57);
+ blockView(kCharacterCath, kCarRestaurant, 57);
startSeqOtis(kCharacterAnna, "112A");
+
if (inDiningRoom(kCharacterCath))
advanceFrame(kCharacterAnna);
+
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_FinishSeqOtis, 0, 0, 0, 0);
- } else if (msg->action == 0 && getCharacterCurrentParams(kCharacterAnna)[0]) {
- if (rcClear()) {
- playDialog(kCharacterAnna, "Aug3008", -1, 0);
- getCharacter(kCharacterAnna).characterPosition.location = 0;
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
- AnnaCall(&LogicManager::CONS_Anna_DoComplexSeqOtis, "112E1", "112E2", 2, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ startCycOtis(kCharacterAnna, "112B");
+ releaseView(kCharacterAnna, kCarRestaurant, 57);
+ send(kCharacterAnna, kCharacterWaiter2, 219377792, 0);
+ break;
+ case 2:
+ send(kCharacterAnna, kCharacterAugust, 122288808, 0);
+ CONS_Anna_ReturnComp3(0, 0, 0, 0);
+ break;
+ case 3:
+ startCycOtis(kCharacterAnna, "112D");
+
+ if (_gameTime >= 2047500) {
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Ann3142A", 0, 0, 0);
+ }
+
+ break;
+ case 4:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
+ AnnaCall(&LogicManager::CONS_Anna_DoWait, 1800, 0, 0, 0);
+ break;
+ case 5:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 6;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Aug3007", 0, 0, 0);
+ break;
+ case 6:
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 101169422:
+ if (_gameEvents[kEventKronosVisit]) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoBlockSeqOtis, "112J", 5, 0x39, 0);
+ } else {
+ if (_gameTime >= 2047500) {
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Ann3142A", 0, 0, 0);
+ }
}
+
+ break;
+ case 122288808:
+ startCycOtis(kCharacterAnna, "112D");
+ send(kCharacterAnna, kCharacterKronos, 157159392, 0);
+ break;
+ case 122358304:
+ startCycOtis(kCharacterAnna, "BLANK");
+ break;
+
+ default:
+ break;
}
}
@@ -2551,29 +2944,38 @@ void LogicManager::CONS_Anna_ReturnComp3(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_ReturnComp3(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterAnna, 37);
getCharacter(kCharacterAnna).characterPosition.position = 4070;
getCharacter(kCharacterAnna).characterPosition.location = 1;
endGraphics(kCharacterAnna);
CONS_Anna_Dressing(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_DoWalk, 4, 4070, 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
- startSeqOtis(kCharacterAnna, "688Af");
- blockAtDoor(kCharacterAnna, 37);
- getCharacter(kCharacterAnna).characterPosition.location = 1;
- if (inComp(kCharacterCath, kCarRedSleeping, 4070) || inComp(kCharacterCath, kCarRedSleeping, 4455)) {
- if (isNight()) {
- playNIS(kEventCathTurningNight);
- } else {
- playNIS(kEventCathTurningDay);
+ break;
+ case 18:
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ startSeqOtis(kCharacterAnna, "688Af");
+ blockAtDoor(kCharacterAnna, 37);
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ if (inComp(kCharacterCath, kCarRedSleeping, 4070) || inComp(kCharacterCath, kCarRedSleeping, 4455)) {
+ if (isNight()) {
+ playNIS(kEventCathTurningNight);
+ } else {
+ playNIS(kEventCathTurningDay);
+ }
+
+ playDialog(0, "BUMP", -1, 0);
+ bumpCathRDoor(37);
}
-
- playDialog(0, "BUMP", -1, 0);
- bumpCathRDoor(37);
}
+
+ break;
+ default:
+ break;
}
}
@@ -2592,54 +2994,69 @@ void LogicManager::HAND_Anna_Dressing(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (!_gameProgress[kProgressField48] || getCharacterCurrentParams(kCharacterAnna)[4] == 0x7FFFFFFF || !_gameTime)
- goto LABEL_13;
+ if (_gameProgress[kProgressField48] != 0 && getCharacterCurrentParams(kCharacterAnna)[4] != 0x7FFFFFFF && _gameTime != 0) {
+ if (_gameTime > 2065500) {
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0x7FFFFFFF;
+ CONS_Anna_GiveMaxToCond2(0, 0, 0, 0);
+ break;
+ }
- if (_gameTime > 2065500)
- goto LABEL_11;
+ if (!cathInCorridor(kCarRedSleeping) || !getCharacterCurrentParams(kCharacterAnna)[4]) {
+ getCharacterCurrentParams(kCharacterAnna)[4] = _gameTime + 150;
+ if (_gameTime == -150) {
+ CONS_Anna_GiveMaxToCond2(0, 0, 0, 0);
+ break;
+ }
+ }
- if (!cathInCorridor(kCarRedSleeping) || !getCharacterCurrentParams(kCharacterAnna)[4]) {
- getCharacterCurrentParams(kCharacterAnna)[4] = _gameTime + 150;
- if (_gameTime == -150)
- goto LABEL_12;
- }
- if (getCharacterCurrentParams(kCharacterAnna)[4] < _gameTime) {
- LABEL_11:
- getCharacterCurrentParams(kCharacterAnna)[4] = 0x7FFFFFFF;
- LABEL_12:
- CONS_Anna_GiveMaxToCond2(0, 0, 0, 0);
- return;
+ if (getCharacterCurrentParams(kCharacterAnna)[4] < _gameTime) {
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0x7FFFFFFF;
+ CONS_Anna_GiveMaxToCond2(0, 0, 0, 0);
+ break;
+ }
}
- LABEL_13:
- if (!getCharacterCurrentParams(kCharacterAnna)[2])
- goto LABEL_21;
- if (!getCharacterCurrentParams(kCharacterAnna)[5]) {
- getCharacterCurrentParams(kCharacterAnna)[5] = _gameTime + 9000;
- if (_gameTime == -9000)
- goto LABEL_18;
- }
+ if (getCharacterCurrentParams(kCharacterAnna)[2] != 0) {
+ bool skip = false; // Horrible way to unroll a goto...
- if (getCharacterCurrentParams(kCharacterAnna)[5] < _gameTime) {
- getCharacterCurrentParams(kCharacterAnna)[5] = 0x7FFFFFFF;
- LABEL_18:
- tmp = getCharacterCurrentParams(kCharacterAnna)[3] == 0;
+ if (!getCharacterCurrentParams(kCharacterAnna)[5]) {
+ getCharacterCurrentParams(kCharacterAnna)[5] = _gameTime + 9000;
+ if (_gameTime == -9000) {
+ skip = true;
+ tmp = getCharacterCurrentParams(kCharacterAnna)[3] == 0;
- getCharacterCurrentParams(kCharacterAnna)[3] = tmp ? 1 : 0;
+ getCharacterCurrentParams(kCharacterAnna)[3] = tmp ? 1 : 0;
- if (!tmp) {
- startCycOtis(kCharacterAnna, "417B");
- } else {
- startCycOtis(kCharacterAnna, "417A");
+ if (!tmp) {
+ startCycOtis(kCharacterAnna, "417B");
+ } else {
+ startCycOtis(kCharacterAnna, "417A");
+ }
+
+ getCharacterCurrentParams(kCharacterAnna)[5] = 0;
+ }
}
- getCharacterCurrentParams(kCharacterAnna)[5] = 0;
+ if (!skip && getCharacterCurrentParams(kCharacterAnna)[5] < _gameTime) {
+ getCharacterCurrentParams(kCharacterAnna)[5] = 0x7FFFFFFF;
+ tmp = getCharacterCurrentParams(kCharacterAnna)[3] == 0;
+
+ getCharacterCurrentParams(kCharacterAnna)[3] = tmp ? 1 : 0;
+
+ if (!tmp) {
+ startCycOtis(kCharacterAnna, "417B");
+ } else {
+ startCycOtis(kCharacterAnna, "417A");
+ }
+
+ getCharacterCurrentParams(kCharacterAnna)[5] = 0;
+ }
}
- LABEL_21:
+
if (getCharacterCurrentParams(kCharacterAnna)[0]) {
if (getCharacterCurrentParams(kCharacterAnna)[6] || (getCharacterCurrentParams(kCharacterAnna)[6] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
if (getCharacterCurrentParams(kCharacterAnna)[6] >= _currentGameSessionTicks)
- return;
+ break;
getCharacterCurrentParams(kCharacterAnna)[6] = 0x7FFFFFFF;
}
@@ -2653,17 +3070,16 @@ void LogicManager::HAND_Anna_Dressing(HAND_PARAMS) {
} else {
getCharacterCurrentParams(kCharacterAnna)[6] = 0;
}
+
break;
case 8:
- goto LABEL_50;
case 9:
- if (inComp(kCharacterMax, kCarRedSleeping, 4070)) {
+ if (msg->action == 9 && inComp(kCharacterMax, kCarRedSleeping, 4070)) {
setDoor(37, kCharacterAnna, 1, 0, 0);
setDoor(53, kCharacterAnna, 1, 0, 0);
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB013", 0, 0, 0);
} else {
- LABEL_50:
if (getCharacterCurrentParams(kCharacterAnna)[0]) {
setDoor(37, kCharacterAnna, 1, 0, 0);
setDoor(53, kCharacterAnna, 1, 0, 0);
@@ -2700,13 +3116,14 @@ void LogicManager::HAND_Anna_Dressing(HAND_PARAMS) {
}
}
}
- return;
+
+ break;
case 12:
send(kCharacterAnna, kCharacterMax, 101687594, 0);
setDoor(37, kCharacterAnna, 1, 10, 9);
setDoor(53, kCharacterAnna, 1, 10, 9);
getCharacter(kCharacterAnna).clothes = 2;
- return;
+ break;
case 17:
if (getCharacterCurrentParams(kCharacterAnna)[1] || getCharacterCurrentParams(kCharacterAnna)[0]) {
setDoor(37, kCharacterAnna, 1, 10, 9);
@@ -2721,17 +3138,20 @@ void LogicManager::HAND_Anna_Dressing(HAND_PARAMS) {
AnnaCall(&LogicManager::CONS_Anna_DoSeqOtis, "416", 0, 0, 0);
}
- return;
+ break;
case 18:
switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
case 1:
- if (whoRunningDialog(kCharacterMax))
- goto LABEL_49;
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
- AnnaCall(&LogicManager::CONS_Anna_DoDialog, "MAX1120", 0, 0, 0);
+ if (whoRunningDialog(kCharacterMax)) {
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "MAX1120", 0, 0, 0);
+ }
+
break;
case 2:
- LABEL_49:
setDoor(37, kCharacterAnna, 1, 10, 9);
setDoor(53, kCharacterAnna, 1, 10, 9);
break;
@@ -2752,20 +3172,23 @@ void LogicManager::HAND_Anna_Dressing(HAND_PARAMS) {
setDoor(37, kCharacterAnna, 1, 0, 9);
setDoor(53, kCharacterAnna, 1, 0, 9);
}
+
getCharacterCurrentParams(kCharacterAnna)[0] = 0;
getCharacterCurrentParams(kCharacterAnna)[1] = 1;
break;
case 9:
if (checkCathDir(kCarRedSleeping, 60))
bumpCath(kCarRedSleeping, 78, 255);
+
startCycOtis(kCharacterAnna, "417B");
break;
default:
- return;
+ break;
}
- return;
+
+ break;
default:
- return;
+ break;
}
}
@@ -2780,107 +3203,80 @@ void LogicManager::CONS_Anna_GiveMaxToCond2(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_GiveMaxToCond2(HAND_PARAMS) {
- bool tmp;
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAnna)[2] != 0) {
+ if (_gameTime > 2079000 && !getCharacterCurrentParams(kCharacterAnna)[4]) {
+ getCharacterCurrentParams(kCharacterAnna)[4] = 1;
+ CONS_Anna_GoConcert(0, 0, 0, 0);
+ break;
+ }
- if (msg->action > 8) {
- if (msg->action > 12) {
- if (msg->action > 123733488) {
- if (msg->action == 156049968) {
- startCycOtis(kCharacterAnna, "629DF");
- softBlockAtDoor(kCharacterAnna, 37);
- } else if (msg->action == 253868128) {
- setDoor(53, kCharacterAnna, 1, 0, 0);
- }
- } else {
- switch (msg->action) {
- case 123733488:
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 9;
- AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "629Ef", 37, 0, 0);
- break;
- case 17:
- if (getCharacterCurrentParams(kCharacterAnna)[1] || getCharacterCurrentParams(kCharacterAnna)[0]) {
- setDoor(37, kCharacterAnna, 1, 10, 9);
- setDoor(53, kCharacterAnna, 1, 10, 9);
- getCharacterCurrentParams(kCharacterAnna)[1] = 0;
- getCharacterCurrentParams(kCharacterAnna)[0] = 0;
- }
+ if (getCharacterCurrentParams(kCharacterAnna)[5] || (getCharacterCurrentParams(kCharacterAnna)[5] = _gameTime + 9000, _gameTime != -9000)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[5] >= _gameTime) {
+ if (getCharacterCurrentParams(kCharacterAnna)[0]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[6] || (getCharacterCurrentParams(kCharacterAnna)[6] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[6] >= _currentGameSessionTicks)
+ break;
- break;
- case 18:
- switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
- case 1:
- if (whoRunningDialog(kCharacterMax))
- goto LABEL_54;
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
- AnnaCall(&LogicManager::CONS_Anna_DoDialog, "MAX1120", 0, 0, 0);
- break;
- case 2:
- LABEL_54:
- setDoor(37, kCharacterAnna, 1, 10, 9);
- setDoor(53, kCharacterAnna, 1, 10, 9);
- break;
- case 3:
- case 4:
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
- AnnaCall(&LogicManager::CONS_Anna_DoDialog, "ANN1016", 0, 0, 0);
- break;
- case 5:
- setDoor(37, kCharacterAnna, 1, 14, 0);
- setDoor(53, kCharacterAnna, 1, 14, 0);
- getCharacterCurrentParams(kCharacterAnna)[0] = 1;
- break;
- case 6:
- case 7:
- case 8:
- if (inComp(kCharacterMax, kCarRedSleeping, 4070)) {
- setDoor(37, kCharacterAnna, 1, 0, 9);
- setDoor(53, kCharacterAnna, 1, 0, 9);
+ getCharacterCurrentParams(kCharacterAnna)[6] = 0x7FFFFFFF;
}
getCharacterCurrentParams(kCharacterAnna)[0] = 0;
getCharacterCurrentParams(kCharacterAnna)[1] = 1;
- break;
- case 9:
- softReleaseAtDoor(kCharacterAnna, 37);
- endGraphics(kCharacterAnna);
- getCharacter(kCharacterAnna).characterPosition.location = kCharacterAnna;
- getCharacter(kCharacterAnna).characterPosition.position = 4070;
- getCharacterCurrentParams(kCharacterAnna)[2] = kCharacterAnna;
- setDoor(45, kCharacterCath, 0, 255, 255);
- setDoor(53, kCharacterAnna, kCharacterAnna, 10, 9);
-
- if (checkCathDir(kCarRedSleeping, 78))
- bumpCath(kCarRedSleeping, 49, 255);
- startCycOtis(kCharacterAnna, "417B");
- break;
- default:
- return;
+ setDoor(37, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
+ setDoor(53, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
+ getCharacterCurrentParams(kCharacterAnna)[6] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterAnna)[6] = 0;
}
+
break;
}
+
+ getCharacterCurrentParams(kCharacterAnna)[5] = 0x7FFFFFFF;
+ }
+
+ bool tmp = getCharacterCurrentParams(kCharacterAnna)[3] == 0;
+ getCharacterCurrentParams(kCharacterAnna)[3] = tmp ? 1 : 0;
+
+ if (!tmp) {
+ startCycOtis(kCharacterAnna, "417B");
+ } else {
+ startCycOtis(kCharacterAnna, "417A");
}
- return;
+
+ getCharacterCurrentParams(kCharacterAnna)[5] = 0;
}
- if (msg->action == 12) {
- setDoor(45, kCharacterCath, 1, 255, 255);
- if (checkCathDir(kCarRedSleeping, 60))
- bumpCath(kCarRedSleeping, 78, 255);
- send(kCharacterAnna, kCharacterCond2, 189750912, 0);
- return;
+ if (getCharacterCurrentParams(kCharacterAnna)[0]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[6] || (getCharacterCurrentParams(kCharacterAnna)[6] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[6] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterAnna)[6] = 0x7FFFFFFF;
+ }
+
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[1] = 1;
+
+ setDoor(37, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
+ setDoor(53, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
+ getCharacterCurrentParams(kCharacterAnna)[6] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterAnna)[6] = 0;
}
- if (msg->action != 9)
- return;
- if (inComp(kCharacterMax, kCarRedSleeping, 4070)) {
+
+ break;
+ case 8:
+ case 9:
+ if (msg->action == 9 && inComp(kCharacterMax, kCarRedSleeping, 4070)) {
setDoor(37, kCharacterAnna, 1, 0, 0);
setDoor(53, kCharacterAnna, 1, 0, 0);
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB013", 0, 0, 0);
- return;
- }
- LABEL_58:
- if (getCharacterCurrentParams(kCharacterAnna)[0]) {
+ } else if (getCharacterCurrentParams(kCharacterAnna)[0]) {
setDoor(37, kCharacterAnna, 1, 0, 0);
setDoor(53, kCharacterAnna, 1, 0, 0);
if (msg->param.intParam == 53) {
@@ -2897,7 +3293,7 @@ void LogicManager::HAND_Anna_GiveMaxToCond2(HAND_PARAMS) {
AnnaCall(&LogicManager::CONS_Anna_DoDialog, "CAT1506", 0, 0, 0);
}
}
-
+
} else {
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 8;
AnnaCall(&LogicManager::CONS_Anna_DoDialog, getCathSorryDialog(), 0, 0, 0);
@@ -2914,57 +3310,93 @@ void LogicManager::HAND_Anna_GiveMaxToCond2(HAND_PARAMS) {
}
}
- return;
- }
-
- if (msg->action == 8)
- goto LABEL_58;
-
- if (msg->action)
- return;
+ break;
+ case 12:
+ setDoor(45, kCharacterCath, 1, 255, 255);
+ if (checkCathDir(kCarRedSleeping, 60))
+ bumpCath(kCarRedSleeping, 78, 255);
- if (!getCharacterCurrentParams(kCharacterAnna)[2])
- goto LABEL_28;
+ send(kCharacterAnna, kCharacterCond2, 189750912, 0);
+ break;
- if (_gameTime > 2079000 && !getCharacterCurrentParams(kCharacterAnna)[4]) {
- getCharacterCurrentParams(kCharacterAnna)[4] = 1;
- CONS_Anna_GoConcert(0, 0, 0, 0);
- return;
- }
+ case 17:
+ if (getCharacterCurrentParams(kCharacterAnna)[1] || getCharacterCurrentParams(kCharacterAnna)[0]) {
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterAnna)[1] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+ }
- if (getCharacterCurrentParams(kCharacterAnna)[5] || (getCharacterCurrentParams(kCharacterAnna)[5] = _gameTime + 9000, _gameTime != -9000)) {
- if (getCharacterCurrentParams(kCharacterAnna)[5] >= _gameTime)
- goto LABEL_28;
- getCharacterCurrentParams(kCharacterAnna)[5] = 0x7FFFFFFF;
- }
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ if (whoRunningDialog(kCharacterMax)) {
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "MAX1120", 0, 0, 0);
+ }
- tmp = getCharacterCurrentParams(kCharacterAnna)[3] == 0;
- getCharacterCurrentParams(kCharacterAnna)[3] = tmp ? 1 : 0;
+ break;
+ case 2:
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ break;
+ case 3:
+ case 4:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "ANN1016", 0, 0, 0);
+ break;
+ case 5:
+ setDoor(37, kCharacterAnna, 1, 14, 0);
+ setDoor(53, kCharacterAnna, 1, 14, 0);
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ break;
+ case 6:
+ case 7:
+ case 8:
+ if (inComp(kCharacterMax, kCarRedSleeping, 4070)) {
+ setDoor(37, kCharacterAnna, 1, 0, 9);
+ setDoor(53, kCharacterAnna, 1, 0, 9);
+ }
- if (!tmp) {
- startCycOtis(kCharacterAnna, "417B");
- } else {
- startCycOtis(kCharacterAnna, "417A");
- }
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[1] = 1;
+ break;
+ case 9:
+ softReleaseAtDoor(kCharacterAnna, 37);
+ endGraphics(kCharacterAnna);
+ getCharacter(kCharacterAnna).characterPosition.location = kCharacterAnna;
+ getCharacter(kCharacterAnna).characterPosition.position = 4070;
+ getCharacterCurrentParams(kCharacterAnna)[2] = kCharacterAnna;
+ setDoor(45, kCharacterCath, 0, 255, 255);
+ setDoor(53, kCharacterAnna, kCharacterAnna, 10, 9);
- getCharacterCurrentParams(kCharacterAnna)[5] = 0;
-LABEL_28:
- if (getCharacterCurrentParams(kCharacterAnna)[0]) {
- if (getCharacterCurrentParams(kCharacterAnna)[6] || (getCharacterCurrentParams(kCharacterAnna)[6] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterAnna)[6] >= _currentGameSessionTicks)
- return;
+ if (checkCathDir(kCarRedSleeping, 78))
+ bumpCath(kCarRedSleeping, 49, 255);
- getCharacterCurrentParams(kCharacterAnna)[6] = 0x7FFFFFFF;
+ startCycOtis(kCharacterAnna, "417B");
+ break;
+ default:
+ break;
}
- getCharacterCurrentParams(kCharacterAnna)[0] = 0;
- getCharacterCurrentParams(kCharacterAnna)[1] = 1;
-
- setDoor(37, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
- setDoor(53, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
- getCharacterCurrentParams(kCharacterAnna)[6] = 0;
- } else {
- getCharacterCurrentParams(kCharacterAnna)[6] = 0;
+ break;
+ case 123733488:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 9;
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "629Ef", 37, 0, 0);
+ break;
+ case 156049968:
+ startCycOtis(kCharacterAnna, "629DF");
+ softBlockAtDoor(kCharacterAnna, 37);
+ break;
+ case 253868128:
+ setDoor(53, kCharacterAnna, 1, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -2979,7 +3411,8 @@ void LogicManager::CONS_Anna_GoConcert(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_GoConcert(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
setDoor(45, kCharacterCath, 2, 255, 255);
if (checkCathDir(kCarRedSleeping, 78))
bumpCath(kCarRedSleeping, 49, 255);
@@ -2989,7 +3422,8 @@ void LogicManager::HAND_Anna_GoConcert(HAND_PARAMS) {
dropItem(kItemKey, 1);
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_ExitComp, 1, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
setDoor(37, kCharacterCath, 1, 10, 9);
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
@@ -2997,6 +3431,10 @@ void LogicManager::HAND_Anna_GoConcert(HAND_PARAMS) {
} else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
CONS_Anna_Concert(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -3011,13 +3449,18 @@ void LogicManager::CONS_Anna_Concert(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_Concert(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterAnna);
getCharacter(kCharacterAnna).characterPosition.car = kCarKronos;
getCharacter(kCharacterAnna).characterPosition.position = 6000;
getCharacter(kCharacterAnna).characterPosition.location = 1;
- } else if (msg->action == 191668032) {
+ break;
+ case 191668032:
COND_Anna_LeaveConcert(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -3032,27 +3475,15 @@ void LogicManager::COND_Anna_LeaveConcert(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_LeaveConcert(HAND_PARAMS) {
- if (msg->action > 18) {
- if (msg->action == 123712592) {
- startCycOtis(kCharacterAnna, "628Af");
- LABEL_16:
- if (whoRunningDialog(kCharacterAugust)) {
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
- AnnaCall(&LogicManager::CONS_Anna_DoWait, 75, 0, 0, 0);
- } else {
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
- AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Aug3009", 0, 0, 0);
- }
- } else if (msg->action == 192063264) {
- if (inComp(kCharacterCath, kCarRedSleeping, 4070) || inComp(kCharacterCath, kCarRedSleeping, 4455)) {
- softReleaseAtDoor(kCharacterAnna, 37);
- CONS_Anna_LeaveConcertCathInComp(0, 0, 0, 0);
- } else {
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
- AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "625Ff", 37, 0, 0);
- }
- }
- } else if (msg->action == 18) {
+ switch (msg->action) {
+ case 12:
+ getCharacter(kCharacterAnna).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterAnna).characterPosition.position = 850;
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoWalk, 3, 5790, 0, 0);
+ break;
+ case 18:
switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
case 1:
send(kCharacterAnna, kCharacterAugust, 191668032, 0);
@@ -3071,7 +3502,15 @@ void LogicManager::HAND_Anna_LeaveConcert(HAND_PARAMS) {
send(kCharacterAnna, kCharacterAugust, 169032608, 0);
break;
case 4:
- goto LABEL_16;
+ if (whoRunningDialog(kCharacterAugust)) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_DoWait, 75, 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Aug3009", 0, 0, 0);
+ }
+
+ break;
case 5:
playDialog(kCharacterAnna, "Aug3009A", -1, 0);
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 6;
@@ -3083,14 +3522,34 @@ void LogicManager::HAND_Anna_LeaveConcert(HAND_PARAMS) {
CONS_Anna_AfterConcert(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
- } else if (msg->action == 12) {
- getCharacter(kCharacterAnna).characterPosition.car = kCarGreenSleeping;
- getCharacter(kCharacterAnna).characterPosition.position = 850;
- getCharacter(kCharacterAnna).characterPosition.location = 0;
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
- AnnaCall(&LogicManager::CONS_Anna_DoWalk, 3, 5790, 0, 0);
+
+ break;
+ case 123712592:
+ startCycOtis(kCharacterAnna, "628Af");
+
+ if (whoRunningDialog(kCharacterAugust)) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_DoWait, 75, 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Aug3009", 0, 0, 0);
+ }
+
+ break;
+ case 192063264:
+ if (inComp(kCharacterCath, kCarRedSleeping, 4070) || inComp(kCharacterCath, kCarRedSleeping, 4455)) {
+ softReleaseAtDoor(kCharacterAnna, 37);
+ CONS_Anna_LeaveConcertCathInComp(0, 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "625Ff", 37, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -3105,16 +3564,24 @@ void LogicManager::CONS_Anna_LeaveConcertCathInComp(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_LeaveConcertCathInComp(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaSearchingCompartment, 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
- playNIS(kEventAnnaSearchingCompartment);
- endGraphics(kCharacterAnna);
- bumpCath(kCarRedSleeping, 8, 255);
- playDialog(kCharacterAnna, "lib015", -1, 0);
- send(kCharacterAnna, kCharacterAugust, 122288808, 0);
- CONS_Anna_AfterConcert(0, 0, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
+ playNIS(kEventAnnaSearchingCompartment);
+ endGraphics(kCharacterAnna);
+ bumpCath(kCarRedSleeping, 8, 255);
+ playDialog(kCharacterAnna, "lib015", -1, 0);
+ send(kCharacterAnna, kCharacterAugust, 122288808, 0);
+ CONS_Anna_AfterConcert(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -3129,72 +3596,55 @@ void LogicManager::CONS_Anna_AfterConcert(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_AfterConcert(HAND_PARAMS) {
- if (msg->action > 9) {
- if (msg->action > 17) {
- if (msg->action > 156622016) {
- if (msg->action == 236241630) {
- setDoor(37, 1, 1, 0, 0);
- setDoor(53, 1, 1, 0, 0);
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 7;
- AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Ann1016A", 0, 0, 0);
- } else if (msg->action == 236517970) {
- getCharacterCurrentParams(kCharacterAnna)[2] = 1;
- setDoor(37, 1, 1, 10, 9);
- setDoor(53, 1, 1, 10, 9);
- }
- } else if (msg->action == 156622016) {
- if (getCharacterCurrentParams(kCharacterAnna)[2]) {
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 8;
- AnnaCall(&LogicManager::CONS_Anna_GiveMaxBack, 0, 0, 0, 0);
- }
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
- case 1:
- case 2:
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
- AnnaCall(&LogicManager::CONS_Anna_DoDialog, "ANN1016", 0, 0, 0);
- break;
- case 3:
- setDoor(37, kCharacterAnna, 1, 14, 0);
- setDoor(53, kCharacterAnna, 1, 14, 0);
- getCharacterCurrentParams(kCharacterAnna)[0] = 1;
- break;
- case 4:
- case 5:
- case 6:
- getCharacterCurrentParams(kCharacterAnna)[0] = 0;
- getCharacterCurrentParams(kCharacterAnna)[1] = 1;
- break;
- case 7:
- send(kCharacterAnna, kCharacterTatiana, 100906246, 0);
+ switch (msg->action) {
+ case 0:
+ if (cathHasItem(kItemKey) && getCharacterCurrentParams(kCharacterAnna)[3] != 0x7FFFFFFF && _gameTime > 2218500) {
+ if (_gameTime > 2248200) {
+ getCharacterCurrentParams(kCharacterAnna)[3] = 0x7FFFFFFF;
+ CONS_Anna_GoBagg(0, 0, 0, 0);
+ break;
+ }
+
+ if (!getCharacterCurrentParams(kCharacterAnna)[2] || !cathInCorridor(kCarRedSleeping) && !inSalon(kCharacterCath) && !inDiningRoom(kCharacterCath) || !getCharacterCurrentParams(kCharacterAnna)[3]) {
+ getCharacterCurrentParams(kCharacterAnna)[3] = _gameTime;
+ if (!getCharacterCurrentParams(kCharacterAnna)[3]) {
+ CONS_Anna_GoBagg(0, 0, 0, 0);
break;
- default:
- return;
}
}
- } else if (msg->action == 17) {
- if (getCharacterCurrentParams(kCharacterAnna)[1] || getCharacterCurrentParams(kCharacterAnna)[0]) {
- setDoor(37, kCharacterAnna, 1, 10, 9);
- setDoor(53, kCharacterAnna, 1, 10, 9);
- getCharacterCurrentParams(kCharacterAnna)[1] = 0;
- getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+
+ if (getCharacterCurrentParams(kCharacterAnna)[3] < _gameTime) {
+ getCharacterCurrentParams(kCharacterAnna)[3] = 0x7FFFFFFF;
+ CONS_Anna_GoBagg(0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterAnna)[0]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[4] || (getCharacterCurrentParams(kCharacterAnna)[4] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[4] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0x7FFFFFFF;
}
- } else if (msg->action == 12) {
- getCharacter(kCharacterAnna).characterPosition.position = 4070;
- getCharacter(kCharacterAnna).characterPosition.location = 1;
- endGraphics(kCharacterAnna);
- setDoor(107, kCharacterCath, 2, 255, 255);
- setDoor(45, kCharacterCath, 1, 255, 255);
- setDoor(37, kCharacterAnna, 1, 10, 9);
- setDoor(53, kCharacterAnna, 1, 10, 9);
- if (checkCathDir(kCarRedSleeping, 60))
- bumpCath(kCarRedSleeping, 78, 255);
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[1] = 1;
+
+ setDoor(37, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
+ setDoor(53, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0;
}
- } else if (msg->action >= 8) {
+
+ break;
+ case 8:
+ case 9:
if (getCharacterCurrentParams(kCharacterAnna)[0]) {
setDoor(37, kCharacterAnna, 1, 0, 0);
setDoor(53, kCharacterAnna, 1, 0, 0);
+
if (msg->param.intParam == 53) {
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
AnnaCall(&LogicManager::CONS_Anna_DoDialog, getCathWCDialog(), 0, 0, 0);
@@ -3225,45 +3675,76 @@ void LogicManager::HAND_Anna_AfterConcert(HAND_PARAMS) {
AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB013", 0, 0, 0);
}
}
- } else {
- if (msg->action)
- return;
-
- if (cathHasItem(kItemKey) && getCharacterCurrentParams(kCharacterAnna)[3] != 0x7FFFFFFF && _gameTime > 2218500) {
- if (_gameTime > 2248200)
- goto LABEL_27;
- if (!getCharacterCurrentParams(kCharacterAnna)[2] || !cathInCorridor(kCarRedSleeping) && !inSalon(kCharacterCath) && !inDiningRoom(kCharacterCath) || !getCharacterCurrentParams(kCharacterAnna)[3]) {
- getCharacterCurrentParams(kCharacterAnna)[3] = _gameTime;
- if (!getCharacterCurrentParams(kCharacterAnna)[3])
- goto LABEL_28;
- }
- if (getCharacterCurrentParams(kCharacterAnna)[3] < _gameTime) {
- LABEL_27:
- getCharacterCurrentParams(kCharacterAnna)[3] = 0x7FFFFFFF;
- LABEL_28:
- CONS_Anna_GoBagg(0, 0, 0, 0);
- return;
- }
- }
+ break;
+ case 12:
+ getCharacter(kCharacterAnna).characterPosition.position = 4070;
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ endGraphics(kCharacterAnna);
+ setDoor(107, kCharacterCath, 2, 255, 255);
+ setDoor(45, kCharacterCath, 1, 255, 255);
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
- if (getCharacterCurrentParams(kCharacterAnna)[0]) {
- if (getCharacterCurrentParams(kCharacterAnna)[4] || (getCharacterCurrentParams(kCharacterAnna)[4] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterAnna)[4] >= _currentGameSessionTicks)
- return;
+ if (checkCathDir(kCarRedSleeping, 60))
+ bumpCath(kCarRedSleeping, 78, 255);
- getCharacterCurrentParams(kCharacterAnna)[4] = 0x7FFFFFFF;
- }
+ break;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterAnna)[1] || getCharacterCurrentParams(kCharacterAnna)[0]) {
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterAnna)[1] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+ }
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ case 2:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "ANN1016", 0, 0, 0);
+ break;
+ case 3:
+ setDoor(37, kCharacterAnna, 1, 14, 0);
+ setDoor(53, kCharacterAnna, 1, 14, 0);
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ break;
+ case 4:
+ case 5:
+ case 6:
getCharacterCurrentParams(kCharacterAnna)[0] = 0;
getCharacterCurrentParams(kCharacterAnna)[1] = 1;
+ break;
+ case 7:
+ send(kCharacterAnna, kCharacterTatiana, 100906246, 0);
+ break;
+ default:
+ break;
+ }
- setDoor(37, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
- setDoor(53, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
- getCharacterCurrentParams(kCharacterAnna)[4] = 0;
- } else {
- getCharacterCurrentParams(kCharacterAnna)[4] = 0;
+ break;
+ case 156622016:
+ if (getCharacterCurrentParams(kCharacterAnna)[2]) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 8;
+ AnnaCall(&LogicManager::CONS_Anna_GiveMaxBack, 0, 0, 0, 0);
}
+
+ break;
+ case 236241630:
+ setDoor(37, 1, 1, 0, 0);
+ setDoor(53, 1, 1, 0, 0);
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 7;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Ann1016A", 0, 0, 0);
+ break;
+ case 236517970:
+ getCharacterCurrentParams(kCharacterAnna)[2] = 1;
+ setDoor(37, 1, 1, 10, 9);
+ setDoor(53, 1, 1, 10, 9);
+ break;
+ default:
+ break;
}
}
@@ -3310,12 +3791,17 @@ void LogicManager::HAND_Anna_GiveMaxBack(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
break;
+ default:
+ break;
}
+
break;
case 156049968:
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
AnnaCall(&LogicManager::CONS_Anna_DoCorrOtis, "629EF", 37, 0, 0);
break;
+ default:
+ break;
}
}
@@ -3330,11 +3816,13 @@ void LogicManager::CONS_Anna_GoBagg(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_GoBagg(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
_gameTimeTicksDelta = 3;
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_SaveGame, 1, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
case 1:
setDoor(53, kCharacterCath, 1, 10, 9);
@@ -3358,8 +3846,10 @@ void LogicManager::HAND_Anna_GoBagg(HAND_PARAMS) {
break;
case 5:
startSeqOtis(kCharacterAnna, "802UD");
+
if (inSalon(kCharacterCath))
advanceFrame(kCharacterAnna);
+
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 6;
AnnaCall(&LogicManager::CONS_Anna_FinishSeqOtis, 0, 0, 0, 0);
break;
@@ -3368,8 +3858,12 @@ void LogicManager::HAND_Anna_GoBagg(HAND_PARAMS) {
CONS_Anna_InBagg(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -3384,17 +3878,24 @@ void LogicManager::CONS_Anna_InBagg(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_InBagg(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterAnna).characterPosition.car = kCarBaggage;
- _gameProgress[kProgressField54] = 1;
- } else if (msg->action == 235856512) {
- getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAnna)[0] && _gameTime > 2259000 && !getCharacterCurrentParams(kCharacterAnna)[1]) {
+ getCharacterCurrentParams(kCharacterAnna)[1] = 1;
+ send(kCharacterAnna, kCharacterVesna, 189299008, 0);
+ CONS_Anna_DeadBagg(0, 0, 0, 0);
}
- } else if (getCharacterCurrentParams(kCharacterAnna)[0] && _gameTime > 2259000 && !getCharacterCurrentParams(kCharacterAnna)[1]) {
- getCharacterCurrentParams(kCharacterAnna)[1] = 1;
- send(kCharacterAnna, kCharacterVesna, 189299008, 0);
- CONS_Anna_DeadBagg(0, 0, 0, 0);
+
+ break;
+ case 12:
+ getCharacter(kCharacterAnna).characterPosition.car = kCarBaggage;
+ _gameProgress[kProgressField54] = 1;
+ break;
+ case 235856512:
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ break;
+ default:
+ break;
}
}
@@ -3416,7 +3917,7 @@ void LogicManager::HAND_Anna_DeadBagg(HAND_PARAMS) {
case 18:
if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
playNIS(kEventAnnaKilled);
- endGame(1, 2250000, 58, 1);
+ endGame(1, 2250000, 58, true);
}
break;
@@ -3443,11 +3944,13 @@ void LogicManager::CONS_Anna_BaggageFight(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_BaggageFight(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterAnna);
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaBaggageArgument, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
case 1:
playNIS(kEventAnnaBaggageArgument);
@@ -3475,6 +3978,10 @@ void LogicManager::HAND_Anna_BaggageFight(HAND_PARAMS) {
default:
break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -3489,7 +3996,8 @@ void LogicManager::CONS_Anna_PrepareVienna(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_PrepareVienna(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAnna).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterAnna).characterPosition.position = 4070;
getCharacter(kCharacterAnna).characterPosition.location = 1;
@@ -3498,6 +4006,9 @@ void LogicManager::HAND_Anna_PrepareVienna(HAND_PARAMS) {
setDoor(45, kCharacterCath, 1, 255, 255);
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_CompLogic, 15803100, "NONE", 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -3512,17 +4023,20 @@ void LogicManager::CONS_Anna_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_StartPart4(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterAnna);
- getCharacter(kCharacterAnna).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterAnna).characterPosition.position = 4070;
- getCharacter(kCharacterAnna).characterPosition.location = 1;
- getCharacter(kCharacterAnna).clothes = 2;
- getCharacter(kCharacterAnna).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Anna_Reading(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterAnna);
+ getCharacter(kCharacterAnna).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterAnna).characterPosition.position = 4070;
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ getCharacter(kCharacterAnna).clothes = 2;
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -3537,61 +4051,65 @@ void LogicManager::CONS_Anna_Reading(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_Reading(HAND_PARAMS) {
- if (msg->action > 9) {
- if (msg->action > 17) {
- switch (msg->action) {
- case 18:
- switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
- case 1:
- playNIS(kEventAnnaConversation_34);
- playDialog(0, "LIB015", -1, 0);
- bumpCath(kCarRedSleeping, 8, 255);
- CONS_Anna_Sulking(0, 0, 0, 0);
- break;
- case 2:
- case 3:
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
- AnnaCall(&LogicManager::CONS_Anna_DoDialog, "ANN1016", 0, 0, 0);
- break;
- case 4:
- setDoor(53, kCharacterAnna, 1, 14, 0);
- getCharacterCurrentParams(kCharacterAnna)[0] = 1;
- break;
- case 5:
- getCharacterCurrentParams(kCharacterAnna)[0] = 0;
- getCharacterCurrentParams(kCharacterAnna)[1] = 1;
+ switch (msg->action) {
+ case 0:
+ if (checkCathDir(kCarRedSleeping, 46)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[3] || (getCharacterCurrentParams(kCharacterAnna)[3] = _currentGameSessionTicks + 30, _currentGameSessionTicks != -30)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[3] >= _currentGameSessionTicks) {
+ if (getCharacterCurrentParams(kCharacterAnna)[0]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[4] || (getCharacterCurrentParams(kCharacterAnna)[4] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[4] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0x7FFFFFFF;
+ }
+
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[1] = 1;
+
+ setDoor(53, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0;
+ }
+
break;
- default:
- return;
}
- break;
- case 191001984:
- setDoor(37, kCharacterCath, 0, 10, 9);
- getCharacter(kCharacterAnna).inventoryItem = 0;
- CONS_Anna_GoSalon4(0, 0, 0, 0);
- break;
- case 219971920:
- getCharacterCurrentParams(kCharacterAnna)[2] = 1;
- getCharacter(kCharacterAnna).inventoryItem = 0x80;
- break;
- }
- } else if (msg->action == 17) {
- if (getCharacterCurrentParams(kCharacterAnna)[1] || getCharacterCurrentParams(kCharacterAnna)[0]) {
- setDoor(53, kCharacterAnna, 1, 10, 9);
- getCharacterCurrentParams(kCharacterAnna)[1] = 0;
- getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+
+ getCharacterCurrentParams(kCharacterAnna)[3] = 0x7FFFFFFF;
}
- } else if (msg->action == 12) {
- setDoor(37, kCharacterCath, 2, 0, 0);
- setDoor(45, kCharacterCath, 1, 255, 255);
- setDoor(53, kCharacterAnna, 1, 10, 9);
- startCycOtis(kCharacterAnna, "511B");
+
+ bumpCath(kCarRedSleeping, 8, 255);
}
- return;
- }
+ getCharacterCurrentParams(kCharacterAnna)[3] = 0;
+
+ if (getCharacterCurrentParams(kCharacterAnna)[0]) {
+ if (getCharacterCurrentParams(kCharacterAnna)[4] || (getCharacterCurrentParams(kCharacterAnna)[4] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[4] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0x7FFFFFFF;
+ }
+
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[1] = 1;
+
+ setDoor(53, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterAnna)[4] = 0;
+ }
- if (msg->action >= 8) {
+ break;
+ case 1:
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+ getCharacter(kCharacterCath).characterPosition.location = 1;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, 34, 0, 0);
+ break;
+ case 8:
+ case 9:
if (getCharacterCurrentParams(kCharacterAnna)[0]) {
setDoor(53, kCharacterAnna, 1, 0, 0);
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
@@ -3608,48 +4126,58 @@ void LogicManager::HAND_Anna_Reading(HAND_PARAMS) {
}
}
- return;
- }
-
- if (msg->action) {
- if (msg->action == 1) {
- getCharacter(kCharacterAnna).inventoryItem = 0;
- getCharacter(kCharacterCath).characterPosition.location = 1;
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
- AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, 34, 0, 0);
- }
-
- return;
- }
-
- if (checkCathDir(kCarRedSleeping, 46)) {
- if (getCharacterCurrentParams(kCharacterAnna)[3] || (getCharacterCurrentParams(kCharacterAnna)[3] = _currentGameSessionTicks + 30, _currentGameSessionTicks != -30)) {
- if (getCharacterCurrentParams(kCharacterAnna)[3] >= _currentGameSessionTicks)
- goto LABEL_21;
-
- getCharacterCurrentParams(kCharacterAnna)[3] = 0x7FFFFFFF;
+ break;
+ case 12:
+ setDoor(37, kCharacterCath, 2, 0, 0);
+ setDoor(45, kCharacterCath, 1, 255, 255);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ startCycOtis(kCharacterAnna, "511B");
+ break;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterAnna)[1] || getCharacterCurrentParams(kCharacterAnna)[0]) {
+ setDoor(53, kCharacterAnna, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterAnna)[1] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
}
- bumpCath(kCarRedSleeping, 8, 255);
- }
-
- getCharacterCurrentParams(kCharacterAnna)[3] = 0;
-LABEL_21:
- if (getCharacterCurrentParams(kCharacterAnna)[0]) {
- if (getCharacterCurrentParams(kCharacterAnna)[4] || (getCharacterCurrentParams(kCharacterAnna)[4] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterAnna)[4] >= _currentGameSessionTicks)
- return;
-
- getCharacterCurrentParams(kCharacterAnna)[4] = 0x7FFFFFFF;
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ playNIS(kEventAnnaConversation_34);
+ playDialog(0, "LIB015", -1, 0);
+ bumpCath(kCarRedSleeping, 8, 255);
+ CONS_Anna_Sulking(0, 0, 0, 0);
+ break;
+ case 2:
+ case 3:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
+ AnnaCall(&LogicManager::CONS_Anna_DoDialog, "ANN1016", 0, 0, 0);
+ break;
+ case 4:
+ setDoor(53, kCharacterAnna, 1, 14, 0);
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ break;
+ case 5:
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0;
+ getCharacterCurrentParams(kCharacterAnna)[1] = 1;
+ break;
+ default:
+ break;
}
- getCharacterCurrentParams(kCharacterAnna)[0] = 0;
- getCharacterCurrentParams(kCharacterAnna)[1] = 1;
-
- setDoor(53, kCharacterAnna, 1, 0, !inComp(kCharacterMax, kCarRedSleeping, 4070) ? 0 : 9);
- getCharacterCurrentParams(kCharacterAnna)[4] = 0;
- } else {
- getCharacterCurrentParams(kCharacterAnna)[4] = 0;
+ break;
+ case 191001984:
+ setDoor(37, kCharacterCath, 0, 10, 9);
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+ CONS_Anna_GoSalon4(0, 0, 0, 0);
+ break;
+ case 219971920:
+ getCharacterCurrentParams(kCharacterAnna)[2] = 1;
+ getCharacter(kCharacterAnna).inventoryItem = 0x80;
+ break;
+ default:
+ break;
}
}
@@ -3664,24 +4192,30 @@ void LogicManager::CONS_Anna_Sulking(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_Sulking(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action != 18) {
- if (msg->action == 191001984) {
- setDoor(37, kCharacterCath, 0, 10, 9);
- CONS_Anna_GoSalon4(0, 0, 0, 0);
- } else if (msg->action == 201431954) {
- getCharacterCurrentParams(kCharacterAnna)[0] = 1;
- }
+ switch (msg->action) {
+ case 0:
+ if (!getCharacterCurrentParams(kCharacterAnna)[0]) {
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_CompLogic, 2511900, "NONE", 0, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
setDoor(37, kCharacterCath, 1, 10, 9);
setDoor(53, kCharacterCath, 1, 10, 9);
getCharacter(kCharacterAnna).characterPosition.car = 4;
getCharacter(kCharacterAnna).characterPosition.position = 4070;
getCharacter(kCharacterAnna).characterPosition.location = 1;
- } else if (msg->action == 0 && !getCharacterCurrentParams(kCharacterAnna)[0]) {
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
- AnnaCall(&LogicManager::CONS_Anna_CompLogic, 2511900, "NONE", 0, 0);
+ break;
+ case 191001984:
+ setDoor(37, kCharacterCath, 0, 10, 9);
+ CONS_Anna_GoSalon4(0, 0, 0, 0);
+ break;
+ case 201431954:
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ break;
+ default:
+ break;
}
}
@@ -3696,70 +4230,12 @@ void LogicManager::CONS_Anna_GoSalon4(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_GoSalon4(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action > 100969180) {
- if (msg->action == 122288808) {
- startCycOtis(kCharacterAnna, "127E");
- send(kCharacterAnna, kCharacterAbbot, 203073664, 0);
- } else if (msg->action == 122358304) {
- startCycOtis(kCharacterAnna, "BLANK");
- }
- } else {
- switch (msg->action) {
- case 100969180:
- endGraphics(kCharacterAnna);
- getCharacterCurrentParams(kCharacterAnna)[0] = 1;
- break;
- case 17:
- if (getCharacterCurrentParams(kCharacterAnna)[0] && checkLoc(kCharacterCath, kCarRedSleeping)) {
- getCharacter(kCharacterAnna).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterAnna).characterPosition.position = 8200;
- getCharacter(kCharacterAnna).characterPosition.location = 0;
- CONS_Anna_ReturnToComp4(0, 0, 0, 0);
- }
- break;
- case 18:
- switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
- AnnaCall(&LogicManager::CONS_Anna_WaitRCClear, 0, 0, 0, 0);
- break;
- case 2:
- getCharacter(kCharacterAnna).characterPosition.position = 1540;
- getCharacter(kCharacterAnna).characterPosition.location = 0;
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
- AnnaCall(&LogicManager::CONS_Anna_DoBlockSeqOtis, "127A", 5, 56, 0);
- break;
- case 3:
- getCharacter(kCharacterAnna).characterPosition.location = 1;
- startCycOtis(kCharacterAnna, "127B");
- send(kCharacterAnna, kCharacterWaiter2, 258136010, 0);
- break;
- case 4:
- getCharacter(kCharacterAnna).characterPosition.location = 0;
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
- AnnaCall(&LogicManager::CONS_Anna_DoBlockSeqOtis, "127G", 5, 56, 0);
- break;
- case 5:
- CONS_Anna_ReturnToComp4(0, 0, 0, 0);
- break;
- default:
- return;
- }
- break;
- }
- }
- } else if (msg->action == 12) {
- getCharacter(kCharacterAnna).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterAnna).characterPosition.position = 4070;
- getCharacter(kCharacterAnna).characterPosition.location = 0;
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
- AnnaCall(&LogicManager::CONS_Anna_DoWalk, 5, 850, 0, 0);
- } else if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterAnna)[0]) {
if (getCharacterCurrentParams(kCharacterAnna)[1] || (getCharacterCurrentParams(kCharacterAnna)[1] = _gameTime + 4500, _gameTime != -4500)) {
if (getCharacterCurrentParams(kCharacterAnna)[1] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterAnna)[1] = 0x7FFFFFFF;
}
@@ -3773,6 +4249,67 @@ void LogicManager::HAND_Anna_GoSalon4(HAND_PARAMS) {
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
AnnaCall(&LogicManager::CONS_Anna_WaitRCClear, 0, 0, 0, 0);
}
+
+ break;
+ case 12:
+ getCharacter(kCharacterAnna).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterAnna).characterPosition.position = 4070;
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_DoWalk, 5, 850, 0, 0);
+ break;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterAnna)[0] && checkLoc(kCharacterCath, kCarRedSleeping)) {
+ getCharacter(kCharacterAnna).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterAnna).characterPosition.position = 8200;
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ CONS_Anna_ReturnToComp4(0, 0, 0, 0);
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAnna).characterPosition.position = 1540;
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_DoBlockSeqOtis, "127A", 5, 56, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ startCycOtis(kCharacterAnna, "127B");
+ send(kCharacterAnna, kCharacterWaiter2, 258136010, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterAnna).characterPosition.location = 0;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 5;
+ AnnaCall(&LogicManager::CONS_Anna_DoBlockSeqOtis, "127G", 5, 56, 0);
+ break;
+ case 5:
+ CONS_Anna_ReturnToComp4(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 100969180:
+ endGraphics(kCharacterAnna);
+ getCharacterCurrentParams(kCharacterAnna)[0] = 1;
+ break;
+ case 122288808:
+ startCycOtis(kCharacterAnna, "127E");
+ send(kCharacterAnna, kCharacterAbbot, 203073664, 0);
+ break;
+ case 122358304:
+ startCycOtis(kCharacterAnna, "BLANK");
+ break;
+ default:
+ break;
}
}
@@ -3787,10 +4324,12 @@ void LogicManager::CONS_Anna_ReturnToComp4(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_ReturnToComp4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_DoWalkCathFollowsAnna, 4, 4070, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
AnnaCall(&LogicManager::CONS_Anna_EnterCompCathFollowsAnna, 0, 0, 0, 0);
@@ -3799,6 +4338,10 @@ void LogicManager::HAND_Anna_ReturnToComp4(HAND_PARAMS) {
endGraphics(kCharacterAnna);
CONS_Anna_LetDownHair(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -3937,36 +4480,39 @@ void LogicManager::CONS_Anna_LetDownHair(CONS_PARAMS) {
void LogicManager::HAND_Anna_LetDownHair(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (getCharacterCurrentParams(kCharacterAnna)[2] == 0x7FFFFFFF || getCharacterCurrentParams(kCharacterAnna)[0] >= _gameTime)
- return;
- if (getCharacterCurrentParams(kCharacterAnna)[1] < _gameTime)
- goto LABEL_11;
- if ((cathInCorridor(kCarGreenSleeping) || cathInCorridor(kCarRedSleeping)) && getCharacterCurrentParams(kCharacterAnna)[2] || (getCharacterCurrentParams(kCharacterAnna)[2] = _gameTime, _gameTime != 0)) {
- if (getCharacterCurrentParams(kCharacterAnna)[2] >= _gameTime)
- return;
- LABEL_11:
- getCharacterCurrentParams(kCharacterAnna)[2] = 0x7FFFFFFF;
- }
- if (!cathInCorridor(kCarGreenSleeping) && !cathInCorridor(kCarRedSleeping))
- playDialog(0, "BUMP", -1, 0);
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
- AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventTrainHijacked, 0, 0);
+ if (getCharacterCurrentParams(kCharacterAnna)[2] != 0x7FFFFFFF && getCharacterCurrentParams(kCharacterAnna)[0] < _gameTime) {
+ if (getCharacterCurrentParams(kCharacterAnna)[1] < _gameTime) {
+ getCharacterCurrentParams(kCharacterAnna)[2] = 0x7FFFFFFF;
+ } else if ((cathInCorridor(kCarGreenSleeping) || cathInCorridor(kCarRedSleeping)) && getCharacterCurrentParams(kCharacterAnna)[2] || (getCharacterCurrentParams(kCharacterAnna)[2] = _gameTime, _gameTime != 0)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[2] >= _gameTime)
+ break;
+
+ getCharacterCurrentParams(kCharacterAnna)[2] = 0x7FFFFFFF;
+ }
+
+ if (!cathInCorridor(kCarGreenSleeping) && !cathInCorridor(kCarRedSleeping))
+ playDialog(0, "BUMP", -1, 0);
+
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventTrainHijacked, 0, 0);
+ }
+
break;
case 8:
setDoor(37, kCharacterAnna, 0, 0, 0);
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
AnnaCall(&LogicManager::CONS_Anna_DoDialog, "LIB012", 0, 0, 0);
- return;
+ break;
case 9:
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 4;
AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaKissTrainHijacked, 0, 0);
- return;
+ break;
case 12:
setDoor(37, kCharacterAnna, 0, 10, 9);
_gameTimeTicksDelta = 1;
getCharacterCurrentParams(kCharacterAnna)[0] = _gameTime + 4500;
getCharacterCurrentParams(kCharacterAnna)[1] = _gameTime + 9000;
- return;
+ break;
case 18:
switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
case 1:
@@ -3985,11 +4531,12 @@ void LogicManager::HAND_Anna_LetDownHair(HAND_PARAMS) {
send(kCharacterAnna, kCharacterMaster, 139254416, 0);
break;
default:
- return;
+ break;
}
- return;
+
+ break;
default:
- return;
+ break;
}
}
@@ -4004,18 +4551,21 @@ void LogicManager::CONS_Anna_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_StartPart5(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterAnna);
- getCharacter(kCharacterAnna).characterPosition.car = 1;
- getCharacter(kCharacterAnna).characterPosition.position = 3969;
- getCharacter(kCharacterAnna).characterPosition.location = 1;
- getCharacter(kCharacterAnna).clothes = 3;
- getCharacter(kCharacterAnna).inventoryItem = 0;
- setDoor(45, kCharacterCath, 0, 255, 255);
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Anna_TiedUp(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterAnna);
+ getCharacter(kCharacterAnna).characterPosition.car = 1;
+ getCharacter(kCharacterAnna).characterPosition.position = 3969;
+ getCharacter(kCharacterAnna).characterPosition.location = 1;
+ getCharacter(kCharacterAnna).clothes = 3;
+ getCharacter(kCharacterAnna).inventoryItem = 0;
+ setDoor(45, kCharacterCath, 0, 255, 255);
+ break;
+ default:
+ break;
}
}
@@ -4030,7 +4580,8 @@ void LogicManager::CONS_Anna_TiedUp(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_TiedUp(HAND_PARAMS) {
- if (msg->action == 18) {
+ switch (msg->action) {
+ case 18:
if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
if (_gameProgress[kProgressFieldC]) {
if (_gameEvents[kEventAnnaKissTrainHijacked]) {
@@ -4047,9 +4598,14 @@ void LogicManager::HAND_Anna_TiedUp(HAND_PARAMS) {
bumpCath(kCarBaggageRear, 88, 255);
CONS_Anna_Outside(0, 0, 0, 0);
}
- } else if (msg->action == 272177921) {
+
+ break;
+ case 272177921:
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaBaggageTies, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -4064,8 +4620,13 @@ void LogicManager::CONS_Anna_Outside(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_Outside(HAND_PARAMS) {
- if (msg->action == 158480160)
+ switch (msg->action) {
+ case 158480160:
CONS_Anna_ReadyToScore(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Anna_ReadyToScore(CONS_PARAMS) {
@@ -4085,6 +4646,7 @@ void LogicManager::HAND_Anna_ReadyToScore(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterAnna)[1] = 1;
_gameTimeTicksDelta = 0;
}
+
break;
case 8:
case 9:
@@ -4105,6 +4667,7 @@ void LogicManager::HAND_Anna_ReadyToScore(HAND_PARAMS) {
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_SaveGame, 1, 0, 0, 0);
}
+
break;
case 18:
switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
@@ -4124,10 +4687,13 @@ void LogicManager::HAND_Anna_ReadyToScore(HAND_PARAMS) {
case 3:
CONS_Anna_Kidnapped(0, 0, 0, 0);
break;
+ default:
+ break;
}
+
break;
default:
- return;
+ break;
}
}
@@ -4142,26 +4708,33 @@ void LogicManager::CONS_Anna_Kidnapped(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_Kidnapped(HAND_PARAMS) {
- if (msg->action == 17) {
- if (inDiningRoom(kCharacterCath) && cathHasItem(kItemFirebird))
- goto LABEL_6;
+ switch (msg->action) {
+ case 17:
+ if (inDiningRoom(kCharacterCath) && cathHasItem(kItemFirebird)) {
+ CONS_Anna_FinalSequence(0, 0, 0, 0);
+ break;
+ }
+
if (!inSalon(kCharacterCath))
- return;
+ break;
+
if (cathHasItem(kItemFirebird)) {
- LABEL_6:
CONS_Anna_FinalSequence(0, 0, 0, 0);
- return;
+ break;
}
_gameTime = 4920300;
- if (_gameInventory[18].location == 4) {
+
+ if (_gameInventory[kItemFirebird].location == 4) {
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventKronosHostageAnna, 0, 0);
} else {
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventKronosHostageAnnaNoFirebird, 0, 0);
}
- } else if (msg->action == 18) {
+
+ break;
+ case 18:
if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
playNIS(kEventKronosHostageAnnaNoFirebird);
endGame(3, 42, 0, 1);
@@ -4171,6 +4744,10 @@ void LogicManager::HAND_Anna_Kidnapped(HAND_PARAMS) {
playDialog(kCharacterAnna, "Mus024", 16, 0);
CONS_Anna_Waiting(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -4199,6 +4776,7 @@ void LogicManager::HAND_Anna_Waiting(HAND_PARAMS) {
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventKahinaPunch, 0, 0);
}
+
break;
case 18:
if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
@@ -4213,11 +4791,15 @@ void LogicManager::HAND_Anna_Waiting(HAND_PARAMS) {
} else if (checkLoc(kCharacterCath, kCarBaggage)) {
playNIS(kEventKahinaPunchBaggageCar);
}
- endGame(0, 1, 0, 1);
+
+ endGame(0, 1, 0, true);
} else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
playNIS(kEventKahinaPunch);
- endGame(0, 1, 0, 1);
+ endGame(0, 1, 0, true);
}
+
+ break;
+ default:
break;
}
}
@@ -4233,54 +4815,62 @@ void LogicManager::CONS_Anna_FinalSequence(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_FinalSequence(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
- case 1:
- if (whoRunningDialog(kCharacterAnna))
- fadeDialog(kCharacterAnna);
- playNIS(kEventKronosBringFirebird);
- bumpCathCloseUp(kItemFirebird);
- playDialog(1, "Mus025", 16, 0);
- break;
- case 2:
- playNIS(kEventKahinaPunch);
- endGame(0, 1, 0, 1);
- break;
- case 3:
- _gameProgress[kProgressIsEggOpen] = 1;
- if (whoRunningDialog(kCharacterAnna))
- fadeDialog(kCharacterAnna);
- playNIS(kEventKronosOpenFirebird);
- bumpCath(kCarRestaurant, 3, 255);
- CONS_Anna_OpenFirebird(0, 0, 0, 0);
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAnna)[0] || (getCharacterCurrentParams(kCharacterAnna)[0] = _currentGameSessionTicks + 450, _currentGameSessionTicks != -450)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[0] >= _currentGameSessionTicks)
break;
- }
- } else if (msg->action == 205294778) {
- _gameTime = 4929300;
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
- AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventKronosOpenFirebird, 0, 0);
+
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0x7FFFFFFF;
}
- } else if (msg->action == 12) {
+
+ playDialog(0, "Kro5001", 16, 0);
+ break;
+ case 2:
+ playDialog(0, "Kro5002", 16, 0);
+ _gameTime = 4929300;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventKahinaPunch, 0, 0);
+ break;
+ case 12:
_gameTime = 4923000;
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventKronosBringFirebird, 0, 0);
- } else if (msg->action) {
- if (msg->action == 2) {
- playDialog(0, "Kro5002", 16, 0);
- _gameTime = 4929300;
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
- AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventKahinaPunch, 0, 0);
- }
- } else {
- if (getCharacterCurrentParams(kCharacterAnna)[0] || (getCharacterCurrentParams(kCharacterAnna)[0] = _currentGameSessionTicks + 450, _currentGameSessionTicks != -450)) {
- if (getCharacterCurrentParams(kCharacterAnna)[0] >= _currentGameSessionTicks)
- return;
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8]) {
+ case 1:
+ if (whoRunningDialog(kCharacterAnna))
+ fadeDialog(kCharacterAnna);
- getCharacterCurrentParams(kCharacterAnna)[0] = 0x7FFFFFFF;
+ playNIS(kEventKronosBringFirebird);
+ bumpCathCloseUp(kItemFirebird);
+ playDialog(1, "Mus025", 16, 0);
+ break;
+ case 2:
+ playNIS(kEventKahinaPunch);
+ endGame(0, 1, 0, true);
+ break;
+ case 3:
+ _gameProgress[kProgressIsEggOpen] = 1;
+
+ if (whoRunningDialog(kCharacterAnna))
+ fadeDialog(kCharacterAnna);
+
+ playNIS(kEventKronosOpenFirebird);
+ bumpCath(kCarRestaurant, 3, 255);
+ CONS_Anna_OpenFirebird(0, 0, 0, 0);
+ break;
}
- playDialog(0, "Kro5001", 16, 0);
+ break;
+ case 205294778:
+ _gameTime = 4929300;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventKronosOpenFirebird, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -4295,20 +4885,19 @@ void LogicManager::CONS_Anna_OpenFirebird(CONS_PARAMS) {
}
void LogicManager::HAND_Anna_OpenFirebird(HAND_PARAMS) {
- if (msg->action > 18) {
- if (msg->action == 224309120) {
- _gameProgress[kProgressIsEggOpen] = 0;
- _gameTime = 4941000;
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
- AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventKronosGiveFirebird, 0, 0);
- } else if (msg->action == 270751616) {
- _gameProgress[kProgressIsEggOpen] = 0;
- killGracePeriod();
- _gameTime = 4941000;
- getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
- AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventFinalSequence, 0, 0);
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAnna)[0] || (getCharacterCurrentParams(kCharacterAnna)[0] = _currentGameSessionTicks + 180, _currentGameSessionTicks != -180)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[0] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterAnna)[0] = 0x7FFFFFFF;
}
- } else if (msg->action == 18) {
+
+ playDialog(kCharacterClerk, "LIB069", 16, 0);
+ endGame(0, 0, 0, true);
+ break;
+ case 18:
if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
playNIS(kEventCathCloseEggNoBackground);
playNIS(kEventKronosGiveFirebird);
@@ -4323,16 +4912,23 @@ void LogicManager::HAND_Anna_OpenFirebird(HAND_PARAMS) {
takeCathItem(kItemWhistle);
winGame();
}
- } else if (msg->action == 0) {
- if (getCharacterCurrentParams(kCharacterAnna)[0] || (getCharacterCurrentParams(kCharacterAnna)[0] = _currentGameSessionTicks + 180, _currentGameSessionTicks != -180)) {
- if (getCharacterCurrentParams(kCharacterAnna)[0] >= _currentGameSessionTicks)
- return;
-
- getCharacterCurrentParams(kCharacterAnna)[0] = 0x7FFFFFFF;
- }
- playDialog(kCharacterClerk, "LIB069", 16, 0);
- endGame(0, 0, 0, true);
+ break;
+ case 224309120:
+ _gameProgress[kProgressIsEggOpen] = 0;
+ _gameTime = 4941000;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventKronosGiveFirebird, 0, 0);
+ break;
+ case 270751616:
+ _gameProgress[kProgressIsEggOpen] = 0;
+ killGracePeriod();
+ _gameTime = 4941000;
+ getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
+ AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventFinalSequence, 0, 0);
+ break;
+ default:
+ break;
}
}
Commit: 2ca65f13795de57071ae309064aa68c07ea81fef
https://github.com/scummvm/scummvm/commit/2ca65f13795de57071ae309064aa68c07ea81fef
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Mitchell logic
Changed paths:
engines/lastexpress/characters/mitchell.cpp
diff --git a/engines/lastexpress/characters/mitchell.cpp b/engines/lastexpress/characters/mitchell.cpp
index 143e510ef5c..20f0d55a414 100644
--- a/engines/lastexpress/characters/mitchell.cpp
+++ b/engines/lastexpress/characters/mitchell.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_Mitchell(int chapter) {
CONS_Mitchell_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -63,8 +63,13 @@ void LogicManager::CONS_Mitchell_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Mitchell_Birth(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_Mitchell_OhBabyBaby(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Mitchell_StartPart2(CONS_PARAMS) {
@@ -78,8 +83,13 @@ void LogicManager::CONS_Mitchell_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Mitchell_StartPart2(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_Mitchell_OhBabyBaby(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Mitchell_StartPart3(CONS_PARAMS) {
@@ -93,8 +103,13 @@ void LogicManager::CONS_Mitchell_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Mitchell_StartPart3(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_Mitchell_OhBabyBaby(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Mitchell_StartPart4(CONS_PARAMS) {
@@ -108,8 +123,13 @@ void LogicManager::CONS_Mitchell_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Mitchell_StartPart4(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_Mitchell_OhBabyBaby(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Mitchell_StartPart5(CONS_PARAMS) {
@@ -123,8 +143,13 @@ void LogicManager::CONS_Mitchell_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Mitchell_StartPart5(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
CONS_Mitchell_OhBabyBaby(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Mitchell_OhBabyBaby(CONS_PARAMS) {
@@ -145,6 +170,7 @@ void LogicManager::HAND_Mitchell_OhBabyBaby(HAND_PARAMS) {
_mitchellFlag = true;
startSeqOtis(kCharacterMitchell, _mitchellSequence.c_str());
}
+
break;
case 3:
startSeqOtis(kCharacterMitchell, _mitchellSequence.c_str());
Commit: 52cf72d4e94cfbcdb41fb7a77dec4281fcd2eaa9
https://github.com/scummvm/scummvm/commit/52cf72d4e94cfbcdb41fb7a77dec4281fcd2eaa9
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Cook logic
Changed paths:
engines/lastexpress/characters/cook.cpp
diff --git a/engines/lastexpress/characters/cook.cpp b/engines/lastexpress/characters/cook.cpp
index 90c43e4b2bc..661a8bedf11 100644
--- a/engines/lastexpress/characters/cook.cpp
+++ b/engines/lastexpress/characters/cook.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_Cook(int chapter) {
CONS_Cook_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -71,12 +71,17 @@ void LogicManager::CONS_Cook_DoSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Cook_DoSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
getCharacter(kCharacterCook).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCook, _functionsAbbot[getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall]]);
fedEx(kCharacterCook, kCharacterCook, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterCook, (char *)&getCharacterCurrentParams(kCharacterCook)[0]);
+ break;
+ default:
+ break;
}
}
@@ -93,12 +98,17 @@ void LogicManager::CONS_Cook_DoDialog(CONS_PARAMS) {
}
void LogicManager::HAND_Cook_DoDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterCook).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCook, _functionsAbbot[getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall]]);
fedEx(kCharacterCook, kCharacterCook, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterCook, (char *)&getCharacterCurrentParams(kCharacterCook)[0], -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -113,7 +123,8 @@ void LogicManager::CONS_Cook_UptrainVersion(CONS_PARAMS) {
}
void LogicManager::HAND_Cook_UptrainVersion(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
startCycOtis(kCharacterCook, "308A");
blockView(kCharacterCook, kCarRestaurant, 75);
blockView(kCharacterCook, kCarRestaurant, 78);
@@ -128,7 +139,9 @@ void LogicManager::HAND_Cook_UptrainVersion(HAND_PARAMS) {
getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] = 3;
CookCall(&LogicManager::CONS_Cook_DoSeqOtis, "308B", 0, 0, 0);
}
- } else if (msg->action == 17) {
+
+ break;
+ case 17:
if (!inKitchen(kCharacterCath)) {
endGraphics(kCharacterCook);
getCharacter(kCharacterCook).currentCall--;
@@ -147,7 +160,7 @@ void LogicManager::HAND_Cook_UptrainVersion(HAND_PARAMS) {
fedEx(kCharacterCook, kCharacterCook, 18, 0);
}
- return;
+ break;
}
playDialog(kCharacterCook, "KIT1011A", -1, 0);
@@ -165,7 +178,9 @@ void LogicManager::HAND_Cook_UptrainVersion(HAND_PARAMS) {
}
}
}
- } else if (msg->action == 18) {
+
+ break;
+ case 18:
if (getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8]) {
if (getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] > 2) {
if (getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] == 3) {
@@ -179,6 +194,10 @@ void LogicManager::HAND_Cook_UptrainVersion(HAND_PARAMS) {
CookCall(&LogicManager::CONS_Cook_DoSeqOtis, "308B", 0, 0, 0);
}
}
+
+ break;
+ default:
+ break;
}
}
@@ -193,7 +212,8 @@ void LogicManager::CONS_Cook_DowntrainVersion(CONS_PARAMS) {
}
void LogicManager::HAND_Cook_DowntrainVersion(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
startCycOtis(kCharacterCook, "308A");
blockView(kCharacterCook, kCarRestaurant, 75);
blockView(kCharacterCook, kCarRestaurant, 78);
@@ -209,13 +229,14 @@ void LogicManager::HAND_Cook_DowntrainVersion(HAND_PARAMS) {
getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] = 3;
CookCall(&LogicManager::CONS_Cook_DoSeqOtis, "308B", 0, 0, 0);
}
- } else if (msg->action == 17) {
+
+ break;
+ case 17:
if (!inKitchen(kCharacterCath)) {
endGraphics(kCharacterCath);
getCharacter(kCharacterCook).currentCall--;
_engine->getMessageManager()->setMessageHandle(8, _functionsCook[getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall]]);
fedEx(kCharacterCook, kCharacterCook, 18, 0);
- return;
} else {
if (checkCathDir(kCarRestaurant, 80)) {
startCycOtis(kCharacterCook, "308D");
@@ -229,7 +250,7 @@ void LogicManager::HAND_Cook_DowntrainVersion(HAND_PARAMS) {
fedEx(kCharacterCook, kCharacterCook, 18, 0);
}
- return;
+ break;
}
playDialog(kCharacterCook, "KIT1011A", -1, 0);
@@ -247,7 +268,9 @@ void LogicManager::HAND_Cook_DowntrainVersion(HAND_PARAMS) {
}
}
}
- } else if (msg->action == 18) {
+
+ break;
+ case 18:
if (getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8]) {
if (getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] > 2) {
if (getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] == 3) {
@@ -261,6 +284,10 @@ void LogicManager::HAND_Cook_DowntrainVersion(HAND_PARAMS) {
CookCall(&LogicManager::CONS_Cook_DoSeqOtis, "308B", 0, 0, 0);
}
}
+
+ break;
+ default:
+ break;
}
}
@@ -275,16 +302,22 @@ void LogicManager::CONS_Cook_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Cook_Birth(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterCook)[0]) {
getCharacterCurrentParams(kCharacterCook)[0] = 1;
CONS_Cook_InKitchenDinner(0, 0, 0, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
getCharacter(kCharacterCook).characterPosition.car = kCarRestaurant;
getCharacter(kCharacterCook).characterPosition.position = 5900;
getCharacter(kCharacterCook).characterPosition.location = 0;
_gameProgress[kProgressField4C] = 0;
+ break;
+ default:
+ break;
}
}
@@ -330,6 +363,7 @@ void LogicManager::HAND_Cook_InKitchenDinner(HAND_PARAMS) {
CookCall(&LogicManager::CONS_Cook_DoDialog, "ZFX1012", 0, 0, 0);
}
}
+
break;
case 18:
if (getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] == 1) {
@@ -337,6 +371,7 @@ void LogicManager::HAND_Cook_InKitchenDinner(HAND_PARAMS) {
} else if (getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] >= 2 && getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] <= 3) {
getCharacterCurrentParams(kCharacterCook)[2] = getCharacterCurrentParams(kCharacterCook)[2] == 0;
}
+
break;
case 101632192:
CONS_Cook_LockUp(0, 0, 0, 0);
@@ -361,14 +396,19 @@ void LogicManager::CONS_Cook_LockUp(CONS_PARAMS) {
}
void LogicManager::HAND_Cook_LockUp(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] = 1;
CookCall(&LogicManager::CONS_Cook_DoDialog, "WAT1200", 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
getCharacter(kCharacterCook).characterPosition.car = kCarRestaurant;
getCharacter(kCharacterCook).characterPosition.position = 3650;
getCharacter(kCharacterCook).characterPosition.location = 0;
endGraphics(kCharacterCook);
+ break;
+ default:
+ break;
}
}
@@ -383,15 +423,20 @@ void LogicManager::CONS_Cook_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Cook_StartPart2(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_Cook_InKitchenBreakfast(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
endGraphics(kCharacterCook);
getCharacter(kCharacterCook).characterPosition.car = kCarRestaurant;
getCharacter(kCharacterCook).characterPosition.position = 5900;
getCharacter(kCharacterCook).characterPosition.location = 0;
getCharacter(kCharacterCook).inventoryItem = kItemNone;
_gameProgress[kProgressField4C] = 1;
+ break;
+ default:
+ break;
}
}
@@ -406,43 +451,41 @@ void LogicManager::CONS_Cook_InKitchenBreakfast(CONS_PARAMS) {
}
void LogicManager::HAND_Cook_InKitchenBreakfast(HAND_PARAMS) {
- if (msg->action <= 18) {
- switch (msg->action) {
- case 0:
- if (getCharacterCurrentParams(kCharacterCook)[2] || (getCharacterCurrentParams(kCharacterCook)[2] = _gameTime + getCharacterCurrentParams(kCharacterCook)[0], _gameTime + getCharacterCurrentParams(kCharacterCook)[0] != 0)) {
- if (getCharacterCurrentParams(kCharacterCook)[2] >= _gameTime)
- return;
-
- getCharacterCurrentParams(kCharacterCook)[2] = 0x7FFFFFFF;
- }
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterCook)[2] || (getCharacterCurrentParams(kCharacterCook)[2] = _gameTime + getCharacterCurrentParams(kCharacterCook)[0], _gameTime + getCharacterCurrentParams(kCharacterCook)[0] != 0)) {
+ if (getCharacterCurrentParams(kCharacterCook)[2] >= _gameTime)
+ break;
- playDialog(0, "LIB122", getVolume(kCharacterCook), 0);
- getCharacterCurrentParams(kCharacterCook)[0] = 225 * (4 * rnd(30) + 120);
- getCharacterCurrentParams(kCharacterCook)[2] = 0;
- break;
- case 12:
- getCharacterCurrentParams(kCharacterCook)[0] = 225 * (4 * rnd(30) + 120);
- break;
- case 17:
- if (inKitchen(kCharacterCath)) {
- if (getCharacterCurrentParams(kCharacterCook)[1]) {
- getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] = 1;
- CookCall(&LogicManager::CONS_Cook_DoDialog, "ZFX1011", 0, 0, 0);
- } else {
- getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] = 2;
- CookCall(&LogicManager::CONS_Cook_DoDialog, "ZFX1012", 0, 0, 0);
- }
+ getCharacterCurrentParams(kCharacterCook)[2] = 0x7FFFFFFF;
+ }
+
+ playDialog(0, "LIB122", getVolume(kCharacterCook), 0);
+ getCharacterCurrentParams(kCharacterCook)[0] = 225 * (4 * rnd(30) + 120);
+ getCharacterCurrentParams(kCharacterCook)[2] = 0;
+ break;
+ case 12:
+ getCharacterCurrentParams(kCharacterCook)[0] = 225 * (4 * rnd(30) + 120);
+ break;
+ case 17:
+ if (inKitchen(kCharacterCath)) {
+ if (getCharacterCurrentParams(kCharacterCook)[1]) {
+ getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] = 1;
+ CookCall(&LogicManager::CONS_Cook_DoDialog, "ZFX1011", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] = 2;
+ CookCall(&LogicManager::CONS_Cook_DoDialog, "ZFX1012", 0, 0, 0);
}
+ }
- break;
- case 18:
- if (getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] && getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] <= 2)
- getCharacterCurrentParams(kCharacterCook)[1] = getCharacterCurrentParams(kCharacterCook)[1] == 0;
+ break;
+ case 18:
+ if (getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] && getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] <= 2)
+ getCharacterCurrentParams(kCharacterCook)[1] = getCharacterCurrentParams(kCharacterCook)[1] == 0;
- break;
- default:
- return;
- }
+ break;
+ default:
+ break;
}
}
@@ -457,13 +500,18 @@ void LogicManager::CONS_Cook_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Cook_StartPart3(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_Cook_InKitchenLunch(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
endGraphics(kCharacterCook);
getCharacter(kCharacterCook).characterPosition.car = kCarRestaurant;
getCharacter(kCharacterCook).characterPosition.position = 5900;
_gameProgress[kProgressField4C] = 0;
+ break;
+ default:
+ break;
}
}
@@ -487,7 +535,7 @@ void LogicManager::HAND_Cook_InKitchenLunch(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterCook)[0] = 0;
}
- return;
+ break;
}
getCharacterCurrentParams(kCharacterCook)[3] = 0x7FFFFFFF;
@@ -551,15 +599,20 @@ void LogicManager::CONS_Cook_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Cook_StartPart4(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_Cook_InKitchenDinner2(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
endGraphics(kCharacterCook);
getCharacter(kCharacterCook).characterPosition.car = kCarRestaurant;
getCharacter(kCharacterCook).characterPosition.position = 5900;
getCharacter(kCharacterCook).characterPosition.location = 0;
getCharacter(kCharacterCook).inventoryItem = kItemNone;
_gameProgress[kProgressField4C] = 1;
+ break;
+ default:
+ break;
}
}
@@ -578,7 +631,7 @@ void LogicManager::HAND_Cook_InKitchenDinner2(HAND_PARAMS) {
case 0:
if (getCharacterCurrentParams(kCharacterCook)[2] || (getCharacterCurrentParams(kCharacterCook)[2] = _gameTime + getCharacterCurrentParams(kCharacterCook)[0], _gameTime + getCharacterCurrentParams(kCharacterCook)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterCook)[2] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterCook)[2] = 0x7FFFFFFF;
}
@@ -623,8 +676,13 @@ void LogicManager::CONS_Cook_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Cook_StartPart5(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterCook);
+ break;
+ default:
+ break;
+ }
}
void (LogicManager::*LogicManager::_functionsCook[])(HAND_PARAMS) = {
Commit: 00c39cabf245647465c35090ab348118992e6a7b
https://github.com/scummvm/scummvm/commit/00c39cabf245647465c35090ab348118992e6a7b
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Monsieur logic
Changed paths:
engines/lastexpress/characters/monsieur.cpp
diff --git a/engines/lastexpress/characters/monsieur.cpp b/engines/lastexpress/characters/monsieur.cpp
index d57d41d49ed..fbafb29faf4 100644
--- a/engines/lastexpress/characters/monsieur.cpp
+++ b/engines/lastexpress/characters/monsieur.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_Monsieur(int chapter) {
CONS_Monsieur_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -69,19 +69,25 @@ void LogicManager::CONS_Monsieur_DebugWalks(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_DebugWalks(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterMonsieur).characterPosition.position = 0;
- getCharacter(kCharacterMonsieur).characterPosition.location = 0;
- getCharacter(kCharacterMonsieur).characterPosition.car = kCarGreenSleeping;
- getCharacterCurrentParams(kCharacterMonsieur)[0] = 10000;
- }
- } else if (walk(kCharacterMonsieur, kCarGreenSleeping, getCharacterCurrentParams(kCharacterMonsieur)[0])) {
- if (getCharacterCurrentParams(kCharacterMonsieur)[0] == 10000) {
- getCharacterCurrentParams(kCharacterMonsieur)[0] = 0;
- } else {
- getCharacterCurrentParams(kCharacterMonsieur)[0] = 10000;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterMonsieur, kCarGreenSleeping, getCharacterCurrentParams(kCharacterMonsieur)[0])) {
+ if (getCharacterCurrentParams(kCharacterMonsieur)[0] == 10000) {
+ getCharacterCurrentParams(kCharacterMonsieur)[0] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterMonsieur)[0] = 10000;
+ }
}
+
+ break;
+ case 12:
+ getCharacter(kCharacterMonsieur).characterPosition.position = 0;
+ getCharacter(kCharacterMonsieur).characterPosition.location = 0;
+ getCharacter(kCharacterMonsieur).characterPosition.car = kCarGreenSleeping;
+ getCharacterCurrentParams(kCharacterMonsieur)[0] = 10000;
+ break;
+ default:
+ break;
}
}
@@ -98,12 +104,17 @@ void LogicManager::CONS_Monsieur_DoDialog(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_DoDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterMonsieur).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, _functionsMonsieur[getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall]]);
fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterMonsieur, (char *)&getCharacterCurrentParams(kCharacterMonsieur)[0], -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -120,12 +131,17 @@ void LogicManager::CONS_Monsieur_DoSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_DoSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
getCharacter(kCharacterMonsieur).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, _functionsMonsieur[getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall]]);
fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterMonsieur, (char *)&getCharacterCurrentParams(kCharacterMonsieur)[0]);
+ break;
+ default:
+ break;
}
}
@@ -142,10 +158,11 @@ void LogicManager::CONS_Monsieur_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_DoWait(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterMonsieur)[1] || (getCharacterCurrentParams(kCharacterMonsieur)[1] = _gameTime + getCharacterCurrentParams(kCharacterMonsieur)[0], _gameTime + getCharacterCurrentParams(kCharacterMonsieur)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterMonsieur)[1] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterMonsieur)[1] = 0x7FFFFFFF;
}
@@ -153,6 +170,9 @@ void LogicManager::HAND_Monsieur_DoWait(HAND_PARAMS) {
getCharacter(kCharacterMonsieur).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, _functionsMonsieur[getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall]]);
fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -172,15 +192,20 @@ void LogicManager::CONS_Monsieur_DoBlockSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_DoBlockSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseView(kCharacterMonsieur, getCharacterCurrentParams(kCharacterMonsieur)[3], getCharacterCurrentParams(kCharacterMonsieur)[4]);
getCharacter(kCharacterMonsieur).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, _functionsMonsieur[getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall]]);
fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterMonsieur, (char *)&getCharacterCurrentParams(kCharacterMonsieur)[0]);
blockView(kCharacterMonsieur, getCharacterCurrentParams(kCharacterMonsieur)[3], getCharacterCurrentParams(kCharacterMonsieur)[4]);
+ break;
+ default:
+ break;
}
}
@@ -199,15 +224,20 @@ void LogicManager::CONS_Monsieur_DoCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_DoCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterMonsieur, getCharacterCurrentParams(kCharacterMonsieur)[3]);
getCharacter(kCharacterMonsieur).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, _functionsMonsieur[getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall]]);
fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterMonsieur, (char *)&getCharacterCurrentParams(kCharacterMonsieur)[0]);
blockAtDoor(kCharacterMonsieur, getCharacterCurrentParams(kCharacterMonsieur)[3]);
+ break;
+ default:
+ break;
}
}
@@ -226,14 +256,16 @@ void LogicManager::CONS_Monsieur_DoEnterCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_DoEnterCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterMonsieur, getCharacterCurrentParams(kCharacterMonsieur)[3]);
getCharacter(kCharacterMonsieur).characterPosition.position = 6470;
getCharacter(kCharacterMonsieur).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, _functionsMonsieur[getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall]]);
fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterMonsieur, (char *)&getCharacterCurrentParams(kCharacterMonsieur)[0]);
blockAtDoor(kCharacterMonsieur, getCharacterCurrentParams(kCharacterMonsieur)[3]);
getCharacter(kCharacterMonsieur).characterPosition.location = 1;
@@ -242,6 +274,10 @@ void LogicManager::HAND_Monsieur_DoEnterCorrOtis(HAND_PARAMS) {
playDialog(0, "BUMP", -1, 0);
bumpCathFDoor(34);
}
+
+ break;
+ default:
+ break;
}
}
@@ -256,16 +292,22 @@ void LogicManager::CONS_Monsieur_FinishSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_FinishSeqOtis(HAND_PARAMS) {
- if (msg->action == 0) {
- if (getCharacter(kCharacterMonsieur).direction == 4)
- return;
- goto LABEL_5;
- }
- if (msg->action == 3) {
- LABEL_5:
+ switch (msg->action) {
+ case 0:
+ if (getCharacter(kCharacterMonsieur).direction == 4) {
+ getCharacter(kCharacterMonsieur).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, _functionsMonsieur[getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall]]);
+ fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
+ }
+
+ break;
+ case 3:
getCharacter(kCharacterMonsieur).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, _functionsMonsieur[getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall]]);
fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -280,16 +322,18 @@ void LogicManager::CONS_Monsieur_WaitRCClear(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_WaitRCClear(HAND_PARAMS) {
- if (msg->action == 0) {
- if (!rcClear())
- return;
- goto LABEL_7;
- }
- if (msg->action == 12 && rcClear()) {
- LABEL_7:
- getCharacter(kCharacterMonsieur).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, _functionsMonsieur[getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall]]);
- fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
+ switch (msg->action) {
+ case 0:
+ case 12:
+ if (rcClear()) {
+ getCharacter(kCharacterMonsieur).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, _functionsMonsieur[getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall]]);
+ fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -309,28 +353,28 @@ void LogicManager::CONS_Monsieur_DoWalk(CONS_PARAMS) {
void LogicManager::HAND_Monsieur_DoWalk(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (walk(kCharacterMonsieur, getCharacterCurrentParams(kCharacterMonsieur)[0], getCharacterCurrentParams(kCharacterMonsieur)[1]))
- goto LABEL_11;
+ case 12:
+ if (walk(kCharacterMonsieur, getCharacterCurrentParams(kCharacterMonsieur)[0], getCharacterCurrentParams(kCharacterMonsieur)[1])) {
+ getCharacter(kCharacterMonsieur).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, _functionsMonsieur[getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall]]);
+ fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
+ }
+
break;
case 5:
- if (cathHasItem(kItemPassengerList) && _gameTime > 0x109DE8)
+ if (cathHasItem(kItemPassengerList) && _gameTime > 1089000) {
playDialog(kCharacterCath, "CAT1022", -1, 0);
- else
+ } else {
playCathExcuseMe();
+ }
+
break;
case 6:
playChrExcuseMe(kCharacterMonsieur, kCharacterCath, 0);
break;
- case 12:
- if (walk(kCharacterMonsieur, getCharacterCurrentParams(kCharacterMonsieur)[0], getCharacterCurrentParams(kCharacterMonsieur)[1])) {
- LABEL_11:
- getCharacter(kCharacterMonsieur).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, _functionsMonsieur[getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall]]);
- fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
- }
- break;
+
default:
- return;
+ break;
}
}
@@ -347,73 +391,83 @@ void LogicManager::CONS_Monsieur_GoDining(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_GoDining(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- if (getCharacter(kCharacterMonsieur).callParams[getCharacter(kCharacterMonsieur).currentCall].parameters[0]) {
- if (_gameProgress[kProgressChapter] == 4) {
- setDoor(34, kCharacterCath, 0, 10, 9);
- getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 1;
- MonsieurCall(&LogicManager::CONS_Monsieur_DoCorrOtis, "607Hc", 0x22, 0, 0);
- } else {
- setDoor(34, kCharacterCath, 1, 255, 255);
- getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 2;
- MonsieurCall(&LogicManager::CONS_Monsieur_DoCorrOtis, "607Dc", 0x22, 0, 0);
- }
+ switch (msg->action) {
+ case 0:
+ if (getCharacterParams(kCharacterMonsieur, 8)[0] && getCharacterParams(kCharacterMonsieur, 8)[1]) {
+ getCharacterParams(kCharacterMonsieur, 8)[1] = 0;
+ getCharacterParams(kCharacterMonsieur, 8)[0] = 0;
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 5;
+ MonsieurCall(&LogicManager::CONS_Monsieur_WaitRCClear, 0, 0, 0, 0);
+ }
+
+ break;
+ case 12:
+ if (getCharacterCurrentParams(kCharacterMonsieur)[0]) {
+ if (_gameProgress[kProgressChapter] == 4) {
+ setDoor(34, kCharacterCath, 0, 10, 9);
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 1;
+ MonsieurCall(&LogicManager::CONS_Monsieur_DoCorrOtis, "607Hc", 34, 0, 0);
} else {
- getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 3;
- MonsieurCall(&LogicManager::CONS_Monsieur_DoCorrOtis, "607Bc", 0x22, 0, 0);
+ setDoor(34, kCharacterCath, 1, 255, 255);
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 2;
+ MonsieurCall(&LogicManager::CONS_Monsieur_DoCorrOtis, "607Dc", 34, 0, 0);
}
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8]) {
- case 1:
- goto LABEL_15;
- case 2:
+ } else {
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 3;
+ MonsieurCall(&LogicManager::CONS_Monsieur_DoCorrOtis, "607Bc", 34, 0, 0);
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8]) {
+ case 1:
+ case 2:
+ case 3:
+ if (getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] == 2) {
setDoor(34, kCharacterCath, 2, 255, 255);
- goto LABEL_15;
- case 3:
+ } else if (getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] == 3) {
setDoor(34, kCharacterCath, 0, 10, 9);
- LABEL_15:
- setDoor(50, kCharacterCath, 0, 10, 9);
- getCharacter(kCharacterMonsieur).characterPosition.location = 0;
- send(kCharacterMonsieur, kCharacterFrancois, 101107728, 0);
- getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 4;
- MonsieurCall(&LogicManager::CONS_Monsieur_DoWalk, 5, 0x352, 0, 0);
- break;
- case 4:
- endGraphics(kCharacterMonsieur);
- break;
- case 5:
- getCharacter(kCharacterMonsieur).characterPosition.position = 1540;
- getCharacter(kCharacterMonsieur).characterPosition.location = 0;
- getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 6;
- MonsieurCall(&LogicManager::CONS_Monsieur_DoSeqOtis, "812US", 0, 0, 0);
- break;
- case 6:
- if (_gameProgress[kProgressChapter] == 1) {
- playDialog(kCharacterMonsieur, "MRB1075", -1, 60);
- } else if (_gameProgress[kProgressChapter] == 3) {
- playDialog(kCharacterMonsieur, "MRB3101", -1, 0);
- }
-
- getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 7;
- MonsieurCall(&LogicManager::CONS_Monsieur_DoOtis5008A, 0, 0, 0, 0);
- break;
- case 7:
- getCharacter(kCharacterMonsieur).characterPosition.location = 1;
+ }
- getCharacter(kCharacterMonsieur).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, _functionsMonsieur[getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall]]);
- fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
- break;
- default:
- return;
+ setDoor(50, kCharacterCath, 0, 10, 9);
+ getCharacter(kCharacterMonsieur).characterPosition.location = 0;
+ send(kCharacterMonsieur, kCharacterFrancois, 101107728, 0);
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 4;
+ MonsieurCall(&LogicManager::CONS_Monsieur_DoWalk, 5, 0x352, 0, 0);
+ break;
+ case 4:
+ endGraphics(kCharacterMonsieur);
+ break;
+ case 5:
+ getCharacter(kCharacterMonsieur).characterPosition.position = 1540;
+ getCharacter(kCharacterMonsieur).characterPosition.location = 0;
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 6;
+ MonsieurCall(&LogicManager::CONS_Monsieur_DoSeqOtis, "812US", 0, 0, 0);
+ break;
+ case 6:
+ if (_gameProgress[kProgressChapter] == 1) {
+ playDialog(kCharacterMonsieur, "MRB1075", -1, 60);
+ } else if (_gameProgress[kProgressChapter] == 3) {
+ playDialog(kCharacterMonsieur, "MRB3101", -1, 0);
}
+
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 7;
+ MonsieurCall(&LogicManager::CONS_Monsieur_DoOtis5008A, 0, 0, 0, 0);
+ break;
+ case 7:
+ getCharacter(kCharacterMonsieur).characterPosition.location = 1;
+
+ getCharacter(kCharacterMonsieur).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, _functionsMonsieur[getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall]]);
+ fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
+ break;
+ default:
+ break;
}
- } else if (getCharacter(kCharacterMonsieur).callParams[8].parameters[0] && getCharacter(kCharacterMonsieur).callParams[8].parameters[1]) {
- getCharacter(kCharacterMonsieur).callParams[8].parameters[1] = 0;
- getCharacter(kCharacterMonsieur).callParams[8].parameters[0] = 0;
- getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 5;
- MonsieurCall(&LogicManager::CONS_Monsieur_WaitRCClear, 0, 0, 0, 0);
+
+ break;
+ default:
+ break;
}
}
@@ -428,7 +482,8 @@ void LogicManager::CONS_Monsieur_DoOtis5008A(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_DoOtis5008A(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
endGraphics(kCharacterMadame);
send(kCharacterMonsieur, kCharacterTableC, 136455232, 0);
getCharacter(kCharacterMonsieur).characterPosition.location = 1;
@@ -436,7 +491,8 @@ void LogicManager::HAND_Monsieur_DoOtis5008A(HAND_PARAMS) {
getCharacter(kCharacterMonsieur).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, _functionsMonsieur[getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall]]);
fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterTableC, "008A3");
startSeqOtis(kCharacterMadame, "008A2");
startSeqOtis(kCharacterMonsieur, "008A1");
@@ -445,6 +501,10 @@ void LogicManager::HAND_Monsieur_DoOtis5008A(HAND_PARAMS) {
getCharacter(kCharacterMadame).elapsedFrames = getCharacter(kCharacterMonsieur).elapsedFrames;
getCharacter(kCharacterTableC).elapsedFrames = getCharacter(kCharacterMonsieur).elapsedFrames;
}
+
+ break;
+ default:
+ break;
}
}
@@ -459,17 +519,22 @@ void LogicManager::CONS_Monsieur_DoOtis5008E(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_DoOtis5008E(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
send(kCharacterMonsieur, kCharacterTableC, 103798704, "008F");
endGraphics(kCharacterMadame);
getCharacter(kCharacterMonsieur).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, _functionsMonsieur[getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall]]);
fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterTableC, "008E3");
startSeqOtis(kCharacterMadame, "008E2");
startSeqOtis(kCharacterMonsieur, "008E1");
+ break;
+ default:
+ break;
}
}
@@ -486,10 +551,12 @@ void LogicManager::CONS_Monsieur_ExitDining(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_ExitDining(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 1;
MonsieurCall(&LogicManager::CONS_Monsieur_WaitRCClear, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8]) {
case 1:
getCharacter(kCharacterMonsieur).characterPosition.location = 0;
@@ -526,13 +593,14 @@ void LogicManager::HAND_Monsieur_ExitDining(HAND_PARAMS) {
MonsieurCall(&LogicManager::CONS_Monsieur_DoWalk, 4, 6470, 0, 0);
break;
case 6:
- if (getCharacter(kCharacterMonsieur).callParams[getCharacter(kCharacterMonsieur).currentCall].parameters[0]) {
+ if (getCharacterCurrentParams(kCharacterMonsieur)[0]) {
getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 7;
MonsieurCall(&LogicManager::CONS_Monsieur_DoEnterCorrOtis, "607Gc", 34, 0, 0);
} else {
getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 8;
MonsieurCall(&LogicManager::CONS_Monsieur_DoEnterCorrOtis, "607Ac", 34, 0, 0);
}
+
break;
case 7:
case 8:
@@ -544,8 +612,12 @@ void LogicManager::HAND_Monsieur_ExitDining(HAND_PARAMS) {
fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -564,7 +636,8 @@ void LogicManager::CONS_Monsieur_GoSalon(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_GoSalon(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (getCharacterCurrentParams(kCharacterMonsieur)[0]) {
setDoor(34, kCharacterCath, 1, 255, 255);
getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 1;
@@ -573,14 +646,18 @@ void LogicManager::HAND_Monsieur_GoSalon(HAND_PARAMS) {
getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 2;
MonsieurCall(&LogicManager::CONS_Monsieur_DoCorrOtis, "607Bc", 34, 0, 0);
}
- } else if (msg->action == 18) {
+
+ break;
+ case 18:
switch (getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8]) {
case 1:
setDoor(34, kCharacterCath, 2, 255, 255);
- goto LABEL_10;
+ setDoor(50, kCharacterCath, 0, 10, 9);
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 3;
+ MonsieurCall(&LogicManager::CONS_Monsieur_DoWalk, 5, 850, 0, 0);
+ break;
case 2:
setDoor(34, kCharacterCath, 0, 10, 9);
- LABEL_10:
setDoor(50, kCharacterCath, 0, 10, 9);
getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 3;
MonsieurCall(&LogicManager::CONS_Monsieur_DoWalk, 5, 850, 0, 0);
@@ -603,8 +680,12 @@ void LogicManager::HAND_Monsieur_GoSalon(HAND_PARAMS) {
fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -623,10 +704,12 @@ void LogicManager::CONS_Monsieur_ReturnSalon(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_ReturnSalon(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 1;
MonsieurCall(&LogicManager::CONS_Monsieur_WaitRCClear, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8]) {
case 1:
getCharacter(kCharacterMonsieur).characterPosition.location = 0;
@@ -656,8 +739,12 @@ void LogicManager::HAND_Monsieur_ReturnSalon(HAND_PARAMS) {
fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -676,31 +763,38 @@ void LogicManager::CONS_Monsieur_InSalon(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_InSalon(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- startCycOtis(kCharacterMonsieur, (char *)&getCharacterCurrentParams(kCharacterMonsieur)[1]);
- } else if (msg->action == 17) {
- getCharacterCurrentParams(kCharacterMonsieur)[4] = checkCathDir(kCarRestaurant, 52);
- }
- } else {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterMonsieur)[0] < _gameTime && !getCharacterCurrentParams(kCharacterMonsieur)[5]) {
getCharacterCurrentParams(kCharacterMonsieur)[5] = 1;
getCharacter(kCharacterMonsieur).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, _functionsMonsieur[getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall]]);
fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
- return;
- }
- if (getCharacterCurrentParams(kCharacterMonsieur)[4]) {
- if (getCharacterCurrentParams(kCharacterMonsieur)[6] || (getCharacterCurrentParams(kCharacterMonsieur)[6] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
- if (getCharacterCurrentParams(kCharacterMonsieur)[6] >= _currentGameSessionTicks)
- return;
- getCharacterCurrentParams(kCharacterMonsieur)[6] = 0x7FFFFFFF;
- }
- bumpCath(kCarRestaurant, 51, 255);
} else {
- getCharacterCurrentParams(kCharacterMonsieur)[6] = 0;
+ if (getCharacterCurrentParams(kCharacterMonsieur)[4]) {
+ if (getCharacterCurrentParams(kCharacterMonsieur)[6] || (getCharacterCurrentParams(kCharacterMonsieur)[6] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
+ if (getCharacterCurrentParams(kCharacterMonsieur)[6] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterMonsieur)[6] = 0x7FFFFFFF;
+ }
+
+ bumpCath(kCarRestaurant, 51, 255);
+ } else {
+ getCharacterCurrentParams(kCharacterMonsieur)[6] = 0;
+ }
}
+
+ break;
+ case 12:
+ startCycOtis(kCharacterMonsieur, (char *)&getCharacterCurrentParams(kCharacterMonsieur)[1]);
+ break;
+ case 18:
+ getCharacterCurrentParams(kCharacterMonsieur)[4] = checkCathDir(kCarRestaurant, 52);
+ break;
+ default:
+ break;
}
}
@@ -717,62 +811,42 @@ void LogicManager::CONS_Monsieur_CompLogic(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_CompLogic(HAND_PARAMS) {
- if (msg->action > 9) {
- if (msg->action > 17) {
- switch (msg->action) {
- case 18:
- switch (getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8]) {
- case 1:
- case 2:
- getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 3;
- if (rnd(2) == 0) {
- MonsieurCall(&LogicManager::CONS_Monsieur_DoDialog, "MRB1001A", 0, 0, 0);
- } else {
- MonsieurCall(&LogicManager::CONS_Monsieur_DoDialog, "MRB1001", 0, 0, 0);
- }
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterMonsieur)[0] < _gameTime && !getCharacterCurrentParams(kCharacterMonsieur)[3]) {
+ getCharacterCurrentParams(kCharacterMonsieur)[3] = 1;
+ setDoor(34, kCharacterCath, 0, 10, 9);
+ setDoor(50, kCharacterCath, 0, 10, 9);
- break;
- case 3:
- setDoor(34, kCharacterMonsieur, 1, 14, 0);
- setDoor(50, kCharacterMonsieur, 1, 14, 0);
- getCharacterCurrentParams(kCharacterMonsieur)[1] = 1;
- break;
- case 4:
- case 5:
- case 6:
- getCharacterCurrentParams(kCharacterMonsieur)[1] = 0;
- getCharacterCurrentParams(kCharacterMonsieur)[2] = 1;
- break;
- case 7:
- send(kCharacterMonsieur, kCharacterCond2, 123199584, 0);
- break;
- default:
- return;
+ getCharacter(kCharacterMonsieur).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, _functionsMonsieur[getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall]]);
+ fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
+ } else {
+ if (getCharacterCurrentParams(kCharacterMonsieur)[1]) {
+ if (getCharacterCurrentParams(kCharacterMonsieur)[4] || (getCharacterCurrentParams(kCharacterMonsieur)[4] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterMonsieur)[4] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterMonsieur)[4] = 0x7FFFFFFF;
}
- break;
- case 122865568:
- send(kCharacterMonsieur, kCharacterCond2, 88652208, 0);
- break;
- case 221683008:
- getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 7;
- MonsieurCall(&LogicManager::CONS_Monsieur_DoDialog, "Mrb1001", 0, 0, 0);
- break;
- }
- } else if (msg->action == 17) {
- if (getCharacterCurrentParams(kCharacterMonsieur)[2] || getCharacterCurrentParams(kCharacterMonsieur)[1]) {
- setDoor(34, kCharacterMonsieur, 1, 10, 9);
- setDoor(50, kCharacterMonsieur, 1, 10, 9);
- getCharacterCurrentParams(kCharacterMonsieur)[2] = 0;
+
getCharacterCurrentParams(kCharacterMonsieur)[1] = 0;
+ getCharacterCurrentParams(kCharacterMonsieur)[2] = 1;
+ setDoor(34, kCharacterMonsieur, 1, 0, 0);
+ setDoor(50, kCharacterMonsieur, 1, 0, 0);
+ getCharacterCurrentParams(kCharacterMonsieur)[4] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterMonsieur)[4] = 0;
}
- } else if (msg->action == 12) {
- setDoor(34, kCharacterMonsieur, 1, 10, 9);
- setDoor(50, kCharacterMonsieur, 1, 10, 9);
}
- } else if (msg->action >= 8) {
+
+ break;
+ case 8:
+ case 9:
if (getCharacterCurrentParams(kCharacterMonsieur)[1]) {
setDoor(34, kCharacterMonsieur, 1, 0, 0);
setDoor(50, kCharacterMonsieur, 1, 0, 0);
+
if (msg->param.intParam == 50) {
getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 4;
MonsieurCall(&LogicManager::CONS_Monsieur_DoDialog, getCathWCDialog(), 0, 0, 0);
@@ -791,6 +865,7 @@ void LogicManager::HAND_Monsieur_CompLogic(HAND_PARAMS) {
} else {
setDoor(34, kCharacterMonsieur, 1, 0, 0);
setDoor(50, kCharacterMonsieur, 1, 0, 0);
+
if (msg->action == 8) {
getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 1;
MonsieurCall(&LogicManager::CONS_Monsieur_DoDialog, "LIB012", 0, 0, 0);
@@ -799,31 +874,61 @@ void LogicManager::HAND_Monsieur_CompLogic(HAND_PARAMS) {
MonsieurCall(&LogicManager::CONS_Monsieur_DoDialog, "LIB013", 0, 0, 0);
}
}
- } else if (msg->action == 0) {
- if (getCharacterCurrentParams(kCharacterMonsieur)[0] < _gameTime && !getCharacterCurrentParams(kCharacterMonsieur)[3]) {
- getCharacterCurrentParams(kCharacterMonsieur)[3] = 1;
- setDoor(34, kCharacterCath, 0, 10, 9);
- setDoor(50, kCharacterCath, 0, 10, 9);
- getCharacter(kCharacterMonsieur).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, _functionsMonsieur[getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall]]);
- fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
- return;
+ break;
+ case 12:
+ setDoor(34, kCharacterMonsieur, 1, 10, 9);
+ setDoor(50, kCharacterMonsieur, 1, 10, 9);
+ break;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterMonsieur)[2] || getCharacterCurrentParams(kCharacterMonsieur)[1]) {
+ setDoor(34, kCharacterMonsieur, 1, 10, 9);
+ setDoor(50, kCharacterMonsieur, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterMonsieur)[2] = 0;
+ getCharacterCurrentParams(kCharacterMonsieur)[1] = 0;
}
- if (getCharacterCurrentParams(kCharacterMonsieur)[1]) {
- if (getCharacterCurrentParams(kCharacterMonsieur)[4] || (getCharacterCurrentParams(kCharacterMonsieur)[4] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterMonsieur)[4] >= _currentGameSessionTicks)
- return;
- getCharacterCurrentParams(kCharacterMonsieur)[4] = 0x7FFFFFFF;
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8]) {
+ case 1:
+ case 2:
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 3;
+ if (rnd(2) == 0) {
+ MonsieurCall(&LogicManager::CONS_Monsieur_DoDialog, "MRB1001A", 0, 0, 0);
+ } else {
+ MonsieurCall(&LogicManager::CONS_Monsieur_DoDialog, "MRB1001", 0, 0, 0);
}
+
+ break;
+ case 3:
+ setDoor(34, kCharacterMonsieur, 1, 14, 0);
+ setDoor(50, kCharacterMonsieur, 1, 14, 0);
+ getCharacterCurrentParams(kCharacterMonsieur)[1] = 1;
+ break;
+ case 4:
+ case 5:
+ case 6:
getCharacterCurrentParams(kCharacterMonsieur)[1] = 0;
getCharacterCurrentParams(kCharacterMonsieur)[2] = 1;
- setDoor(34, kCharacterMonsieur, 1, 0, 0);
- setDoor(50, kCharacterMonsieur, 1, 0, 0);
- getCharacterCurrentParams(kCharacterMonsieur)[4] = 0;
- } else {
- getCharacterCurrentParams(kCharacterMonsieur)[4] = 0;
+ break;
+ case 7:
+ send(kCharacterMonsieur, kCharacterCond2, 123199584, 0);
+ break;
+ default:
+ break;
}
+
+ break;
+ case 122865568:
+ send(kCharacterMonsieur, kCharacterCond2, 88652208, 0);
+ break;
+ case 221683008:
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 7;
+ MonsieurCall(&LogicManager::CONS_Monsieur_DoDialog, "Mrb1001", 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -838,20 +943,26 @@ void LogicManager::CONS_Monsieur_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_Birth(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- autoMessage(kCharacterMonsieur, 203520448, 0);
- autoMessage(kCharacterMonsieur, 237889408, 1);
- setDoor(34, kCharacterCath, 0, 10, 9);
- setDoor(50, kCharacterCath, 0, 10, 9);
- setDoor(42, kCharacterCath, 0, 255, 255);
- getCharacter(kCharacterMonsieur).characterPosition.position = 1750;
- getCharacter(kCharacterMonsieur).characterPosition.location = 1;
- getCharacter(kCharacterMonsieur).characterPosition.car = kCarRestaurant;
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterMonsieur)[0]) {
+ getCharacterCurrentParams(kCharacterMonsieur)[0] = 1;
+ CONS_Monsieur_InPart1(0, 0, 0, 0);
}
- } else if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterMonsieur)[0]) {
- getCharacterCurrentParams(kCharacterMonsieur)[0] = 1;
- CONS_Monsieur_InPart1(0, 0, 0, 0);
+
+ break;
+ case 12:
+ autoMessage(kCharacterMonsieur, 203520448, 0);
+ autoMessage(kCharacterMonsieur, 237889408, 1);
+ setDoor(34, kCharacterCath, 0, 10, 9);
+ setDoor(50, kCharacterCath, 0, 10, 9);
+ setDoor(42, kCharacterCath, 0, 255, 255);
+ getCharacter(kCharacterMonsieur).characterPosition.position = 1750;
+ getCharacter(kCharacterMonsieur).characterPosition.location = 1;
+ getCharacter(kCharacterMonsieur).characterPosition.car = kCarRestaurant;
+ break;
+ default:
+ break;
}
}
@@ -866,67 +977,86 @@ void LogicManager::CONS_Monsieur_DoDinner(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_DoDinner(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action > 134466544) {
- if (msg->action == 135854206) {
- getCharacterCurrentParams(kCharacterMonsieur)[1] = 1;
- } else if (msg->action == 168717392) {
- getCharacterCurrentParams(kCharacterMonsieur)[0] = 1;
- startCycOtis(kCharacterMonsieur, "008D");
- if (!getCharacterCurrentParams(kCharacterMonsieur)[1]) {
- getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 5;
- MonsieurCall(&LogicManager::CONS_Monsieur_DoDialog, "MRB1078", 0, 0, 0);
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterMonsieur)[0]) {
+ if (!getCharacterCurrentParams(kCharacterMonsieur)[1]) {
+ if (!getCharacterCurrentParams(kCharacterMonsieur)[2]) {
+ getCharacterCurrentParams(kCharacterMonsieur)[2] = _gameTime + 4500;
+ if (_gameTime == -4500) {
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 3;
+ MonsieurCall(&LogicManager::CONS_Monsieur_DoDialog, "MRB1078A", 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterMonsieur)[2] < _gameTime) {
+ getCharacterCurrentParams(kCharacterMonsieur)[2] = 0x7FFFFFFF;
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 3;
+ MonsieurCall(&LogicManager::CONS_Monsieur_DoDialog, "MRB1078A", 0, 0, 0);
+ break;
}
}
- } else if (msg->action == 134466544) {
- getCharacterCurrentParams(kCharacterMonsieur)[1] = 0;
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8]) {
- case 1:
- startCycOtis(kCharacterMonsieur, "008B");
- getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 2;
- MonsieurCall(&LogicManager::CONS_Monsieur_DoDialog, "MRB1076", 0, 0, 0);
- break;
- case 2:
- send(kCharacterMonsieur, kCharacterWaiter2, 256200848, 0);
- break;
- case 3:
- goto LABEL_24;
- case 4:
- send(kCharacterMonsieur, kCharacterCook, 224849280, 0);
-
- getCharacter(kCharacterMonsieur).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, _functionsMonsieur[getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall]]);
- fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
- break;
- default:
- return;
+
+ if (_gameTime > 1138500 && !getCharacterCurrentParams(kCharacterMonsieur)[3]) {
+ getCharacterCurrentParams(kCharacterMonsieur)[3] = 1;
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 4;
+ MonsieurCall(&LogicManager::CONS_Monsieur_ExitDining, 0, 0, 0, 0);
}
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 1;
MonsieurCall(&LogicManager::CONS_Monsieur_GoDining, 0, 0, 0, 0);
- } else if (msg->action == 0 && getCharacterCurrentParams(kCharacterMonsieur)[0]) {
- if (!getCharacterCurrentParams(kCharacterMonsieur)[1]) {
- if (!getCharacterCurrentParams(kCharacterMonsieur)[2]) {
- getCharacterCurrentParams(kCharacterMonsieur)[2] = _gameTime + 4500;
- if (_gameTime == -4500)
- goto LABEL_18;
- }
- if (getCharacterCurrentParams(kCharacterMonsieur)[2] < _gameTime) {
- getCharacterCurrentParams(kCharacterMonsieur)[2] = 0x7FFFFFFF;
- LABEL_18:
- getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 3;
- MonsieurCall(&LogicManager::CONS_Monsieur_DoDialog, "MRB1078A", 0, 0, 0);
- return;
+ break;
+ case 18:
+ switch (getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8]) {
+ case 1:
+ startCycOtis(kCharacterMonsieur, "008B");
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 2;
+ MonsieurCall(&LogicManager::CONS_Monsieur_DoDialog, "MRB1076", 0, 0, 0);
+ break;
+ case 2:
+ send(kCharacterMonsieur, kCharacterWaiter2, 256200848, 0);
+ break;
+ case 3:
+ if (_gameTime > 1138500 && !getCharacterCurrentParams(kCharacterMonsieur)[3]) {
+ getCharacterCurrentParams(kCharacterMonsieur)[3] = 1;
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 4;
+ MonsieurCall(&LogicManager::CONS_Monsieur_ExitDining, 0, 0, 0, 0);
}
+
+ break;
+ case 4:
+ send(kCharacterMonsieur, kCharacterCook, 224849280, 0);
+
+ getCharacter(kCharacterMonsieur).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMonsieur, _functionsMonsieur[getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall]]);
+ fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
+ break;
+ default:
+ break;
}
- LABEL_24:
- if (_gameTime > 1138500 && !getCharacterCurrentParams(kCharacterMonsieur)[3]) {
- getCharacterCurrentParams(kCharacterMonsieur)[3] = 1;
- getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 4;
- MonsieurCall(&LogicManager::CONS_Monsieur_ExitDining, 0, 0, 0, 0);
+
+ break;
+ case 134466544:
+ getCharacterCurrentParams(kCharacterMonsieur)[1] = 0;
+ break;
+ case 135854206:
+ getCharacterCurrentParams(kCharacterMonsieur)[1] = 1;
+ break;
+ case 168717392:
+ getCharacterCurrentParams(kCharacterMonsieur)[0] = 1;
+ startCycOtis(kCharacterMonsieur, "008D");
+ if (!getCharacterCurrentParams(kCharacterMonsieur)[1]) {
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 5;
+ MonsieurCall(&LogicManager::CONS_Monsieur_DoDialog, "MRB1078", 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -941,10 +1071,12 @@ void LogicManager::CONS_Monsieur_InPart1(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_InPart1(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 1;
MonsieurCall(&LogicManager::CONS_Monsieur_InSalon, 1071000, "101A", 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8]) {
case 1:
getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 2;
@@ -957,8 +1089,10 @@ void LogicManager::HAND_Monsieur_InPart1(HAND_PARAMS) {
case 3:
setDoor(34, kCharacterCath, 1, 0, 0);
setDoor(50, kCharacterCath, 1, 0, 0);
+
if (checkCathDir(kCarRedSleeping, 54) || checkCathDir(kCarRedSleeping, 44))
bumpCath(kCarRedSleeping, 10, 255);
+
blockView(kCharacterMonsieur, kCarRedSleeping, 54);
blockView(kCharacterMonsieur, kCarRedSleeping, 44);
getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 4;
@@ -994,8 +1128,12 @@ void LogicManager::HAND_Monsieur_InPart1(HAND_PARAMS) {
CONS_Monsieur_Asleep(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1010,13 +1148,17 @@ void LogicManager::CONS_Monsieur_Asleep(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_Asleep(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterMonsieur).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterMonsieur).characterPosition.position = 6470;
getCharacter(kCharacterMonsieur).characterPosition.location = 1;
setDoor(34, kCharacterCath, 1, 10, 9);
setDoor(50, kCharacterCath, 1, 10, 9);
endGraphics(kCharacterMonsieur);
+ break;
+ default:
+ break;
}
}
@@ -1031,18 +1173,21 @@ void LogicManager::CONS_Monsieur_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_StartPart2(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterMonsieur);
- getCharacter(kCharacterMonsieur).characterPosition.position = 4689;
- getCharacter(kCharacterMonsieur).characterPosition.location = 1;
- getCharacter(kCharacterMonsieur).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterMonsieur).inventoryItem = 0;
- setDoor(34, kCharacterCath, 0, 10, 9);
- setDoor(50, kCharacterCath, 0, 10, 9);
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Monsieur_AtBreakfast(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterMonsieur);
+ getCharacter(kCharacterMonsieur).characterPosition.position = 4689;
+ getCharacter(kCharacterMonsieur).characterPosition.location = 1;
+ getCharacter(kCharacterMonsieur).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterMonsieur).inventoryItem = 0;
+ setDoor(34, kCharacterCath, 0, 10, 9);
+ setDoor(50, kCharacterCath, 0, 10, 9);
+ break;
+ default:
+ break;
}
}
@@ -1064,6 +1209,7 @@ void LogicManager::HAND_Monsieur_AtBreakfast(HAND_PARAMS) {
getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 1;
MonsieurCall(&LogicManager::CONS_Monsieur_ExitDining, 1, 0, 0, 0);
}
+
break;
case 12:
startCycOtis(kCharacterMonsieur, "008D");
@@ -1073,13 +1219,15 @@ void LogicManager::HAND_Monsieur_AtBreakfast(HAND_PARAMS) {
playDialog(kCharacterMonsieur, "MRB2001", -1, 0);
getCharacterCurrentParams(kCharacterMonsieur)[0] = 1;
}
+
break;
case 18:
if (getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] == 1)
CONS_Monsieur_InComp2(0, 0, 0, 0);
+
break;
default:
- return;
+ break;
}
}
@@ -1094,9 +1242,13 @@ void LogicManager::CONS_Monsieur_InComp2(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_InComp2(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
setDoor(34, kCharacterCath, 2, 255, 255);
startCycOtis(kCharacterMonsieur, "510");
+ break;
+ default:
+ break;
}
}
@@ -1111,18 +1263,21 @@ void LogicManager::CONS_Monsieur_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_StartPart3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterMonsieur);
- getCharacter(kCharacterMonsieur).characterPosition.location = 1;
- getCharacter(kCharacterMonsieur).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterMonsieur).inventoryItem = 0;
- getCharacter(kCharacterMonsieur).clothes = 0;
- setDoor(34, kCharacterCath, 2, 255, 255);
- setDoor(50, kCharacterCath, 1, 10, 9);
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Monsieur_OpenComp3(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterMonsieur);
+ getCharacter(kCharacterMonsieur).characterPosition.location = 1;
+ getCharacter(kCharacterMonsieur).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterMonsieur).inventoryItem = 0;
+ getCharacter(kCharacterMonsieur).clothes = 0;
+ setDoor(34, kCharacterCath, 2, 255, 255);
+ setDoor(50, kCharacterCath, 1, 10, 9);
+ break;
+ default:
+ break;
}
}
@@ -1162,11 +1317,19 @@ void LogicManager::CONS_Monsieur_GoLunch(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_GoLunch(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 1;
MonsieurCall(&LogicManager::CONS_Monsieur_GoDining, 1, 0, 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] == 1) {
- CONS_Monsieur_AtLunch(0, 0, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] == 1) {
+ CONS_Monsieur_AtLunch(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -1181,63 +1344,111 @@ void LogicManager::CONS_Monsieur_AtLunch(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_AtLunch(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action != 18) {
- if (msg->action == 122288808) {
- startCycOtis(kCharacterMonsieur, "008D");
- getCharacterCurrentParams(kCharacterMonsieur)[0] = 1;
- } else if (msg->action == 122358304) {
- startCycOtis(kCharacterMonsieur, "BLANK");
- }
- return;
- }
-
- if (getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] != 1) {
- if (getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] == 2)
- CONS_Monsieur_AfterLunchOpen(0, 0, 0, 0);
- return;
- }
- goto LABEL_31;
- }
- if (msg->action == 12) {
- startCycOtis(kCharacterMonsieur, "008B");
- return;
- }
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterMonsieur)[1] || (getCharacterCurrentParams(kCharacterMonsieur)[1] = _gameTime + 450, _gameTime != -450)) {
if (getCharacterCurrentParams(kCharacterMonsieur)[1] >= _gameTime) {
- LABEL_14:
if (!getCharacterCurrentParams(kCharacterMonsieur)[0])
- return;
+ break;
+
if (inDiningRoom(kCharacterAnna) && inDiningRoom(kCharacterAugust) && !whoRunningDialog(kCharacterMonsieur) && getCharacterCurrentParams(kCharacterMonsieur)[2] != 0x7FFFFFFF && _gameTime) {
- if (_gameTime > 1998000)
- goto LABEL_25;
+ if (_gameTime > 1998000) {
+ getCharacterCurrentParams(kCharacterMonsieur)[2] = 0x7FFFFFFF;
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 1;
+ MonsieurCall(&LogicManager::CONS_Monsieur_DoDialog, "MRB3102", 0, 0, 0);
+ break;
+ }
+
if (!inDiningRoom(kCharacterCath) || !getCharacterCurrentParams(kCharacterMonsieur)[2]) {
getCharacterCurrentParams(kCharacterMonsieur)[2] = _gameTime + 450;
- if (_gameTime == -450)
- goto LABEL_26;
+ if (_gameTime == -450) {
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 1;
+ MonsieurCall(&LogicManager::CONS_Monsieur_DoDialog, "MRB3102", 0, 0, 0);
+ break;
+ }
}
+
if (getCharacterCurrentParams(kCharacterMonsieur)[2] < _gameTime) {
- LABEL_25:
getCharacterCurrentParams(kCharacterMonsieur)[2] = 0x7FFFFFFF;
- LABEL_26:
getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 1;
MonsieurCall(&LogicManager::CONS_Monsieur_DoDialog, "MRB3102", 0, 0, 0);
- return;
+ break;
}
}
- LABEL_31:
+
if (_gameTime > 2002500 && !getCharacterCurrentParams(kCharacterMonsieur)[3]) {
getCharacterCurrentParams(kCharacterMonsieur)[3] = 1;
getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 2;
MonsieurCall(&LogicManager::CONS_Monsieur_ExitDining, 1, 0, 0, 0);
}
- return;
+
+ break;
}
+
getCharacterCurrentParams(kCharacterMonsieur)[1] = 0x7FFFFFFF;
}
+
send(kCharacterMonsieur, kCharacterWaiter2, 256200848, 0);
- goto LABEL_14;
+
+ if (!getCharacterCurrentParams(kCharacterMonsieur)[0])
+ break;
+
+ if (inDiningRoom(kCharacterAnna) && inDiningRoom(kCharacterAugust) && !whoRunningDialog(kCharacterMonsieur) && getCharacterCurrentParams(kCharacterMonsieur)[2] != 0x7FFFFFFF && _gameTime) {
+ if (_gameTime > 1998000) {
+ getCharacterCurrentParams(kCharacterMonsieur)[2] = 0x7FFFFFFF;
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 1;
+ MonsieurCall(&LogicManager::CONS_Monsieur_DoDialog, "MRB3102", 0, 0, 0);
+ break;
+ }
+
+ if (!inDiningRoom(kCharacterCath) || !getCharacterCurrentParams(kCharacterMonsieur)[2]) {
+ getCharacterCurrentParams(kCharacterMonsieur)[2] = _gameTime + 450;
+ if (_gameTime == -450) {
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 1;
+ MonsieurCall(&LogicManager::CONS_Monsieur_DoDialog, "MRB3102", 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterMonsieur)[2] < _gameTime) {
+ getCharacterCurrentParams(kCharacterMonsieur)[2] = 0x7FFFFFFF;
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 1;
+ MonsieurCall(&LogicManager::CONS_Monsieur_DoDialog, "MRB3102", 0, 0, 0);
+ break;
+ }
+ }
+
+ if (_gameTime > 2002500 && !getCharacterCurrentParams(kCharacterMonsieur)[3]) {
+ getCharacterCurrentParams(kCharacterMonsieur)[3] = 1;
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 2;
+ MonsieurCall(&LogicManager::CONS_Monsieur_ExitDining, 1, 0, 0, 0);
+ }
+
+ break;
+ case 12:
+ startCycOtis(kCharacterMonsieur, "008B");
+ break;
+ case 18:
+
+ if (getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] != 1) {
+ if (getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] == 2)
+ CONS_Monsieur_AfterLunchOpen(0, 0, 0, 0);
+ } else if (_gameTime > 2002500 && !getCharacterCurrentParams(kCharacterMonsieur)[3]) {
+ getCharacterCurrentParams(kCharacterMonsieur)[3] = 1;
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 2;
+ MonsieurCall(&LogicManager::CONS_Monsieur_ExitDining, 1, 0, 0, 0);
+ }
+
+ break;
+ case 122288808:
+ startCycOtis(kCharacterMonsieur, "008D");
+ getCharacterCurrentParams(kCharacterMonsieur)[0] = 1;
+ break;
+ case 122358304:
+ startCycOtis(kCharacterMonsieur, "BLANK");
+ break;
+ default:
+ break;
}
}
@@ -1277,19 +1488,22 @@ void LogicManager::CONS_Monsieur_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_StartPart4(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterMonsieur);
- getCharacter(kCharacterMonsieur).characterPosition.position = 6470;
- getCharacter(kCharacterMonsieur).characterPosition.location = 1;
- getCharacter(kCharacterMonsieur).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterMonsieur).inventoryItem = 0;
- getCharacter(kCharacterMonsieur).clothes = 0;
- setDoor(34, kCharacterCath, 2, 255, 255);
- setDoor(50, kCharacterCath, 1, 10, 9);
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Monsieur_OpenComp4(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterMonsieur);
+ getCharacter(kCharacterMonsieur).characterPosition.position = 6470;
+ getCharacter(kCharacterMonsieur).characterPosition.location = 1;
+ getCharacter(kCharacterMonsieur).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterMonsieur).inventoryItem = 0;
+ getCharacter(kCharacterMonsieur).clothes = 0;
+ setDoor(34, kCharacterCath, 2, 255, 255);
+ setDoor(50, kCharacterCath, 1, 10, 9);
+ break;
+ default:
+ break;
}
}
@@ -1304,14 +1518,20 @@ void LogicManager::CONS_Monsieur_OpenComp4(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_OpenComp4(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- setDoor(34, kCarNone, 2, 255, 255);
- startCycOtis(kCharacterMonsieur, "510");
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 2367000 && !getCharacterCurrentParams(kCharacterMonsieur)[0]) {
+ getCharacterCurrentParams(kCharacterMonsieur)[0] = 1;
+ CONS_Monsieur_Dinner4(0, 0, 0, 0);
}
- } else if (_gameTime > 2367000 && !getCharacterCurrentParams(kCharacterMonsieur)[0]) {
- getCharacterCurrentParams(kCharacterMonsieur)[0] = 1;
- CONS_Monsieur_Dinner4(0, 0, 0, 0);
+
+ break;
+ case 12:
+ setDoor(34, kCarNone, 2, 255, 255);
+ startCycOtis(kCharacterMonsieur, "510");
+ break;
+ default:
+ break;
}
}
@@ -1326,38 +1546,46 @@ void LogicManager::CONS_Monsieur_Dinner4(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_Dinner4(HAND_PARAMS) {
- if (msg->action > 12) {
- switch (msg->action) {
- case 18:
- switch (getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8]) {
- case 1:
- startCycOtis(kCharacterMonsieur, "008B");
- getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 2;
- MonsieurCall(&LogicManager::CONS_Monsieur_DoWait, 450, 0, 0, 0);
- break;
- case 2:
- send(kCharacterMonsieur, kCharacterWaiter2, 256200848, 0);
- break;
- case 3:
- CONS_Monsieur_ReturnComp4(0, 0, 0, 0);
- break;
- }
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterMonsieur)[0] && _gameTime > 2389500 && !getCharacterCurrentParams(kCharacterMonsieur)[1]) {
+ getCharacterCurrentParams(kCharacterMonsieur)[1] = 1;
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 3;
+ MonsieurCall(&LogicManager::CONS_Monsieur_ExitDining, 0, 0, 0, 0);
+ }
+
+ break;
+ case 12:
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 1;
+ MonsieurCall(&LogicManager::CONS_Monsieur_GoDining, 1, 0, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8]) {
+ case 1:
+ startCycOtis(kCharacterMonsieur, "008B");
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 2;
+ MonsieurCall(&LogicManager::CONS_Monsieur_DoWait, 450, 0, 0, 0);
break;
- case 122288808:
- getCharacterCurrentParams(kCharacterMonsieur)[0] = 1;
- startCycOtis(kCharacterMonsieur, "008D");
+ case 2:
+ send(kCharacterMonsieur, kCharacterWaiter2, 256200848, 0);
break;
- case 122358304:
- startCycOtis(kCharacterMonsieur, "BLANK");
+ case 3:
+ CONS_Monsieur_ReturnComp4(0, 0, 0, 0);
+ break;
+ default:
break;
}
- } else if (msg->action == 12) {
- getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 1;
- MonsieurCall(&LogicManager::CONS_Monsieur_GoDining, 1, 0, 0, 0);
- } else if (msg->action == 0 && getCharacterCurrentParams(kCharacterMonsieur)[0] && _gameTime > 2389500 && !getCharacterCurrentParams(kCharacterMonsieur)[1]) {
- getCharacterCurrentParams(kCharacterMonsieur)[1] = 1;
- getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 3;
- MonsieurCall(&LogicManager::CONS_Monsieur_ExitDining, 0, 0, 0, 0);
+
+ break;
+ case 122288808:
+ getCharacterCurrentParams(kCharacterMonsieur)[0] = 1;
+ startCycOtis(kCharacterMonsieur, "008D");
+ break;
+ case 122358304:
+ startCycOtis(kCharacterMonsieur, "BLANK");
+ break;
+ default:
+ break;
}
}
@@ -1372,61 +1600,8 @@ void LogicManager::CONS_Monsieur_ReturnComp4(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_ReturnComp4(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action > 122865568) {
- if (msg->action == 125039808) {
- getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 4;
- MonsieurCall(&LogicManager::CONS_Monsieur_CompLogic, 2457000, 0, 0, 0);
- } else if (msg->action == 221683008) {
- getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 9;
- MonsieurCall(&LogicManager::CONS_Monsieur_DoDialog, "Mrb1001", 0, 0, 0);
- }
- } else if (msg->action == 122865568) {
- send(kCharacterMonsieur, kCharacterCond2, 88652208, 0);
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 2;
- MonsieurCall(&LogicManager::CONS_Monsieur_InSalon, 2479500, "102B", 0, 0);
- break;
- case 2:
- getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 3;
- MonsieurCall(&LogicManager::CONS_Monsieur_ReturnSalon, 0, "102C", 0, 0);
- break;
- case 3:
- case 7:
- goto LABEL_29;
- case 4:
- case 8:
- if (_gameTime >= 2470500) {
- LABEL_29:
- CONS_Monsieur_Asleep4(0, 0, 0, 0);
- } else if (_gameEvents[kEventAugustDrink]) {
- getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 5;
- MonsieurCall(&LogicManager::CONS_Monsieur_GoSalon, 0, "102A", 0, 0);
- } else {
- getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 8;
- MonsieurCall(&LogicManager::CONS_Monsieur_CompLogic, _gameTime + 900, 0, 0, 0);
- }
- break;
- case 5:
- getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 6;
- MonsieurCall(&LogicManager::CONS_Monsieur_InSalon, 2479500, "102B", 0, 0);
- break;
- case 6:
- getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 7;
- MonsieurCall(&LogicManager::CONS_Monsieur_ReturnSalon, 0, "102C", 0, 0);
- break;
- case 9:
- send(kCharacterMonsieur, kCharacterCond2, 123199584, 0);
- break;
- default:
- return;
- }
- }
- } else if (msg->action == 12) {
- send(kCharacterMonsieur, kCharacterAbbot, 101687594, 0);
- } else if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (_gameTime <= 2470500 || getCharacterCurrentParams(kCharacterMonsieur)[0]) {
if (_gameTime > 2457000) {
if (_gameEvents[kEventAugustDrink]) {
@@ -1439,6 +1614,67 @@ void LogicManager::HAND_Monsieur_ReturnComp4(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterMonsieur)[0] = 1;
CONS_Monsieur_Asleep4(0, 0, 0, 0);
}
+
+ break;
+ case 12:
+ send(kCharacterMonsieur, kCharacterAbbot, 101687594, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 2;
+ MonsieurCall(&LogicManager::CONS_Monsieur_InSalon, 2479500, "102B", 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 3;
+ MonsieurCall(&LogicManager::CONS_Monsieur_ReturnSalon, 0, "102C", 0, 0);
+ break;
+ case 3:
+ case 7:
+ CONS_Monsieur_Asleep4(0, 0, 0, 0);
+ break;
+ case 4:
+ case 8:
+ if (_gameTime >= 2470500) {
+ CONS_Monsieur_Asleep4(0, 0, 0, 0);
+ } else if (_gameEvents[kEventAugustDrink]) {
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 5;
+ MonsieurCall(&LogicManager::CONS_Monsieur_GoSalon, 0, "102A", 0, 0);
+ } else {
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 8;
+ MonsieurCall(&LogicManager::CONS_Monsieur_CompLogic, _gameTime + 900, 0, 0, 0);
+ }
+
+ break;
+ case 5:
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 6;
+ MonsieurCall(&LogicManager::CONS_Monsieur_InSalon, 2479500, "102B", 0, 0);
+ break;
+ case 6:
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 7;
+ MonsieurCall(&LogicManager::CONS_Monsieur_ReturnSalon, 0, "102C", 0, 0);
+ break;
+ case 9:
+ send(kCharacterMonsieur, kCharacterCond2, 123199584, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 122865568:
+ send(kCharacterMonsieur, kCharacterCond2, 88652208, 0);
+ break;
+ case 125039808:
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 4;
+ MonsieurCall(&LogicManager::CONS_Monsieur_CompLogic, 2457000, 0, 0, 0);
+ break;
+ case 221683008:
+ getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 9;
+ MonsieurCall(&LogicManager::CONS_Monsieur_DoDialog, "Mrb1001", 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1453,13 +1689,17 @@ void LogicManager::CONS_Monsieur_Asleep4(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_Asleep4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterMonsieur).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterMonsieur).characterPosition.position = 6470;
getCharacter(kCharacterMonsieur).characterPosition.location = 1;
endGraphics(kCharacterMonsieur);
setDoor(34, kCharacterCath, 1, 10, 9);
setDoor(50, kCharacterCath, 1, 10, 9);
+ break;
+ default:
+ break;
}
}
@@ -1474,17 +1714,20 @@ void LogicManager::CONS_Monsieur_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_StartPart5(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterMonsieur);
- getCharacter(kCharacterMonsieur).characterPosition.position = 3969;
- getCharacter(kCharacterMonsieur).characterPosition.location = 1;
- getCharacter(kCharacterMonsieur).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterMonsieur).inventoryItem = 0;
- getCharacter(kCharacterMonsieur).clothes = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Monsieur_Prisoner(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterMonsieur);
+ getCharacter(kCharacterMonsieur).characterPosition.position = 3969;
+ getCharacter(kCharacterMonsieur).characterPosition.location = 1;
+ getCharacter(kCharacterMonsieur).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterMonsieur).inventoryItem = 0;
+ getCharacter(kCharacterMonsieur).clothes = 0;
+ break;
+ default:
+ break;
}
}
@@ -1499,8 +1742,13 @@ void LogicManager::CONS_Monsieur_Prisoner(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_Prisoner(HAND_PARAMS) {
- if (msg->action == 70549068)
+ switch (msg->action) {
+ case 70549068:
CONS_Monsieur_Hiding(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Monsieur_Hiding(CONS_PARAMS) {
@@ -1514,12 +1762,17 @@ void LogicManager::CONS_Monsieur_Hiding(CONS_PARAMS) {
}
void LogicManager::HAND_Monsieur_Hiding(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterMonsieur).characterPosition.position = 5790;
getCharacter(kCharacterMonsieur).characterPosition.location = 1;
getCharacter(kCharacterMonsieur).characterPosition.car = kCarRedSleeping;
- } else if (msg->action == 135800432) {
+ break;
+ case 135800432:
CONS_Monsieur_Disappear(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
Commit: e25704807eee5483071b5f794b6d705efd0c184e
https://github.com/scummvm/scummvm/commit/e25704807eee5483071b5f794b6d705efd0c184e
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Alouan logic
Changed paths:
engines/lastexpress/characters/alouan.cpp
diff --git a/engines/lastexpress/characters/alouan.cpp b/engines/lastexpress/characters/alouan.cpp
index e77d3ea019a..99dc3342567 100644
--- a/engines/lastexpress/characters/alouan.cpp
+++ b/engines/lastexpress/characters/alouan.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_Alouan(int chapter) {
CONS_Alouan_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -69,18 +69,24 @@ void LogicManager::CONS_Alouan_DebugWalks(CONS_PARAMS) {
}
void LogicManager::HAND_Alouan_DebugWalks(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterAlouan).characterPosition.position = 0;
- getCharacter(kCharacterAlouan).characterPosition.location = 0;
- getCharacter(kCharacterAlouan).characterPosition.car = kCarGreenSleeping;
- getCharacterCurrentParams(kCharacterAlouan)[0] = 10000;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterAlouan, kCarGreenSleeping, getCharacterCurrentParams(kCharacterAlouan)[0])) {
+ if (getCharacterCurrentParams(kCharacterAlouan)[0] == 10000)
+ getCharacterCurrentParams(kCharacterAlouan)[0] = 0;
+ else
+ getCharacterCurrentParams(kCharacterAlouan)[0] = 10000;
}
- } else if (walk(kCharacterAlouan, kCarGreenSleeping, getCharacterCurrentParams(kCharacterAlouan)[0])) {
- if (getCharacterCurrentParams(kCharacterAlouan)[0] == 10000)
- getCharacterCurrentParams(kCharacterAlouan)[0] = 0;
- else
- getCharacterCurrentParams(kCharacterAlouan)[0] = 10000;
+
+ break;
+ case 12:
+ getCharacter(kCharacterAlouan).characterPosition.position = 0;
+ getCharacter(kCharacterAlouan).characterPosition.location = 0;
+ getCharacter(kCharacterAlouan).characterPosition.car = kCarGreenSleeping;
+ getCharacterCurrentParams(kCharacterAlouan)[0] = 10000;
+ break;
+ default:
+ break;
}
}
@@ -99,14 +105,19 @@ void LogicManager::CONS_Alouan_DoCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Alouan_DoCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterAlouan, getCharacterCurrentParams(kCharacterAlouan)[3]);
getCharacter(kCharacterAlouan).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAlouan, _functionsAlouan[getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall]]);
fedEx(kCharacterAlouan, kCharacterAlouan, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterAlouan, (char *)&getCharacterCurrentParams(kCharacterAlouan)[0]);
blockAtDoor(kCharacterAlouan, getCharacterCurrentParams(kCharacterAlouan)[3]);
+ break;
+ default:
+ break;
}
}
@@ -123,12 +134,17 @@ void LogicManager::CONS_Alouan_DoDialog(CONS_PARAMS) {
}
void LogicManager::HAND_Alouan_DoDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterAlouan).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAlouan, _functionsAlouan[getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall]]);
fedEx(kCharacterAlouan, kCharacterAlouan, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterAlouan, (char *)&getCharacterCurrentParams(kCharacterAlouan)[0], -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -145,10 +161,11 @@ void LogicManager::CONS_Alouan_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_Alouan_DoWait(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterAlouan)[1] || (getCharacterCurrentParams(kCharacterAlouan)[1] = _gameTime + getCharacterCurrentParams(kCharacterAlouan)[0], _gameTime + getCharacterCurrentParams(kCharacterAlouan)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterAlouan)[1] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterAlouan)[1] = 0x7FFFFFFF;
}
@@ -156,6 +173,9 @@ void LogicManager::HAND_Alouan_DoWait(HAND_PARAMS) {
getCharacter(kCharacterAlouan).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAlouan, _functionsAlouan[getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall]]);
fedEx(kCharacterAlouan, kCharacterAlouan, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -212,11 +232,13 @@ void LogicManager::CONS_Alouan_PeekF(CONS_PARAMS) {
}
void LogicManager::HAND_Alouan_PeekF(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAlouan).characterPosition.position = 4070;
getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 1;
AlouanCall(&LogicManager::CONS_Alouan_DoCorrOtis, "621Cf", 6, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] == 1) {
getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
AlouanCall(&LogicManager::CONS_Alouan_DoCorrOtis, "621Df", 6, 0, 0);
@@ -227,6 +249,10 @@ void LogicManager::HAND_Alouan_PeekF(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterAlouan, _functionsAlouan[getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall]]);
fedEx(kCharacterAlouan, kCharacterAlouan, 18, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -241,11 +267,13 @@ void LogicManager::CONS_Alouan_PeekH(CONS_PARAMS) {
}
void LogicManager::HAND_Alouan_PeekH(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAlouan).characterPosition.position = 2740;
getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 1;
AlouanCall(&LogicManager::CONS_Alouan_DoCorrOtis, "621Ch", 8, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] == 1) {
getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
AlouanCall(&LogicManager::CONS_Alouan_DoCorrOtis, "621Dh", 8, 0, 0);
@@ -256,6 +284,10 @@ void LogicManager::HAND_Alouan_PeekH(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterAlouan, _functionsAlouan[getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall]]);
fedEx(kCharacterAlouan, kCharacterAlouan, 18, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -270,12 +302,14 @@ void LogicManager::CONS_Alouan_GoFtoH(CONS_PARAMS) {
}
void LogicManager::HAND_Alouan_GoFtoH(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAlouan).characterPosition.position = 4070;
getCharacter(kCharacterAlouan).characterPosition.location = 0;
getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 1;
AlouanCall(&LogicManager::CONS_Alouan_DoCorrOtis, "621Bf", 6, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8]) {
case 1:
getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
@@ -293,7 +327,13 @@ void LogicManager::HAND_Alouan_GoFtoH(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterAlouan, _functionsAlouan[getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall]]);
fedEx(kCharacterAlouan, kCharacterAlouan, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -308,12 +348,14 @@ void LogicManager::CONS_Alouan_GoHtoF(CONS_PARAMS) {
}
void LogicManager::HAND_Alouan_GoHtoF(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAlouan).characterPosition.position = 2740;
getCharacter(kCharacterAlouan).characterPosition.location = 0;
getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 1;
AlouanCall(&LogicManager::CONS_Alouan_DoCorrOtis, "621Bh", 8, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8]) {
case 1:
getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
@@ -331,7 +373,13 @@ void LogicManager::HAND_Alouan_GoHtoF(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterAlouan, _functionsAlouan[getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall]]);
fedEx(kCharacterAlouan, kCharacterAlouan, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -346,15 +394,21 @@ void LogicManager::CONS_Alouan_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Alouan_Birth(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterAlouan).characterPosition.position = 2740;
- getCharacter(kCharacterAlouan).characterPosition.location = 1;
- getCharacter(kCharacterAlouan).characterPosition.car = kCarGreenSleeping;
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterAlouan)[0]) {
+ getCharacterCurrentParams(kCharacterAlouan)[0] = 1;
+ CONS_Alouan_Part1(0, 0, 0, 0);
}
- } else if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterAlouan)[0]) {
- getCharacterCurrentParams(kCharacterAlouan)[0] = 1;
- CONS_Alouan_Part1(0, 0, 0, 0);
+
+ break;
+ case 12:
+ getCharacter(kCharacterAlouan).characterPosition.position = 2740;
+ getCharacter(kCharacterAlouan).characterPosition.location = 1;
+ getCharacter(kCharacterAlouan).characterPosition.car = kCarGreenSleeping;
+ break;
+ default:
+ break;
}
}
@@ -369,27 +423,34 @@ void LogicManager::CONS_Alouan_Part1(CONS_PARAMS) {
}
void LogicManager::HAND_Alouan_Part1(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action != 18 || getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] != 1)
- return;
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1096200 && !getCharacterCurrentParams(kCharacterAlouan)[0]) {
+ getCharacterCurrentParams(kCharacterAlouan)[0] = 1;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 1;
+ AlouanCall(&LogicManager::CONS_Alouan_GoHtoF, 0, 0, 0, 0);
+ } else {
+ if (_gameTime > 1162800 && !getCharacterCurrentParams(kCharacterAlouan)[1]) {
+ getCharacterCurrentParams(kCharacterAlouan)[1] = 1;
+ send(kCharacterAlouan, kCharacterClerk, 191070912, 4070);
+ getCharacter(kCharacterAlouan).characterPosition.position = 4070;
+ }
+ if (_gameTime > 1179000 && !getCharacterCurrentParams(kCharacterAlouan)[2]) {
+ getCharacterCurrentParams(kCharacterAlouan)[2] = 1;
+ send(kCharacterAlouan, kCharacterClerk, 191070912, 4840);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
+ AlouanCall(&LogicManager::CONS_Alouan_GoFtoH, 0, 0, 0, 0);
+ }
+ }
- getCharacter(kCharacterAlouan).characterPosition.position = 4840;
- } else if (_gameTime > 1096200 && !getCharacterCurrentParams(kCharacterAlouan)[0]) {
- getCharacterCurrentParams(kCharacterAlouan)[0] = 1;
- getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 1;
- AlouanCall(&LogicManager::CONS_Alouan_GoHtoF, 0, 0, 0, 0);
- return;
- }
- if (_gameTime > 1162800 && !getCharacterCurrentParams(kCharacterAlouan)[1]) {
- getCharacterCurrentParams(kCharacterAlouan)[1] = 1;
- send(kCharacterAlouan, kCharacterClerk, 191070912, 4070);
- getCharacter(kCharacterAlouan).characterPosition.position = 4070;
- }
- if (_gameTime > 1179000 && !getCharacterCurrentParams(kCharacterAlouan)[2]) {
- getCharacterCurrentParams(kCharacterAlouan)[2] = 1;
- send(kCharacterAlouan, kCharacterClerk, 191070912, 4840);
- getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
- AlouanCall(&LogicManager::CONS_Alouan_GoFtoH, 0, 0, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] != 1)
+ getCharacter(kCharacterAlouan).characterPosition.position = 4840;
+
+ break;
+ default:
+ break;
}
}
@@ -404,13 +465,17 @@ void LogicManager::CONS_Alouan_Asleep(CONS_PARAMS) {
}
void LogicManager::HAND_Alouan_Asleep(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
setDoor(7, kCharacterCath, 3, 10, 9);
setDoor(5, kCharacterCath, 3, 10, 9);
getCharacter(kCharacterAlouan).characterPosition.position = 4070;
getCharacter(kCharacterAlouan).characterPosition.location = 1;
getCharacter(kCharacterAlouan).characterPosition.car = kCarGreenSleeping;
endGraphics(kCharacterAlouan);
+ break;
+ default:
+ break;
}
}
@@ -425,7 +490,8 @@ void LogicManager::CONS_Alouan_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Alouan_StartPart2(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterAlouan);
getCharacter(kCharacterAlouan).characterPosition.position = 2740;
getCharacter(kCharacterAlouan).characterPosition.location = 1;
@@ -433,6 +499,9 @@ void LogicManager::HAND_Alouan_StartPart2(HAND_PARAMS) {
getCharacter(kCharacterAlouan).clothes = 0;
getCharacter(kCharacterAlouan).inventoryItem = kItemNone;
CONS_Alouan_Part2(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -447,44 +516,29 @@ void LogicManager::CONS_Alouan_Part2(CONS_PARAMS) {
}
void LogicManager::HAND_Alouan_Part2(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8]) {
- case 3:
- getCharacterCurrentParams(kCharacterAlouan)[0] = 0;
- getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 4;
- AlouanCall(&LogicManager::CONS_Alouan_DoDialog, "Har2011", 0, 0, 0);
- break;
- case 4:
- getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 5;
- AlouanCall(&LogicManager::CONS_Alouan_DoWait, 900, 0, 0, 0);
- break;
- case 5:
- send(kCharacterAlouan, kCharacterFrancois, 190219584, 0);
- break;
- }
- } else if (msg->action == 189489753) {
- getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 3;
- AlouanCall(&LogicManager::CONS_Alouan_GoHtoF, 0, 0, 0, 0);
- }
- } else {
- if (msg->action == 12) {
- send(kCharacterAlouan, kCharacterClerk, 191070912, 4840);
- getCharacterCurrentParams(kCharacterAlouan)[0] = 1;
- return;
- }
- if (msg->action == 0 && getCharacterCurrentParams(kCharacterAlouan)[1] != 0x7FFFFFFF && _gameTime) {
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAlouan)[1] != 0x7FFFFFFF && _gameTime) {
if (_gameTime <= 1777500) {
if (!cathInCorridor(kCarGreenSleeping) || !getCharacterCurrentParams(kCharacterAlouan)[1]) {
getCharacterCurrentParams(kCharacterAlouan)[1] = _gameTime + 75;
- if (_gameTime == -75)
- goto LABEL_16;
+ if (_gameTime == -75) {
+ if (getCharacterCurrentParams(kCharacterAlouan)[0]) {
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 1;
+ AlouanCall(&LogicManager::CONS_Alouan_PeekH, 0, 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
+ AlouanCall(&LogicManager::CONS_Alouan_PeekF, 0, 0, 0, 0);
+ }
+ }
}
+
if (getCharacterCurrentParams(kCharacterAlouan)[1] >= _gameTime)
- return;
+ break;
}
+
getCharacterCurrentParams(kCharacterAlouan)[1] = 0x7FFFFFFF;
- LABEL_16:
+
if (getCharacterCurrentParams(kCharacterAlouan)[0]) {
getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 1;
AlouanCall(&LogicManager::CONS_Alouan_PeekH, 0, 0, 0, 0);
@@ -493,6 +547,37 @@ void LogicManager::HAND_Alouan_Part2(HAND_PARAMS) {
AlouanCall(&LogicManager::CONS_Alouan_PeekF, 0, 0, 0, 0);
}
}
+
+ break;
+ case 12:
+ send(kCharacterAlouan, kCharacterClerk, 191070912, 4840);
+ getCharacterCurrentParams(kCharacterAlouan)[0] = 1;
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8]) {
+ case 3:
+ getCharacterCurrentParams(kCharacterAlouan)[0] = 0;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 4;
+ AlouanCall(&LogicManager::CONS_Alouan_DoDialog, "Har2011", 0, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 5;
+ AlouanCall(&LogicManager::CONS_Alouan_DoWait, 900, 0, 0, 0);
+ break;
+ case 5:
+ send(kCharacterAlouan, kCharacterFrancois, 190219584, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 189489753:
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 3;
+ AlouanCall(&LogicManager::CONS_Alouan_GoHtoF, 0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -507,13 +592,18 @@ void LogicManager::CONS_Alouan_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Alouan_StartPart3(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_Alouan_Part3(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
endGraphics(kCharacterAlouan);
getCharacter(kCharacterAlouan).characterPosition.position = 2740;
getCharacter(kCharacterAlouan).characterPosition.location = 1;
getCharacter(kCharacterAlouan).characterPosition.car = kCarGreenSleeping;
+ break;
+ default:
+ break;
}
}
@@ -528,79 +618,155 @@ void LogicManager::CONS_Alouan_Part3(CONS_PARAMS) {
}
void LogicManager::HAND_Alouan_Part3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- send(kCharacterAlouan, kCharacterClerk, 191070912, 4840);
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterAlouan).characterPosition.position = 4840;
- goto LABEL_11;
- case 2:
- goto LABEL_20;
- case 3:
- goto LABEL_23;
- case 4:
- goto LABEL_26;
- default:
- return;
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1984500 && !getCharacterCurrentParams(kCharacterAlouan)[0]) {
+ getCharacterCurrentParams(kCharacterAlouan)[0] = 1;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 1;
+ AlouanCall(&LogicManager::CONS_Alouan_GoHtoF, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterCurrentParams(kCharacterAlouan)[1] != 0x7FFFFFFF && _gameTime > 1989000) {
+ if (_gameTime > 2119500) {
+ getCharacterCurrentParams(kCharacterAlouan)[1] = 0x7FFFFFFF;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
+ AlouanCall(&LogicManager::CONS_Alouan_PeekF, 0, 0, 0, 0);
+ break;
+ }
+
+ if (!cathInCorridor(kCarGreenSleeping) || !getCharacterCurrentParams(kCharacterAlouan)[1]) {
+ getCharacterCurrentParams(kCharacterAlouan)[1] = _gameTime + 75;
+ if (_gameTime == -75) {
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
+ AlouanCall(&LogicManager::CONS_Alouan_PeekF, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterAlouan)[1] < _gameTime) {
+ getCharacterCurrentParams(kCharacterAlouan)[1] = 0x7FFFFFFF;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
+ AlouanCall(&LogicManager::CONS_Alouan_PeekF, 0, 0, 0, 0);
+ break;
}
}
- return;
- }
- if (_gameTime > 1984500 && !getCharacterCurrentParams(kCharacterAlouan)[0]) {
- getCharacterCurrentParams(kCharacterAlouan)[0] = 1;
- getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 1;
- AlouanCall(&LogicManager::CONS_Alouan_GoHtoF, 0, 0, 0, 0);
- return;
- }
-LABEL_11:
- if (getCharacterCurrentParams(kCharacterAlouan)[1] != 0x7FFFFFFF && _gameTime > 1989000) {
- if (_gameTime > 2119500)
- goto LABEL_18;
- if (!cathInCorridor(kCarGreenSleeping) || !getCharacterCurrentParams(kCharacterAlouan)[1]) {
- getCharacterCurrentParams(kCharacterAlouan)[1] = _gameTime + 75;
- if (_gameTime == -75)
- goto LABEL_19;
+
+ if (_gameTime > 2052000 && !getCharacterCurrentParams(kCharacterAlouan)[2]) {
+ getCharacterCurrentParams(kCharacterAlouan)[2] = 1;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 3;
+ AlouanCall(&LogicManager::CONS_Alouan_DoDialog, "Har1005", 0, 0, 0);
+ break;
}
- if (getCharacterCurrentParams(kCharacterAlouan)[1] < _gameTime) {
- LABEL_18:
- getCharacterCurrentParams(kCharacterAlouan)[1] = 0x7FFFFFFF;
- LABEL_19:
- getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
- AlouanCall(&LogicManager::CONS_Alouan_PeekF, 0, 0, 0, 0);
- return;
+
+ if (_gameTime > 2133000 && !getCharacterCurrentParams(kCharacterAlouan)[3]) {
+ getCharacterCurrentParams(kCharacterAlouan)[3] = 1;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 4;
+ AlouanCall(&LogicManager::CONS_Alouan_GoFtoH, 0, 0, 0, 0);
+ break;
}
- }
-LABEL_20:
- if (_gameTime > 2052000 && !getCharacterCurrentParams(kCharacterAlouan)[2]) {
- getCharacterCurrentParams(kCharacterAlouan)[2] = 1;
- getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 3;
- AlouanCall(&LogicManager::CONS_Alouan_DoDialog, "Har1005", 0, 0, 0);
- return;
- }
-LABEL_23:
- if (_gameTime > 2133000 && !getCharacterCurrentParams(kCharacterAlouan)[3]) {
- getCharacterCurrentParams(kCharacterAlouan)[3] = 1;
- getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 4;
- AlouanCall(&LogicManager::CONS_Alouan_GoFtoH, 0, 0, 0, 0);
- return;
- }
-LABEL_26:
- if (getCharacterCurrentParams(kCharacterAlouan)[4] != 0x7FFFFFFF && _gameTime > 2151000) {
- if (_gameTime <= 2241000) {
- if (!cathInCorridor(kCarGreenSleeping) || !getCharacterCurrentParams(kCharacterAlouan)[4]) {
- getCharacterCurrentParams(kCharacterAlouan)[4] = _gameTime + 75;
- if (_gameTime == -75)
- goto LABEL_34;
+
+ if (getCharacterCurrentParams(kCharacterAlouan)[4] != 0x7FFFFFFF && _gameTime > 2151000) {
+ if (_gameTime <= 2241000) {
+ if (!cathInCorridor(kCarGreenSleeping) || !getCharacterCurrentParams(kCharacterAlouan)[4]) {
+ getCharacterCurrentParams(kCharacterAlouan)[4] = _gameTime + 75;
+ if (_gameTime == -75) {
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 5;
+ AlouanCall(&LogicManager::CONS_Alouan_PeekH, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterAlouan)[4] >= _gameTime)
+ break;
}
- if (getCharacterCurrentParams(kCharacterAlouan)[4] >= _gameTime)
- return;
+
+ getCharacterCurrentParams(kCharacterAlouan)[4] = 0x7FFFFFFF;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 5;
+ AlouanCall(&LogicManager::CONS_Alouan_PeekH, 0, 0, 0, 0);
}
- getCharacterCurrentParams(kCharacterAlouan)[4] = 0x7FFFFFFF;
- LABEL_34:
- getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 5;
- AlouanCall(&LogicManager::CONS_Alouan_PeekH, 0, 0, 0, 0);
+
+ break;
+ case 12:
+ send(kCharacterAlouan, kCharacterClerk, 191070912, 4840);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAlouan).characterPosition.position = 4840;
+ if (getCharacterCurrentParams(kCharacterAlouan)[1] != 0x7FFFFFFF && _gameTime > 1989000) {
+ if (_gameTime > 2119500) {
+ getCharacterCurrentParams(kCharacterAlouan)[1] = 0x7FFFFFFF;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
+ AlouanCall(&LogicManager::CONS_Alouan_PeekF, 0, 0, 0, 0);
+ break;
+ }
+
+ if (!cathInCorridor(kCarGreenSleeping) || !getCharacterCurrentParams(kCharacterAlouan)[1]) {
+ getCharacterCurrentParams(kCharacterAlouan)[1] = _gameTime + 75;
+ if (_gameTime == -75) {
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
+ AlouanCall(&LogicManager::CONS_Alouan_PeekF, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterAlouan)[1] < _gameTime) {
+ getCharacterCurrentParams(kCharacterAlouan)[1] = 0x7FFFFFFF;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
+ AlouanCall(&LogicManager::CONS_Alouan_PeekF, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ // fall through
+ case 2:
+ if (_gameTime > 2052000 && !getCharacterCurrentParams(kCharacterAlouan)[2]) {
+ getCharacterCurrentParams(kCharacterAlouan)[2] = 1;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 3;
+ AlouanCall(&LogicManager::CONS_Alouan_DoDialog, "Har1005", 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 3:
+ if (_gameTime > 2133000 && !getCharacterCurrentParams(kCharacterAlouan)[3]) {
+ getCharacterCurrentParams(kCharacterAlouan)[3] = 1;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 4;
+ AlouanCall(&LogicManager::CONS_Alouan_GoFtoH, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 4:
+ if (getCharacterCurrentParams(kCharacterAlouan)[4] != 0x7FFFFFFF && _gameTime > 2151000) {
+ if (_gameTime <= 2241000) {
+ if (!cathInCorridor(kCarGreenSleeping) || !getCharacterCurrentParams(kCharacterAlouan)[4]) {
+ getCharacterCurrentParams(kCharacterAlouan)[4] = _gameTime + 75;
+ if (_gameTime == -75) {
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 5;
+ AlouanCall(&LogicManager::CONS_Alouan_PeekH, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterAlouan)[4] >= _gameTime)
+ break;
+ }
+
+ getCharacterCurrentParams(kCharacterAlouan)[4] = 0x7FFFFFFF;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 5;
+ AlouanCall(&LogicManager::CONS_Alouan_PeekH, 0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -615,13 +781,18 @@ void LogicManager::CONS_Alouan_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Alouan_StartPart4(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_Alouan_Part4(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
endGraphics(kCharacterAlouan);
getCharacter(kCharacterAlouan).characterPosition.position = 2740;
getCharacter(kCharacterAlouan).characterPosition.location = 1;
getCharacter(kCharacterAlouan).characterPosition.car = kCarGreenSleeping;
+ break;
+ default:
+ break;
}
}
@@ -638,49 +809,78 @@ void LogicManager::CONS_Alouan_Part4(CONS_PARAMS) {
void LogicManager::HAND_Alouan_Part4(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (getCharacterCurrentParams(kCharacterAlouan)[0] == 0x7FFFFFFF || !_gameTime)
- goto LABEL_22;
+ if (getCharacterCurrentParams(kCharacterAlouan)[0] == 0x7FFFFFFF || !_gameTime) {
+ if (_gameTime > 2455200 && !getCharacterCurrentParams(kCharacterAlouan)[1]) {
+ getCharacterCurrentParams(kCharacterAlouan)[1] = 1;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
+ AlouanCall(&LogicManager::CONS_Alouan_GoHtoF, 0, 0, 0, 0);
+ } else if (_gameTime > 2475000 && !getCharacterCurrentParams(kCharacterAlouan)[2]) {
+ getCharacterCurrentParams(kCharacterAlouan)[2] = 1;
+ send(kCharacterAlouan, kCharacterClerk, 191070912, 4840);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 3;
+ AlouanCall(&LogicManager::CONS_Alouan_GoFtoH, 0, 0, 0, 0);
+ }
+
+ break;
+ }
if (_gameTime <= 2443500) {
if (!cathInCorridor(kCarGreenSleeping) || !getCharacterCurrentParams(kCharacterAlouan)[0]) {
getCharacterCurrentParams(kCharacterAlouan)[0] = _gameTime + 75;
- if (_gameTime == -75)
- goto LABEL_13;
+ if (_gameTime == -75) {
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 1;
+ AlouanCall(&LogicManager::CONS_Alouan_PeekH, 0, 0, 0, 0);
+ break;
+ }
}
- if (getCharacterCurrentParams(kCharacterAlouan)[0] >= _gameTime)
- goto LABEL_22;
+ if (getCharacterCurrentParams(kCharacterAlouan)[0] >= _gameTime) {
+ if (_gameTime > 2455200 && !getCharacterCurrentParams(kCharacterAlouan)[1]) {
+ getCharacterCurrentParams(kCharacterAlouan)[1] = 1;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
+ AlouanCall(&LogicManager::CONS_Alouan_GoHtoF, 0, 0, 0, 0);
+ } else if (_gameTime > 2475000 && !getCharacterCurrentParams(kCharacterAlouan)[2]) {
+ getCharacterCurrentParams(kCharacterAlouan)[2] = 1;
+ send(kCharacterAlouan, kCharacterClerk, 191070912, 4840);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 3;
+ AlouanCall(&LogicManager::CONS_Alouan_GoFtoH, 0, 0, 0, 0);
+ }
+
+ break;
+ }
}
getCharacterCurrentParams(kCharacterAlouan)[0] = 0x7FFFFFFF;
- LABEL_13:
getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 1;
AlouanCall(&LogicManager::CONS_Alouan_PeekH, 0, 0, 0, 0);
- return;
+ break;
case 12:
send(kCharacterAlouan, kCharacterClerk, 191070912, 4840);
- return;
+ break;
case 18:
if (getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] != 1) {
if (getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] != 2)
- return;
+ break;
send(kCharacterAlouan, kCharacterClerk, 191070912, 4070);
- goto LABEL_18;
- }
- LABEL_22:
- if (_gameTime > 2455200 && !getCharacterCurrentParams(kCharacterAlouan)[1]) {
- getCharacterCurrentParams(kCharacterAlouan)[1] = 1;
- getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
- AlouanCall(&LogicManager::CONS_Alouan_GoHtoF, 0, 0, 0, 0);
- return;
- }
- LABEL_18:
- if (_gameTime > 2475000 && !getCharacterCurrentParams(kCharacterAlouan)[2]) {
- getCharacterCurrentParams(kCharacterAlouan)[2] = 1;
- send(kCharacterAlouan, kCharacterClerk, 191070912, 4840);
- getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 3;
- AlouanCall(&LogicManager::CONS_Alouan_GoFtoH, 0, 0, 0, 0);
+
+ if (_gameTime > 2475000 && !getCharacterCurrentParams(kCharacterAlouan)[2]) {
+ getCharacterCurrentParams(kCharacterAlouan)[2] = 1;
+ send(kCharacterAlouan, kCharacterClerk, 191070912, 4840);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 3;
+ AlouanCall(&LogicManager::CONS_Alouan_GoFtoH, 0, 0, 0, 0);
+ }
+ } else {
+ if (_gameTime > 2455200 && !getCharacterCurrentParams(kCharacterAlouan)[1]) {
+ getCharacterCurrentParams(kCharacterAlouan)[1] = 1;
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 2;
+ AlouanCall(&LogicManager::CONS_Alouan_GoHtoF, 0, 0, 0, 0);
+ } else if (_gameTime > 2475000 && !getCharacterCurrentParams(kCharacterAlouan)[2]) {
+ getCharacterCurrentParams(kCharacterAlouan)[2] = 1;
+ send(kCharacterAlouan, kCharacterClerk, 191070912, 4840);
+ getCharacter(kCharacterAlouan).callbacks[getCharacter(kCharacterAlouan).currentCall + 8] = 3;
+ AlouanCall(&LogicManager::CONS_Alouan_GoFtoH, 0, 0, 0, 0);
+ }
}
break;
@@ -698,13 +898,17 @@ void LogicManager::CONS_Alouan_Asleep4(CONS_PARAMS) {
}
void LogicManager::HAND_Alouan_Asleep4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
setDoor(7, kCharacterCath, 3, 10, 9);
setDoor(5, kCharacterCath, 3, 10, 9);
getCharacter(kCharacterAlouan).characterPosition.position = 2740;
getCharacter(kCharacterAlouan).characterPosition.location = 1;
getCharacter(kCharacterAlouan).characterPosition.car = kCarGreenSleeping;
endGraphics(kCharacterAlouan);
+ break;
+ default:
+ break;
}
}
@@ -719,15 +923,20 @@ void LogicManager::CONS_Alouan_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Alouan_StartPart5(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_Alouan_Prisoner(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
endGraphics(kCharacterAlouan);
getCharacter(kCharacterAlouan).characterPosition.car = kCarRestaurant;
getCharacter(kCharacterAlouan).characterPosition.position = 3969;
getCharacter(kCharacterAlouan).characterPosition.location = 1;
getCharacter(kCharacterAlouan).clothes = 0;
getCharacter(kCharacterAlouan).inventoryItem = kItemNone;
+ break;
+ default:
+ break;
}
}
@@ -742,8 +951,13 @@ void LogicManager::CONS_Alouan_Prisoner(CONS_PARAMS) {
}
void LogicManager::HAND_Alouan_Prisoner(HAND_PARAMS) {
- if (msg->action == 70549068)
+ switch (msg->action) {
+ case 70549068:
CONS_Alouan_Free(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Alouan_Free(CONS_PARAMS) {
@@ -757,25 +971,31 @@ void LogicManager::CONS_Alouan_Free(CONS_PARAMS) {
}
void LogicManager::HAND_Alouan_Free(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterAlouan)[0] ||
(getCharacterCurrentParams(kCharacterAlouan)[0] = _gameTime + 2700, _gameTime != -2700)) {
if (getCharacterCurrentParams(kCharacterAlouan)[0] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterAlouan)[0] = 0x7FFFFFFF;
}
CONS_Alouan_Hiding(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
getCharacter(kCharacterAlouan).characterPosition.car = kCarGreenSleeping;
getCharacter(kCharacterAlouan).characterPosition.position = 5000;
getCharacter(kCharacterAlouan).characterPosition.location = 0;
-
- } else if (msg->action == 17) {
+ break;
+ case 17:
if (checkLoc(kCharacterCath, 3)) {
CONS_Alouan_Hiding(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -810,6 +1030,8 @@ void LogicManager::HAND_Alouan_Hiding(HAND_PARAMS) {
case 135800432:
CONS_Alouan_Disappear(0, 0, 0, 0);
break;
+ default:
+ break;
}
}
Commit: 2f22a8586a076f6669e9a9587c7eee22f09c0d5a
https://github.com/scummvm/scummvm/commit/2f22a8586a076f6669e9a9587c7eee22f09c0d5a
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Vassili logic
Changed paths:
engines/lastexpress/characters/vassili.cpp
diff --git a/engines/lastexpress/characters/vassili.cpp b/engines/lastexpress/characters/vassili.cpp
index 84d038f88c2..1246d0978a8 100644
--- a/engines/lastexpress/characters/vassili.cpp
+++ b/engines/lastexpress/characters/vassili.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_Vassili(int chapter) {
CONS_Vassili_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -69,19 +69,25 @@ void LogicManager::CONS_Vassili_DebugWalks(CONS_PARAMS) {
}
void LogicManager::HAND_Vassili_DebugWalks(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterVassili).characterPosition.position = 0;
- getCharacter(kCharacterVassili).characterPosition.location = 0;
- getCharacter(kCharacterVassili).characterPosition.car = kCarGreenSleeping;
- getCharacterCurrentParams(kCharacterVassili)[0] = 10000;
- }
- } else if (walk(kCharacterVassili, kCarGreenSleeping, getCharacterCurrentParams(kCharacterVassili)[0])) {
- if (getCharacterCurrentParams(kCharacterVassili)[0] == 10000) {
- getCharacterCurrentParams(kCharacterVassili)[0] = 0;
- } else {
- getCharacterCurrentParams(kCharacterVassili)[0] = 10000;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterVassili, kCarGreenSleeping, getCharacterCurrentParams(kCharacterVassili)[0])) {
+ if (getCharacterCurrentParams(kCharacterVassili)[0] == 10000) {
+ getCharacterCurrentParams(kCharacterVassili)[0] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterVassili)[0] = 10000;
+ }
}
+
+ break;
+ case 12:
+ getCharacter(kCharacterVassili).characterPosition.position = 0;
+ getCharacter(kCharacterVassili).characterPosition.location = 0;
+ getCharacter(kCharacterVassili).characterPosition.car = kCarGreenSleeping;
+ getCharacterCurrentParams(kCharacterVassili)[0] = 10000;
+ break;
+ default:
+ break;
}
}
@@ -98,12 +104,17 @@ void LogicManager::CONS_Vassili_DoSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Vassili_DoSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
getCharacter(kCharacterVassili).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterVassili, _functionsVassili[getCharacter(kCharacterVassili).callbacks[getCharacter(kCharacterVassili).currentCall]]);
fedEx(kCharacterVassili, kCharacterVassili, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterVassili, (char *)&getCharacterCurrentParams(kCharacterVassili)[0]);
+ break;
+ default:
+ break;
}
}
@@ -121,12 +132,14 @@ void LogicManager::CONS_Vassili_SaveGame(CONS_PARAMS) {
}
void LogicManager::HAND_Vassili_SaveGame(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
getCharacter(kCharacterVassili).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterVassili, _functionsVassili[getCharacter(kCharacterVassili).callbacks[getCharacter(kCharacterVassili).currentCall]]);
fedEx(kCharacterVassili, kCharacterVassili, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
save(
kCharacterVassili,
getCharacterCurrentParams(kCharacterVassili)[0],
@@ -137,6 +150,9 @@ void LogicManager::HAND_Vassili_SaveGame(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterVassili, _functionsVassili[getCharacter(kCharacterVassili).callbacks[getCharacter(kCharacterVassili).currentCall]]);
fedEx(kCharacterVassili, kCharacterVassili, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -151,14 +167,20 @@ void LogicManager::CONS_Vassili_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Vassili_Birth(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterVassili)[0]) {
getCharacterCurrentParams(kCharacterVassili)[0] = 1;
CONS_Vassili_WithTatiana(0, 0, 0, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
setDoor(32, kCharacterCath, 0, 10, 9);
setDoor(40, kCharacterCath, 0, 255, 255);
+ break;
+ default:
+ break;
}
}
@@ -173,24 +195,32 @@ void LogicManager::CONS_Vassili_WithTatiana(CONS_PARAMS) {
}
void LogicManager::HAND_Vassili_WithTatiana(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterVassili)[0]) {
getCharacter(kCharacterVassili).characterPosition = getCharacter(kCharacterTatiana).characterPosition;
} else if (!getCharacterCurrentParams(kCharacterVassili)[2] &&
(getCharacterCurrentParams(kCharacterVassili)[2] = _gameTime + 450, _gameTime == -450) || getCharacterCurrentParams(kCharacterVassili)[2] < _gameTime) {
if (!getCharacterCurrentParams(kCharacterVassili)[1] && getModel(32) == 1) {
getCharacterCurrentParams(kCharacterVassili)[1] = 1;
- startCycOtis(11, "303A");
+ startCycOtis(kCharacterVassili, "303A");
setDoor(32, kCharacterCath, 0, 10, 9);
}
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
getCharacterCurrentParams(kCharacterVassili)[0] = 1;
- } else if (msg->action == 122732000) {
+ break;
+ case 122732000:
CONS_Vassili_InBed(0, 0, 0, 0);
- } else if (msg->action == 168459827) {
+ break;
+ case 168459827:
getCharacterCurrentParams(kCharacterVassili)[0] = 0;
setDoor(32, kCharacterCath, 1, 10, 9);
+ break;
+ default:
+ break;
}
}
@@ -205,8 +235,9 @@ void LogicManager::CONS_Vassili_InBed(CONS_PARAMS) {
}
void LogicManager::HAND_Vassili_InBed(HAND_PARAMS) {
- if (msg->action == 0) {
- if (inComp(0, 4, 8200)) {
+ switch (msg->action) {
+ case 0:
+ if (inComp(kCharacterCath, kCarRedSleeping, 8200)) {
if (getCharacterCurrentParams(kCharacterVassili)[2] ||
((getCharacterCurrentParams(kCharacterVassili)[2] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterVassili)[0]),
_currentGameSessionTicks + getCharacterCurrentParams(kCharacterVassili)[0] != 0)) {
@@ -215,49 +246,56 @@ void LogicManager::HAND_Vassili_InBed(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterVassili)[2] = 0x7FFFFFFF;
getCharacter(kCharacterVassili).callbacks[getCharacter(kCharacterVassili).currentCall + 8] = 1;
VassiliCall(&LogicManager::CONS_Vassili_DoSeqOtis, "303B", 0, 0, 0);
- return;
+ break;
}
} else {
getCharacter(kCharacterVassili).callbacks[getCharacter(kCharacterVassili).currentCall + 8] = 1;
VassiliCall(&LogicManager::CONS_Vassili_DoSeqOtis, "303B", 0, 0, 0);
- return;
+ break;
}
} else {
getCharacterCurrentParams(kCharacterVassili)[2] = 0;
if (getCharacterCurrentParams(kCharacterVassili)[1])
- startCycOtis(11, "303A");
+ startCycOtis(kCharacterVassili, "303A");
}
if (getCharacterCurrentParams(kCharacterVassili)[3] != 0x7FFFFFFF && _gameTime > 1489500) {
if (_gameTime <= 1503000) {
- if (inComp(0, 4, 8200) || !getCharacterCurrentParams(kCharacterVassili)[3]) {
+ if (inComp(kCharacterCath, kCarRedSleeping, 8200) || !getCharacterCurrentParams(kCharacterVassili)[3]) {
getCharacterCurrentParams(kCharacterVassili)[3] = _gameTime;
if (!_gameTime) {
CONS_Vassili_InBed2(0, 0, 0, 0);
- return;
+ break;
}
}
if (getCharacterCurrentParams(kCharacterVassili)[3] >= _gameTime)
- return;
+ break;
}
getCharacterCurrentParams(kCharacterVassili)[3] = 0x7FFFFFFF;
CONS_Vassili_InBed2(0, 0, 0, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
getCharacter(kCharacterVassili).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterVassili).characterPosition.location = 1;
getCharacter(kCharacterVassili).characterPosition.position = 8200;
- setDoor(32, 0, 0, 10, 9);
+ setDoor(32, kCharacterCath, 0, 10, 9);
getCharacterCurrentParams(kCharacterVassili)[0] = 5 * (3 * rnd(25) + 15);
- startCycOtis(11, "303A");
- } else if (msg->action == 18) {
+ startCycOtis(kCharacterVassili, "303A");
+ break;
+ case 18:
if (getCharacter(kCharacterVassili).callbacks[getCharacter(kCharacterVassili).currentCall + 8] == 1) {
- startCycOtis(11, "303C");
+ startCycOtis(kCharacterVassili, "303C");
getCharacterCurrentParams(kCharacterVassili)[1] = 1;
getCharacterCurrentParams(kCharacterVassili)[0] = 5 * (3 * rnd(25) + 15);
}
+
+ break;
+ default:
+ break;
}
}
@@ -275,24 +313,24 @@ void LogicManager::HAND_Vassili_InBed2(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (getCharacterCurrentParams(kCharacterVassili)[0] == 0x7FFFFFFF || _gameTime <= 1503000)
- return;
+ break;
if (_gameTime <= 1512000) {
if (!cathInCorridor(kCarRedSleeping) || !getCharacterCurrentParams(kCharacterVassili)[0]) {
getCharacterCurrentParams(kCharacterVassili)[0] = _gameTime + 150;
if (_gameTime == -150) {
CONS_Vassili_HaveSeizureNow(0, 0, 0, 0);
- return;
+ break;
}
}
if (getCharacterCurrentParams(kCharacterVassili)[0] >= _gameTime)
- return;
+ break;
}
getCharacterCurrentParams(kCharacterVassili)[0] = 0x7FFFFFFF;
CONS_Vassili_HaveSeizureNow(0, 0, 0, 0);
- return;
+ break;
case 12:
getCharacter(kCharacterVassili).characterPosition.car = 4;
getCharacter(kCharacterVassili).characterPosition.location = 1;
@@ -321,9 +359,11 @@ void LogicManager::CONS_Vassili_HaveSeizureNow(CONS_PARAMS) {
}
void LogicManager::HAND_Vassili_HaveSeizureNow(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
CONS_Vassili_HavingSeizure(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
if (!checkLoc(kCharacterCath, kCarRedSleeping)) {
playDialog(0, "BUMP", -1, 0);
@@ -338,6 +378,9 @@ void LogicManager::HAND_Vassili_HaveSeizureNow(HAND_PARAMS) {
send(kCharacterVassili, kCharacterTrainM, 226031488, 0);
send(kCharacterVassili, kCharacterCond2, 226031488, 0);
playDialog(kCharacterVassili, "VAS1027", 16, 0);
+ break;
+ default:
+ break;
}
}
@@ -352,14 +395,16 @@ void LogicManager::CONS_Vassili_HavingSeizure(CONS_PARAMS) {
}
void LogicManager::HAND_Vassili_HavingSeizure(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
if (!nearChar(kCharacterVassili, kCharacterCath, 2500))
playDialog(0, "BUMP", -1, 0);
CONS_Vassili_CathArrives(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
if ((checkDoor(32) != 2 ||
- !checkCathDir(4, 17)) &&
+ !checkCathDir(kCarRedSleeping, 17)) &&
!checkCathDir(kCarRedSleeping, 18) &&
!checkCathDir(kCarRedSleeping, 37) &&
!checkCathDir(kCarRedSleeping, 38) &&
@@ -369,7 +414,9 @@ void LogicManager::HAND_Vassili_HavingSeizure(HAND_PARAMS) {
} else {
CONS_Vassili_CathArrives(0, 0, 0, 0);
}
- } else if (msg->action == 17) {
+
+ break;
+ case 17:
if (checkDoor(32) == 2 &&
checkCathDir(kCarRedSleeping, 17) ||
checkCathDir(kCarRedSleeping, 18) ||
@@ -380,6 +427,10 @@ void LogicManager::HAND_Vassili_HavingSeizure(HAND_PARAMS) {
fadeDialog(kCharacterVassili);
CONS_Vassili_CathArrives(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -394,7 +445,8 @@ void LogicManager::CONS_Vassili_CathArrives(CONS_PARAMS) {
}
void LogicManager::HAND_Vassili_CathArrives(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
if (_gameProgress[kProgressEventCorpseThrown]) {
if (_gameProgress[kProgressJacket] == 1) {
@@ -414,17 +466,25 @@ void LogicManager::HAND_Vassili_CathArrives(HAND_PARAMS) {
playNIS(kEventMertensCorpseFloor);
endGame(0, 0, 0, true);
}
- } else if (msg->action == 18 && getCharacter(kCharacterVassili).callbacks[getCharacter(kCharacterVassili).currentCall + 8] == 1) {
- getCharacter(kCharacterCath).characterPosition.location = 1;
- playNIS(kEventVassiliSeizure);
- setDoor(32, kCharacterCath, 0, 10, 9);
- setDoor(1, kCharacterCath, 0, 10, 9);
- _gameProgress[kProgressField18] = 2;
- send(kCharacterVassili, kCharacterAnna, 191477936, 0);
- send(kCharacterVassili, kCharacterTrainM, 191477936, 0);
- send(kCharacterVassili, kCharacterCond2, 191477936, 0);
- bumpCathRDoor(32);
- CONS_Vassili_AsleepAgain(0, 0, 0, 0);
+
+ break;
+ case 18:
+ if (getCharacter(kCharacterVassili).callbacks[getCharacter(kCharacterVassili).currentCall + 8] == 1) {
+ getCharacter(kCharacterCath).characterPosition.location = 1;
+ playNIS(kEventVassiliSeizure);
+ setDoor(32, kCharacterCath, 0, 10, 9);
+ setDoor(1, kCharacterCath, 0, 10, 9);
+ _gameProgress[kProgressField18] = 2;
+ send(kCharacterVassili, kCharacterAnna, 191477936, 0);
+ send(kCharacterVassili, kCharacterTrainM, 191477936, 0);
+ send(kCharacterVassili, kCharacterCond2, 191477936, 0);
+ bumpCathRDoor(32);
+ CONS_Vassili_AsleepAgain(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -439,8 +499,13 @@ void LogicManager::CONS_Vassili_AsleepAgain(CONS_PARAMS) {
}
void LogicManager::HAND_Vassili_AsleepAgain(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
startCycOtis(kCharacterVassili, "303A");
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Vassili_StartPart2(CONS_PARAMS) {
@@ -454,9 +519,11 @@ void LogicManager::CONS_Vassili_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Vassili_StartPart2(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_Vassili_InPart2(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
endGraphics(kCharacterVassili);
getCharacter(kCharacterVassili).characterPosition.position = 8200;
getCharacter(kCharacterVassili).characterPosition.location = 1;
@@ -465,6 +532,9 @@ void LogicManager::HAND_Vassili_StartPart2(HAND_PARAMS) {
getCharacter(kCharacterVassili).clothes = 0;
setDoor(32, kCharacterCath, 0, 10, 9);
setModel(32, 1);
+ break;
+ default:
+ break;
}
}
@@ -479,7 +549,8 @@ void LogicManager::CONS_Vassili_InPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Vassili_InPart2(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (inComp(kCharacterCath, kCarRedSleeping, 8200)) {
if (getCharacterCurrentParams(kCharacterVassili)[2] ||
(getCharacterCurrentParams(kCharacterVassili)[2] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterVassili)[0],
@@ -493,17 +564,24 @@ void LogicManager::HAND_Vassili_InPart2(HAND_PARAMS) {
} else {
getCharacterCurrentParams(kCharacterVassili)[2] = 0;
if (getCharacterCurrentParams(kCharacterVassili)[1])
- startCycOtis(11, "303A");
+ startCycOtis(kCharacterVassili, "303A");
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
getCharacterCurrentParams(kCharacterVassili)[0] = 5 * (3 * rnd(25) + 15);
startCycOtis(kCharacterVassili, "303A");
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterVassili).callbacks[getCharacter(kCharacterVassili).currentCall + 8] == 1) {
startCycOtis(kCharacterVassili, "303C");
getCharacterCurrentParams(kCharacterVassili)[1] = 1;
getCharacterCurrentParams(kCharacterVassili)[0] = 5 * (3 * rnd(25) + 15);
}
+
+ break;
+ default:
+ break;
}
}
@@ -518,9 +596,11 @@ void LogicManager::CONS_Vassili_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Vassili_StartPart3(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_Vassili_Asleep(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
endGraphics(kCharacterVassili);
getCharacter(kCharacterVassili).characterPosition.position = 8200;
getCharacter(kCharacterVassili).characterPosition.location = 1;
@@ -528,6 +608,9 @@ void LogicManager::HAND_Vassili_StartPart3(HAND_PARAMS) {
getCharacter(kCharacterVassili).inventoryItem = kItemNone;
getCharacter(kCharacterVassili).clothes = 0;
setDoor(32, kCharacterCath, 0, 10, 9);
+ break;
+ default:
+ break;
}
}
@@ -550,7 +633,7 @@ void LogicManager::HAND_Vassili_Asleep(HAND_PARAMS) {
_currentGameSessionTicks + getCharacterCurrentParams(kCharacterVassili)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterVassili)[2] >= _currentGameSessionTicks)
- return;
+ break;
getCharacterCurrentParams(kCharacterVassili)[2] = 0x7FFFFFFF;
}
@@ -566,11 +649,11 @@ void LogicManager::HAND_Vassili_Asleep(HAND_PARAMS) {
break;
case 9:
getCharacter(kCharacterVassili).callbacks[getCharacter(kCharacterVassili).currentCall + 8] = 2;
- VassiliCall(&LogicManager::CONS_Vassili_SaveGame, 2, 91, 0, 0);
+ VassiliCall(&LogicManager::CONS_Vassili_SaveGame, 2, kEventVassiliCompartmentStealEgg, 0, 0);
break;
case 12:
getCharacterCurrentParams(kCharacterVassili)[0] = 5 * (3 * rnd(25) + 15);
- startCycOtis(11, "303A");
+ startCycOtis(kCharacterVassili, "303A");
break;
case 17:
if (inComp(kCharacterCath, kCarRedSleeping, 7850) && cathHasItem(kItemFirebird) && !_gameEvents[kEventVassiliCompartmentStealEgg]) {
@@ -607,9 +690,11 @@ void LogicManager::CONS_Vassili_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Vassili_StartPart4(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_Vassili_InPart4(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
endGraphics(kCharacterVassili);
getCharacter(kCharacterVassili).characterPosition.position = 8200;
getCharacter(kCharacterVassili).characterPosition.location = 1;
@@ -618,6 +703,9 @@ void LogicManager::HAND_Vassili_StartPart4(HAND_PARAMS) {
getCharacter(kCharacterVassili).clothes = 0;
setDoor(32, kCharacterCath, 0, 10, 9);
setModel(32, 1);
+ break;
+ default:
+ break;
}
}
@@ -632,13 +720,14 @@ void LogicManager::CONS_Vassili_InPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Vassili_InPart4(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (inComp(kCharacterCath, kCarRedSleeping, 8200)) {
if (getCharacterCurrentParams(kCharacterVassili)[2] ||
(getCharacterCurrentParams(kCharacterVassili)[2] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterVassili)[0],
_currentGameSessionTicks + getCharacterCurrentParams(kCharacterVassili)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterVassili)[2] >= _currentGameSessionTicks)
- return;
+ break;
getCharacterCurrentParams(kCharacterVassili)[2] = 0x7FFFFFFF;
}
@@ -648,17 +737,24 @@ void LogicManager::HAND_Vassili_InPart4(HAND_PARAMS) {
} else {
getCharacterCurrentParams(kCharacterVassili)[2] = 0;
if (getCharacterCurrentParams(kCharacterVassili)[1])
- startCycOtis(11, "303A");
+ startCycOtis(kCharacterVassili, "303A");
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
getCharacterCurrentParams(kCharacterVassili)[0] = 5 * (3 * rnd(25) + 15);
- startCycOtis(11, "303A");
- } else if (msg->action == 18) {
+ startCycOtis(kCharacterVassili, "303A");
+ break;
+ case 18:
if (getCharacter(kCharacterVassili).callbacks[getCharacter(kCharacterVassili).currentCall + 8] == 1) {
- startCycOtis(11, "303C");
+ startCycOtis(kCharacterVassili, "303C");
getCharacterCurrentParams(kCharacterVassili)[1] = 1;
getCharacterCurrentParams(kCharacterVassili)[0] = 5 * (3 * rnd(25) + 15);
}
+
+ break;
+ default:
+ break;
}
}
@@ -673,13 +769,17 @@ void LogicManager::CONS_Vassili_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Vassili_StartPart5(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterVassili);
getCharacter(kCharacterVassili).characterPosition.location = 1;
getCharacter(kCharacterVassili).characterPosition.position = 3969;
getCharacter(kCharacterVassili).characterPosition.car = kCarRestaurant;
getCharacter(kCharacterVassili).inventoryItem = kItemNone;
getCharacter(kCharacterVassili).clothes = 0;
+ break;
+ default:
+ break;
}
}
Commit: 8c0ebf3e17391d36df9ba56c5b39f71cf26b9fa4
https://github.com/scummvm/scummvm/commit/8c0ebf3e17391d36df9ba56c5b39f71cf26b9fa4
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up August logic
Changed paths:
engines/lastexpress/characters/august.cpp
diff --git a/engines/lastexpress/characters/august.cpp b/engines/lastexpress/characters/august.cpp
index f4faa34d82d..0bebad61cf6 100644
--- a/engines/lastexpress/characters/august.cpp
+++ b/engines/lastexpress/characters/august.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_August(int chapter) {
CONS_August_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -69,24 +69,32 @@ void LogicManager::CONS_August_DebugWalks(CONS_PARAMS) {
}
void LogicManager::HAND_August_DebugWalks(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 1) {
- getCharacter(kCharacterAugust).clothes++;
- if (getCharacter(kCharacterAugust).clothes > 2)
- getCharacter(kCharacterAugust).clothes = 0;
- } else if (msg->action == 12) {
- getCharacter(kCharacterAugust).characterPosition.position = 0;
- getCharacter(kCharacterAugust).characterPosition.location = 0;
- getCharacter(kCharacterAugust).characterPosition.car = kCarGreenSleeping;
- getCharacter(kCharacterAugust).inventoryItem = kItemInvalid;
- getCharacterCurrentParams(kCharacterAugust)[0] = 10000;
- }
- } else if (walk(kCharacterAugust, kCarGreenSleeping, getCharacterCurrentParams(kCharacterAugust)[0])) {
- if (getCharacterCurrentParams(kCharacterAugust)[0] == 10000) {
- getCharacterCurrentParams(kCharacterAugust)[0] = 0;
- } else {
- getCharacterCurrentParams(kCharacterAugust)[0] = 10000;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterAugust, kCarGreenSleeping, getCharacterCurrentParams(kCharacterAugust)[0])) {
+ if (getCharacterCurrentParams(kCharacterAugust)[0] == 10000) {
+ getCharacterCurrentParams(kCharacterAugust)[0] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterAugust)[0] = 10000;
+ }
}
+
+ break;
+ case 1:
+ getCharacter(kCharacterAugust).clothes++;
+ if (getCharacter(kCharacterAugust).clothes > 2)
+ getCharacter(kCharacterAugust).clothes = 0;
+
+ break;
+ case 12:
+ getCharacter(kCharacterAugust).characterPosition.position = 0;
+ getCharacter(kCharacterAugust).characterPosition.location = 0;
+ getCharacter(kCharacterAugust).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterAugust).inventoryItem = kItemInvalid;
+ getCharacterCurrentParams(kCharacterAugust)[0] = 10000;
+ break;
+ default:
+ break;
}
}
@@ -103,11 +111,12 @@ void LogicManager::CONS_August_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_August_DoWait(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterAugust)[1] ||
(getCharacterCurrentParams(kCharacterAugust)[1] = _gameTime + getCharacterCurrentParams(kCharacterAugust)[0], _gameTime + getCharacterCurrentParams(kCharacterAugust)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterAugust)[1] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterAugust)[1] = 0x7FFFFFFF;
}
@@ -115,6 +124,9 @@ void LogicManager::HAND_August_DoWait(HAND_PARAMS) {
getCharacter(kCharacterAugust).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -131,12 +143,17 @@ void LogicManager::CONS_August_DoSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_August_DoSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
getCharacter(kCharacterAugust).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterAugust, (char *)&getCharacterCurrentParams(kCharacterAugust)[0]);
+ break;
+ default:
+ break;
}
}
@@ -156,15 +173,20 @@ void LogicManager::CONS_August_DoBlockSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_August_DoBlockSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseView(kCharacterAugust, getCharacterCurrentParams(kCharacterAugust)[3], getCharacterCurrentParams(kCharacterAugust)[4]);
getCharacter(kCharacterAugust).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterAugust, (char *)&getCharacterCurrentParams(kCharacterAugust)[0]);
blockView(kCharacterAugust, getCharacterCurrentParams(kCharacterAugust)[3], getCharacterCurrentParams(kCharacterAugust)[4]);
+ break;
+ default:
+ break;
}
}
@@ -183,15 +205,20 @@ void LogicManager::CONS_August_DoCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_August_DoCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterAugust, getCharacterCurrentParams(kCharacterAugust)[3]);
getCharacter(kCharacterAugust).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterAugust, (char *)&getCharacterCurrentParams(kCharacterAugust)[0]);
blockAtDoor(kCharacterAugust, getCharacterCurrentParams(kCharacterAugust)[3]);
+ break;
+ default:
+ break;
}
}
@@ -210,7 +237,8 @@ void LogicManager::CONS_August_DoEnterCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_August_DoEnterCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterAugust, getCharacterCurrentParams(kCharacterAugust)[3]);
getCharacter(kCharacterAugust).characterPosition.position = 6470;
getCharacter(kCharacterAugust).characterPosition.location = 1;
@@ -218,7 +246,8 @@ void LogicManager::HAND_August_DoEnterCorrOtis(HAND_PARAMS) {
getCharacter(kCharacterAugust).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterAugust, (char *)&getCharacterCurrentParams(kCharacterAugust)[0]);
blockAtDoor(kCharacterAugust, getCharacterCurrentParams(kCharacterAugust)[3]);
getCharacter(kCharacterAugust).characterPosition.location = 1;
@@ -232,6 +261,10 @@ void LogicManager::HAND_August_DoEnterCorrOtis(HAND_PARAMS) {
playDialog(0, "BUMP", -1, 0);
bumpCathFDoor(3);
}
+
+ break;
+ default:
+ break;
}
}
@@ -250,17 +283,21 @@ void LogicManager::CONS_August_DoBriefCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_August_DoBriefCorrOtis(HAND_PARAMS) {
- if (msg->action >= 3) {
- if (msg->action <= 4) {
- releaseAtDoor(kCharacterAugust, getCharacterCurrentParams(kCharacterAugust)[3]);
+ switch (msg->action) {
+ case 3:
+ case 4:
+ releaseAtDoor(kCharacterAugust, getCharacterCurrentParams(kCharacterAugust)[3]);
- getCharacter(kCharacterAugust).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
- fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
- } else if (msg->action == 12) {
- startSeqOtis(kCharacterAugust, (char *)&getCharacterCurrentParams(kCharacterAugust)[0]);
- blockAtDoor(kCharacterAugust, getCharacterCurrentParams(kCharacterAugust)[3]);
- }
+ getCharacter(kCharacterAugust).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
+ fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
+ break;
+ case 12:
+ startSeqOtis(kCharacterAugust, (char *)&getCharacterCurrentParams(kCharacterAugust)[0]);
+ blockAtDoor(kCharacterAugust, getCharacterCurrentParams(kCharacterAugust)[3]);
+ break;
+ default:
+ break;
}
}
@@ -275,16 +312,22 @@ void LogicManager::CONS_August_FinishSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_August_FinishSeqOtis(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacter(kCharacterAugust).direction != 4) {
getCharacter(kCharacterAugust).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
}
- } else if (msg->action == 3) {
+
+ break;
+ case 3:
getCharacter(kCharacterAugust).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -321,10 +364,13 @@ void LogicManager::HAND_August_DoJoinedSeqOtis(HAND_PARAMS) {
fedEx(kCharacterAugust, getCharacterCurrentParams(kCharacterAugust)[3], getCharacterCurrentParams(kCharacterAugust)[4], (char *)&getCharacterCurrentParams(kCharacterAugust)[5]);
getCharacterCurrentParams(kCharacterAugust)[8] = 1;
}
+
break;
case 12:
startSeqOtis(kCharacterAugust, (char *)&getCharacterCurrentParams(kCharacterAugust)[0]);
break;
+ default:
+ break;
}
}
@@ -344,16 +390,24 @@ void LogicManager::CONS_August_FinishJoinedSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_August_FinishJoinedSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
if (!getCharacterCurrentParams(kCharacterAugust)[5])
fedEx(kCharacterAugust, getCharacterCurrentParams(kCharacterAugust)[0], getCharacterCurrentParams(kCharacterAugust)[1], (char *)&getCharacterCurrentParams(kCharacterAugust)[2]);
getCharacter(kCharacterAugust).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
- } else if (msg->action == 10 && !getCharacterCurrentParams(kCharacterAugust)[5]) {
- fedEx(kCharacterAugust, getCharacterCurrentParams(kCharacterAugust)[0], getCharacterCurrentParams(kCharacterAugust)[1], (char *)&getCharacterCurrentParams(kCharacterAugust)[2]);
- getCharacterCurrentParams(kCharacterAugust)[5] = 1;
+ break;
+ case 10:
+ if (!getCharacterCurrentParams(kCharacterAugust)[5]) {
+ fedEx(kCharacterAugust, getCharacterCurrentParams(kCharacterAugust)[0], getCharacterCurrentParams(kCharacterAugust)[1], (char *)&getCharacterCurrentParams(kCharacterAugust)[2]);
+ getCharacterCurrentParams(kCharacterAugust)[5] = 1;
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -373,13 +427,18 @@ void LogicManager::CONS_August_DoComplexSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_August_DoComplexSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
getCharacter(kCharacterAugust).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterAugust, (char *)&getCharacterCurrentParams(kCharacterAugust)[0]);
startSeqOtis(getCharacterCurrentParams(kCharacterAugust)[6], (char *)&getCharacterCurrentParams(kCharacterAugust)[3]);
+ break;
+ default:
+ break;
}
}
@@ -396,12 +455,17 @@ void LogicManager::CONS_August_DoDialog(CONS_PARAMS) {
}
void LogicManager::HAND_August_DoDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterAugust).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterAugust, (char *)&getCharacterCurrentParams(kCharacterAugust)[0], -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -418,12 +482,17 @@ void LogicManager::CONS_August_DoDialogFullVol(CONS_PARAMS) {
}
void LogicManager::HAND_August_DoDialogFullVol(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterAugust).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterAugust, (char *)&getCharacterCurrentParams(kCharacterAugust)[0], 16, 0);
+ break;
+ default:
+ break;
}
}
@@ -438,16 +507,18 @@ void LogicManager::CONS_August_WaitRCClear(CONS_PARAMS) {
}
void LogicManager::HAND_August_WaitRCClear(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
+ case 12:
if (rcClear()) {
getCharacter(kCharacterAugust).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
}
- } else if (msg->action == 12 && rcClear()) {
- getCharacter(kCharacterAugust).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
- fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
+
+ break;
+ default:
+ break;
}
}
@@ -465,22 +536,25 @@ void LogicManager::CONS_August_SaveGame(CONS_PARAMS) {
}
void LogicManager::HAND_August_SaveGame(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- save(
- kCharacterAugust,
- getCharacterCurrentParams(kCharacterAugust)[0],
- getCharacterCurrentParams(kCharacterAugust)[1]
- );
+ switch (msg->action) {
+ case 0:
+ getCharacter(kCharacterAugust).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
+ fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
+ break;
+ case 12:
+ save(
+ kCharacterAugust,
+ getCharacterCurrentParams(kCharacterAugust)[0],
+ getCharacterCurrentParams(kCharacterAugust)[1]
+ );
- getCharacter(kCharacterAugust).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
- fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
- }
- } else {
getCharacter(kCharacterAugust).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -500,11 +574,13 @@ void LogicManager::CONS_August_DoWalk(CONS_PARAMS) {
void LogicManager::HAND_August_DoWalk(HAND_PARAMS) {
switch (msg->action) {
case 0:
+ case 12:
if (walk(kCharacterAugust, getCharacterCurrentParams(kCharacterAugust)[0], getCharacterCurrentParams(kCharacterAugust)[1])) {
getCharacter(kCharacterAugust).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
}
+
break;
case 5:
if (_gameProgress[kProgressEventMetAugust]) {
@@ -516,19 +592,13 @@ void LogicManager::HAND_August_DoWalk(HAND_PARAMS) {
} else {
playCathExcuseMe();
}
+
break;
case 6:
playChrExcuseMe(kCharacterAugust, kCharacterCath, 0);
break;
- case 12:
- if (walk(kCharacterAugust, getCharacterCurrentParams(kCharacterAugust)[0], getCharacterCurrentParams(kCharacterAugust)[1])) {
- getCharacter(kCharacterAugust).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
- fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
- }
- break;
default:
- return;
+ break;
}
}
@@ -545,60 +615,78 @@ void LogicManager::CONS_August_LookingForCath(CONS_PARAMS) {
}
void LogicManager::HAND_August_LookingForCath(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacterParams(kCharacterAugust, 8)[0] = 0;
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
- AugustCall(&LogicManager::CONS_August_DoWalkSearchingForCath, 4, 540, 0, 0);
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
- case 1:
- if (!getCharacterParams(kCharacterAugust, 8)[0])
- goto LABEL_23;
- goto LABEL_22;
- case 2:
- case 3:
- if (getCharacterParams(kCharacterAugust, 8)[0])
- goto LABEL_22;
- endGraphics(kCharacterAugust);
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 4;
- AugustCall(&LogicManager::CONS_August_DoWait, 450, 0, 0, 0);
- break;
- case 4:
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 5;
- AugustCall(&LogicManager::CONS_August_DoWalkSearchingForCath, 4, 540, 0, 0);
- return;
- case 5:
- if (getCharacterParams(kCharacterAugust, 8)[0]) {
- LABEL_22:
- getCharacter(kCharacterAugust).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
- fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAugust)[0] >= _gameTime || getCharacterCurrentParams(kCharacterAugust)[1]) {
+ if (cathInCorridor(kCarGreenSleeping) || cathInCorridor(kCarRedSleeping)) {
+ if (checkLoc(kCharacterCath, kCarGreenSleeping)) {
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
+ AugustCall(&LogicManager::CONS_August_DoWalkSearchingForCath, 3, 540, 0, 0);
} else {
- LABEL_23:
- endGraphics(kCharacterAugust);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
+ AugustCall(&LogicManager::CONS_August_DoWalkSearchingForCath, 4, 9460, 0, 0);
}
- break;
- default:
- return;
}
+ } else {
+ getCharacterCurrentParams(kCharacterAugust)[1] = 1;
+
+ getCharacter(kCharacterAugust).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
+ fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
}
- } else if (getCharacterCurrentParams(kCharacterAugust)[0] >= _gameTime || getCharacterCurrentParams(kCharacterAugust)[1]) {
- if (cathInCorridor(kCarGreenSleeping) || cathInCorridor(kCarRedSleeping)) {
- if (checkLoc(kCharacterCath, kCarGreenSleeping)) {
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
- AugustCall(&LogicManager::CONS_August_DoWalkSearchingForCath, 3, 540, 0, 0);
+
+ break;
+ case 12:
+ getCharacterParams(kCharacterAugust, 8)[0] = 0;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
+ AugustCall(&LogicManager::CONS_August_DoWalkSearchingForCath, 4, 540, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
+ case 1:
+ if (!getCharacterParams(kCharacterAugust, 8)[0]) {
+ endGraphics(kCharacterAugust);
} else {
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
- AugustCall(&LogicManager::CONS_August_DoWalkSearchingForCath, 4, 9460, 0, 0);
+ getCharacter(kCharacterAugust).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
+ fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
+ }
+
+ break;
+ case 2:
+ case 3:
+ if (getCharacterParams(kCharacterAugust, 8)[0]) {
+ getCharacter(kCharacterAugust).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
+ fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
+ } else {
+ endGraphics(kCharacterAugust);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 4;
+ AugustCall(&LogicManager::CONS_August_DoWait, 450, 0, 0, 0);
+ }
+
+ break;
+ case 4:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 5;
+ AugustCall(&LogicManager::CONS_August_DoWalkSearchingForCath, 4, 540, 0, 0);
+ break;
+ case 5:
+ if (getCharacterParams(kCharacterAugust, 8)[0]) {
+ getCharacter(kCharacterAugust).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
+ fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
+ } else {
+ endGraphics(kCharacterAugust);
}
+
+ break;
+ default:
+ break;
}
- } else {
- getCharacterCurrentParams(kCharacterAugust)[1] = 1;
- getCharacter(kCharacterAugust).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
- fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -616,18 +704,13 @@ void LogicManager::CONS_August_DoWalkSearchingForCath(CONS_PARAMS) {
}
void LogicManager::HAND_August_DoWalkSearchingForCath(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12 && walk(kCharacterAugust, getCharacterCurrentParams(kCharacterAugust)[0], getCharacterCurrentParams(kCharacterAugust)[1]))
- goto LABEL_13;
- } else {
+ switch (msg->action) {
+ case 0:
if (walk(kCharacterAugust, getCharacterCurrentParams(kCharacterAugust)[0], getCharacterCurrentParams(kCharacterAugust)[1])) {
- LABEL_13:
getCharacter(kCharacterAugust).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
- return;
- }
- if (nearChar(kCharacterAugust, kCharacterCath, 1000) && !onLowPlatform(kCharacterCath) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
+ } else if (nearChar(kCharacterAugust, kCharacterCath, 1000) && !onLowPlatform(kCharacterCath) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
if (getCharacter(kCharacterAugust).characterPosition.car == kCarGreenSleeping || getCharacter(kCharacterAugust).characterPosition.car == kCarRedSleeping) {
getCharacterParams(kCharacterAugust, 8)[0] = 1;
@@ -636,6 +719,18 @@ void LogicManager::HAND_August_DoWalkSearchingForCath(HAND_PARAMS) {
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
}
}
+
+ break;
+ case 12:
+ if (walk(kCharacterAugust, getCharacterCurrentParams(kCharacterAugust)[0], getCharacterCurrentParams(kCharacterAugust)[1])) {
+ getCharacter(kCharacterAugust).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
+ fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -653,43 +748,13 @@ void LogicManager::CONS_August_EnterComp(CONS_PARAMS) {
}
void LogicManager::HAND_August_EnterComp(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
- case 1:
- Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterAugust)[5], 12, (char *)&getCharacterCurrentParams(kCharacterAugust)[2]);
- Common::strcat_s((char *)&getCharacterCurrentParams(kCharacterAugust)[5], 12, "Qc");
- startCycOtis(kCharacterAugust, (char *)&getCharacterCurrentParams(kCharacterAugust)[5]);
- if (getCharacterCurrentParams(kCharacterAugust)[1])
- getCharacter(kCharacterAugust).inventoryItem = 147;
- break;
- case 2:
- Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterAugust)[5], 12, (char *)&getCharacterCurrentParams(kCharacterAugust)[2]);
- if (getCharacterCurrentParams(kCharacterAugust)[0]) {
- Common::strcat_s((char *)&getCharacterCurrentParams(kCharacterAugust)[5], 12, "Fc");
- } else {
- Common::strcat_s((char *)&getCharacterCurrentParams(kCharacterAugust)[5], 12, "Dc");
- }
-
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
- AugustCall(&LogicManager::CONS_August_DoEnterCorrOtis, (char *)&getCharacterCurrentParams(kCharacterAugust)[5], 3, 0, 0);
- break;
- case 3:
- softReleaseAtDoor(kCharacterAugust, 3);
- getCharacter(kCharacterAugust).characterPosition.location = 1;
- endGraphics(kCharacterAugust);
-
- getCharacter(kCharacterAugust).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
- fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
- break;
- }
- } else if (msg->action == 69239528) {
- getCharacter(kCharacterAugust).inventoryItem = 0;
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
- AugustCall(&LogicManager::CONS_August_DoWait, 75, 0, 0, 0);
- }
- } else if (msg->action == 12) {
+ switch (msg->action) {
+ case 1:
+ getCharacter(kCharacterAugust).inventoryItem = 0;
+ playDialog(kCharacterCath, "CAT1002", -1, 0);
+ playDialog(kCharacterAugust, "AUG3101", -1, 15);
+ break;
+ case 12:
getCharacter(kCharacterAugust).inventoryItem = 0;
switch (_gameProgress[kProgressChapter]) {
case 1:
@@ -719,10 +784,49 @@ void LogicManager::HAND_August_EnterComp(HAND_PARAMS) {
softBlockAtDoor(kCharacterAugust, 3);
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
AugustCall(&LogicManager::CONS_August_DoDialog, "AUG2096", 0, 0, 0);
- } else if (msg->action == 1) {
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
+ case 1:
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterAugust)[5], 12, (char *)&getCharacterCurrentParams(kCharacterAugust)[2]);
+ Common::strcat_s((char *)&getCharacterCurrentParams(kCharacterAugust)[5], 12, "Qc");
+ startCycOtis(kCharacterAugust, (char *)&getCharacterCurrentParams(kCharacterAugust)[5]);
+ if (getCharacterCurrentParams(kCharacterAugust)[1])
+ getCharacter(kCharacterAugust).inventoryItem = 147;
+
+ break;
+ case 2:
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterAugust)[5], 12, (char *)&getCharacterCurrentParams(kCharacterAugust)[2]);
+ if (getCharacterCurrentParams(kCharacterAugust)[0]) {
+ Common::strcat_s((char *)&getCharacterCurrentParams(kCharacterAugust)[5], 12, "Fc");
+ } else {
+ Common::strcat_s((char *)&getCharacterCurrentParams(kCharacterAugust)[5], 12, "Dc");
+ }
+
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
+ AugustCall(&LogicManager::CONS_August_DoEnterCorrOtis, (char *)&getCharacterCurrentParams(kCharacterAugust)[5], 3, 0, 0);
+ break;
+ case 3:
+ softReleaseAtDoor(kCharacterAugust, 3);
+ getCharacter(kCharacterAugust).characterPosition.location = 1;
+ endGraphics(kCharacterAugust);
+
+ getCharacter(kCharacterAugust).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
+ fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 69239528:
getCharacter(kCharacterAugust).inventoryItem = 0;
- playDialog(kCharacterCath, "CAT1002", -1, 0);
- playDialog(kCharacterAugust, "AUG3101", -1, 15);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
+ AugustCall(&LogicManager::CONS_August_DoWait, 75, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -793,6 +897,7 @@ void LogicManager::HAND_August_ExitComp(HAND_PARAMS) {
Common::strcat_s((char *)&getCharacterCurrentParams(kCharacterAugust)[4], 12, "Qc");
startCycOtis(kCharacterAugust, (char *)&getCharacterCurrentParams(kCharacterAugust)[4]);
}
+
break;
case 69239528:
setDoor(3, kCharacterCath, 1, 10, 9);
@@ -802,6 +907,8 @@ void LogicManager::HAND_August_ExitComp(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
break;
+ default:
+ break;
}
}
@@ -818,264 +925,306 @@ void LogicManager::CONS_August_CompLogic(CONS_PARAMS) {
}
void LogicManager::HAND_August_CompLogic(HAND_PARAMS) {
- if (msg->action <= 8) {
- if (msg->action != 8) {
- if (msg->action)
- return;
-
- if (!getCharacterCurrentParams(kCharacterAugust)[3] && getCharacterCurrentParams(kCharacterAugust)[0] < _gameTime && !getCharacterCurrentParams(kCharacterAugust)[6]) {
- getCharacterCurrentParams(kCharacterAugust)[6] = 1;
- setDoor(3, kCharacterCath, 0, 10, 9);
+ switch (msg->action) {
+ case 0:
+ if (!getCharacterCurrentParams(kCharacterAugust)[3] && getCharacterCurrentParams(kCharacterAugust)[0] < _gameTime && !getCharacterCurrentParams(kCharacterAugust)[6]) {
+ getCharacterCurrentParams(kCharacterAugust)[6] = 1;
+ setDoor(3, kCharacterCath, 0, 10, 9);
- getCharacter(kCharacterAugust).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
- fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
- return;
- }
- if (getCharacterCurrentParams(kCharacterAugust)[1]) {
- if (getCharacterCurrentParams(kCharacterAugust)[7] ||
- (getCharacterCurrentParams(kCharacterAugust)[7] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterAugust)[7] >= _currentGameSessionTicks)
- goto LABEL_31;
- getCharacterCurrentParams(kCharacterAugust)[7] = 0x7FFFFFFF;
- }
+ getCharacter(kCharacterAugust).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
+ fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
+ break;
+ }
- getCharacterCurrentParams(kCharacterAugust)[1] = 0;
- getCharacterCurrentParams(kCharacterAugust)[2] = 1;
+ if (getCharacterCurrentParams(kCharacterAugust)[1]) {
+ if (getCharacterCurrentParams(kCharacterAugust)[7] ||
+ (getCharacterCurrentParams(kCharacterAugust)[7] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterAugust)[7] >= _currentGameSessionTicks) {
+ if (_gameProgress[kProgressChapter] == 1) {
+ if (getCharacterCurrentParams(kCharacterAugust)[5] != 0) {
+ if (getCharacterCurrentParams(kCharacterAugust)[8] ||
+ (getCharacterCurrentParams(kCharacterAugust)[8] = _gameTime + 6300, _gameTime != -6300)) {
+ if (getCharacterCurrentParams(kCharacterAugust)[8] >= _gameTime) {
+
+ if (!getCharacterCurrentParams(kCharacterAugust)[3] && !_gameProgress[kProgressEventMetAugust] && !getCharacterCurrentParams(kCharacterAugust)[5] && getCharacterCurrentParams(kCharacterAugust)[0] - 4500 > _gameTime && !_gameProgress[kProgressField14]) {
+ _gameProgress[kProgressField14] = 2;
+ getCharacter(kCharacterAugust).characterPosition.location = 0;
+ getCharacter(kCharacterAugust).characterPosition.position = 8200;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
+ AugustCall(&LogicManager::CONS_August_ExitComp, 0, 0, 0, 0);
+ }
+
+ break;
+ }
+
+ getCharacterCurrentParams(kCharacterAugust)[8] = 0x7FFFFFFF;
+ }
+
+ getCharacterCurrentParams(kCharacterAugust)[5] = 0;
+ getCharacterCurrentParams(kCharacterAugust)[8] = 0;
+ }
- if (_gameProgress[kProgressEventMetAugust] || _gameProgress[kProgressJacket] != 2) {
- setDoor(3, kCharacterAugust, 1, 0, 0);
- } else {
- setDoor(3, kCharacterAugust, 1, 0, 9);
- }
- }
- getCharacterCurrentParams(kCharacterAugust)[7] = 0;
- LABEL_31:
- if (_gameProgress[kProgressChapter] != 1)
- return;
- if (!getCharacterCurrentParams(kCharacterAugust)[5])
- goto LABEL_38;
- if (getCharacterCurrentParams(kCharacterAugust)[8] ||
- (getCharacterCurrentParams(kCharacterAugust)[8] = _gameTime + 6300, _gameTime != -6300)) {
- if (getCharacterCurrentParams(kCharacterAugust)[8] >= _gameTime) {
- LABEL_38:
- if (!getCharacterCurrentParams(kCharacterAugust)[3] && !_gameProgress[kProgressEventMetAugust] && !getCharacterCurrentParams(kCharacterAugust)[5] && getCharacterCurrentParams(kCharacterAugust)[0] - 4500 > _gameTime && !_gameProgress[kProgressField14]) {
- _gameProgress[kProgressField14] = 2;
- getCharacter(kCharacterAugust).characterPosition.location = 0;
- getCharacter(kCharacterAugust).characterPosition.position = 8200;
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
- AugustCall(&LogicManager::CONS_August_ExitComp, 0, 0, 0, 0);
+ if (!getCharacterCurrentParams(kCharacterAugust)[3] && !_gameProgress[kProgressEventMetAugust] && !getCharacterCurrentParams(kCharacterAugust)[5] && getCharacterCurrentParams(kCharacterAugust)[0] - 4500 > _gameTime && !_gameProgress[kProgressField14]) {
+ _gameProgress[kProgressField14] = 2;
+ getCharacter(kCharacterAugust).characterPosition.location = 0;
+ getCharacter(kCharacterAugust).characterPosition.position = 8200;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
+ AugustCall(&LogicManager::CONS_August_ExitComp, 0, 0, 0, 0);
+ }
}
- return;
+
+ break;
}
- getCharacterCurrentParams(kCharacterAugust)[8] = 0x7FFFFFFF;
+
+ getCharacterCurrentParams(kCharacterAugust)[7] = 0x7FFFFFFF;
}
- getCharacterCurrentParams(kCharacterAugust)[5] = 0;
- getCharacterCurrentParams(kCharacterAugust)[8] = 0;
- goto LABEL_38;
- }
- goto LABEL_93;
- }
- if (msg->action > 12) {
- if (msg->action > 124697504) {
- if (msg->action == 192849856) {
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 17;
- AugustCall(&LogicManager::CONS_August_DoCorrOtis, "626Kc", 3, 0, 0);
- } else if (msg->action == 221617184) {
- getCharacterCurrentParams(kCharacterAugust)[3] = 1;
- send(kCharacterAugust, kCharacterCond1, 102675536, 0);
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 14;
- AugustCall(&LogicManager::CONS_August_DoDialog, "CON1023", 0, 0, 0);
+
+ getCharacterCurrentParams(kCharacterAugust)[1] = 0;
+ getCharacterCurrentParams(kCharacterAugust)[2] = 1;
+
+ if (_gameProgress[kProgressEventMetAugust] || _gameProgress[kProgressJacket] != 2) {
+ setDoor(3, kCharacterAugust, 1, 0, 0);
+ } else {
+ setDoor(3, kCharacterAugust, 1, 0, 9);
}
- } else {
- switch (msg->action) {
- case 124697504:
- playDialog(kCharacterAugust, "CON1023A", -1, 0);
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 18;
- AugustCall(&LogicManager::CONS_August_DoCorrOtis, "626Mc", 3, 0, 0);
- break;
- case 17:
- if (getCharacterCurrentParams(kCharacterAugust)[2] || getCharacterCurrentParams(kCharacterAugust)[1]) {
- setDoor(3, kCharacterAugust, 1, 10, 9);
- getCharacterCurrentParams(kCharacterAugust)[2] = 0;
- getCharacterCurrentParams(kCharacterAugust)[1] = 0;
- getCharacterCurrentParams(kCharacterAugust)[4] = 0;
- }
- break;
- case 18:
- switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
- AugustCall(&LogicManager::CONS_August_DoWalk, 3, 8200, 0, 0);
- break;
- case 2:
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
- AugustCall(&LogicManager::CONS_August_KnockTyler, getCharacterCurrentParams(kCharacterAugust)[0] - 2700, 0, 0, 0);
- break;
- case 3:
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 4;
- AugustCall(&LogicManager::CONS_August_DoWalk, 3, 6470, 0, 0);
- break;
- case 4:
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 5;
- AugustCall(&LogicManager::CONS_August_EnterComp, 0, 0, 0, 0);
- break;
- case 5:
- if (_gameProgress[kProgressField14] == 2)
- _gameProgress[kProgressField14] = 0;
- getCharacterCurrentParams(kCharacterAugust)[5] = 1;
- getCharacterCurrentParams(kCharacterAugust)[1] = 0;
- getCharacterCurrentParams(kCharacterAugust)[2] = 0;
- setDoor(3, kCharacterAugust, 1, 10, 9);
- getCharacterCurrentParams(kCharacterAugust)[4] = 0;
- getCharacterCurrentParams(kCharacterAugust)[8] = 0;
- break;
- case 6:
- if (getModel(3) == 1)
- playNIS(kEventMeetAugustHisCompartmentBed);
- else
- playNIS(kEventMeetAugustHisCompartment);
- _gameProgress[kProgressEventMetAugust] = 1;
- setDoor(3, 2, 1, 0, 0);
- getCharacterCurrentParams(kCharacterAugust)[1] = 0;
- getCharacterCurrentParams(kCharacterAugust)[2] = 1;
- bumpCathFDoor(3);
- break;
- case 7:
- case 8:
- getCharacterCurrentParams(kCharacterAugust)[4]++;
- switch (getCharacterCurrentParams(kCharacterAugust)[4]) {
- case 1:
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 9;
- if (rnd(2) == 0) {
- AugustCall(&LogicManager::CONS_August_DoDialog, "AUG1128B", 0, 0, 0);
- } else {
- AugustCall(&LogicManager::CONS_August_DoDialog, "AUG1128A", 0, 0, 0);
- }
- break;
- case 2:
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 10;
- if (!_gameProgress[kProgressEventMetAugust]) {
- AugustCall(&LogicManager::CONS_August_DoDialog, "AUG1128G", 0, 0, 0);
- } else {
- AugustCall(&LogicManager::CONS_August_DoDialog, "AUG1128E", 0, 0, 0);
- }
- break;
- case 3:
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 11;
- if (!_gameProgress[kProgressEventMetAugust]) {
- AugustCall(&LogicManager::CONS_August_DoDialog, "AUG1128H", 0, 0, 0);
- } else {
- AugustCall(&LogicManager::CONS_August_DoDialog, "AUG1128F", 0, 0, 0);
- }
+ }
- break;
- default:
- if (_gameProgress[kProgressEventMetAugust] || _gameProgress[kProgressJacket] != 2) {
- setDoor(3, kCharacterAugust, 1, 14, 0);
- } else {
- setDoor(3, kCharacterAugust, 1, 14, 9);
+ getCharacterCurrentParams(kCharacterAugust)[7] = 0;
+
+ if (_gameProgress[kProgressChapter] == 1) {
+ if (getCharacterCurrentParams(kCharacterAugust)[5] != 0) {
+ if (getCharacterCurrentParams(kCharacterAugust)[8] ||
+ (getCharacterCurrentParams(kCharacterAugust)[8] = _gameTime + 6300, _gameTime != -6300)) {
+ if (getCharacterCurrentParams(kCharacterAugust)[8] >= _gameTime) {
+
+ if (!getCharacterCurrentParams(kCharacterAugust)[3] && !_gameProgress[kProgressEventMetAugust] && !getCharacterCurrentParams(kCharacterAugust)[5] && getCharacterCurrentParams(kCharacterAugust)[0] - 4500 > _gameTime && !_gameProgress[kProgressField14]) {
+ _gameProgress[kProgressField14] = 2;
+ getCharacter(kCharacterAugust).characterPosition.location = 0;
+ getCharacter(kCharacterAugust).characterPosition.position = 8200;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
+ AugustCall(&LogicManager::CONS_August_ExitComp, 0, 0, 0, 0);
}
- getCharacterCurrentParams(kCharacterAugust)[1] = 1;
break;
}
-
- break;
- case 9:
- case 10:
- case 11:
- if (_gameProgress[kProgressEventMetAugust] || _gameProgress[kProgressJacket] != 2) {
- setDoor(3, kCharacterAugust, 1, 14, 0);
- } else {
- setDoor(3, kCharacterAugust, 1, 14, 9);
- }
-
- getCharacterCurrentParams(kCharacterAugust)[1] = 1;
- break;
- case 12:
- case 13:
- if (_gameProgress[kProgressEventMetAugust] || _gameProgress[kProgressJacket] != 2) {
- setDoor(3, kCharacterAugust, 1, 0, 0);
+
+ getCharacterCurrentParams(kCharacterAugust)[8] = 0x7FFFFFFF;
+ }
+
+ getCharacterCurrentParams(kCharacterAugust)[5] = 0;
+ getCharacterCurrentParams(kCharacterAugust)[8] = 0;
+ }
+
+ if (!getCharacterCurrentParams(kCharacterAugust)[3] && !_gameProgress[kProgressEventMetAugust] && !getCharacterCurrentParams(kCharacterAugust)[5] && getCharacterCurrentParams(kCharacterAugust)[0] - 4500 > _gameTime && !_gameProgress[kProgressField14]) {
+ _gameProgress[kProgressField14] = 2;
+ getCharacter(kCharacterAugust).characterPosition.location = 0;
+ getCharacter(kCharacterAugust).characterPosition.position = 8200;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
+ AugustCall(&LogicManager::CONS_August_ExitComp, 0, 0, 0, 0);
+ }
+ }
+
+ break;
+ case 8:
+ case 9:
+ if (msg->action == 9 && _gameProgress[kProgressChapter] == 1 && !_gameProgress[kProgressEventMetAugust] && _gameProgress[kProgressJacket] == 2) {
+ setDoor(9, kCharacterCath, 0, 255, 255);
+ getCharacter(kCharacterCath).characterPosition.location = 1;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 6;
+ AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventMeetAugustHisCompartment, 0, 0);
+ } else if (getCharacterCurrentParams(kCharacterAugust)[1]) {
+ setDoor(3, kCharacterAugust, 1, 0, 0);
+ if (cathHasItem(kItemPassengerList)) {
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 12;
+ if (rnd(2)) {
+ AugustCall(&LogicManager::CONS_August_DoDialog, getCathSorryDialog(), 0, 0, 0);
+ } else {
+ if (rnd(2) == 0) {
+ AugustCall(&LogicManager::CONS_August_DoDialog, "CAT1502A", 0, 0, 0);
} else {
- setDoor(3, kCharacterAugust, 1, 0, 9);
+ AugustCall(&LogicManager::CONS_August_DoDialog, "CAT1502", 0, 0, 0);
}
-
- getCharacterCurrentParams(kCharacterAugust)[1] = 0;
- getCharacterCurrentParams(kCharacterAugust)[2] = 1;
- break;
- case 14:
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 15;
- AugustCall(&LogicManager::CONS_August_DoWait, 75, 0, 0, 0);
- break;
- case 15:
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 16;
- AugustCall(&LogicManager::CONS_August_DoDialog, "AUG1128I", 0, 0, 0);
- break;
- case 16:
- send(kCharacterAugust, kCharacterCond1, 100906246, 0);
- break;
- case 17:
- getCharacter(kCharacterAugust).characterPosition.location = 0;
- send(kCharacterAugust, kCharacterCond1, 156567128, 0);
- startCycOtis(kCharacterAugust, "626Lc");
- softBlockAtDoor(kCharacterAugust, 3);
- break;
- case 18:
- softReleaseAtDoor(kCharacterAugust, 3);
- getCharacter(kCharacterAugust).characterPosition.location = 6470;
- endGraphics(kCharacterAugust);
- setDoor(3, kCharacterAugust, 1, 10, 9);
- getCharacterCurrentParams(kCharacterAugust)[3] = 0;
- break;
- default:
- return;
}
- break;
+ } else {
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 13;
+ AugustCall(&LogicManager::CONS_August_DoDialog, getCathSorryDialog(), 0, 0, 0);
+ }
+ } else {
+ setDoor(3, kCharacterAugust, 1, 0, 0);
+ if (msg->action == 8) {
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 7;
+ AugustCall(&LogicManager::CONS_August_DoDialog, "LIB012", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 8;
+ AugustCall(&LogicManager::CONS_August_DoDialog, "LIB013", 0, 0, 0);
}
}
- } else {
- if (msg->action == 12) {
+
+ break;
+ case 12:
+ setDoor(3, kCharacterAugust, 1, 10, 9);
+ break;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterAugust)[2] || getCharacterCurrentParams(kCharacterAugust)[1]) {
setDoor(3, kCharacterAugust, 1, 10, 9);
- return;
+ getCharacterCurrentParams(kCharacterAugust)[2] = 0;
+ getCharacterCurrentParams(kCharacterAugust)[1] = 0;
+ getCharacterCurrentParams(kCharacterAugust)[4] = 0;
}
- if (msg->action == 9) {
- if (_gameProgress[kProgressChapter] == 1 && !_gameProgress[kProgressEventMetAugust] && _gameProgress[kProgressJacket] == 2) {
- setDoor(9, kCharacterCath, 0, 255, 255);
- getCharacter(kCharacterCath).characterPosition.location = 1;
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 6;
- AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventMeetAugustHisCompartment, 0, 0);
- return;
- }
- LABEL_93:
- if (getCharacterCurrentParams(kCharacterAugust)[1]) {
- setDoor(3, kCharacterAugust, 1, 0, 0);
- if (cathHasItem(kItemPassengerList)) {
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 12;
- if (rnd(2)) {
- AugustCall(&LogicManager::CONS_August_DoDialog, getCathSorryDialog(), 0, 0, 0);
- } else {
- if (rnd(2) == 0) {
- AugustCall(&LogicManager::CONS_August_DoDialog, "CAT1502A", 0, 0, 0);
- } else {
- AugustCall(&LogicManager::CONS_August_DoDialog, "CAT1502", 0, 0, 0);
- }
- }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
+ AugustCall(&LogicManager::CONS_August_DoWalk, 3, 8200, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
+ AugustCall(&LogicManager::CONS_August_KnockTyler, getCharacterCurrentParams(kCharacterAugust)[0] - 2700, 0, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 4;
+ AugustCall(&LogicManager::CONS_August_DoWalk, 3, 6470, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 5;
+ AugustCall(&LogicManager::CONS_August_EnterComp, 0, 0, 0, 0);
+ break;
+ case 5:
+ if (_gameProgress[kProgressField14] == 2)
+ _gameProgress[kProgressField14] = 0;
+ getCharacterCurrentParams(kCharacterAugust)[5] = 1;
+ getCharacterCurrentParams(kCharacterAugust)[1] = 0;
+ getCharacterCurrentParams(kCharacterAugust)[2] = 0;
+ setDoor(3, kCharacterAugust, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterAugust)[4] = 0;
+ getCharacterCurrentParams(kCharacterAugust)[8] = 0;
+ break;
+ case 6:
+ if (getModel(3) == 1)
+ playNIS(kEventMeetAugustHisCompartmentBed);
+ else
+ playNIS(kEventMeetAugustHisCompartment);
+
+ _gameProgress[kProgressEventMetAugust] = 1;
+ setDoor(3, 2, 1, 0, 0);
+ getCharacterCurrentParams(kCharacterAugust)[1] = 0;
+ getCharacterCurrentParams(kCharacterAugust)[2] = 1;
+ bumpCathFDoor(3);
+ break;
+ case 7:
+ case 8:
+ getCharacterCurrentParams(kCharacterAugust)[4]++;
+ switch (getCharacterCurrentParams(kCharacterAugust)[4]) {
+ case 1:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 9;
+ if (rnd(2) == 0) {
+ AugustCall(&LogicManager::CONS_August_DoDialog, "AUG1128B", 0, 0, 0);
} else {
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 13;
- AugustCall(&LogicManager::CONS_August_DoDialog, getCathSorryDialog(), 0, 0, 0);
+ AugustCall(&LogicManager::CONS_August_DoDialog, "AUG1128A", 0, 0, 0);
}
- } else {
- setDoor(3, kCharacterAugust, 1, 0, 0);
- if (msg->action == 8) {
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 7;
- AugustCall(&LogicManager::CONS_August_DoDialog, "LIB012", 0, 0, 0);
+
+ break;
+ case 2:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 10;
+ if (!_gameProgress[kProgressEventMetAugust]) {
+ AugustCall(&LogicManager::CONS_August_DoDialog, "AUG1128G", 0, 0, 0);
} else {
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 8;
- AugustCall(&LogicManager::CONS_August_DoDialog, "LIB013", 0, 0, 0);
+ AugustCall(&LogicManager::CONS_August_DoDialog, "AUG1128E", 0, 0, 0);
}
+
+ break;
+ case 3:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 11;
+ if (!_gameProgress[kProgressEventMetAugust]) {
+ AugustCall(&LogicManager::CONS_August_DoDialog, "AUG1128H", 0, 0, 0);
+ } else {
+ AugustCall(&LogicManager::CONS_August_DoDialog, "AUG1128F", 0, 0, 0);
+ }
+
+ break;
+ default:
+ if (_gameProgress[kProgressEventMetAugust] || _gameProgress[kProgressJacket] != 2) {
+ setDoor(3, kCharacterAugust, 1, 14, 0);
+ } else {
+ setDoor(3, kCharacterAugust, 1, 14, 9);
+ }
+
+ getCharacterCurrentParams(kCharacterAugust)[1] = 1;
+ break;
+ }
+
+ break;
+ case 9:
+ case 10:
+ case 11:
+ if (_gameProgress[kProgressEventMetAugust] || _gameProgress[kProgressJacket] != 2) {
+ setDoor(3, kCharacterAugust, 1, 14, 0);
+ } else {
+ setDoor(3, kCharacterAugust, 1, 14, 9);
+ }
+
+ getCharacterCurrentParams(kCharacterAugust)[1] = 1;
+ break;
+ case 12:
+ case 13:
+ if (_gameProgress[kProgressEventMetAugust] || _gameProgress[kProgressJacket] != 2) {
+ setDoor(3, kCharacterAugust, 1, 0, 0);
+ } else {
+ setDoor(3, kCharacterAugust, 1, 0, 9);
}
+
+ getCharacterCurrentParams(kCharacterAugust)[1] = 0;
+ getCharacterCurrentParams(kCharacterAugust)[2] = 1;
+ break;
+ case 14:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 15;
+ AugustCall(&LogicManager::CONS_August_DoWait, 75, 0, 0, 0);
+ break;
+ case 15:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 16;
+ AugustCall(&LogicManager::CONS_August_DoDialog, "AUG1128I", 0, 0, 0);
+ break;
+ case 16:
+ send(kCharacterAugust, kCharacterCond1, 100906246, 0);
+ break;
+ case 17:
+ getCharacter(kCharacterAugust).characterPosition.location = 0;
+ send(kCharacterAugust, kCharacterCond1, 156567128, 0);
+ startCycOtis(kCharacterAugust, "626Lc");
+ softBlockAtDoor(kCharacterAugust, 3);
+ break;
+ case 18:
+ softReleaseAtDoor(kCharacterAugust, 3);
+ getCharacter(kCharacterAugust).characterPosition.location = 6470;
+ endGraphics(kCharacterAugust);
+ setDoor(3, kCharacterAugust, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterAugust)[3] = 0;
+ break;
+ default:
+ break;
}
+
+ break;
+ case 124697504:
+ playDialog(kCharacterAugust, "CON1023A", -1, 0);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 18;
+ AugustCall(&LogicManager::CONS_August_DoCorrOtis, "626Mc", 3, 0, 0);
+ break;
+ case 192849856:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 17;
+ AugustCall(&LogicManager::CONS_August_DoCorrOtis, "626Kc", 3, 0, 0);
+ break;
+ case 221617184:
+ getCharacterCurrentParams(kCharacterAugust)[3] = 1;
+ send(kCharacterAugust, kCharacterCond1, 102675536, 0);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 14;
+ AugustCall(&LogicManager::CONS_August_DoDialog, "CON1023", 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1090,19 +1239,25 @@ void LogicManager::CONS_August_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_August_Birth(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- setDoor(3, kCharacterCath, 1, 10, 9);
- setDoor(11, kCharacterCath, 0, 255, 255);
- getCharacter(kCharacterAugust).characterPosition.position = 4691;
- getCharacter(kCharacterAugust).characterPosition.location = 1;
- getCharacter(kCharacterAugust).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterAugust).clothes = 0;
- _gameProgress[kProgressEventMetAugust] = 0;
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterAugust)[0]) {
+ getCharacterCurrentParams(kCharacterAugust)[0] = 1;
+ CONS_August_WaitTyler(0, 0, 0, 0);
}
- } else if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterAugust)[0]) {
- getCharacterCurrentParams(kCharacterAugust)[0] = 1;
- CONS_August_WaitTyler(0, 0, 0, 0);
+
+ break;
+ case 12:
+ setDoor(3, kCharacterCath, 1, 10, 9);
+ setDoor(11, kCharacterCath, 0, 255, 255);
+ getCharacter(kCharacterAugust).characterPosition.position = 4691;
+ getCharacter(kCharacterAugust).characterPosition.location = 1;
+ getCharacter(kCharacterAugust).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterAugust).clothes = 0;
+ _gameProgress[kProgressEventMetAugust] = 0;
+ break;
+ default:
+ break;
}
}
@@ -1128,15 +1283,16 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
AugustCall(&LogicManager::CONS_August_DoCorrOtis, "626Ea", 1, 0, 0);
} else {
softReleaseAtDoor(kCharacterAugust, 1);
- LABEL_38:
setDoor(1, kCharacterCath, 0, 10, 9);
getCharacter(kCharacterAugust).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
}
- return;
+
+ break;
}
+
if (!getCharacterCurrentParams(kCharacterAugust)[1]) {
if (!getCharacterCurrentParams(kCharacterAugust)[10] &&
(getCharacterCurrentParams(kCharacterAugust)[10] = _currentGameSessionTicks + 75, _currentGameSessionTicks == -75) ||
@@ -1144,18 +1300,32 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
if (!getCharacterCurrentParams(kCharacterAugust)[4]) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 8;
AugustCall(&LogicManager::CONS_August_DoDialog, "AUG1002B", 0, 0, 0);
- return;
+ break;
}
- LABEL_69:
+
if (!getCharacterCurrentParams(kCharacterAugust)[11]) {
getCharacterCurrentParams(kCharacterAugust)[11] = _currentGameSessionTicks + 75;
- if (_currentGameSessionTicks == -75)
- goto LABEL_73;
+ if (_currentGameSessionTicks == -75) {
+ softReleaseAtDoor(kCharacterAugust, 1);
+ if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 9;
+ AugustCall(&LogicManager::CONS_August_DoCorrOtis, "626Da", 1, 0, 0);
+ } else if (checkLoc(kCharacterCath, kCarGreenSleeping)) {
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 10;
+ AugustCall(&LogicManager::CONS_August_DoBriefCorrOtis, "626Da", 1, 0, 0);
+ } else {
+ bumpCath(kCarNone, 1, 255);
+ setDoor(9, kCharacterCath, 0, 255, 255);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 11;
+ AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustFindCorpse, 0, 0);
+ }
+
+ break;
+ }
}
if (getCharacterCurrentParams(kCharacterAugust)[11] < _currentGameSessionTicks) {
getCharacterCurrentParams(kCharacterAugust)[11] = 0x7FFFFFFF;
- LABEL_73:
softReleaseAtDoor(kCharacterAugust, 1);
if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 9;
@@ -1165,28 +1335,30 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
AugustCall(&LogicManager::CONS_August_DoBriefCorrOtis, "626Da", 1, 0, 0);
} else {
bumpCath(kCarNone, 1, 255);
- LABEL_78:
setDoor(9, kCharacterCath, 0, 255, 255);
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 11;
AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustFindCorpse, 0, 0);
}
- return;
+
+ break;
}
}
- LABEL_80:
+
if (getCharacterCurrentParams(kCharacterAugust)[2] && getCharacterCurrentParams(kCharacterAugust)[0] < _gameTime && !getCharacterCurrentParams(kCharacterAugust)[12]) {
getCharacterCurrentParams(kCharacterAugust)[12] = 1;
setDoor(1, kCharacterCath, 0, 10, 9);
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 12;
AugustCall(&LogicManager::CONS_August_DoCorrOtis, "626Ea", 1, 0, 0);
}
- return;
+
+ break;
}
+
if (!getCharacterCurrentParams(kCharacterAugust)[8] && (getCharacterCurrentParams(kCharacterAugust)[8] = _currentGameSessionTicks + 45, _currentGameSessionTicks == -45) || getCharacterCurrentParams(kCharacterAugust)[8] < _currentGameSessionTicks) {
if (checkDoor(1) == 1) {
if (getCharacterCurrentParams(kCharacterAugust)[9] || (getCharacterCurrentParams(kCharacterAugust)[9] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
if (getCharacterCurrentParams(kCharacterAugust)[9] >= _currentGameSessionTicks)
- return;
+ break;
getCharacterCurrentParams(kCharacterAugust)[9] = 0x7FFFFFFF;
}
@@ -1198,11 +1370,11 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
case 1:
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 5;
AugustCall(&LogicManager::CONS_August_DoDialog, "LIB013", 0, 0, 0);
- return;
+ break;
case 2:
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 7;
AugustCall(&LogicManager::CONS_August_DoDialog, "LIB012", 0, 0, 0);
- return;
+ break;
case 3:
getCharacterCurrentParams(kCharacterAugust)[7]++;
if (getCharacterCurrentParams(kCharacterAugust)[7] >= 3) {
@@ -1211,12 +1383,13 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
getCharacter(kCharacterAugust).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
- return;
+ break;
}
+
getCharacterCurrentParams(kCharacterAugust)[5] = 0;
break;
}
- LABEL_23:
+
setDoor(1, kCharacterAugust, checkDoor(1), getCharacterCurrentParams(kCharacterAugust)[3] == 0 ? 14 : 0, 9);
getCharacterCurrentParams(kCharacterAugust)[9] = 0;
} else if (!_gameProgress[kProgressEventCorpseMovedFromFloor] || _gameProgress[kProgressJacket] == 1) {
@@ -1232,7 +1405,8 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventMeetAugustTylerCompartment, 0, 0);
}
}
- return;
+
+ break;
case 8:
if (getCharacterCurrentParams(kCharacterAugust)[2]) {
setDoor(1, kCharacterAugust, 0, 0, 0);
@@ -1243,7 +1417,8 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 17;
AugustCall(&LogicManager::CONS_August_DoDialogFullVol, "AUG1002A", 0, 0, 0);
}
- return;
+
+ break;
case 9:
if (!_gameProgress[kProgressEventCorpseMovedFromFloor] || _gameProgress[kProgressJacket] == 1) {
setDoor(9, kCharacterCath, 0, 255, 255);
@@ -1264,7 +1439,8 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 14;
AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventMeetAugustTylerCompartment, 0, 0);
}
- return;
+
+ break;
case 12:
if (inComp(kCharacterCath, kCarGreenSleeping, 8200) || inComp(kCharacterCath, kCarGreenSleeping, 7850) || cathOutHisWindow()) {
setDoor(1, kCharacterAugust, checkDoor(1), 0, 0);
@@ -1279,23 +1455,34 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
AugustCall(&LogicManager::CONS_August_DoCorrOtis, "626Aa", 1, 0, 0);
}
- return;
+
+ break;
case 18:
switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
case 1:
startCycOtis(kCharacterAugust, "626Ba");
softBlockAtDoor(kCharacterAugust, 1);
- return;
+ break;
case 2:
- goto LABEL_38;
+ setDoor(1, kCharacterCath, 0, 10, 9);
+
+ getCharacter(kCharacterAugust).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
+ fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
+ break;
case 3:
playDialog(0, "LIB014", -1, 0);
playNIS(kEventAugustFindCorpse);
- if (_gameEvents[kEventDinerAugustOriginalJacket])
- goto LABEL_85;
- if (_gameProgress[kProgressEventCorpseMovedFromFloor])
- goto LABEL_65;
- goto LABEL_92;
+
+ if (_gameEvents[kEventDinerAugustOriginalJacket]) {
+ endGame(3, 4, _gameProgress[kProgressEventFoundCorpse] == kProgressField0 ? 56 : 50, true);
+ } else if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
+ endGame(0, 1, 55, true);
+ } else {
+ endGame(0, 1, _gameProgress[kProgressEventFoundCorpse] == kProgressField0 ? 56 : 50, true);
+ }
+
+ break;
case 4:
setDoor(1, 0, 0, 10, 9);
playDialog(0, "LIB014", -1, 0);
@@ -1310,37 +1497,100 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
getCharacter(kCharacterAugust).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
- return;
+ break;
case 5:
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 6;
AugustCall(&LogicManager::CONS_August_DoDialogFullVol, "AUG1002B", 0, 0, 0);
- return;
+ break;
case 6:
case 7:
- goto LABEL_23;
+ setDoor(1, kCharacterAugust, checkDoor(1), getCharacterCurrentParams(kCharacterAugust)[3] == 0 ? 14 : 0, 9);
+ getCharacterCurrentParams(kCharacterAugust)[9] = 0;
+ break;
case 8:
getCharacterCurrentParams(kCharacterAugust)[4] = 1;
- goto LABEL_69;
+ if (!getCharacterCurrentParams(kCharacterAugust)[11]) {
+ getCharacterCurrentParams(kCharacterAugust)[11] = _currentGameSessionTicks + 75;
+ if (_currentGameSessionTicks == -75) {
+ softReleaseAtDoor(kCharacterAugust, 1);
+ if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 9;
+ AugustCall(&LogicManager::CONS_August_DoCorrOtis, "626Da", 1, 0, 0);
+ } else if (checkLoc(kCharacterCath, kCarGreenSleeping)) {
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 10;
+ AugustCall(&LogicManager::CONS_August_DoBriefCorrOtis, "626Da", 1, 0, 0);
+ } else {
+ bumpCath(kCarNone, 1, 255);
+ setDoor(9, kCharacterCath, 0, 255, 255);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 11;
+ AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustFindCorpse, 0, 0);
+ }
+
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterAugust)[11] < _currentGameSessionTicks) {
+ getCharacterCurrentParams(kCharacterAugust)[11] = 0x7FFFFFFF;
+ softReleaseAtDoor(kCharacterAugust, 1);
+ if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 9;
+ AugustCall(&LogicManager::CONS_August_DoCorrOtis, "626Da", 1, 0, 0);
+ } else if (checkLoc(kCharacterCath, kCarGreenSleeping)) {
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 10;
+ AugustCall(&LogicManager::CONS_August_DoBriefCorrOtis, "626Da", 1, 0, 0);
+ } else {
+ bumpCath(kCarNone, 1, 255);
+ setDoor(9, kCharacterCath, 0, 255, 255);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 11;
+ AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustFindCorpse, 0, 0);
+ }
+
+ break;
+ }
+
+ if (getCharacterCurrentParams(kCharacterAugust)[2] && getCharacterCurrentParams(kCharacterAugust)[0] < _gameTime && !getCharacterCurrentParams(kCharacterAugust)[12]) {
+ getCharacterCurrentParams(kCharacterAugust)[12] = 1;
+ setDoor(1, kCharacterCath, 0, 10, 9);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 12;
+ AugustCall(&LogicManager::CONS_August_DoCorrOtis, "626Ea", 1, 0, 0);
+ }
+
+ break;
case 9:
getCharacterCurrentParams(kCharacterAugust)[2] = 1;
endGraphics(kCharacterAugust);
getCharacter(kCharacterAugust).characterPosition.location = 1;
setDoor(1, kCharacterAugust, 0, 10, 9);
- goto LABEL_80;
+ if (getCharacterCurrentParams(kCharacterAugust)[2] && getCharacterCurrentParams(kCharacterAugust)[0] < _gameTime && !getCharacterCurrentParams(kCharacterAugust)[12]) {
+ getCharacterCurrentParams(kCharacterAugust)[12] = 1;
+ setDoor(1, kCharacterCath, 0, 10, 9);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 12;
+ AugustCall(&LogicManager::CONS_August_DoCorrOtis, "626Ea", 1, 0, 0);
+ }
+
+ break;
case 10:
- goto LABEL_78;
+ setDoor(9, kCharacterCath, 0, 255, 255);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 11;
+ AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustFindCorpse, 0, 0);
+ break;
case 11:
playNIS(kEventAugustFindCorpse);
- if (_gameEvents[kEventDinerAugustOriginalJacket])
- goto LABEL_85;
- goto LABEL_92;
+ if (_gameEvents[kEventDinerAugustOriginalJacket]) {
+ endGame(3, 4, _gameProgress[kProgressEventFoundCorpse] == kProgressField0 ? 56 : 50, true);
+ } else {
+ endGame(0, 1, _gameProgress[kProgressEventFoundCorpse] == kProgressField0 ? 56 : 50, true);
+ }
+
+ break;
case 12:
getCharacter(kCharacterAugust).characterPosition.location = 0;
getCharacter(kCharacterAugust).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
- return;
+ break;
case 13:
if (checkDoor(1) != 1) {
playDialog(0, "LIB014", -1, 0);
@@ -1349,16 +1599,15 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
}
playNIS(kEventAugustFindCorpse);
+
if (_gameEvents[kEventDinerAugustOriginalJacket]) {
- LABEL_85:
endGame(3, 4, _gameProgress[kProgressEventFoundCorpse] == kProgressField0 ? 56 : 50, true);
} else if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
- LABEL_65:
endGame(0, 1, 55, true);
} else {
- LABEL_92:
endGame(0, 1, _gameProgress[kProgressEventFoundCorpse] == kProgressField0 ? 56 : 50, true);
}
+
break;
case 14:
if (!getCharacterCurrentParams(kCharacterAugust)[2]) {
@@ -1379,24 +1628,25 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
getCharacter(kCharacterAugust).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
- return;
+ break;
case 15:
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 16;
AugustCall(&LogicManager::CONS_August_DoDialog, "AUG1128A", 0, 0, 0);
- return;
+ break;
case 16:
setDoor(1, kCharacterAugust, 0, 10, 9);
- return;
+ break;
case 17:
getCharacterCurrentParams(kCharacterAugust)[3] = 1;
setDoor(1, kCharacterAugust, checkDoor(1), 0, 9);
- return;
+ break;
default:
- return;
+ break;
}
- return;
+
+ break;
default:
- return;
+ break;
}
}
@@ -1411,20 +1661,29 @@ void LogicManager::CONS_August_DoNIS1006(CONS_PARAMS) {
}
void LogicManager::HAND_August_DoNIS1006(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventDinerAugust, 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 1) {
- if (inDiningRoom(kCharacterAlexei))
- playNIS(kEventDinerAugustAlexeiBackground);
- else
- playNIS(kEventDinerAugust);
- _gameProgress[kProgressEventMetAugust] = 1;
- bumpCath(kCarRestaurant, 61, 255);
+ break;
+ case 18:
+ if (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 1) {
+ if (inDiningRoom(kCharacterAlexei))
+ playNIS(kEventDinerAugustAlexeiBackground);
+ else
+ playNIS(kEventDinerAugust);
- getCharacter(kCharacterAugust).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
- fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
+ _gameProgress[kProgressEventMetAugust] = 1;
+ bumpCath(kCarRestaurant, 61, 255);
+
+ getCharacter(kCharacterAugust).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
+ fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -1439,90 +1698,13 @@ void LogicManager::CONS_August_WaitTyler(CONS_PARAMS) {
}
void LogicManager::HAND_August_WaitTyler(HAND_PARAMS) {
- if (msg->action > 12) {
- switch (msg->action) {
- case 18:
- switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
- case 1:
- send(kCharacterAugust, kCharacterWaiter1, 204704037, 0);
- startSeqOtis(kCharacterAugust, "803DS");
- if (inDiningRoom(kCharacterCath))
- advanceFrame(kCharacterAugust);
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
- AugustCall(&LogicManager::CONS_August_FinishSeqOtis, 0, 0, 0, 0);
- break;
- case 2:
- CONS_August_SeekTyler(0, 0, 0, 0);
- break;
- case 3:
- CONS_August_OrderDinner(0, 0, 0, 0);
- break;
- case 4:
- send(kCharacterAugust, kCharacterAlexei, 225182640, 0);
- playNIS(kEventDinerAugustOriginalJacket);
- setDoor(1, kCharacterCath, 3, 0, 0);
- getCharacter(kCharacterAugust).characterPosition.location = 0;
- send(kCharacterAugust, kCharacterTableD, 103798704, "010K");
- startSeqOtis(kCharacterAugust, "010P");
- bumpCath(kCarRestaurant, 65, 255);
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 5;
- AugustCall(&LogicManager::CONS_August_FinishSeqOtis, 0, 0, 0, 0);
- break;
- case 5:
- send(kCharacterAugust, kCharacterWaiter1, 204704037, 0);
- startSeqOtis(kCharacterAugust, "803DS");
- if (inDiningRoom(kCharacterCath))
- advanceFrame(kCharacterAugust);
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 6;
- AugustCall(&LogicManager::CONS_August_FinishSeqOtis, 0, 0, 0, 0);
- break;
- case 6:
- _gameProgress[kProgressField14] = 2;
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 7;
- AugustCall(&LogicManager::CONS_August_DoWalk, 3, 8200, 0, 0);
- break;
- case 7:
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 8;
- AugustCall(&LogicManager::CONS_August_KnockTyler, 0, 0, 0, 0);
- break;
- case 8:
- endGame(0, 0, 0, 1);
- break;
- default:
- return;
- }
- break;
- case 168046720:
- getCharacter(kCharacterAugust).inventoryItem = 0;
- break;
- case 168627977:
- getCharacter(kCharacterAugust).inventoryItem = getCharacterCurrentParams(kCharacterAugust)[1];
- break;
- }
- } else if (msg->action == 12) {
- send(kCharacterAugust, kCharacterTableD, 136455232, 0);
- startCycOtis(kCharacterAugust, "010B");
- if (!_gameProgress[kProgressEventMetAugust])
- getCharacterCurrentParams(kCharacterAugust)[1] = 128;
- getCharacter(kCharacterAugust).inventoryItem = getCharacterCurrentParams(kCharacterAugust)[1];
- } else if (msg->action) {
- if (msg->action == 1) {
- getCharacterCurrentParams(kCharacterAugust)[1] = 0;
- getCharacter(kCharacterAugust).inventoryItem = 0;
- send(kCharacterAugust, kCharacterHeadWait, 191604416, 0);
- if (_gameProgress[1] == 2) {
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
- AugustCall(&LogicManager::CONS_August_DoNIS1006, 0, 0, 0, 0);
- } else {
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 4;
- AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventDinerAugustOriginalJacket, 0, 0);
- }
- }
- } else {
+ switch (msg->action) {
+ case 0:
if (!getCharacterCurrentParams(kCharacterAugust)[0] && _gameProgress[kProgressEventFoundCorpse]) {
send(kCharacterAugust, kCharacterHeadWait, 239072064, 0);
getCharacterCurrentParams(kCharacterAugust)[0] = 1;
}
+
if (_gameTime > 1080000 && !getCharacterCurrentParams(kCharacterAugust)[2]) {
getCharacterCurrentParams(kCharacterAugust)[2] = 1;
if (!getCharacterCurrentParams(kCharacterAugust)[0]) {
@@ -1530,12 +1712,99 @@ void LogicManager::HAND_August_WaitTyler(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterAugust)[0] = 1;
}
}
+
if (_gameTime > 1093500 && rcClear()) {
getCharacter(kCharacterAugust).characterPosition.location = 0;
getCharacter(kCharacterAugust).inventoryItem = 0;
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
AugustCall(&LogicManager::CONS_August_DoJoinedSeqOtis, "010J", 36, 103798704, "010K");
}
+
+ break;
+ case 1:
+ getCharacterCurrentParams(kCharacterAugust)[1] = 0;
+ getCharacter(kCharacterAugust).inventoryItem = 0;
+ send(kCharacterAugust, kCharacterHeadWait, 191604416, 0);
+ if (_gameProgress[kProgressJacket] == 2) {
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
+ AugustCall(&LogicManager::CONS_August_DoNIS1006, 0, 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 4;
+ AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventDinerAugustOriginalJacket, 0, 0);
+ }
+
+ break;
+ case 12:
+ send(kCharacterAugust, kCharacterTableD, 136455232, 0);
+ startCycOtis(kCharacterAugust, "010B");
+
+ if (!_gameProgress[kProgressEventMetAugust])
+ getCharacterCurrentParams(kCharacterAugust)[1] = 128;
+
+ getCharacter(kCharacterAugust).inventoryItem = getCharacterCurrentParams(kCharacterAugust)[1];
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
+ case 1:
+ send(kCharacterAugust, kCharacterWaiter1, 204704037, 0);
+ startSeqOtis(kCharacterAugust, "803DS");
+
+ if (inDiningRoom(kCharacterCath))
+ advanceFrame(kCharacterAugust);
+
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
+ AugustCall(&LogicManager::CONS_August_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 2:
+ CONS_August_SeekTyler(0, 0, 0, 0);
+ break;
+ case 3:
+ CONS_August_OrderDinner(0, 0, 0, 0);
+ break;
+ case 4:
+ send(kCharacterAugust, kCharacterAlexei, 225182640, 0);
+ playNIS(kEventDinerAugustOriginalJacket);
+ setDoor(1, kCharacterCath, 3, 0, 0);
+ getCharacter(kCharacterAugust).characterPosition.location = 0;
+ send(kCharacterAugust, kCharacterTableD, 103798704, "010K");
+ startSeqOtis(kCharacterAugust, "010P");
+ bumpCath(kCarRestaurant, 65, 255);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 5;
+ AugustCall(&LogicManager::CONS_August_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 5:
+ send(kCharacterAugust, kCharacterWaiter1, 204704037, 0);
+ startSeqOtis(kCharacterAugust, "803DS");
+ if (inDiningRoom(kCharacterCath))
+ advanceFrame(kCharacterAugust);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 6;
+ AugustCall(&LogicManager::CONS_August_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 6:
+ _gameProgress[kProgressField14] = 2;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 7;
+ AugustCall(&LogicManager::CONS_August_DoWalk, 3, 8200, 0, 0);
+ break;
+ case 7:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 8;
+ AugustCall(&LogicManager::CONS_August_KnockTyler, 0, 0, 0, 0);
+ break;
+ case 8:
+ endGame(0, 0, 0, 1);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 168046720:
+ getCharacter(kCharacterAugust).inventoryItem = 0;
+ break;
+ case 168627977:
+ getCharacter(kCharacterAugust).inventoryItem = getCharacterCurrentParams(kCharacterAugust)[1];
+ break;
+ default:
+ break;
}
}
@@ -1550,7 +1819,8 @@ void LogicManager::CONS_August_SeekTyler(CONS_PARAMS) {
}
void LogicManager::HAND_August_SeekTyler(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (_gameProgress[kProgressEventMetAugust] || _gameProgress[kProgressField14]) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 5;
AugustCall(&LogicManager::CONS_August_DoWalk, 3, 6470, 0, 0);
@@ -1559,7 +1829,9 @@ void LogicManager::HAND_August_SeekTyler(HAND_PARAMS) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
AugustCall(&LogicManager::CONS_August_DoWalk, 3, 8200, 0, 0);
}
- } else if (msg->action == 18) {
+
+ break;
+ case 18:
switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
case 1:
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
@@ -1576,13 +1848,15 @@ void LogicManager::HAND_August_SeekTyler(HAND_PARAMS) {
case 4:
if (_gameProgress[kProgressField14] == 2)
_gameProgress[kProgressField14] = 0;
- goto LABEL_14;
+
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 7;
+ AugustCall(&LogicManager::CONS_August_CompLogic, _gameTime + 900, 0, 0, 0);
+ break;
case 5:
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 6;
AugustCall(&LogicManager::CONS_August_EnterComp, 0, 0, 0, 0);
break;
case 6:
- LABEL_14:
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 7;
AugustCall(&LogicManager::CONS_August_CompLogic, _gameTime + 900, 0, 0, 0);
break;
@@ -1590,8 +1864,12 @@ void LogicManager::HAND_August_SeekTyler(HAND_PARAMS) {
CONS_August_GotoDinner(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1606,10 +1884,12 @@ void LogicManager::CONS_August_GotoDinner(CONS_PARAMS) {
}
void LogicManager::HAND_August_GotoDinner(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
AugustCall(&LogicManager::CONS_August_ExitComp, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
case 1:
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
@@ -1637,8 +1917,12 @@ void LogicManager::HAND_August_GotoDinner(HAND_PARAMS) {
CONS_August_OrderDinner(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1653,50 +1937,54 @@ void LogicManager::CONS_August_OrderDinner(CONS_PARAMS) {
}
void LogicManager::HAND_August_OrderDinner(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action > 168046720) {
- switch (msg->action) {
- case 168627977:
- getCharacter(kCharacterAugust).inventoryItem = getCharacterCurrentParams(kCharacterAugust)[0];
- break;
- case 170016384:
- getCharacter(kCharacterAugust).inventoryItem = 0;
- startCycOtis(kCharacterWaiter1, "BLANK");
- startCycOtis(kCharacterAugust, "010G");
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
- AugustCall(&LogicManager::CONS_August_DoDialog, "AUG1053", 0, 0, 0);
- break;
- case 268773672:
- getCharacter(kCharacterAugust).inventoryItem = 0;
- startCycOtis(kCharacterAugust, "010D");
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
- AugustCall(&LogicManager::CONS_August_DoDialog, "AUG1052", 0, 0, 0);
- break;
- }
- } else if (msg->action == 168046720) {
- getCharacter(kCharacterAugust).inventoryItem = 0;
- } else if (msg->action == 18) {
- if (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 1) {
- send(kCharacterAugust, kCharacterWaiter1, 203859488, 0);
- getCharacter(kCharacterAugust).inventoryItem = getCharacterCurrentParams(kCharacterAugust)[0];
- startCycOtis(kCharacterAugust, "010B");
- } else if (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 2) {
- send(kCharacterAugust, kCharacterWaiter1, 136702400, 0);
- startCycOtis(kCharacterAugust, "010B");
- CONS_August_EatingDinner(0, 0, 0, 0);
- }
- }
- } else if (msg->action == 12) {
+ switch (msg->action) {
+ case 1:
+ getCharacter(kCharacterAugust).inventoryItem = 0;
+ getCharacterCurrentParams(kCharacterAugust)[0] = 0;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
+ AugustCall(&LogicManager::CONS_August_DoNIS1006, 0, 0, 0, 0);
+ break;
+ case 12:
if (!_gameProgress[kProgressEventMetAugust] && _gameProgress[kProgressJacket] == 2)
getCharacterCurrentParams(kCharacterAugust)[0] = 128;
+
startCycOtis(kCharacterAugust, "010B");
send(kCharacterAugust, kCharacterWaiter1, 304061224, 0);
getCharacter(kCharacterAugust).inventoryItem = getCharacterCurrentParams(kCharacterAugust)[0];
- } else if (msg->action == 1) {
+ break;
+ case 18:
+ if (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 1) {
+ send(kCharacterAugust, kCharacterWaiter1, 203859488, 0);
+ getCharacter(kCharacterAugust).inventoryItem = getCharacterCurrentParams(kCharacterAugust)[0];
+ startCycOtis(kCharacterAugust, "010B");
+ } else if (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 2) {
+ send(kCharacterAugust, kCharacterWaiter1, 136702400, 0);
+ startCycOtis(kCharacterAugust, "010B");
+ CONS_August_EatingDinner(0, 0, 0, 0);
+ }
+
+ break;
+ case 168046720:
+ getCharacter(kCharacterAugust).inventoryItem = 0;
+ break;
+ case 168627977:
+ getCharacter(kCharacterAugust).inventoryItem = getCharacterCurrentParams(kCharacterAugust)[0];
+ break;
+ case 170016384:
getCharacter(kCharacterAugust).inventoryItem = 0;
- getCharacterCurrentParams(kCharacterAugust)[0] = 0;
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
- AugustCall(&LogicManager::CONS_August_DoNIS1006, 0, 0, 0, 0);
+ startCycOtis(kCharacterWaiter1, "BLANK");
+ startCycOtis(kCharacterAugust, "010G");
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
+ AugustCall(&LogicManager::CONS_August_DoDialog, "AUG1053", 0, 0, 0);
+ break;
+ case 268773672:
+ getCharacter(kCharacterAugust).inventoryItem = 0;
+ startCycOtis(kCharacterAugust, "010D");
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
+ AugustCall(&LogicManager::CONS_August_DoDialog, "AUG1052", 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1711,53 +1999,58 @@ void LogicManager::CONS_August_EatingDinner(CONS_PARAMS) {
}
void LogicManager::HAND_August_EatingDinner(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action > 168046720) {
- switch (msg->action) {
- case 168627977:
- getCharacter(kCharacterAugust).inventoryItem = getCharacterCurrentParams(kCharacterAugust)[0];
- break;
- case 189426612:
- getCharacterCurrentParams(kCharacterAugust)[1] = 1;
- break;
- case 235257824:
- getCharacterCurrentParams(kCharacterAugust)[1] = 0;
- break;
- }
- } else if (msg->action == 168046720) {
- getCharacter(kCharacterAugust).inventoryItem = 0;
- }
- } else if (msg->action == 12) {
- if (!_gameProgress[kProgressEventMetAugust] && _gameProgress[kProgressJacket] == 2)
- getCharacterCurrentParams(kCharacterAugust)[0] = 128;
- getCharacter(kCharacterAugust).inventoryItem = getCharacterCurrentParams(kCharacterAugust)[0];
- startCycOtis(kCharacterAugust, "010H");
- } else {
- if (msg->action) {
- if (msg->action == 1) {
- getCharacter(kCharacterAugust).inventoryItem = 0;
- getCharacterCurrentParams(kCharacterAugust)[0] = 0;
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
- AugustCall(&LogicManager::CONS_August_DoNIS1006, 0, 0, 0, 0);
- }
- return;
- }
+ switch (msg->action) {
+ case 0:
if (_gameProgress[kProgressField28] && !getCharacterCurrentParams(kCharacterAugust)[1] && getCharacterCurrentParams(kCharacterAugust)[2] != 0x7FFFFFFF && _gameTime) {
if (_gameTime <= 1134000) {
if (!inDiningRoom(kCharacterCath) || dialogRunning("MRB1076") || dialogRunning("MRB1078") || dialogRunning("MRB1078A") || !getCharacterCurrentParams(kCharacterAugust)[2]) {
getCharacterCurrentParams(kCharacterAugust)[2] = _gameTime + 225;
- if (_gameTime == -225)
- goto LABEL_27;
+ if (_gameTime == -225) {
+ getCharacter(kCharacterAugust).inventoryItem = 0;
+ _gameProgress[kProgressField28] = 0;
+ CONS_August_GreetAnna(0, 0, 0, 0);
+ break;
+ }
}
+
if (getCharacterCurrentParams(kCharacterAugust)[2] >= _gameTime)
- return;
+ break;
}
+
getCharacterCurrentParams(kCharacterAugust)[2] = 0x7FFFFFFF;
- LABEL_27:
getCharacter(kCharacterAugust).inventoryItem = 0;
_gameProgress[kProgressField28] = 0;
CONS_August_GreetAnna(0, 0, 0, 0);
}
+
+ break;
+ case 1:
+ getCharacter(kCharacterAugust).inventoryItem = 0;
+ getCharacterCurrentParams(kCharacterAugust)[0] = 0;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
+ AugustCall(&LogicManager::CONS_August_DoNIS1006, 0, 0, 0, 0);
+ break;
+ case 12:
+ if (!_gameProgress[kProgressEventMetAugust] && _gameProgress[kProgressJacket] == 2)
+ getCharacterCurrentParams(kCharacterAugust)[0] = 128;
+
+ getCharacter(kCharacterAugust).inventoryItem = getCharacterCurrentParams(kCharacterAugust)[0];
+ startCycOtis(kCharacterAugust, "010H");
+ break;
+ case 168046720:
+ getCharacter(kCharacterAugust).inventoryItem = 0;
+ break;
+ case 168627977:
+ getCharacter(kCharacterAugust).inventoryItem = getCharacterCurrentParams(kCharacterAugust)[0];
+ break;
+ case 189426612:
+ getCharacterCurrentParams(kCharacterAugust)[1] = 1;
+ break;
+ case 235257824:
+ getCharacterCurrentParams(kCharacterAugust)[1] = 0;
+ break;
+ default:
+ break;
}
}
@@ -1776,9 +2069,11 @@ void LogicManager::HAND_August_GreetAnna(HAND_PARAMS) {
case 0:
if (getCharacterCurrentParams(kCharacterAugust)[2] || (getCharacterCurrentParams(kCharacterAugust)[2] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
if (getCharacterCurrentParams(kCharacterAugust)[2] >= _currentGameSessionTicks)
- return;
+ break;
+
getCharacterCurrentParams(kCharacterAugust)[2] = 0x7FFFFFFF;
}
+
getCharacter(kCharacterAugust).inventoryItem = 0x80;
break;
case 1:
@@ -1797,8 +2092,10 @@ void LogicManager::HAND_August_GreetAnna(HAND_PARAMS) {
AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustPresentAnna, 0, 0);
} else if (getCharacterCurrentParams(kCharacterAugust)[1]) {
getCharacterCurrentParams(kCharacterAugust)[1] = 0;
+
if (_gameProgress[kProgressEventMetAugust])
getCharacter(kCharacterAugust).inventoryItem = 0;
+
playDialog(kCharacterAugust, "AUG1003A", -1, 0);
} else {
getCharacter(kCharacterAugust).inventoryItem = 0;
@@ -1806,6 +2103,7 @@ void LogicManager::HAND_August_GreetAnna(HAND_PARAMS) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 8;
AugustCall(&LogicManager::CONS_August_DoSeqOtis, "010P", 0, 0, 0);
}
+
break;
case 12:
send(kCharacterAugust, kCharacterMonsieur, 135854206, 0);
@@ -1829,8 +2127,10 @@ void LogicManager::HAND_August_GreetAnna(HAND_PARAMS) {
send(kCharacterAugust, kCharacterAnna, 122358304, 0);
startCycOtis(kCharacterAugust, "001K");
playDialog(kCharacterAugust, "AUG1003", -1, 0);
+
if (inDiningRoom(kCharacterCath))
_gameProgress[kProgressField60] = 1;
+
getCharacterCurrentParams(kCharacterAugust)[1] = 1;
break;
case 4:
@@ -1847,6 +2147,7 @@ void LogicManager::HAND_August_GreetAnna(HAND_PARAMS) {
bumpCath(kCarRestaurant, 65, 255);
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 6;
}
+
AugustCall(&LogicManager::CONS_August_FinishSeqOtis, 0, 0, 0, 0);
break;
case 5:
@@ -1857,24 +2158,29 @@ void LogicManager::HAND_August_GreetAnna(HAND_PARAMS) {
break;
case 6:
startSeqOtis(kCharacterAugust, "803DS");
+
if (inDiningRoom(kCharacterCath))
advanceFrame(kCharacterAugust);
+
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 7;
AugustCall(&LogicManager::CONS_August_FinishSeqOtis, 0, 0, 0, 0);
break;
case 8:
startSeqOtis(kCharacterAugust, "803DS");
+
if (inDiningRoom(kCharacterCath))
advanceFrame(kCharacterAugust);
+
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 9;
AugustCall(&LogicManager::CONS_August_FinishSeqOtis, 0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
break;
default:
- return;
+ break;
}
}
@@ -1889,10 +2195,12 @@ void LogicManager::CONS_August_ReturnFromDinner(CONS_PARAMS) {
}
void LogicManager::HAND_August_ReturnFromDinner(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
AugustCall(&LogicManager::CONS_August_DoWalk, 3, 6470, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
case 1:
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
@@ -1913,8 +2221,12 @@ void LogicManager::HAND_August_ReturnFromDinner(HAND_PARAMS) {
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1929,125 +2241,143 @@ void LogicManager::CONS_August_GoSalon(CONS_PARAMS) {
}
void LogicManager::HAND_August_GoSalon(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action > 122358304) {
- if (msg->action == 159332865) {
- startCycOtis(kCharacterAugust, "106E");
- getCharacterCurrentParams(kCharacterAugust)[0] = 1;
- }
- } else {
- switch (msg->action) {
- case 122358304:
- getCharacterCurrentParams(kCharacterAugust)[1] = 0;
- startCycOtis(kCharacterAugust, "BLANK");
- break;
- case 17:
- if (getCharacterCurrentParams(kCharacterAugust)[1]) {
- if (checkCathDir(kCarRestaurant, 57)) {
- bumpCath(kCarRestaurant, 50, 255);
- getCharacterCurrentParams(kCharacterAugust)[2] = 1;
- } else if (!checkCathDir(kCarRestaurant, 50)) {
- getCharacterCurrentParams(kCharacterAugust)[2] = 0;
- }
- } else {
- getCharacterCurrentParams(kCharacterAugust)[2] = (checkCathDir(kCarRestaurant, 56) && getCharacterCurrentParams(kCharacterAugust)[0]) ? 1 : 0;
- }
- break;
- case 18:
- switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
- AugustCall(&LogicManager::CONS_August_DoWalk, 5, 850, 0, 0);
- break;
- case 2:
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
- AugustCall(&LogicManager::CONS_August_WaitRCClear, 0, 0, 0, 0);
- break;
- case 3:
- getCharacter(kCharacterAugust).characterPosition.position = 1540;
- getCharacter(kCharacterAugust).characterPosition.location = 0;
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 4;
- AugustCall(&LogicManager::CONS_August_DoBlockSeqOtis, "105A", 5, 0x39, 0);
- break;
- case 4:
- getCharacter(kCharacterAugust).characterPosition.location = 1;
- startCycOtis(kCharacterAugust, "105B");
- getCharacterCurrentParams(kCharacterAugust)[1] = 1;
- break;
- case 5:
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 6;
- AugustCall(&LogicManager::CONS_August_DoWalk, 3, 6470, 0, 0);
- break;
- case 6:
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 7;
- AugustCall(&LogicManager::CONS_August_EnterComp, 0, 0, 0, 0);
- break;
- case 7:
- CONS_August_BackFromSalon(0, 0, 0, 0);
- break;
- default:
- return;
- }
- break;
- }
- }
- return;
- }
- if (msg->action == 12) {
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
- AugustCall(&LogicManager::CONS_August_ExitComp, 0, 0, 0, 0);
- return;
- }
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterAugust)[5] != 0x7FFFFFFF && _gameTime) {
- if (_gameTime > 1179000)
- goto LABEL_20;
- if (!inSalon(kCharacterAnna) || inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterAugust)[5]) {
- getCharacterCurrentParams(kCharacterAugust)[5] = _gameTime;
- if (!_gameTime)
- goto LABEL_21;
- }
- if (getCharacterCurrentParams(kCharacterAugust)[5] < _gameTime) {
- LABEL_20:
+ if (_gameTime > 1179000) {
getCharacterCurrentParams(kCharacterAugust)[5] = 0x7FFFFFFF;
- LABEL_21:
send(kCharacterAugust, kCharacterAnna, 123712592, 0);
+ } else {
+ bool skip = false; // Horrible way to unroll a goto...
+
+ if (!inSalon(kCharacterAnna) || inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterAugust)[5]) {
+ getCharacterCurrentParams(kCharacterAugust)[5] = _gameTime;
+ if (!_gameTime) {
+ skip = true;
+ send(kCharacterAugust, kCharacterAnna, 123712592, 0);
+ }
+ }
+
+ if (!skip && getCharacterCurrentParams(kCharacterAugust)[5] < _gameTime) {
+ getCharacterCurrentParams(kCharacterAugust)[5] = 0x7FFFFFFF;
+ send(kCharacterAugust, kCharacterAnna, 123712592, 0);
+ }
}
}
+
if (getCharacterCurrentParams(kCharacterAugust)[0] && rcClear()) {
if (!getCharacterCurrentParams(kCharacterAugust)[3]) {
getCharacterCurrentParams(kCharacterAugust)[3] = _gameTime + 1800;
getCharacterCurrentParams(kCharacterAugust)[4] = _gameTime + 9000;
}
+
if (getCharacterCurrentParams(kCharacterAugust)[6] != 0x7FFFFFFF && getCharacterCurrentParams(kCharacterAugust)[3] < _gameTime) {
- if (getCharacterCurrentParams(kCharacterAugust)[4] < _gameTime)
- goto LABEL_33;
+ if (getCharacterCurrentParams(kCharacterAugust)[4] < _gameTime) {
+ getCharacterCurrentParams(kCharacterAugust)[6] = 0x7FFFFFFF;
+ getCharacter(kCharacterAugust).characterPosition.location = 0;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 5;
+ AugustCall(&LogicManager::CONS_August_DoBlockSeqOtis, "109D", 5, 0x38, 0);
+ break;
+ }
+
if (inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterAugust)[6]) {
getCharacterCurrentParams(kCharacterAugust)[6] = _gameTime;
- if (!_gameTime)
- goto LABEL_34;
+ if (!_gameTime) {
+ getCharacter(kCharacterAugust).characterPosition.location = 0;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 5;
+ AugustCall(&LogicManager::CONS_August_DoBlockSeqOtis, "109D", 5, 0x38, 0);
+ break;
+ }
}
+
if (getCharacterCurrentParams(kCharacterAugust)[6] < _gameTime) {
- LABEL_33:
getCharacterCurrentParams(kCharacterAugust)[6] = 0x7FFFFFFF;
- LABEL_34:
getCharacter(kCharacterAugust).characterPosition.location = 0;
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 5;
AugustCall(&LogicManager::CONS_August_DoBlockSeqOtis, "109D", 5, 0x38, 0);
- return;
+ break;
}
}
}
+
if (getCharacterCurrentParams(kCharacterAugust)[2]) {
if (getCharacterCurrentParams(kCharacterAugust)[7] || (getCharacterCurrentParams(kCharacterAugust)[7] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
if (getCharacterCurrentParams(kCharacterAugust)[7] >= _currentGameSessionTicks)
- return;
+ break;
+
getCharacterCurrentParams(kCharacterAugust)[7] = 0x7FFFFFFF;
}
+
bumpCath(kCarRestaurant, 55, 255);
} else {
getCharacterCurrentParams(kCharacterAugust)[7] = 0;
}
+
+ break;
+ case 12:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
+ AugustCall(&LogicManager::CONS_August_ExitComp, 0, 0, 0, 0);
+ break;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterAugust)[1]) {
+ if (checkCathDir(kCarRestaurant, 57)) {
+ bumpCath(kCarRestaurant, 50, 255);
+ getCharacterCurrentParams(kCharacterAugust)[2] = 1;
+ } else if (!checkCathDir(kCarRestaurant, 50)) {
+ getCharacterCurrentParams(kCharacterAugust)[2] = 0;
+ }
+ } else {
+ getCharacterCurrentParams(kCharacterAugust)[2] = (checkCathDir(kCarRestaurant, 56) && getCharacterCurrentParams(kCharacterAugust)[0]) ? 1 : 0;
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
+ AugustCall(&LogicManager::CONS_August_DoWalk, 5, 850, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
+ AugustCall(&LogicManager::CONS_August_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAugust).characterPosition.position = 1540;
+ getCharacter(kCharacterAugust).characterPosition.location = 0;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 4;
+ AugustCall(&LogicManager::CONS_August_DoBlockSeqOtis, "105A", 5, 57, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterAugust).characterPosition.location = 1;
+ startCycOtis(kCharacterAugust, "105B");
+ getCharacterCurrentParams(kCharacterAugust)[1] = 1;
+ break;
+ case 5:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 6;
+ AugustCall(&LogicManager::CONS_August_DoWalk, 3, 6470, 0, 0);
+ break;
+ case 6:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 7;
+ AugustCall(&LogicManager::CONS_August_EnterComp, 0, 0, 0, 0);
+ break;
+ case 7:
+ CONS_August_BackFromSalon(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 122358304:
+ getCharacterCurrentParams(kCharacterAugust)[1] = 0;
+ startCycOtis(kCharacterAugust, "BLANK");
+ break;
+ case 159332865:
+ startCycOtis(kCharacterAugust, "106E");
+ getCharacterCurrentParams(kCharacterAugust)[0] = 1;
+ break;
+ default:
+ break;
}
}
@@ -2062,7 +2392,8 @@ void LogicManager::CONS_August_BackFromSalon(CONS_PARAMS) {
}
void LogicManager::HAND_August_BackFromSalon(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (_gameProgress[kProgressEventMetAugust]) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
AugustCall(&LogicManager::CONS_August_CompLogic, _gameTime + 9000, 0, 0, 0);
@@ -2070,11 +2401,17 @@ void LogicManager::HAND_August_BackFromSalon(HAND_PARAMS) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
AugustCall(&LogicManager::CONS_August_CompLogic, 1404000, 0, 0, 0);
}
- } else if (msg->action == 18) {
+
+ break;
+ case 18:
if (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
if (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] <= 2)
CONS_August_Asleep(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -2089,16 +2426,22 @@ void LogicManager::CONS_August_Asleep(CONS_PARAMS) {
}
void LogicManager::HAND_August_Asleep(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- setDoor(3, kCharacterCath, 1, 10, 9);
- getCharacter(kCharacterAugust).characterPosition.car = kCarGreenSleeping;
- getCharacter(kCharacterAugust).characterPosition.position = 6470;
- getCharacter(kCharacterAugust).characterPosition.location = 1;
- endGraphics(kCharacterAugust);
+ switch (msg->action) {
+ case 0:
+ if (!whoRunningDialog(kCharacterAugust) && _gameProgress[kProgressField18] != 4) {
+ playDialog(kCharacterAugust, "AUG1057", -1, 0);
}
- } else if (!whoRunningDialog(kCharacterAugust) && _gameProgress[kProgressField18] != 4) {
- playDialog(kCharacterAugust, "AUG1057", -1, 0);
+
+ break;
+ case 12:
+ setDoor(3, kCharacterCath, 1, 10, 9);
+ getCharacter(kCharacterAugust).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterAugust).characterPosition.position = 6470;
+ getCharacter(kCharacterAugust).characterPosition.location = 1;
+ endGraphics(kCharacterAugust);
+ break;
+ default:
+ break;
}
}
@@ -2113,19 +2456,22 @@ void LogicManager::CONS_August_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_August_StartPart2(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterAugust);
- getCharacter(kCharacterAugust).characterPosition.position = 3970;
- getCharacter(kCharacterAugust).characterPosition.location = 1;
- getCharacter(kCharacterAugust).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterAugust).clothes = 1;
- getCharacter(kCharacterAugust).inventoryItem = 0;
- setDoor(3, kCharacterCath, 1, 10, 9);
- setDoor(11, kCharacterCath, 0, 255, 255);
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_August_AtBreakfast(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterAugust);
+ getCharacter(kCharacterAugust).characterPosition.position = 3970;
+ getCharacter(kCharacterAugust).characterPosition.location = 1;
+ getCharacter(kCharacterAugust).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterAugust).clothes = 1;
+ getCharacter(kCharacterAugust).inventoryItem = 0;
+ setDoor(3, kCharacterCath, 1, 10, 9);
+ setDoor(11, kCharacterCath, 0, 255, 255);
+ break;
+ default:
+ break;
}
}
@@ -2140,65 +2486,13 @@ void LogicManager::CONS_August_AtBreakfast(CONS_PARAMS) {
}
void LogicManager::HAND_August_AtBreakfast(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
- case 1:
- playNIS(kEventAugustGoodMorning);
- bumpCath(kCarRestaurant, 61, 255);
- break;
- case 2:
- releaseView(kCharacterAugust, kCarRestaurant, 62);
- startSeqOtis(kCharacterAugust, "803ES");
- if (inDiningRoom(kCharacterCath))
- advanceFrame(kCharacterAugust);
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
- AugustCall(&LogicManager::CONS_August_FinishSeqOtis, 0, 0, 0, 0);
- break;
- case 3:
- send(kCharacterAugust, kCharacterWaiter1, 286534136, 0);
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 4;
- AugustCall(&LogicManager::CONS_August_DoWalk, 3, 6470, 0, 0);
- break;
- case 4:
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 5;
- AugustCall(&LogicManager::CONS_August_EnterComp, 1, 0, 0, 0);
- break;
- case 5:
- CONS_August_OpenComp(0, 0, 0, 0);
- break;
- case 6:
- if (!_gameEvents[kEventAugustGoodMorning])
- getCharacter(kCharacterAugust).inventoryItem = 0x80;
- send(kCharacterAugust, kCharacterWaiter1, 219522616, 0);
- startCycOtis(kCharacterAugust, "016B");
- getCharacterCurrentParams(kCharacterAugust)[0] = 1;
- break;
- default:
- return;
- }
- } else if (msg->action == 123712592) {
- startCycOtis(kCharacterAugust, "016A");
- getCharacter(kCharacterAugust).inventoryItem = 0;
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 6;
- AugustCall(&LogicManager::CONS_August_DoDialog, "AUG2113", 0, 0, 0);
- }
- } else if (msg->action == 12) {
- if (!_gameEvents[kEventAugustGoodMorning])
- getCharacter(kCharacterAugust).inventoryItem = 0x80;
- send(kCharacterAugust, kCharacterTableA, 136455232, 0);
- startCycOtis(kCharacterAugust, "016B");
- } else if (msg->action) {
- if (msg->action == 1) {
- getCharacter(kCharacterAugust).inventoryItem = 0;
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
- AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustGoodMorning, 0, 0);
- }
- } else {
+ switch (msg->action) {
+ case 0:
if (_gameTime > 1755000 && !getCharacterCurrentParams(kCharacterAugust)[1]) {
getCharacterCurrentParams(kCharacterAugust)[1] = 1;
send(kCharacterAugust, kCharacterWaiter1, 252568704, 0);
}
+
if (_gameTime > 1773000 && getCharacterCurrentParams(kCharacterAugust)[0] && rcClear()) {
getCharacter(kCharacterAugust).characterPosition.location = 0;
getCharacter(kCharacterAugust).inventoryItem = 0;
@@ -2206,6 +2500,66 @@ void LogicManager::HAND_August_AtBreakfast(HAND_PARAMS) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
AugustCall(&LogicManager::CONS_August_DoJoinedSeqOtis, "016C", 33, 103798704, "016D");
}
+
+ break;
+ case 1:
+ getCharacter(kCharacterAugust).inventoryItem = 0;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
+ AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustGoodMorning, 0, 0);
+ break;
+ case 12:
+ if (!_gameEvents[kEventAugustGoodMorning])
+ getCharacter(kCharacterAugust).inventoryItem = 0x80;
+
+ send(kCharacterAugust, kCharacterTableA, 136455232, 0);
+ startCycOtis(kCharacterAugust, "016B");
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
+ case 1:
+ playNIS(kEventAugustGoodMorning);
+ bumpCath(kCarRestaurant, 61, 255);
+ break;
+ case 2:
+ releaseView(kCharacterAugust, kCarRestaurant, 62);
+ startSeqOtis(kCharacterAugust, "803ES");
+ if (inDiningRoom(kCharacterCath))
+ advanceFrame(kCharacterAugust);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
+ AugustCall(&LogicManager::CONS_August_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 3:
+ send(kCharacterAugust, kCharacterWaiter1, 286534136, 0);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 4;
+ AugustCall(&LogicManager::CONS_August_DoWalk, 3, 6470, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 5;
+ AugustCall(&LogicManager::CONS_August_EnterComp, 1, 0, 0, 0);
+ break;
+ case 5:
+ CONS_August_OpenComp(0, 0, 0, 0);
+ break;
+ case 6:
+ if (!_gameEvents[kEventAugustGoodMorning])
+ getCharacter(kCharacterAugust).inventoryItem = 0x80;
+ send(kCharacterAugust, kCharacterWaiter1, 219522616, 0);
+ startCycOtis(kCharacterAugust, "016B");
+ getCharacterCurrentParams(kCharacterAugust)[0] = 1;
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 123712592:
+ startCycOtis(kCharacterAugust, "016A");
+ getCharacter(kCharacterAugust).inventoryItem = 0;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 6;
+ AugustCall(&LogicManager::CONS_August_DoDialog, "AUG2113", 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -2227,6 +2581,7 @@ void LogicManager::HAND_August_OpenComp(HAND_PARAMS) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 5;
AugustCall(&LogicManager::CONS_August_ExitComp, 1, 0, 0, 0);
}
+
break;
case 12:
setDoor(3, kCharacterCath, 2, 0, 0);
@@ -2243,6 +2598,7 @@ void LogicManager::HAND_August_OpenComp(HAND_PARAMS) {
AugustCall(&LogicManager::CONS_August_DoSeqOtis, "506B2", 0, 0, 0);
}
}
+
break;
case 18:
switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
@@ -2266,11 +2622,12 @@ void LogicManager::HAND_August_OpenComp(HAND_PARAMS) {
AugustCall(&LogicManager::CONS_August_DoWalk, 5, 850, 0, 0);
break;
default:
- return;
+ break;
}
+
break;
default:
- return;
+ break;
}
}
@@ -2285,80 +2642,88 @@ void LogicManager::CONS_August_InSalon(CONS_PARAMS) {
}
void LogicManager::HAND_August_InSalon(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterAugust).characterPosition.position = 1540;
- getCharacter(kCharacterAugust).characterPosition.location = 0;
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
- AugustCall(&LogicManager::CONS_August_DoBlockSeqOtis, "109A", 5, 56, 0);
- break;
- case 2:
- takeItem(kItem3);
- getCharacter(kCharacterAugust).characterPosition.location = 1;
- startCycOtis(kCharacterAugust, "109B");
- break;
- case 3:
- getCharacter(kCharacterAugust).characterPosition.location = 0;
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 4;
- AugustCall(&LogicManager::CONS_August_DoBlockSeqOtis, "109D2", 5, 56, 0);
- break;
- case 4:
- dropItem(kItem3, 1);
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 5;
- AugustCall(&LogicManager::CONS_August_LookingForCath, 1849500, 0, 0, 0);
- break;
- case 5:
- CONS_August_EndPart2(0, 0, 0, 0);
- break;
- case 6:
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 7;
- AugustCall(&LogicManager::CONS_August_DoDialog, "AUG2114", 0, 0, 0);
- break;
- case 7:
- startCycOtis(kCharacterAugust, "108C");
- blockView(kCharacterAugust, kCarRestaurant, 56);
- blockView(kCharacterAugust, kCarRestaurant, 57);
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 8;
- AugustCall(&LogicManager::CONS_August_DoDialog, "AUG2114A", 0, 0, 0);
- break;
- case 8:
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 9;
- AugustCall(&LogicManager::CONS_August_DoDialog, "AUG2115", 0, 0, 0);
- break;
- case 9:
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 10;
- AugustCall(&LogicManager::CONS_August_DoComplexSeqOtis, "108D1", "108D2", 0x17, 0);
- break;
- case 0xA:
- startCycOtis(kCharacterAugust, "109B");
- releaseView(kCharacterAugust, kCarRestaurant, 56);
- releaseView(kCharacterAugust, kCarRestaurant, 57);
- send(kCharacterAugust, kCharacterRebecca, 125496184, 0);
- break;
- default:
- return;
- }
- } else if (msg->action == 169358379) {
- send(kCharacterAugust, kCharacterRebecca, 155465152, 0);
- startCycOtis(kCharacterAugust, "108A");
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 6;
- AugustCall(&LogicManager::CONS_August_DoWait, 900, 0, 0, 0);
- }
- } else if (msg->action == 12) {
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
- AugustCall(&LogicManager::CONS_August_WaitRCClear, 0, 0, 0, 0);
- } else if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (_gameTime > 1801800 && !getCharacterCurrentParams(kCharacterAugust)[0]) {
getCharacterCurrentParams(kCharacterAugust)[0] = 1;
send(kCharacterAugust, kCharacterRebecca, 155980128, 0);
}
+
if (_gameTime > 1820700 && !getCharacterCurrentParams(kCharacterAugust)[1]) {
getCharacterCurrentParams(kCharacterAugust)[1] = 1;
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
AugustCall(&LogicManager::CONS_August_WaitRCClear, 0, 0, 0, 0);
}
+
+ break;
+ case 12:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
+ AugustCall(&LogicManager::CONS_August_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAugust).characterPosition.position = 1540;
+ getCharacter(kCharacterAugust).characterPosition.location = 0;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
+ AugustCall(&LogicManager::CONS_August_DoBlockSeqOtis, "109A", 5, 56, 0);
+ break;
+ case 2:
+ takeItem(kItem3);
+ getCharacter(kCharacterAugust).characterPosition.location = 1;
+ startCycOtis(kCharacterAugust, "109B");
+ break;
+ case 3:
+ getCharacter(kCharacterAugust).characterPosition.location = 0;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 4;
+ AugustCall(&LogicManager::CONS_August_DoBlockSeqOtis, "109D2", 5, 56, 0);
+ break;
+ case 4:
+ dropItem(kItem3, 1);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 5;
+ AugustCall(&LogicManager::CONS_August_LookingForCath, 1849500, 0, 0, 0);
+ break;
+ case 5:
+ CONS_August_EndPart2(0, 0, 0, 0);
+ break;
+ case 6:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 7;
+ AugustCall(&LogicManager::CONS_August_DoDialog, "AUG2114", 0, 0, 0);
+ break;
+ case 7:
+ startCycOtis(kCharacterAugust, "108C");
+ blockView(kCharacterAugust, kCarRestaurant, 56);
+ blockView(kCharacterAugust, kCarRestaurant, 57);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 8;
+ AugustCall(&LogicManager::CONS_August_DoDialog, "AUG2114A", 0, 0, 0);
+ break;
+ case 8:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 9;
+ AugustCall(&LogicManager::CONS_August_DoDialog, "AUG2115", 0, 0, 0);
+ break;
+ case 9:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 10;
+ AugustCall(&LogicManager::CONS_August_DoComplexSeqOtis, "108D1", "108D2", 23, 0);
+ break;
+ case 10:
+ startCycOtis(kCharacterAugust, "109B");
+ releaseView(kCharacterAugust, kCarRestaurant, 56);
+ releaseView(kCharacterAugust, kCarRestaurant, 57);
+ send(kCharacterAugust, kCharacterRebecca, 125496184, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 169358379:
+ send(kCharacterAugust, kCharacterRebecca, 155465152, 0);
+ startCycOtis(kCharacterAugust, "108A");
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 6;
+ AugustCall(&LogicManager::CONS_August_DoWait, 900, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -2373,15 +2738,24 @@ void LogicManager::CONS_August_EndPart2(CONS_PARAMS) {
}
void LogicManager::HAND_August_EndPart2(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (!getCharacterParams(kCharacterAugust, 8)[0])
playDialog(0, "BUMP", -1, 0);
+
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustArrivalInMunich, 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 1) {
- playNIS(kEventAugustArrivalInMunich);
- send(kCharacterAugust, kCharacterMaster, 139122728, 0);
- endGraphics(kCharacterAugust);
+ break;
+ case 18:
+ if (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 1) {
+ playNIS(kEventAugustArrivalInMunich);
+ send(kCharacterAugust, kCharacterMaster, 139122728, 0);
+ endGraphics(kCharacterAugust);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -2396,17 +2770,20 @@ void LogicManager::CONS_August_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_August_StartPart3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterAugust);
- getCharacter(kCharacterAugust).characterPosition.position = 6470;
- getCharacter(kCharacterAugust).characterPosition.location = 0;
- getCharacter(kCharacterAugust).characterPosition.car = kCarGreenSleeping;
- getCharacter(kCharacterAugust).inventoryItem = 0;
- getCharacter(kCharacterAugust).clothes = 1;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_August_GoLunch(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterAugust);
+ getCharacter(kCharacterAugust).characterPosition.position = 6470;
+ getCharacter(kCharacterAugust).characterPosition.location = 0;
+ getCharacter(kCharacterAugust).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterAugust).inventoryItem = 0;
+ getCharacter(kCharacterAugust).clothes = 1;
+ break;
+ default:
+ break;
}
}
@@ -2449,11 +2826,13 @@ void LogicManager::HAND_August_DoWalkP3A(HAND_PARAMS) {
break;
}
}
+
break;
case 1:
getCharacterCurrentParams(kCharacterAugust)[2] = 0;
getCharacter(kCharacterAugust).inventoryItem = 0;
playNIS(((getCharacter(kCharacterAugust).characterPosition.position < getCharacter(kCharacterCath).characterPosition.position) + 22));
+
if (getCharacter(kCharacterAugust).direction == 1)
bumpCathFx(getCharacter(kCharacterAugust).characterPosition.car, getCharacter(kCharacterAugust).characterPosition.position - 750);
else
@@ -2470,6 +2849,7 @@ void LogicManager::HAND_August_DoWalkP3A(HAND_PARAMS) {
} else {
playCathExcuseMe();
}
+
break;
case 6:
playChrExcuseMe(kCharacterAugust, kCharacterCath, 0);
@@ -2482,9 +2862,10 @@ void LogicManager::HAND_August_DoWalkP3A(HAND_PARAMS) {
} else if (_gameEvents[kEventAugustMerchandise] && !_gameEvents[kEventAugustTalkGold] && !_gameEvents[kEventAugustTalkGoldDay]) {
getCharacterCurrentParams(kCharacterAugust)[2] = 128;
}
+
break;
default:
- return;
+ break;
}
}
@@ -2518,6 +2899,7 @@ void LogicManager::HAND_August_DoWalkP3B(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
}
+
break;
case 1:
getCharacterCurrentParams(kCharacterAugust)[3] = 0;
@@ -2549,7 +2931,7 @@ void LogicManager::HAND_August_DoWalkP3B(HAND_PARAMS) {
break;
default:
- return;
+ break;
}
}
@@ -2564,77 +2946,84 @@ void LogicManager::CONS_August_GoLunch(CONS_PARAMS) {
}
void LogicManager::HAND_August_GoLunch(HAND_PARAMS) {
- if (msg->action > 12) {
- switch (msg->action) {
- case 18:
- switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
- AugustCall(&LogicManager::CONS_August_DoWalkP3A, 5, 850, 0, 0);
- break;
- case 2:
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
- AugustCall(&LogicManager::CONS_August_WaitRCClear, 0, 0, 0, 0);
- break;
- case 3:
- getCharacter(kCharacterAugust).characterPosition.position = 1540;
- getCharacter(kCharacterAugust).characterPosition.location = 0;
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 4;
- AugustCall(&LogicManager::CONS_August_DoSeqOtis, "803VS", 0, 0, 0);
- break;
- case 4:
- startSeqOtis(kCharacterAugust, "010A2");
- if (inSalon(kCharacterCath))
- advanceFrame(kCharacterAugust);
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 5;
- AugustCall(&LogicManager::CONS_August_FinishJoinedSeqOtis, 36, 136455232, "BOGUS", 0);
- break;
- case 5:
- getCharacter(kCharacterAugust).characterPosition.location = 1;
- startCycOtis(kCharacterAugust, "010B2");
- if (!_gameEvents[kEventAugustLunch])
- getCharacter(kCharacterAugust).inventoryItem = 0x80;
- break;
- case 6:
- playNIS(kEventAugustLunch);
- cleanNIS();
- break;
- default:
- return;
- }
-
- break;
- case 122288808:
- getCharacterCurrentParams(kCharacterAugust)[0] = 0;
- getCharacter(kCharacterAugust).inventoryItem = 0;
- getCharacter(kCharacterAugust).characterPosition.location = 1;
- startCycOtis(kCharacterAugust, "112G");
- break;
- case 122358304:
- getCharacterCurrentParams(kCharacterAugust)[0] = 1;
- getCharacter(kCharacterAugust).inventoryItem = 0;
- break;
- }
- } else if (msg->action == 12) {
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
- AugustCall(&LogicManager::CONS_August_ExitComp, 1, 0, 0, 0);
- } else if (msg->action) {
- if (msg->action == 1) {
- getCharacter(kCharacterAugust).inventoryItem = 0;
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 6;
- AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustLunch, 0, 0);
- }
- } else {
+ switch (msg->action) {
+ case 0:
if (_gameTime > 1953000 && !getCharacterCurrentParams(kCharacterAugust)[1]) {
getCharacterCurrentParams(kCharacterAugust)[1] = 1;
send(kCharacterAugust, kCharacterAnna, 291662081, 0);
}
+
if (getCharacterCurrentParams(kCharacterAugust)[0])
getCharacter(kCharacterAugust).characterPosition = getCharacter(kCharacterAnna).characterPosition;
+
if (_gameTime > 2016000 && !getCharacterCurrentParams(kCharacterAugust)[0] && rcClear()) {
getCharacter(kCharacterAugust).inventoryItem = 0;
CONS_August_ReturnLunch(0, 0, 0, 0);
}
+
+ break;
+ case 1:
+ getCharacter(kCharacterAugust).inventoryItem = 0;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 6;
+ AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustLunch, 0, 0);
+ break;
+ case 12:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
+ AugustCall(&LogicManager::CONS_August_ExitComp, 1, 0, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
+ AugustCall(&LogicManager::CONS_August_DoWalkP3A, 5, 850, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
+ AugustCall(&LogicManager::CONS_August_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAugust).characterPosition.position = 1540;
+ getCharacter(kCharacterAugust).characterPosition.location = 0;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 4;
+ AugustCall(&LogicManager::CONS_August_DoSeqOtis, "803VS", 0, 0, 0);
+ break;
+ case 4:
+ startSeqOtis(kCharacterAugust, "010A2");
+
+ if (inSalon(kCharacterCath))
+ advanceFrame(kCharacterAugust);
+
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 5;
+ AugustCall(&LogicManager::CONS_August_FinishJoinedSeqOtis, 36, 136455232, "BOGUS", 0);
+ break;
+ case 5:
+ getCharacter(kCharacterAugust).characterPosition.location = 1;
+ startCycOtis(kCharacterAugust, "010B2");
+ if (!_gameEvents[kEventAugustLunch])
+ getCharacter(kCharacterAugust).inventoryItem = 0x80;
+
+ break;
+ case 6:
+ playNIS(kEventAugustLunch);
+ cleanNIS();
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 122288808:
+ getCharacterCurrentParams(kCharacterAugust)[0] = 0;
+ getCharacter(kCharacterAugust).inventoryItem = 0;
+ getCharacter(kCharacterAugust).characterPosition.location = 1;
+ startCycOtis(kCharacterAugust, "112G");
+ break;
+ case 122358304:
+ getCharacterCurrentParams(kCharacterAugust)[0] = 1;
+ getCharacter(kCharacterAugust).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -2649,34 +3038,46 @@ void LogicManager::CONS_August_ReturnLunch(CONS_PARAMS) {
}
void LogicManager::HAND_August_ReturnLunch(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAugust).characterPosition.location = 0;
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
AugustCall(&LogicManager::CONS_August_DoBlockSeqOtis, "112H", 5, 57, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
case 1:
- if (_gameEvents[kEventAugustMerchandise])
- goto LABEL_16;
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
- AugustCall(&LogicManager::CONS_August_LookingForCath, 2043000, 0, 0, 0);
+ if (_gameEvents[kEventAugustMerchandise]) {
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 4;
+ AugustCall(&LogicManager::CONS_August_DoWalkP3A, 3, 6470, 0, 0);
+ } else {
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
+ AugustCall(&LogicManager::CONS_August_LookingForCath, 2043000, 0, 0, 0);
+ }
+
break;
case 2:
- if (!getCharacterParams(kCharacterAugust, 8)[0])
- goto LABEL_16;
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
- AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustMerchandise, 0, 0);
+ if (!getCharacterParams(kCharacterAugust, 8)[0]) {
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 4;
+ AugustCall(&LogicManager::CONS_August_DoWalkP3A, 3, 6470, 0, 0);
+ } else {
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
+ AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustMerchandise, 0, 0);
+ }
+
break;
case 3:
playNIS(kEventAugustMerchandise);
if (getCharacter(kCharacterAugust).characterPosition.car == kCarGreenSleeping && nearX(kCharacterAugust, 6470, 500))
getCharacter(kCharacterAugust).characterPosition.position = 5970;
+
walk(kCharacterAugust, kCarGreenSleeping, 6470);
+
if (getCharacter(kCharacterAugust).direction == 1)
bumpCathFx(getCharacter(kCharacterAugust).characterPosition.car, getCharacter(kCharacterAugust).characterPosition.position - 750);
else
bumpCathRx(getCharacter(kCharacterAugust).characterPosition.car, getCharacter(kCharacterAugust).characterPosition.position + 750);
- LABEL_16:
+
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 4;
AugustCall(&LogicManager::CONS_August_DoWalkP3A, 3, 6470, 0, 0);
break;
@@ -2688,8 +3089,12 @@ void LogicManager::HAND_August_ReturnLunch(HAND_PARAMS) {
CONS_August_AfterLunch(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -2704,20 +3109,27 @@ void LogicManager::CONS_August_AfterLunch(CONS_PARAMS) {
}
void LogicManager::HAND_August_AfterLunch(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 1) {
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 2061000 && !getCharacterCurrentParams(kCharacterAugust)[0]) {
+ getCharacterCurrentParams(kCharacterAugust)[0] = 1;
getCharacter(kCharacterAugust).inventoryItem = 0;
- playDialog(kCharacterCath, "CAT1002", -1, 0);
- playDialog(kCharacterAugust, "AUG3102", -1, 15);
- } else if (msg->action == 12) {
- setDoor(3, 0, 2, 0, 0);
- startCycOtis(kCharacterAugust, "506A2");
- getCharacter(kCharacterAugust).inventoryItem = 0x92;
- }
- } else if (_gameTime > 2061000 && !getCharacterCurrentParams(kCharacterAugust)[0]) {
- getCharacterCurrentParams(kCharacterAugust)[0] = 1;
+ CONS_August_Reading(0, 0, 0, 0);
+ }
+
+ break;
+ case 1:
getCharacter(kCharacterAugust).inventoryItem = 0;
- CONS_August_Reading(0, 0, 0, 0);
+ playDialog(kCharacterCath, "CAT1002", -1, 0);
+ playDialog(kCharacterAugust, "AUG3102", -1, 15);
+ break;
+ case 12:
+ setDoor(3, 0, 2, 0, 0);
+ startCycOtis(kCharacterAugust, "506A2");
+ getCharacter(kCharacterAugust).inventoryItem = 0x92;
+ break;
+ default:
+ break;
}
}
@@ -2731,26 +3143,36 @@ void LogicManager::CONS_August_Reading(CONS_PARAMS) {
fedEx(kCharacterAugust, kCharacterAugust, 12, 0);
}
-void LogicManager::HAND_August_Reading(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 17) {
- if (checkCathDir(kCarGreenSleeping, 43)) {
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
- AugustCall(&LogicManager::CONS_August_DoSeqOtis, "507B2", 0, 0, 0);
- }
- } else if (msg->action == 18) {
- if (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 1) {
- CONS_August_Dressing(0, 0, 0, 0);
- } else if (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 2) {
- if (checkCathDir(kCarGreenSleeping, 43))
- bumpCath(kCarGreenSleeping, 34, 255);
- endGraphics(kCharacterAugust);
- }
+void LogicManager::HAND_August_Reading(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 2088000 && !getCharacterCurrentParams(kCharacterAugust)[0]) {
+ getCharacterCurrentParams(kCharacterAugust)[0] = 1;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
+ AugustCall(&LogicManager::CONS_August_BathroomTrip, 0, 0, 0, 0);
+ }
+
+ break;
+ case 17:
+ if (checkCathDir(kCarGreenSleeping, 43)) {
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
+ AugustCall(&LogicManager::CONS_August_DoSeqOtis, "507B2", 0, 0, 0);
+ }
+
+ break;
+ case 18:
+ if (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 1) {
+ CONS_August_Dressing(0, 0, 0, 0);
+ } else if (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 2) {
+ if (checkCathDir(kCarGreenSleeping, 43))
+ bumpCath(kCarGreenSleeping, 34, 255);
+
+ endGraphics(kCharacterAugust);
}
- } else if (_gameTime > 2088000 && !getCharacterCurrentParams(kCharacterAugust)[0]) {
- getCharacterCurrentParams(kCharacterAugust)[0] = 1;
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
- AugustCall(&LogicManager::CONS_August_BathroomTrip, 0, 0, 0, 0);
+
+ break;
+ default:
+ break;
}
}
@@ -2765,10 +3187,12 @@ void LogicManager::CONS_August_BathroomTrip(CONS_PARAMS) {
}
void LogicManager::HAND_August_BathroomTrip(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
AugustCall(&LogicManager::CONS_August_ExitComp, 1, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
case 1:
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
@@ -2793,8 +3217,12 @@ void LogicManager::HAND_August_BathroomTrip(HAND_PARAMS) {
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -2815,15 +3243,18 @@ void LogicManager::HAND_August_Dressing(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterAugust)[0] = 1;
CONS_August_GoConcert(0, 0, 0, 0);
}
+
break;
case 8:
case 9:
if (!_gameEvents[kEventAugustTalkCompartmentDoorBlueRedingote] && !_gameEvents[kEventAugustTalkCompartmentDoor] && !_gameEvents[kEventAugustBringEgg] && !_gameEvents[kEventAugustBringBriefcase]) {
if (msg->action == 8)
playDialog(0, "LIB012", -1, 0);
+
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustTalkCompartmentDoor, 0, 0);
}
+
break;
case 12:
setDoor(3, kCharacterAugust, 1, 10, 9);
@@ -2838,9 +3269,10 @@ void LogicManager::HAND_August_Dressing(HAND_PARAMS) {
} else if (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 2) {
CONS_August_GoConcert(0, 0, 0, 0);
}
+
break;
default:
- return;
+ break;
}
}
@@ -2855,16 +3287,22 @@ void LogicManager::CONS_August_GoConcert(CONS_PARAMS) {
}
void LogicManager::HAND_August_GoConcert(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
AugustCall(&LogicManager::CONS_August_ExitComp, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 1) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
AugustCall(&LogicManager::CONS_August_DoWalk, 2, 9270, 0, 0);
} else if (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 2) {
CONS_August_Concert(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -2879,14 +3317,19 @@ void LogicManager::CONS_August_Concert(CONS_PARAMS) {
}
void LogicManager::HAND_August_Concert(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
setDoor(3, kCharacterCath, 1, 10, 9);
endGraphics(kCharacterAugust);
getCharacter(kCharacterAugust).characterPosition.car = kCarKronos;
getCharacter(kCharacterAugust).characterPosition.position = 6000;
getCharacter(kCharacterAugust).characterPosition.location = 1;
- } else if (msg->action == 191668032) {
+ break;
+ case 191668032:
CONS_August_StalkAnna(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -2901,20 +3344,15 @@ void LogicManager::CONS_August_StalkAnna(CONS_PARAMS) {
}
void LogicManager::HAND_August_StalkAnna(HAND_PARAMS) {
- if (msg->action > 18) {
- switch (msg->action) {
- case 122288808:
- CONS_August_AfterConcert(0, 0, 0, 0);
- break;
- case 122358304:
- startCycOtis(kCharacterAugust, "BLANK");
- break;
- case 169032608:
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
- AugustCall(&LogicManager::CONS_August_DoWalkP3B, 4, 3820, 1, 0);
- break;
- }
- } else if (msg->action == 18) {
+ switch (msg->action) {
+ case 12:
+ getCharacter(kCharacterAugust).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterAugust).characterPosition.position = 850;
+ getCharacter(kCharacterAugust).characterPosition.location = 0;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
+ AugustCall(&LogicManager::CONS_August_DoWalkP3B, 3, 5790, 0, 0);
+ break;
+ case 18:
switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
case 1:
send(kCharacterAugust, kCharacterTatiana, 191668032, 0);
@@ -2928,13 +3366,23 @@ void LogicManager::HAND_August_StalkAnna(HAND_PARAMS) {
startCycOtis(kCharacterAugust, "BLANK");
send(kCharacterAugust, kCharacterAnna, 123712592, 0);
break;
+ default:
+ break;
}
- } else if (msg->action == 12) {
- getCharacter(kCharacterAugust).characterPosition.car = kCarGreenSleeping;
- getCharacter(kCharacterAugust).characterPosition.position = 850;
- getCharacter(kCharacterAugust).characterPosition.location = 0;
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
- AugustCall(&LogicManager::CONS_August_DoWalkP3B, 3, 5790, 0, 0);
+
+ break;
+ case 122288808:
+ CONS_August_AfterConcert(0, 0, 0, 0);
+ break;
+ case 122358304:
+ startCycOtis(kCharacterAugust, "BLANK");
+ break;
+ case 169032608:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
+ AugustCall(&LogicManager::CONS_August_DoWalkP3B, 4, 3820, 1, 0);
+ break;
+ default:
+ break;
}
}
@@ -2956,11 +3404,13 @@ void LogicManager::HAND_August_AfterConcert(HAND_PARAMS) {
getCharacter(kCharacterCath).characterPosition.location = 1;
if (msg->action == 8)
playDialog(0, "LIB012", -1, 0);
+
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustBringBriefcase, 0, 0);
} else if (!cathHasItem(kItemFirebird) || _gameEvents[kEventAugustBringEgg]) {
if (_gameEvents[kEventAugustTalkCompartmentDoorBlueRedingote] || _gameEvents[kEventAugustBringEgg] || _gameEvents[kEventAugustBringBriefcase]) {
setDoor(3, kCharacterAugust, 1, 0, 0);
+
if (msg->action == 8) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 6;
AugustCall(&LogicManager::CONS_August_DoDialog, "LIB012", 0, 0, 0);
@@ -2971,6 +3421,7 @@ void LogicManager::HAND_August_AfterConcert(HAND_PARAMS) {
} else {
if (msg->action == 8)
playDialog(0, "LIB012", -1, 0);
+
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 5;
AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustBringEgg, 0, 0);
}
@@ -2978,6 +3429,7 @@ void LogicManager::HAND_August_AfterConcert(HAND_PARAMS) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 4;
AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustBringEgg, 0, 0);
}
+
break;
case 12:
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
@@ -3017,11 +3469,12 @@ void LogicManager::HAND_August_AfterConcert(HAND_PARAMS) {
setDoor(3, kCharacterAugust, 1, 10, 9);
break;
default:
- return;
+ break;
}
+
break;
default:
- return;
+ break;
}
}
@@ -3036,10 +3489,12 @@ void LogicManager::CONS_August_Satisfied(CONS_PARAMS) {
}
void LogicManager::HAND_August_Satisfied(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
AugustCall(&LogicManager::CONS_August_DoWait, 2700, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
case 1:
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
@@ -3052,7 +3507,13 @@ void LogicManager::HAND_August_Satisfied(HAND_PARAMS) {
case 3:
CONS_August_InSalon3(0, 0, 0, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -3067,74 +3528,8 @@ void LogicManager::CONS_August_InSalon3(CONS_PARAMS) {
}
void LogicManager::HAND_August_InSalon3(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action > 122288808) {
- if (msg->action == 122358304) {
- startCycOtis(kCharacterAugust, "BLANK");
- getCharacterCurrentParams(kCharacterAugust)[1] = 1;
- getCharacterCurrentParams(kCharacterAugust)[2] = 1;
- } else if (msg->action == 136196244) {
- getCharacterCurrentParams(kCharacterAugust)[1] = 1;
- getCharacter(kCharacterAugust).inventoryItem = 0;
- }
- } else {
- switch (msg->action) {
- case 122288808:
- startCycOtis(kCharacterAugust, "122B");
- getCharacterCurrentParams(kCharacterAugust)[1] = 0;
- if (_gameEvents[kEventAugustTalkCigar])
- getCharacterCurrentParams(kCharacterAugust)[0] = 9000;
- break;
- case 17:
- if (!checkCathDir(kCarRestaurant, 60) || getCharacterCurrentParams(kCharacterAugust)[2]) {
- if (!getCharacterCurrentParams(kCharacterAugust)[1] && checkCathDir(kCarRestaurant, 57))
- bumpCath(kCarRestaurant, 50, 255);
- } else if (!getCharacterCurrentParams(kCharacterAugust)[1]) {
- blockView(kCharacterAugust, kCarRestaurant, 57);
- startSeqOtis(kCharacterAugust, "105C3");
- }
- break;
- case 18:
- switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterAugust).characterPosition.position = 1540;
- getCharacter(kCharacterAugust).characterPosition.location = 0;
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
- AugustCall(&LogicManager::CONS_August_DoBlockSeqOtis, "105A3", 5, 57, 0);
- break;
- case 2:
- getCharacter(kCharacterAugust).characterPosition.location = 1;
- send(kCharacterAugust, kCharacterAbbot, 123712592, 0);
- startCycOtis(kCharacterAugust, "105B3");
- getCharacterCurrentParams(kCharacterAugust)[3] = 1;
- break;
- case 3:
- playNIS(kEventAugustTalkCigar);
- if (getCharacterCurrentParams(kCharacterAugust)[2])
- startCycOtis(kCharacterAugust, "122B");
- else
- startCycOtis(kCharacterAugust, "105B3");
- cleanNIS();
- getCharacterCurrentParams(kCharacterAugust)[0] = 9000;
- getCharacterCurrentParams(kCharacterAugust)[3] = 0;
- break;
- }
- break;
- }
- }
- } else if (msg->action == 12) {
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
- AugustCall(&LogicManager::CONS_August_WaitRCClear, 0, 0, 0, 0);
- } else if (msg->action) {
- if (msg->action == 1) {
- getCharacter(kCharacterAugust).inventoryItem = 0;
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
- AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustTalkCigar, 0, 0);
- } else if (msg->action == 3) {
- releaseView(kCharacterAugust, kCarRestaurant, 57);
- startCycOtis(kCharacterAugust, "105B3");
- }
- } else {
+ switch (msg->action) {
+ case 0:
if (!getCharacterCurrentParams(kCharacterAugust)[3] || getCharacterCurrentParams(kCharacterAugust)[1] || _gameProgress[kProgressField44]) {
getCharacter(kCharacterAugust).inventoryItem = 0;
} else {
@@ -3145,7 +3540,7 @@ void LogicManager::HAND_August_InSalon3(HAND_PARAMS) {
if (getCharacterCurrentParams(kCharacterAugust)[0]) {
if (getCharacterCurrentParams(kCharacterAugust)[4] || (getCharacterCurrentParams(kCharacterAugust)[4] = _gameTime + getCharacterCurrentParams(kCharacterAugust)[0], _gameTime + getCharacterCurrentParams(kCharacterAugust)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterAugust)[4] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterAugust)[4] = 0x7FFFFFFF;
}
@@ -3154,6 +3549,78 @@ void LogicManager::HAND_August_InSalon3(HAND_PARAMS) {
CONS_August_LeaveSalon(0, 0, 0, 0);
}
}
+
+ break;
+ case 1:
+ getCharacter(kCharacterAugust).inventoryItem = 0;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
+ AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustTalkCigar, 0, 0);
+ break;
+ case 3:
+ releaseView(kCharacterAugust, kCarRestaurant, 57);
+ startCycOtis(kCharacterAugust, "105B3");
+ break;
+ case 12:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
+ AugustCall(&LogicManager::CONS_August_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 17:
+ if (!checkCathDir(kCarRestaurant, 60) || getCharacterCurrentParams(kCharacterAugust)[2]) {
+ if (!getCharacterCurrentParams(kCharacterAugust)[1] && checkCathDir(kCarRestaurant, 57))
+ bumpCath(kCarRestaurant, 50, 255);
+ } else if (!getCharacterCurrentParams(kCharacterAugust)[1]) {
+ blockView(kCharacterAugust, kCarRestaurant, 57);
+ startSeqOtis(kCharacterAugust, "105C3");
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAugust).characterPosition.position = 1540;
+ getCharacter(kCharacterAugust).characterPosition.location = 0;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
+ AugustCall(&LogicManager::CONS_August_DoBlockSeqOtis, "105A3", 5, 57, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAugust).characterPosition.location = 1;
+ send(kCharacterAugust, kCharacterAbbot, 123712592, 0);
+ startCycOtis(kCharacterAugust, "105B3");
+ getCharacterCurrentParams(kCharacterAugust)[3] = 1;
+ break;
+ case 3:
+ playNIS(kEventAugustTalkCigar);
+ if (getCharacterCurrentParams(kCharacterAugust)[2])
+ startCycOtis(kCharacterAugust, "122B");
+ else
+ startCycOtis(kCharacterAugust, "105B3");
+ cleanNIS();
+ getCharacterCurrentParams(kCharacterAugust)[0] = 9000;
+ getCharacterCurrentParams(kCharacterAugust)[3] = 0;
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 122288808:
+ startCycOtis(kCharacterAugust, "122B");
+ getCharacterCurrentParams(kCharacterAugust)[1] = 0;
+ if (_gameEvents[kEventAugustTalkCigar])
+ getCharacterCurrentParams(kCharacterAugust)[0] = 9000;
+
+ break;
+ case 122358304:
+ startCycOtis(kCharacterAugust, "BLANK");
+ getCharacterCurrentParams(kCharacterAugust)[1] = 1;
+ getCharacterCurrentParams(kCharacterAugust)[2] = 1;
+ break;
+ case 136196244:
+ getCharacterCurrentParams(kCharacterAugust)[1] = 1;
+ getCharacter(kCharacterAugust).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -3168,10 +3635,12 @@ void LogicManager::CONS_August_LeaveSalon(CONS_PARAMS) {
}
void LogicManager::HAND_August_LeaveSalon(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
AugustCall(&LogicManager::CONS_August_WaitRCClear, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
case 1:
getCharacter(kCharacterAugust).characterPosition.location = 0;
@@ -3190,8 +3659,12 @@ void LogicManager::HAND_August_LeaveSalon(HAND_PARAMS) {
CONS_August_BeforeVienna(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -3206,17 +3679,27 @@ void LogicManager::CONS_August_BeforeVienna(CONS_PARAMS) {
}
void LogicManager::HAND_August_BeforeVienna(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
setDoor(3, kCharacterCath, 2, 0, 0);
startCycOtis(kCharacterAugust, "507A3");
- } else if (msg->action == 17) {
+ break;
+ case 17:
if (!getCharacterCurrentParams(kCharacterAugust)[0] && checkCathDir(kCarGreenSleeping, 43)) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
AugustCall(&LogicManager::CONS_August_DoSeqOtis, "507B3", 0, 0, 0);
}
- } else if (msg->action == 18 && getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 1) {
- getCharacterCurrentParams(kCharacterAugust)[0] = 1;
- startCycOtis(kCharacterAugust, "507A3");
+
+ break;
+ case 18:
+ if (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 1) {
+ getCharacterCurrentParams(kCharacterAugust)[0] = 1;
+ startCycOtis(kCharacterAugust, "507A3");
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -3231,18 +3714,21 @@ void LogicManager::CONS_August_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_August_StartPart4(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterAugust);
- getCharacter(kCharacterAugust).characterPosition.car = kCarGreenSleeping;
- getCharacter(kCharacterAugust).characterPosition.position = 6470;
- getCharacter(kCharacterAugust).characterPosition.location = 1;
- getCharacter(kCharacterAugust).inventoryItem = 0;
- getCharacter(kCharacterAugust).clothes = 2;
- setDoor(3, 0, 2, 0, 0);
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_August_GoDinner(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterAugust);
+ getCharacter(kCharacterAugust).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterAugust).characterPosition.position = 6470;
+ getCharacter(kCharacterAugust).characterPosition.location = 1;
+ getCharacter(kCharacterAugust).inventoryItem = 0;
+ getCharacter(kCharacterAugust).clothes = 2;
+ setDoor(3, 0, 2, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -3257,10 +3743,12 @@ void LogicManager::CONS_August_GoDinner(CONS_PARAMS) {
}
void LogicManager::HAND_August_GoDinner(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
AugustCall(&LogicManager::CONS_August_ExitComp, 1, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
case 1:
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
@@ -3288,8 +3776,12 @@ void LogicManager::HAND_August_GoDinner(HAND_PARAMS) {
CONS_August_WaitingAnna(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -3315,6 +3807,8 @@ void LogicManager::HAND_August_WaitingAnna(HAND_PARAMS) {
case 123793792:
CONS_August_Dinner(0, 0, 0, 0);
break;
+ default:
+ break;
}
}
@@ -3329,63 +3823,62 @@ void LogicManager::CONS_August_Dinner(CONS_PARAMS) {
}
void LogicManager::HAND_August_Dinner(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action > 122288808) {
- if (msg->action == 122358304) {
- startCycOtis(kCharacterAugust, "BLANK");
- } else if (msg->action == 201964801) {
- startCycOtis(kCharacterAugust, "010H3");
- getCharacterCurrentParams(kCharacterAugust)[0] = 1;
- }
- return;
- }
- if (msg->action != 122288808) {
- if (msg->action == 18) {
- if (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 1) {
- getCharacter(kCharacterAugust).characterPosition.location = 0;
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
- AugustCall(&LogicManager::CONS_August_DoJoinedSeqOtis, "010J3", 36, 103798704, "010M");
- } else if (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 2) {
- send(kCharacterAugust, kCharacterWaiter1, 286403504, 0);
- CONS_August_ReturnComp4(0, 0, 0, 0);
- }
+ switch (msg->action) {
+ case 0:
+ {
+ bool skip = false; // Horrible way to unroll a goto...
+
+ if (!getCharacterCurrentParams(kCharacterAugust)[1]) {
+ getCharacterCurrentParams(kCharacterAugust)[1] = _gameTime + 450;
+ if (_gameTime == -450) {
+ skip = true;
+ send(kCharacterAugust, kCharacterWaiter1, 207330561, 0);
}
- return;
}
- LABEL_23:
- startCycOtis(kCharacterAugust, "010B3");
- return;
- }
- if (msg->action == 12)
- goto LABEL_23;
+ if (!skip && getCharacterCurrentParams(kCharacterAugust)[1] < _gameTime) {
+ getCharacterCurrentParams(kCharacterAugust)[1] = 0x7FFFFFFF;
+ send(kCharacterAugust, kCharacterWaiter1, 207330561, 0);
+ }
- if (msg->action)
- return;
+ if (getCharacterCurrentParams(kCharacterAugust)[0] != 0) {
+ if (getCharacterCurrentParams(kCharacterAugust)[2] || (getCharacterCurrentParams(kCharacterAugust)[2] = _gameTime + 9000, _gameTime != -9000)) {
+ if (getCharacterCurrentParams(kCharacterAugust)[2] >= _gameTime)
+ break;
- if (!getCharacterCurrentParams(kCharacterAugust)[1]) {
- getCharacterCurrentParams(kCharacterAugust)[1] = _gameTime + 450;
- if (_gameTime == -450)
- goto LABEL_16;
- }
- if (getCharacterCurrentParams(kCharacterAugust)[1] < _gameTime) {
- getCharacterCurrentParams(kCharacterAugust)[1] = 0x7FFFFFFF;
- LABEL_16:
- send(kCharacterAugust, kCharacterWaiter1, 207330561, 0);
- }
+ getCharacterCurrentParams(kCharacterAugust)[2] = 0x7FFFFFFF;
+ }
- if (!getCharacterCurrentParams(kCharacterAugust)[0])
- return;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
+ AugustCall(&LogicManager::CONS_August_WaitRCClear, 0, 0, 0, 0);
+ }
- if (getCharacterCurrentParams(kCharacterAugust)[2] || (getCharacterCurrentParams(kCharacterAugust)[2] = _gameTime + 9000, _gameTime != -9000)) {
- if (getCharacterCurrentParams(kCharacterAugust)[2] >= _gameTime)
- return;
+ break;
+ }
+ case 12:
+ case 122288808:
+ break;
+ case 18:
+ if (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 1) {
+ getCharacter(kCharacterAugust).characterPosition.location = 0;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
+ AugustCall(&LogicManager::CONS_August_DoJoinedSeqOtis, "010J3", 36, 103798704, "010M");
+ } else if (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 2) {
+ send(kCharacterAugust, kCharacterWaiter1, 286403504, 0);
+ CONS_August_ReturnComp4(0, 0, 0, 0);
+ }
- getCharacterCurrentParams(kCharacterAugust)[2] = 0x7FFFFFFF;
+ break;
+ case 122358304:
+ startCycOtis(kCharacterAugust, "BLANK");
+ break;
+ case 201964801:
+ startCycOtis(kCharacterAugust, "010H3");
+ getCharacterCurrentParams(kCharacterAugust)[0] = 1;
+ break;
+ default:
+ break;
}
-
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
- AugustCall(&LogicManager::CONS_August_WaitRCClear, 0, 0, 0, 0);
}
void LogicManager::CONS_August_ReturnComp4(CONS_PARAMS) {
@@ -3399,14 +3892,18 @@ void LogicManager::CONS_August_ReturnComp4(CONS_PARAMS) {
}
void LogicManager::HAND_August_ReturnComp4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAugust).characterPosition.location = 0;
startSeqOtis(kCharacterAugust, "803FS");
+
if (inDiningRoom(kCharacterCath))
advanceFrame(kCharacterAugust);
+
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
AugustCall(&LogicManager::CONS_August_FinishSeqOtis, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
case 1:
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
@@ -3424,8 +3921,12 @@ void LogicManager::HAND_August_ReturnComp4(HAND_PARAMS) {
CONS_August_GoSalon4(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -3440,61 +3941,11 @@ void LogicManager::CONS_August_GoSalon4(CONS_PARAMS) {
}
void LogicManager::HAND_August_GoSalon4(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action > 122358304) {
- if (msg->action == 125826561) {
- CONS_August_Drinking(0, 0, 0, 0);
- } else if (msg->action == 134486752) {
- startCycOtis(kCharacterAugust, "122B");
- }
- } else {
- switch (msg->action) {
- case 122358304:
- startCycOtis(kCharacterAugust, "BLANK");
- break;
- case 17:
- if (checkCathDir(kCarRestaurant, 57))
- bumpCath(kCarRestaurant, 50, 255);
- break;
- case 18:
- switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
- case 1:
- setDoor(3, 0, 0, 10, 9);
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
- AugustCall(&LogicManager::CONS_August_DoWalk, 5, 850, 0, 0);
- break;
- case 2:
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
- AugustCall(&LogicManager::CONS_August_WaitRCClear, 0, 0, 0, 0);
- break;
- case 3:
- getCharacter(kCharacterAugust).characterPosition.position = 1540;
- getCharacter(kCharacterAugust).characterPosition.location = 0;
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 4;
- AugustCall(&LogicManager::CONS_August_DoBlockSeqOtis, "122A", 5, 57, 0);
- break;
- case 4:
- getCharacter(kCharacterAugust).characterPosition.location = 1;
- startCycOtis(kCharacterAugust, "122B");
- break;
- case 5:
- startCycOtis(kCharacterAugust, "122B");
- send(kCharacterAugust, kCharacterWaiter2, 291721418, 0);
- break;
- default:
- return;
- }
- break;
- }
- }
- } else if (msg->action == 12) {
- getCharacter(kCharacterAugust).characterPosition.location = 0;
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
- AugustCall(&LogicManager::CONS_August_DoCorrOtis, "696Ec", 3, 0, 0);
- } else if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterAugust)[0] || (getCharacterCurrentParams(kCharacterAugust)[0] = _gameTime + 900, _gameTime != -900)) {
if (getCharacterCurrentParams(kCharacterAugust)[0] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterAugust)[0] = 0x7FFFFFFF;
}
@@ -3502,6 +3953,58 @@ void LogicManager::HAND_August_GoSalon4(HAND_PARAMS) {
playDialog(kCharacterAugust, "Aug4003A", -1, 0);
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 5;
AugustCall(&LogicManager::CONS_August_DoBlockSeqOtis, "122C", 5, 57, 0);
+ break;
+ case 12:
+ getCharacter(kCharacterAugust).characterPosition.location = 0;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
+ AugustCall(&LogicManager::CONS_August_DoCorrOtis, "696Ec", 3, 0, 0);
+ break;
+ case 17:
+ if (checkCathDir(kCarRestaurant, 57))
+ bumpCath(kCarRestaurant, 50, 255);
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
+ case 1:
+ setDoor(3, 0, 0, 10, 9);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
+ AugustCall(&LogicManager::CONS_August_DoWalk, 5, 850, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
+ AugustCall(&LogicManager::CONS_August_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAugust).characterPosition.position = 1540;
+ getCharacter(kCharacterAugust).characterPosition.location = 0;
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 4;
+ AugustCall(&LogicManager::CONS_August_DoBlockSeqOtis, "122A", 5, 57, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterAugust).characterPosition.location = 1;
+ startCycOtis(kCharacterAugust, "122B");
+ break;
+ case 5:
+ startCycOtis(kCharacterAugust, "122B");
+ send(kCharacterAugust, kCharacterWaiter2, 291721418, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 122358304:
+ startCycOtis(kCharacterAugust, "BLANK");
+ break;
+ case 125826561:
+ CONS_August_Drinking(0, 0, 0, 0);
+ break;
+ case 134486752:
+ startCycOtis(kCharacterAugust, "122B");
+ break;
+ default:
+ break;
}
}
@@ -3516,19 +4019,21 @@ void LogicManager::CONS_August_Drinking(CONS_PARAMS) {
}
void LogicManager::HAND_August_Drinking(HAND_PARAMS) {
- bool tmp;
-
switch (msg->action) {
case 0:
+ {
+ bool skip = false; // Horrible way to unroll a goto...
+
if (!getCharacterCurrentParams(kCharacterAugust)[2]) {
getCharacterCurrentParams(kCharacterAugust)[2] = _gameTime + 1800;
- if (_gameTime == -1800)
- goto LABEL_7;
+ if (_gameTime == -1800) {
+ skip = true;
+ getCharacter(kCharacterAugust).inventoryItem = 0x80;
+ }
}
- if (getCharacterCurrentParams(kCharacterAugust)[2] < _gameTime) {
+ if (!skip && getCharacterCurrentParams(kCharacterAugust)[2] < _gameTime) {
getCharacterCurrentParams(kCharacterAugust)[2] = 0x7FFFFFFF;
- LABEL_7:
getCharacter(kCharacterAugust).inventoryItem = 0x80;
}
@@ -3536,17 +4041,18 @@ void LogicManager::HAND_August_Drinking(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterAugust)[3] = 1;
getCharacter(kCharacterAugust).inventoryItem = 0;
CONS_August_Drunk(0, 0, 0, 0);
- return;
+ break;
}
if (getCharacterCurrentParams(kCharacterAugust)[4] ||
(getCharacterCurrentParams(kCharacterAugust)[4] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterAugust)[0], _currentGameSessionTicks + getCharacterCurrentParams(kCharacterAugust)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterAugust)[4] >= _currentGameSessionTicks)
- return;
+ break;
+
getCharacterCurrentParams(kCharacterAugust)[4] = 0x7FFFFFFF;
}
- tmp = getCharacterCurrentParams(kCharacterAugust)[1] == 0;
+ bool tmp = getCharacterCurrentParams(kCharacterAugust)[1] == 0;
getCharacterCurrentParams(kCharacterAugust)[1] = tmp;
if (tmp) {
@@ -3558,6 +4064,7 @@ void LogicManager::HAND_August_Drinking(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterAugust)[0] = 5 * (3 * rnd(20) + 15);
getCharacterCurrentParams(kCharacterAugust)[4] = 0;
break;
+ }
case 1:
if (inSalon(kCharacterAlexei))
forceJump(kCharacterAlexei, &LogicManager::CONS_Alexei_GoToPlatform);
@@ -3565,24 +4072,26 @@ void LogicManager::HAND_August_Drinking(HAND_PARAMS) {
getCharacter(kCharacterAugust).inventoryItem = 0;
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustDrink, 0, 0);
- return;
+ break;
case 12:
getCharacterCurrentParams(kCharacterAugust)[0] = 5 * (3 * rnd(20) + 15);
startCycOtis(kCharacterAugust, "122F");
- return;
+ break;
case 17:
if (checkCathDir(kCarRestaurant, 57))
bumpCath(kCarRestaurant, 50, 255);
- return;
+
+ break;
case 18:
if (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 1) {
playNIS(kEventAugustDrink);
bumpCath(kCarRestaurant, 55, 255);
CONS_August_Drunk(0, 0, 0, 0);
}
- return;
+
+ break;
default:
- return;
+ break;
}
}
@@ -3599,8 +4108,7 @@ void LogicManager::CONS_August_Drunk(CONS_PARAMS) {
void LogicManager::HAND_August_Drunk(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (!getCharacterCurrentParams(kCharacterAugust)[0] &&
- (getCharacterCurrentParams(kCharacterAugust)[0] = _gameTime + 1800, _gameTime == -1800) || getCharacterCurrentParams(kCharacterAugust)[0] < _gameTime) {
+ if (!getCharacterCurrentParams(kCharacterAugust)[0] && (getCharacterCurrentParams(kCharacterAugust)[0] = _gameTime + 1800, _gameTime == -1800) || getCharacterCurrentParams(kCharacterAugust)[0] < _gameTime) {
if (_gameTime > 2430000) {
if (rcClear()) {
getCharacter(kCharacterAugust).characterPosition.location = 0;
@@ -3609,6 +4117,7 @@ void LogicManager::HAND_August_Drunk(HAND_PARAMS) {
}
}
}
+
break;
case 12:
startCycOtis(kCharacterAugust, "122H");
@@ -3616,6 +4125,7 @@ void LogicManager::HAND_August_Drunk(HAND_PARAMS) {
case 17:
if (checkCathDir(kCarRestaurant, 57))
bumpCath(kCarRestaurant, 50, 255);
+
break;
case 18:
switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
@@ -3631,10 +4141,13 @@ void LogicManager::HAND_August_Drunk(HAND_PARAMS) {
endGraphics(kCharacterAugust);
CONS_August_Asleep4(0, 0, 0, 0);
break;
+ default:
+ break;
}
+
break;
default:
- return;
+ break;
}
}
@@ -3649,13 +4162,21 @@ void LogicManager::CONS_August_Asleep4(CONS_PARAMS) {
}
void LogicManager::HAND_August_Asleep4(HAND_PARAMS) {
- if (msg->action == 2 || msg->action == 12 && (getCharacter(kCharacterAugust).characterPosition.car = kCarGreenSleeping,
- getCharacter(kCharacterAugust).characterPosition.position = 6470,
- getCharacter(kCharacterAugust).characterPosition.location = 1,
- endGraphics(kCharacterAugust),
- setDoor(3, kCharacterCath, 1, 10, 9),
- !whoRunningDialog(kCharacterAugust))) {
- playDialog(kCharacterAugust, "AUG1057", -1, 0);
+ switch (msg->action) {
+ case 2:
+ case 12:
+ if (getCharacter(kCharacterAugust).characterPosition.car = kCarGreenSleeping,
+ getCharacter(kCharacterAugust).characterPosition.position = 6470,
+ getCharacter(kCharacterAugust).characterPosition.location = 1,
+ endGraphics(kCharacterAugust),
+ setDoor(3, kCharacterCath, 1, 10, 9),
+ !whoRunningDialog(kCharacterAugust)) {
+ playDialog(kCharacterAugust, "AUG1057", -1, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -3670,17 +4191,20 @@ void LogicManager::CONS_August_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_August_StartPart5(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterAugust);
- getCharacter(kCharacterAugust).characterPosition.position = 3969;
- getCharacter(kCharacterAugust).characterPosition.location = 1;
- getCharacter(kCharacterAugust).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterAugust).inventoryItem = 0;
- getCharacter(kCharacterAugust).clothes = 2;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_August_Prisoner(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterAugust);
+ getCharacter(kCharacterAugust).characterPosition.position = 3969;
+ getCharacter(kCharacterAugust).characterPosition.location = 1;
+ getCharacter(kCharacterAugust).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterAugust).inventoryItem = 0;
+ getCharacter(kCharacterAugust).clothes = 2;
+ break;
+ default:
+ break;
}
}
@@ -3695,8 +4219,13 @@ void LogicManager::CONS_August_Prisoner(CONS_PARAMS) {
}
void LogicManager::HAND_August_Prisoner(HAND_PARAMS) {
- if (msg->action == 70549068)
+ switch (msg->action) {
+ case 70549068:
CONS_August_Hiding(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_August_Hiding(CONS_PARAMS) {
@@ -3710,66 +4239,28 @@ void LogicManager::CONS_August_Hiding(CONS_PARAMS) {
}
void LogicManager::HAND_August_Hiding(HAND_PARAMS) {
- if (msg->action > 9) {
- if (msg->action > 17) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
- case 1:
- getCharacterCurrentParams(kCharacterAugust)[0] = 0;
- setDoor(3, kCharacterAugust, 1, 10, 9);
- break;
- case 2:
- case 3:
- getCharacterCurrentParams(kCharacterAugust)[2]++;
- switch (getCharacterCurrentParams(kCharacterAugust)[2]) {
- case 1:
- setDoor(3, kCharacterAugust, 1, 0, 0);
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 4;
- AugustCall(&LogicManager::CONS_August_DoDialog, "Aug5002", 0, 0, 0);
- break;
- case 2:
- setDoor(3, kCharacterAugust, 1, 0, 0);
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 5;
- AugustCall(&LogicManager::CONS_August_DoDialog, "Aug5002A", 0, 0, 0);
- break;
- case 3:
- setDoor(3, kCharacterAugust, 1, 0, 0);
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 6;
- AugustCall(&LogicManager::CONS_August_DoDialog, "Aug5002B", 0, 0, 0);
- break;
- }
- break;
- case 4:
- getCharacterCurrentParams(kCharacterAugust)[0] = 1;
- setDoor(3, kCharacterAugust, 1, 14, 0);
- break;
- case 5:
- setDoor(3, kCharacterAugust, 1, 10, 9);
- break;
- case 6:
- getCharacterCurrentParams(kCharacterAugust)[1] = 1;
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAugust)[0]) {
+ if (getCharacterCurrentParams(kCharacterAugust)[3] ||
+ (getCharacterCurrentParams(kCharacterAugust)[3] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterAugust)[3] >= _currentGameSessionTicks)
break;
- default:
- return;
- }
- } else if (msg->action == 203078272) {
- send(kCharacterAugust, kCharacterTatiana, 203078272, 0);
- CONS_August_CutLoose(0, 0, 0, 0);
- }
- } else if (msg->action == 17) {
- if (getCharacterCurrentParams(kCharacterAugust)[1] || getCharacterCurrentParams(kCharacterAugust)[0]) {
- getCharacterCurrentParams(kCharacterAugust)[1] = 0;
- getCharacterCurrentParams(kCharacterAugust)[0] = 0;
- setDoor(3, kCharacterAugust, 1, 10, 9);
- getCharacterCurrentParams(kCharacterAugust)[2] = 0;
+
+ getCharacterCurrentParams(kCharacterAugust)[3] = 0x7FFFFFFF;
}
- } else if (msg->action == 12) {
- getCharacter(kCharacterAugust).characterPosition.position = 6470;
- getCharacter(kCharacterAugust).characterPosition.location = 1;
- getCharacter(kCharacterAugust).characterPosition.car = 3;
- setDoor(3, 2, 1, 10, 9);
+
+ getCharacterCurrentParams(kCharacterAugust)[0] = 0;
+ getCharacterCurrentParams(kCharacterAugust)[1] = 1;
+ setDoor(3, kCharacterAugust, 1, 0, 0);
+ getCharacterCurrentParams(kCharacterAugust)[3] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterAugust)[3] = 0;
}
- } else if (msg->action >= 8) {
+
+ break;
+ case 8:
+ case 9:
if (getCharacterCurrentParams(kCharacterAugust)[0]) {
setDoor(3, kCharacterAugust, 1, 0, 0);
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
@@ -3781,23 +4272,74 @@ void LogicManager::HAND_August_Hiding(HAND_PARAMS) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
AugustCall(&LogicManager::CONS_August_DoDialog, "LIB013", 0, 0, 0);
}
- } else if (msg->action == 0) {
- if (getCharacterCurrentParams(kCharacterAugust)[0]) {
- if (getCharacterCurrentParams(kCharacterAugust)[3] ||
- (getCharacterCurrentParams(kCharacterAugust)[3] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterAugust)[3] >= _currentGameSessionTicks)
- return;
- getCharacterCurrentParams(kCharacterAugust)[3] = 0x7FFFFFFF;
- }
+ break;
+ case 12:
+ getCharacter(kCharacterAugust).characterPosition.position = 6470;
+ getCharacter(kCharacterAugust).characterPosition.location = 1;
+ getCharacter(kCharacterAugust).characterPosition.car = 3;
+ setDoor(3, 2, 1, 10, 9);
+ break;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterAugust)[1] || getCharacterCurrentParams(kCharacterAugust)[0]) {
+ getCharacterCurrentParams(kCharacterAugust)[1] = 0;
+ getCharacterCurrentParams(kCharacterAugust)[0] = 0;
+ setDoor(3, kCharacterAugust, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterAugust)[2] = 0;
+ }
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
+ case 1:
getCharacterCurrentParams(kCharacterAugust)[0] = 0;
+ setDoor(3, kCharacterAugust, 1, 10, 9);
+ break;
+ case 2:
+ case 3:
+ getCharacterCurrentParams(kCharacterAugust)[2]++;
+ switch (getCharacterCurrentParams(kCharacterAugust)[2]) {
+ case 1:
+ setDoor(3, kCharacterAugust, 1, 0, 0);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 4;
+ AugustCall(&LogicManager::CONS_August_DoDialog, "Aug5002", 0, 0, 0);
+ break;
+ case 2:
+ setDoor(3, kCharacterAugust, 1, 0, 0);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 5;
+ AugustCall(&LogicManager::CONS_August_DoDialog, "Aug5002A", 0, 0, 0);
+ break;
+ case 3:
+ setDoor(3, kCharacterAugust, 1, 0, 0);
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 6;
+ AugustCall(&LogicManager::CONS_August_DoDialog, "Aug5002B", 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 4:
+ getCharacterCurrentParams(kCharacterAugust)[0] = 1;
+ setDoor(3, kCharacterAugust, 1, 14, 0);
+ break;
+ case 5:
+ setDoor(3, kCharacterAugust, 1, 10, 9);
+ break;
+ case 6:
getCharacterCurrentParams(kCharacterAugust)[1] = 1;
- setDoor(3, kCharacterAugust, 1, 0, 0);
- getCharacterCurrentParams(kCharacterAugust)[3] = 0;
- } else {
- getCharacterCurrentParams(kCharacterAugust)[3] = 0;
+ break;
+ default:
+ break;
}
+
+ break;
+ case 203078272:
+ send(kCharacterAugust, kCharacterTatiana, 203078272, 0);
+ CONS_August_CutLoose(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -3812,18 +4354,25 @@ void LogicManager::CONS_August_CutLoose(CONS_PARAMS) {
}
void LogicManager::HAND_August_CutLoose(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- _engine->getSoundManager()->endAmbient();
- if (dialogRunning("ARRIVE"))
- endDialog("ARRIVE");
- getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
- AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustUnhookCarsBetrayal, 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 1) {
+ switch (msg->action) {
+ case 0:
+ sendAll(kCharacterAugust, 135800432, 0);
+ CONS_August_Disappear(0, 0, 0, 0);
+ break;
+ case 12:
+ _engine->getSoundManager()->endAmbient();
+ if (dialogRunning("ARRIVE"))
+ endDialog("ARRIVE");
+ getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
+ AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustUnhookCarsBetrayal, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 1) {
if (_gameProgress[kProgressFieldC])
playNIS(kEventAugustUnhookCarsBetrayal);
else
playNIS(kEventAugustUnhookCars);
+
endGraphics(kCharacterAugust);
_engine->getSoundManager()->startAmbient();
playDialog(0, "MUS050", -1, 0);
@@ -3831,9 +4380,10 @@ void LogicManager::HAND_August_CutLoose(HAND_PARAMS) {
sendAll(kCharacterAugust, 70549068, 0);
forceJump(kCharacterTrainM, &LogicManager::CONS_TrainM_Disappear);
}
- } else {
- sendAll(kCharacterAugust, 135800432, 0);
- CONS_August_Disappear(0, 0, 0, 0);
+
+ break;
+ default:
+ break;
}
}
Commit: 3879c981887fb40d19cfd81ed50a5138308e0a66
https://github.com/scummvm/scummvm/commit/3879c981887fb40d19cfd81ed50a5138308e0a66
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Abbot logic
Changed paths:
engines/lastexpress/characters/abbot.cpp
diff --git a/engines/lastexpress/characters/abbot.cpp b/engines/lastexpress/characters/abbot.cpp
index 50e75ec1a0f..473f1b79939 100644
--- a/engines/lastexpress/characters/abbot.cpp
+++ b/engines/lastexpress/characters/abbot.cpp
@@ -49,7 +49,7 @@ void LogicManager::CONS_Abbot(int chapter) {
CONS_Abbot_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -70,19 +70,25 @@ void LogicManager::CONS_Abbot_DebugWalks(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_DebugWalks(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterAbbot).characterPosition.position = 0;
- getCharacter(kCharacterAbbot).characterPosition.location = 0;
- getCharacter(kCharacterAbbot).characterPosition.car = kCarGreenSleeping;
- getCharacterCurrentParams(kCharacterAbbot)[0] = 10000;
- }
- } else if (walk(kCharacterAbbot, kCarGreenSleeping, getCharacterCurrentParams(kCharacterAbbot)[0])) {
- if (getCharacterCurrentParams(kCharacterAbbot)[0] == 10000) {
- getCharacterCurrentParams(kCharacterAbbot)[0] = 0;
- } else {
- getCharacterCurrentParams(kCharacterAbbot)[0] = 10000;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterAbbot, kCarGreenSleeping, getCharacterCurrentParams(kCharacterAbbot)[0])) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[0] == 10000) {
+ getCharacterCurrentParams(kCharacterAbbot)[0] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterAbbot)[0] = 10000;
+ }
}
+
+ break;
+ case 12:
+ getCharacter(kCharacterAbbot).characterPosition.position = 0;
+ getCharacter(kCharacterAbbot).characterPosition.location = 0;
+ getCharacter(kCharacterAbbot).characterPosition.car = kCarGreenSleeping;
+ getCharacterCurrentParams(kCharacterAbbot)[0] = 10000;
+ break;
+ default:
+ break;
}
}
@@ -99,12 +105,17 @@ void LogicManager::CONS_Abbot_DoSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_DoSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
getCharacter(kCharacterAbbot).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterAbbot, (char *)&getCharacterCurrentParams(kCharacterAbbot)[0]);
+ break;
+ default:
+ break;
}
}
@@ -123,16 +134,21 @@ void LogicManager::CONS_Abbot_DoCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_DoCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterAbbot, getCharacterCurrentParams(kCharacterAbbot)[3]);
getCharacter(kCharacterAbbot).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterAbbot, (char *)&getCharacterCurrentParams(kCharacterAbbot)[0]);
blockAtDoor(kCharacterAbbot, getCharacterCurrentParams(kCharacterAbbot)[3]);
+ break;
+ default:
+ break;
}
}
@@ -151,7 +167,8 @@ void LogicManager::CONS_Abbot_DoEnterCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_DoEnterCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterAbbot, getCharacterCurrentParams(kCharacterAbbot)[3]);
getCharacter(kCharacterAbbot).characterPosition.position = 6470;
getCharacter(kCharacterAbbot).characterPosition.location = 1;
@@ -160,7 +177,8 @@ void LogicManager::HAND_Abbot_DoEnterCorrOtis(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterAbbot, (char *)&getCharacterCurrentParams(kCharacterAbbot)[0]);
blockAtDoor(kCharacterAbbot, getCharacterCurrentParams(kCharacterAbbot)[3]);
getCharacter(kCharacterAbbot).characterPosition.location = 1;
@@ -175,6 +193,10 @@ void LogicManager::HAND_Abbot_DoEnterCorrOtis(HAND_PARAMS) {
playDialog(kCharacterCath, "BUMP", -1, 0);
bumpCathFDoor(34);
}
+
+ break;
+ default:
+ break;
}
}
@@ -189,10 +211,18 @@ void LogicManager::CONS_Abbot_FinishSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_FinishSeqOtis(HAND_PARAMS) {
- if (msg->action == 3 || (msg->action == 0 && getCharacter(kCharacterAbbot).direction != 4)) {
- getCharacter(kCharacterAbbot).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
- fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+ switch (msg->action) {
+ case 0:
+ case 3:
+ if (msg->action == 3 || (msg->action == 0 && getCharacter(kCharacterAbbot).direction != 4)) {
+ getCharacter(kCharacterAbbot).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
+ fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -212,14 +242,19 @@ void LogicManager::CONS_Abbot_DoComplexSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_DoComplexSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
getCharacter(kCharacterAbbot).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterAbbot, (char *)&getCharacterCurrentParams(kCharacterAbbot)[0]);
startSeqOtis(getCharacterCurrentParams(kCharacterAbbot)[6], (char *)&getCharacterCurrentParams(kCharacterAbbot)[3]);
+ break;
+ default:
+ break;
}
}
@@ -236,20 +271,21 @@ void LogicManager::CONS_Abbot_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_DoWait(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterAbbot)[1]) {
if (getCharacterCurrentParams(kCharacterAbbot)[1] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterAbbot)[1] = 0x7FFFFFFF;
} else {
getCharacterCurrentParams(kCharacterAbbot)[1] = _gameTime + getCharacterCurrentParams(kCharacterAbbot)[0];
if (_gameTime + getCharacterCurrentParams(kCharacterAbbot)[0] == 0)
- return;
+ break;
if (getCharacterCurrentParams(kCharacterAbbot)[1] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterAbbot)[1] = 0x7FFFFFFF;
}
@@ -258,6 +294,9 @@ void LogicManager::HAND_Abbot_DoWait(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -274,20 +313,21 @@ void LogicManager::CONS_Abbot_DoWaitReal(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_DoWaitReal(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterAbbot)[1]) {
if (getCharacterCurrentParams(kCharacterAbbot)[1] >= _currentGameSessionTicks)
- return;
+ break;
getCharacterCurrentParams(kCharacterAbbot)[1] = 0x7FFFFFFF;
} else {
getCharacterCurrentParams(kCharacterAbbot)[1] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterAbbot)[0];
if (_currentGameSessionTicks + getCharacterCurrentParams(kCharacterAbbot)[0] == 0)
- return;
+ break;
if (getCharacterCurrentParams(kCharacterAbbot)[1] >= _currentGameSessionTicks)
- return;
+ break;
getCharacterCurrentParams(kCharacterAbbot)[1] = 0x7FFFFFFF;
}
@@ -296,6 +336,9 @@ void LogicManager::HAND_Abbot_DoWaitReal(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -312,13 +355,18 @@ void LogicManager::CONS_Abbot_DoDialog(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_DoDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterAbbot).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterAbbot, (char *)&getCharacterCurrentParams(kCharacterAbbot)[0], -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -336,12 +384,14 @@ void LogicManager::CONS_Abbot_SaveGame(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_SaveGame(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
getCharacter(kCharacterAbbot).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
save(
kCharacterAbbot,
getCharacterCurrentParams(kCharacterAbbot)[0],
@@ -352,6 +402,9 @@ void LogicManager::HAND_Abbot_SaveGame(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -446,6 +499,8 @@ void LogicManager::HAND_Abbot_DoJoinedSeqOtis(HAND_PARAMS) {
case 12:
startSeqOtis(kCharacterAbbot, (char *)&getCharacterCurrentParams(kCharacterAbbot));
break;
+ default:
+ break;
}
}
@@ -465,14 +520,19 @@ void LogicManager::CONS_Abbot_DoBlockSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_DoBlockSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseView(kCharacterAbbot, getCharacterCurrentParams(kCharacterAbbot)[3], getCharacterCurrentParams(kCharacterAbbot)[4]);
getCharacter(kCharacterAbbot).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterAbbot, (char *)&getCharacterCurrentParams(kCharacterAbbot));
blockView(kCharacterAbbot, getCharacterCurrentParams(kCharacterAbbot)[3], getCharacterCurrentParams(kCharacterAbbot)[4]);
+ break;
+ default:
+ break;
}
}
@@ -506,8 +566,13 @@ void LogicManager::CONS_Abbot_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_Birth(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
autoMessage(kCharacterAbbot, 203073664, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Abbot_StartPart2(CONS_PARAMS) {
@@ -521,8 +586,13 @@ void LogicManager::CONS_Abbot_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_StartPart2(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterAbbot);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Abbot_StartPart3(CONS_PARAMS) {
@@ -536,9 +606,11 @@ void LogicManager::CONS_Abbot_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_StartPart3(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_Abbot_InKitchen(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
endGraphics(kCharacterAbbot);
getCharacter(kCharacterAbbot).characterPosition.location = 1;
@@ -546,6 +618,9 @@ void LogicManager::HAND_Abbot_StartPart3(HAND_PARAMS) {
getCharacter(kCharacterAbbot).characterPosition.position = 5900;
getCharacter(kCharacterAbbot).inventoryItem = 0;
getCharacter(kCharacterAbbot).clothes = 0;
+ break;
+ default:
+ break;
}
}
@@ -560,15 +635,14 @@ void LogicManager::CONS_Abbot_InKitchen(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_InKitchen(HAND_PARAMS) {
- if (msg->action == 18) {
+ switch (msg->action) {
+ case 18:
switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
case 1:
getCharacter(kCharacterAbbot).characterPosition.position = 5800;
getCharacter(kCharacterAbbot).characterPosition.location = 0;
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
-
AbbotCall(&LogicManager::CONS_Abbot_DoSeqOtis, "804DD", 0, 0, 0);
-
break;
case 2:
send(kCharacterAbbot, kCharacterCook, 236976550, 0);
@@ -578,22 +652,17 @@ void LogicManager::HAND_Abbot_InKitchen(HAND_PARAMS) {
advanceFrame(kCharacterAbbot);
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
-
AbbotCall(&LogicManager::CONS_Abbot_FinishSeqOtis, 0, 0, 0, 0);
-
break;
case 3:
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 4;
-
AbbotCall(&LogicManager::CONS_Abbot_DoWalk, 4, 6470, 0, 0);
-
break;
case 4:
setDoor(34, kCharacterCath, 1, 255, 255);
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 5;
AbbotCall(&LogicManager::CONS_Abbot_DoCorrOtis, "617AC", 34, 0, 0);
-
break;
case 5:
setDoor(34, kCharacterCath, 2, 255, 255);
@@ -601,14 +670,18 @@ void LogicManager::HAND_Abbot_InKitchen(HAND_PARAMS) {
getCharacter(kCharacterAbbot).characterPosition.location = 1;
CONS_Abbot_OpenComp(0, 0, 0, 0);
-
break;
default:
- return;
+ break;
}
- } else if (msg->action == 192054567) {
+
+ break;
+ case 192054567:
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
AbbotCall(&LogicManager::CONS_Abbot_WaitRCClear, 0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -623,18 +696,22 @@ void LogicManager::CONS_Abbot_OpenComp(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_OpenComp(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (_gameTime > 1953000 && !getCharacterCurrentParams(kCharacterAbbot)[0]) {
getCharacterCurrentParams(kCharacterAbbot)[0] = 1;
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "MrB3010", 0, 0, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
startCycOtis(kCharacterAbbot, "508A");
send(kCharacterAbbot, kCharacterMonsieur, 122358304, 0);
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb3010", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
case 1:
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
@@ -647,7 +724,13 @@ void LogicManager::HAND_Abbot_OpenComp(HAND_PARAMS) {
send(kCharacterAbbot, kCharacterMonsieur, 122288808, 0);
CONS_Abbot_AloneComp(0, 0, 0, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -662,12 +745,16 @@ void LogicManager::CONS_Abbot_AloneComp(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_AloneComp(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (_gameTime > 1966500 && inDiningRoom(kCharacterMonsieur)) {
CONS_Abbot_GoLunch(0, 0, 0, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
startCycOtis(kCharacterAbbot, "509A");
+ break;
}
}
@@ -725,8 +812,9 @@ void LogicManager::HAND_Abbot_GoLunch(HAND_PARAMS) {
CONS_Abbot_EatingLunch(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
break;
case 122288808:
send(kCharacterAbbot, kCharacterTableE, 136455232, 0);
@@ -734,6 +822,8 @@ void LogicManager::HAND_Abbot_GoLunch(HAND_PARAMS) {
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 7;
AbbotCall(&LogicManager::CONS_Abbot_DoSeqOtis, "029B", 0, 0, 0);
break;
+ default:
+ break;
}
}
@@ -764,7 +854,7 @@ void LogicManager::HAND_Abbot_EatingLunch(HAND_PARAMS) {
case 1:
getCharacter(kCharacterAbbot).inventoryItem = kItemNone;
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
- AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, 110, 0, 0);
+ AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, kEventAbbotIntroduction, 0, 0);
break;
case 12:
startCycOtis(kCharacterAbbot, "029E");
@@ -803,12 +893,14 @@ void LogicManager::CONS_Abbot_LeaveLunch(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_LeaveLunch(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAbbot).characterPosition.location = 0;
blockView(kCharacterAbbot, kCarRestaurant, 67);
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
AbbotCall(&LogicManager::CONS_Abbot_DoJoinedSeqOtis, "029F", 37, 103798704, "029G");
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
case 1:
releaseView(kCharacterAbbot, kCarRestaurant, 67);
@@ -835,8 +927,12 @@ void LogicManager::HAND_Abbot_LeaveLunch(HAND_PARAMS) {
CONS_Abbot_ClosedComp(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -855,7 +951,7 @@ void LogicManager::HAND_Abbot_ClosedComp(HAND_PARAMS) {
case 0:
if (getCharacterCurrentParams(kCharacterAbbot)[0] || (getCharacterCurrentParams(kCharacterAbbot)[0] = _gameTime + 900, _gameTime != -900)) {
if (getCharacterCurrentParams(kCharacterAbbot)[0] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterAbbot)[0] = 0x7FFFFFFF;
}
@@ -894,7 +990,7 @@ void LogicManager::HAND_Abbot_ClosedComp(HAND_PARAMS) {
break;
default:
- return;
+ break;
}
}
@@ -909,10 +1005,12 @@ void LogicManager::CONS_Abbot_GoSalon1(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_GoSalon1(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
AbbotCall(&LogicManager::CONS_Abbot_DoCorrOtis, "617Dc", 34, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
case 1:
getCharacter(kCharacterAbbot).characterPosition.location = 0;
@@ -937,8 +1035,12 @@ void LogicManager::HAND_Abbot_GoSalon1(HAND_PARAMS) {
CONS_Abbot_InSalon(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -953,7 +1055,8 @@ void LogicManager::CONS_Abbot_InSalon(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_InSalon(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterAbbot)[0]) {
if ((!getCharacterCurrentParams(kCharacterAbbot)[1] &&
(getCharacterCurrentParams(kCharacterAbbot)[1] = _gameTime + 4500, _gameTime == -4500)) ||
@@ -962,11 +1065,17 @@ void LogicManager::HAND_Abbot_InSalon(HAND_PARAMS) {
CONS_Abbot_GoComp(0, 0, 0, 0);
}
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
send(kCharacterAbbot, kCharacterKronos, 157159392, 0);
startCycOtis(kCharacterAbbot, "115B");
- } else if (msg->action == 101169422) {
+ break;
+ case 101169422:
getCharacterCurrentParams(kCharacterAbbot)[0] = 1;
+ break;
+ default:
+ break;
}
}
@@ -981,10 +1090,12 @@ void LogicManager::CONS_Abbot_GoComp(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_GoComp(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
AbbotCall(&LogicManager::CONS_Abbot_WaitRCClear, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
case 1:
getCharacter(kCharacterAbbot).characterPosition.location = 0;
@@ -1008,8 +1119,12 @@ void LogicManager::HAND_Abbot_GoComp(HAND_PARAMS) {
CONS_Abbot_OpenComp2(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1024,22 +1139,31 @@ void LogicManager::CONS_Abbot_OpenComp2(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_OpenComp2(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (_gameTime > 2052000 && !getCharacterCurrentParams(kCharacterAbbot)[0]) {
getCharacterCurrentParams(kCharacterAbbot)[0] = 1;
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
AbbotCall(&LogicManager::CONS_Abbot_GoWander, 0, 0, 0, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
send(kCharacterAbbot, kCharacterMonsieur, 122358304, 0);
startCycOtis(kCharacterAbbot, "508A");
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb3013", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 1)
startCycOtis(kCharacterAbbot, "508B");
- } else if (msg->action == 222609266) {
+
+ break;
+ case 222609266:
CONS_Abbot_GoSalon2(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1054,12 +1178,14 @@ void LogicManager::CONS_Abbot_GoWander(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_GoWander(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
send(kCharacterAbbot, kCharacterMonsieur, 122288808, 0);
setDoor(34, kCharacterCath, 1, 255, 255);
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
AbbotCall(&LogicManager::CONS_Abbot_DoCorrOtis, "617Bc", 34, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
case 1:
setDoor(34, kCharacterCath, 2, 255, 255);
@@ -1098,8 +1224,12 @@ void LogicManager::HAND_Abbot_GoWander(HAND_PARAMS) {
fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1114,16 +1244,18 @@ void LogicManager::CONS_Abbot_GoSalon2(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_GoSalon2(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb3030", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
case 1:
send(kCharacterAbbot, kCharacterMonsieur, 122288808, 0);
setDoor(34, kCharacterCath, 1, 255, 255);
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
- AbbotCall(&LogicManager::CONS_Abbot_DoCorrOtis, "617Bc", 0x22, 0, 0);
+ AbbotCall(&LogicManager::CONS_Abbot_DoCorrOtis, "617Bc", 34, 0, 0);
break;
case 2:
setDoor(34, kCharacterCath, 2, 255, 255);
@@ -1147,8 +1279,12 @@ void LogicManager::HAND_Abbot_GoSalon2(HAND_PARAMS) {
CONS_Abbot_InSalon2(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1163,92 +1299,112 @@ void LogicManager::CONS_Abbot_InSalon2(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_InSalon2(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacterCurrentParams(kCharacterAbbot)[1] = _gameTime + 4500;
- getCharacterCurrentParams(kCharacterAbbot)[2] = _gameTime + 18000;
- startCycOtis(kCharacterAbbot, "115B");
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterAbbot).characterPosition.location = 0;
- getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
- AbbotCall(&LogicManager::CONS_Abbot_DoBlockSeqOtis, "115E", 5, 56, 0);
- break;
- case 2:
- dropItem(kItem3, 1);
- send(kCharacterAbbot, kCharacterAlexei, 122358304, 0);
- playDialog(kCharacterAbbot, "Abb3020", -1, 0);
- getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
- AbbotCall(&LogicManager::CONS_Abbot_DoBlockSeqOtis, "125A", 5, 52, 0);
- break;
- case 3:
- getCharacter(kCharacterAbbot).characterPosition.location = 1;
- startCycOtis(kCharacterAbbot, "125B");
- getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 4;
- AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb3021", 0, 0, 0);
- break;
- case 4:
- playDialog(kCharacterAbbot, "Abb3023", -1, 0);
- blockView(kCharacterAbbot, kCarRestaurant, 52);
- getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 5;
- AbbotCall(&LogicManager::CONS_Abbot_DoComplexSeqOtis, "125C1", "125C2", 12, 0);
- break;
- case 5:
- releaseView(kCharacterAbbot, kCarRestaurant, 52);
- startCycOtis(kCharacterAbbot, "125D");
- send(kCharacterAbbot, kCharacterAlexei, 122288808, 0);
- getCharacterCurrentParams(kCharacterAbbot)[0] = 1;
- goto LABEL_21;
- case 6:
- getCharacter(kCharacterAbbot).characterPosition.location = 0;
- getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 7;
- AbbotCall(&LogicManager::CONS_Abbot_DoBlockSeqOtis, "125E", 5, 52, 0);
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAbbot)[3] != 0x7FFFFFFF && getCharacterCurrentParams(kCharacterAbbot)[1] < _gameTime) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[2] < _gameTime) {
+ getCharacterCurrentParams(kCharacterAbbot)[3] = 0x7FFFFFFF;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_WaitRCClear, 0, 0, 0, 0);
break;
- case 7:
- CONS_Abbot_GoComp3(0, 0, 0, 0);
+ }
+
+ if (!inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterAbbot)[3]) {
+ getCharacterCurrentParams(kCharacterAbbot)[3] = _gameTime + 450;
+ if (_gameTime == -450) {
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_WaitRCClear, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterAbbot)[3] < _gameTime) {
+ getCharacterCurrentParams(kCharacterAbbot)[3] = 0x7FFFFFFF;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ AbbotCall(&LogicManager::CONS_Abbot_WaitRCClear, 0, 0, 0, 0);
break;
- default:
- return;
}
}
- return;
- }
+ if (getCharacterCurrentParams(kCharacterAbbot)[0] != 0) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[4] || (getCharacterCurrentParams(kCharacterAbbot)[4] = _gameTime + 450, _gameTime != -450)) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[4] >= _gameTime)
+ break;
- if (getCharacterCurrentParams(kCharacterAbbot)[3] != 0x7FFFFFFF && getCharacterCurrentParams(kCharacterAbbot)[1] < _gameTime) {
- if (getCharacterCurrentParams(kCharacterAbbot)[2] < _gameTime)
- goto LABEL_12;
+ getCharacterCurrentParams(kCharacterAbbot)[4] = 0x7FFFFFFF;
+ }
- if (!inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterAbbot)[3]) {
- getCharacterCurrentParams(kCharacterAbbot)[3] = _gameTime + 450;
- if (_gameTime == -450)
- goto LABEL_13;
- }
-
- if (getCharacterCurrentParams(kCharacterAbbot)[3] < _gameTime) {
- LABEL_12:
- getCharacterCurrentParams(kCharacterAbbot)[3] = 0x7FFFFFFF;
- LABEL_13:
- getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 6;
AbbotCall(&LogicManager::CONS_Abbot_WaitRCClear, 0, 0, 0, 0);
- return;
}
- }
-LABEL_21:
- if (!getCharacterCurrentParams(kCharacterAbbot)[0])
- return;
+ break;
+ case 12:
+ getCharacterCurrentParams(kCharacterAbbot)[1] = _gameTime + 4500;
+ getCharacterCurrentParams(kCharacterAbbot)[2] = _gameTime + 18000;
+ startCycOtis(kCharacterAbbot, "115B");
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAbbot).characterPosition.location = 0;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
+ AbbotCall(&LogicManager::CONS_Abbot_DoBlockSeqOtis, "115E", 5, 56, 0);
+ break;
+ case 2:
+ dropItem(kItem3, 1);
+ send(kCharacterAbbot, kCharacterAlexei, 122358304, 0);
+ playDialog(kCharacterAbbot, "Abb3020", -1, 0);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
+ AbbotCall(&LogicManager::CONS_Abbot_DoBlockSeqOtis, "125A", 5, 52, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAbbot).characterPosition.location = 1;
+ startCycOtis(kCharacterAbbot, "125B");
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 4;
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb3021", 0, 0, 0);
+ break;
+ case 4:
+ playDialog(kCharacterAbbot, "Abb3023", -1, 0);
+ blockView(kCharacterAbbot, kCarRestaurant, 52);
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 5;
+ AbbotCall(&LogicManager::CONS_Abbot_DoComplexSeqOtis, "125C1", "125C2", 12, 0);
+ break;
+ case 5:
+ releaseView(kCharacterAbbot, kCarRestaurant, 52);
+ startCycOtis(kCharacterAbbot, "125D");
+ send(kCharacterAbbot, kCharacterAlexei, 122288808, 0);
+ getCharacterCurrentParams(kCharacterAbbot)[0] = 1;
+
+ if (getCharacterCurrentParams(kCharacterAbbot)[0] != 0) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[4] || (getCharacterCurrentParams(kCharacterAbbot)[4] = _gameTime + 450, _gameTime != -450)) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[4] >= _gameTime)
+ break;
- if (getCharacterCurrentParams(kCharacterAbbot)[4] || (getCharacterCurrentParams(kCharacterAbbot)[4] = _gameTime + 450, _gameTime != -450)) {
- if (getCharacterCurrentParams(kCharacterAbbot)[4] >= _gameTime)
- return;
+ getCharacterCurrentParams(kCharacterAbbot)[4] = 0x7FFFFFFF;
+ }
- getCharacterCurrentParams(kCharacterAbbot)[4] = 0x7FFFFFFF;
- }
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 6;
+ AbbotCall(&LogicManager::CONS_Abbot_WaitRCClear, 0, 0, 0, 0);
+ }
+
+ break;
+ case 6:
+ getCharacter(kCharacterAbbot).characterPosition.location = 0;
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 7;
+ AbbotCall(&LogicManager::CONS_Abbot_DoBlockSeqOtis, "125E", 5, 52, 0);
+ break;
+ case 7:
+ CONS_Abbot_GoComp3(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
- getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 6;
- AbbotCall(&LogicManager::CONS_Abbot_WaitRCClear, 0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Abbot_GoComp3(CONS_PARAMS) {
@@ -1262,10 +1418,12 @@ void LogicManager::CONS_Abbot_GoComp3(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_GoComp3(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
AbbotCall(&LogicManager::CONS_Abbot_DoWalk, 4, 6470, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 1) {
setDoor(34, kCharacterCath, 1, 255, 255);
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
@@ -1277,6 +1435,10 @@ void LogicManager::HAND_Abbot_GoComp3(HAND_PARAMS) {
send(kCharacterAbbot, kCharacterMonsieur, 122358304, 0);
CONS_Abbot_OpenComp3(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -1291,7 +1453,8 @@ void LogicManager::CONS_Abbot_OpenComp3(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_OpenComp3(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterAbbot)[0] != 0x7FFFFFFF && _gameTime > 2115000) {
if (_gameTime <= 2124000) {
if (!nearChar(kCharacterAbbot, kCharacterCath, 2000) || !getCharacterCurrentParams(kCharacterAbbot)[0]) {
@@ -1299,12 +1462,12 @@ void LogicManager::HAND_Abbot_OpenComp3(HAND_PARAMS) {
if (!_gameTime) {
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb3014", 0, 0, 0);
- return;
+ break;
}
}
if (getCharacterCurrentParams(kCharacterAbbot)[0] >= _gameTime)
- return;
+ break;
}
getCharacterCurrentParams(kCharacterAbbot)[0] = 0x7FFFFFFF;
@@ -1312,13 +1475,19 @@ void LogicManager::HAND_Abbot_OpenComp3(HAND_PARAMS) {
AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb3014", 0, 0, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
startCycOtis(kCharacterAbbot, "508A");
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 1)
startCycOtis(kCharacterAbbot, "508B");
- } else if (msg->action == 123712592) {
+
+ break;
+ case 123712592:
CONS_Abbot_GoSalon3(0, 0, 0, 0);
+ break;
}
}
@@ -1333,10 +1502,12 @@ void LogicManager::CONS_Abbot_GoSalon3(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_GoSalon3(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb3031", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
case 1:
send(kCharacterAbbot, kCharacterMonsieur, 122288808, 0);
@@ -1368,6 +1539,10 @@ void LogicManager::HAND_Abbot_GoSalon3(HAND_PARAMS) {
default:
break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1385,7 +1560,7 @@ void LogicManager::HAND_Abbot_InSalon3(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (getCharacterCurrentParams(kCharacterAbbot)[1] == 0x7FFFFFFF || !_gameTime)
- return;
+ break;
if (getCharacterCurrentParams(kCharacterAbbot)[0] >= _gameTime) {
if (!inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterAbbot)[1]) {
@@ -1394,19 +1569,19 @@ void LogicManager::HAND_Abbot_InSalon3(HAND_PARAMS) {
send(kCharacterAbbot, kCharacterAugust, 136196244, 0);
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
AbbotCall(&LogicManager::CONS_Abbot_DoWait, 0, 0, 0, 0);
- return;
+ break;
}
}
if (getCharacterCurrentParams(kCharacterAbbot)[1] >= _gameTime)
- return;
+ break;
}
getCharacterCurrentParams(kCharacterAbbot)[1] = 0x7FFFFFFF;
send(kCharacterAbbot, kCharacterAugust, 136196244, 0);
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
AbbotCall(&LogicManager::CONS_Abbot_DoWait, 0, 0, 0, 0);
- return;
+ break;
case 12:
startCycOtis(kCharacterAbbot, "115B");
getCharacterCurrentParams(kCharacterAbbot)[0] = _gameTime + 9000;
@@ -1456,19 +1631,19 @@ void LogicManager::HAND_Abbot_WithAugust(HAND_PARAMS) {
switch (getCharacterCurrentParams(kCharacterAbbot)[1]) {
case 1:
if (getCharacterCurrentParams(kCharacterAbbot)[2] == 0x7FFFFFFF || !_gameTime)
- return;
+ break;
if (getCharacterCurrentParams(kCharacterAbbot)[0] >= _gameTime) {
if (!inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterAbbot)[2]) {
getCharacterCurrentParams(kCharacterAbbot)[2] = _gameTime + 675;
if (_gameTime == -675) {
playDialog(kCharacterAbbot, "Abb3041", -1, 0);
- return;
+ break;
}
}
if (getCharacterCurrentParams(kCharacterAbbot)[2] >= _gameTime)
- return;
+ break;
}
getCharacterCurrentParams(kCharacterAbbot)[2] = 0x7FFFFFFF;
@@ -1477,7 +1652,7 @@ void LogicManager::HAND_Abbot_WithAugust(HAND_PARAMS) {
case 2:
if (getCharacterCurrentParams(kCharacterAbbot)[3] || (getCharacterCurrentParams(kCharacterAbbot)[3] = _gameTime + 900, _gameTime != -900)) {
if (getCharacterCurrentParams(kCharacterAbbot)[3] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterAbbot)[3] = 0x7FFFFFFF;
}
@@ -1529,10 +1704,12 @@ void LogicManager::CONS_Abbot_GoComp4(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_GoComp4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
AbbotCall(&LogicManager::CONS_Abbot_DoWalk, 4, 6470, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 1) {
setDoor(34, kCharacterCath, 1, 255, 255);
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
@@ -1544,6 +1721,10 @@ void LogicManager::HAND_Abbot_GoComp4(HAND_PARAMS) {
send(kCharacterAbbot, kCharacterMonsieur, 122358304, 0);
CONS_Abbot_InComp4(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -1558,14 +1739,20 @@ void LogicManager::CONS_Abbot_InComp4(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_InComp4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
startCycOtis(kCharacterAbbot, "508A");
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb3014A", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 1) {
startCycOtis(kCharacterAbbot, "508B");
}
+
+ break;
+ default:
+ break;
}
}
@@ -1580,13 +1767,18 @@ void LogicManager::CONS_Abbot_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_StartPart4(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_Abbot_AtDinner(0, 0, 0, 0);
- } else if (msg->action == 12) {
- endGraphics(13);
+ break;
+ case 12:
+ endGraphics(kCharacterAbbot);
getCharacter(kCharacterAbbot).inventoryItem = 0;
getCharacter(kCharacterAbbot).characterPosition.car = kCarRestaurant;
getCharacterParams(kCharacterAbbot, 8)[0] = 0;
+ break;
+ default:
+ break;
}
}
@@ -1604,31 +1796,42 @@ void LogicManager::CONS_Abbot_DoWalkSearchingForCath(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_DoWalkSearchingForCath(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (walk(kCharacterAbbot, getCharacterCurrentParams(kCharacterAbbot)[0], getCharacterCurrentParams(kCharacterAbbot)[1])) {
getCharacter(kCharacterAbbot).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
} else if (!_gameEvents[kEventAbbotInvitationDrink] && nearChar(kCharacterAbbot, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
- if (getCharacter(kCharacterAbbot).characterPosition.car == 3 || getCharacter(kCharacterAbbot).characterPosition.car == 4) {
+ if (getCharacter(kCharacterAbbot).characterPosition.car == kCarGreenSleeping || getCharacter(kCharacterAbbot).characterPosition.car == kCarRedSleeping) {
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
- AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, 113, 0, 0);
+ AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, kEventAbbotInvitationDrink, 0, 0);
}
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
if (walk(kCharacterAbbot, getCharacterCurrentParams(kCharacterAbbot)[0], getCharacterCurrentParams(kCharacterAbbot)[1])) {
getCharacter(kCharacterAbbot).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
}
- } else if (msg->action == 18 && getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 1) {
- playNIS(kEventAbbotInvitationDrink);
- if (getCharacter(kCharacterAbbot).direction == 1) {
- bumpCathFx(getCharacter(kCharacterAbbot).characterPosition.car, getCharacter(kCharacterAbbot).characterPosition.position - 750);
- } else {
- bumpCathRx(getCharacter(kCharacterAbbot).characterPosition.car, getCharacter(kCharacterAbbot).characterPosition.position + 750);
+ break;
+ case 18:
+ if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 1) {
+ playNIS(kEventAbbotInvitationDrink);
+
+ if (getCharacter(kCharacterAbbot).direction == 1) {
+ bumpCathFx(getCharacter(kCharacterAbbot).characterPosition.car, getCharacter(kCharacterAbbot).characterPosition.position - 750);
+ } else {
+ bumpCathRx(getCharacter(kCharacterAbbot).characterPosition.car, getCharacter(kCharacterAbbot).characterPosition.position + 750);
+ }
}
+
+ break;
+ default:
+ break;
}
}
@@ -1643,23 +1846,32 @@ void LogicManager::CONS_Abbot_AtDinner(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_AtDinner(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (_gameTime > 2358000 && !getCharacterCurrentParams(kCharacterAbbot)[0]) {
getCharacterCurrentParams(kCharacterAbbot)[0] = 1;
send(kCharacterAbbot, kCharacterWaiter1, 218128129, 0);
}
+
if (_gameTime > 2389500) {
if (rcClear())
CONS_Abbot_LeaveDinner(0, 0, 0, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
send(kCharacterAbbot, kCharacterTableE, 136455232, 0);
startCycOtis(kCharacterAbbot, "029E");
getCharacter(kCharacterAbbot).characterPosition.location = 1;
- } else if (msg->action == 122288808) {
+ break;
+ case 122288808:
startCycOtis(kCharacterAbbot, "029E");
- } else if (msg->action == 122358304) {
+ break;
+ case 122358304:
startCycOtis(kCharacterAbbot, "BLANK");
+ break;
+ default:
+ break;
}
}
@@ -1674,12 +1886,14 @@ void LogicManager::CONS_Abbot_LeaveDinner(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_LeaveDinner(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAbbot).characterPosition.location = 0;
blockView(kCharacterAbbot, kCarRestaurant, 67);
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
AbbotCall(&LogicManager::CONS_Abbot_DoJoinedSeqOtis, "029F", 37, 103798704, "029G");
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
case 1:
releaseView(kCharacterAbbot, kCarRestaurant, 67);
@@ -1704,8 +1918,12 @@ void LogicManager::HAND_Abbot_LeaveDinner(HAND_PARAMS) {
CONS_Abbot_InComp(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1720,106 +1938,14 @@ void LogicManager::CONS_Abbot_InComp(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_InComp(HAND_PARAMS) {
- if (msg->action > 9) {
- if (msg->action > 17) {
- switch (msg->action) {
- case 18:
- switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
- case 1:
- if (_gameTime > 2466000 && !getCharacterCurrentParams(kCharacterAbbot)[4]) {
- getCharacterCurrentParams(kCharacterAbbot)[4] = 1;
- CONS_Abbot_Asleep4(0, 0, 0, 0);
- return;
- }
-
- if (getCharacterCurrentParams(kCharacterAbbot)[2]) {
- if (getCharacterCurrentParams(kCharacterAbbot)[5] || (getCharacterCurrentParams(kCharacterAbbot)[5] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterAbbot)[5] >= _currentGameSessionTicks)
- return;
-
- getCharacterCurrentParams(kCharacterAbbot)[5] = 0x7FFFFFFF;
- }
-
- getCharacterCurrentParams(kCharacterAbbot)[2] = 0;
- getCharacterCurrentParams(kCharacterAbbot)[1] = 1;
-
- setDoor(34, kCharacterAbbot, 1, 0, 0);
- setDoor(50, kCharacterAbbot, 1, 0, 0);
-
- getCharacterCurrentParams(kCharacterAbbot)[5] = 0;
- } else {
- getCharacterCurrentParams(kCharacterAbbot)[5] = 0;
- }
-
- break;
- case 2:
- case 3:
- getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 4;
- AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb3001", 0, 0, 0);
- break;
- case 4:
- setDoor(34, kCharacterAbbot, 1, 14, 0);
- setDoor(50, kCharacterAbbot, 1, 14, 0);
- getCharacterCurrentParams(kCharacterAbbot)[2] = 1;
- break;
- case 5:
- case 6:
- getCharacterCurrentParams(kCharacterAbbot)[2] = 0;
- getCharacterCurrentParams(kCharacterAbbot)[1] = 1;
- break;
- default:
- return;
- }
- break;
- case 101687594:
- getCharacterCurrentParams(kCharacterAbbot)[0] = 1;
- break;
- case 159003408:
- getCharacterCurrentParams(kCharacterAbbot)[0] = 0;
- break;
- }
- } else if (msg->action == 17) {
- if (getCharacterCurrentParams(kCharacterAbbot)[1] || getCharacterCurrentParams(kCharacterAbbot)[2]) {
- setDoor(34, kCharacterAbbot, 1, 10, 9);
- setDoor(50, kCharacterAbbot, 1, 10, 9);
- getCharacterCurrentParams(kCharacterAbbot)[1] = 0;
- getCharacterCurrentParams(kCharacterAbbot)[2] = 0;
- }
- } else if (msg->action == 12) {
- setDoor(34, kCharacterAbbot, 1, 10, 9);
- setDoor(50, kCharacterAbbot, 1, 10, 9);
- }
- } else if (msg->action >= 8) {
- if (getCharacterCurrentParams(kCharacterAbbot)[2]) {
- setDoor(34, kCharacterAbbot, 1, 0, 0);
- setDoor(50, kCharacterAbbot, 1, 0, 0);
-
- if (msg->param.intParam == 50) {
- getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 5;
- AbbotCall(&LogicManager::CONS_Abbot_DoDialog, getCathWCDialog(), 0, 0, 0);
- } else {
- getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 6;
- AbbotCall(&LogicManager::CONS_Abbot_DoDialog, getCathSorryDialog(), 0, 0, 0);
- }
- } else {
- setDoor(34, kCharacterAbbot, 1, 0, 0);
- setDoor(50, kCharacterAbbot, 1, 0, 0);
-
- if (msg->action == 8) {
- getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
- AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "LIB012", 0, 0, 0);
- } else {
- getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
- AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "LIB013", 0, 0, 0);
- }
- }
- } else if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterAbbot)[0] && getCharacterCurrentParams(kCharacterAbbot)[3] != 0x7FFFFFFF && _gameTime) {
if (_gameTime > 2452500) {
getCharacterCurrentParams(kCharacterAbbot)[3] = 0x7FFFFFFF;
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb4002", 0, 0, 0);
- return;
+ break;
}
if (!nearChar(kCharacterAbbot, kCharacterCath, 1000) || whoRunningDialog(kCharacterMonsieur) || !getCharacterCurrentParams(kCharacterAbbot)[3]) {
@@ -1828,7 +1954,7 @@ void LogicManager::HAND_Abbot_InComp(HAND_PARAMS) {
if (!_gameTime) {
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb4002", 0, 0, 0);
- return;
+ break;
}
}
@@ -1836,20 +1962,20 @@ void LogicManager::HAND_Abbot_InComp(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterAbbot)[3] = 0x7FFFFFFF;
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb4002", 0, 0, 0);
- return;
+ break;
}
}
if (_gameTime > 2466000 && !getCharacterCurrentParams(kCharacterAbbot)[4]) {
getCharacterCurrentParams(kCharacterAbbot)[4] = 1;
CONS_Abbot_Asleep4(0, 0, 0, 0);
- return;
+ break;
}
if (getCharacterCurrentParams(kCharacterAbbot)[2]) {
if (getCharacterCurrentParams(kCharacterAbbot)[5] || (getCharacterCurrentParams(kCharacterAbbot)[5] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
if (getCharacterCurrentParams(kCharacterAbbot)[5] >= _currentGameSessionTicks)
- return;
+ break;
getCharacterCurrentParams(kCharacterAbbot)[5] = 0x7FFFFFFF;
}
@@ -1864,6 +1990,105 @@ void LogicManager::HAND_Abbot_InComp(HAND_PARAMS) {
} else {
getCharacterCurrentParams(kCharacterAbbot)[5] = 0;
}
+
+ break;
+ case 8:
+ case 9:
+ if (getCharacterCurrentParams(kCharacterAbbot)[2]) {
+ setDoor(34, kCharacterAbbot, 1, 0, 0);
+ setDoor(50, kCharacterAbbot, 1, 0, 0);
+
+ if (msg->param.intParam == 50) {
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 5;
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, getCathWCDialog(), 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 6;
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, getCathSorryDialog(), 0, 0, 0);
+ }
+ } else {
+ setDoor(34, kCharacterAbbot, 1, 0, 0);
+ setDoor(50, kCharacterAbbot, 1, 0, 0);
+
+ if (msg->action == 8) {
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "LIB012", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "LIB013", 0, 0, 0);
+ }
+ }
+
+ break;
+ case 12:
+ setDoor(34, kCharacterAbbot, 1, 10, 9);
+ setDoor(50, kCharacterAbbot, 1, 10, 9);
+ break;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterAbbot)[1] || getCharacterCurrentParams(kCharacterAbbot)[2]) {
+ setDoor(34, kCharacterAbbot, 1, 10, 9);
+ setDoor(50, kCharacterAbbot, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterAbbot)[1] = 0;
+ getCharacterCurrentParams(kCharacterAbbot)[2] = 0;
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
+ case 1:
+ if (_gameTime > 2466000 && !getCharacterCurrentParams(kCharacterAbbot)[4]) {
+ getCharacterCurrentParams(kCharacterAbbot)[4] = 1;
+ CONS_Abbot_Asleep4(0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterCurrentParams(kCharacterAbbot)[2]) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[5] || (getCharacterCurrentParams(kCharacterAbbot)[5] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[5] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterAbbot)[5] = 0x7FFFFFFF;
+ }
+
+ getCharacterCurrentParams(kCharacterAbbot)[2] = 0;
+ getCharacterCurrentParams(kCharacterAbbot)[1] = 1;
+
+ setDoor(34, kCharacterAbbot, 1, 0, 0);
+ setDoor(50, kCharacterAbbot, 1, 0, 0);
+
+ getCharacterCurrentParams(kCharacterAbbot)[5] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterAbbot)[5] = 0;
+ }
+
+ break;
+ case 2:
+ case 3:
+ getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 4;
+ AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb3001", 0, 0, 0);
+ break;
+ case 4:
+ setDoor(34, kCharacterAbbot, 1, 14, 0);
+ setDoor(50, kCharacterAbbot, 1, 14, 0);
+ getCharacterCurrentParams(kCharacterAbbot)[2] = 1;
+ break;
+ case 5:
+ case 6:
+ getCharacterCurrentParams(kCharacterAbbot)[2] = 0;
+ getCharacterCurrentParams(kCharacterAbbot)[1] = 1;
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 101687594:
+ getCharacterCurrentParams(kCharacterAbbot)[0] = 1;
+ break;
+ case 159003408:
+ getCharacterCurrentParams(kCharacterAbbot)[0] = 0;
+ break;
+ default:
+ break;
}
}
@@ -1878,8 +2103,8 @@ void LogicManager::CONS_Abbot_Asleep4(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_Asleep4(HAND_PARAMS) {
-
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAbbot).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterAbbot).characterPosition.position = 6470;
getCharacter(kCharacterAbbot).characterPosition.location = 1;
@@ -1888,8 +2113,12 @@ void LogicManager::HAND_Abbot_Asleep4(HAND_PARAMS) {
setDoor(34, kCharacterCath, 1, 10, 9);
setDoor(50, kCharacterCath, 1, 10, 9);
- } else if (msg->action == 104060776) {
+ break;
+ case 104060776:
CONS_Abbot_Conferring(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1904,7 +2133,8 @@ void LogicManager::CONS_Abbot_Conferring(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_Conferring(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAbbot).characterPosition.position = 6471;
getCharacter(kCharacterAbbot).characterPosition.location = 0;
getCharacter(kCharacterAbbot).characterPosition.car = kCarRedSleeping;
@@ -1916,7 +2146,8 @@ void LogicManager::HAND_Abbot_Conferring(HAND_PARAMS) {
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
AbbotCall(&LogicManager::CONS_Abbot_DoDialog, "Abb4010", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 1) {
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
AbbotCall(&LogicManager::CONS_Abbot_DoCorrOtis, "617Kc", 34, 0, 0);
@@ -1926,6 +2157,10 @@ void LogicManager::HAND_Abbot_Conferring(HAND_PARAMS) {
CONS_Abbot_GoSalon4(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -1940,14 +2175,20 @@ void LogicManager::CONS_Abbot_GoSalon4(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_GoSalon4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAbbot).characterPosition.position = 6471;
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
AbbotCall(&LogicManager::CONS_Abbot_DoWalkSearchingForCath, 5, 850, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 1) {
CONS_Abbot_BeforeBomb(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -1965,7 +2206,7 @@ void LogicManager::HAND_Abbot_BeforeBomb(HAND_PARAMS) {
switch (msg->action) {
case 1:
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 3;
- AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, 114, 0, 0);
+ AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, kEventAbbotDrinkGiveDetonator, 0, 0);
break;
case 12:
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
@@ -1988,8 +2229,12 @@ void LogicManager::HAND_Abbot_BeforeBomb(HAND_PARAMS) {
playNIS(kEventAbbotDrinkGiveDetonator);
endGame(0, 1, 0, true);
break;
+ default:
+ break;
}
+ break;
+ default:
break;
}
}
@@ -2017,7 +2262,7 @@ void LogicManager::HAND_Abbot_AfterBomb(HAND_PARAMS) {
getCharacter(kCharacterAbbot).inventoryItem = 0;
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 4;
AbbotCall(&LogicManager::CONS_Abbot_DoBlockSeqOtis, "126C", 5, 52, 0);
- return;
+ break;
}
}
@@ -2037,7 +2282,7 @@ void LogicManager::HAND_Abbot_AfterBomb(HAND_PARAMS) {
case 1:
getCharacter(kCharacterAbbot).inventoryItem = 0;
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 9;
- AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, 117, 0, 0);
+ AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, kEventAbbotDrinkDefuse, 0, 0);
break;
case 12:
getCharacter(kCharacterAbbot).characterPosition.position = 850;
@@ -2124,25 +2369,29 @@ void LogicManager::CONS_Abbot_CatchCath(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_CatchCath(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterAbbot)[0] || (getCharacterCurrentParams(kCharacterAbbot)[0] = _currentGameSessionTicks + 150, _currentGameSessionTicks != -150)) {
if (getCharacterCurrentParams(kCharacterAbbot)[0] >= _currentGameSessionTicks)
- return;
+ break;
getCharacterCurrentParams(kCharacterAbbot)[0] = 0x7FFFFFFF;
}
send(kCharacterAbbot, kCharacterAbbot, 157489665, 0);
- } else if (msg->action == 8) {
+ case 8:
if (!cathRunningDialog("LIB012"))
playDialog(0, "LIB012", -1, 0);
- } else if (msg->action == 9) {
+
+ break;
+ case 9:
send(kCharacterAbbot, kCharacterTatiana, 238790488, 0);
setDoor(2, kCharacterCath, 0, 10, 9);
setDoor(18, kCharacterCath, 0, 10, 9);
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
- AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, 111, 0, 0);
- } else if (msg->action == 12) {
+ AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, kEventAbbotWrongCompartment, 0, 0);
+ break;
+ case 12:
getCharacter(kCharacterAbbot).characterPosition.car = kCarGreenSleeping;
getCharacter(kCharacterAbbot).characterPosition.position = 7500;
getCharacter(kCharacterAbbot).characterPosition.location = 1;
@@ -2151,7 +2400,8 @@ void LogicManager::HAND_Abbot_CatchCath(HAND_PARAMS) {
send(kCharacterAbbot, kCharacterMonsieur, 125039808, 0);
setDoor(2, kCharacterAbbot, 1, 10, 9);
setDoor(18, kCharacterAbbot, 1, 10, 9);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
case 1:
if (getModel(2) == 1) {
@@ -2160,7 +2410,7 @@ void LogicManager::HAND_Abbot_CatchCath(HAND_PARAMS) {
playNIS(kEventAbbotWrongCompartment);
}
- walk(kCharacterAbbot, kCarRedSleeping, 6470u);
+ walk(kCharacterAbbot, kCarRedSleeping, 6470);
playDialog(0, "LIB015", -1, 0);
bumpCathFDoor(2);
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
@@ -2176,13 +2426,20 @@ void LogicManager::HAND_Abbot_CatchCath(HAND_PARAMS) {
setDoor(34, kCharacterAbbot, 1, 10, 9);
CONS_Abbot_InComp(0, 0, 0, 0);
break;
+ default:
+ break;
}
- } else if (msg->action == 157489665) {
+
+ break;
+ case 157489665:
send(kCharacterAbbot, kCharacterTatiana, 238790488, 0);
setDoor(2, kCharacterCath, 0, 10, 9);
setDoor(18, kCharacterCath, 0, 10, 9);
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
- AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, 111, 0, 0);
+ AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, kEventAbbotWrongCompartment, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -2197,9 +2454,11 @@ void LogicManager::CONS_Abbot_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_StartPart5(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_Abbot_Prisoner(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
endGraphics(kCharacterAbbot);
getCharacter(kCharacterAbbot).characterPosition.location = 1;
@@ -2207,6 +2466,9 @@ void LogicManager::HAND_Abbot_StartPart5(HAND_PARAMS) {
getCharacter(kCharacterAbbot).characterPosition.car = kCarRestaurant;
getCharacter(kCharacterAbbot).inventoryItem = 0;
getCharacter(kCharacterAbbot).clothes = 0;
+ break;
+ default:
+ break;
}
}
@@ -2221,8 +2483,13 @@ void LogicManager::CONS_Abbot_Prisoner(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_Prisoner(HAND_PARAMS) {
- if (msg->action == 70549068)
+ switch (msg->action) {
+ case 70549068:
CONS_Abbot_Free(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Abbot_Free(CONS_PARAMS) {
@@ -2236,13 +2503,18 @@ void LogicManager::CONS_Abbot_Free(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_Free(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterAbbot);
getCharacter(kCharacterAbbot).characterPosition.car = kCarNone;
getCharacter(kCharacterAbbot).characterPosition.position = 0;
getCharacter(kCharacterAbbot).characterPosition.location = 0;
- } else if (msg->action == 135600432) {
+ break;
+ case 135600432:
CONS_Abbot_RunningTrain(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -2257,10 +2529,12 @@ void LogicManager::CONS_Abbot_RunningTrain(CONS_PARAMS) {
}
void LogicManager::HAND_Abbot_RunningTrain(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
dropItem(kItem25, 1);
send(kCharacterAbbot, kCharacterAnna, 158480160, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] == 1) {
playNIS(kEventLocomotiveAbbotGetSomeRest);
cleanNIS();
@@ -2268,17 +2542,23 @@ void LogicManager::HAND_Abbot_RunningTrain(HAND_PARAMS) {
playNIS(kEventLocomotiveAbbotShoveling);
cleanNIS();
}
- } else if (msg->action == 168646401) {
+
+ break;
+ case 168646401:
if (!_gameEvents[kEventLocomotiveAbbotGetSomeRest]) {
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
- AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, 194, 0, 0);
+ AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, kEventLocomotiveAbbotGetSomeRest, 0, 0);
} else if (!_gameEvents[kEventLocomotiveAbbotShoveling]) {
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
- AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, 195, 0, 0);
+ AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, kEventLocomotiveAbbotShoveling, 0, 0);
} else {
playNIS(kEventLocomotiveAbbotShoveling);
cleanNIS();
}
+
+ break;
+ default:
+ break;
}
}
Commit: 1361402186cb5a86982a9b3310b823fe70e6a93b
https://github.com/scummvm/scummvm/commit/1361402186cb5a86982a9b3310b823fe70e6a93b
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Alexei logic
Changed paths:
engines/lastexpress/characters/alexei.cpp
diff --git a/engines/lastexpress/characters/alexei.cpp b/engines/lastexpress/characters/alexei.cpp
index acde40960d4..8f45bd11f1d 100644
--- a/engines/lastexpress/characters/alexei.cpp
+++ b/engines/lastexpress/characters/alexei.cpp
@@ -70,18 +70,24 @@ void LogicManager::CONS_Alexei_DebugWalks(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_DebugWalks(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterAlexei).characterPosition.position = 0;
- getCharacter(kCharacterAlexei).characterPosition.location = 0;
- getCharacter(kCharacterAlexei).characterPosition.car = kCarGreenSleeping;
- getCharacterCurrentParams(kCharacterAlexei)[0] = 10000;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterAlexei, kCarGreenSleeping, getCharacterCurrentParams(kCharacterAlexei)[0])) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[0] == 10000)
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 0;
+ else
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 10000;
}
- } else if (walk(kCharacterAlexei, kCarGreenSleeping, getCharacterCurrentParams(kCharacterAlexei)[0])) {
- if (getCharacterCurrentParams(kCharacterAlexei)[0] == 10000)
- getCharacterCurrentParams(kCharacterAlexei)[0] = 0;
- else
- getCharacterCurrentParams(kCharacterAlexei)[0] = 10000;
+
+ break;
+ case 12:
+ getCharacter(kCharacterAlexei).characterPosition.position = 0;
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ getCharacter(kCharacterAlexei).characterPosition.car = kCarGreenSleeping;
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 10000;
+ break;
+ default:
+ break;
}
}
@@ -98,12 +104,17 @@ void LogicManager::CONS_Alexei_DoDialog(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_DoDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterAlexei).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterAlexei, (char *)&getCharacterCurrentParams(kCharacterAlexei)[0], -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -120,11 +131,12 @@ void LogicManager::CONS_Alexei_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_DoWait(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterAlexei)[1] ||
(getCharacterCurrentParams(kCharacterAlexei)[1] = _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0], _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterAlexei)[1] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterAlexei)[1] = 0x7FFFFFFF;
}
@@ -132,6 +144,9 @@ void LogicManager::HAND_Alexei_DoWait(HAND_PARAMS) {
getCharacter(kCharacterAlexei).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -148,12 +163,17 @@ void LogicManager::CONS_Alexei_DoSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_DoSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
getCharacter(kCharacterAlexei).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterAlexei, (char *)&getCharacterCurrentParams(kCharacterAlexei)[0]);
+ break;
+ default:
+ break;
}
}
@@ -173,15 +193,20 @@ void LogicManager::CONS_Alexei_DoBlockSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_DoBlockSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseView(kCharacterAlexei, getCharacterCurrentParams(kCharacterAlexei)[3], getCharacterCurrentParams(kCharacterAlexei)[4]);
getCharacter(kCharacterAlexei).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterAlexei, (char *)&getCharacterCurrentParams(kCharacterAlexei)[0]);
blockView(kCharacterAlexei, getCharacterCurrentParams(kCharacterAlexei)[3], getCharacterCurrentParams(kCharacterAlexei)[4]);
+ break;
+ default:
+ break;
}
}
@@ -200,15 +225,20 @@ void LogicManager::CONS_Alexei_DoCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_DoCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterAlexei, getCharacterCurrentParams(kCharacterAlexei)[3]);
getCharacter(kCharacterAlexei).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterAlexei, (char *)&getCharacterCurrentParams(kCharacterAlexei)[0]);
blockAtDoor(kCharacterAlexei, getCharacterCurrentParams(kCharacterAlexei)[3]);
+ break;
+ default:
+ break;
}
}
@@ -223,16 +253,22 @@ void LogicManager::CONS_Alexei_FinishSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_FinishSeqOtis(HAND_PARAMS) {
- if (msg->action == 0) {
- if (getCharacter(kCharacterAlexei).direction == 4)
- return;
- goto LABEL_5;
- }
- if (msg->action == 3) {
- LABEL_5:
+ switch (msg->action) {
+ case 0:
+ if (getCharacter(kCharacterAlexei).direction != 4) {
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ }
+
+ break;
+ case 3:
getCharacter(kCharacterAlexei).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -268,10 +304,13 @@ void LogicManager::HAND_Alexei_DoJoinedSeqOtis(HAND_PARAMS) {
fedEx(kCharacterAlexei, getCharacterCurrentParams(kCharacterAlexei)[3], getCharacterCurrentParams(kCharacterAlexei)[4], (char *)&getCharacterCurrentParams(kCharacterAlexei)[5]);
getCharacterCurrentParams(kCharacterAlexei)[8] = 1;
}
+
break;
case 12:
startSeqOtis(kCharacterAlexei, (char *)&getCharacterCurrentParams(kCharacterAlexei)[0]);
break;
+ default:
+ break;
}
}
@@ -289,22 +328,25 @@ void LogicManager::CONS_Alexei_SaveGame(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_SaveGame(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- save(
- kCharacterAlexei,
- getCharacterCurrentParams(kCharacterAlexei)[0],
- getCharacterCurrentParams(kCharacterAlexei)[1]
- );
+ switch (msg->action) {
+ case 0:
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ break;
+ case 12:
+ save(
+ kCharacterAlexei,
+ getCharacterCurrentParams(kCharacterAlexei)[0],
+ getCharacterCurrentParams(kCharacterAlexei)[1]
+ );
- getCharacter(kCharacterAlexei).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
- fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
- }
- } else {
getCharacter(kCharacterAlexei).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -324,12 +366,20 @@ void LogicManager::CONS_Alexei_DoWalk(CONS_PARAMS) {
void LogicManager::HAND_Alexei_DoWalk(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (walk(kCharacterAlexei, getCharacterCurrentParams(kCharacterAlexei)[0], getCharacterCurrentParams(kCharacterAlexei)[1]))
- goto LABEL_16;
+ case 12:
+ if (walk(kCharacterAlexei, getCharacterCurrentParams(kCharacterAlexei)[0], getCharacterCurrentParams(kCharacterAlexei)[1])) {
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ }
+
break;
case 5:
- if (checkCathDir(kCarGreenSleeping, 18) || checkCathDir(kCarRedSleeping, 18))
- goto LABEL_14;
+ if (checkCathDir(kCarGreenSleeping, 18) || checkCathDir(kCarRedSleeping, 18)) {
+ playChrExcuseMe(kCharacterAlexei, kCharacterCath, 0);
+ break;
+ }
+
if (_gameEvents[kEventAlexeiSalonVassili] || _gameEvents[kEventTatianaAskMatchSpeakRussian] && cathHasItem(kItemPassengerList)) {
if (rnd(2) == 0) {
playDialog(kCharacterCath, "CAT1012A", -1, 0);
@@ -339,22 +389,13 @@ void LogicManager::HAND_Alexei_DoWalk(HAND_PARAMS) {
} else {
playCathExcuseMe();
}
+
break;
case 6:
- LABEL_14:
playChrExcuseMe(kCharacterAlexei, kCharacterCath, 0);
break;
- case 12:
- getCharacter(kCharacterAlexei).inventoryItem = 0;
- if (walk(kCharacterAlexei, getCharacterCurrentParams(kCharacterAlexei)[0], getCharacterCurrentParams(kCharacterAlexei)[1])) {
- LABEL_16:
- getCharacter(kCharacterAlexei).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
- fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
- }
- break;
default:
- return;
+ break;
}
}
@@ -369,13 +410,18 @@ void LogicManager::CONS_Alexei_DoComplexSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_DoComplexSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
getCharacter(kCharacterAlexei).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterAlexei, (char *)&getCharacterCurrentParams(kCharacterAlexei)[0]);
startSeqOtis(getCharacterCurrentParams(kCharacterAlexei)[6], (char *)&getCharacterCurrentParams(kCharacterAlexei)[3]);
+ break;
+ default:
+ break;
}
}
@@ -390,16 +436,18 @@ void LogicManager::CONS_Alexei_WaitRCClear(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_WaitRCClear(HAND_PARAMS) {
- if (msg->action == 0) {
- if (!rcClear())
- return;
- goto LABEL_7;
- }
- if (msg->action == 12 && rcClear()) {
- LABEL_7:
- getCharacter(kCharacterAlexei).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
- fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ switch (msg->action) {
+ case 0:
+ case 12:
+ if (rcClear()) {
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -440,11 +488,14 @@ void LogicManager::HAND_Alexei_EnterComp(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
}
+
break;
case 135664192:
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
AlexeiCall(&LogicManager::CONS_Alexei_DoCorrOtis, "602Eb", 2, 0, 0);
break;
+ default:
+ break;
}
}
@@ -471,6 +522,7 @@ void LogicManager::HAND_Alexei_ExitComp(HAND_PARAMS) {
startCycOtis(kCharacterAlexei, "602DB");
softBlockAtDoor(kCharacterAlexei, 2);
}
+
break;
case 135664192:
setDoor(2, 0, 1, 10, 9);
@@ -480,6 +532,8 @@ void LogicManager::HAND_Alexei_ExitComp(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
break;
+ default:
+ break;
}
}
@@ -494,40 +548,49 @@ void LogicManager::CONS_Alexei_PacingAtWindow(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_PacingAtWindow(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacterCurrentParams(kCharacterAlexei)[0] = 5 * (3 * rnd(60) + 90);
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
- AlexeiCall(&LogicManager::CONS_Alexei_WaitRCClear, 0, 0, 0, 0);
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
- case 1:
+ switch (msg->action) {
+ case 0:
+ if (!getCharacterCurrentParams(kCharacterAlexei)[1] && (getCharacterCurrentParams(kCharacterAlexei)[1] = _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0], _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0] == 0) ||
+ getCharacterCurrentParams(kCharacterAlexei)[1] < _gameTime) {
+ if (rcClear()) {
getCharacter(kCharacterAlexei).characterPosition.location = 0;
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
- AlexeiCall(&LogicManager::CONS_Alexei_DoBlockSeqOtis, "103C", 5, 0x34, 0);
- break;
- case 2:
- getCharacter(kCharacterAlexei).characterPosition.location = 1;
- startCycOtis(kCharacterAlexei, "103E");
- break;
- case 3:
- getCharacter(kCharacterAlexei).characterPosition.location = 1;
- startCycOtis(kCharacterAlexei, "103B");
-
- getCharacter(kCharacterAlexei).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
- fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
- break;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoBlockSeqOtis, "103D", 5, 52, 0);
}
}
- } else if (!getCharacterCurrentParams(kCharacterAlexei)[1] &&
- (getCharacterCurrentParams(kCharacterAlexei)[1] = _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0], _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0] == 0) ||
- getCharacterCurrentParams(kCharacterAlexei)[1] < _gameTime) {
- if (rcClear()) {
+
+ break;
+ case 12:
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 5 * (3 * rnd(60) + 90);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
+ case 1:
getCharacter(kCharacterAlexei).characterPosition.location = 0;
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
- AlexeiCall(&LogicManager::CONS_Alexei_DoBlockSeqOtis, "103D", 5, 52, 0);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoBlockSeqOtis, "103C", 5, 52, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ startCycOtis(kCharacterAlexei, "103E");
+ break;
+ case 3:
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ startCycOtis(kCharacterAlexei, "103B");
+
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -546,81 +609,42 @@ void LogicManager::CONS_Alexei_CompLogic(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_CompLogic(HAND_PARAMS) {
- if (msg->action > 9) {
- if (msg->action > 17) {
- switch (msg->action) {
- case 18:
- switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
- case 1:
- case 2:
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
- AlexeiCall(&LogicManager::CONS_Alexei_DoDialog, "ALX1134A", 0, 0, 0);
- break;
- case 3:
- setDoor(2, 12, 1, 14, 0);
- setDoor(18, 12, 1, 14, 0);
- getCharacterCurrentParams(kCharacterAlexei)[4] = 1;
- break;
- case 4:
- case 5:
- case 6:
- getCharacterCurrentParams(kCharacterAlexei)[4] = 0;
- getCharacterCurrentParams(kCharacterAlexei)[5] = 1;
- break;
- case 7:
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 8;
- AlexeiCall(&LogicManager::CONS_Alexei_DoWait, 0x12C, 0, 0, 0);
- break;
- case 8:
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 9;
- AlexeiCall(&LogicManager::CONS_Alexei_DoCorrOtis, "602Gb", 2, 0, 0);
- break;
- case 9:
- getCharacter(kCharacterAlexei).characterPosition.location = 0;
- send(kCharacterAlexei, kCharacterCond1, 156567128, 0);
- startCycOtis(kCharacterAlexei, "602Hb");
- softBlockAtDoor(kCharacterAlexei, 2);
- break;
- case 10:
- softReleaseAtDoor(kCharacterAlexei, 2);
- getCharacter(kCharacterAlexei).characterPosition.location = 1;
- getCharacter(kCharacterAlexei).characterPosition.position = 7500;
- startCycOtis(kCharacterAlexei, (char *)&getCharacterCurrentParams(kCharacterAlexei)[1]);
- setDoor(2, 12, 1, 10, 9);
- setDoor(18, 12, 1, 10, 9);
- getCharacterCurrentParams(kCharacterAlexei)[6] = 0;
- break;
- default:
- return;
+ switch (msg->action) {
+ case 0:
+ if (!getCharacterCurrentParams(kCharacterAlexei)[6] && getCharacterCurrentParams(kCharacterAlexei)[0] < _gameTime && !getCharacterCurrentParams(kCharacterAlexei)[7]) {
+ getCharacterCurrentParams(kCharacterAlexei)[7] = 1;
+ setDoor(2, kCharacterCath, 1, 10, 9);
+ setDoor(18, kCharacterCath, 1, 10, 9);
+
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ } else {
+ if (getCharacterCurrentParams(kCharacterAlexei)[4]) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[8] || (getCharacterCurrentParams(kCharacterAlexei)[8] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[8] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterAlexei)[8] = 0x7FFFFFFF;
}
- break;
- case 124697504:
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 10;
- AlexeiCall(&LogicManager::CONS_Alexei_DoCorrOtis, "602Ib", 2, 0, 0);
- break;
- case 221617184:
- getCharacterCurrentParams(kCharacterAlexei)[6] = 1;
- send(kCharacterAlexei, kCharacterCond1, 100906246, 0);
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 7;
- AlexeiCall(&LogicManager::CONS_Alexei_DoDialog, "CON1024", 0, 0, 0);
- break;
- }
- } else if (msg->action == 17) {
- if (getCharacterCurrentParams(kCharacterAlexei)[5] || getCharacterCurrentParams(kCharacterAlexei)[4]) {
- setDoor(2, 12, 1, 10, 9);
- setDoor(18, 12, 1, 10, 9);
- getCharacterCurrentParams(kCharacterAlexei)[5] = 0;
+
getCharacterCurrentParams(kCharacterAlexei)[4] = 0;
+ getCharacterCurrentParams(kCharacterAlexei)[5] = 1;
+ setDoor(2, kCharacterAlexei, 1, 0, 0);
+ setDoor(18, kCharacterAlexei, 1, 0, 0);
+ getCharacterCurrentParams(kCharacterAlexei)[8] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterAlexei)[8] = 0;
}
- } else if (msg->action == 12) {
- startCycOtis(kCharacterAlexei, (char *)&getCharacterCurrentParams(kCharacterAlexei)[1]);
- setDoor(2, 12, 1, 10, 9);
- setDoor(18, 12, 1, 10, 9);
}
- } else if (msg->action >= 8) {
+
+ break;
+ case 8:
+ case 9:
if (getCharacterCurrentParams(kCharacterAlexei)[4]) {
- setDoor(2, 12, 1, 0, 0);
- setDoor(18, 12, 1, 0, 0);
+ setDoor(2, kCharacterAlexei, 1, 0, 0);
+ setDoor(18, kCharacterAlexei, 1, 0, 0);
+
if (msg->param.intParam == 18) {
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 4;
AlexeiCall(&LogicManager::CONS_Alexei_DoDialog, getCathWCDialog(), 0, 0, 0);
@@ -631,14 +655,15 @@ void LogicManager::HAND_Alexei_CompLogic(HAND_PARAMS) {
AlexeiCall(&LogicManager::CONS_Alexei_DoDialog, getCathSorryDialog(), 0, 0, 0);
} else {
AlexeiCall(&LogicManager::CONS_Alexei_DoDialog, "CAT1503", 0, 0, 0);
- }
+ }
} else {
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 6;
AlexeiCall(&LogicManager::CONS_Alexei_DoDialog, getCathSorryDialog(), 0, 0, 0);
}
} else {
- setDoor(2, 12, 1, 0, 0);
- setDoor(18, 12, 1, 0, 0);
+ setDoor(2, kCharacterAlexei, 1, 0, 0);
+ setDoor(18, kCharacterAlexei, 1, 0, 0);
+
if (msg->action == 8) {
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
AlexeiCall(&LogicManager::CONS_Alexei_DoDialog, "LIB012", 0, 0, 0);
@@ -647,31 +672,80 @@ void LogicManager::HAND_Alexei_CompLogic(HAND_PARAMS) {
AlexeiCall(&LogicManager::CONS_Alexei_DoDialog, "LIB013", 0, 0, 0);
}
}
- } else if (msg->action == 0) {
- if (!getCharacterCurrentParams(kCharacterAlexei)[6] && getCharacterCurrentParams(kCharacterAlexei)[0] < _gameTime && !getCharacterCurrentParams(kCharacterAlexei)[7]) {
- getCharacterCurrentParams(kCharacterAlexei)[7] = 1;
- setDoor(2, 0, 1, 10, 9);
- setDoor(18, 0, 1, 10, 9);
- getCharacter(kCharacterAlexei).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
- fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
- return;
+ break;
+ case 12:
+ startCycOtis(kCharacterAlexei, (char *)&getCharacterCurrentParams(kCharacterAlexei)[1]);
+ setDoor(2, kCharacterAlexei, 1, 10, 9);
+ setDoor(18, kCharacterAlexei, 1, 10, 9);
+ break;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterAlexei)[5] || getCharacterCurrentParams(kCharacterAlexei)[4]) {
+ setDoor(2, 12, 1, 10, 9);
+ setDoor(18, 12, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterAlexei)[5] = 0;
+ getCharacterCurrentParams(kCharacterAlexei)[4] = 0;
}
- if (getCharacterCurrentParams(kCharacterAlexei)[4]) {
- if (getCharacterCurrentParams(kCharacterAlexei)[8] || (getCharacterCurrentParams(kCharacterAlexei)[8] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterAlexei)[8] >= _currentGameSessionTicks)
- return;
- getCharacterCurrentParams(kCharacterAlexei)[8] = 0x7FFFFFFF;
- }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
+ case 1:
+ case 2:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoDialog, "ALX1134A", 0, 0, 0);
+ break;
+ case 3:
+ setDoor(2, kCharacterAlexei, 1, 14, 0);
+ setDoor(18, kCharacterAlexei, 1, 14, 0);
+ getCharacterCurrentParams(kCharacterAlexei)[4] = 1;
+ break;
+ case 4:
+ case 5:
+ case 6:
getCharacterCurrentParams(kCharacterAlexei)[4] = 0;
getCharacterCurrentParams(kCharacterAlexei)[5] = 1;
- setDoor(2, 12, 1, 0, 0);
- setDoor(18, 12, 1, 0, 0);
- getCharacterCurrentParams(kCharacterAlexei)[8] = 0;
- } else {
- getCharacterCurrentParams(kCharacterAlexei)[8] = 0;
+ break;
+ case 7:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 8;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoWait, 0x12C, 0, 0, 0);
+ break;
+ case 8:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 9;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoCorrOtis, "602Gb", 2, 0, 0);
+ break;
+ case 9:
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ send(kCharacterAlexei, kCharacterCond1, 156567128, 0);
+ startCycOtis(kCharacterAlexei, "602Hb");
+ softBlockAtDoor(kCharacterAlexei, 2);
+ break;
+ case 10:
+ softReleaseAtDoor(kCharacterAlexei, 2);
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ getCharacter(kCharacterAlexei).characterPosition.position = 7500;
+ startCycOtis(kCharacterAlexei, (char *)&getCharacterCurrentParams(kCharacterAlexei)[1]);
+ setDoor(2, kCharacterAlexei, 1, 10, 9);
+ setDoor(18, kCharacterAlexei, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterAlexei)[6] = 0;
+ break;
+ default:
+ break;
}
+
+ break;
+ case 124697504:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 10;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoCorrOtis, "602Ib", 2, 0, 0);
+ break;
+ case 221617184:
+ getCharacterCurrentParams(kCharacterAlexei)[6] = 1;
+ send(kCharacterAlexei, kCharacterCond1, 100906246, 0);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 7;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoDialog, "CON1024", 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -686,18 +760,24 @@ void LogicManager::CONS_Alexei_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_Birth(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- setDoor(2, 0, 1, 10, 9);
- setDoor(10, 0, 0, 255, 255);
- setDoor(18, 0, 1, 10, 9);
- getCharacter(kCharacterAlexei).characterPosition.position = 3969;
- getCharacter(kCharacterAlexei).characterPosition.location = 1;
- getCharacter(kCharacterAlexei).characterPosition.car = 5;
- }
- } else if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterAlexei)[0]) {
- getCharacterCurrentParams(kCharacterAlexei)[0] = 1;
- CONS_Alexei_AtDinner(0, 0, 0, 0);
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterAlexei)[0]) {
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 1;
+ CONS_Alexei_AtDinner(0, 0, 0, 0);
+ }
+
+ break;
+ case 12:
+ setDoor(2, kCharacterCath, 1, 10, 9);
+ setDoor(10, kCharacterCath, 0, 255, 255);
+ setDoor(18, kCharacterCath, 1, 10, 9);
+ getCharacter(kCharacterAlexei).characterPosition.position = 3969;
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ getCharacter(kCharacterAlexei).characterPosition.car = kCarRestaurant;
+ break;
+ default:
+ break;
}
}
@@ -712,54 +792,8 @@ void LogicManager::CONS_Alexei_AtDinner(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_AtDinner(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action > 168046720) {
- if (msg->action == 168627977) {
- getCharacter(kCharacterAlexei).inventoryItem = getCharacterCurrentParams(kCharacterAlexei)[1];
- } else if (msg->action == 225182640) {
- getCharacter(kCharacterAlexei).inventoryItem = 0;
- }
- } else {
- switch (msg->action) {
- case 168046720:
- getCharacter(kCharacterAlexei).inventoryItem = 0;
- break;
- case 17:
- getCharacterCurrentParams(kCharacterAlexei)[0] = checkCathDir(kCarRestaurant, 63);
- break;
- case 18:
- if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
- releaseView(kCharacterAlexei, kCarRestaurant, 63);
- CONS_Alexei_ReturnComp(0, 0, 0, 0);
- } else if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 2) {
- if (_gameProgress[kProgressJacket] == 2)
- playNIS(kEventAlexeiDiner);
- else
- playNIS(kEventAlexeiDinerOriginalJacket);
- send(kCharacterAlexei, kCharacterTableB, 103798704, "005E");
- getCharacter(kCharacterAlexei).characterPosition.position = 3650;
- getCharacter(kCharacterAlexei).characterPosition.location = 0;
- endGraphics(kCharacterAlexei);
- _gameInventory[kItem17].location = 1;
- bumpCath(kCarRestaurant, 63, 255);
- CONS_Alexei_ReturnComp(0, 0, 0, 0);
- }
- break;
- }
- }
- } else if (msg->action == 12) {
- send(kCharacterAlexei, kCharacterTableB, 136455232, 0);
- startCycOtis(kCharacterAlexei, "005B");
- getCharacterCurrentParams(kCharacterAlexei)[1] = 128;
- getCharacter(kCharacterAlexei).inventoryItem = 0x80;
- } else if (msg->action) {
- if (msg->action == 1) {
- getCharacterCurrentParams(kCharacterAlexei)[1] = 0;
- getCharacter(kCharacterAlexei).inventoryItem = 0;
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
- AlexeiCall(&LogicManager::CONS_Alexei_SaveGame, 2, kEventAlexeiDiner, 0, 0);
- }
- } else {
+ switch (msg->action) {
+ case 0:
if (_gameTime > 1089000 && rcClear()) {
getCharacter(kCharacterAlexei).characterPosition.location = 0;
getCharacterCurrentParams(kCharacterAlexei)[1] = 0;
@@ -768,18 +802,68 @@ void LogicManager::HAND_Alexei_AtDinner(HAND_PARAMS) {
dropItem(kItem17, 1);
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
AlexeiCall(&LogicManager::CONS_Alexei_DoJoinedSeqOtis, "005D", 34, 103798704, "005E");
- return;
- }
- if (getCharacterCurrentParams(kCharacterAlexei)[0]) {
- if (getCharacterCurrentParams(kCharacterAlexei)[2] || (getCharacterCurrentParams(kCharacterAlexei)[2] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
- if (getCharacterCurrentParams(kCharacterAlexei)[2] >= _currentGameSessionTicks)
- return;
- getCharacterCurrentParams(kCharacterAlexei)[2] = 0x7FFFFFFF;
- }
- bumpCath(kCarRestaurant, 61, 255);
} else {
- getCharacterCurrentParams(kCharacterAlexei)[2] = 0;
+ if (getCharacterCurrentParams(kCharacterAlexei)[0]) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[2] || (getCharacterCurrentParams(kCharacterAlexei)[2] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[2] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterAlexei)[2] = 0x7FFFFFFF;
+ }
+
+ bumpCath(kCarRestaurant, 61, 255);
+ } else {
+ getCharacterCurrentParams(kCharacterAlexei)[2] = 0;
+ }
+ }
+
+ break;
+ case 1:
+ getCharacterCurrentParams(kCharacterAlexei)[1] = 0;
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_SaveGame, 2, kEventAlexeiDiner, 0, 0);
+ break;
+ case 12:
+ send(kCharacterAlexei, kCharacterTableB, 136455232, 0);
+ startCycOtis(kCharacterAlexei, "005B");
+ getCharacterCurrentParams(kCharacterAlexei)[1] = 128;
+ getCharacter(kCharacterAlexei).inventoryItem = 0x80;
+ break;
+ case 17:
+ getCharacterCurrentParams(kCharacterAlexei)[0] = checkCathDir(kCarRestaurant, 63);
+ break;
+ case 18:
+ if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
+ releaseView(kCharacterAlexei, kCarRestaurant, 63);
+ CONS_Alexei_ReturnComp(0, 0, 0, 0);
+ } else if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 2) {
+ if (_gameProgress[kProgressJacket] == 2)
+ playNIS(kEventAlexeiDiner);
+ else
+ playNIS(kEventAlexeiDinerOriginalJacket);
+
+ send(kCharacterAlexei, kCharacterTableB, 103798704, "005E");
+ getCharacter(kCharacterAlexei).characterPosition.position = 3650;
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ endGraphics(kCharacterAlexei);
+ _gameInventory[kItem17].location = 1;
+ bumpCath(kCarRestaurant, 63, 255);
+ CONS_Alexei_ReturnComp(0, 0, 0, 0);
}
+
+ break;
+ case 168046720:
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ break;
+ case 168627977:
+ getCharacter(kCharacterAlexei).inventoryItem = getCharacterCurrentParams(kCharacterAlexei)[1];
+ break;
+ case 225182640:
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -794,10 +878,12 @@ void LogicManager::CONS_Alexei_ReturnComp(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_ReturnComp(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
AlexeiCall(&LogicManager::CONS_Alexei_DoSeqOtis, "811DS", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
case 1:
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
@@ -845,6 +931,7 @@ void LogicManager::HAND_Alexei_ReturnComp(HAND_PARAMS) {
case 10:
if (checkCathDir(kCarGreenSleeping, 61))
bumpCath(kCarGreenSleeping, 49, 255);
+
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 11;
AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 1098000, "411", 0, 0);
break;
@@ -852,8 +939,12 @@ void LogicManager::HAND_Alexei_ReturnComp(HAND_PARAMS) {
CONS_Alexei_GoSalon(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -868,10 +959,12 @@ void LogicManager::CONS_Alexei_GoSalon(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_GoSalon(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
AlexeiCall(&LogicManager::CONS_Alexei_ExitComp, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
case 1:
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
@@ -892,8 +985,12 @@ void LogicManager::HAND_Alexei_GoSalon(HAND_PARAMS) {
CONS_Alexei_Sitting(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -918,6 +1015,7 @@ void LogicManager::HAND_Alexei_Sitting(HAND_PARAMS) {
AlexeiCall(&LogicManager::CONS_Alexei_DoBlockSeqOtis, "103C", 5, 52, 0);
}
}
+
break;
case 1:
getCharacter(kCharacterAlexei).inventoryItem = 0;
@@ -927,8 +1025,10 @@ void LogicManager::HAND_Alexei_Sitting(HAND_PARAMS) {
case 12:
startCycOtis(kCharacterAlexei, "103B");
getCharacterCurrentParams(kCharacterAlexei)[0] = 225 * (4 * rnd(3) + 4);
+
if (!_gameEvents[kEventAlexeiSalonPoem])
getCharacter(kCharacterAlexei).inventoryItem = 10;
+
break;
case 18:
switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
@@ -950,10 +1050,13 @@ void LogicManager::HAND_Alexei_Sitting(HAND_PARAMS) {
releaseView(kCharacterAlexei, kCarRestaurant, 52);
getCharacter(kCharacterAlexei).characterPosition.location = 1;
break;
+ default:
+ break;
}
+
break;
default:
- return;
+ break;
}
}
@@ -970,40 +1073,48 @@ void LogicManager::CONS_Alexei_StandingAtWindow(CONS_PARAMS) {
void LogicManager::HAND_Alexei_StandingAtWindow(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (!getCharacterCurrentParams(kCharacterAlexei)[1] &&
- (getCharacterCurrentParams(kCharacterAlexei)[1] = _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0], _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0] == 0) ||
+ if (!getCharacterCurrentParams(kCharacterAlexei)[1] && (getCharacterCurrentParams(kCharacterAlexei)[1] = _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0], _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0] == 0) ||
getCharacterCurrentParams(kCharacterAlexei)[1] < _gameTime) {
if (rcClear()) {
getCharacter(kCharacterAlexei).characterPosition.location = 0;
getCharacter(kCharacterAlexei).inventoryItem = 0;
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
AlexeiCall(&LogicManager::CONS_Alexei_DoBlockSeqOtis, "103D", 5, 52, 0);
- return;
+ break;
}
}
- if (getCharacterCurrentParams(kCharacterAlexei)[2] == 0x7FFFFFFF || _gameTime <= 1111500)
- return;
- if (_gameTime > 1138500)
- goto LABEL_16;
- if ((inSalon(kCharacterCath) || inDiningRoom(kCharacterCath)) && getCharacterCurrentParams(kCharacterAlexei)[2] || (getCharacterCurrentParams(kCharacterAlexei)[2] = _gameTime, _gameTime)) {
- if (getCharacterCurrentParams(kCharacterAlexei)[2] >= _gameTime)
- return;
- LABEL_16:
- getCharacterCurrentParams(kCharacterAlexei)[2] = 0x7FFFFFFF;
+
+ if (getCharacterCurrentParams(kCharacterAlexei)[2] != 0x7FFFFFFF && _gameTime > 1111500) {
+ if (_gameTime > 1138500) {
+ getCharacterCurrentParams(kCharacterAlexei)[2] = 0x7FFFFFFF;
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ CONS_Alexei_WaitingForTat(0, 0, 0, 0);
+ break;
+ }
+
+ if ((inSalon(kCharacterCath) || inDiningRoom(kCharacterCath)) && getCharacterCurrentParams(kCharacterAlexei)[2] || (getCharacterCurrentParams(kCharacterAlexei)[2] = _gameTime, _gameTime)) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[2] >= _gameTime)
+ break;
+
+ getCharacterCurrentParams(kCharacterAlexei)[2] = 0x7FFFFFFF;
+ }
+
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ CONS_Alexei_WaitingForTat(0, 0, 0, 0);
}
- getCharacter(kCharacterAlexei).inventoryItem = 0;
- CONS_Alexei_WaitingForTat(0, 0, 0, 0);
- return;
+
+ break;
case 1:
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
AlexeiCall(&LogicManager::CONS_Alexei_SaveGame, 2, kEventAlexeiSalonPoem, 0, 0);
- return;
+ break;
case 12:
getCharacterCurrentParams(kCharacterAlexei)[0] = 225 * (4 * rnd(4) + 8);
startCycOtis(kCharacterAlexei, "103E");
- if (!_gameEvents[80])
+ if (!_gameEvents[kEventAlexeiSalonPoem])
getCharacter(kCharacterAlexei).inventoryItem = 10;
- return;
+
+ break;
case 18:
switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
case 1:
@@ -1025,10 +1136,13 @@ void LogicManager::HAND_Alexei_StandingAtWindow(HAND_PARAMS) {
getCharacter(kCharacterAlexei).characterPosition.location = 1;
CONS_Alexei_Sitting(0, 0, 0, 0);
break;
+ default:
+ break;
}
- return;
+
+ break;
default:
- return;
+ break;
}
}
@@ -1043,48 +1157,51 @@ void LogicManager::CONS_Alexei_WaitingForTat(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_WaitingForTat(HAND_PARAMS) {
- if (msg->action <= 12) {
- if (msg->action == 12) {
- getCharacter(kCharacterAlexei).characterPosition.location = 1;
- send(kCharacterAlexei, kCharacterTatiana, 124973510, 0);
- } else if (msg->action) {
- if (msg->action == 1) {
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
- AlexeiCall(&LogicManager::CONS_Alexei_SaveGame, 2, kEventAlexeiSalonPoem, 0, 0);
- }
- } else if (!inDiningRoom(kCharacterTatiana) || _gameEvents[kEventAlexeiSalonPoem]) {
+ switch (msg->action) {
+ case 0:
+ if (!inDiningRoom(kCharacterTatiana) || _gameEvents[kEventAlexeiSalonPoem]) {
getCharacter(kCharacterAlexei).inventoryItem = 0;
} else {
getCharacter(kCharacterAlexei).inventoryItem = 10;
}
- return;
- }
- if (msg->action != 18) {
- if (msg->action == 157159392) {
- if (inSalon(kCharacterCath)) {
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
- AlexeiCall(&LogicManager::CONS_Alexei_SaveGame, 2, kEventAlexeiSalonVassili, 0, 0);
- return;
+
+ break;
+ case 1:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_SaveGame, 2, kEventAlexeiSalonPoem, 0, 0);
+ break;
+ case 12:
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ send(kCharacterAlexei, kCharacterTatiana, 124973510, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
+ playNIS(kEventAlexeiSalonVassili);
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ startCycOtis(kCharacterAlexei, "103F");
+ cleanNIS();
+ CONS_Alexei_Upset(0, 0, 0, 0);
+ } else {
+ if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 2) {
+ playNIS(kEventAlexeiSalonPoem);
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ bumpCath(kCarRestaurant, 55, 255);
}
- } else if (msg->action != 188784532) {
- return;
}
- LABEL_24:
- CONS_Alexei_Upset(0, 0, 0, 0);
- return;
- }
- if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
- playNIS(kEventAlexeiSalonVassili);
- getCharacter(kCharacterAlexei).characterPosition.location = 0;
- startCycOtis(kCharacterAlexei, "103F");
- cleanNIS();
- goto LABEL_24;
- }
- if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 2) {
- playNIS(kEventAlexeiSalonPoem);
- getCharacter(kCharacterAlexei).inventoryItem = 0;
- bumpCath(kCarRestaurant, 55, 255);
+ break;
+ case 157159392:
+ if (inSalon(kCharacterCath)) {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_SaveGame, 2, kEventAlexeiSalonVassili, 0, 0);
+ }
+
+ break;
+ case 188784532:
+ CONS_Alexei_Upset(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1099,30 +1216,37 @@ void LogicManager::CONS_Alexei_Upset(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_Upset(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
- playNIS(kEventAlexeiSalonCath);
- getCharacter(kCharacterAlexei).characterPosition.car = 4;
- getCharacter(kCharacterAlexei).characterPosition.position = 9460;
- endGraphics(kCharacterAlexei);
- bumpCath(kCarRestaurant, 55, 255);
- CONS_Alexei_ReturnCompNight(0, 0, 0, 0);
- } else if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 2) {
- CONS_Alexei_ReturnCompNight(0, 0, 0, 0);
- }
- } else if (msg->action == 135854208) {
- getCharacter(kCharacterAlexei).inventoryItem = 0;
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
- AlexeiCall(&LogicManager::CONS_Alexei_DoSeqOtis, "103G", 0, 0, 0);
- }
- } else if (msg->action == 12) {
+ switch (msg->action) {
+ case 1:
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_SaveGame, 2, kEventAlexeiSalonCath, 0, 0);
+ break;
+ case 12:
if (_gameEvents[kEventAlexeiSalonVassili])
getCharacter(kCharacterAlexei).inventoryItem = 0x80;
- } else if (msg->action == 1) {
+
+ break;
+ case 18:
+ if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
+ playNIS(kEventAlexeiSalonCath);
+ getCharacter(kCharacterAlexei).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterAlexei).characterPosition.position = 9460;
+ endGraphics(kCharacterAlexei);
+ bumpCath(kCarRestaurant, 55, 255);
+ CONS_Alexei_ReturnCompNight(0, 0, 0, 0);
+ } else if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 2) {
+ CONS_Alexei_ReturnCompNight(0, 0, 0, 0);
+ }
+
+ break;
+ case 135854208:
getCharacter(kCharacterAlexei).inventoryItem = 0;
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
- AlexeiCall(&LogicManager::CONS_Alexei_SaveGame, 2, 79, 0, 0);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoSeqOtis, "103G", 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1137,14 +1261,17 @@ void LogicManager::CONS_Alexei_ReturnCompNight(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_ReturnCompNight(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
AlexeiCall(&LogicManager::CONS_Alexei_EnterComp, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
case 1:
if (checkCathDir(kCarGreenSleeping, 61))
bumpCath(kCarGreenSleeping, 49, 255);
+
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 1179000, "411", 0, 0);
break;
@@ -1155,7 +1282,13 @@ void LogicManager::HAND_Alexei_ReturnCompNight(HAND_PARAMS) {
case 3:
CONS_Alexei_Asleep(0, 0, 0, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1170,23 +1303,29 @@ void LogicManager::CONS_Alexei_Asleep(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_Asleep(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterAlexei).characterPosition.car = 3;
- getCharacter(kCharacterAlexei).characterPosition.position = 7500;
- getCharacter(kCharacterAlexei).characterPosition.location = 1;
- setDoor(2, 0, 1, 10, 9);
- setDoor(18, 0, 1, 10, 9);
- setDoor(10, 0, 1, 255, 255);
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1512000 && !getCharacterCurrentParams(kCharacterAlexei)[0]) {
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 1;
+ CONS_Alexei_WakeUp(0, 0, 0, 0);
+ }
- if (checkCathDir(kCarGreenSleeping, 61))
- bumpCath(kCarGreenSleeping, 66, 255);
+ break;
+ case 12:
+ getCharacter(kCharacterAlexei).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterAlexei).characterPosition.position = 7500;
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ setDoor(2, kCharacterCath, 1, 10, 9);
+ setDoor(18, kCharacterCath, 1, 10, 9);
+ setDoor(10, kCharacterCath, 1, 255, 255);
- endGraphics(kCharacterAlexei);
- }
- } else if (_gameTime > 1512000 && !getCharacterCurrentParams(kCharacterAlexei)[0]) {
- getCharacterCurrentParams(kCharacterAlexei)[0] = 1;
- CONS_Alexei_WakeUp(0, 0, 0, 0);
+ if (checkCathDir(kCarGreenSleeping, 61))
+ bumpCath(kCarGreenSleeping, 66, 255);
+
+ endGraphics(kCharacterAlexei);
+ break;
+ default:
+ break;
}
}
@@ -1201,11 +1340,17 @@ void LogicManager::CONS_Alexei_WakeUp(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_WakeUp(HAND_PARAMS) {
- if (msg->action == 12) {
- setDoor(10, 0, 0, 255, 255);
+ switch (msg->action) {
+ case 12:
+ setDoor(10, kCharacterCath, 0, 255, 255);
+
if (checkCathDir(kCarGreenSleeping, 66))
bumpCath(kCarGreenSleeping, 49, 255);
+
startCycOtis(kCharacterAlexei, "412");
+ break;
+ default:
+ break;
}
}
@@ -1220,20 +1365,23 @@ void LogicManager::CONS_Alexei_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_StartPart2(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterAlexei);
- getCharacter(kCharacterAlexei).characterPosition.car = 3;
- getCharacter(kCharacterAlexei).characterPosition.position = 7500;
- getCharacter(kCharacterAlexei).characterPosition.location = 1;
- getCharacter(kCharacterAlexei).inventoryItem = 0;
- getCharacter(kCharacterAlexei).clothes = 0;
- setDoor(2, 12, 1, 10, 9);
- setDoor(18, 12, 1, 10, 9);
- setDoor(10, 0, 0, 255, 255);
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Alexei_InComp2(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterAlexei);
+ getCharacter(kCharacterAlexei).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterAlexei).characterPosition.position = 7500;
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ getCharacter(kCharacterAlexei).clothes = 0;
+ setDoor(2, kCharacterAlexei, 1, 10, 9);
+ setDoor(18, kCharacterAlexei, 1, 10, 9);
+ setDoor(10, kCharacterCath, 0, 255, 255);
+ break;
+ default:
+ break;
}
}
@@ -1248,11 +1396,13 @@ void LogicManager::CONS_Alexei_InComp2(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_InComp2(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 1791000, "411", 0, 0);
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
case 1:
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
AlexeiCall(&LogicManager::CONS_Alexei_ExitComp, 0, 0, 0, 0);
@@ -1282,8 +1432,12 @@ void LogicManager::HAND_Alexei_InComp2(HAND_PARAMS) {
CONS_Alexei_AtBreakfast(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1300,7 +1454,7 @@ void LogicManager::CONS_Alexei_AtBreakfast(CONS_PARAMS) {
void LogicManager::HAND_Alexei_AtBreakfast(HAND_PARAMS) {
switch (msg->action) {
case 12:
- setDoor(2, 0, 1, 10, 9);
+ setDoor(2, kCharacterCath, 1, 10, 9);
getCharacter(kCharacterAlexei).characterPosition.car = 5;
getCharacter(kCharacterAlexei).characterPosition.location = 1;
startCycOtis(kCharacterAlexei, "018C");
@@ -1312,8 +1466,10 @@ void LogicManager::HAND_Alexei_AtBreakfast(HAND_PARAMS) {
releaseView(kCharacterAlexei, kCarRestaurant, 63);
send(kCharacterAlexei, kCharacterTatiana, 156444784, 0);
startCycOtis(kCharacterAlexei, "018E");
+
if (inDiningRoom(kCharacterCath))
_gameProgress[kProgressField68] = 1;
+
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
AlexeiCall(&LogicManager::CONS_Alexei_DoDialog, "TAT2116", 0, 0, 0);
break;
@@ -1327,7 +1483,10 @@ void LogicManager::HAND_Alexei_AtBreakfast(HAND_PARAMS) {
releaseView(kCharacterAlexei, kCarRestaurant, 63);
CONS_Alexei_ReturnCompPart2(0, 0, 0, 0);
break;
+ default:
+ break;
}
+
break;
case 236053296:
startSeqOtis(kCharacterAlexei, "018D1");
@@ -1340,6 +1499,8 @@ void LogicManager::HAND_Alexei_AtBreakfast(HAND_PARAMS) {
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
AlexeiCall(&LogicManager::CONS_Alexei_FinishSeqOtis, 0, 0, 0, 0);
break;
+ default:
+ break;
}
}
@@ -1354,22 +1515,31 @@ void LogicManager::CONS_Alexei_ReturnCompPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_ReturnCompPart2(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
startSeqOtis(kCharacterAlexei, "811DS");
+
if (inDiningRoom(kCharacterCath))
advanceFrame(kCharacterAlexei);
+
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
AlexeiCall(&LogicManager::CONS_Alexei_FinishSeqOtis, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
AlexeiCall(&LogicManager::CONS_Alexei_EnterComp, 0, 0, 0, 0);
} else if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 2) {
if (checkCathDir(kCarGreenSleeping, 61))
bumpCath(kCarGreenSleeping, 49, 255);
+
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 15803100, "411", 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -1384,19 +1554,22 @@ void LogicManager::CONS_Alexei_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_StartPart3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterAlexei);
- getCharacter(kCharacterAlexei).characterPosition.car = 5;
- getCharacter(kCharacterAlexei).characterPosition.location = 1;
- getCharacter(kCharacterAlexei).inventoryItem = 0;
- getCharacter(kCharacterAlexei).clothes = 0;
- setDoor(2, 0, 1, 10, 9);
- setDoor(18, 0, 1, 10, 9);
- setDoor(10, 0, 0, 255, 255);
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Alexei_PlayingChess(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterAlexei);
+ getCharacter(kCharacterAlexei).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ getCharacter(kCharacterAlexei).clothes = 0;
+ setDoor(2, kCharacterCath, 1, 10, 9);
+ setDoor(18, kCharacterCath, 1, 10, 9);
+ setDoor(10, kCharacterCath, 0, 255, 255);
+ break;
+ default:
+ break;
}
}
@@ -1415,9 +1588,10 @@ void LogicManager::HAND_Alexei_PlayingChess(HAND_PARAMS) {
case 18:
if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1)
CONS_Alexei_InPart3(0, 0, 0, 0);
+
break;
case 122288808:
- getCharacter(kCharacterAlexei).characterPosition.car = 4;
+ getCharacter(kCharacterAlexei).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterAlexei).characterPosition.location = 0;
getCharacter(kCharacterAlexei).characterPosition.position = 9270;
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
@@ -1426,6 +1600,8 @@ void LogicManager::HAND_Alexei_PlayingChess(HAND_PARAMS) {
case 122358304:
startCycOtis(kCharacterAlexei, "BLANK");
break;
+ default:
+ break;
}
}
@@ -1440,12 +1616,15 @@ void LogicManager::CONS_Alexei_InPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_InPart3(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (checkCathDir(kCarGreenSleeping, 61))
bumpCath(kCarGreenSleeping, 49, 255);
+
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 2083500, "411", 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
case 1:
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
@@ -1474,9 +1653,11 @@ void LogicManager::HAND_Alexei_InPart3(HAND_PARAMS) {
AlexeiCall(&LogicManager::CONS_Alexei_EnterComp, 0, 0, 0, 0);
break;
case 7:
- setDoor(10, 0, 1, 255, 255);
+ setDoor(10, kCharacterCath, 1, 255, 255);
+
if (checkCathDir(kCarGreenSleeping, 61))
bumpCath(kCarGreenSleeping, 66, 255);
+
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 8;
AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 2124000, "NONE", 0, 0);
break;
@@ -1488,16 +1669,22 @@ void LogicManager::HAND_Alexei_InPart3(HAND_PARAMS) {
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 10;
AlexeiCall(&LogicManager::CONS_Alexei_GoSalon3, 0, 0, 0, 0);
break;
- case 0xA:
- setDoor(10, 0, 0, 255, 255);
+ case 10:
+ setDoor(10, kCharacterCath, 0, 255, 255);
+
if (checkCathDir(kCarGreenSleeping, 66))
bumpCath(kCarGreenSleeping, 49, 255);
+
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 11;
AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 16451100, "411", 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1512,43 +1699,13 @@ void LogicManager::CONS_Alexei_Pacing3(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_Pacing3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacterCurrentParams(kCharacterAlexei)[0] = 15 * rnd(120);
- startCycOtis(kCharacterAlexei, "103B");
- getCharacter(kCharacterAlexei).characterPosition.location = 1;
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterAlexei).characterPosition.location = 0;
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
- AlexeiCall(&LogicManager::CONS_Alexei_DoBlockSeqOtis, "124C", 5, 52, 0);
- break;
- case 2:
- case 5:
- getCharacter(kCharacterAlexei).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
- fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
- break;
- case 3:
- getCharacterCurrentParams(kCharacterAlexei)[0] = 15 * rnd(120);
- getCharacterCurrentParams(kCharacterAlexei)[2] = 0;
- goto LABEL_20;
- case 4:
- getCharacter(kCharacterAlexei).characterPosition.location = 0;
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 5;
- AlexeiCall(&LogicManager::CONS_Alexei_DoBlockSeqOtis, "124C", 5, 52, 0);
- break;
- default:
- return;
- }
- }
- } else {
+ switch (msg->action) {
+ case 0:
if (inSalon(kCharacterCath)) {
if (!getCharacterCurrentParams(kCharacterAlexei)[1] && (getCharacterCurrentParams(kCharacterAlexei)[1] = _gameTime + 2700, _gameTime == -2700) || getCharacterCurrentParams(kCharacterAlexei)[1] < _gameTime) {
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
AlexeiCall(&LogicManager::CONS_Alexei_WaitRCClear, 0, 0, 0, 0);
- return;
+ break;
}
} else {
getCharacterCurrentParams(kCharacterAlexei)[1] = 0;
@@ -1557,17 +1714,64 @@ void LogicManager::HAND_Alexei_Pacing3(HAND_PARAMS) {
if (rcClear()) {
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
AlexeiCall(&LogicManager::CONS_Alexei_PacingAtWindow, 0, 0, 0, 0);
- return;
+ break;
}
}
- LABEL_20:
+
if (getCharacterCurrentParams(kCharacterAlexei)[3] || (getCharacterCurrentParams(kCharacterAlexei)[3] = _gameTime + 9000, _gameTime != -9000)) {
if (getCharacterCurrentParams(kCharacterAlexei)[3] >= _gameTime)
- return;
+ break;
+
getCharacterCurrentParams(kCharacterAlexei)[3] = 0x7FFFFFFF;
}
+
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 4;
AlexeiCall(&LogicManager::CONS_Alexei_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 12:
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 15 * rnd(120);
+ startCycOtis(kCharacterAlexei, "103B");
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoBlockSeqOtis, "124C", 5, 52, 0);
+ break;
+ case 2:
+ case 5:
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ break;
+ case 3:
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 15 * rnd(120);
+ getCharacterCurrentParams(kCharacterAlexei)[2] = 0;
+
+ if (getCharacterCurrentParams(kCharacterAlexei)[3] || (getCharacterCurrentParams(kCharacterAlexei)[3] = _gameTime + 9000, _gameTime != -9000)) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[3] >= _gameTime)
+ break;
+
+ getCharacterCurrentParams(kCharacterAlexei)[3] = 0x7FFFFFFF;
+ }
+
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 4;
+ AlexeiCall(&LogicManager::CONS_Alexei_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 5;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoBlockSeqOtis, "124C", 5, 52, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -1582,61 +1786,73 @@ void LogicManager::CONS_Alexei_GoSalon3(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_GoSalon3(HAND_PARAMS) {
- if (msg->action > 3) {
- if (msg->action > 18) {
- if (msg->action == 122288808) {
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 4;
- AlexeiCall(&LogicManager::CONS_Alexei_EnterComp, 0, 0, 0, 0);
- } else if (msg->action == 122358304) {
- startCycOtis(kCharacterAlexei, "BLANK");
- getCharacterCurrentParams(kCharacterAlexei)[2] = 1;
- }
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
- AlexeiCall(&LogicManager::CONS_Alexei_WaitRCClear, 0, 0, 0, 0);
- break;
- case 2:
- send(kCharacterAlexei, kCharacterAbbot, 222609266, 0);
- getCharacter(kCharacterAlexei).characterPosition.position = 1540;
- getCharacter(kCharacterAlexei).characterPosition.location = 0;
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
- AlexeiCall(&LogicManager::CONS_Alexei_DoBlockSeqOtis, "103A", 5, 52, 0);
- break;
- case 3:
- getCharacter(kCharacterAlexei).characterPosition.location = 1;
- startCycOtis(kCharacterAlexei, "124A");
- break;
- case 4:
- getCharacter(kCharacterAlexei).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
- fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
- break;
- default:
- return;
+ switch (msg->action) {
+ case 0:
+ if (!getCharacterCurrentParams(kCharacterAlexei)[2] && !getCharacterCurrentParams(kCharacterAlexei)[1]) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[3] || (getCharacterCurrentParams(kCharacterAlexei)[3] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterAlexei)[0],
+ _currentGameSessionTicks + getCharacterCurrentParams(kCharacterAlexei)[0] != 0)) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[3] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterAlexei)[3] = 0x7FFFFFFF;
}
- } else if (msg->action == 12) {
- getCharacterCurrentParams(kCharacterAlexei)[0] = 5 * (3 * rnd(15) + 15);
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
- AlexeiCall(&LogicManager::CONS_Alexei_DoWalk, 5, 850, 0, 0);
+
+ startSeqOtis(kCharacterAlexei, "124B");
+ getCharacterCurrentParams(kCharacterAlexei)[1] = 1;
+ getCharacterCurrentParams(kCharacterAlexei)[3] = 0;
}
- } else if (msg->action == 3) {
+
+ break;
+ case 3:
if (getCharacterCurrentParams(kCharacterAlexei)[1]) {
startCycOtis(kCharacterAlexei, "124A");
getCharacterCurrentParams(kCharacterAlexei)[0] = 5 * (3 * rnd(15) + 15);
getCharacterCurrentParams(kCharacterAlexei)[1] = 0;
}
- } else if (msg->action == 0 && !getCharacterCurrentParams(kCharacterAlexei)[2] && !getCharacterCurrentParams(kCharacterAlexei)[1]) {
- if (getCharacterCurrentParams(kCharacterAlexei)[3] || (getCharacterCurrentParams(kCharacterAlexei)[3] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterAlexei)[0],
- _currentGameSessionTicks + getCharacterCurrentParams(kCharacterAlexei)[0] != 0)) {
- if (getCharacterCurrentParams(kCharacterAlexei)[3] >= _currentGameSessionTicks)
- return;
- getCharacterCurrentParams(kCharacterAlexei)[3] = 0x7FFFFFFF;
+
+ break;
+ case 12:
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 5 * (3 * rnd(15) + 15);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoWalk, 5, 850, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 2:
+ send(kCharacterAlexei, kCharacterAbbot, 222609266, 0);
+ getCharacter(kCharacterAlexei).characterPosition.position = 1540;
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoBlockSeqOtis, "103A", 5, 52, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ startCycOtis(kCharacterAlexei, "124A");
+ break;
+ case 4:
+ getCharacter(kCharacterAlexei).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterAlexei, _functionsAlexei[getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall]]);
+ fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
+ break;
+ default:
+ break;
}
- startSeqOtis(kCharacterAlexei, "124B");
- getCharacterCurrentParams(kCharacterAlexei)[1] = 1;
- getCharacterCurrentParams(kCharacterAlexei)[3] = 0;
+
+ break;
+ case 122288808:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 4;
+ AlexeiCall(&LogicManager::CONS_Alexei_EnterComp, 0, 0, 0, 0);
+ break;
+ case 122358304:
+ startCycOtis(kCharacterAlexei, "BLANK");
+ getCharacterCurrentParams(kCharacterAlexei)[2] = 1;
+ break;
+ default:
+ break;
}
}
@@ -1651,19 +1867,22 @@ void LogicManager::CONS_Alexei_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_StartPart4(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterAlexei);
- getCharacter(kCharacterAlexei).characterPosition.position = 7500;
- getCharacter(kCharacterAlexei).characterPosition.location = 1;
- getCharacter(kCharacterAlexei).characterPosition.car = 3;
- getCharacter(kCharacterAlexei).inventoryItem = 0;
- setDoor(2, 0, 1, 10, 9);
- setDoor(18, 0, 1, 10, 9);
- setDoor(10, 0, 0, 255, 255);
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Alexei_InComp4(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterAlexei);
+ getCharacter(kCharacterAlexei).characterPosition.position = 7500;
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ getCharacter(kCharacterAlexei).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterAlexei).inventoryItem = 0;
+ setDoor(2, kCharacterCath, 1, 10, 9);
+ setDoor(18, kCharacterCath, 1, 10, 9);
+ setDoor(10, kCharacterCath, 0, 255, 255);
+ break;
+ default:
+ break;
}
}
@@ -1678,11 +1897,19 @@ void LogicManager::CONS_Alexei_InComp4(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_InComp4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 2354400, "411", 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
- CONS_Alexei_MeetTat(0, 0, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
+ CONS_Alexei_MeetTat(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -1697,82 +1924,99 @@ void LogicManager::CONS_Alexei_MeetTat(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_MeetTat(HAND_PARAMS) {
- if (msg->action > 3) {
- if (msg->action > 17) {
- switch (msg->action) {
- case 18:
- if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
- setDoor(2, 0, 0, 10, 9);
- getCharacter(kCharacterAlexei).characterPosition.location = 0;
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
- AlexeiCall(&LogicManager::CONS_Alexei_DoWalk, 3, 540, 0, 0);
- } else if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 2) {
- endGraphics(kCharacterAlexei);
- if (onLowPlatform(kCharacterCath)) {
- playChrExcuseMe(kCharacterAlexei, kCharacterCath, 0);
- if (checkCathDir(kCarGreenSleeping, 62))
- bumpCath(kCarGreenSleeping, 72, 255);
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAlexei)[1]) {
+ if (!getCharacterCurrentParams(kCharacterAlexei)[3]) {
+ getCharacterCurrentParams(kCharacterAlexei)[2] = _gameTime + 4500;
+ getCharacterCurrentParams(kCharacterAlexei)[3] = _gameTime + 9000;
+ }
+ if (getCharacterCurrentParams(kCharacterAlexei)[4] != 0x7FFFFFFF && getCharacterCurrentParams(kCharacterAlexei)[2] < _gameTime) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[3] >= _gameTime) {
+ if (onLowPlatform(kCharacterCath) || !getCharacterCurrentParams(kCharacterAlexei)[4]) {
+ getCharacterCurrentParams(kCharacterAlexei)[4] = _gameTime;
+ if (!_gameTime) {
+ releaseView(kCharacterAlexei, kCarGreenSleeping, 70);
+ releaseView(kCharacterAlexei, kCarGreenSleeping, 71);
+ if (onLowPlatform(kCharacterCath)) {
+ playChrExcuseMe(kCharacterAlexei, kCharacterCath, 0);
+ if (checkCathDir(kCarGreenSleeping, 62))
+ bumpCath(kCarGreenSleeping, 72, 255);
+ }
+
+ CONS_Alexei_LeavePlat(0, 0, 0, 0);
+ }
}
- blockView(kCharacterAlexei, kCarGreenSleeping, 70);
- blockView(kCharacterAlexei, kCarGreenSleeping, 71);
+
+ if (getCharacterCurrentParams(kCharacterAlexei)[4] >= _gameTime)
+ break;
}
- break;
- case 123536024:
- getCharacterCurrentParams(kCharacterAlexei)[1] = 1;
- break;
- case 123712592:
- endGraphics(kCharacterAlexei);
- getCharacterCurrentParams(kCharacterAlexei)[0] = 1;
- break;
- }
- } else {
- if (msg->action == 17) {
- if (!checkCathDir(kCarGreenSleeping, 62))
- return;
- if (getCharacterCurrentParams(kCharacterAlexei)[0]) {
- if (!getCharacterCurrentParams(kCharacterAlexei)[1])
- return;
- } else if (!getCharacterCurrentParams(kCharacterAlexei)[1]) {
- startSeqOtis(kCharacterAlexei, "306A");
- return;
+
+ getCharacterCurrentParams(kCharacterAlexei)[4] = 0x7FFFFFFF;
+ releaseView(kCharacterAlexei, kCarGreenSleeping, 70);
+ releaseView(kCharacterAlexei, kCarGreenSleeping, 71);
+ if (onLowPlatform(kCharacterCath)) {
+ playChrExcuseMe(kCharacterAlexei, kCharacterCath, 0);
+ if (checkCathDir(kCarGreenSleeping, 62))
+ bumpCath(kCarGreenSleeping, 72, 255);
}
- goto LABEL_37;
- }
- if (msg->action == 12) {
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
- AlexeiCall(&LogicManager::CONS_Alexei_DoCorrOtis, "602FB", 2, 0, 0);
+
+ CONS_Alexei_LeavePlat(0, 0, 0, 0);
}
}
- } else if (msg->action == 3) {
+
+ break;
+ case 3:
if (!getCharacterCurrentParams(kCharacterAlexei)[0] && !getCharacterCurrentParams(kCharacterAlexei)[1])
startCycOtis(kCharacterAlexei, "306F");
- } else if (msg->action == 0 && getCharacterCurrentParams(kCharacterAlexei)[1]) {
- if (!getCharacterCurrentParams(kCharacterAlexei)[3]) {
- getCharacterCurrentParams(kCharacterAlexei)[2] = _gameTime + 4500;
- getCharacterCurrentParams(kCharacterAlexei)[3] = _gameTime + 9000;
- }
- if (getCharacterCurrentParams(kCharacterAlexei)[4] != 0x7FFFFFFF && getCharacterCurrentParams(kCharacterAlexei)[2] < _gameTime) {
- if (getCharacterCurrentParams(kCharacterAlexei)[3] >= _gameTime) {
- if (onLowPlatform(kCharacterCath) || !getCharacterCurrentParams(kCharacterAlexei)[4]) {
- getCharacterCurrentParams(kCharacterAlexei)[4] = _gameTime;
- if (!_gameTime)
- goto LABEL_24;
- }
- if (getCharacterCurrentParams(kCharacterAlexei)[4] >= _gameTime)
- return;
+
+ break;
+ case 12:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoCorrOtis, "602FB", 2, 0, 0);
+ break;
+ case 17:
+ if (checkCathDir(kCarGreenSleeping, 62)) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[0]) {
+ if (!getCharacterCurrentParams(kCharacterAlexei)[1])
+ break;
+ } else if (!getCharacterCurrentParams(kCharacterAlexei)[1]) {
+ startSeqOtis(kCharacterAlexei, "306A");
+ break;
}
- getCharacterCurrentParams(kCharacterAlexei)[4] = 0x7FFFFFFF;
- LABEL_24:
- releaseView(kCharacterAlexei, kCarGreenSleeping, 70);
- releaseView(kCharacterAlexei, kCarGreenSleeping, 71);
+
+ CONS_Alexei_LeavePlat(0, 0, 0, 0);
+ }
+
+ break;
+ case 18:
+ if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
+ setDoor(2, kCharacterCath, 0, 10, 9);
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoWalk, 3, 540, 0, 0);
+ } else if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 2) {
+ endGraphics(kCharacterAlexei);
if (onLowPlatform(kCharacterCath)) {
playChrExcuseMe(kCharacterAlexei, kCharacterCath, 0);
+
if (checkCathDir(kCarGreenSleeping, 62))
bumpCath(kCarGreenSleeping, 72, 255);
}
- LABEL_37:
- CONS_Alexei_LeavePlat(0, 0, 0, 0);
+
+ blockView(kCharacterAlexei, kCarGreenSleeping, 70);
+ blockView(kCharacterAlexei, kCarGreenSleeping, 71);
}
+ break;
+ case 123536024:
+ getCharacterCurrentParams(kCharacterAlexei)[1] = 1;
+ break;
+ case 123712592:
+ endGraphics(kCharacterAlexei);
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 1;
+ break;
+ default:
+ break;
}
}
@@ -1787,16 +2031,23 @@ void LogicManager::CONS_Alexei_LeavePlat(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_LeavePlat(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
AlexeiCall(&LogicManager::CONS_Alexei_DoWalk, 3, 7500, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
startSeqOtis(kCharacterAlexei, "602Eb");
blockAtDoor(kCharacterAlexei, 2);
getCharacter(kCharacterAlexei).characterPosition.location = 1;
if (inComp(kCharacterCath, kCarGreenSleeping, 7500)) {
- playNIS((kEventCathTurningNight - !isNight()));
+ if (isNight()) {
+ playNIS(kEventCathTurningNight);
+ } else {
+ playNIS(kEventCathTurningDay);
+ }
+
playDialog(0, "BUMP", -1, 0);
bumpCathRDoor(2);
}
@@ -1809,6 +2060,10 @@ void LogicManager::HAND_Alexei_LeavePlat(HAND_PARAMS) {
endGraphics(kCharacterAlexei);
CONS_Alexei_InCompAgain(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -1823,13 +2078,21 @@ void LogicManager::CONS_Alexei_InCompAgain(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_InCompAgain(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (checkCathDir(kCarGreenSleeping, 66))
bumpCath(kCarGreenSleeping, 49, 255);
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 2403000, "411", 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
- CONS_Alexei_GoSalon4(0, 0, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
+ CONS_Alexei_GoSalon4(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -1844,10 +2107,12 @@ void LogicManager::CONS_Alexei_GoSalon4(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_GoSalon4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
AlexeiCall(&LogicManager::CONS_Alexei_ExitComp, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
case 1:
send(kCharacterAlexei, kCharacterTatiana, 191198209, 0);
@@ -1862,7 +2127,13 @@ void LogicManager::HAND_Alexei_GoSalon4(HAND_PARAMS) {
getCharacter(kCharacterAlexei).characterPosition.location = 1;
CONS_Alexei_Pacing(0, 0, 0, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1884,20 +2155,22 @@ void LogicManager::HAND_Alexei_Pacing(HAND_PARAMS) {
if (rcClear()) {
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
AlexeiCall(&LogicManager::CONS_Alexei_PacingAtWindow, 0, 0, 0, 0);
- return;
+ break;
}
}
}
+
if (_gameTime > 2457000 && !getCharacterCurrentParams(kCharacterAlexei)[2]) {
getCharacterCurrentParams(kCharacterAlexei)[2] = 1;
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
AlexeiCall(&LogicManager::CONS_Alexei_WaitRCClear, 0, 0, 0, 0);
}
- return;
+
+ break;
case 12:
getCharacterCurrentParams(kCharacterAlexei)[0] = 5 * (3 * rnd(120) + 180);
startCycOtis(kCharacterAlexei, "103B");
- return;
+ break;
case 18:
if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] != 1) {
if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 2) {
@@ -1907,8 +2180,10 @@ void LogicManager::HAND_Alexei_Pacing(HAND_PARAMS) {
} else if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 3) {
CONS_Alexei_GoToPlatform(0, 0, 0, 0);
}
- return;
+
+ break;
}
+
getCharacterCurrentParams(kCharacterAlexei)[0] = 5 * (3 * rnd(120) + 180);
getCharacterCurrentParams(kCharacterAlexei)[1] = 0;
if (_gameTime > 2457000 && !getCharacterCurrentParams(kCharacterAlexei)[2]) {
@@ -1916,7 +2191,10 @@ void LogicManager::HAND_Alexei_Pacing(HAND_PARAMS) {
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
AlexeiCall(&LogicManager::CONS_Alexei_WaitRCClear, 0, 0, 0, 0);
}
- return;
+
+ break;
+ default:
+ break;
}
}
@@ -1937,13 +2215,16 @@ void LogicManager::HAND_Alexei_GoToPlatform(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterAlexei)[0] = 1;
releaseView(kCharacterAlexei, kCarGreenSleeping, 70);
releaseView(kCharacterAlexei, kCarGreenSleeping, 71);
+
if (onLowPlatform(kCharacterCath)) {
playChrExcuseMe(kCharacterAlexei, kCharacterCath, 0);
if (checkCathDir(kCarGreenSleeping, 62))
bumpCath(kCarGreenSleeping, 72, 255);
}
+
CONS_Alexei_ReturnComp4(0, 0, 0, 0);
}
+
break;
case 12:
getCharacter(kCharacterAlexei).characterPosition.car = 4;
@@ -1957,23 +2238,28 @@ void LogicManager::HAND_Alexei_GoToPlatform(HAND_PARAMS) {
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
AlexeiCall(&LogicManager::CONS_Alexei_DoSeqOtis, "306A", 0, 0, 0);
}
+
break;
case 18:
if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
endGraphics(kCharacterAlexei);
+
if (onLowPlatform(kCharacterCath)) {
playChrExcuseMe(kCharacterAlexei, kCharacterCath, 0);
+
if (checkCathDir(kCarGreenSleeping, 62))
bumpCath(kCarGreenSleeping, 72, 255);
}
+
blockView(kCharacterAlexei, kCarGreenSleeping, 70);
blockView(kCharacterAlexei, kCarGreenSleeping, 71);
} else if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 2) {
startCycOtis(kCharacterAlexei, "306F");
}
+
break;
default:
- return;
+ break;
}
}
@@ -1988,18 +2274,26 @@ void LogicManager::CONS_Alexei_ReturnComp4(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_ReturnComp4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
AlexeiCall(&LogicManager::CONS_Alexei_EnterComp, 0, 0, 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
- if (checkCathDir(kCarGreenSleeping, 66))
- bumpCath(kCarGreenSleeping, 49, 255);
- if (cathHasItem(kItemBomb)) {
- CONS_Alexei_BombPlanB(0, 0, 0, 0);
- } else {
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
- AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 15803100, "412", 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 1) {
+ if (checkCathDir(kCarGreenSleeping, 66))
+ bumpCath(kCarGreenSleeping, 49, 255);
+ if (cathHasItem(kItemBomb)) {
+ CONS_Alexei_BombPlanB(0, 0, 0, 0);
+ } else {
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 15803100, "412", 0, 0);
+ }
}
+
+ break;
+ default:
+ break;
}
}
@@ -2014,88 +2308,109 @@ void LogicManager::CONS_Alexei_BombPlanB(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_BombPlanB(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
- AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 2488500, "411", 0, 0);
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
- AlexeiCall(&LogicManager::CONS_Alexei_ExitComp, 0, 0, 0, 0);
- break;
- case 2:
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
- AlexeiCall(&LogicManager::CONS_Alexei_DoWalk, 4, 0x24F4, 0, 0);
- break;
- case 4:
- if (checkCathDir(kCarGreenSleeping, 66))
- bumpCath(kCarGreenSleeping, 49, 255);
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 5;
- AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 2507400, "412", 0, 0);
- break;
- case 5:
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 6;
- AlexeiCall(&LogicManager::CONS_Alexei_DoCorrOtis, "602Fb", 2, 0, 0);
- break;
- case 6:
- setDoor(2, 0, 0, 10, 9);
- getCharacter(kCharacterAlexei).characterPosition.location = 0;
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 7;
- AlexeiCall(&LogicManager::CONS_Alexei_DoWalk, 4, 7500, 0, 0);
- break;
- case 7:
- startSeqOtis(kCharacterAlexei, "602Eb");
- blockAtDoor(kCharacterAlexei, 33);
- getCharacter(kCharacterAlexei).characterPosition.location = 1;
- if (inSuite(kCharacterCath, kCarRedSleeping, 7850)) {
- playNIS((158 - !isNight()));
- playDialog(0, "BUMP", -1, 0);
- bumpCathRDoor(33);
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterAlexei)[0] != 0x7FFFFFFF && _gameTime != 0) {
+ if (_gameTime <= 2493000) {
+ if (inSalon(kCharacterCath) || inSalon(kCharacterAugust) || !getCharacterCurrentParams(kCharacterAlexei)[0]) {
+ getCharacterCurrentParams(kCharacterAlexei)[0] = _gameTime;
+ if (!_gameTime) {
+ takeItem(kItem22);
+ if (inSalon(kCharacterCath)) {
+ playChrExcuseMe(kCharacterAlexei, kCharacterCath, 0);
+ bumpCath(kCarRestaurant, checkCathDir(), 255);
+ }
+
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 4;
+ AlexeiCall(&LogicManager::CONS_Alexei_EnterComp, 0, 0, 0, 0);
+ break;
+ }
}
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 8;
- AlexeiCall(&LogicManager::CONS_Alexei_FinishSeqOtis, 0, 0, 0, 0);
- break;
- case 8:
- releaseAtDoor(kCharacterAlexei, 33);
- endGraphics(kCharacterAlexei);
- getCharacter(kCharacterAlexei).characterPosition.position = 8200;
- getCharacter(kCharacterAlexei).characterPosition.location = 1;
- setDoor(32, 0, 1, 0, 0);
- setDoor(48, 0, 1, 0, 0);
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 9;
- AlexeiCall(&LogicManager::CONS_Alexei_DoDialog, "TAT4167", 0, 0, 0);
- break;
- case 9:
- send(kCharacterAlexei, kCharacterMaster, 156435676, 0);
- CONS_Alexei_Dead(0, 0, 0, 0);
- break;
- default:
- return;
+
+ if (getCharacterCurrentParams(kCharacterAlexei)[0] >= _gameTime)
+ break;
+ }
+
+ getCharacterCurrentParams(kCharacterAlexei)[0] = 0x7FFFFFFF;
+
+ takeItem(kItem22);
+ if (inSalon(kCharacterCath)) {
+ playChrExcuseMe(kCharacterAlexei, kCharacterCath, 0);
+ bumpCath(kCarRestaurant, checkCathDir(), 255);
}
+
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 4;
+ AlexeiCall(&LogicManager::CONS_Alexei_EnterComp, 0, 0, 0, 0);
}
- return;
- }
- if (getCharacterCurrentParams(kCharacterAlexei)[0] == 0x7FFFFFFF || !_gameTime)
- return;
- if (_gameTime <= 2493000) {
- if (inSalon(kCharacterCath) || inSalon(kCharacterAugust) || !getCharacterCurrentParams(kCharacterAlexei)[0]) {
- getCharacterCurrentParams(kCharacterAlexei)[0] = _gameTime;
- if (!_gameTime)
- goto LABEL_14;
+
+ break;
+ case 12:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
+ AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 2488500, "411", 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
+ AlexeiCall(&LogicManager::CONS_Alexei_ExitComp, 0, 0, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoWalk, 4, 9460, 0, 0);
+ break;
+ case 4:
+ if (checkCathDir(kCarGreenSleeping, 66))
+ bumpCath(kCarGreenSleeping, 49, 255);
+
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 5;
+ AlexeiCall(&LogicManager::CONS_Alexei_CompLogic, 2507400, "412", 0, 0);
+ break;
+ case 5:
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 6;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoCorrOtis, "602Fb", 2, 0, 0);
+ break;
+ case 6:
+ setDoor(2, 0, 0, 10, 9);
+ getCharacter(kCharacterAlexei).characterPosition.location = 0;
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 7;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoWalk, 4, 7500, 0, 0);
+ break;
+ case 7:
+ startSeqOtis(kCharacterAlexei, "602Eb");
+ blockAtDoor(kCharacterAlexei, 33);
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+
+ if (inSuite(kCharacterCath, kCarRedSleeping, 7850)) {
+ playNIS((158 - !isNight()));
+ playDialog(0, "BUMP", -1, 0);
+ bumpCathRDoor(33);
+ }
+
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 8;
+ AlexeiCall(&LogicManager::CONS_Alexei_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 8:
+ releaseAtDoor(kCharacterAlexei, 33);
+ endGraphics(kCharacterAlexei);
+ getCharacter(kCharacterAlexei).characterPosition.position = 8200;
+ getCharacter(kCharacterAlexei).characterPosition.location = 1;
+ setDoor(32, kCharacterCath, 1, 0, 0);
+ setDoor(48, kCharacterCath, 1, 0, 0);
+ getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 9;
+ AlexeiCall(&LogicManager::CONS_Alexei_DoDialog, "TAT4167", 0, 0, 0);
+ break;
+ case 9:
+ send(kCharacterAlexei, kCharacterMaster, 156435676, 0);
+ CONS_Alexei_Dead(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
- if (getCharacterCurrentParams(kCharacterAlexei)[0] >= _gameTime)
- return;
- }
- getCharacterCurrentParams(kCharacterAlexei)[0] = 0x7FFFFFFF;
-LABEL_14:
- takeItem(kItem22);
- if (inSalon(kCharacterCath)) {
- playChrExcuseMe(kCharacterAlexei, kCharacterCath, 0);
- bumpCath(kCarRestaurant, checkCathDir(), 255);
+
+ break;
+ default:
+ break;
}
- getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 4;
- AlexeiCall(&LogicManager::CONS_Alexei_EnterComp, 0, 0, 0, 0);
}
void LogicManager::CONS_Alexei_Dead(CONS_PARAMS) {
@@ -2109,13 +2424,17 @@ void LogicManager::CONS_Alexei_Dead(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_Dead(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterAlexei);
getCharacter(kCharacterAlexei).characterPosition.car = kCarLocomotive;
getCharacter(kCharacterAlexei).characterPosition.position = 0;
getCharacter(kCharacterAlexei).characterPosition.location = 0;
- setDoor(2, 0, 0, 10, 9);
- setDoor(18, 0, 0, 10, 9);
+ setDoor(2, kCharacterCath, 0, 10, 9);
+ setDoor(18, kCharacterCath, 0, 10, 9);
+ break;
+ default:
+ break;
}
}
@@ -2130,8 +2449,13 @@ void LogicManager::CONS_Alexei_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Alexei_StartPart5(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterAlexei);
+ break;
+ default:
+ break;
+ }
}
void (LogicManager::*LogicManager::_functionsAlexei[])(HAND_PARAMS) = {
Commit: c93bd7407846501df3a6ece8d24c7fe3aceed715
https://github.com/scummvm/scummvm/commit/c93bd7407846501df3a6ece8d24c7fe3aceed715
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Add experimental support for Gold Edition
No sound, no cutscenes... that's as far as I will go for this edition.
Changed paths:
A engines/lastexpress/data/gold_archive.cpp
A engines/lastexpress/data/gold_archive.h
engines/lastexpress/data/archive.cpp
engines/lastexpress/data/archive.h
engines/lastexpress/detection.cpp
engines/lastexpress/game/beetle.cpp
engines/lastexpress/game/logic.cpp
engines/lastexpress/game/logic.h
engines/lastexpress/game/nis.cpp
engines/lastexpress/graphics.h
engines/lastexpress/lastexpress.cpp
engines/lastexpress/lastexpress.h
engines/lastexpress/metaengine.cpp
engines/lastexpress/module.mk
diff --git a/engines/lastexpress/data/archive.cpp b/engines/lastexpress/data/archive.cpp
index 47339b6fbe2..7d318e8b0fb 100644
--- a/engines/lastexpress/data/archive.cpp
+++ b/engines/lastexpress/data/archive.cpp
@@ -19,9 +19,6 @@
*
*/
-// Based on the Xentax Wiki documentation:
-// http://wiki.xentax.com/index.php/The_Last_Express_SND
-
#include "lastexpress/lastexpress.h"
#include "lastexpress/data/archive.h"
diff --git a/engines/lastexpress/data/archive.h b/engines/lastexpress/data/archive.h
index caa9e87f008..91c8902c962 100644
--- a/engines/lastexpress/data/archive.h
+++ b/engines/lastexpress/data/archive.h
@@ -19,8 +19,8 @@
*
*/
-#ifndef LASTEXPRESS_HPF_H
-#define LASTEXPRESS_HPF_H
+#ifndef LASTEXPRESS_ARCHIVE_H
+#define LASTEXPRESS_ARCHIVE_H
#include "lastexpress/lastexpress.h"
@@ -52,14 +52,20 @@ typedef struct HPF {
uint16 currentPos;
uint16 status;
+ // For Gold Edition only
+ Common::ArchiveMemberPtr archiveRef;
+ Common::String archiveName;
+
HPF() {
memset(name, 0, sizeof(name));
offset = 0;
size = 0;
currentPos = 0;
status = 0;
- };
+ archiveRef = nullptr;
+ archiveName = "";
+ };
} HPF;
enum HPFFlags {
@@ -74,24 +80,24 @@ public:
~ArchiveManager();
HPF *search(const char *name, HPF *archive, int archiveSize);
- bool lockCD(int32 index);
- bool isCDAvailable(int cdNum, char *outPath, int pathSize);
- bool lockCache(char *filename);
- void initHPFS();
- void shutDownHPFS();
+ virtual bool lockCD(int32 index);
+ virtual bool isCDAvailable(int cdNum, char *outPath, int pathSize);
+ virtual bool lockCache(char *filename);
+ virtual void initHPFS();
+ virtual void shutDownHPFS();
void unlockCD();
- HPF *openHPF(const char *filename);
+ virtual HPF *openHPF(const char *filename);
void readHD(void *dstBuf, int offset, uint32 size);
void readCD(void *dstBuf, int offset, uint32 size);
- void readHPF(HPF *archive, void *dstBuf, uint32 size);
+ virtual void readHPF(HPF *archive, void *dstBuf, uint32 size);
void seekHPF(HPF *archive, uint32 position);
void closeHPF(HPF *archive);
- int loadBG(const char *filename);
+ virtual int loadBG(const char *filename);
Seq *loadSeq(const char *filename, uint8 ticksToWaitUntilCycleRestart, int character);
void loadMice();
-private:
+protected:
LastExpressEngine *_engine = nullptr;
Common::File *_cdFilePointer = nullptr;
@@ -109,4 +115,4 @@ private:
} // End of namespace LastExpress
-#endif // LASTEXPRESS_HPF_H
+#endif // LASTEXPRESS_ARCHIVE_H
diff --git a/engines/lastexpress/data/gold_archive.cpp b/engines/lastexpress/data/gold_archive.cpp
new file mode 100644
index 00000000000..0f74f8e5180
--- /dev/null
+++ b/engines/lastexpress/data/gold_archive.cpp
@@ -0,0 +1,301 @@
+/* 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"
+#include "lastexpress/data/gold_archive.h"
+
+#include "common/debug.h"
+#include "common/file.h"
+#include "common/memstream.h"
+#include "common/compression/unzip.h"
+#include "image/jpeg.h"
+
+namespace LastExpress {
+
+GoldArchiveManager::GoldArchiveManager(LastExpressEngine *engine) : ArchiveManager(engine) {
+}
+
+GoldArchiveManager::~GoldArchiveManager() {
+ ArchiveManager::~ArchiveManager();
+}
+
+
+bool GoldArchiveManager::lockCD(int32 index) {
+ return true;
+}
+
+bool GoldArchiveManager::isCDAvailable(int cdNum, char *outPath, int pathSize) {
+ return true;
+}
+
+bool GoldArchiveManager::lockCache(char *filename) {
+ return true;
+}
+
+void GoldArchiveManager::initHPFS() {
+ // This will act as a cache of files
+ _hdArchiveNumFiles = 6000;
+ _hdArchive = new HPF[_hdArchiveNumFiles];
+
+ Common::StringArray resCategories = {
+ "BG", "DATA", "LNK", "NIS",
+ "SBE", "SEQ", "SND", "TGA"
+ };
+
+ for (uint i = 0; i < resCategories.size(); i++) {
+ Common::Archive *tmpArch = Common::makeZipArchive(Common::Path(Common::String::format("%s.zip", resCategories[i].c_str())), false);
+
+ if (tmpArch) {
+ SearchMan.add(resCategories[i], tmpArch);
+ } else {
+ warning("GoldArchiveManager::initHPFS(): %s.zip could't be loaded, the game might not function properly", resCategories[i].c_str());
+ }
+ }
+}
+
+void GoldArchiveManager::shutDownHPFS() {
+ delete[] _hdArchive;
+}
+
+HPF *GoldArchiveManager::openHPF(const char *filename) {
+ HPF *result = nullptr;
+ for (int32 i = 0; i < _hdArchiveNumFiles; i++) {
+ if ((_hdArchive[i].status & kHPFFileIsLoaded) == 0) {
+ result = &_hdArchive[i];
+ break;
+ }
+ }
+
+ if (!result) {
+ error("GoldArchiveManager::openHPF(): Couldn't allocate cache for file %s", filename);
+ }
+
+ Common::String filenameStr(filename);
+ filenameStr.toUppercase();
+
+ Common::ArchiveMemberPtr archiveItem = SearchMan.getMember(Common::Path(filenameStr));
+
+ if (!archiveItem.get()) {
+ archiveItem = SearchMan.getMember(Common::Path(Common::Path(Common::String::format("COMMON/%s", filenameStr.c_str()))));
+ }
+
+ if (!archiveItem.get()) {
+ archiveItem = SearchMan.getMember(Common::Path(Common::Path(Common::String::format("%s/%s", _languagePrefix.c_str(), filenameStr.c_str()))));
+ }
+
+ if (!archiveItem.get()) {
+ for (int i = 1; i <= 3; i++) {
+ archiveItem = SearchMan.getMember(Common::Path(Common::Path(Common::String::format("%s/CD%d/%s", _languagePrefix.c_str(), i, filenameStr.c_str()))));
+ if (archiveItem.get())
+ break;
+
+ archiveItem = SearchMan.getMember(Common::Path(Common::Path(Common::String::format("CD%d/%s", i, filenameStr.c_str()))));
+ if (archiveItem.get())
+ break;
+ }
+ }
+
+ if (!archiveItem.get()) {
+ warning("GoldArchiveManager::openHPF(): Can't find file %s", filename);
+ return nullptr;
+ }
+
+ Common::strcpy_s(result->name, filename);
+ int64 archiveSize = archiveItem.get()->createReadStream()->size();
+ result->size = (uint16)((archiveSize / PAGE_SIZE) + ((archiveSize % PAGE_SIZE) > 0 ? 1 : 0));
+ result->status |= kHPFFileIsLoaded;
+ result->currentPos = 0;
+ result->archiveName = archiveItem.get()->getPathInArchive().toString();
+ result->archiveRef = archiveItem;
+
+ return result;
+}
+
+void GoldArchiveManager::readHPF(HPF *archive, void *dstBuf, uint32 size) {
+ if (!archive)
+ return;
+
+ uint32 effSize;
+
+ if ((archive->status & kHPFFileIsLoaded) != 0) {
+ if (archive->size > archive->currentPos) {
+ effSize = size;
+ if (archive->currentPos + size > archive->size)
+ effSize = archive->size - archive->currentPos;
+
+ Common::ArchiveMember *archivePtr = archive->archiveRef.get();
+ assert(archivePtr);
+
+ Common::SeekableReadStream *readStream = archivePtr->createReadStream();
+
+ readStream->seek((archive->currentPos + archive->offset) * PAGE_SIZE, SEEK_SET);
+ readStream->read(dstBuf, effSize * PAGE_SIZE);
+
+ delete readStream;
+
+ archive->currentPos += effSize;
+ }
+ }
+}
+
+int GoldArchiveManager::loadBG(const char *filename) {
+ TBM tbm;
+ char bgFilename[84];
+
+ memset(bgFilename, 0, sizeof(bgFilename));
+
+ tbm.x = _engine->getGraphicsManager()->_renderBox1.x;
+ tbm.y = _engine->getGraphicsManager()->_renderBox1.y;
+ tbm.width = _engine->getGraphicsManager()->_renderBox1.width;
+ tbm.height = _engine->getGraphicsManager()->_renderBox1.height;
+
+ PixMap *bgSurface = _engine->getGraphicsManager()->_backgroundBuffer;
+
+ if (_engine->getLogicManager()->_doubleClickFlag &&
+ (_engine->mouseHasLeftClicked() || _engine->mouseHasRightClicked()) &&
+ _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_trainNodeIndex].car != 128) {
+ return -1;
+ }
+
+ Common::strcpy_s(bgFilename, filename);
+ Common::strcat_s(bgFilename, ".bg");
+
+ HPF *archive = openHPF(bgFilename);
+
+ if (!archive) {
+ Common::strcpy_s(bgFilename, "DEFAULT.BG");
+ archive = openHPF(bgFilename);
+ }
+
+ if (archive) {
+ // The background format in the Gold Edition is basically JPEG but with an header on top, containing:
+ // - X coordinate
+ // - Y coordinate
+ // - Width
+ // - Height
+ //
+ // All these fields are 32-bit LE.
+
+ Image::JPEGDecoder *dec = new Image::JPEGDecoder();
+ byte *backgroundCompBuffer = (byte *)malloc(archive->size * PAGE_SIZE);
+ assert(backgroundCompBuffer);
+ readHPF(archive, backgroundCompBuffer, archive->size);
+ Common::SeekableReadStream *seqDataStream = new Common::MemoryReadStream(backgroundCompBuffer, PAGE_SIZE * archive->size, DisposeAfterUse::YES);
+
+ _engine->getGraphicsManager()->_renderBox1.x = seqDataStream->readUint32LE();
+ _engine->getGraphicsManager()->_renderBox1.y = seqDataStream->readUint32LE();
+ _engine->getGraphicsManager()->_renderBox1.width = seqDataStream->readUint32LE();
+ _engine->getGraphicsManager()->_renderBox1.height = seqDataStream->readUint32LE();
+
+ dec->setOutputPixelFormat(Graphics::PixelFormat(2, 5, 5, 5, 0, 10, 5, 0, 0));
+ const Graphics::Surface *decodedSurf = dec->decodeFrame(*seqDataStream);
+
+ memcpy(bgSurface, decodedSurf->getPixels(), _engine->getGraphicsManager()->_renderBox1.width * _engine->getGraphicsManager()->_renderBox1.height * sizeof(PixMap));
+
+ _engine->getGraphicsManager()->modifyPalette(bgSurface, 640 * 480);
+ closeHPF(archive);
+
+ delete dec;
+
+ if (_engine->getLogicManager()->_doubleClickFlag &&
+ (_engine->mouseHasLeftClicked() || _engine->mouseHasRightClicked()) &&
+ _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_trainNodeIndex].car != 128) {
+ return -1;
+ } else {
+ for (int32 i = _engine->getGraphicsManager()->_renderBox1.y - 1 + _engine->getGraphicsManager()->_renderBox1.height; i >= _engine->getGraphicsManager()->_renderBox1.y; i--) {
+ memmove(
+ &bgSurface[640 * i + _engine->getGraphicsManager()->_renderBox1.x],
+ &bgSurface[_engine->getGraphicsManager()->_renderBox1.width * (i - _engine->getGraphicsManager()->_renderBox1.y)],
+ 2 * _engine->getGraphicsManager()->_renderBox1.width
+ );
+ }
+
+ if (_engine->getGraphicsManager()->_renderBox1.x) {
+ _engine->getGraphicsManager()->clear(_engine->getGraphicsManager()->_backgroundBuffer, 0, 0, _engine->getGraphicsManager()->_renderBox1.x, 480);
+ _engine->getGraphicsManager()->clear(_engine->getGraphicsManager()->_backgroundBuffer, 640 - _engine->getGraphicsManager()->_renderBox1.x, 0, _engine->getGraphicsManager()->_renderBox1.x, 480);
+ }
+
+ if (_engine->getGraphicsManager()->_renderBox1.y) {
+ _engine->getGraphicsManager()->clear(_engine->getGraphicsManager()->_backgroundBuffer, _engine->getGraphicsManager()->_renderBox1.x, 0, _engine->getGraphicsManager()->_renderBox1.width, _engine->getGraphicsManager()->_renderBox1.y);
+ _engine->getGraphicsManager()->clear(
+ _engine->getGraphicsManager()->_backgroundBuffer,
+ _engine->getGraphicsManager()->_renderBox1.x,
+ 480 - _engine->getGraphicsManager()->_renderBox1.y,
+ _engine->getGraphicsManager()->_renderBox1.width,
+ _engine->getGraphicsManager()->_renderBox1.y
+ );
+ }
+
+ if (_engine->getLogicManager()->_doubleClickFlag &&
+ (_engine->mouseHasLeftClicked() || _engine->mouseHasRightClicked()) &&
+ _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_trainNodeIndex].car != 128) {
+ return -1;
+
+ } else {
+ _engine->getGraphicsManager()->copy(_engine->getGraphicsManager()->_backgroundBuffer, _engine->getGraphicsManager()->_screenBuffer, 0, 0, 640, 480);
+
+ if (tbm.x != _engine->getGraphicsManager()->_renderBox1.x ||
+ tbm.y != _engine->getGraphicsManager()->_renderBox1.y ||
+ tbm.width != _engine->getGraphicsManager()->_renderBox1.width ||
+ tbm.height != _engine->getGraphicsManager()->_renderBox1.height) {
+
+ _engine->getGraphicsManager()->_renderBox2.x = tbm.x;
+ _engine->getGraphicsManager()->_renderBox2.y = tbm.y;
+ _engine->getGraphicsManager()->_renderBox2.width = tbm.width;
+ _engine->getGraphicsManager()->_renderBox2.height = tbm.height;
+
+ if (_engine->getGraphicsManager()->_renderBox2.x > _engine->getGraphicsManager()->_renderBox1.x)
+ _engine->getGraphicsManager()->_renderBox2.x = _engine->getGraphicsManager()->_renderBox1.x;
+
+ if (_engine->getGraphicsManager()->_renderBox2.y > _engine->getGraphicsManager()->_renderBox1.y)
+ _engine->getGraphicsManager()->_renderBox2.y = _engine->getGraphicsManager()->_renderBox1.y;
+
+ if (_engine->getGraphicsManager()->_renderBox1.height + _engine->getGraphicsManager()->_renderBox1.y > (_engine->getGraphicsManager()->_renderBox2.height + _engine->getGraphicsManager()->_renderBox2.y))
+ _engine->getGraphicsManager()->_renderBox2.height = _engine->getGraphicsManager()->_renderBox1.height + _engine->getGraphicsManager()->_renderBox1.y - _engine->getGraphicsManager()->_renderBox2.y;
+
+ if (_engine->getGraphicsManager()->_renderBox1.x + _engine->getGraphicsManager()->_renderBox1.width > (_engine->getGraphicsManager()->_renderBox2.x + _engine->getGraphicsManager()->_renderBox2.width))
+ _engine->getGraphicsManager()->_renderBox2.width = _engine->getGraphicsManager()->_renderBox1.x + _engine->getGraphicsManager()->_renderBox1.width - _engine->getGraphicsManager()->_renderBox2.x;
+
+ return 1;
+ }
+
+ return 0;
+ }
+ }
+ } else {
+ memset(_engine->getGraphicsManager()->_screenBuffer, 0, (640 * 480 * sizeof(PixMap)));
+
+ _engine->getGraphicsManager()->copy(_engine->getGraphicsManager()->_screenBuffer, _engine->getGraphicsManager()->_backgroundBuffer, 0, 0, 640, 480);
+ _engine->getGraphicsManager()->_renderBox1.x = 0;
+ _engine->getGraphicsManager()->_renderBox1.y = 0;
+ _engine->getGraphicsManager()->_renderBox1.width = 640;
+ _engine->getGraphicsManager()->_renderBox1.height = 480;
+
+ _engine->getGraphicsManager()->_renderBox2.x = 0;
+ _engine->getGraphicsManager()->_renderBox2.y = _engine->getGraphicsManager()->_renderBox1.y;
+ _engine->getGraphicsManager()->_renderBox2.width = _engine->getGraphicsManager()->_renderBox1.width;
+ _engine->getGraphicsManager()->_renderBox2.height = _engine->getGraphicsManager()->_renderBox1.height;
+
+ return 1;
+ }
+}
+
+} // End of namespace LastExpress
diff --git a/engines/lastexpress/data/gold_archive.h b/engines/lastexpress/data/gold_archive.h
new file mode 100644
index 00000000000..9125d989a70
--- /dev/null
+++ b/engines/lastexpress/data/gold_archive.h
@@ -0,0 +1,59 @@
+/* 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/>.
+ *
+ */
+
+#ifndef LASTEXPRESS_GOLD_ARCHIVE_H
+#define LASTEXPRESS_GOLD_ARCHIVE_H
+
+#include "lastexpress/data/archive.h"
+
+#include "common/file.h"
+
+namespace LastExpress {
+
+class LastExpressEngine;
+class ArchiveManager;
+
+struct Seq;
+struct HPF;
+
+class GoldArchiveManager : public ArchiveManager {
+public:
+ GoldArchiveManager(LastExpressEngine *engine);
+ ~GoldArchiveManager();
+
+ bool lockCD(int32 index) override;
+ bool isCDAvailable(int cdNum, char *outPath, int pathSize) override;
+ bool lockCache(char *filename) override;
+ void initHPFS() override;
+ void shutDownHPFS() override;
+
+ HPF *openHPF(const char *filename) override;
+ void readHPF(HPF *archive, void *dstBuf, uint32 size) override;
+
+ int loadBG(const char *filename) override;
+
+protected:
+ Common::String _languagePrefix = "EN";
+};
+
+} // End of namespace LastExpress
+
+#endif // LASTEXPRESS_GOLD_ARCHIVE_H
diff --git a/engines/lastexpress/detection.cpp b/engines/lastexpress/detection.cpp
index 8902ad2fce6..f3aecd56477 100644
--- a/engines/lastexpress/detection.cpp
+++ b/engines/lastexpress/detection.cpp
@@ -213,11 +213,34 @@ static const ADGameDescription gameDescriptions[] = {
GUIO2(GUIO_NOASPECT, GUIO_NOMIDI)
},
+ // The Last Express (Multilanguage) - Gold Edition by DotEmu (Steam)
+ {
+ "lastexpress",
+ "Gold Edition",
+ {
+ {"BG.zip", 0, "f7aa689629280e464293dd674126cfe6", 844756591},
+ {"DATA.zip", 0, "bd1602f10cf20a7f4add620fb6e5571f", 587488},
+ {"LNK.zip", 0, "b281b3332a88e514543efd533643e627", 21296565},
+ {"NIS.zip", 0, "bc108966f7142135f661cde4563390f3", 671323510},
+ {"SBE.zip", 0, "a0345b2c6e6fa5d811767fd12283d0f8", 1380014},
+ {"SEQ.zip", 0, "a6a6cb45b976e2ba4af546a31312afe3", 170652650},
+ {"SND.zip", 0, "9c39b2b997f1d2504538c0b5fd1ff05f", 1160618591},
+ {"TGA.zip", 0, "66c7c74553f635a86fad8f333825ad7d", 833177},
+ {"TheLastExpressSteam.exe", 0, "9173ea82f613b007479be0ca194ece39", 2060288},
+ AD_LISTEND
+ },
+ Common::UNK_LANG,
+ Common::kPlatformWindows,
+ ADGF_UNSTABLE | ADGF_REMASTERED,
+ GUIO2(GUIO_NOASPECT, GUIO_NOMIDI)
+ },
+
AD_TABLE_END_MARKER
};
static const char *const directoryGlobs[] = {
"data", // GOG release
+ "roms", // Gold Edition
nullptr
};
diff --git a/engines/lastexpress/game/beetle.cpp b/engines/lastexpress/game/beetle.cpp
index a798fe07f45..4f53bfb282d 100644
--- a/engines/lastexpress/game/beetle.cpp
+++ b/engines/lastexpress/game/beetle.cpp
@@ -20,7 +20,7 @@
*/
#include "lastexpress/data/archive.h"
-
+#include "lastexpress/data/gold_archive.h"
#include "lastexpress/game/beetle.h"
#include "lastexpress/game/logic.h"
diff --git a/engines/lastexpress/game/logic.cpp b/engines/lastexpress/game/logic.cpp
index 0074c0c87ed..7f5cb68357e 100644
--- a/engines/lastexpress/game/logic.cpp
+++ b/engines/lastexpress/game/logic.cpp
@@ -1730,10 +1730,14 @@ void LogicManager::playNIS(int nisId) {
_engine->getGraphicsManager()->_renderBox1.x = 80;
_engine->getGraphicsManager()->_renderBox1.width = 480;
- if (videoWithoutFade) {
- _engine->getNISManager()->doNIS(filename, kNisFlagBaseFlag);
+ if (_engine->isGoldEdition()) {
+ warning("NIS support for Gold Edition is currently missing. Skipping cutscene");
} else {
- _engine->getNISManager()->doNIS(filename, kNisFlagBaseFlag | kNisFlagSoundFade);
+ if (videoWithoutFade) {
+ _engine->getNISManager()->doNIS(filename, kNisFlagBaseFlag);
+ } else {
+ _engine->getNISManager()->doNIS(filename, kNisFlagBaseFlag | kNisFlagSoundFade);
+ }
}
if (dialogRunning("TIMER"))
diff --git a/engines/lastexpress/game/logic.h b/engines/lastexpress/game/logic.h
index c37ec713a29..c7a43a90e28 100644
--- a/engines/lastexpress/game/logic.h
+++ b/engines/lastexpress/game/logic.h
@@ -50,6 +50,7 @@ struct ConsCallParam;
class LogicManager {
friend class ArchiveManager;
+ friend class GoldArchiveManager;
friend class CBeetle;
friend class LastExpressEngine;
friend class MemoryManager;
diff --git a/engines/lastexpress/game/nis.cpp b/engines/lastexpress/game/nis.cpp
index 1ec73a63975..d1e39ca5fce 100644
--- a/engines/lastexpress/game/nis.cpp
+++ b/engines/lastexpress/game/nis.cpp
@@ -518,6 +518,9 @@ void NISManager::showNISStatus(int32 status) {
}
bool NISManager::doNIS(const char *name, int32 flags) {
+ if (_engine->isGoldEdition())
+ return true;
+
Slot *slot;
if (_engine->mouseHasRightClicked())
diff --git a/engines/lastexpress/graphics.h b/engines/lastexpress/graphics.h
index 8ab3e39b822..f9e76578072 100644
--- a/engines/lastexpress/graphics.h
+++ b/engines/lastexpress/graphics.h
@@ -68,6 +68,7 @@ class GraphicsManager {
friend class LogicManager;
friend class SubtitleManager;
friend class ArchiveManager;
+ friend class GoldArchiveManager;
friend class NISManager;
friend class Menu;
friend class SpriteManager;
diff --git a/engines/lastexpress/lastexpress.cpp b/engines/lastexpress/lastexpress.cpp
index 8fb7889e0f1..c38979c4500 100644
--- a/engines/lastexpress/lastexpress.cpp
+++ b/engines/lastexpress/lastexpress.cpp
@@ -22,6 +22,7 @@
#include "lastexpress/lastexpress.h"
#include "lastexpress/game/logic.h"
+#include "lastexpress/data/gold_archive.h"
#include "lastexpress/menu/menu.h"
#include "lastexpress/menu/clock.h"
@@ -51,7 +52,12 @@ LastExpressEngine::LastExpressEngine(OSystem *syst, const ADGameDescription *gd)
// Adding the default directories
const Common::FSNode gameDataDir(ConfMan.getPath("path"));
- SearchMan.addSubDirectoryMatching(gameDataDir, "data");
+
+ if (isGoldEdition()) {
+ SearchMan.addSubDirectoryMatching(gameDataDir, "roms");
+ } else {
+ SearchMan.addSubDirectoryMatching(gameDataDir, "data");
+ }
_soundMutex = new Common::Mutex();
}
@@ -152,7 +158,11 @@ Common::Error LastExpressEngine::run() {
_otisMan = new OtisManager(this);
// Archive manager
- _archiveMan = new ArchiveManager(this);
+ if (isGoldEdition()) {
+ _archiveMan = new GoldArchiveManager(this);
+ } else {
+ _archiveMan = new ArchiveManager(this);
+ }
// Memory manager
_memMan = new MemoryManager(this);
diff --git a/engines/lastexpress/lastexpress.h b/engines/lastexpress/lastexpress.h
index cb139b7d692..cc0c3df2194 100644
--- a/engines/lastexpress/lastexpress.h
+++ b/engines/lastexpress/lastexpress.h
@@ -73,6 +73,7 @@ struct ADGameDescription;
namespace LastExpress {
class ArchiveManager;
+class GoldArchiveManager;
class CBeetle;
class CFight;
class Clock;
@@ -547,6 +548,7 @@ public:
bool handleEvents();
bool isDemo() const;
+ bool isGoldEdition() const;
Common::String getTargetName() const;
diff --git a/engines/lastexpress/metaengine.cpp b/engines/lastexpress/metaengine.cpp
index 98bd5362535..5e592e598bd 100644
--- a/engines/lastexpress/metaengine.cpp
+++ b/engines/lastexpress/metaengine.cpp
@@ -46,6 +46,10 @@ bool LastExpressEngine::isDemo() const {
return (bool)(_gameDescription->flags & ADGF_DEMO);
}
+bool LastExpressEngine::isGoldEdition() const {
+ return (Common::String(_gameDescription->extra) == "Gold Edition");
+}
+
bool LastExpressMetaEngine::hasFeature(MetaEngineFeature f) const {
return f == kSupportsListSaves
|| f == kSupportsDeleteSave;
diff --git a/engines/lastexpress/module.mk b/engines/lastexpress/module.mk
index 924acf7a94d..4de45aabaca 100644
--- a/engines/lastexpress/module.mk
+++ b/engines/lastexpress/module.mk
@@ -61,6 +61,7 @@ MODULE_OBJS := \
characters/yasmin.o \
data/archive.o \
data/cvcrfile.o \
+ data/gold_archive.o \
data/sprites.o \
fight/fight.o \
fight/fighter.o \
@@ -78,7 +79,6 @@ MODULE_OBJS := \
game/logic.o \
game/navigation.o \
game/nis.o \
- game/object.o \
game/otis.o \
game/savegame.o \
game/vcr.o \
@@ -93,8 +93,7 @@ MODULE_OBJS := \
graphics.o \
lastexpress.o \
memory.o \
- metaengine.o \
- resource.o
+ metaengine.o
# This module can be built as a plugin
ifeq ($(ENABLE_LASTEXPRESS), DYNAMIC_PLUGIN)
Commit: 1c9f84a625ad1b8a6480624cf32ec908d8d6ddfc
https://github.com/scummvm/scummvm/commit/1c9f84a625ad1b8a6480624cf32ec908d8d6ddfc
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Cond1 logic
Changed paths:
engines/lastexpress/characters/cond1.cpp
diff --git a/engines/lastexpress/characters/cond1.cpp b/engines/lastexpress/characters/cond1.cpp
index e907bcfaf18..678e16b773a 100644
--- a/engines/lastexpress/characters/cond1.cpp
+++ b/engines/lastexpress/characters/cond1.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_Cond1(int chapter) {
CONS_Cond1_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -69,19 +69,25 @@ void LogicManager::CONS_Cond1_DebugWalks(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_DebugWalks(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterCond1).characterPosition.position = 0;
- getCharacter(kCharacterCond1).characterPosition.location = 0;
- getCharacter(kCharacterCond1).characterPosition.car = kCarGreenSleeping;
- getCharacterCurrentParams(kCharacterCond1)[0] = 10000;
- }
- } else if (walk(kCharacterCond1, kCarGreenSleeping, getCharacterCurrentParams(kCharacterCond1)[0])) {
- if (getCharacterCurrentParams(kCharacterCond1)[0] == 10000) {
- getCharacterCurrentParams(kCharacterCond1)[0] = 0;
- } else {
- getCharacterCurrentParams(kCharacterCond1)[0] = 10000;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterCond1, kCarGreenSleeping, getCharacterCurrentParams(kCharacterCond1)[0])) {
+ if (getCharacterCurrentParams(kCharacterCond1)[0] == 10000) {
+ getCharacterCurrentParams(kCharacterCond1)[0] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterCond1)[0] = 10000;
+ }
}
+
+ break;
+ case 12:
+ getCharacter(kCharacterCond1).characterPosition.position = 0;
+ getCharacter(kCharacterCond1).characterPosition.location = 0;
+ getCharacter(kCharacterCond1).characterPosition.car = kCarGreenSleeping;
+ getCharacterCurrentParams(kCharacterCond1)[0] = 10000;
+ break;
+ default:
+ break;
}
}
@@ -222,7 +228,7 @@ void LogicManager::HAND_Cond1_DoBriefCorrOtis(HAND_PARAMS) {
break;
default:
- return;
+ break;
}
}
@@ -302,7 +308,8 @@ void LogicManager::CONS_Cond1_FinishSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_FinishSeqOtis(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacter(kCharacterCond1).direction == 4) {
if (_gameProgress[kProgressJacket] == 1 &&
nearChar(kCharacterCond1, kCharacterCath, 1000) &&
@@ -316,15 +323,22 @@ void LogicManager::HAND_Cond1_FinishSeqOtis(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
}
- } else if (msg->action == 3) {
+
+ break;
+ case 3:
getCharacter(kCharacterCond1).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 1) {
playNIS(kEventMertensBloodJacket);
endGame(0, 1, 55, true);
}
+
+ break;
+ default:
+ break;
}
}
@@ -368,7 +382,7 @@ void LogicManager::HAND_Cond1_DoDialog(HAND_PARAMS) {
break;
default:
- return;
+ break;
}
}
@@ -412,7 +426,7 @@ void LogicManager::HAND_Cond1_DoDialogFullVol(HAND_PARAMS) {
break;
default:
- return;
+ break;
}
}
@@ -430,11 +444,13 @@ void LogicManager::CONS_Cond1_SaveGame(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_SaveGame(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
getCharacter(kCharacterCond1).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
save(
kCharacterCond1,
getCharacterCurrentParams(kCharacterCond1)[0],
@@ -444,6 +460,9 @@ void LogicManager::HAND_Cond1_SaveGame(HAND_PARAMS) {
getCharacter(kCharacterCond1).currentCall--;
_engine->getMessageManager()->setMessageHandle(3, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -471,7 +490,14 @@ void LogicManager::HAND_Cond1_DoWalk(HAND_PARAMS) {
if (!nearChar(kCharacterCond1, kCharacterCath, 1000) ||
inComp(kCharacterCath) || whoOutside(kCharacterCath)) {
- goto LABEL_67;
+ if (walk(kCharacterCond1, getCharacterCurrentParams(kCharacterCond1)[0], getCharacterCurrentParams(kCharacterCond1)[1])) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ }
+
+ break;
}
if (_gameProgress[kProgressJacket] == 1) {
@@ -484,8 +510,16 @@ void LogicManager::HAND_Cond1_DoWalk(HAND_PARAMS) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensAugustWaiting, 0, 0);
} else {
- if (!getCharacterParams(kCharacterCond1, 8)[19] || _gameTime >= 2133000)
- goto LABEL_67;
+ if (!getCharacterParams(kCharacterCond1, 8)[19] || _gameTime >= 2133000) {
+ if (walk(kCharacterCond1, getCharacterCurrentParams(kCharacterCond1)[0], getCharacterCurrentParams(kCharacterCond1)[1])) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ }
+
+ break;
+ }
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensKronosConcertInvitation, 0, 0);
@@ -530,7 +564,7 @@ void LogicManager::HAND_Cond1_DoWalk(HAND_PARAMS) {
case 1:
playNIS(kEventMertensBloodJacket);
endGame(0, 1, 55, true);
- return;
+ break;
case 2:
if (getCharacter(kCharacterCond1).characterPosition.position < getCharacter(kCharacterCath).characterPosition.position) {
playNIS(kEventMertensKronosInvitation);
@@ -547,70 +581,88 @@ void LogicManager::HAND_Cond1_DoWalk(HAND_PARAMS) {
getCharacter(kCharacterCond1).inventoryItem = kItemNone;
if (getCharacter(kCharacterCond1).characterPosition.car == kCarGreenSleeping && nearX(kCharacterCond1, 2000, 500))
getCharacter(kCharacterCond1).characterPosition.position = 2500;
- goto LABEL_53;
+
+ walk(kCharacterCond1, kCharacterCond1, 2000);
+ bumpCathRx(getCharacter(kCharacterCond1).characterPosition.car, getCharacter(kCharacterCond1).characterPosition.position + 750);
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
}
}
- if (getCharacter(kCharacterCond1).direction != 1)
- goto LABEL_66;
-
- goto LABEL_65;
+ if (getCharacter(kCharacterCond1).direction == 1)
+ bumpCathFx(getCharacter(kCharacterCond1).characterPosition.car, getCharacter(kCharacterCond1).characterPosition.position - 750);
+ else
+ bumpCathRx(getCharacter(kCharacterCond1).characterPosition.car, getCharacter(kCharacterCond1).characterPosition.position + 750);
break;
case 3:
playNIS(kEventMertensAugustWaiting);
_gameProgress[kProgressEventMertensAugustWaiting] = 1;
getCharacterParams(kCharacterCond1, 8)[9] = 0;
+
if (getCharacterCurrentParams(kCharacterCond1)[0] == 3 && getCharacterCurrentParams(kCharacterCond1)[1] == 8200) {
if (getCharacter(kCharacterCond1).characterPosition.car == kCarGreenSleeping && nearX(kCharacterCond1, 2000, 500))
getCharacter(kCharacterCond1).characterPosition.position = 2500;
- LABEL_53:
+
walk(kCharacterCond1, kCharacterCond1, 2000);
bumpCathRx(getCharacter(kCharacterCond1).characterPosition.car, getCharacter(kCharacterCond1).characterPosition.position + 750);
getCharacter(kCharacterCond1).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
- return;
+ break;
}
+
if (getCharacter(kCharacterCond1).direction == 1)
- LABEL_65:
bumpCathFx(getCharacter(kCharacterCond1).characterPosition.car, getCharacter(kCharacterCond1).characterPosition.position - 750);
else
- LABEL_66:
bumpCathRx(getCharacter(kCharacterCond1).characterPosition.car, getCharacter(kCharacterCond1).characterPosition.position + 750);
+
break;
case 4:
playNIS(kEventMertensKronosConcertInvitation);
getCharacterParams(kCharacterCond1, 8)[19] = 0;
+
if (getCharacter(kCharacterCond1).direction == 1)
- goto LABEL_65;
- goto LABEL_66;
+ bumpCathFx(getCharacter(kCharacterCond1).characterPosition.car, getCharacter(kCharacterCond1).characterPosition.position - 750);
+ else
+ bumpCathRx(getCharacter(kCharacterCond1).characterPosition.car, getCharacter(kCharacterCond1).characterPosition.position + 750);
+
+ break;
case 5:
- playNIS(
- (getCharacter(kCharacterCond1).characterPosition.position < getCharacter(kCharacterCath).characterPosition.position) + kEventMertensAskTylerCompartment);
+ if (getCharacter(kCharacterCond1).characterPosition.position < getCharacter(kCharacterCath).characterPosition.position)
+ playNIS(kEventMertensAskTylerCompartmentD);
+ else
+ playNIS(kEventMertensAskTylerCompartment);
+
if (getCharacter(kCharacterCond1).direction == 1)
bumpCathFx(getCharacter(kCharacterCond1).characterPosition.car, getCharacter(kCharacterCond1).characterPosition.position - 750);
else
bumpCathRx(getCharacter(kCharacterCond1).characterPosition.car, getCharacter(kCharacterCond1).characterPosition.position + 750);
- return;
+
+ break;
case 6:
playNIS(kEventMertensDontMakeBed);
+
if (getCharacter(kCharacterCond1).direction == 1)
bumpCathFx(getCharacter(kCharacterCond1).characterPosition.car, getCharacter(kCharacterCond1).characterPosition.position - 750);
else
bumpCathRx(getCharacter(kCharacterCond1).characterPosition.car, getCharacter(kCharacterCond1).characterPosition.position + 750);
+
getCharacterParams(kCharacterCond1, 8)[3] = 0;
- return;
+ break;
default:
- return;
+ break;
}
- LABEL_67:
+
if (walk(kCharacterCond1, getCharacterCurrentParams(kCharacterCond1)[0], getCharacterCurrentParams(kCharacterCond1)[1])) {
getCharacter(kCharacterCond1).inventoryItem = kItemNone;
getCharacter(kCharacterCond1).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
}
+
break;
default:
break;
@@ -630,25 +682,21 @@ void LogicManager::CONS_Cond1_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_DoWait(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 18 && getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 1) {
- playNIS(kEventMertensBloodJacket);
- endGame(0, 1, 55, true);
- }
- } else {
+ switch (msg->action) {
+ case 0:
if (_gameProgress[kProgressJacket] == 1 &&
nearChar(kCharacterCond1, kCharacterCath, 1000) &&
!inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
- return;
+ break;
}
if (getCharacterCurrentParams(kCharacterCond1)[1] ||
(getCharacterCurrentParams(kCharacterCond1)[1] = _gameTime + getCharacterCurrentParams(kCharacterCond1)[0], _gameTime + getCharacterCurrentParams(kCharacterCond1)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterCond1)[1] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterCond1)[1] = 0x7FFFFFFF;
}
@@ -656,6 +704,16 @@ void LogicManager::HAND_Cond1_DoWait(HAND_PARAMS) {
getCharacter(kCharacterCond1).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 1) {
+ playNIS(kEventMertensBloodJacket);
+ endGame(0, 1, 55, true);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -672,7 +730,8 @@ void LogicManager::CONS_Cond1_StandAsideDialog(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_StandAsideDialog(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (!whoRunningDialog(kCharacterCond1)) {
if (isNight()) {
if (!isFemale(getCharacterCurrentParams(kCharacterCond1)[0])) {
@@ -723,6 +782,9 @@ void LogicManager::HAND_Cond1_StandAsideDialog(HAND_PARAMS) {
getCharacter(kCharacterCond1).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -747,72 +809,91 @@ void LogicManager::HAND_Cond1_Passing(HAND_PARAMS) {
!inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
- return;
- }
- if (getCharacterCurrentParams(kCharacterCond1)[1] || getCharacterCurrentParams(kCharacterCond1)[2])
- goto LABEL_15;
- if (!getCharacterCurrentParams(kCharacterCond1)[3]) {
- getCharacterCurrentParams(kCharacterCond1)[3] = _currentGameSessionTicks + 75;
- if (_currentGameSessionTicks + 75 == 0)
- goto LABEL_14;
+ break;
}
- if (getCharacterCurrentParams(kCharacterCond1)[3] < _currentGameSessionTicks) {
- getCharacterCurrentParams(kCharacterCond1)[3] = 0x7FFFFFFF;
- LABEL_14:
- getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
- Cond1Call(&LogicManager::CONS_Cond1_SitDownFast, 0, 0, 0, 0);
- return;
+ if (!getCharacterCurrentParams(kCharacterCond1)[1] && !getCharacterCurrentParams(kCharacterCond1)[2]) {
+ if (!getCharacterCurrentParams(kCharacterCond1)[3]) {
+ getCharacterCurrentParams(kCharacterCond1)[3] = _currentGameSessionTicks + 75;
+ if (_currentGameSessionTicks + 75 == 0) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
+ Cond1Call(&LogicManager::CONS_Cond1_SitDownFast, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterCond1)[3] < _currentGameSessionTicks) {
+ getCharacterCurrentParams(kCharacterCond1)[3] = 0x7FFFFFFF;
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
+ Cond1Call(&LogicManager::CONS_Cond1_SitDownFast, 0, 0, 0, 0);
+ break;
+ }
}
- LABEL_15:
+
if (!getCharacterCurrentParams(kCharacterCond1)[4]) {
getCharacterCurrentParams(kCharacterCond1)[4] = _currentGameSessionTicks + 225;
- if (_currentGameSessionTicks + 225 == 0)
- goto LABEL_19;
+ if (_currentGameSessionTicks + 225 == 0) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
+ Cond1Call(&LogicManager::CONS_Cond1_SitDownFast, 0, 0, 0, 0);
+ break;
+ }
}
+
if (getCharacterCurrentParams(kCharacterCond1)[4] >= _currentGameSessionTicks) {
getCharacter(kCharacterCond1).inventoryItem = _gameProgress[kProgressChapter] == 1 && !getCharacterParams(kCharacterCond1, 8)[16] && !_gameProgress[kProgressEventFoundCorpse] && !_gameEvents[kEventMertensAskTylerCompartment] && !_gameEvents[kEventMertensAskTylerCompartmentD];
} else {
getCharacterCurrentParams(kCharacterCond1)[4] = 0x7FFFFFFF;
- LABEL_19:
getCharacter(kCharacterCond1).inventoryItem = kItemNone;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
Cond1Call(&LogicManager::CONS_Cond1_SitDownFast, 0, 0, 0, 0);
}
- return;
+
+ break;
case 1:
getCharacter(kCharacterCond1).inventoryItem = kItemNone;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensAskTylerCompartmentD, 0, 0);
- return;
+ break;
case 11:
- ++getCharacterCurrentParams(kCharacterCond1)[2];
+ getCharacterCurrentParams(kCharacterCond1)[2]++;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 11;
Cond1Call(&LogicManager::CONS_Cond1_StandAsideDialog, msg->sender, 0, 0, 0);
- return;
+ break;
case 12:
if (getCharacterCurrentParams(kCharacterCond1)[1])
getCharacterCurrentParams(kCharacterCond1)[2] = 1;
- if (whoRunningDialog(kCharacterCond1))
- goto LABEL_40;
+
+ if (whoRunningDialog(kCharacterCond1)) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
+ Cond1Call(&LogicManager::CONS_Cond1_GetUpListen, 0, 0, 0, 0);
+ break;
+ }
+
if (_gameProgress[kProgressChapter] == 3 && !getCharacterCurrentParams(kCharacterCond1)[0] && _gameTime < 2173500 && (_gameTime > 2106000 || getCharacterCurrentParams(kCharacterCond1)[1] && _gameTime > 2079000)) {
if (getCharacterCurrentParams(kCharacterCond1)[1] == 2) {
playDialog(kCharacterCond1, "CON3052", -1, 0);
- LABEL_40:
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
Cond1Call(&LogicManager::CONS_Cond1_GetUpListen, 0, 0, 0, 0);
- return;
+ break;
}
+
if (isFemale(getCharacterCurrentParams(kCharacterCond1)[1])) {
playDialog(kCharacterCond1, "CON3051", -1, 0);
- goto LABEL_40;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
+ Cond1Call(&LogicManager::CONS_Cond1_GetUpListen, 0, 0, 0, 0);
+ break;
}
if (!getCharacterCurrentParams(kCharacterCond1)[1]) {
if (_gameProgress[kProgressField40])
playDialog(kCharacterCond1, "CON3054", -1, 0);
else
playDialog(kCharacterCond1, "CON3053", -1, 0);
- goto LABEL_40;
+
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
+ Cond1Call(&LogicManager::CONS_Cond1_GetUpListen, 0, 0, 0, 0);
+ break;
}
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
Cond1Call(&LogicManager::CONS_Cond1_StandAsideDialog, getCharacterCurrentParams(kCharacterCond1)[1], 0, 0, 0);
@@ -820,6 +901,7 @@ void LogicManager::HAND_Cond1_Passing(HAND_PARAMS) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
Cond1Call(&LogicManager::CONS_Cond1_StandAsideDialog, getCharacterCurrentParams(kCharacterCond1)[1], 0, 0, 0);
}
+
break;
case 16:
getCharacterCurrentParams(kCharacterCond1)[2]--;
@@ -835,19 +917,21 @@ void LogicManager::HAND_Cond1_Passing(HAND_PARAMS) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensKronosInvitation, 0, 0);
} else {
- LABEL_64:
if (!getCharacterCurrentParams(kCharacterCond1)[2]) {
getCharacter(kCharacterCond1).inventoryItem = kItemNone;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
Cond1Call(&LogicManager::CONS_Cond1_SitDownFast, 0, 0, 0, 0);
}
}
- return;
+
+ break;
case 18:
switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
case 1:
case 2:
- goto LABEL_40;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
+ Cond1Call(&LogicManager::CONS_Cond1_GetUpListen, 0, 0, 0, 0);
+ break;
case 3:
if (!getCharacterCurrentParams(kCharacterCond1)[0]) {
startCycOtis(kCharacterCond1, "601H");
@@ -870,20 +954,28 @@ void LogicManager::HAND_Cond1_Passing(HAND_PARAMS) {
break;
case 7:
playNIS(kEventMertensAskTylerCompartmentD);
- bumpCath(3, 25, 255);
+ bumpCath(kCarGreenSleeping, 25, 255);
break;
case 8:
playNIS(kEventMertensKronosInvitation);
getCharacterParams(kCharacterCond1, 8)[6] = 0;
getCharacterParams(kCharacterCond1, 8)[5] = 0;
cleanNIS();
- goto LABEL_64;
+
+ if (!getCharacterCurrentParams(kCharacterCond1)[2]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
+ Cond1Call(&LogicManager::CONS_Cond1_SitDownFast, 0, 0, 0, 0);
+ }
+
+ break;
default:
- return;
+ break;
}
- return;
+
+ break;
default:
- return;
+ break;
}
}
@@ -900,43 +992,17 @@ void LogicManager::CONS_Cond1_Listen(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_Listen(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
- case 1:
- send(kCharacterCond1, getCharacterCurrentParams(kCharacterCond1)[0], 202558662, 0);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
- Cond1Call(&LogicManager::CONS_Cond1_GetUpListen, 0, 0, 0, 0);
- break;
- case 2:
- send(kCharacterCond1, getCharacterCurrentParams(kCharacterCond1)[0], 155853632, 0);
- startCycOtis(kCharacterCond1, "601K");
- break;
- case 3:
- send(kCharacterCond1, getCharacterCurrentParams(kCharacterCond1)[0], 202558662, 0);
- send(kCharacterCond1, getCharacterCurrentParams(kCharacterCond1)[0], 155853632, 0);
- startCycOtis(kCharacterCond1, "601K");
- takeItem(kItem7);
- break;
- case 4:
- playNIS(kEventMertensBloodJacket);
- endGame(0, 1, 55, true);
- break;
- case 5:
- getCharacter(kCharacterCond1).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
- fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
- break;
- default:
- return;
- }
- } else if (msg->action == 125499160) {
- if (getCharacterCurrentParams(kCharacterCond1)[0] == 9)
- getCharacterParams(kCharacterCond1, 8)[7] = 0;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
- Cond1Call(&LogicManager::CONS_Cond1_SitDownFast, 0, 0, 0, 0);
+ switch (msg->action) {
+ case 0:
+ if (_gameProgress[kProgressJacket] == 1 &&
+ nearChar(kCharacterCond1, kCharacterCath, 1000) &&
+ !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
getCharacter(kCharacterCond1).inventoryItem = kItemNone;
if (getCharacterParams(kCharacterCond1, 8)[16]) {
getCharacterParams(kCharacterCond1, 8)[16] = 0;
@@ -946,11 +1012,48 @@ void LogicManager::HAND_Cond1_Listen(HAND_PARAMS) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
Cond1Call(&LogicManager::CONS_Cond1_DoWait, 15, 0, 0, 0);
}
- } else if (msg->action == 0 && _gameProgress[kProgressJacket] == 1 &&
- nearChar(kCharacterCond1, kCharacterCath, 1000) &&
- !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
- Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, 123, 0, 0);
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
+ case 1:
+ send(kCharacterCond1, getCharacterCurrentParams(kCharacterCond1)[0], 202558662, 0);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
+ Cond1Call(&LogicManager::CONS_Cond1_GetUpListen, 0, 0, 0, 0);
+ break;
+ case 2:
+ send(kCharacterCond1, getCharacterCurrentParams(kCharacterCond1)[0], 155853632, 0);
+ startCycOtis(kCharacterCond1, "601K");
+ break;
+ case 3:
+ send(kCharacterCond1, getCharacterCurrentParams(kCharacterCond1)[0], 202558662, 0);
+ send(kCharacterCond1, getCharacterCurrentParams(kCharacterCond1)[0], 155853632, 0);
+ startCycOtis(kCharacterCond1, "601K");
+ takeItem(kItem7);
+ break;
+ case 4:
+ playNIS(kEventMertensBloodJacket);
+ endGame(0, 1, 55, true);
+ break;
+ case 5:
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 125499160:
+ if (getCharacterCurrentParams(kCharacterCond1)[0] == 9)
+ getCharacterParams(kCharacterCond1, 8)[7] = 0;
+
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
+ Cond1Call(&LogicManager::CONS_Cond1_SitDownFast, 0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -965,12 +1068,14 @@ void LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_AlexeiLockUnlockMyComp(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacterParams(kCharacterCond1, 8)[11] = 0;
getCharacterParams(kCharacterCond1, 8)[12] = 0;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
Cond1Call(&LogicManager::CONS_Cond1_GetUp, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
@@ -1005,8 +1110,12 @@ void LogicManager::HAND_Cond1_AlexeiLockUnlockMyComp(HAND_PARAMS) {
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1023,12 +1132,14 @@ void LogicManager::CONS_Cond1_AugustLockUnlockMyComp(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_AugustLockUnlockMyComp(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacterParams(kCharacterCond1, 8)[14] = 0;
getCharacterParams(kCharacterCond1, 8)[13] = 0;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
Cond1Call(&LogicManager::CONS_Cond1_GetUp, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
@@ -1080,8 +1191,12 @@ void LogicManager::HAND_Cond1_AugustLockUnlockMyComp(HAND_PARAMS) {
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1098,7 +1213,8 @@ void LogicManager::CONS_Cond1_SitDown(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_SitDown(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (getCharacterParams(kCharacterCond1, 8)[5] ||
getCharacterParams(kCharacterCond1, 8)[9] ||
getCharacterParams(kCharacterCond1, 8)[13] ||
@@ -1139,7 +1255,9 @@ void LogicManager::HAND_Cond1_SitDown(HAND_PARAMS) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
Cond1Call(&LogicManager::CONS_Cond1_FinishSeqOtis, 0, 0, 0, 0);
}
- } else if (msg->action == 18) {
+
+ break;
+ case 18:
switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
case 1:
endGraphics(kCharacterCond1);
@@ -1170,6 +1288,10 @@ void LogicManager::HAND_Cond1_SitDown(HAND_PARAMS) {
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1184,14 +1306,15 @@ void LogicManager::CONS_Cond1_SitDownFast(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_SitDownFast(HAND_PARAMS) {
- if (msg->action == 12) {
- if (getCharacterParams(kCharacterCond1, 8)[5] ||
- getCharacterParams(kCharacterCond1, 8)[9] ||
+ switch (msg->action) {
+ case 12:
+ if (getCharacterParams(kCharacterCond1, 8)[5] ||
+ getCharacterParams(kCharacterCond1, 8)[9] ||
getCharacterParams(kCharacterCond1, 8)[13] ||
getCharacterParams(kCharacterCond1, 8)[14] ||
getCharacterParams(kCharacterCond1, 8)[11] ||
getCharacterParams(kCharacterCond1, 8)[12] ||
- getCharacterParams(kCharacterCond1, 8)[8] ||
+ getCharacterParams(kCharacterCond1, 8)[8] ||
getCharacterParams(kCharacterCond1, 8)[10] ||
getCharacterParams(kCharacterCond1, 8)[15]) {
@@ -1223,7 +1346,9 @@ void LogicManager::HAND_Cond1_SitDownFast(HAND_PARAMS) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
Cond1Call(&LogicManager::CONS_Cond1_FinishSeqOtis, 0, 0, 0, 0);
}
- } else if (msg->action == 18) {
+
+ break;
+ case 18:
if (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 1) {
if (!getCharacterParams(kCharacterCond1, 8)[2] && !cathHasItem(kItemPassengerList)) {
if (getCharacterParams(kCharacterCond1, 8)[1]) {
@@ -1240,6 +1365,10 @@ void LogicManager::HAND_Cond1_SitDownFast(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -1254,7 +1383,8 @@ void LogicManager::CONS_Cond1_GetUp(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_GetUp(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (getCharacterParams(kCharacterCond1, 8)[16]) {
dropItem(kItem7, 1);
getCharacterParams(kCharacterCond1, 8)[16] = 0;
@@ -1266,14 +1396,20 @@ void LogicManager::HAND_Cond1_GetUp(HAND_PARAMS) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
Cond1Call(&LogicManager::CONS_Cond1_DoSeqOtis, "601C", 0, 0, 0);
}
- } else if (msg->action == 18 && getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 1) {
- dropItem(kItem7, 1);
- if (!checkCathDir(kCarGreenSleeping, 2))
- getCharacter(kCharacterCond1).characterPosition.position = 2088;
- getCharacter(kCharacterCond1).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
- fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 1) {
+ dropItem(kItem7, 1);
+ if (!checkCathDir(kCarGreenSleeping, 2))
+ getCharacter(kCharacterCond1).characterPosition.position = 2088;
+
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ }
+
+ break;
}
}
@@ -1288,7 +1424,8 @@ void LogicManager::CONS_Cond1_GetUpListen(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_GetUpListen(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
takeItem(kItem7);
if (getCharacterParams(kCharacterCond1, 8)[16]) {
@@ -1300,12 +1437,18 @@ void LogicManager::HAND_Cond1_GetUpListen(HAND_PARAMS) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
Cond1Call(&LogicManager::CONS_Cond1_DoSeqOtis, "601C", 0, 0, 0);
}
- } else if (msg->action == 18) {
+
+ break;
+ case 18:
if (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 1) {
getCharacter(kCharacterCond1).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -1325,21 +1468,26 @@ void LogicManager::CONS_Cond1_MakeBed(CONS_PARAMS) {
void LogicManager::HAND_Cond1_MakeBed(HAND_PARAMS) {
switch (msg->action) {
case 0:
+ {
+ bool skip = false; // Horrible way to unroll a goto...
+
if (!getCharacterCurrentParams(kCharacterCond1)[11]) {
getCharacterCurrentParams(kCharacterCond1)[11] = _gameTime + 300;
- if (_gameTime + 300 == 0)
- goto LABEL_7;
+ if (_gameTime + 300 == 0) {
+ skip = true;
+ playDialog(0, "ZFX1004", getVolume(kCharacterCond1), 0);
+ }
}
- if (getCharacterCurrentParams(kCharacterCond1)[11] < _gameTime) {
+ if (!skip && getCharacterCurrentParams(kCharacterCond1)[11] < _gameTime) {
getCharacterCurrentParams(kCharacterCond1)[11] = 0x7FFFFFFF;
- LABEL_7:
playDialog(0, "ZFX1004", getVolume(kCharacterCond1), 0);
}
if (getCharacterCurrentParams(kCharacterCond1)[12] || (getCharacterCurrentParams(kCharacterCond1)[12] = _gameTime + 900, _gameTime != -900)) {
if (getCharacterCurrentParams(kCharacterCond1)[12] >= _gameTime)
- return;
+ break;
+
getCharacterCurrentParams(kCharacterCond1)[12] = 0x7FFFFFFF;
}
@@ -1350,11 +1498,12 @@ void LogicManager::HAND_Cond1_MakeBed(HAND_PARAMS) {
if (getCharacterCurrentParams(kCharacterCond1)[1])
setDoor(getCharacterCurrentParams(kCharacterCond1)[1], getCharacterCurrentParams(kCharacterCond1)[7], getCharacterCurrentParams(kCharacterCond1)[8], getCharacterCurrentParams(kCharacterCond1)[9], getCharacterCurrentParams(kCharacterCond1)[10]);
+
getCharacter(kCharacterCond1).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
-
break;
+ }
case 8:
case 9:
setDoor(getCharacterCurrentParams(kCharacterCond1)[0], kCharacterCond1, 1, 0, 0);
@@ -1431,15 +1580,12 @@ void LogicManager::CONS_Cond1_MakeBedMahmud(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_MakeBedMahmud(HAND_PARAMS) {
- if (msg->action > 18) {
- if (msg->action == 102227384) {
- startCycOtis(kCharacterCond1, "671Dh");
- } else if (msg->action == 156567128) {
- softReleaseAtDoor(kCharacterCond1, 8);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 5790, 0, 0);
- }
- } else if (msg->action == 18) {
+ switch (msg->action) {
+ case 12:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2740, 0, 0);
+ break;
+ case 18:
switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
@@ -1492,9 +1638,18 @@ void LogicManager::HAND_Cond1_MakeBedMahmud(HAND_PARAMS) {
default:
break;
}
- } else if (msg->action == 12) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2740, 0, 0);
+
+ break;
+ case 102227384:
+ startCycOtis(kCharacterCond1, "671Dh");
+ break;
+ case 156567128:
+ softReleaseAtDoor(kCharacterCond1, 8);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 5790, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1509,10 +1664,12 @@ void LogicManager::CONS_Cond1_MakeBedMahmud2(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_MakeBedMahmud2(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 5790, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
@@ -1547,8 +1704,12 @@ void LogicManager::HAND_Cond1_MakeBedMahmud2(HAND_PARAMS) {
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1563,86 +1724,95 @@ void LogicManager::CONS_Cond1_MakeBedAugust(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_MakeBedAugust(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action > 100906246) {
- if (msg->action == 102675536) {
- getCharacterCurrentParams(kCharacterCond1)[0] = 1;
- } else if (msg->action == 156567128) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
- Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "601Tc", 3, 0, 0);
- }
- } else if (msg->action == 100906246) {
- send(kCharacterCond1, kCharacterAugust, 192849856, 0);
- startCycOtis(kCharacterCond1, "601Qc");
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
- Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "601Mc", 3, 0, 0);
- break;
- case 2:
- send(kCharacterCond1, kCharacterAugust, 221617184, 0);
- startCycOtis(kCharacterCond1, "601Nc");
- softBlockAtDoor(kCharacterCond1, 3);
- break;
- case 3:
- softReleaseAtDoor(kCharacterCond1, 3);
- getCharacter(kCharacterCond1).characterPosition.location = 1;
- endGraphics(kCharacterCond1);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
- Cond1Call(&LogicManager::CONS_Cond1_MakeBed, 3, 19, 0, 0);
- break;
- case 4:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
- Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "601Sc", 3, 0, 0);
- break;
- case 5:
- getCharacter(kCharacterCond1).characterPosition.location = 0;
- getCharacter(kCharacterCond1).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
- fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
- break;
- case 6:
- softReleaseAtDoor(kCharacterCond1, 3);
- setDoor(3, kCharacterCath, 2, 255, 255);
- getCharacter(kCharacterCond1).characterPosition.location = 1;
- endGraphics(kCharacterCond1);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
- Cond1Call(&LogicManager::CONS_Cond1_MakeBed, 3, 19, 0, 0);
- break;
- case 7:
- setDoor(3, kCharacterCath, 1, 255, 255);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
- Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "601Uc", 3, 0, 0);
- break;
- case 8:
- getCharacter(kCharacterCond1).characterPosition.location = 0;
- send(kCharacterCond1, kCharacterAugust, 124697504, 0);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 540, 0, 0);
- break;
- case 9:
- getCharacter(kCharacterCond1).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
- fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
- break;
- default:
- break;
+ switch (msg->action) {
+ case 0:
+ if (!getCharacterCurrentParams(kCharacterCond1)[0]) {
+ if (getCharacterCurrentParams(kCharacterCond1)[1] || (getCharacterCurrentParams(kCharacterCond1)[1] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterCond1)[1] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterCond1)[1] = 0x7FFFFFFF;
}
+
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
+ Cond1Call(&LogicManager::CONS_Cond1_DoEnterCorrOtis, "601Rc", 3, 6470, 6130);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 6470, 0, 0);
- } else if (msg->action == 0 && !getCharacterCurrentParams(kCharacterCond1)[0]) {
- if (getCharacterCurrentParams(kCharacterCond1)[1] || (getCharacterCurrentParams(kCharacterCond1)[1] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterCond1)[1] >= _currentGameSessionTicks)
- return;
-
- getCharacterCurrentParams(kCharacterCond1)[1] = 0x7FFFFFFF;
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
+ Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "601Mc", 3, 0, 0);
+ break;
+ case 2:
+ send(kCharacterCond1, kCharacterAugust, 221617184, 0);
+ startCycOtis(kCharacterCond1, "601Nc");
+ softBlockAtDoor(kCharacterCond1, 3);
+ break;
+ case 3:
+ softReleaseAtDoor(kCharacterCond1, 3);
+ getCharacter(kCharacterCond1).characterPosition.location = 1;
+ endGraphics(kCharacterCond1);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
+ Cond1Call(&LogicManager::CONS_Cond1_MakeBed, 3, 19, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
+ Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "601Sc", 3, 0, 0);
+ break;
+ case 5:
+ getCharacter(kCharacterCond1).characterPosition.location = 0;
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ case 6:
+ softReleaseAtDoor(kCharacterCond1, 3);
+ setDoor(3, kCharacterCath, 2, 255, 255);
+ getCharacter(kCharacterCond1).characterPosition.location = 1;
+ endGraphics(kCharacterCond1);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
+ Cond1Call(&LogicManager::CONS_Cond1_MakeBed, 3, 19, 0, 0);
+ break;
+ case 7:
+ setDoor(3, kCharacterCath, 1, 255, 255);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
+ Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "601Uc", 3, 0, 0);
+ break;
+ case 8:
+ getCharacter(kCharacterCond1).characterPosition.location = 0;
+ send(kCharacterCond1, kCharacterAugust, 124697504, 0);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 540, 0, 0);
+ break;
+ case 9:
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ default:
+ break;
}
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
- Cond1Call(&LogicManager::CONS_Cond1_DoEnterCorrOtis, "601Rc", 3, 6470, 6130);
+ break;
+ case 100906246:
+ send(kCharacterCond1, kCharacterAugust, 192849856, 0);
+ startCycOtis(kCharacterCond1, "601Qc");
+ break;
+ case 102675536:
+ getCharacterCurrentParams(kCharacterCond1)[0] = 1;
+ break;
+ case 156567128:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
+ Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "601Tc", 3, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1657,103 +1827,107 @@ void LogicManager::CONS_Cond1_MakeBedAlexei(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_MakeBedAlexei(HAND_PARAMS) {
- if (msg->action > 12) {
- switch (msg->action) {
- case 18:
- switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
- Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "601Vb", 2, 0, 0);
- break;
- case 2:
- send(kCharacterCond1, kCharacterAlexei, 221617184, 0);
- startCycOtis(kCharacterCond1, "601Wb");
- softBlockAtDoor(kCharacterCond1, 2);
- break;
- case 3:
- softReleaseAtDoor(kCharacterCond1, 2);
- getCharacter(kCharacterCond1).characterPosition.location = 1;
- endGraphics(kCharacterCond1);
+ switch (msg->action) {
+ case 0:
+ if (!getCharacterCurrentParams(kCharacterCond1)[0]) {
+ if (getCharacterCurrentParams(kCharacterCond1)[1] ||
+ (getCharacterCurrentParams(kCharacterCond1)[1] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterCond1)[1] >= _currentGameSessionTicks)
+ break;
- if (_gameProgress[kProgressChapter] == 1 &&
- getCharacterParams(kCharacterCond1, 8)[3] &&
- _gameProgress[kProgressField14] != 29) {
- _gameProgress[kProgressField14] = 3;
- }
+ getCharacterCurrentParams(kCharacterCond1)[1] = 0x7FFFFFFF;
+ }
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
- Cond1Call(&LogicManager::CONS_Cond1_MakeBed, 2, 18, 0, 0);
- break;
- case 4:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
- Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "671Ab", 2, 0, 0);
- break;
- case 5:
- getCharacter(kCharacterCond1).characterPosition.location = 0;
- getCharacter(kCharacterCond1).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
- fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
- break;
- case 6:
- softReleaseAtDoor(kCharacterCond1, 2);
- setDoor(2, kCharacterCath, 2, 255, 255);
- getCharacter(kCharacterCond1).characterPosition.location = 1;
- endGraphics(kCharacterCond1);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
+ Cond1Call(&LogicManager::CONS_Cond1_DoEnterCorrOtis, "601Zb", 2, 7500, 0);
+ }
- if (_gameProgress[kProgressChapter] == 1 &&
- getCharacterParams(kCharacterCond1, 8)[3] &&
- _gameProgress[kProgressField14] != 29) {
- _gameProgress[kProgressField14] = 3;
- }
+ break;
+ case 12:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 7500, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
+ Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "601Vb", 2, 0, 0);
+ break;
+ case 2:
+ send(kCharacterCond1, kCharacterAlexei, 221617184, 0);
+ startCycOtis(kCharacterCond1, "601Wb");
+ softBlockAtDoor(kCharacterCond1, 2);
+ break;
+ case 3:
+ softReleaseAtDoor(kCharacterCond1, 2);
+ getCharacter(kCharacterCond1).characterPosition.location = 1;
+ endGraphics(kCharacterCond1);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
- Cond1Call(&LogicManager::CONS_Cond1_MakeBed, 2, 0x12, 0, 0);
- break;
- case 7:
- playDialog(kCharacterCond1, "Con1024A", -1, 0);
- setDoor(2, kCharacterCath, 1, 255, 255);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
- Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "641Ub", 2, 0, 0);
- break;
- case 8:
- getCharacter(kCharacterCond1).characterPosition.location = 0;
- send(kCharacterCond1, kCharacterAlexei, 124697504, 0);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 9460, 0, 0);
- break;
- case 9:
- getCharacter(kCharacterCond1).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
- fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
- break;
- default:
- break;
+ if (_gameProgress[kProgressChapter] == 1 &&
+ getCharacterParams(kCharacterCond1, 8)[3] &&
+ _gameProgress[kProgressField14] != 29) {
+ _gameProgress[kProgressField14] = 3;
}
+
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
+ Cond1Call(&LogicManager::CONS_Cond1_MakeBed, 2, 18, 0, 0);
break;
- case 100906246:
- getCharacterCurrentParams(kCharacterCond1)[0] = 1;
- break;
- case 156567128:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
- Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "641Tb", 2, 0, 0);
+ case 4:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
+ Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "671Ab", 2, 0, 0);
break;
- default:
+ case 5:
+ getCharacter(kCharacterCond1).characterPosition.location = 0;
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
break;
- }
- } else if (msg->action == 12) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 7500, 0, 0);
- } else if (msg->action == 0 && !getCharacterCurrentParams(kCharacterCond1)[0]) {
- if (getCharacterCurrentParams(kCharacterCond1)[1] ||
- (getCharacterCurrentParams(kCharacterCond1)[1] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterCond1)[1] >= _currentGameSessionTicks)
- return;
+ case 6:
+ softReleaseAtDoor(kCharacterCond1, 2);
+ setDoor(2, kCharacterCath, 2, 255, 255);
+ getCharacter(kCharacterCond1).characterPosition.location = 1;
+ endGraphics(kCharacterCond1);
- getCharacterCurrentParams(kCharacterCond1)[1] = 0x7FFFFFFF;
+ if (_gameProgress[kProgressChapter] == 1 &&
+ getCharacterParams(kCharacterCond1, 8)[3] &&
+ _gameProgress[kProgressField14] != 29) {
+ _gameProgress[kProgressField14] = 3;
+ }
+
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
+ Cond1Call(&LogicManager::CONS_Cond1_MakeBed, 2, 0x12, 0, 0);
+ break;
+ case 7:
+ playDialog(kCharacterCond1, "Con1024A", -1, 0);
+ setDoor(2, kCharacterCath, 1, 255, 255);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
+ Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "641Ub", 2, 0, 0);
+ break;
+ case 8:
+ getCharacter(kCharacterCond1).characterPosition.location = 0;
+ send(kCharacterCond1, kCharacterAlexei, 124697504, 0);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 9460, 0, 0);
+ break;
+ case 9:
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ default:
+ break;
}
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
- Cond1Call(&LogicManager::CONS_Cond1_DoEnterCorrOtis, "601Zb", 2, 7500, 0);
+ break;
+ case 100906246:
+ getCharacterCurrentParams(kCharacterCond1)[0] = 1;
+ break;
+ case 156567128:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
+ Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "641Tb", 2, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1770,7 +1944,8 @@ void LogicManager::CONS_Cond1_SubMakeBed(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_SubMakeBed(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (!_gameProgress[kProgressEventCorpseThrown] &&
getCharacterCurrentParams(kCharacterCond1)[0] &&
_gameProgress[kProgressChapter] == 1 && _gameProgress[kProgressJacket] == 2) {
@@ -1779,19 +1954,21 @@ void LogicManager::HAND_Cond1_SubMakeBed(HAND_PARAMS) {
} else {
getCharacter(kCharacterCond1).characterPosition.location = 1;
endGraphics(kCharacterCond1);
- setDoor(1, 0, checkDoor(1), 0, 0);
+ setDoor(1, kCharacterCath, checkDoor(1), 0, 0);
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
Cond1Call(&LogicManager::CONS_Cond1_DoDialogFullVol, "ZNU1001", 0, 0, 0);
}
- } else if (msg->action == 18) {
+
+ break;
+ case 18:
switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
case 1:
- setDoor(1, 0, checkDoor(1), 0, 0);
+ setDoor(1, kCharacterCath, checkDoor(1), 0, 0);
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
Cond1Call(&LogicManager::CONS_Cond1_DoDialogFullVol, "CON1062", 0, 0, 0);
break;
case 2:
- setDoor(1, 0, checkDoor(1), 10, 9);
+ setDoor(1, kCharacterCath, checkDoor(1), 10, 9);
getCharacter(kCharacterCond1).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
@@ -1800,7 +1977,7 @@ void LogicManager::HAND_Cond1_SubMakeBed(HAND_PARAMS) {
case 3:
if (_gameProgress[kProgressJacket] == 1) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
- Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, 123, 0, 0);
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
} else if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
blockAtDoor(kCharacterCond1, 1);
startSeqOtis(kCharacterCond1, "601Ra");
@@ -1809,7 +1986,7 @@ void LogicManager::HAND_Cond1_SubMakeBed(HAND_PARAMS) {
Cond1Call(&LogicManager::CONS_Cond1_FinishSeqOtis, 0, 0, 0, 0);
} else {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
- Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, 125, 0, 0);
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensCorpseFloor, 0, 0);
}
break;
@@ -1840,7 +2017,7 @@ void LogicManager::HAND_Cond1_SubMakeBed(HAND_PARAMS) {
bumpCath(kCarNone, 1, 255);
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
- Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, 126, 0, 0);
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensCorpseBed, 0, 0);
}
break;
@@ -1859,6 +2036,10 @@ void LogicManager::HAND_Cond1_SubMakeBed(HAND_PARAMS) {
default:
break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1875,84 +2056,41 @@ void LogicManager::CONS_Cond1_EnterTyler(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_EnterTyler(HAND_PARAMS) {
- if (msg->action <= 18) {
-
- switch (msg->action) {
- case 0:
+ switch (msg->action) {
+ case 0:
+ case 10:
+ if (msg->action == 0) {
if (_gameProgress[kProgressField14] == 29) {
- LABEL_4:
getCharacter(kCharacterCond1).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
- return;
+ break;
}
if (!getCharacterCurrentParams(kCharacterCond1)[1]) {
getCharacterCurrentParams(kCharacterCond1)[1] = _currentGameSessionTicks + 150;
- if (_currentGameSessionTicks == -150)
- goto LABEL_9;
+ if (_currentGameSessionTicks == -150) {
+ setDoor(1, kCharacterCath, checkDoor(1), 0, 0);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 10;
+ Cond1Call(&LogicManager::CONS_Cond1_DoDialogFullVol, "CON1018A", 0, 0, 0);
+ break;
+ }
}
if (getCharacterCurrentParams(kCharacterCond1)[1] < _currentGameSessionTicks) {
getCharacterCurrentParams(kCharacterCond1)[1] = 0x7FFFFFFF;
- LABEL_9:
setDoor(1, kCharacterCath, checkDoor(1), 0, 0);
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 10;
Cond1Call(&LogicManager::CONS_Cond1_DoDialogFullVol, "CON1018A", 0, 0, 0);
- return;
- }
-
- LABEL_61:
- if (!getCharacterCurrentParams(kCharacterCond1)[2]) {
- getCharacterCurrentParams(kCharacterCond1)[2] = _currentGameSessionTicks + 300;
- if (_currentGameSessionTicks == -300)
- goto LABEL_65;
+ break;
}
+ } else if (msg->action == 10) {
+ setDoor(1, kCharacterCond1, checkDoor(1), 14, 9);
+ }
- if (getCharacterCurrentParams(kCharacterCond1)[2] >= _currentGameSessionTicks) {
- LABEL_83:
- if (getCharacterCurrentParams(kCharacterCond1)[3] || (getCharacterCurrentParams(kCharacterCond1)[3] = _currentGameSessionTicks + 375, _currentGameSessionTicks != -375)) {
- if (getCharacterCurrentParams(kCharacterCond1)[3] >= _currentGameSessionTicks)
- return;
-
- getCharacterCurrentParams(kCharacterCond1)[3] = 0x7FFFFFFF;
- }
-
- playDialog(0, "LIB033", -1, 0);
-
- if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
- if (_gameProgress[kProgressJacket] == 1) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 18;
- Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, 123, 0, 0);
- } else if (getCharacterCurrentParams(kCharacterCond1)[0]) {
- setDoor(1, kCharacterCath, 0, 10, 9);
-
- if (getCharacterCurrentParams(kCharacterCond1)[0] == 1) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 20;
- Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, 143, 0, 0);
- } else {
- if (getCharacterCurrentParams(kCharacterCond1)[0] != 2) {
- if (getCharacterCurrentParams(kCharacterCond1)[0] != 3)
- goto LABEL_115;
- goto LABEL_33;
- }
-
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 21;
- Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, 0x79, 0, 0);
- }
- } else {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 19;
- Cond1Call(&LogicManager::CONS_Cond1_SubMakeBed, 0, 0, 0, 0);
- }
- } else {
- if (!checkLoc(kCharacterCath, 3))
- bumpCath(kCarNone, 1, 255);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 17;
- Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, 125, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterCond1)[2] = 0x7FFFFFFF;
- LABEL_65:
+ if (!getCharacterCurrentParams(kCharacterCond1)[2]) {
+ getCharacterCurrentParams(kCharacterCond1)[2] = _currentGameSessionTicks + 300;
+ if (_currentGameSessionTicks == -300) {
if (checkDoor(1) == 1) {
setDoor(1, kCharacterCath, checkDoor(1), 0, 0);
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 11;
@@ -1962,22 +2100,42 @@ void LogicManager::HAND_Cond1_EnterTyler(HAND_PARAMS) {
if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
if (_gameProgress[kProgressJacket] == 1) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 13;
- Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, 123, 0, 0);
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
} else if (getCharacterCurrentParams(kCharacterCond1)[0]) {
setDoor(1, kCharacterCath, 0, 10, 9);
if (getCharacterCurrentParams(kCharacterCond1)[0] == 1) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 15;
- Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, 143, 0, 0);
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensAugustWaitingCompartment, 0, 0);
} else {
if (getCharacterCurrentParams(kCharacterCond1)[0] != 2) {
- if (getCharacterCurrentParams(kCharacterCond1)[0] != 3)
- goto LABEL_115;
- goto LABEL_33;
+ if (getCharacterCurrentParams(kCharacterCond1)[0] != 3) {
+ playDialog(0, "LIB015", -1, 0);
+ bumpCathTylerComp();
+
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ }
+
+ if (isNight()) {
+ playNIS(kEventMertensPushCallNight);
+ } else {
+ playNIS(kEventMertensPushCall);
+ }
+
+ playDialog(0, "LIB015", -1, 0);
+ bumpCathTylerComp();
+
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
}
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 16;
- Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, 121, 0, 0);
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensKronosInvitationCompartment, 0, 0);
}
} else {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 14;
@@ -1988,1091 +2146,995 @@ void LogicManager::HAND_Cond1_EnterTyler(HAND_PARAMS) {
bumpCath(kCarNone, 1, 255);
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 12;
- Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, 125, 0, 0);
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensCorpseFloor, 0, 0);
}
}
}
- break;
- case 8:
- if (getCharacterCurrentParams(kCharacterCond1)[0]) {
- setDoor(1, kCharacterCath, checkDoor(1), 0, 0);
+ }
- if (getCharacterCurrentParams(kCharacterCond1)[0] == 1) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 23;
- Cond1Call(&LogicManager::CONS_Cond1_DoDialogFullVol, "CON1018D", 0, 0, 0);
- } else if (getCharacterCurrentParams(kCharacterCond1)[0] == 2) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 24;
- Cond1Call(&LogicManager::CONS_Cond1_DoDialogFullVol, "CON1018E", 0, 0, 0);
- } else if (getCharacterCurrentParams(kCharacterCond1)[0] == 3) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 25;
- Cond1Call(&LogicManager::CONS_Cond1_DoDialogFullVol, "CON1025", 0, 0, 0);
- } else {
- LABEL_109:
- setDoor(1, kCharacterCath, checkDoor(1), 10, 9);
+ if (getCharacterCurrentParams(kCharacterCond1)[2] >= _currentGameSessionTicks) {
+ if (getCharacterCurrentParams(kCharacterCond1)[3] || (getCharacterCurrentParams(kCharacterCond1)[3] = _currentGameSessionTicks + 375, _currentGameSessionTicks != -375)) {
+ if (getCharacterCurrentParams(kCharacterCond1)[3] >= _currentGameSessionTicks)
+ break;
- getCharacter(kCharacterCond1).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
- fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
- }
- } else {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 22;
- Cond1Call(&LogicManager::CONS_Cond1_SubMakeBed, 1, 0, 0, 0);
+ getCharacterCurrentParams(kCharacterCond1)[3] = 0x7FFFFFFF;
}
- return;
- case 9:
- if (checkDoor(1) != 1) {
- playDialog(0, "LIB014", -1, 0);
- } else {
- playDialog(0, "LIB032", -1, 0);
- }
+ playDialog(0, "LIB033", -1, 0);
if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
if (_gameProgress[kProgressJacket] == 1) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 27;
- Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, 123, 0, 0);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 18;
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
} else if (getCharacterCurrentParams(kCharacterCond1)[0]) {
setDoor(1, kCharacterCath, 0, 10, 9);
if (getCharacterCurrentParams(kCharacterCond1)[0] == 1) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 29;
- Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, 143, 0, 0);
- } else if (getCharacterCurrentParams(kCharacterCond1)[0] == 2) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 30;
- Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, 121, 0, 0);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 20;
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensAugustWaitingCompartment, 0, 0);
} else {
- if (getCharacterCurrentParams(kCharacterCond1)[0] == 3) {
- LABEL_33:
+ if (getCharacterCurrentParams(kCharacterCond1)[0] != 2) {
+ if (getCharacterCurrentParams(kCharacterCond1)[0] != 3) {
+ playDialog(0, "LIB015", -1, 0);
+ bumpCathTylerComp();
+
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ }
+
if (isNight()) {
playNIS(kEventMertensPushCallNight);
} else {
playNIS(kEventMertensPushCall);
}
+
+ playDialog(0, "LIB015", -1, 0);
+ bumpCathTylerComp();
+
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
}
- LABEL_115:
- playDialog(0, "LIB015", -1, 0);
- bumpCathTylerComp();
- getCharacter(kCharacterCond1).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
- fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 21;
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensKronosInvitationCompartment, 0, 0);
}
} else {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 28;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 19;
Cond1Call(&LogicManager::CONS_Cond1_SubMakeBed, 0, 0, 0, 0);
}
} else {
if (!checkLoc(kCharacterCath, 3))
bumpCath(kCarNone, 1, 255);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 26;
- Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, 125, 0, 0);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 17;
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensCorpseFloor, 0, 0);
}
+ } else {
+ getCharacterCurrentParams(kCharacterCond1)[2] = 0x7FFFFFFF;
- return;
- case 12:
- getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- if (inComp(kCharacterCath, kCarGreenSleeping, 8200) ||
- inComp(kCharacterCath, kCarGreenSleeping, 7850) ||
- cathOutHisWindow()) {
-
+ if (checkDoor(1) == 1) {
setDoor(1, kCharacterCath, checkDoor(1), 0, 0);
- if (cathOutHisWindow())
- bumpCath(kCarGreenSleeping, 49, 255);
- if (getCharacterCurrentParams(kCharacterCond1)[0]) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
- Cond1Call(&LogicManager::CONS_Cond1_DoDialogFullVol, "CON1018", 0, 0, 0);
- } else {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
- Cond1Call(&LogicManager::CONS_Cond1_DoDialogFullVol, "CON1060", 0, 0, 0);
- }
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 11;
+ Cond1Call(&LogicManager::CONS_Cond1_DoDialogFullVol, "CON1018B", 0, 0, 0);
} else {
- playDialog(kCharacterCond1, "CON1019", -1, 0);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
- Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "601Ma", 1, 0, 0);
- }
- return;
- case 18:
- switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
- case 1:
+ playDialog(0, "LIB014", -1, 0);
if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
- Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "601Ra", 1, 0, 0);
- } else if (checkLoc(kCharacterCath, 3)) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
- Cond1Call(&LogicManager::CONS_Cond1_DoBriefCorrOtis, "601Ra", 1, 0, 0);
- } else {
- bumpCath(kCarNone, 1, 255);
- LABEL_48:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
- Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, 125, 0, 0);
- }
- break;
- case 2:
- goto LABEL_48;
- case 3:
- case 12:
- case 17:
- case 26:
- playNIS(kEventMertensCorpseFloor);
- endGame(0, 1, _gameProgress[kProgressEventFoundCorpse] == 0 ? 56 : 50, true);
- return;
- case 4:
- setDoor(1, kCharacterCath, 1, 0, 0);
- getCharacter(kCharacterCond1).characterPosition.location = 1;
- endGraphics(kCharacterCond1);
- if (getCharacterCurrentParams(kCharacterCond1)[0])
- goto LABEL_116;
- if (_gameProgress[kProgressEventCorpseThrown] || _gameProgress[kProgressChapter] != 1) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
- Cond1Call(&LogicManager::CONS_Cond1_MakeBed, 1, 17, 0, 0);
+ if (_gameProgress[kProgressJacket] == 1) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 13;
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
+ } else if (getCharacterCurrentParams(kCharacterCond1)[0]) {
+ setDoor(1, kCharacterCath, 0, 10, 9);
+
+ if (getCharacterCurrentParams(kCharacterCond1)[0] == 1) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 15;
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensAugustWaitingCompartment, 0, 0);
+ } else {
+ if (getCharacterCurrentParams(kCharacterCond1)[0] != 2) {
+ if (getCharacterCurrentParams(kCharacterCond1)[0] != 3) {
+ playDialog(0, "LIB015", -1, 0);
+ bumpCathTylerComp();
+
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ }
+
+ if (isNight()) {
+ playNIS(kEventMertensPushCallNight);
+ } else {
+ playNIS(kEventMertensPushCall);
+ }
+
+ playDialog(0, "LIB015", -1, 0);
+ bumpCathTylerComp();
+
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ }
+
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 16;
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensKronosInvitationCompartment, 0, 0);
+ }
+ } else {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 14;
+ Cond1Call(&LogicManager::CONS_Cond1_SubMakeBed, 0, 0, 0, 0);
+ }
} else {
if (!checkLoc(kCharacterCath, 3))
bumpCath(kCarNone, 1, 255);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
- Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, 126, 0, 0);
- }
- break;
- case 5:
- playNIS(kEventMertensCorpseBed);
- endGame(0, 1, 57, true);
- return;
- case 6:
- LABEL_116:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
- Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "601Sa", 1, 0, 0);
- break;
- case 7:
- getCharacter(kCharacterCond1).characterPosition.location = 0;
- setDoor(1, kCharacterCath, 0, 10, 9);
- getCharacter(kCharacterCond1).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
- fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
- break;
- case 8:
- case 9:
- setDoor(1, kCharacterCond1, checkDoor(1), 14, 9);
- break;
- case 10:
- setDoor(1, kCharacterCond1, checkDoor(1), 14, 9);
- goto LABEL_61;
- case 11:
- setDoor(1, kCharacterCond1, checkDoor(1), 14, 9);
- goto LABEL_83;
- case 13:
- playNIS(kEventMertensBloodJacket);
- endGame(0, 1, 55, 1);
- goto LABEL_83;
- case 14:
- case 19:
- case 22:
- case 28:
- goto LABEL_4;
- case 15:
- playNIS(kEventMertensAugustWaitingCompartment);
- _gameProgress[kProgressEventMertensAugustWaiting] = 1;
- goto LABEL_115;
- case 16:
- playNIS(kEventMertensKronosInvitationCompartment);
- _gameProgress[kProgressEventMertensChronosInvitation] = 1;
- goto LABEL_115;
- case 18:
- case 27:
- playNIS(kEventMertensBloodJacket);
- endGame(0, 1, 55, true);
- break;
- case 20:
- playNIS(kEventMertensAugustWaitingCompartment);
- _gameProgress[kProgressEventMertensAugustWaiting] = 1;
- goto LABEL_115;
- case 21:
- playNIS(kEventMertensKronosInvitationCompartment);
- _gameProgress[kProgressEventMertensChronosInvitation] = 1;
- goto LABEL_115;
- case 23:
- _gameProgress[kProgressEventMertensAugustWaiting] = 1;
- goto LABEL_109;
- case 24:
- _gameProgress[kProgressEventMertensChronosInvitation] = 1;
- goto LABEL_109;
- case 25:
- goto LABEL_109;
- case 29:
- playNIS(kEventMertensAugustWaitingCompartment);
- _gameProgress[kProgressEventMertensAugustWaiting] = 1;
- goto LABEL_115;
- case 30:
- playNIS(kEventMertensKronosInvitationCompartment);
- _gameProgress[kProgressEventMertensChronosInvitation] = 1;
- goto LABEL_115;
- default:
- return;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 12;
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensCorpseFloor, 0, 0);
+ }
}
- return;
- default:
- return;
}
- }
-}
-
-void LogicManager::CONS_Cond1_VisitCond2(CONS_PARAMS) {
- CharacterCallParams *params = &getCharacter(kCharacterCond1).callParams[getCharacter(kCharacterCond1).currentCall];
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_VisitCond2);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 28;
-
- params->clear();
- strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+ break;
+ case 8:
+ if (getCharacterCurrentParams(kCharacterCond1)[0]) {
+ setDoor(1, kCharacterCath, checkDoor(1), 0, 0);
- fedEx(kCharacterCond1, kCharacterCond1, 12, 0);
-}
+ if (getCharacterCurrentParams(kCharacterCond1)[0] == 1) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 23;
+ Cond1Call(&LogicManager::CONS_Cond1_DoDialogFullVol, "CON1018D", 0, 0, 0);
+ } else if (getCharacterCurrentParams(kCharacterCond1)[0] == 2) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 24;
+ Cond1Call(&LogicManager::CONS_Cond1_DoDialogFullVol, "CON1018E", 0, 0, 0);
+ } else if (getCharacterCurrentParams(kCharacterCond1)[0] == 3) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 25;
+ Cond1Call(&LogicManager::CONS_Cond1_DoDialogFullVol, "CON1025", 0, 0, 0);
+ } else {
+ setDoor(1, kCharacterCath, checkDoor(1), 10, 9);
-void LogicManager::HAND_Cond1_VisitCond2(HAND_PARAMS) {
- if (msg->action > 12) {
- switch (msg->action) {
- case 18:
- switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 4, 1500, 0, 0);
- break;
- case 2:
- startCycOtis(kCharacterCond1, "601O");
- send(kCharacterCond1, kCharacterCond2, 154005632, 0);
- break;
- case 3:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
- Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
- break;
- case 4:
getCharacter(kCharacterCond1).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
- break;
- default:
- return;
}
- break;
- case 155853632:
- getCharacterCurrentParams(kCharacterCond1)[4] = 1;
- break;
- case 202558662:
- startCycOtis(kCharacterCond1, "601L");
- playDialog(kCharacterCond1, (char *)&getCharacterCurrentParams(kCharacterCond1)[0], -1, 0);
- break;
+ } else {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 22;
+ Cond1Call(&LogicManager::CONS_Cond1_SubMakeBed, 1, 0, 0, 0);
}
- } else if (msg->action == 12) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
- Cond1Call(&LogicManager::CONS_Cond1_GetUp, 0, 0, 0, 0);
- } else if (msg->action) {
- if (msg->action == 2)
- getCharacterCurrentParams(kCharacterCond1)[3] = 1;
- } else if (getCharacterCurrentParams(kCharacterCond1)[3] && getCharacterCurrentParams(kCharacterCond1)[4]) {
- send(kCharacterCond1, kCharacterCond2, 125499160, 0);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
- }
-}
-void LogicManager::CONS_Cond1_VisitCond2Double(CONS_PARAMS) {
- CharacterCallParams *params = &getCharacter(kCharacterCond1).callParams[getCharacter(kCharacterCond1).currentCall];
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_VisitCond2Double);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 29;
+ break;
+ case 9:
+ if (checkDoor(1) != 1) {
+ playDialog(0, "LIB014", -1, 0);
+ } else {
+ playDialog(0, "LIB032", -1, 0);
+ }
- params->clear();
+ if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
+ if (_gameProgress[kProgressJacket] == 1) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 27;
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
+ } else if (getCharacterCurrentParams(kCharacterCond1)[0]) {
+ setDoor(1, kCharacterCath, 0, 10, 9);
- strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
- strncpy((char *)¶ms->parameters[3], param2.stringParam, 12);
+ if (getCharacterCurrentParams(kCharacterCond1)[0] == 1) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 29;
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensAugustWaitingCompartment, 0, 0);
+ } else if (getCharacterCurrentParams(kCharacterCond1)[0] == 2) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 30;
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensKronosInvitationCompartment, 0, 0);
+ } else {
+ if (getCharacterCurrentParams(kCharacterCond1)[0] == 3) {
+ if (isNight()) {
+ playNIS(kEventMertensPushCallNight);
+ } else {
+ playNIS(kEventMertensPushCall);
+ }
+ }
- fedEx(kCharacterCond1, kCharacterCond1, 12, 0);
-}
+ playDialog(0, "LIB015", -1, 0);
+ bumpCathTylerComp();
-void LogicManager::HAND_Cond1_VisitCond2Double(HAND_PARAMS) {
- if (msg->action > 12) {
- switch (msg->action) {
- case 18:
- switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 4, 1500, 0, 0);
- break;
- case 2:
- startCycOtis(kCharacterCond1, "601O");
- send(kCharacterCond1, kCharacterCond2, 154005632, 0);
- break;
- case 3:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
- Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
- break;
- case 4:
- getCharacter(kCharacterCond1).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
- fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
- break;
- default:
- return;
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ }
+ } else {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 28;
+ Cond1Call(&LogicManager::CONS_Cond1_SubMakeBed, 0, 0, 0, 0);
}
- break;
- case 155853632:
- getCharacterCurrentParams(kCharacterCond1)[7] = 1;
- break;
- case 202558662:
- startCycOtis(kCharacterCond1, "601L");
- playDialog(kCharacterCond1, (char *)&getCharacterCurrentParams(kCharacterCond1)[0], -1, 0);
- break;
- }
- } else if (msg->action == 12) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
- Cond1Call(&LogicManager::CONS_Cond1_GetUp, 0, 0, 0, 0);
- } else if (msg->action) {
- if (msg->action == 2) {
- getCharacterCurrentParams(kCharacterCond1)[6]++;
- if (getCharacterCurrentParams(kCharacterCond1)[6] == 1)
- playDialog(kCharacterCond1, (char *)&getCharacterCurrentParams(kCharacterCond1)[3], -1, 0);
- }
- } else if (getCharacterCurrentParams(kCharacterCond1)[6] > 1 && getCharacterCurrentParams(kCharacterCond1)[7]) {
- send(kCharacterCond1, kCharacterCond2, 125499160, 0);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
- }
-}
-
-void LogicManager::CONS_Cond1_CathBuzzing(CONS_PARAMS) {
- CharacterCallParams *params = &getCharacter(kCharacterCond1).callParams[getCharacter(kCharacterCond1).currentCall];
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_CathBuzzing);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 30;
-
- params->clear();
-
- params->parameters[0] = param1.intParam;
-
- fedEx(kCharacterCond1, kCharacterCond1, 12, 0);
-}
-
-void LogicManager::HAND_Cond1_CathBuzzing(HAND_PARAMS) {
- if (msg->action == 12) {
- if (getCharacterCurrentParams(kCharacterCond1)[0] == 1) {
- getCharacterCurrentParams(kCharacterCond1)[1] = 8200;
- } else if (getCharacterCurrentParams(kCharacterCond1)[0] == 2) {
- getCharacterCurrentParams(kCharacterCond1)[1] = 7500;
} else {
- if (getCharacterCurrentParams(kCharacterCond1)[0] != 3) {
- LABEL_42:
- getCharacter(kCharacterCond1).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
- fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
- return;
- }
+ if (!checkLoc(kCharacterCath, 3))
+ bumpCath(kCarNone, 1, 255);
- getCharacterCurrentParams(kCharacterCond1)[1] = 6470;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 26;
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensCorpseFloor, 0, 0);
}
- if (getCharacterCurrentParams(kCharacterCond1)[0] == 1) {
- if (_gameProgress[kProgressField14]) {
- getCharacter(kCharacterCond1).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
- fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
- return;
- }
+ break;
+ case 12:
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ if (inComp(kCharacterCath, kCarGreenSleeping, 8200) ||
+ inComp(kCharacterCath, kCarGreenSleeping, 7850) ||
+ cathOutHisWindow()) {
- _gameProgress[kProgressField14] = 3;
+ setDoor(1, kCharacterCath, checkDoor(1), 0, 0);
+ if (cathOutHisWindow())
+ bumpCath(kCarGreenSleeping, 49, 255);
+ if (getCharacterCurrentParams(kCharacterCond1)[0]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
+ Cond1Call(&LogicManager::CONS_Cond1_DoDialogFullVol, "CON1018", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
+ Cond1Call(&LogicManager::CONS_Cond1_DoDialogFullVol, "CON1060", 0, 0, 0);
+ }
+ } else {
+ playDialog(kCharacterCond1, "CON1019", -1, 0);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
+ Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "601Ma", 1, 0, 0);
}
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
- Cond1Call(&LogicManager::CONS_Cond1_GetUp, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
case 1:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, getCharacterCurrentParams(kCharacterCond1)[1], 0, 0);
- return;
- case 2:
- if (getCharacterCurrentParams(kCharacterCond1)[0] == 1) {
- if (_gameProgress[kProgressChapter] == 4)
- send(kCharacterCond1, kCharacterTatiana, 238790488, 0);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
- Cond1Call(&LogicManager::CONS_Cond1_EnterTyler, 3, 0, 0, 0);
- } else if (getCharacterCurrentParams(kCharacterCond1)[0] == 2) {
- if (inComp(kCharacterCath, kCarGreenSleeping, 7500)) {
- setDoor(2, kCharacterCath, checkDoor(2), 0, 0);
- getCharacterCurrentParams(kCharacterCond1)[2] = 1;
- }
+ if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
- Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "601Vb", 2, 0, 0);
- } else if (getCharacterCurrentParams(kCharacterCond1)[0] == 3) {
- if (inComp(kCharacterCath, kCarGreenSleeping, 6470)) {
- setDoor(3, kCharacterCath, checkDoor(3), 0, 0);
- getCharacterCurrentParams(kCharacterCond1)[2] = 1;
- }
-
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
- Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "601Mc", 3, 0, 0);
+ Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "601Ra", 1, 0, 0);
+ } else if (checkLoc(kCharacterCath, 3)) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
+ Cond1Call(&LogicManager::CONS_Cond1_DoBriefCorrOtis, "601Ra", 1, 0, 0);
} else {
- LABEL_34:
- if (_gameProgress[kProgressField14] == 3)
- _gameProgress[kProgressField14] = 0;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
+ bumpCath(kCarNone, 1, 255);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensCorpseFloor, 0, 0);
}
+
+ break;
+ case 2:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensCorpseFloor, 0, 0);
break;
case 3:
- goto LABEL_34;
- case 4:
- startCycOtis(kCharacterCond1, "601Wb");
- softBlockAtDoor(kCharacterCond1, 2);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
- Cond1Call(&LogicManager::CONS_Cond1_DoDialog, "CON3020", 0, 0, 0);
+ case 12:
+ case 17:
+ case 26:
+ playNIS(kEventMertensCorpseFloor);
+ endGame(0, 1, _gameProgress[kProgressEventFoundCorpse] == 0 ? 56 : 50, true);
return;
- case 5:
- if (getCharacterCurrentParams(kCharacterCond1)[2]) {
- setDoor(2, kCharacterCath, checkDoor(2), 10, 9);
+ case 4:
+ setDoor(1, kCharacterCath, 1, 0, 0);
+ getCharacter(kCharacterCond1).characterPosition.location = 1;
+ endGraphics(kCharacterCond1);
+
+ if (getCharacterCurrentParams(kCharacterCond1)[0]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
+ Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "601Sa", 1, 0, 0);
+ break;
}
- softReleaseAtDoor(kCharacterCond1, 2);
- goto LABEL_34;
+ if (_gameProgress[kProgressEventCorpseThrown] || _gameProgress[kProgressChapter] != 1) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
+ Cond1Call(&LogicManager::CONS_Cond1_MakeBed, 1, 17, 0, 0);
+ } else {
+ if (!checkLoc(kCharacterCath, 3))
+ bumpCath(kCarNone, 1, 255);
+
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensCorpseBed, 0, 0);
+ }
+
+ break;
+ case 5:
+ playNIS(kEventMertensCorpseBed);
+ endGame(0, 1, 57, true);
+ break;
case 6:
- startCycOtis(kCharacterCond1, "601Nc");
- softBlockAtDoor(kCharacterCond1, 3);
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
- Cond1Call(&LogicManager::CONS_Cond1_DoDialog, "CON3020", 0, 0, 0);
- return;
+ Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "601Sa", 1, 0, 0);
+ break;
case 7:
- if (getCharacterCurrentParams(kCharacterCond1)[2]) {
- setDoor(3, kCharacterCath, checkDoor(3), 10, 9);
- }
+ getCharacter(kCharacterCond1).characterPosition.location = 0;
+ setDoor(1, kCharacterCath, 0, 10, 9);
- softReleaseAtDoor(kCharacterCond1, 3);
- goto LABEL_34;
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
case 8:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
- Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
- return;
case 9:
- goto LABEL_42;
- default:
- return;
- }
- }
-}
+ setDoor(1, kCharacterCond1, checkDoor(1), 14, 9);
+ break;
+ case 11:
+ case 13:
+ if (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 11) {
+ setDoor(1, kCharacterCond1, checkDoor(1), 14, 9);
+ } else if (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 13) {
+ playNIS(kEventMertensBloodJacket);
+ endGame(0, 1, 55, 1);
+ }
-void LogicManager::CONS_Cond1_CathRattling(CONS_PARAMS) {
- CharacterCallParams *params = &getCharacter(kCharacterCond1).callParams[getCharacter(kCharacterCond1).currentCall];
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_CathRattling);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 31;
+ if (getCharacterCurrentParams(kCharacterCond1)[3] || (getCharacterCurrentParams(kCharacterCond1)[3] = _currentGameSessionTicks + 375, _currentGameSessionTicks != -375)) {
+ if (getCharacterCurrentParams(kCharacterCond1)[3] >= _currentGameSessionTicks)
+ break;
- params->clear();
+ getCharacterCurrentParams(kCharacterCond1)[3] = 0x7FFFFFFF;
+ }
- params->parameters[0] = param1.intParam;
+ playDialog(0, "LIB033", -1, 0);
- fedEx(kCharacterCond1, kCharacterCond1, 12, 0);
-}
+ if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
+ if (_gameProgress[kProgressJacket] == 1) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 18;
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
+ } else if (getCharacterCurrentParams(kCharacterCond1)[0]) {
+ setDoor(1, kCharacterCath, 0, 10, 9);
-void LogicManager::HAND_Cond1_CathRattling(HAND_PARAMS) {
- switch (msg->action) {
- case 2:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
- Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
- break;
- case 12:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
- Cond1Call(&LogicManager::CONS_Cond1_DoSeqOtis, "601G", 0, 0, 0);
- break;
- case 18:
- if (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 1) {
- if (whoRunningDialog(kCharacterCond1)) {
- startCycOtis(kCharacterCond1, "601J");
+ if (getCharacterCurrentParams(kCharacterCond1)[0] == 1) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 20;
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensAugustWaitingCompartment, 0, 0);
+ } else {
+ if (getCharacterCurrentParams(kCharacterCond1)[0] != 2) {
+ if (getCharacterCurrentParams(kCharacterCond1)[0] != 3) {
+ playDialog(0, "LIB015", -1, 0);
+ bumpCathTylerComp();
+
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ }
+
+ if (isNight()) {
+ playNIS(kEventMertensPushCallNight);
+ } else {
+ playNIS(kEventMertensPushCall);
+ }
+
+ playDialog(0, "LIB015", -1, 0);
+ bumpCathTylerComp();
+
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ }
+
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 21;
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensKronosInvitationCompartment, 0, 0);
+ }
+ } else {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 19;
+ Cond1Call(&LogicManager::CONS_Cond1_SubMakeBed, 0, 0, 0, 0);
+ }
} else {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
- Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
+ if (!checkLoc(kCharacterCath, 3))
+ bumpCath(kCarNone, 1, 255);
+
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 17;
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensCorpseFloor, 0, 0);
}
- } else if (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 2 ||
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 3) {
+
+ break;
+ case 14:
+ case 19:
+ case 22:
+ case 28:
getCharacter(kCharacterCond1).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
- }
-
- break;
- }
-}
+ break;
+ case 15:
+ playNIS(kEventMertensAugustWaitingCompartment);
+ _gameProgress[kProgressEventMertensAugustWaiting] = 1;
+ playDialog(0, "LIB015", -1, 0);
+ bumpCathTylerComp();
-void LogicManager::CONS_Cond1_BathroomTrip(CONS_PARAMS) {
- CharacterCallParams *params = &getCharacter(kCharacterCond1).callParams[getCharacter(kCharacterCond1).currentCall];
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_BathroomTrip);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 32;
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ case 16:
+ playNIS(kEventMertensKronosInvitationCompartment);
+ _gameProgress[kProgressEventMertensChronosInvitation] = 1;
+ playDialog(0, "LIB015", -1, 0);
+ bumpCathTylerComp();
- params->clear();
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ case 18:
+ case 27:
+ playNIS(kEventMertensBloodJacket);
+ endGame(0, 1, 55, true);
+ break;
+ case 20:
+ playNIS(kEventMertensAugustWaitingCompartment);
+ _gameProgress[kProgressEventMertensAugustWaiting] = 1;
+ playDialog(0, "LIB015", -1, 0);
+ bumpCathTylerComp();
- fedEx(kCharacterCond1, kCharacterCond1, 12, 0);
-}
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ case 21:
+ playNIS(kEventMertensKronosInvitationCompartment);
+ _gameProgress[kProgressEventMertensChronosInvitation] = 1;
+ playDialog(0, "LIB015", -1, 0);
+ bumpCathTylerComp();
-void LogicManager::HAND_Cond1_BathroomTrip(HAND_PARAMS) {
- if (msg->action == 12) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
- Cond1Call(&LogicManager::CONS_Cond1_GetUp, 0, 0, 0, 0);
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 9510, 0, 0);
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
break;
- case 2:
- if (getCharacter(kCharacterCond1).characterPosition.position < 9460)
- goto LABEL_11;
- endGraphics(kCharacterCond1);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
- Cond1Call(&LogicManager::CONS_Cond1_DoWait, 900, 0, 0, 0);
+ case 23:
+ _gameProgress[kProgressEventMertensAugustWaiting] = 1;
+ setDoor(1, kCharacterCath, checkDoor(1), 10, 9);
+
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
break;
- case 3:
- LABEL_11:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
+ case 24:
+ _gameProgress[kProgressEventMertensChronosInvitation] = 1;
+ setDoor(1, kCharacterCath, checkDoor(1), 10, 9);
+
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
break;
- case 4:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
- Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
+ case 25:
+ setDoor(1, kCharacterCath, checkDoor(1), 10, 9);
+
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
break;
- case 5:
+ case 29:
+ playNIS(kEventMertensAugustWaitingCompartment);
+ _gameProgress[kProgressEventMertensAugustWaiting] = 1;
+ playDialog(0, "LIB015", -1, 0);
+ bumpCathTylerComp();
+
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ case 30:
+ playNIS(kEventMertensKronosInvitationCompartment);
+ _gameProgress[kProgressEventMertensChronosInvitation] = 1;
+ playDialog(0, "LIB015", -1, 0);
+ bumpCathTylerComp();
+
getCharacter(kCharacterCond1).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
-void LogicManager::CONS_Cond1_DoPending(CONS_PARAMS) {
+void LogicManager::CONS_Cond1_VisitCond2(CONS_PARAMS) {
CharacterCallParams *params = &getCharacter(kCharacterCond1).callParams[getCharacter(kCharacterCond1).currentCall];
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_DoPending);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 33;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_VisitCond2);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 28;
params->clear();
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+
fedEx(kCharacterCond1, kCharacterCond1, 12, 0);
}
-void LogicManager::HAND_Cond1_DoPending(HAND_PARAMS) {
- if (msg->action == 12) {
- if (getCharacterParams(kCharacterCond1, 8)[7] ||
- getCharacterParams(kCharacterCond1, 8)[13] ||
- getCharacterParams(kCharacterCond1, 8)[14] ||
- getCharacterParams(kCharacterCond1, 8)[12] ||
- getCharacterParams(kCharacterCond1, 8)[11] ||
- getCharacterParams(kCharacterCond1, 8)[9] ||
- getCharacterParams(kCharacterCond1, 8)[5] ||
- getCharacterParams(kCharacterCond1, 8)[10] ||
- getCharacterParams(kCharacterCond1, 8)[8] ||
- getCharacterParams(kCharacterCond1, 8)[17]) {
-
- getCharacterParams(kCharacterCond1, 8)[15] = 1;
-
- if (getCharacterParams(kCharacterCond1, 8)[7]) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 1500, 0, 0);
- } else {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 540, 0, 0);
- }
- } else {
- getCharacter(kCharacterCond1).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
- fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+void LogicManager::HAND_Cond1_VisitCond2(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterCond1)[3] && getCharacterCurrentParams(kCharacterCond1)[4]) {
+ send(kCharacterCond1, kCharacterCond2, 125499160, 0);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
}
- } else if (msg->action == 18) {
+
+ break;
+ case 2:
+ getCharacterCurrentParams(kCharacterCond1)[3] = 1;
+ break;
+ case 12:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
+ Cond1Call(&LogicManager::CONS_Cond1_GetUp, 0, 0, 0, 0);
+ break;
+ case 18:
switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
case 1:
- getCharacterParams(kCharacterCond1, 8)[16] = 1;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
- Cond1Call(&LogicManager::CONS_Cond1_Listen, 9, 0, 0, 0);
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 4, 1500, 0, 0);
break;
case 2:
- getCharacterParams(kCharacterCond1, 8)[15] = 0;
- getCharacter(kCharacterCond1).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
- fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ startCycOtis(kCharacterCond1, "601O");
+ send(kCharacterCond1, kCharacterCond2, 154005632, 0);
break;
case 3:
- endGraphics(kCharacterCond1);
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
- Cond1Call(&LogicManager::CONS_Cond1_DoWait, 75, 0, 0, 0);
+ Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
break;
case 4:
- if (!getCharacterParams(kCharacterCond1, 8)[13])
- goto LABEL_29;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
- Cond1Call(&LogicManager::CONS_Cond1_AugustLockUnlockMyComp, 1, 0, 0, 0);
- break;
- case 5:
- LABEL_29:
- if (!getCharacterParams(kCharacterCond1, 8)[14])
- goto LABEL_31;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
- Cond1Call(&LogicManager::CONS_Cond1_AugustLockUnlockMyComp, 0, 0, 0, 0);
- break;
- case 6:
- LABEL_31:
- if (!getCharacterParams(kCharacterCond1, 8)[12])
- goto LABEL_33;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
- Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 1, 0, 0, 0);
- break;
- case 7:
- LABEL_33:
- if (!getCharacterParams(kCharacterCond1, 8)[11])
- goto LABEL_35;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
- Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 0, 0, 0, 0);
- break;
- case 8:
- LABEL_35:
- if (!getCharacterParams(kCharacterCond1, 8)[9])
- goto LABEL_37;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
- Cond1Call(&LogicManager::CONS_Cond1_DeliverAugustMessage, 0, 0, 0, 0);
- break;
- case 9:
- LABEL_37:
- if (!getCharacterParams(kCharacterCond1, 8)[5])
- goto LABEL_39;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 10;
- Cond1Call(&LogicManager::CONS_Cond1_DeliverKronosMessage, 0, 0, 0, 0);
- break;
- case 10:
- LABEL_39:
- if (!getCharacterParams(kCharacterCond1, 8)[10])
- goto LABEL_41;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 11;
- Cond1Call(&LogicManager::CONS_Cond1_VisitKahina, 0, 0, 0, 0);
- break;
- case 11:
- LABEL_41:
- if (!getCharacterParams(kCharacterCond1, 8)[8])
- goto LABEL_25;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 12;
- Cond1Call(&LogicManager::CONS_Cond1_VisitCond2, "CON1200", 0, 0, 0);
- break;
- case 12:
- send(kCharacterCond1, kCharacterCond2, 168254872, 0);
- getCharacterParams(kCharacterCond1, 8)[8] = 0;
- LABEL_25:
- if (!getCharacterParams(kCharacterCond1, 8)[17])
- goto LABEL_28;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 13;
- Cond1Call(&LogicManager::CONS_Cond1_VisitCond2Special, 0, 0, 0, 0);
- break;
- case 13:
- getCharacterParams(kCharacterCond1, 8)[17] = 0;
- LABEL_28:
- getCharacterParams(kCharacterCond1, 8)[15] = 0;
getCharacter(kCharacterCond1).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ case 155853632:
+ getCharacterCurrentParams(kCharacterCond1)[4] = 1;
+ break;
+ case 202558662:
+ startCycOtis(kCharacterCond1, "601L");
+ playDialog(kCharacterCond1, (char *)&getCharacterCurrentParams(kCharacterCond1)[0], -1, 0);
+ break;
+ default:
+ break;
}
}
-void LogicManager::CONS_Cond1_Birth(CONS_PARAMS) {
+void LogicManager::CONS_Cond1_VisitCond2Double(CONS_PARAMS) {
CharacterCallParams *params = &getCharacter(kCharacterCond1).callParams[getCharacter(kCharacterCond1).currentCall];
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_Birth);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 34;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_VisitCond2Double);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 29;
params->clear();
+ strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
+ strncpy((char *)¶ms->parameters[3], param2.stringParam, 12);
+
fedEx(kCharacterCond1, kCharacterCond1, 12, 0);
}
-void LogicManager::HAND_Cond1_Birth(HAND_PARAMS) {
- if (msg->action == 0) {
- if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterCond1)[0]) {
- getCharacterCurrentParams(kCharacterCond1)[0] = 1;
- CONS_Cond1_StartPart1(0, 0, 0, 0);
+void LogicManager::HAND_Cond1_VisitCond2Double(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterCond1)[6] > 1 && getCharacterCurrentParams(kCharacterCond1)[7]) {
+ send(kCharacterCond1, kCharacterCond2, 125499160, 0);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
}
- } else if (msg->action == 12) {
- autoMessage(kCharacterCond1, 171394341, 7);
- autoMessage(kCharacterCond1, 169633856, 9);
- autoMessage(kCharacterCond1, 238732837, 10);
- autoMessage(kCharacterCond1, 269624833, 12);
- autoMessage(kCharacterCond1, 302614416, 11);
- autoMessage(kCharacterCond1, 190082817, 8);
- autoMessage(kCharacterCond1, 269436673, 13);
- autoMessage(kCharacterCond1, 303343617, 14);
- autoMessage(kCharacterCond1, 224122407, 17);
- autoMessage(kCharacterCond1, 201431954, 18);
- autoMessage(kCharacterCond1, 188635520, 19);
- autoMessage(kCharacterCond1, 204379649, 4);
- getCharacterParams(kCharacterCond1, 8)[0] = 0;
- getCharacter(kCharacterCond1).characterPosition.position = 9460;
- getCharacter(kCharacterCond1).characterPosition.location = 0;
- getCharacter(kCharacterCond1).characterPosition.car = kCarGreenSleeping;
- }
-}
-
-void LogicManager::CONS_Cond1_DeliverAugustMessage(CONS_PARAMS) {
- CharacterCallParams *params = &getCharacter(kCharacterCond1).callParams[getCharacter(kCharacterCond1).currentCall];
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_DeliverAugustMessage);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 35;
-
- params->clear();
- fedEx(kCharacterCond1, kCharacterCond1, 12, 0);
-}
+ break;
+ case 2:
+ getCharacterCurrentParams(kCharacterCond1)[6]++;
+ if (getCharacterCurrentParams(kCharacterCond1)[6] == 1)
+ playDialog(kCharacterCond1, (char *)&getCharacterCurrentParams(kCharacterCond1)[3], -1, 0);
-void LogicManager::HAND_Cond1_DeliverAugustMessage(HAND_PARAMS) {
- if (msg->action == 12) {
- if (_gameProgress[kProgressField14] == 29) {
- LABEL_21:
- getCharacter(kCharacterCond1).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
- fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
- } else {
- _gameProgress[kProgressField14] = 3;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
- Cond1Call(&LogicManager::CONS_Cond1_GetUp, 0, 0, 0, 0);
- }
- } else if (msg->action == 18) {
+ break;
+ case 12:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
+ Cond1Call(&LogicManager::CONS_Cond1_GetUp, 0, 0, 0, 0);
+ break;
+ case 18:
switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 8200, 0, 0);
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 4, 1500, 0, 0);
break;
case 2:
- if (!getCharacterParams(kCharacterCond1, 8)[9] ||
- _gameProgress[kProgressEventMetAugust]) {
- getCharacterParams(kCharacterCond1, 8)[9] = 0;
-
- if (_gameProgress[kProgressField14] == 3)
- _gameProgress[kProgressField14] = 0;
-
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
- } else {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
- Cond1Call(&LogicManager::CONS_Cond1_EnterTyler, 1, 0, 0, 0);
- }
-
+ startCycOtis(kCharacterCond1, "601O");
+ send(kCharacterCond1, kCharacterCond2, 154005632, 0);
break;
case 3:
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
break;
case 4:
- case 7:
- goto LABEL_21;
- case 5:
- if (_gameProgress[kProgressField14] == 3)
- _gameProgress[kProgressField14] = 0;
-
- if (_gameProgress[kProgressEventMertensAugustWaiting])
- getCharacterParams(kCharacterCond1, 8)[9] = 0;
-
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
- break;
- case 6:
- getCharacterParams(kCharacterCond1, 8)[9] = 0;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
- Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
break;
default:
return;
}
- }
-}
-
-void LogicManager::CONS_Cond1_DeliverKronosMessage(CONS_PARAMS) {
+ break;
+ case 155853632:
+ getCharacterCurrentParams(kCharacterCond1)[7] = 1;
+ break;
+ case 202558662:
+ startCycOtis(kCharacterCond1, "601L");
+ playDialog(kCharacterCond1, (char *)&getCharacterCurrentParams(kCharacterCond1)[0], -1, 0);
+ break;
+ }
+}
+
+void LogicManager::CONS_Cond1_CathBuzzing(CONS_PARAMS) {
CharacterCallParams *params = &getCharacter(kCharacterCond1).callParams[getCharacter(kCharacterCond1).currentCall];
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_DeliverKronosMessage);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 36;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_CathBuzzing);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 30;
params->clear();
+ params->parameters[0] = param1.intParam;
+
fedEx(kCharacterCond1, kCharacterCond1, 12, 0);
}
-void LogicManager::HAND_Cond1_DeliverKronosMessage(HAND_PARAMS) {
- if (msg->action == 12) {
- if (_gameProgress[kProgressField14] == 29) {
- LABEL_5:
- getCharacter(kCharacterCond1).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
- fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+void LogicManager::HAND_Cond1_CathBuzzing(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ if (getCharacterCurrentParams(kCharacterCond1)[0] == 1) {
+ getCharacterCurrentParams(kCharacterCond1)[1] = 8200;
+ } else if (getCharacterCurrentParams(kCharacterCond1)[0] == 2) {
+ getCharacterCurrentParams(kCharacterCond1)[1] = 7500;
} else {
+ if (getCharacterCurrentParams(kCharacterCond1)[0] != 3) {
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ }
+
+ getCharacterCurrentParams(kCharacterCond1)[1] = 6470;
+ }
+
+ if (getCharacterCurrentParams(kCharacterCond1)[0] == 1) {
+ if (_gameProgress[kProgressField14]) {
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ }
+
_gameProgress[kProgressField14] = 3;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
- Cond1Call(&LogicManager::CONS_Cond1_GetUp, 0, 0, 0, 0);
}
- } else if (msg->action == 18) {
+
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
+ Cond1Call(&LogicManager::CONS_Cond1_GetUp, 0, 0, 0, 0);
+ break;
+ case 18:
switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 8200, 0, 0);
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, getCharacterCurrentParams(kCharacterCond1)[1], 0, 0);
return;
case 2:
- if (!getCharacterParams(kCharacterCond1, 8)[5])
- goto LABEL_22;
- if (cathInCorridor(kCarGreenSleeping) &&
- getCharacter(kCharacterCond1).characterPosition.position < getCharacter(kCharacterCath).characterPosition.position) {
+ if (getCharacterCurrentParams(kCharacterCond1)[0] == 1) {
+ if (_gameProgress[kProgressChapter] == 4)
+ send(kCharacterCond1, kCharacterTatiana, 238790488, 0);
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 9460, 0, 0);
- } else {
- LABEL_21:
- if (getCharacterParams(kCharacterCond1, 8)[5]) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
- Cond1Call(&LogicManager::CONS_Cond1_EnterTyler, 2, 0, 0, 0);
- } else {
- LABEL_22:
- getCharacterParams(kCharacterCond1, 8)[5] = 0;
- getCharacterParams(kCharacterCond1, 8)[6] = 0;
- if (_gameProgress[kProgressField14] == 3)
- _gameProgress[kProgressField14] = 0;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
+ Cond1Call(&LogicManager::CONS_Cond1_EnterTyler, 3, 0, 0, 0);
+ } else if (getCharacterCurrentParams(kCharacterCond1)[0] == 2) {
+ if (inComp(kCharacterCath, kCarGreenSleeping, 7500)) {
+ setDoor(2, kCharacterCath, checkDoor(2), 0, 0);
+ getCharacterCurrentParams(kCharacterCond1)[2] = 1;
+ }
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
+ Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "601Vb", 2, 0, 0);
+ } else if (getCharacterCurrentParams(kCharacterCond1)[0] == 3) {
+ if (inComp(kCharacterCath, kCarGreenSleeping, 6470)) {
+ setDoor(3, kCharacterCath, checkDoor(3), 0, 0);
+ getCharacterCurrentParams(kCharacterCond1)[2] = 1;
}
+
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
+ Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "601Mc", 3, 0, 0);
+ } else {
+ if (_gameProgress[kProgressField14] == 3)
+ _gameProgress[kProgressField14] = 0;
+
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
}
+
break;
case 3:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 8200, 0, 0);
- return;
+ if (_gameProgress[kProgressField14] == 3)
+ _gameProgress[kProgressField14] = 0;
+
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
+ break;
case 4:
- goto LABEL_21;
- case 5:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
- Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
+ startCycOtis(kCharacterCond1, "601Wb");
+ softBlockAtDoor(kCharacterCond1, 2);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
+ Cond1Call(&LogicManager::CONS_Cond1_DoDialog, "CON3020", 0, 0, 0);
return;
+ case 5:
+ if (getCharacterCurrentParams(kCharacterCond1)[2]) {
+ setDoor(2, kCharacterCath, checkDoor(2), 10, 9);
+ }
+
+ softReleaseAtDoor(kCharacterCond1, 2);
+ if (_gameProgress[kProgressField14] == 3)
+ _gameProgress[kProgressField14] = 0;
+
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
+ break;
case 6:
- case 9:
- goto LABEL_5;
+ startCycOtis(kCharacterCond1, "601Nc");
+ softBlockAtDoor(kCharacterCond1, 3);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
+ Cond1Call(&LogicManager::CONS_Cond1_DoDialog, "CON3020", 0, 0, 0);
+ break;
case 7:
+ if (getCharacterCurrentParams(kCharacterCond1)[2]) {
+ setDoor(3, kCharacterCath, checkDoor(3), 10, 9);
+ }
+
+ softReleaseAtDoor(kCharacterCond1, 3);
if (_gameProgress[kProgressField14] == 3)
_gameProgress[kProgressField14] = 0;
- if (!_gameProgress[kProgressEventMertensChronosInvitation])
- getCharacterParams(kCharacterCond1, 8)[6] = 1;
- getCharacterParams(kCharacterCond1, 8)[5] = 0;
+
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
- return;
+ break;
case 8:
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
- return;
+ break;
+ case 9:
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
-void LogicManager::CONS_Cond1_VisitCond2Special(CONS_PARAMS) {
+void LogicManager::CONS_Cond1_CathRattling(CONS_PARAMS) {
CharacterCallParams *params = &getCharacter(kCharacterCond1).callParams[getCharacter(kCharacterCond1).currentCall];
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_VisitCond2Special);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 37;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_CathRattling);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 31;
params->clear();
+ params->parameters[0] = param1.intParam;
+
fedEx(kCharacterCond1, kCharacterCond1, 12, 0);
}
-void LogicManager::HAND_Cond1_VisitCond2Special(HAND_PARAMS) {
- if (msg->action > 12) {
- switch (msg->action) {
- case 18:
- switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
- case 1:
+void LogicManager::HAND_Cond1_CathRattling(HAND_PARAMS) {
+ switch (msg->action) {
+ case 2:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
+ Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
+ break;
+ case 12:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
+ Cond1Call(&LogicManager::CONS_Cond1_DoSeqOtis, "601G", 0, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 1) {
+ if (whoRunningDialog(kCharacterCond1)) {
+ startCycOtis(kCharacterCond1, "601J");
+ } else {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 4, 1500, 0, 0);
- break;
- case 2:
- startCycOtis(kCharacterCond1, "601O");
- send(kCharacterCond1, kCharacterCond2, 154005632, 0);
- break;
- case 3:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
- break;
- case 4:
- getCharacter(kCharacterCond1).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
- fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
- break;
- default:
- return;
- }
- break;
- case 155853632:
- getCharacterCurrentParams(kCharacterCond1)[1] = 1;
- break;
- case 202558662:
- startCycOtis(kCharacterCond1, "601L");
- playDialog(kCharacterCond1, "CON1150", -1, 0);
- break;
- }
- } else if (msg->action == 12) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
- Cond1Call(&LogicManager::CONS_Cond1_GetUp, 0, 0, 0, 0);
- } else if (msg->action) {
- if (msg->action == 2) {
- getCharacterCurrentParams(kCharacterCond1)[0]++;
- if (getCharacterCurrentParams(kCharacterCond1)[0] == 1) {
- if (nearChar(kCharacterCond1, kCharacterCath, 2000u))
- playDialog(kCharacterCond1, "CON1152", -1, 0);
- else
- playDialog(kCharacterCond1, "CON1151", -1, 0);
}
+ } else if (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 2 ||
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 3) {
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
}
- } else if (getCharacterCurrentParams(kCharacterCond1)[0] >= 2 && getCharacterCurrentParams(kCharacterCond1)[1]) {
- send(kCharacterCond1, kCharacterCond2, 125499160, 0);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
- }
-}
-
-void LogicManager::CONS_Cond1_MakeBedTyler(CONS_PARAMS) {
- CharacterCallParams *params = &getCharacter(kCharacterCond1).callParams[getCharacter(kCharacterCond1).currentCall];
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_MakeBedTyler);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 38;
-
- params->clear();
-
- fedEx(kCharacterCond1, kCharacterCond1, 12, 0);
-}
-
-void LogicManager::HAND_Cond1_MakeBedTyler(HAND_PARAMS) {
- if (msg->action == 12) {
- if (getCharacterParams(kCharacterCond1, 8)[3] && _gameProgress[kProgressField14] != 29) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 8200, 0, 0);
- return;
- }
- goto LABEL_14;
- }
- if (msg->action != 18)
- return;
- if (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 1) {
- if (getCharacterParams(kCharacterCond1, 8)[3]) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
- Cond1Call(&LogicManager::CONS_Cond1_EnterTyler, 0, 0, 0, 0);
- return;
- }
- goto LABEL_14;
- }
- if (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 2) {
- getCharacterParams(kCharacterCond1, 8)[3] = 0;
- LABEL_14:
- getCharacter(kCharacterCond1).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
- fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ default:
+ break;
}
}
-void LogicManager::CONS_Cond1_MakeAllBeds(CONS_PARAMS) {
+void LogicManager::CONS_Cond1_BathroomTrip(CONS_PARAMS) {
CharacterCallParams *params = &getCharacter(kCharacterCond1).callParams[getCharacter(kCharacterCond1).currentCall];
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_MakeAllBeds);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 39;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_BathroomTrip);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 32;
params->clear();
fedEx(kCharacterCond1, kCharacterCond1, 12, 0);
}
-void LogicManager::HAND_Cond1_MakeAllBeds(HAND_PARAMS) {
- if (msg->action == 12) {
- getCharacterParams(kCharacterCond1, 8)[3] = 1;
+void LogicManager::HAND_Cond1_BathroomTrip(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
Cond1Call(&LogicManager::CONS_Cond1_GetUp, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
- Cond1Call(&LogicManager::CONS_Cond1_MakeBedMahmud, 0, 0, 0, 0);
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 9510, 0, 0);
break;
case 2:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
- Cond1Call(&LogicManager::CONS_Cond1_DoPending, 0, 0, 0, 0);
- break;
- case 3:
+ if (getCharacter(kCharacterCond1).characterPosition.position < 9460) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
+ } else {
+ endGraphics(kCharacterCond1);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWait, 900, 0, 0, 0);
+ }
+
+ break;
+ case 3:
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
- Cond1Call(&LogicManager::CONS_Cond1_MakeBedAugust, 0, 0, 0, 0);
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
break;
case 4:
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
- Cond1Call(&LogicManager::CONS_Cond1_DoPending, 0, 0, 0, 0);
- break;
- case 5:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
- Cond1Call(&LogicManager::CONS_Cond1_MakeBedAlexei, 0, 0, 0, 0);
- break;
- case 6:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
- Cond1Call(&LogicManager::CONS_Cond1_DoPending, 0, 0, 0, 0);
- break;
- case 7:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
- Cond1Call(&LogicManager::CONS_Cond1_MakeBedTyler, 0, 0, 0, 0);
- break;
- case 8:
- if (_gameProgress[kProgressField14] == 3)
- _gameProgress[kProgressField14] = 0;
-
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
- break;
- case 9:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 10;
Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
break;
- case 10:
+ case 5:
getCharacter(kCharacterCond1).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
-void LogicManager::CONS_Cond1_VisitKahina(CONS_PARAMS) {
+void LogicManager::CONS_Cond1_DoPending(CONS_PARAMS) {
CharacterCallParams *params = &getCharacter(kCharacterCond1).callParams[getCharacter(kCharacterCond1).currentCall];
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_VisitKahina);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 40;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_DoPending);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 33;
params->clear();
fedEx(kCharacterCond1, kCharacterCond1, 12, 0);
}
-void LogicManager::HAND_Cond1_VisitKahina(HAND_PARAMS) {
- if (msg->action == 12) {
- getCharacterParams(kCharacterCond1, 8)[10] = 0;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
- Cond1Call(&LogicManager::CONS_Cond1_GetUp, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+void LogicManager::HAND_Cond1_DoPending(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ if (getCharacterParams(kCharacterCond1, 8)[7] ||
+ getCharacterParams(kCharacterCond1, 8)[13] ||
+ getCharacterParams(kCharacterCond1, 8)[14] ||
+ getCharacterParams(kCharacterCond1, 8)[12] ||
+ getCharacterParams(kCharacterCond1, 8)[11] ||
+ getCharacterParams(kCharacterCond1, 8)[9] ||
+ getCharacterParams(kCharacterCond1, 8)[5] ||
+ getCharacterParams(kCharacterCond1, 8)[10] ||
+ getCharacterParams(kCharacterCond1, 8)[8] ||
+ getCharacterParams(kCharacterCond1, 8)[17]) {
+
+ getCharacterParams(kCharacterCond1, 8)[15] = 1;
+
+ if (getCharacterParams(kCharacterCond1, 8)[7]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 1500, 0, 0);
+ } else {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 540, 0, 0);
+ }
+ } else {
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ }
+
+ break;
+ case 18:
switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
case 1:
+ getCharacterParams(kCharacterCond1, 8)[16] = 1;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 2, 9460, 0, 0);
+ Cond1Call(&LogicManager::CONS_Cond1_Listen, 9, 0, 0, 0);
break;
case 2:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
- Cond1Call(&LogicManager::CONS_Cond1_DoWait, 1800, 0, 0, 0);
+ getCharacterParams(kCharacterCond1, 8)[15] = 0;
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
break;
case 3:
+ endGraphics(kCharacterCond1);
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 1500, 0, 0);
+ Cond1Call(&LogicManager::CONS_Cond1_DoWait, 75, 0, 0, 0);
break;
case 4:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
- Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
- break;
+ if (getCharacterParams(kCharacterCond1, 8)[13]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
+ Cond1Call(&LogicManager::CONS_Cond1_AugustLockUnlockMyComp, 1, 0, 0, 0);
+ break;
+ }
+
+ // fall through
case 5:
- getCharacterParams(kCharacterCond1, 8)[5] = 1;
+ if (getCharacterParams(kCharacterCond1, 8)[14]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
+ Cond1Call(&LogicManager::CONS_Cond1_AugustLockUnlockMyComp, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 6:
+ if (getCharacterParams(kCharacterCond1, 8)[12]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
+ Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 1, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 7:
+ if (getCharacterParams(kCharacterCond1, 8)[11]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
+ Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 8:
+ if (getCharacterParams(kCharacterCond1, 8)[9]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
+ Cond1Call(&LogicManager::CONS_Cond1_DeliverAugustMessage, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 9:
+ if (getCharacterParams(kCharacterCond1, 8)[5]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 10;
+ Cond1Call(&LogicManager::CONS_Cond1_DeliverKronosMessage, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 10:
+ if (getCharacterParams(kCharacterCond1, 8)[10]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 11;
+ Cond1Call(&LogicManager::CONS_Cond1_VisitKahina, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 11:
+ if (getCharacterParams(kCharacterCond1, 8)[8]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 12;
+ Cond1Call(&LogicManager::CONS_Cond1_VisitCond2, "CON1200", 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 12:
+ if (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 12) {
+ send(kCharacterCond1, kCharacterCond2, 168254872, 0);
+ getCharacterParams(kCharacterCond1, 8)[8] = 0;
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[17]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 13;
+ Cond1Call(&LogicManager::CONS_Cond1_VisitCond2Special, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 13:
+ if (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 13) {
+ getCharacterParams(kCharacterCond1, 8)[17] = 0;
+ }
+
+ getCharacterParams(kCharacterCond1, 8)[15] = 0;
getCharacter(kCharacterCond1).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
@@ -3080,352 +3142,1070 @@ void LogicManager::HAND_Cond1_VisitKahina(HAND_PARAMS) {
default:
break;
}
+
+ break;
+ default:
+ break;
}
}
-void LogicManager::CONS_Cond1_StartPart1(CONS_PARAMS) {
+void LogicManager::CONS_Cond1_Birth(CONS_PARAMS) {
CharacterCallParams *params = &getCharacter(kCharacterCond1).callParams[getCharacter(kCharacterCond1).currentCall];
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_StartPart1);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 41;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_Birth);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 34;
params->clear();
fedEx(kCharacterCond1, kCharacterCond1, 12, 0);
}
-void LogicManager::HAND_Cond1_StartPart1(HAND_PARAMS) {
- if (msg->action == 12) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
- } else if (msg->action == 18) {
- if (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 1) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
- Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
- } else if (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 2) {
- CONS_Cond1_Sitting(0, 0, 0, 0);
+void LogicManager::HAND_Cond1_Birth(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterCond1)[0]) {
+ getCharacterCurrentParams(kCharacterCond1)[0] = 1;
+ CONS_Cond1_StartPart1(0, 0, 0, 0);
}
+
+ break;
+ case 12:
+ autoMessage(kCharacterCond1, 171394341, 7);
+ autoMessage(kCharacterCond1, 169633856, 9);
+ autoMessage(kCharacterCond1, 238732837, 10);
+ autoMessage(kCharacterCond1, 269624833, 12);
+ autoMessage(kCharacterCond1, 302614416, 11);
+ autoMessage(kCharacterCond1, 190082817, 8);
+ autoMessage(kCharacterCond1, 269436673, 13);
+ autoMessage(kCharacterCond1, 303343617, 14);
+ autoMessage(kCharacterCond1, 224122407, 17);
+ autoMessage(kCharacterCond1, 201431954, 18);
+ autoMessage(kCharacterCond1, 188635520, 19);
+ autoMessage(kCharacterCond1, 204379649, 4);
+ getCharacterParams(kCharacterCond1, 8)[0] = 0;
+ getCharacter(kCharacterCond1).characterPosition.position = 9460;
+ getCharacter(kCharacterCond1).characterPosition.location = 0;
+ getCharacter(kCharacterCond1).characterPosition.car = kCarGreenSleeping;
+ break;
+ default:
+ break;
}
}
-void LogicManager::CONS_Cond1_Sitting(CONS_PARAMS) {
+void LogicManager::CONS_Cond1_DeliverAugustMessage(CONS_PARAMS) {
CharacterCallParams *params = &getCharacter(kCharacterCond1).callParams[getCharacter(kCharacterCond1).currentCall];
- _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_Sitting);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 42;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_DeliverAugustMessage);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 35;
params->clear();
fedEx(kCharacterCond1, kCharacterCond1, 12, 0);
}
-void LogicManager::HAND_Cond1_Sitting(HAND_PARAMS) {
- if (msg->action > 11) {
- if (msg->action > 17) {
- if (msg->action > 225358684) {
- if (msg->action == 225932896) {
- if (!getCharacterParams(kCharacterCond1, 8)[16] && !getCharacterParams(kCharacterCond1, 8)[0]) {
- send(kCharacterCond1, kCharacterFrancois, 205346192, 0);
- }
- } else if (msg->action == 305159806 && !getCharacterParams(kCharacterCond1, 8)[16] && !getCharacterParams(kCharacterCond1, 8)[0]) {
- getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 24;
- Cond1Call(&LogicManager::CONS_Cond1_CathRattling, msg->param, 0, 0, 0);
- }
- } else if (msg->action == 225358684) {
- if (!getCharacterParams(kCharacterCond1, 8)[0]) {
- getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 23;
- Cond1Call(&LogicManager::CONS_Cond1_CathBuzzing, msg->param, 0, 0, 0);
- }
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
- case 1:
- playNIS(kEventMertensKronosInvitation);
- _gameProgress[kProgressEventMertensChronosInvitation] = 1;
- getCharacterParams(kCharacterCond1, 8)[5] = 0;
- getCharacterParams(kCharacterCond1, 8)[6] = 0;
- startSeqOtis(kCharacterCond1, "601A");
- takeItem(kItem7);
- getCharacterParams(kCharacterCond1, 8)[0] = 0;
- getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
- Cond1Call(&LogicManager::CONS_Cond1_FinishSeqOtis, 0, 0, 0, 0);
- break;
- case 2:
- case 4:
- startCycOtis(kCharacterCond1, "601B");
- goto LABEL_61;
- case 3:
- playNIS((kEventMertensLastCarOriginalJacket - (_gameProgress[kProgressJacket] == 2)));
- startSeqOtis(kCharacterCond1, "601A");
- bumpCath(kCarGreenSleeping, 6, 255);
- takeItem(kItem7);
- getCharacterParams(kCharacterCond1, 8)[0] = 0;
- getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
- Cond1Call(&LogicManager::CONS_Cond1_FinishSeqOtis, 0, 0, 0, 0);
- break;
- case 5:
- case 6:
- goto LABEL_75;
- case 8:
- goto LABEL_80;
- case 9:
- goto LABEL_90;
- case 10:
- goto LABEL_93;
- case 11:
- goto LABEL_95;
- case 12:
- goto LABEL_97;
- case 13:
- goto LABEL_99;
- case 14:
- goto LABEL_101;
- case 15:
- goto LABEL_103;
- case 16:
- goto LABEL_105;
- case 17:
- goto LABEL_107;
- case 18:
- goto LABEL_109;
- case 19:
- getCharacterCurrentParams(kCharacterCond1)[0] = 1;
- goto LABEL_69;
- case 21:
- playNIS(kEventMertensAskTylerCompartmentD);
- startSeqOtis(kCharacterCond1, "601A");
- _gameInventory[kItem7].location = 0;
- bumpCath(kCarGreenSleeping, 25, 255);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 22;
- Cond1Call(&LogicManager::CONS_Cond1_FinishSeqOtis, 0, 0, 0, 0);
- break;
- case 22:
- startCycOtis(kCharacterCond1, "601B");
- break;
- default:
- return;
- }
- }
- } else if (msg->action == 17) {
- if (!getCharacterParams(kCharacterCond1, 8)[16]) {
- if (checkCathDir(kCarGreenSleeping, 23) && getCharacterParams(kCharacterCond1, 8)[6] && !_gameEvents[kEventKronosConversation]) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
- Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, 120, 0, 0);
- } else if (!checkCathDir(kCarGreenSleeping, 23) || _gameProgress[kProgressEventMertensChronosInvitation] || _gameEvents[kEventMertensLastCar] || _gameEvents[kEventMertensLastCarOriginalJacket]) {
- LABEL_61:
- if (!checkCathDir(kCarGreenSleeping, 1) && !checkCathDir(kCarGreenSleeping, 23) || getCharacterParams(kCharacterCond1, 8)[0] || getCharacterParams(kCharacterCond1, 8)[16]) {
- LABEL_75:
- if (cathInCorridor(kCarGreenSleeping) && getCharacter(kCharacterCond1).characterPosition.position < getCharacter(kCharacterCath).characterPosition.position && (_gameProgress[1] == 1 || getCharacterParams(kCharacterCond1, 8)[6])) {
- getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
- Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
- }
- } else {
- getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- if (checkCathDir(kCarGreenSleeping, 1)) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
- Cond1Call(&LogicManager::CONS_Cond1_Passing, 1, 0, 0, 0);
- } else {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
- Cond1Call(&LogicManager::CONS_Cond1_Passing, 0, 0, 0, 0);
- }
- }
- } else {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
- Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, 118, 0, 0);
- }
- }
- } else if (msg->action == 12) {
- getCharacter(kCharacterCond1).characterPosition.car = kCarGreenSleeping;
- getCharacter(kCharacterCond1).characterPosition.position = 1500;
- getCharacter(kCharacterCond1).characterPosition.location = 0;
- takeItem(kItem7);
- }
- return;
- }
- if (msg->action == 11) {
- if (!getCharacterParams(kCharacterCond1, 8)[0] && !getCharacterParams(kCharacterCond1, 8)[16]) {
- getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 20;
- Cond1Call(&LogicManager::CONS_Cond1_Passing, msg->param, msg->sender, 0, 0);
- }
- return;
- }
- if (msg->action) {
- if (msg->action == 1) {
- getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 21;
- Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, 139, 0, 0);
+void LogicManager::HAND_Cond1_DeliverAugustMessage(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ if (_gameProgress[kProgressField14] == 29) {
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ } else {
+ _gameProgress[kProgressField14] = 3;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
+ Cond1Call(&LogicManager::CONS_Cond1_GetUp, 0, 0, 0, 0);
}
- return;
- }
- if (getCharacterParams(kCharacterCond1, 8)[18]) {
- getCharacterParams(kCharacterCond1, 8)[7] = 0;
- getCharacterParams(kCharacterCond1, 8)[13] = 0;
- getCharacterParams(kCharacterCond1, 8)[14] = 0;
- getCharacterParams(kCharacterCond1, 8)[11] = 0;
- getCharacterParams(kCharacterCond1, 8)[12] = 0;
- getCharacterParams(kCharacterCond1, 8)[9] = 0;
- getCharacterParams(kCharacterCond1, 8)[5] = 0;
- getCharacterParams(kCharacterCond1, 8)[6] = 0;
- getCharacterParams(kCharacterCond1, 8)[10] = 0;
- getCharacterParams(kCharacterCond1, 8)[8] = 0;
- getCharacterParams(kCharacterCond1, 8)[17] = 0;
- getCharacterParams(kCharacterCond1, 8)[16] = 0;
- getCharacterParams(kCharacterCond1, 8)[0] = 1;
- getCharacterParams(kCharacterCond1, 8)[16] = 0;
- getCharacterCurrentParams(kCharacterCond1)[0] = 1;
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 8200, 0, 0);
+ break;
+ case 2:
+ if (!getCharacterParams(kCharacterCond1, 8)[9] ||
+ _gameProgress[kProgressEventMetAugust]) {
+ getCharacterParams(kCharacterCond1, 8)[9] = 0;
+
+ if (_gameProgress[kProgressField14] == 3)
+ _gameProgress[kProgressField14] = 0;
+
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
+ } else {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
+ Cond1Call(&LogicManager::CONS_Cond1_EnterTyler, 1, 0, 0, 0);
+ }
+
+ break;
+ case 3:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
+ Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
+ break;
+ case 4:
+ case 7:
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ case 5:
+ if (_gameProgress[kProgressField14] == 3)
+ _gameProgress[kProgressField14] = 0;
+
+ if (_gameProgress[kProgressEventMertensAugustWaiting])
+ getCharacterParams(kCharacterCond1, 8)[9] = 0;
+
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
+ break;
+ case 6:
+ getCharacterParams(kCharacterCond1, 8)[9] = 0;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
+ Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_Cond1_DeliverKronosMessage(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterCond1).callParams[getCharacter(kCharacterCond1).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_DeliverKronosMessage);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 36;
+
+ params->clear();
+
+ fedEx(kCharacterCond1, kCharacterCond1, 12, 0);
+}
+
+void LogicManager::HAND_Cond1_DeliverKronosMessage(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ if (_gameProgress[kProgressField14] == 29) {
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ } else {
+ _gameProgress[kProgressField14] = 3;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
+ Cond1Call(&LogicManager::CONS_Cond1_GetUp, 0, 0, 0, 0);
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 8200, 0, 0);
+ return;
+ case 2:
+ if (!getCharacterParams(kCharacterCond1, 8)[5]) {
+ getCharacterParams(kCharacterCond1, 8)[5] = 0;
+ getCharacterParams(kCharacterCond1, 8)[6] = 0;
+
+ if (_gameProgress[kProgressField14] == 3)
+ _gameProgress[kProgressField14] = 0;
+
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
+ break;
+ }
+
+ if (cathInCorridor(kCarGreenSleeping) &&
+ getCharacter(kCharacterCond1).characterPosition.position < getCharacter(kCharacterCath).characterPosition.position) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 9460, 0, 0);
+ } else {
+ if (getCharacterParams(kCharacterCond1, 8)[5]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
+ Cond1Call(&LogicManager::CONS_Cond1_EnterTyler, 2, 0, 0, 0);
+ } else {
+ getCharacterParams(kCharacterCond1, 8)[5] = 0;
+ getCharacterParams(kCharacterCond1, 8)[6] = 0;
+
+ if (_gameProgress[kProgressField14] == 3)
+ _gameProgress[kProgressField14] = 0;
+
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
+ }
+ }
+
+ break;
+ case 3:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 8200, 0, 0);
+ break;
+ case 4:
+ if (getCharacterParams(kCharacterCond1, 8)[5]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
+ Cond1Call(&LogicManager::CONS_Cond1_EnterTyler, 2, 0, 0, 0);
+ } else {
+ getCharacterParams(kCharacterCond1, 8)[5] = 0;
+ getCharacterParams(kCharacterCond1, 8)[6] = 0;
+ if (_gameProgress[kProgressField14] == 3)
+ _gameProgress[kProgressField14] = 0;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
+ }
+
+ break;
+ case 5:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
+ Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
+ break;
+ case 6:
+ case 9:
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ case 7:
+ if (_gameProgress[kProgressField14] == 3)
+ _gameProgress[kProgressField14] = 0;
+
+ if (!_gameProgress[kProgressEventMertensChronosInvitation])
+ getCharacterParams(kCharacterCond1, 8)[6] = 1;
+
+ getCharacterParams(kCharacterCond1, 8)[5] = 0;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
+ break;
+ case 8:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
+ Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_Cond1_VisitCond2Special(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterCond1).callParams[getCharacter(kCharacterCond1).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_VisitCond2Special);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 37;
+
+ params->clear();
+
+ fedEx(kCharacterCond1, kCharacterCond1, 12, 0);
+}
+
+void LogicManager::HAND_Cond1_VisitCond2Special(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterCond1)[0] >= 2 && getCharacterCurrentParams(kCharacterCond1)[1]) {
+ send(kCharacterCond1, kCharacterCond2, 125499160, 0);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
+ }
+
+ break;
+ case 2:
+ getCharacterCurrentParams(kCharacterCond1)[0]++;
+ if (getCharacterCurrentParams(kCharacterCond1)[0] == 1) {
+ if (nearChar(kCharacterCond1, kCharacterCath, 2000))
+ playDialog(kCharacterCond1, "CON1152", -1, 0);
+ else
+ playDialog(kCharacterCond1, "CON1151", -1, 0);
+ }
+
+ break;
+ case 12:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
+ Cond1Call(&LogicManager::CONS_Cond1_GetUp, 0, 0, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 4, 1500, 0, 0);
+ break;
+ case 2:
+ startCycOtis(kCharacterCond1, "601O");
+ send(kCharacterCond1, kCharacterCond2, 154005632, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
+ Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 155853632:
getCharacterCurrentParams(kCharacterCond1)[1] = 1;
- startCycOtis(kCharacterCond1, "601E");
- getCharacterParams(kCharacterCond1, 8)[18] = 0;
+ break;
+ case 202558662:
+ startCycOtis(kCharacterCond1, "601L");
+ playDialog(kCharacterCond1, "CON1150", -1, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_Cond1_MakeBedTyler(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterCond1).callParams[getCharacter(kCharacterCond1).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_MakeBedTyler);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 38;
+
+ params->clear();
+
+ fedEx(kCharacterCond1, kCharacterCond1, 12, 0);
+}
+
+void LogicManager::HAND_Cond1_MakeBedTyler(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ if (getCharacterParams(kCharacterCond1, 8)[3] && _gameProgress[kProgressField14] != 29) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 8200, 0, 0);
+ } else {
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ }
+
+ break;
+ case 18:
+ if (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 1) {
+ if (getCharacterParams(kCharacterCond1, 8)[3]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
+ Cond1Call(&LogicManager::CONS_Cond1_EnterTyler, 0, 0, 0, 0);
+ } else {
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ }
+
+ break;
+ }
+
+ if (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 2) {
+ getCharacterParams(kCharacterCond1, 8)[3] = 0;
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ }
+
+ break;
+ default:
+ break;
}
- if (getCharacterParams(kCharacterCond1, 8)[16] ||
- _gameProgress[kProgressEventFoundCorpse] ||
- _gameEvents[kEventMertensAskTylerCompartment] ||
- _gameEvents[kEventMertensAskTylerCompartmentD]) {
+}
+
+void LogicManager::CONS_Cond1_MakeAllBeds(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterCond1).callParams[getCharacter(kCharacterCond1).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_MakeAllBeds);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 39;
+
+ params->clear();
+
+ fedEx(kCharacterCond1, kCharacterCond1, 12, 0);
+}
+
+void LogicManager::HAND_Cond1_MakeAllBeds(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ getCharacterParams(kCharacterCond1, 8)[3] = 1;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
+ Cond1Call(&LogicManager::CONS_Cond1_GetUp, 0, 0, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
+ Cond1Call(&LogicManager::CONS_Cond1_MakeBedMahmud, 0, 0, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
+ Cond1Call(&LogicManager::CONS_Cond1_DoPending, 0, 0, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
+ Cond1Call(&LogicManager::CONS_Cond1_MakeBedAugust, 0, 0, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
+ Cond1Call(&LogicManager::CONS_Cond1_DoPending, 0, 0, 0, 0);
+ break;
+ case 5:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
+ Cond1Call(&LogicManager::CONS_Cond1_MakeBedAlexei, 0, 0, 0, 0);
+ break;
+ case 6:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
+ Cond1Call(&LogicManager::CONS_Cond1_DoPending, 0, 0, 0, 0);
+ break;
+ case 7:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
+ Cond1Call(&LogicManager::CONS_Cond1_MakeBedTyler, 0, 0, 0, 0);
+ break;
+ case 8:
+ if (_gameProgress[kProgressField14] == 3)
+ _gameProgress[kProgressField14] = 0;
+
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
+ break;
+ case 9:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 10;
+ Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
+ break;
+ case 10:
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_Cond1_VisitKahina(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterCond1).callParams[getCharacter(kCharacterCond1).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_VisitKahina);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 40;
+
+ params->clear();
+
+ fedEx(kCharacterCond1, kCharacterCond1, 12, 0);
+}
+
+void LogicManager::HAND_Cond1_VisitKahina(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ getCharacterParams(kCharacterCond1, 8)[10] = 0;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
+ Cond1Call(&LogicManager::CONS_Cond1_GetUp, 0, 0, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 2, 9460, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWait, 1800, 0, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 1500, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
+ Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
+ break;
+ case 5:
+ getCharacterParams(kCharacterCond1, 8)[5] = 1;
+ getCharacter(kCharacterCond1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
+ fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_Cond1_StartPart1(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterCond1).callParams[getCharacter(kCharacterCond1).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_StartPart1);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 41;
+
+ params->clear();
+
+ fedEx(kCharacterCond1, kCharacterCond1, 12, 0);
+}
+
+void LogicManager::HAND_Cond1_StartPart1(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 1) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
+ Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
+ } else if (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 2) {
+ CONS_Cond1_Sitting(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_Cond1_Sitting(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterCond1).callParams[getCharacter(kCharacterCond1).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond1, &LogicManager::HAND_Cond1_Sitting);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall] = 42;
+
+ params->clear();
+
+ fedEx(kCharacterCond1, kCharacterCond1, 12, 0);
+}
+
+void LogicManager::HAND_Cond1_Sitting(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ {
+ if (getCharacterParams(kCharacterCond1, 8)[18]) {
+ getCharacterParams(kCharacterCond1, 8)[7] = 0;
+ getCharacterParams(kCharacterCond1, 8)[13] = 0;
+ getCharacterParams(kCharacterCond1, 8)[14] = 0;
+ getCharacterParams(kCharacterCond1, 8)[11] = 0;
+ getCharacterParams(kCharacterCond1, 8)[12] = 0;
+ getCharacterParams(kCharacterCond1, 8)[9] = 0;
+ getCharacterParams(kCharacterCond1, 8)[5] = 0;
+ getCharacterParams(kCharacterCond1, 8)[6] = 0;
+ getCharacterParams(kCharacterCond1, 8)[10] = 0;
+ getCharacterParams(kCharacterCond1, 8)[8] = 0;
+ getCharacterParams(kCharacterCond1, 8)[17] = 0;
+ getCharacterParams(kCharacterCond1, 8)[16] = 0;
+ getCharacterParams(kCharacterCond1, 8)[0] = 1;
+ getCharacterParams(kCharacterCond1, 8)[16] = 0;
+ getCharacterCurrentParams(kCharacterCond1)[0] = 1;
+ getCharacterCurrentParams(kCharacterCond1)[1] = 1;
+ startCycOtis(kCharacterCond1, "601E");
+ getCharacterParams(kCharacterCond1, 8)[18] = 0;
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[16] ||
+ _gameProgress[kProgressEventFoundCorpse] ||
+ _gameEvents[kEventMertensAskTylerCompartment] ||
+ _gameEvents[kEventMertensAskTylerCompartmentD]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ } else {
+ getCharacter(kCharacterCond1).inventoryItem = 0x80;
+ }
+
+ if (!getCharacterCurrentParams(kCharacterCond1)[1]) {
+ if (_gameTime > 1125000 && !getCharacterCurrentParams(kCharacterCond1)[2]) {
+ getCharacterCurrentParams(kCharacterCond1)[2] = 1;
+ send(kCharacterCond1, kCharacterMahmud, 170483072, 0);
+ }
+
+ if (getCharacterCurrentParams(kCharacterCond1)[3] != 0x7FFFFFFF && _gameTime > 1170900) {
+ if (_gameTime > 1188000) {
+ getCharacterCurrentParams(kCharacterCond1)[3] = 0x7FFFFFFF;
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
+ Cond1Call(&LogicManager::CONS_Cond1_VisitCond2Double, "CON1210", "CON1210A", 0, 0);
+ break;
+ }
+
+ if (!cathInCorridor(kCarGreenSleeping) &&
+ !cathInCorridor(kCarRedSleeping) ||
+ dialogRunning("REB1205") ||
+ !inComp(kCharacterMadame, kCarRedSleeping, 5790) ||
+ !getCharacterCurrentParams(kCharacterCond1)[3]) {
+
+ getCharacterCurrentParams(kCharacterCond1)[3] = _gameTime;
+ if (!_gameTime) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
+ Cond1Call(&LogicManager::CONS_Cond1_VisitCond2Double, "CON1210", "CON1210A", 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterCond1)[3] < _gameTime) {
+ getCharacterCurrentParams(kCharacterCond1)[3] = 0x7FFFFFFF;
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
+ Cond1Call(&LogicManager::CONS_Cond1_VisitCond2Double, "CON1210", "CON1210A", 0, 0);
+ break;
+ }
+ }
+ }
+
+ bool skip = false;
+ if (_gameTime > 1215000 && !getCharacterParams(kCharacterCond1, 8)[0] && !getCharacterParams(kCharacterCond1, 8)[16]) {
+ if (!getCharacterCurrentParams(kCharacterCond1)[4]) {
+ getCharacterCurrentParams(kCharacterCond1)[4] = _gameTime + 2700;
+ if (_gameTime == -2700) {
+ skip = true;
+ startCycOtis(kCharacterCond1, "601E");
+ getCharacterParams(kCharacterCond1, 8)[0] = 1;
+ getCharacterCurrentParams(kCharacterCond1)[4] = 0;
+ }
+ }
+
+ if (!skip && getCharacterCurrentParams(kCharacterCond1)[4] < _gameTime) {
+ getCharacterCurrentParams(kCharacterCond1)[4] = 0x7FFFFFFF;
+ startCycOtis(kCharacterCond1, "601E");
+ getCharacterParams(kCharacterCond1, 8)[0] = 1;
+ getCharacterCurrentParams(kCharacterCond1)[4] = 0;
+ }
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[7]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
+ Cond1Call(&LogicManager::CONS_Cond1_Listen, 9, 0, 0, 0);
+ break;
+ }
+
+ if (_gameProgress[kProgressField14] != 29) {
+ if (getCharacterParams(kCharacterCond1, 8)[13]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 10;
+ Cond1Call(&LogicManager::CONS_Cond1_AugustLockUnlockMyComp, 1, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[14]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 11;
+ Cond1Call(&LogicManager::CONS_Cond1_AugustLockUnlockMyComp, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[12]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 12;
+ Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 1, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[11]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 13;
+ Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[9]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 14;
+ Cond1Call(&LogicManager::CONS_Cond1_DeliverAugustMessage, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[5]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 15;
+ Cond1Call(&LogicManager::CONS_Cond1_DeliverKronosMessage, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[10]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 16;
+ Cond1Call(&LogicManager::CONS_Cond1_VisitKahina, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[8]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacterParams(kCharacterCond1, 8)[8] = 0;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 17;
+ Cond1Call(&LogicManager::CONS_Cond1_VisitCond2, "CON1200", 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[17]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacterParams(kCharacterCond1, 8)[17] = 0;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 18;
+ Cond1Call(&LogicManager::CONS_Cond1_VisitCond2Special, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterCurrentParams(kCharacterCond1)[0] || !getCharacterParams(kCharacterCond1, 8)[4]) {
+ if (getCharacterParams(kCharacterCond1, 8)[0] &&
+ !whoRunningDialog(kCharacterCond1) && _gameProgress[kProgressField18] != 4) {
+ playDialog(kCharacterCond1, "CON1505", -1, 0);
+ }
+
+ break;
+ }
+
getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- } else {
- getCharacter(kCharacterCond1).inventoryItem = 0x80;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 19;
+ Cond1Call(&LogicManager::CONS_Cond1_MakeAllBeds, 0, 0, 0, 0);
+
+ break;
}
+ case 1:
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 21;
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensAskTylerCompartmentD, 0, 0);
+ break;
+ case 11:
+ if (!getCharacterParams(kCharacterCond1, 8)[0] && !getCharacterParams(kCharacterCond1, 8)[16]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 20;
+ Cond1Call(&LogicManager::CONS_Cond1_Passing, msg->param, msg->sender, 0, 0);
+ }
- if (!getCharacterCurrentParams(kCharacterCond1)[1]) {
- if (_gameTime > 1125000 && !getCharacterCurrentParams(kCharacterCond1)[2]) {
- getCharacterCurrentParams(kCharacterCond1)[2] = 1;
- send(kCharacterCond1, kCharacterMahmud, 170483072, 0);
+ break;
+ case 12:
+ getCharacter(kCharacterCond1).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterCond1).characterPosition.position = 1500;
+ getCharacter(kCharacterCond1).characterPosition.location = 0;
+ takeItem(kItem7);
+ break;
+ case 17:
+ if (!getCharacterParams(kCharacterCond1, 8)[16]) {
+ if (checkCathDir(kCarGreenSleeping, 23) && getCharacterParams(kCharacterCond1, 8)[6] && !_gameEvents[kEventKronosConversation]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensKronosInvitation, 0, 0);
+ } else if (!checkCathDir(kCarGreenSleeping, 23) || _gameProgress[kProgressEventMertensChronosInvitation] || _gameEvents[kEventMertensLastCar] || _gameEvents[kEventMertensLastCarOriginalJacket]) {
+ if (!checkCathDir(kCarGreenSleeping, 1) && !checkCathDir(kCarGreenSleeping, 23) || getCharacterParams(kCharacterCond1, 8)[0] || getCharacterParams(kCharacterCond1, 8)[16]) {
+ if (cathInCorridor(kCarGreenSleeping) && getCharacter(kCharacterCond1).characterPosition.position < getCharacter(kCharacterCath).characterPosition.position && (_gameProgress[1] == 1 || getCharacterParams(kCharacterCond1, 8)[6])) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
+ Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
+ }
+ } else {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ if (checkCathDir(kCarGreenSleeping, 1)) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
+ Cond1Call(&LogicManager::CONS_Cond1_Passing, 1, 0, 0, 0);
+ } else {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
+ Cond1Call(&LogicManager::CONS_Cond1_Passing, 0, 0, 0, 0);
+ }
+ }
+ } else {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
+ Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensLastCar, 0, 0);
+ }
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
+ case 1:
+ playNIS(kEventMertensKronosInvitation);
+ _gameProgress[kProgressEventMertensChronosInvitation] = 1;
+ getCharacterParams(kCharacterCond1, 8)[5] = 0;
+ getCharacterParams(kCharacterCond1, 8)[6] = 0;
+ startSeqOtis(kCharacterCond1, "601A");
+ takeItem(kItem7);
+ getCharacterParams(kCharacterCond1, 8)[0] = 0;
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
+ Cond1Call(&LogicManager::CONS_Cond1_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 2:
+ case 4:
+ startCycOtis(kCharacterCond1, "601B");
+ if (!checkCathDir(kCarGreenSleeping, 1) && !checkCathDir(kCarGreenSleeping, 23) || getCharacterParams(kCharacterCond1, 8)[0] || getCharacterParams(kCharacterCond1, 8)[16]) {
+ if (cathInCorridor(kCarGreenSleeping) && getCharacter(kCharacterCond1).characterPosition.position < getCharacter(kCharacterCath).characterPosition.position && (_gameProgress[1] == 1 || getCharacterParams(kCharacterCond1, 8)[6])) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
+ Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
+ }
+ } else {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ if (checkCathDir(kCarGreenSleeping, 1)) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
+ Cond1Call(&LogicManager::CONS_Cond1_Passing, 1, 0, 0, 0);
+ } else {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
+ Cond1Call(&LogicManager::CONS_Cond1_Passing, 0, 0, 0, 0);
+ }
+ }
+
+ break;
+ case 3:
+ playNIS((kEventMertensLastCarOriginalJacket - (_gameProgress[kProgressJacket] == 2)));
+ startSeqOtis(kCharacterCond1, "601A");
+ bumpCath(kCarGreenSleeping, 6, 255);
+ takeItem(kItem7);
+ getCharacterParams(kCharacterCond1, 8)[0] = 0;
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
+ Cond1Call(&LogicManager::CONS_Cond1_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 5:
+ case 6:
+ if (cathInCorridor(kCarGreenSleeping) && getCharacter(kCharacterCond1).characterPosition.position < getCharacter(kCharacterCath).characterPosition.position && (_gameProgress[1] == 1 || getCharacterParams(kCharacterCond1, 8)[6])) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
+ Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
+ }
+
+ break;
+ case 8:
+ {
+ bool skip = false;
+ if (_gameTime > 1215000 && !getCharacterParams(kCharacterCond1, 8)[0] && !getCharacterParams(kCharacterCond1, 8)[16]) {
+ if (!getCharacterCurrentParams(kCharacterCond1)[4]) {
+ getCharacterCurrentParams(kCharacterCond1)[4] = _gameTime + 2700;
+ if (_gameTime == -2700) {
+ skip = true;
+ startCycOtis(kCharacterCond1, "601E");
+ getCharacterParams(kCharacterCond1, 8)[0] = 1;
+ getCharacterCurrentParams(kCharacterCond1)[4] = 0;
+ }
+ }
+
+ if (!skip && getCharacterCurrentParams(kCharacterCond1)[4] < _gameTime) {
+ getCharacterCurrentParams(kCharacterCond1)[4] = 0x7FFFFFFF;
+ startCycOtis(kCharacterCond1, "601E");
+ getCharacterParams(kCharacterCond1, 8)[0] = 1;
+ getCharacterCurrentParams(kCharacterCond1)[4] = 0;
+ }
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[7]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
+ Cond1Call(&LogicManager::CONS_Cond1_Listen, 9, 0, 0, 0);
+ break;
+ }
+
+ // fall through
}
- if (getCharacterCurrentParams(kCharacterCond1)[3] != 0x7FFFFFFF && _gameTime > 1170900) {
- if (_gameTime > 1188000)
- goto LABEL_39;
+ case 9:
+ if (_gameProgress[kProgressField14] != 29) {
+ if (getCharacterParams(kCharacterCond1, 8)[13]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 10;
+ Cond1Call(&LogicManager::CONS_Cond1_AugustLockUnlockMyComp, 1, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[14]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 11;
+ Cond1Call(&LogicManager::CONS_Cond1_AugustLockUnlockMyComp, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[12]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 12;
+ Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 1, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[11]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 13;
+ Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[9]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 14;
+ Cond1Call(&LogicManager::CONS_Cond1_DeliverAugustMessage, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[5]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 15;
+ Cond1Call(&LogicManager::CONS_Cond1_DeliverKronosMessage, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[10]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 16;
+ Cond1Call(&LogicManager::CONS_Cond1_VisitKahina, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[8]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacterParams(kCharacterCond1, 8)[8] = 0;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 17;
+ Cond1Call(&LogicManager::CONS_Cond1_VisitCond2, "CON1200", 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[17]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacterParams(kCharacterCond1, 8)[17] = 0;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 18;
+ Cond1Call(&LogicManager::CONS_Cond1_VisitCond2Special, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterCurrentParams(kCharacterCond1)[0] || !getCharacterParams(kCharacterCond1, 8)[4]) {
+ if (getCharacterParams(kCharacterCond1, 8)[0] &&
+ !whoRunningDialog(kCharacterCond1) && _gameProgress[kProgressField18] != 4) {
+ playDialog(kCharacterCond1, "CON1505", -1, 0);
+ }
+
+ break;
+ }
+
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 19;
+ Cond1Call(&LogicManager::CONS_Cond1_MakeAllBeds, 0, 0, 0, 0);
+
+ break;
+ case 10:
+ if (getCharacterParams(kCharacterCond1, 8)[14]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 11;
+ Cond1Call(&LogicManager::CONS_Cond1_AugustLockUnlockMyComp, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 11:
+ if (getCharacterParams(kCharacterCond1, 8)[12]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 12;
+ Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 1, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 12:
+ if (getCharacterParams(kCharacterCond1, 8)[11]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 13;
+ Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 13:
+ if (getCharacterParams(kCharacterCond1, 8)[9]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 14;
+ Cond1Call(&LogicManager::CONS_Cond1_DeliverAugustMessage, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 14:
+ if (getCharacterParams(kCharacterCond1, 8)[5]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 15;
+ Cond1Call(&LogicManager::CONS_Cond1_DeliverKronosMessage, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 15:
+ if (getCharacterParams(kCharacterCond1, 8)[10]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 16;
+ Cond1Call(&LogicManager::CONS_Cond1_VisitKahina, 0, 0, 0, 0);
+ break;
+ }
- if (!cathInCorridor(kCarGreenSleeping) &&
- !cathInCorridor(kCarRedSleeping) ||
- dialogRunning("REB1205") ||
- !inComp(kCharacterMadame, kCarRedSleeping, 5790) ||
- !getCharacterCurrentParams(kCharacterCond1)[3]) {
+ // fall through
+ case 16:
+ if (getCharacterParams(kCharacterCond1, 8)[8]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacterParams(kCharacterCond1, 8)[8] = 0;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 17;
+ Cond1Call(&LogicManager::CONS_Cond1_VisitCond2, "CON1200", 0, 0, 0);
+ break;
+ }
- getCharacterCurrentParams(kCharacterCond1)[3] = _gameTime;
- if (!_gameTime)
- goto LABEL_40;
+ // fall through
+ case 17:
+ if (getCharacterParams(kCharacterCond1, 8)[17]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacterParams(kCharacterCond1, 8)[17] = 0;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 18;
+ Cond1Call(&LogicManager::CONS_Cond1_VisitCond2Special, 0, 0, 0, 0);
+ break;
}
- if (getCharacterCurrentParams(kCharacterCond1)[3] < _gameTime) {
- LABEL_39:
- getCharacterCurrentParams(kCharacterCond1)[3] = 0x7FFFFFFF;
- LABEL_40:
+ // fall through
+ case 18:
+ if (getCharacterCurrentParams(kCharacterCond1)[0] || !getCharacterParams(kCharacterCond1, 8)[4]) {
+ if (getCharacterParams(kCharacterCond1, 8)[0] &&
+ !whoRunningDialog(kCharacterCond1) && _gameProgress[kProgressField18] != 4) {
+ playDialog(kCharacterCond1, "CON1505", -1, 0);
+ }
+ } else {
getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
- Cond1Call(&LogicManager::CONS_Cond1_VisitCond2Double, "CON1210", "CON1210A", 0, 0);
- return;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 19;
+ Cond1Call(&LogicManager::CONS_Cond1_MakeAllBeds, 0, 0, 0, 0);
}
- }
- }
-LABEL_80:
- if (_gameTime > 1215000 && !getCharacterParams(kCharacterCond1, 8)[0] && !getCharacterParams(kCharacterCond1, 8)[16]) {
- if (!getCharacterCurrentParams(kCharacterCond1)[4]) {
- getCharacterCurrentParams(kCharacterCond1)[4] = _gameTime + 2700;
- if (_gameTime == -2700)
- goto LABEL_87;
- }
+ break;
+ case 19:
+ getCharacterCurrentParams(kCharacterCond1)[0] = 1;
+ if (getCharacterParams(kCharacterCond1, 8)[0] &&
+ !whoRunningDialog(kCharacterCond1) && _gameProgress[kProgressField18] != 4) {
+ playDialog(kCharacterCond1, "CON1505", -1, 0);
+ }
- if (getCharacterCurrentParams(kCharacterCond1)[4] < _gameTime) {
- getCharacterCurrentParams(kCharacterCond1)[4] = 0x7FFFFFFF;
- LABEL_87:
- startCycOtis(kCharacterCond1, "601E");
- getCharacterParams(kCharacterCond1, 8)[0] = 1;
- getCharacterCurrentParams(kCharacterCond1)[4] = 0;
+ break;
+ case 21:
+ playNIS(kEventMertensAskTylerCompartmentD);
+ startSeqOtis(kCharacterCond1, "601A");
+ _gameInventory[kItem7].location = 0;
+ bumpCath(kCarGreenSleeping, 25, 255);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 22;
+ Cond1Call(&LogicManager::CONS_Cond1_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 22:
+ startCycOtis(kCharacterCond1, "601B");
+ break;
+ default:
+ break;
}
- }
-
- if (getCharacterParams(kCharacterCond1, 8)[7]) {
- getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
- Cond1Call(&LogicManager::CONS_Cond1_Listen, 9, 0, 0, 0);
- return;
- }
-
-LABEL_90:
- if (_gameProgress[5] == 29)
- goto LABEL_99;
- if (getCharacterParams(kCharacterCond1, 8)[13]) {
- getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 10;
- Cond1Call(&LogicManager::CONS_Cond1_AugustLockUnlockMyComp, 1, 0, 0, 0);
- return;
- }
-LABEL_93:
- if (getCharacterParams(kCharacterCond1, 8)[14]) {
- getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 11;
- Cond1Call(&LogicManager::CONS_Cond1_AugustLockUnlockMyComp, 0, 0, 0, 0);
- return;
- }
+ break;
+ case 225932896:
+ if (!getCharacterParams(kCharacterCond1, 8)[16] && !getCharacterParams(kCharacterCond1, 8)[0]) {
+ send(kCharacterCond1, kCharacterFrancois, 205346192, 0);
+ }
-LABEL_95:
- if (getCharacterParams(kCharacterCond1, 8)[12]) {
- getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 12;
- Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 1, 0, 0, 0);
- return;
- }
+ break;
+ case 225358684:
+ if (!getCharacterParams(kCharacterCond1, 8)[0]) {
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 23;
+ Cond1Call(&LogicManager::CONS_Cond1_CathBuzzing, msg->param, 0, 0, 0);
+ }
-LABEL_97:
- if (!getCharacterParams(kCharacterCond1, 8)[11]) {
- LABEL_99:
- if (getCharacterParams(kCharacterCond1, 8)[9]) {
+ break;
+ case 305159806:
+ if (!getCharacterParams(kCharacterCond1, 8)[16] && !getCharacterParams(kCharacterCond1, 8)[0]) {
getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 14;
- Cond1Call(&LogicManager::CONS_Cond1_DeliverAugustMessage, 0, 0, 0, 0);
- } else {
- LABEL_101:
- if (getCharacterParams(kCharacterCond1, 8)[5]) {
- getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 15;
- Cond1Call(&LogicManager::CONS_Cond1_DeliverKronosMessage, 0, 0, 0, 0);
- } else {
- LABEL_103:
- if (getCharacterParams(kCharacterCond1, 8)[10]) {
- getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 16;
- Cond1Call(&LogicManager::CONS_Cond1_VisitKahina, 0, 0, 0, 0);
- } else {
- LABEL_105:
- if (getCharacterParams(kCharacterCond1, 8)[8]) {
- getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- getCharacterParams(kCharacterCond1, 8)[8] = 0;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 17;
- Cond1Call(&LogicManager::CONS_Cond1_VisitCond2, "CON1200", 0, 0, 0);
- } else {
- LABEL_107:
- if (getCharacterParams(kCharacterCond1, 8)[17]) {
- getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- getCharacterParams(kCharacterCond1, 8)[17] = 0;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 18;
- Cond1Call(&LogicManager::CONS_Cond1_VisitCond2Special, 0, 0, 0, 0);
- } else {
- LABEL_109:
- if (getCharacterCurrentParams(kCharacterCond1)[0] || !getCharacterParams(kCharacterCond1, 8)[4]) {
- LABEL_69:
- if (getCharacterParams(kCharacterCond1, 8)[0] &&
- !whoRunningDialog(kCharacterCond1) && _gameProgress[kProgressField18] != 4) {
- playDialog(kCharacterCond1, "CON1505", -1, 0);
- }
- } else {
- getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 19;
- Cond1Call(&LogicManager::CONS_Cond1_MakeAllBeds, 0, 0, 0, 0);
- }
- }
- }
- }
- }
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 24;
+ Cond1Call(&LogicManager::CONS_Cond1_CathRattling, msg->param, 0, 0, 0);
}
- } else {
- getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 13;
- Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 0, 0, 0, 0);
+
+ break;
+ default:
+ break;
}
}
@@ -3440,28 +4220,35 @@ void LogicManager::CONS_Cond1_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_StartPart2(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterCond1);
- getCharacter(kCharacterCond1).characterPosition.car = kCarGreenSleeping;
- getCharacter(kCharacterCond1).characterPosition.position = 1500;
- getCharacter(kCharacterCond1).characterPosition.location = 0;
- getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- getCharacterParams(kCharacterCond1, 8)[13] = 0;
- getCharacterParams(kCharacterCond1, 8)[14] = 0;
- getCharacterParams(kCharacterCond1, 8)[12] = 0;
- getCharacterParams(kCharacterCond1, 8)[11] = 0;
- getCharacterParams(kCharacterCond1, 8)[5] = 0;
- getCharacterParams(kCharacterCond1, 8)[9] = 0;
- getCharacterParams(kCharacterCond1, 8)[7] = 0;
- getCharacterParams(kCharacterCond1, 8)[8] = 0;
- getCharacterParams(kCharacterCond1, 8)[10] = 0;
- } else if (msg->action == 18 && getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 1) {
- CONS_Cond1_SittingDay(0, 0, 0, 0);
- }
- } else {
+ switch (msg->action) {
+ case 0:
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterCond1);
+ getCharacter(kCharacterCond1).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterCond1).characterPosition.position = 1500;
+ getCharacter(kCharacterCond1).characterPosition.location = 0;
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacterParams(kCharacterCond1, 8)[13] = 0;
+ getCharacterParams(kCharacterCond1, 8)[14] = 0;
+ getCharacterParams(kCharacterCond1, 8)[12] = 0;
+ getCharacterParams(kCharacterCond1, 8)[11] = 0;
+ getCharacterParams(kCharacterCond1, 8)[5] = 0;
+ getCharacterParams(kCharacterCond1, 8)[9] = 0;
+ getCharacterParams(kCharacterCond1, 8)[7] = 0;
+ getCharacterParams(kCharacterCond1, 8)[8] = 0;
+ getCharacterParams(kCharacterCond1, 8)[10] = 0;
+ break;
+ case 18:
+ if (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 1) {
+ CONS_Cond1_SittingDay(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -3476,81 +4263,110 @@ void LogicManager::CONS_Cond1_SittingDay(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_SittingDay(HAND_PARAMS) {
- if (msg->action > 11) {
- if (msg->action > 225358684) {
- if (msg->action == 225932896) {
- if (!getCharacterParams(kCharacterCond1, 8)[16] && !getCharacterParams(kCharacterCond1, 8)[0]) {
- send(kCharacterCond1, kCharacterFrancois, 205346192, 0);
- }
- } else if (msg->action == 226078300) {
- if (!getCharacterParams(kCharacterCond1, 8)[16] && !getCharacterParams(kCharacterCond1, 8)[0]) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
- Cond1Call(&LogicManager::CONS_Cond1_DoDialog, "CON2020", 0, 0, 0);
- }
- } else if (msg->action == 305159806 && !getCharacterParams(kCharacterCond1, 8)[16] && !getCharacterParams(kCharacterCond1, 8)[0]) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 10;
- Cond1Call(&LogicManager::CONS_Cond1_CathRattling, msg->param, 0, 0, 0);
- }
- } else {
- switch (msg->action) {
- case 225358684:
- if (!getCharacterParams(kCharacterCond1, 8)[0]) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
- Cond1Call(&LogicManager::CONS_Cond1_CathBuzzing, msg->param, 0, 0, 0);
- }
- break;
- case 17:
- if (!getCharacterParams(kCharacterCond1, 8)[16]) {
- if (checkCathDir(kCarGreenSleeping, 1)) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
- Cond1Call(&LogicManager::CONS_Cond1_Passing, 1, 0, 0, 0);
- } else if (checkCathDir(kCarGreenSleeping, 23)) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
- Cond1Call(&LogicManager::CONS_Cond1_Passing, 0, 0, 0, 0);
- }
- }
- break;
- case 18:
- switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
- case 1:
- goto LABEL_24;
- case 2:
- goto LABEL_26;
- case 3:
- goto LABEL_28;
- default:
- return;
- }
- }
+ switch (msg->action) {
+ case 0:
+ if (getCharacterParams(kCharacterCond1, 8)[13]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
+ Cond1Call(&LogicManager::CONS_Cond1_AugustLockUnlockMyComp, 1, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[14]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
+ Cond1Call(&LogicManager::CONS_Cond1_AugustLockUnlockMyComp, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[12]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
+ Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 1, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[11]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
+ Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 0, 0, 0, 0);
}
- } else if (msg->action == 11) {
+
+ break;
+ case 11:
if (!getCharacterParams(kCharacterCond1, 8)[16]) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
Cond1Call(&LogicManager::CONS_Cond1_Passing, msg->param, msg->sender, 0, 0);
}
- } else if (msg->action == 0) {
- if (getCharacterParams(kCharacterCond1, 8)[13]) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
- Cond1Call(&LogicManager::CONS_Cond1_AugustLockUnlockMyComp, 1, 0, 0, 0);
- } else {
- LABEL_24:
+
+ break;
+ case 17:
+ if (!getCharacterParams(kCharacterCond1, 8)[16]) {
+ if (checkCathDir(kCarGreenSleeping, 1)) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
+ Cond1Call(&LogicManager::CONS_Cond1_Passing, 1, 0, 0, 0);
+ } else if (checkCathDir(kCarGreenSleeping, 23)) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
+ Cond1Call(&LogicManager::CONS_Cond1_Passing, 0, 0, 0, 0);
+ }
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
+ case 1:
if (getCharacterParams(kCharacterCond1, 8)[14]) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
Cond1Call(&LogicManager::CONS_Cond1_AugustLockUnlockMyComp, 0, 0, 0, 0);
- } else {
- LABEL_26:
- if (getCharacterParams(kCharacterCond1, 8)[12]) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
- Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 1, 0, 0, 0);
- } else {
- LABEL_28:
- if (getCharacterParams(kCharacterCond1, 8)[11]) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
- Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 0, 0, 0, 0);
- }
- }
+ break;
+ }
+
+ // fall through
+ case 2:
+ if (getCharacterParams(kCharacterCond1, 8)[12]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
+ Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 1, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 3:
+ if (getCharacterParams(kCharacterCond1, 8)[11]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
+ Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 225358684:
+ if (!getCharacterParams(kCharacterCond1, 8)[0]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
+ Cond1Call(&LogicManager::CONS_Cond1_CathBuzzing, msg->param, 0, 0, 0);
+ }
+
+ break;
+ case 225932896:
+ if (!getCharacterParams(kCharacterCond1, 8)[16] && !getCharacterParams(kCharacterCond1, 8)[0]) {
+ send(kCharacterCond1, kCharacterFrancois, 205346192, 0);
+ }
+
+ break;
+ case 226078300:
+ if (!getCharacterParams(kCharacterCond1, 8)[16] && !getCharacterParams(kCharacterCond1, 8)[0]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
+ Cond1Call(&LogicManager::CONS_Cond1_DoDialog, "CON2020", 0, 0, 0);
+ }
+
+ break;
+ case 305159806:
+ if (!getCharacterParams(kCharacterCond1, 8)[16] && !getCharacterParams(kCharacterCond1, 8)[0]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 10;
+ Cond1Call(&LogicManager::CONS_Cond1_CathRattling, msg->param, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -3565,28 +4381,35 @@ void LogicManager::CONS_Cond1_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_StartPart3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterCond1).characterPosition.car = kCarGreenSleeping;
- getCharacter(kCharacterCond1).characterPosition.position = 1500;
- getCharacter(kCharacterCond1).characterPosition.location = 0;
- getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- getCharacterParams(kCharacterCond1, 8)[13] = 0;
- getCharacterParams(kCharacterCond1, 8)[14] = 0;
- getCharacterParams(kCharacterCond1, 8)[12] = 0;
- getCharacterParams(kCharacterCond1, 8)[11] = 0;
- getCharacterParams(kCharacterCond1, 8)[5] = 0;
- getCharacterParams(kCharacterCond1, 8)[9] = 0;
- getCharacterParams(kCharacterCond1, 8)[7] = 0;
- getCharacterParams(kCharacterCond1, 8)[8] = 0;
- getCharacterParams(kCharacterCond1, 8)[10] = 0;
- getCharacterParams(kCharacterCond1, 8)[19] = 0;
- } else if (msg->action == 18 && getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 1) {
+ switch (msg->action) {
+ case 0:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
+ Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
+ break;
+ case 12:
+ getCharacter(kCharacterCond1).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterCond1).characterPosition.position = 1500;
+ getCharacter(kCharacterCond1).characterPosition.location = 0;
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacterParams(kCharacterCond1, 8)[13] = 0;
+ getCharacterParams(kCharacterCond1, 8)[14] = 0;
+ getCharacterParams(kCharacterCond1, 8)[12] = 0;
+ getCharacterParams(kCharacterCond1, 8)[11] = 0;
+ getCharacterParams(kCharacterCond1, 8)[5] = 0;
+ getCharacterParams(kCharacterCond1, 8)[9] = 0;
+ getCharacterParams(kCharacterCond1, 8)[7] = 0;
+ getCharacterParams(kCharacterCond1, 8)[8] = 0;
+ getCharacterParams(kCharacterCond1, 8)[10] = 0;
+ getCharacterParams(kCharacterCond1, 8)[19] = 0;
+ break;
+ case 18:
+ if (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 1) {
CONS_Cond1_OnDuty(0, 0, 0, 0);
}
- } else {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
- Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
+
+ break;
+ default:
+ break;
}
}
@@ -3601,142 +4424,219 @@ void LogicManager::CONS_Cond1_OnDuty(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_OnDuty(HAND_PARAMS) {
- if (msg->action > 11) {
- if (msg->action > 225358684) {
- if (msg->action == 225932896) {
- if (!getCharacterParams(kCharacterCond1, 8)[16] && !getCharacterParams(kCharacterCond1, 8)[0]) {
- send(kCharacterCond1, kCharacterFrancois, 205346192, 0);
- }
- } else if (msg->action == 226078300) {
- if (!getCharacterParams(kCharacterCond1, 8)[16] && !getCharacterParams(kCharacterCond1, 8)[0]) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 15;
- Cond1Call(&LogicManager::CONS_Cond1_DoDialog, "CON2020", 0, 0, 0);
- }
- } else if (msg->action == 305159806 && !getCharacterParams(kCharacterCond1, 8)[16] && !getCharacterParams(kCharacterCond1, 8)[0]) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 17;
- Cond1Call(&LogicManager::CONS_Cond1_CathRattling, msg->param, 0, 0, 0);
- }
- } else {
- switch (msg->action) {
- case 225358684:
- if (!getCharacterParams(kCharacterCond1, 8)[0]) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 16;
- Cond1Call(&LogicManager::CONS_Cond1_CathBuzzing, msg->param, 0, 0, 0);
- }
- break;
- case 17:
- if (!getCharacterParams(kCharacterCond1, 8)[16]) {
- if (checkCathDir(kCarGreenSleeping, 1)) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 13;
- Cond1Call(&LogicManager::CONS_Cond1_Passing, 1, 0, 0, 0);
- } else if (checkCathDir(kCarGreenSleeping, 23)) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 14;
- Cond1Call(&LogicManager::CONS_Cond1_Passing, 0, 0, 0, 0);
- }
- }
- break;
- case 18:
- switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
- case 1:
- goto LABEL_24;
- case 2:
- goto LABEL_26;
- case 3:
- goto LABEL_28;
- case 4:
- goto LABEL_30;
- case 5:
- goto LABEL_32;
- case 6:
- goto LABEL_38;
- case 7:
- goto LABEL_41;
- case 8:
- goto LABEL_44;
- case 9:
- goto LABEL_47;
- case 0xA:
- goto LABEL_50;
- default:
- return;
- }
- }
+ switch (msg->action) {
+ case 0:
+ if (getCharacterParams(kCharacterCond1, 8)[13]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
+ Cond1Call(&LogicManager::CONS_Cond1_AugustLockUnlockMyComp, 1, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[14]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
+ Cond1Call(&LogicManager::CONS_Cond1_AugustLockUnlockMyComp, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[12]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
+ Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 1, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[11]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
+ Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[7]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
+ Cond1Call(&LogicManager::CONS_Cond1_Listen, 9, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond1, 8)[19] && (_gameEvents[kEventKronosVisit] || _gameTime > 2052000) && _gameTime < 2133000 && cathInCorridor(kCarGreenSleeping)) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
+ Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 1971000 && !getCharacterCurrentParams(kCharacterCond1)[0]) {
+ getCharacterCurrentParams(kCharacterCond1)[0] = 1;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
+ Cond1Call(&LogicManager::CONS_Cond1_VisitCond2, "CON3012", 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2117700 && !getCharacterCurrentParams(kCharacterCond1)[1]) {
+ getCharacterCurrentParams(kCharacterCond1)[1] = 1;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
+ Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2124000 && !getCharacterCurrentParams(kCharacterCond1)[2]) {
+ getCharacterCurrentParams(kCharacterCond1)[2] = 1;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
+ Cond1Call(&LogicManager::CONS_Cond1_VisitCond2, "CON2010", 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2146500 && !getCharacterCurrentParams(kCharacterCond1)[3]) {
+ getCharacterCurrentParams(kCharacterCond1)[3] = 1;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 10;
+ Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2169000 && !getCharacterCurrentParams(kCharacterCond1)[4]) {
+ getCharacterCurrentParams(kCharacterCond1)[4] = 1;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 11;
+ Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
+ break;
}
- } else if (msg->action == 11) {
+
+ break;
+ case 11:
if (!getCharacterParams(kCharacterCond1, 8)[16]) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 12;
Cond1Call(&LogicManager::CONS_Cond1_Passing, msg->param, msg->sender, 0, 0);
}
- } else if (msg->action == 0) {
- if (getCharacterParams(kCharacterCond1, 8)[13]) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
- Cond1Call(&LogicManager::CONS_Cond1_AugustLockUnlockMyComp, 1, 0, 0, 0);
- } else {
- LABEL_24:
+
+ break;
+ case 17:
+ if (!getCharacterParams(kCharacterCond1, 8)[16]) {
+ if (checkCathDir(kCarGreenSleeping, 1)) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 13;
+ Cond1Call(&LogicManager::CONS_Cond1_Passing, 1, 0, 0, 0);
+ } else if (checkCathDir(kCarGreenSleeping, 23)) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 14;
+ Cond1Call(&LogicManager::CONS_Cond1_Passing, 0, 0, 0, 0);
+ }
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
+ case 1:
if (getCharacterParams(kCharacterCond1, 8)[14]) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
Cond1Call(&LogicManager::CONS_Cond1_AugustLockUnlockMyComp, 0, 0, 0, 0);
- } else {
- LABEL_26:
- if (getCharacterParams(kCharacterCond1, 8)[12]) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
- Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 1, 0, 0, 0);
- } else {
- LABEL_28:
- if (getCharacterParams(kCharacterCond1, 8)[11]) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
- Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 0, 0, 0, 0);
- } else {
- LABEL_30:
- if (getCharacterParams(kCharacterCond1, 8)[7]) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
- Cond1Call(&LogicManager::CONS_Cond1_Listen, 9, 0, 0, 0);
- } else {
- LABEL_32:
- if (getCharacterParams(kCharacterCond1, 8)[19] && (_gameEvents[kEventKronosVisit] || _gameTime > 2052000) && _gameTime < 2133000 && cathInCorridor(kCarGreenSleeping)) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
- Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
- } else {
- LABEL_38:
- if (_gameTime <= 1971000 || getCharacterCurrentParams(kCharacterCond1)[0]) {
- LABEL_41:
- if (_gameTime <= 2117700 || getCharacterCurrentParams(kCharacterCond1)[1]) {
- LABEL_44:
- if (_gameTime <= 2124000 || getCharacterCurrentParams(kCharacterCond1)[2]) {
- LABEL_47:
- if (_gameTime <= 2146500 || getCharacterCurrentParams(kCharacterCond1)[3]) {
- LABEL_50:
- if (_gameTime > 2169000 && !getCharacterCurrentParams(kCharacterCond1)[4]) {
- getCharacterCurrentParams(kCharacterCond1)[4] = 1;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 11;
- Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterCond1)[3] = 1;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 10;
- Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterCond1)[2] = 1;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
- Cond1Call(&LogicManager::CONS_Cond1_VisitCond2, "CON2010", 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterCond1)[1] = 1;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
- Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterCond1)[0] = 1;
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
- Cond1Call(&LogicManager::CONS_Cond1_VisitCond2, "CON3012", 0, 0, 0);
- }
- }
- }
- }
- }
+ break;
+ }
+
+ // fall through
+ case 2:
+ if (getCharacterParams(kCharacterCond1, 8)[12]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
+ Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 1, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 3:
+ if (getCharacterParams(kCharacterCond1, 8)[11]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
+ Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 4:
+ if (getCharacterParams(kCharacterCond1, 8)[7]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
+ Cond1Call(&LogicManager::CONS_Cond1_Listen, 9, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 5:
+ if (getCharacterParams(kCharacterCond1, 8)[19] && (_gameEvents[kEventKronosVisit] || _gameTime > 2052000) && _gameTime < 2133000 && cathInCorridor(kCarGreenSleeping)) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
+ Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 6:
+ if (_gameTime > 1971000 && !getCharacterCurrentParams(kCharacterCond1)[0]) {
+ getCharacterCurrentParams(kCharacterCond1)[0] = 1;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
+ Cond1Call(&LogicManager::CONS_Cond1_VisitCond2, "CON3012", 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 7:
+ if (_gameTime > 2117700 && !getCharacterCurrentParams(kCharacterCond1)[1]) {
+ getCharacterCurrentParams(kCharacterCond1)[1] = 1;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
+ Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 8:
+ if (_gameTime > 2124000 && !getCharacterCurrentParams(kCharacterCond1)[2]) {
+ getCharacterCurrentParams(kCharacterCond1)[2] = 1;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
+ Cond1Call(&LogicManager::CONS_Cond1_VisitCond2, "CON2010", 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 9:
+ if (_gameTime > 2146500 && !getCharacterCurrentParams(kCharacterCond1)[3]) {
+ getCharacterCurrentParams(kCharacterCond1)[3] = 1;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 10;
+ Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 10:
+ if (_gameTime > 2169000 && !getCharacterCurrentParams(kCharacterCond1)[4]) {
+ getCharacterCurrentParams(kCharacterCond1)[4] = 1;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 11;
+ Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 225358684:
+ if (!getCharacterParams(kCharacterCond1, 8)[0]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 16;
+ Cond1Call(&LogicManager::CONS_Cond1_CathBuzzing, msg->param, 0, 0, 0);
+ }
+
+ break;
+ case 225932896:
+ if (!getCharacterParams(kCharacterCond1, 8)[16] && !getCharacterParams(kCharacterCond1, 8)[0]) {
+ send(kCharacterCond1, kCharacterFrancois, 205346192, 0);
+ }
+
+ break;
+ case 226078300:
+ if (!getCharacterParams(kCharacterCond1, 8)[16] && !getCharacterParams(kCharacterCond1, 8)[0]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 15;
+ Cond1Call(&LogicManager::CONS_Cond1_DoDialog, "CON2020", 0, 0, 0);
+ }
+
+ break;
+ case 305159806:
+ if (!getCharacterParams(kCharacterCond1, 8)[16] && !getCharacterParams(kCharacterCond1, 8)[0]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 17;
+ Cond1Call(&LogicManager::CONS_Cond1_CathRattling, msg->param, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -3751,29 +4651,36 @@ void LogicManager::CONS_Cond1_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_StartPart4(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterCond1);
- getCharacter(kCharacterCond1).characterPosition.car = kCarGreenSleeping;
- getCharacter(kCharacterCond1).characterPosition.position = 1500;
- getCharacter(kCharacterCond1).characterPosition.location = 0;
- getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- getCharacterParams(kCharacterCond1, 8)[18] = 0;
- getCharacterParams(kCharacterCond1, 8)[13] = 0;
- getCharacterParams(kCharacterCond1, 8)[14] = 0;
- getCharacterParams(kCharacterCond1, 8)[12] = 0;
- getCharacterParams(kCharacterCond1, 8)[11] = 0;
- getCharacterParams(kCharacterCond1, 8)[5] = 0;
- getCharacterParams(kCharacterCond1, 8)[9] = 0;
- getCharacterParams(kCharacterCond1, 8)[7] = 0;
- getCharacterParams(kCharacterCond1, 8)[8] = 0;
- getCharacterParams(kCharacterCond1, 8)[10] = 0;
- } else if (msg->action == 18 && getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 1) {
- CONS_Cond1_OnDuty4(0, 0, 0, 0);
- }
- } else {
+ switch (msg->action) {
+ case 0:
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
Cond1Call(&LogicManager::CONS_Cond1_SitDown, 0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterCond1);
+ getCharacter(kCharacterCond1).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterCond1).characterPosition.position = 1500;
+ getCharacter(kCharacterCond1).characterPosition.location = 0;
+ getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ getCharacterParams(kCharacterCond1, 8)[18] = 0;
+ getCharacterParams(kCharacterCond1, 8)[13] = 0;
+ getCharacterParams(kCharacterCond1, 8)[14] = 0;
+ getCharacterParams(kCharacterCond1, 8)[12] = 0;
+ getCharacterParams(kCharacterCond1, 8)[11] = 0;
+ getCharacterParams(kCharacterCond1, 8)[5] = 0;
+ getCharacterParams(kCharacterCond1, 8)[9] = 0;
+ getCharacterParams(kCharacterCond1, 8)[7] = 0;
+ getCharacterParams(kCharacterCond1, 8)[8] = 0;
+ getCharacterParams(kCharacterCond1, 8)[10] = 0;
+ break;
+ case 18:
+ if (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] == 1) {
+ CONS_Cond1_OnDuty4(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -3788,67 +4695,8 @@ void LogicManager::CONS_Cond1_OnDuty4(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_OnDuty4(HAND_PARAMS) {
- if (msg->action > 11) {
- if (msg->action > 17) {
- if (msg->action > 225358684) {
- if (msg->action == 226078300) {
- if (!getCharacterParams(kCharacterCond1, 8)[16] && !getCharacterParams(kCharacterCond1, 8)[0]) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 12;
- Cond1Call(&LogicManager::CONS_Cond1_DoDialog, "CON2020", 0, 0, 0);
- }
- } else if (msg->action == 305159806 && !getCharacterParams(kCharacterCond1, 8)[16] && !getCharacterParams(kCharacterCond1, 8)[0]) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 14;
- Cond1Call(&LogicManager::CONS_Cond1_CathRattling, msg->param, 0, 0, 0);
- }
- } else if (msg->action == 225358684) {
- if (!getCharacterParams(kCharacterCond1, 8)[0]) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 13;
- Cond1Call(&LogicManager::CONS_Cond1_CathBuzzing, msg->param, 0, 0, 0);
- }
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
- case 1:
- goto LABEL_31;
- case 2:
- goto LABEL_33;
- case 3:
- goto LABEL_35;
- case 4:
- goto LABEL_37;
- case 5:
- goto LABEL_41;
- case 6:
- goto LABEL_44;
- case 7:
- goto LABEL_47;
- case 8:
- goto LABEL_50;
- default:
- return;
- }
- }
- } else if (msg->action == 17) {
- if (!getCharacterParams(kCharacterCond1, 8)[16] && !getCharacterParams(kCharacterCond1, 8)[0]) {
- if (checkCathDir(kCarGreenSleeping, 1)) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 10;
- Cond1Call(&LogicManager::CONS_Cond1_Passing, 1, 0, 0, 0);
- } else if (checkCathDir(kCarGreenSleeping, 23)) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 11;
- Cond1Call(&LogicManager::CONS_Cond1_Passing, 0, 0, 0, 0);
- }
- }
- } else if (msg->action == 12) {
- getCharacter(kCharacterCond1).characterPosition.car = kCarGreenSleeping;
- getCharacter(kCharacterCond1).characterPosition.position = 1500;
- getCharacter(kCharacterCond1).characterPosition.location = 0;
- takeItem(kItem7);
- }
- } else if (msg->action == 11) {
- if (!getCharacterParams(kCharacterCond1, 8)[16] && !getCharacterParams(kCharacterCond1, 8)[0]) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
- Cond1Call(&LogicManager::CONS_Cond1_Passing, msg->param, msg->sender, 0, 0);
- }
- } else if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterParams(kCharacterCond1, 8)[18]) {
getCharacterCurrentParams(kCharacterCond1)[0] = 1;
setModel(2, 1);
@@ -3861,70 +4709,241 @@ void LogicManager::HAND_Cond1_OnDuty4(HAND_PARAMS) {
startCycOtis(kCharacterCond1, "601E");
getCharacterParams(kCharacterCond1, 8)[18] = 0;
}
+
if (getCharacterParams(kCharacterCond1, 8)[13]) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
Cond1Call(&LogicManager::CONS_Cond1_AugustLockUnlockMyComp, 1, 0, 0, 0);
- return;
+ break;
}
- LABEL_31:
+
if (getCharacterParams(kCharacterCond1, 8)[14]) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
Cond1Call(&LogicManager::CONS_Cond1_AugustLockUnlockMyComp, 0, 0, 0, 0);
- return;
+ break;
}
- LABEL_33:
+
if (getCharacterParams(kCharacterCond1, 8)[12]) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 1, 0, 0, 0);
- return;
+ break;
}
- LABEL_35:
+
if (getCharacterParams(kCharacterCond1, 8)[11]) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 0, 0, 0, 0);
- return;
+ break;
}
- LABEL_37:
+
if (!getCharacterCurrentParams(kCharacterCond1)[0]) {
if (_gameTime > 2403000 && !getCharacterCurrentParams(kCharacterCond1)[1]) {
getCharacterCurrentParams(kCharacterCond1)[1] = 1;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
Cond1Call(&LogicManager::CONS_Cond1_MakeBeds4, 0, 0, 0, 0);
- return;
+ break;
}
- LABEL_41:
+
if (_gameTime > 2430000 && !getCharacterCurrentParams(kCharacterCond1)[2]) {
getCharacterCurrentParams(kCharacterCond1)[2] = 1;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
- return;
+ break;
}
- LABEL_44:
+
if (_gameTime > 2439000 && !getCharacterCurrentParams(kCharacterCond1)[3]) {
getCharacterCurrentParams(kCharacterCond1)[3] = 1;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
- return;
+ break;
}
- LABEL_47:
+
if (_gameTime > 2448000 && !getCharacterCurrentParams(kCharacterCond1)[4]) {
getCharacterCurrentParams(kCharacterCond1)[4] = 1;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
- return;
+ break;
}
}
- LABEL_50:
+
if (_gameTime > 2538000 && !getCharacterParams(kCharacterCond1, 8)[0] && !getCharacterParams(kCharacterCond1, 8)[16]) {
if (getCharacterCurrentParams(kCharacterCond1)[5] || (getCharacterCurrentParams(kCharacterCond1)[5] = _gameTime + 2700, _gameTime != -2700)) {
if (getCharacterCurrentParams(kCharacterCond1)[5] >= _gameTime)
- return;
+ break;
+
getCharacterCurrentParams(kCharacterCond1)[5] = 0x7FFFFFFF;
}
+
startCycOtis(kCharacterCond1, "601E");
getCharacterParams(kCharacterCond1, 8)[0] = 1;
getCharacterCurrentParams(kCharacterCond1)[5] = 0;
}
+
+ break;
+ case 11:
+ if (!getCharacterParams(kCharacterCond1, 8)[16] && !getCharacterParams(kCharacterCond1, 8)[0]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
+ Cond1Call(&LogicManager::CONS_Cond1_Passing, msg->param, msg->sender, 0, 0);
+ }
+
+ break;
+ case 12:
+ getCharacter(kCharacterCond1).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterCond1).characterPosition.position = 1500;
+ getCharacter(kCharacterCond1).characterPosition.location = 0;
+ takeItem(kItem7);
+ break;
+ case 17:
+ if (!getCharacterParams(kCharacterCond1, 8)[16] && !getCharacterParams(kCharacterCond1, 8)[0]) {
+ if (checkCathDir(kCarGreenSleeping, 1)) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 10;
+ Cond1Call(&LogicManager::CONS_Cond1_Passing, 1, 0, 0, 0);
+ } else if (checkCathDir(kCarGreenSleeping, 23)) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 11;
+ Cond1Call(&LogicManager::CONS_Cond1_Passing, 0, 0, 0, 0);
+ }
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
+ case 1:
+ if (getCharacterParams(kCharacterCond1, 8)[14]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
+ Cond1Call(&LogicManager::CONS_Cond1_AugustLockUnlockMyComp, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 2:
+ if (getCharacterParams(kCharacterCond1, 8)[12]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
+ Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 1, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 3:
+ if (getCharacterParams(kCharacterCond1, 8)[11]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
+ Cond1Call(&LogicManager::CONS_Cond1_AlexeiLockUnlockMyComp, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 4:
+ if (!getCharacterCurrentParams(kCharacterCond1)[0]) {
+ if (_gameTime > 2403000 && !getCharacterCurrentParams(kCharacterCond1)[1]) {
+ getCharacterCurrentParams(kCharacterCond1)[1] = 1;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
+ Cond1Call(&LogicManager::CONS_Cond1_MakeBeds4, 0, 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2430000 && !getCharacterCurrentParams(kCharacterCond1)[2]) {
+ getCharacterCurrentParams(kCharacterCond1)[2] = 1;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
+ Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2439000 && !getCharacterCurrentParams(kCharacterCond1)[3]) {
+ getCharacterCurrentParams(kCharacterCond1)[3] = 1;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
+ Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2448000 && !getCharacterCurrentParams(kCharacterCond1)[4]) {
+ getCharacterCurrentParams(kCharacterCond1)[4] = 1;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
+ Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (_gameTime > 2538000 && !getCharacterParams(kCharacterCond1, 8)[0] && !getCharacterParams(kCharacterCond1, 8)[16]) {
+ if (getCharacterCurrentParams(kCharacterCond1)[5] || (getCharacterCurrentParams(kCharacterCond1)[5] = _gameTime + 2700, _gameTime != -2700)) {
+ if (getCharacterCurrentParams(kCharacterCond1)[5] >= _gameTime)
+ break;
+
+ getCharacterCurrentParams(kCharacterCond1)[5] = 0x7FFFFFFF;
+ }
+
+ startCycOtis(kCharacterCond1, "601E");
+ getCharacterParams(kCharacterCond1, 8)[0] = 1;
+ getCharacterCurrentParams(kCharacterCond1)[5] = 0;
+ }
+
+ break;
+ case 5:
+ if (_gameTime > 2430000 && !getCharacterCurrentParams(kCharacterCond1)[2]) {
+ getCharacterCurrentParams(kCharacterCond1)[2] = 1;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
+ Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 6:
+ if (_gameTime > 2439000 && !getCharacterCurrentParams(kCharacterCond1)[3]) {
+ getCharacterCurrentParams(kCharacterCond1)[3] = 1;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
+ Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 7:
+ if (_gameTime > 2448000 && !getCharacterCurrentParams(kCharacterCond1)[4]) {
+ getCharacterCurrentParams(kCharacterCond1)[4] = 1;
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
+ Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 8:
+ if (_gameTime > 2538000 && !getCharacterParams(kCharacterCond1, 8)[0] && !getCharacterParams(kCharacterCond1, 8)[16]) {
+ if (getCharacterCurrentParams(kCharacterCond1)[5] || (getCharacterCurrentParams(kCharacterCond1)[5] = _gameTime + 2700, _gameTime != -2700)) {
+ if (getCharacterCurrentParams(kCharacterCond1)[5] >= _gameTime)
+ break;
+
+ getCharacterCurrentParams(kCharacterCond1)[5] = 0x7FFFFFFF;
+ }
+
+ startCycOtis(kCharacterCond1, "601E");
+ getCharacterParams(kCharacterCond1, 8)[0] = 1;
+ getCharacterCurrentParams(kCharacterCond1)[5] = 0;
+ }
+
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 225358684:
+ if (!getCharacterParams(kCharacterCond1, 8)[0]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 13;
+ Cond1Call(&LogicManager::CONS_Cond1_CathBuzzing, msg->param, 0, 0, 0);
+ }
+
+ break;
+ case 226078300:
+ if (!getCharacterParams(kCharacterCond1, 8)[16] && !getCharacterParams(kCharacterCond1, 8)[0]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 12;
+ Cond1Call(&LogicManager::CONS_Cond1_DoDialog, "CON2020", 0, 0, 0);
+ }
+
+ break;
+ case 305159806:
+ if (!getCharacterParams(kCharacterCond1, 8)[16] && !getCharacterParams(kCharacterCond1, 8)[0]) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 14;
+ Cond1Call(&LogicManager::CONS_Cond1_CathRattling, msg->param, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -3939,10 +4958,12 @@ void LogicManager::CONS_Cond1_MakeBeds4(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_MakeBeds4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
Cond1Call(&LogicManager::CONS_Cond1_GetUp, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
@@ -3990,8 +5011,12 @@ void LogicManager::HAND_Cond1_MakeBeds4(HAND_PARAMS) {
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -4006,14 +5031,19 @@ void LogicManager::CONS_Cond1_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_StartPart5(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_Cond1_Prisoner(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
endGraphics(kCharacterCond1);
getCharacter(kCharacterCond1).characterPosition.car = kCarRestaurant;
getCharacter(kCharacterCond1).characterPosition.position = 3969;
getCharacter(kCharacterCond1).characterPosition.location = 1;
getCharacter(kCharacterCond1).inventoryItem = kItemNone;
+ break;
+ default:
+ break;
}
}
@@ -4028,8 +5058,13 @@ void LogicManager::CONS_Cond1_Prisoner(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_Prisoner(HAND_PARAMS) {
- if (msg->action == 70549068)
+ switch (msg->action) {
+ case 70549068:
CONS_Cond1_ComfortMadame(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Cond1_ComfortMadame(CONS_PARAMS) {
@@ -4046,24 +5081,26 @@ void LogicManager::HAND_Cond1_ComfortMadame(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (getCharacterCurrentParams(kCharacterCond1)[1] == 0x7FFFFFFF || !_gameTime)
- return;
+ break;
if (getCharacterCurrentParams(kCharacterCond1)[0] >= _gameTime) {
if (!cathInCorridor(kCarRedSleeping) || !getCharacterCurrentParams(kCharacterCond1)[1]) {
getCharacterCurrentParams(kCharacterCond1)[1] = _gameTime;
- if (!_gameTime)
- goto LABEL_13;
+ if (!_gameTime) {
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
+ Cond1Call(&LogicManager::CONS_Cond1_DoDialog, "Mme5010", 0, 0, 0);
+ break;
+ }
}
if (getCharacterCurrentParams(kCharacterCond1)[1] >= _gameTime)
- return;
+ break;
}
getCharacterCurrentParams(kCharacterCond1)[1] = 0x7FFFFFFF;
- LABEL_13:
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
Cond1Call(&LogicManager::CONS_Cond1_DoDialog, "Mme5010", 0, 0, 0);
- return;
+ break;
case 12:
getCharacter(kCharacterCond1).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterCond1).characterPosition.position = 5790;
@@ -4081,6 +5118,8 @@ void LogicManager::HAND_Cond1_ComfortMadame(HAND_PARAMS) {
CONS_Cond1_HideOut(0, 0, 0, 0);
}
+ break;
+ default:
break;
}
}
@@ -4096,61 +5135,27 @@ void LogicManager::CONS_Cond1_HideOut(CONS_PARAMS) {
}
void LogicManager::HAND_Cond1_HideOut(HAND_PARAMS) {
- if (msg->action > 9) {
- if (msg->action > 17) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
- Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "601ZD", 4, 0, 0);
- break;
- case 2:
- endGraphics(kCharacterCond1);
- getCharacter(kCharacterCond1).characterPosition.location = 1;
- getCharacter(kCharacterCond1).characterPosition.position = 5790;
- setDoor(4, kCharacterCond1, 1, 10, 9);
- break;
- case 3:
- setDoor(4, kCharacterCond1, 1, 10, 9);
- break;
- case 4:
- case 5:
- getCharacterCurrentParams(kCharacterCond1)[2]++;
- if (getCharacterCurrentParams(kCharacterCond1)[2] == 1) {
- setDoor(4, 3, 1, 0, 0);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
- Cond1Call(&LogicManager::CONS_Cond1_DoDialog, "Con5002", 0, 0, 0);
- } else if (getCharacterCurrentParams(kCharacterCond1)[2] == 2) {
- setDoor(4, 3, 1, 0, 0);
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
- Cond1Call(&LogicManager::CONS_Cond1_DoDialog, "Con5002A", 0, 0, 0);
- }
- break;
- case 6:
- getCharacterCurrentParams(kCharacterCond1)[0] = 1;
- setDoor(4, 3, 1, 14, 0);
- break;
- case 7:
- getCharacterCurrentParams(kCharacterCond1)[1] = 1;
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterCond1)[0]) {
+ if (getCharacterCurrentParams(kCharacterCond1)[3] || (getCharacterCurrentParams(kCharacterCond1)[3] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterCond1)[3] >= _currentGameSessionTicks)
break;
- default:
- return;
- }
- } else if (msg->action == 135800432) {
- CONS_Cond1_Disappear(0, 0, 0, 0);
- }
- } else if (msg->action == 17) {
- if (getCharacterCurrentParams(kCharacterCond1)[1] || getCharacterCurrentParams(kCharacterCond1)[0]) {
- getCharacterCurrentParams(kCharacterCond1)[1] = 0;
- getCharacterCurrentParams(kCharacterCond1)[0] = 0;
- setDoor(4, 3, 1, 10, 9);
- getCharacterCurrentParams(kCharacterCond1)[2] = 0;
+
+ getCharacterCurrentParams(kCharacterCond1)[3] = 0x7FFFFFFF;
}
- } else if (msg->action == 12) {
- getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
- Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 5790, 0, 0);
+
+ getCharacterCurrentParams(kCharacterCond1)[0] = 0;
+ getCharacterCurrentParams(kCharacterCond1)[1] = 1;
+ setDoor(4, kCharacterCond1, 1, 0, 0);
+ getCharacterCurrentParams(kCharacterCond1)[3] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterCond1)[3] = 0;
}
- } else if (msg->action >= 8) {
+
+ break;
+ case 8:
+ case 9:
if (getCharacterCurrentParams(kCharacterCond1)[0]) {
setDoor(4, kCharacterCond1, 1, 0, 0);
getCharacterCurrentParams(kCharacterCond1)[0] = 0;
@@ -4163,22 +5168,67 @@ void LogicManager::HAND_Cond1_HideOut(HAND_PARAMS) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
Cond1Call(&LogicManager::CONS_Cond1_DoDialog, "LIB013", 0, 0, 0);
}
- } else if (msg->action == 0) {
- if (getCharacterCurrentParams(kCharacterCond1)[0]) {
- if (getCharacterCurrentParams(kCharacterCond1)[3] || (getCharacterCurrentParams(kCharacterCond1)[3] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterCond1)[3] >= _currentGameSessionTicks)
- return;
- getCharacterCurrentParams(kCharacterCond1)[3] = 0x7FFFFFFF;
+ break;
+ case 12:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
+ Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 5790, 0, 0);
+ break;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterCond1)[1] || getCharacterCurrentParams(kCharacterCond1)[0]) {
+ getCharacterCurrentParams(kCharacterCond1)[1] = 0;
+ getCharacterCurrentParams(kCharacterCond1)[0] = 0;
+ setDoor(4, kCharacterCond1, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterCond1)[2] = 0;
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
+ Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "601ZD", 4, 0, 0);
+ break;
+ case 2:
+ endGraphics(kCharacterCond1);
+ getCharacter(kCharacterCond1).characterPosition.location = 1;
+ getCharacter(kCharacterCond1).characterPosition.position = 5790;
+ setDoor(4, kCharacterCond1, 1, 10, 9);
+ break;
+ case 3:
+ setDoor(4, kCharacterCond1, 1, 10, 9);
+ break;
+ case 4:
+ case 5:
+ getCharacterCurrentParams(kCharacterCond1)[2]++;
+ if (getCharacterCurrentParams(kCharacterCond1)[2] == 1) {
+ setDoor(4, kCharacterCond1, 1, 0, 0);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
+ Cond1Call(&LogicManager::CONS_Cond1_DoDialog, "Con5002", 0, 0, 0);
+ } else if (getCharacterCurrentParams(kCharacterCond1)[2] == 2) {
+ setDoor(4, kCharacterCond1, 1, 0, 0);
+ getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
+ Cond1Call(&LogicManager::CONS_Cond1_DoDialog, "Con5002A", 0, 0, 0);
}
- getCharacterCurrentParams(kCharacterCond1)[0] = 0;
+ break;
+ case 6:
+ getCharacterCurrentParams(kCharacterCond1)[0] = 1;
+ setDoor(4, kCharacterCond1, 1, 14, 0);
+ break;
+ case 7:
getCharacterCurrentParams(kCharacterCond1)[1] = 1;
- setDoor(4, kCharacterCond1, 1, 0, 0);
- getCharacterCurrentParams(kCharacterCond1)[3] = 0;
- } else {
- getCharacterCurrentParams(kCharacterCond1)[3] = 0;
+ break;
+ default:
+ break;
}
+
+ break;
+ case 135800432:
+ CONS_Cond1_Disappear(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
Commit: 8cc7437fc07283e6729f09ed68b78510da2e34dd
https://github.com/scummvm/scummvm/commit/8cc7437fc07283e6729f09ed68b78510da2e34dd
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Cond2 logic
Changed paths:
engines/lastexpress/characters/cond2.cpp
diff --git a/engines/lastexpress/characters/cond2.cpp b/engines/lastexpress/characters/cond2.cpp
index da1ee610f98..61629dcab8e 100644
--- a/engines/lastexpress/characters/cond2.cpp
+++ b/engines/lastexpress/characters/cond2.cpp
@@ -69,24 +69,32 @@ void LogicManager::CONS_Cond2_DebugWalks(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_DebugWalks(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 1) {
- getCharacter(kCharacterCond2).clothes++;
- if (getCharacter(kCharacterCond2).clothes > 1)
- getCharacter(kCharacterCond2).clothes = 0;
- } else if (msg->action == 12) {
- getCharacter(kCharacterCond2).characterPosition.position = 0;
- getCharacter(kCharacterCond2).characterPosition.location = 0;
- getCharacter(kCharacterCond2).characterPosition.car = kCarGreenSleeping;
- getCharacter(kCharacterCond2).inventoryItem = 0x80;
- getCharacterCurrentParams(kCharacterCond2)[0] = 10000;
- }
- } else if (walk(kCharacterCond2, kCarGreenSleeping, getCharacterCurrentParams(kCharacterCond2)[0])) {
- if (getCharacterCurrentParams(kCharacterCond2)[0] == 10000) {
- getCharacterCurrentParams(kCharacterCond2)[0] = 0;
- } else {
- getCharacterCurrentParams(kCharacterCond2)[0] = 10000;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterCond2, kCarGreenSleeping, getCharacterCurrentParams(kCharacterCond2)[0])) {
+ if (getCharacterCurrentParams(kCharacterCond2)[0] == 10000) {
+ getCharacterCurrentParams(kCharacterCond2)[0] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterCond2)[0] = 10000;
+ }
}
+
+ break;
+ case 1:
+ getCharacter(kCharacterCond2).clothes++;
+ if (getCharacter(kCharacterCond2).clothes > 1)
+ getCharacter(kCharacterCond2).clothes = 0;
+
+ break;
+ case 12:
+ getCharacter(kCharacterCond2).characterPosition.position = 0;
+ getCharacter(kCharacterCond2).characterPosition.location = 0;
+ getCharacter(kCharacterCond2).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterCond2).inventoryItem = 0x80;
+ getCharacterCurrentParams(kCharacterCond2)[0] = 10000;
+ break;
+ default:
+ break;
}
}
@@ -109,6 +117,7 @@ void LogicManager::HAND_Cond2_DoSeqOtis(HAND_PARAMS) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
}
+
break;
case 3:
getCharacter(kCharacterCond2).currentCall--;
@@ -121,11 +130,12 @@ void LogicManager::HAND_Cond2_DoSeqOtis(HAND_PARAMS) {
case 18:
if (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 1) {
playNIS(kEventCoudertBloodJacket);
- endGame(0, 1, 55, 1);
+ endGame(0, 1, 55, true);
}
+
break;
default:
- return;
+ break;
}
}
@@ -150,6 +160,7 @@ void LogicManager::HAND_Cond2_DoCorrOtis(HAND_PARAMS) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
}
+
break;
case 3:
releaseAtDoor(kCharacterCond2, getCharacterCurrentParams(kCharacterCond2)[3]);
@@ -165,11 +176,12 @@ void LogicManager::HAND_Cond2_DoCorrOtis(HAND_PARAMS) {
case 18:
if (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 1) {
playNIS(kEventCoudertBloodJacket);
- endGame(0, 1, 55, 1);
+ endGame(0, 1, 55, true);
}
+
break;
default:
- return;
+ break;
}
}
@@ -184,25 +196,32 @@ void LogicManager::CONS_Cond2_FinishSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_FinishSeqOtis(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action != 3) {
- if (msg->action == 18 && getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 1) {
- playNIS(kEventCoudertBloodJacket);
- endGame(0, 1, 55, 1);
- }
- return;
+ switch (msg->action) {
+ case 0:
+ if (getCharacter(kCharacterCond2).direction != 4) {
+ getCharacter(kCharacterCond2).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
+ fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
+ } else if (_gameProgress[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
+ Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
}
- LABEL_6:
+
+ break;
+ case 3:
getCharacter(kCharacterCond2).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
- return;
- }
- if (getCharacter(kCharacterCond2).direction != 4)
- goto LABEL_6;
- if (_gameProgress[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
- Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 1) {
+ playNIS(kEventCoudertBloodJacket);
+ endGame(0, 1, 55, true);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -225,10 +244,11 @@ void LogicManager::CONS_Cond2_DoEnterCorrOtis(CONS_PARAMS) {
void LogicManager::HAND_Cond2_DoEnterCorrOtis(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[1] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
+ if (_gameProgress[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
}
+
break;
case 3:
releaseAtDoor(kCharacterCond2, getCharacterCurrentParams(kCharacterCond2)[3]);
@@ -257,11 +277,12 @@ void LogicManager::HAND_Cond2_DoEnterCorrOtis(HAND_PARAMS) {
case 18:
if (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 1) {
playNIS(kEventCoudertBloodJacket);
- endGame(0, 1, 55, 1);
+ endGame(0, 1, 55, true);
}
+
break;
default:
- return;
+ break;
}
}
@@ -284,6 +305,7 @@ void LogicManager::HAND_Cond2_DoDialog(HAND_PARAMS) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
}
+
break;
case 2:
getCharacter(kCharacterCond2).currentCall--;
@@ -296,11 +318,12 @@ void LogicManager::HAND_Cond2_DoDialog(HAND_PARAMS) {
case 18:
if (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 1) {
playNIS(kEventCoudertBloodJacket);
- endGame(0, 1, 55, 1);
+ endGame(0, 1, 55, true);
}
+
break;
default:
- return;
+ break;
}
}
@@ -319,10 +342,11 @@ void LogicManager::CONS_Cond2_DoDialogFullVol(CONS_PARAMS) {
void LogicManager::HAND_Cond2_DoDialogFullVol(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[1] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
+ if (_gameProgress[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
- Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, 123, 0, 0);
+ Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
}
+
break;
case 2:
getCharacter(kCharacterCond2).currentCall--;
@@ -335,11 +359,12 @@ void LogicManager::HAND_Cond2_DoDialogFullVol(HAND_PARAMS) {
case 18:
if (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 1) {
playNIS(kEventCoudertBloodJacket);
- endGame(0, 1, 55, 1);
+ endGame(0, 1, 55, true);
}
+
break;
default:
- return;
+ break;
}
}
@@ -357,22 +382,25 @@ void LogicManager::CONS_Cond2_SaveGame(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_SaveGame(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- save(
- kCharacterCond2,
- getCharacter(kCharacterCond2).callParams[getCharacter(kCharacterCond2).currentCall].parameters[0],
- getCharacter(kCharacterCond2).callParams[getCharacter(kCharacterCond2).currentCall].parameters[1]
- );
+ switch (msg->action) {
+ case 0:
+ getCharacter(kCharacterCond2).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
+ fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
+ break;
+ case 12:
+ save(
+ kCharacterCond2,
+ getCharacterCurrentParams(kCharacterCond2)[0],
+ getCharacterCurrentParams(kCharacterCond2)[1]
+ );
- getCharacter(kCharacterCond2).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
- fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
- }
- } else {
getCharacter(kCharacterCond2).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -397,6 +425,7 @@ void LogicManager::HAND_Cond2_DoWalk(HAND_PARAMS) {
} else {
getCharacter(kCharacterCond2).inventoryItem = 0;
}
+
if (_gameProgress[kProgressJacket] != 1 || !nearChar(kCharacterCond2, kCharacterCath, 1000) || inComp(kCharacterCath) || whoOutside(kCharacterCath)) {
if (walk(kCharacterCond2, getCharacterCurrentParams(kCharacterCond2)[0], getCharacterCurrentParams(kCharacterCond2)[1])) {
getCharacter(kCharacterCond2).inventoryItem = 0;
@@ -409,6 +438,7 @@ void LogicManager::HAND_Cond2_DoWalk(HAND_PARAMS) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
}
+
break;
case 1:
getCharacterCurrentParams(kCharacterCond2)[2] = 0;
@@ -417,43 +447,48 @@ void LogicManager::HAND_Cond2_DoWalk(HAND_PARAMS) {
Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventCoudertAskTylerCompartment, 0, 0);
break;
case 5:
- if (getCharacter(kCharacterCond2).clothes == 1)
- goto LABEL_16;
- if (!whoRunningDialog(kCharacterCond2)) {
+ if (getCharacter(kCharacterCond2).clothes == 1) {
+ playDialog(0, "ZFX1003", getVolume(kCharacterCond2), 0);
+ } else if (!whoRunningDialog(kCharacterCond2)) {
playDialog(kCharacterCath, "JAC1112", getVolume(kCharacterCond2), 0);
}
+
break;
case 6:
if (getCharacter(kCharacterCond2).clothes == 1) {
- LABEL_16:
playDialog(0, "ZFX1003", getVolume(kCharacterCond2), 0);
} else {
playChrExcuseMe(kCharacterCond2, kCharacterCath, 0);
}
+
break;
case 12:
if (!_gameProgress[kProgressEventFoundCorpse] && !_gameEvents[kEventCoudertAskTylerCompartment])
getCharacterCurrentParams(kCharacterCond2)[2] = 128;
+
if (walk(kCharacterCond2, getCharacterCurrentParams(kCharacterCond2)[0], getCharacterCurrentParams(kCharacterCond2)[1])) {
getCharacter(kCharacterCond2).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
}
+
break;
case 18:
if (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 1) {
playNIS(kEventCoudertBloodJacket);
- endGame(0, 1, 55, 1);
+ endGame(0, 1, 55, true);
} else if (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 2) {
playNIS(kEventCoudertAskTylerCompartment);
+
if (getCharacter(kCharacterCond2).direction == 1)
bumpCathFx(getCharacter(kCharacterCond2).characterPosition.car, getCharacter(kCharacterCond2).characterPosition.position - 750);
else
bumpCathRx(getCharacter(kCharacterCond2).characterPosition.car, getCharacter(kCharacterCond2).characterPosition.position + 750);
}
+
break;
default:
- return;
+ break;
}
}
@@ -470,27 +505,35 @@ void LogicManager::CONS_Cond2_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_DoWait(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 18 && getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 1) {
- playNIS(kEventCoudertBloodJacket);
- endGame(0, 1, 55, true);
- }
- } else {
+ switch (msg->action) {
+ case 0:
if (_gameProgress[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
- return;
+ break;
}
+
if (getCharacterCurrentParams(kCharacterCond2)[1] ||
(getCharacterCurrentParams(kCharacterCond2)[1] = _gameTime + getCharacterCurrentParams(kCharacterCond2)[0], _gameTime + getCharacterCurrentParams(kCharacterCond2)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterCond2)[1] >= _gameTime)
- return;
+ break;
+
getCharacterCurrentParams(kCharacterCond2)[1] = 0x7FFFFFFF;
- }
+ }
getCharacter(kCharacterCond2).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 1) {
+ playNIS(kEventCoudertBloodJacket);
+ endGame(0, 1, 55, true);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -507,27 +550,35 @@ void LogicManager::CONS_Cond2_DoWaitReal(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_DoWaitReal(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 18 && getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 1) {
- playNIS(kEventCoudertBloodJacket);
- endGame(0, 1, 55, 1);
- }
- } else {
+ switch (msg->action) {
+ case 0:
if (_gameProgress[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
- return;
+ break;
}
+
if (getCharacterCurrentParams(kCharacterCond2)[1] ||
(getCharacterCurrentParams(kCharacterCond2)[1] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterCond2)[0], _currentGameSessionTicks + getCharacterCurrentParams(kCharacterCond2)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterCond2)[1] >= _currentGameSessionTicks)
- return;
+ break;
+
getCharacterCurrentParams(kCharacterCond2)[1] = 0x7FFFFFFF;
}
getCharacter(kCharacterCond2).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 1) {
+ playNIS(kEventCoudertBloodJacket);
+ endGame(0, 1, 55, true);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -544,7 +595,8 @@ void LogicManager::CONS_Cond2_StandAsideDialog(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_StandAsideDialog(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (!whoRunningDialog(kCharacterCond2)) {
if (isNight()) {
if (isFemale(getCharacterCurrentParams(kCharacterCond2)[0])) {
@@ -585,6 +637,9 @@ void LogicManager::HAND_Cond2_StandAsideDialog(HAND_PARAMS) {
getCharacter(kCharacterCond2).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -602,188 +657,242 @@ void LogicManager::CONS_Cond2_Passing(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_Passing(HAND_PARAMS) {
- if (msg->action > 11) {
- if (msg->action > 16) {
- switch (msg->action) {
- case 17:
- if (!getCharacterCurrentParams(kCharacterCond2)[2]) {
- getCharacter(kCharacterCond2).inventoryItem = 0;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 6;
- Cond2Call(&LogicManager::CONS_Cond2_SitDownFast, 1, 0, 0, 0);
- }
- break;
- case 18:
- switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
- Cond2Call(&LogicManager::CONS_Cond2_GetUpListen, 1, 0, 0, 0);
- break;
- case 2:
- if (_gameProgress[kProgressChapter] == 1 && !_gameProgress[kProgressEventFoundCorpse] && !_gameEvents[kEventCoudertAskTylerCompartment]) {
- getCharacter(kCharacterCond2).inventoryItem = 0x80;
- }
-
- if (!getCharacterCurrentParams(kCharacterCond2)[0]) {
- startCycOtis(kCharacterCond2, "667H");
- } else {
- startCycOtis(kCharacterCond2, "667I");
- }
- break;
- case 3:
- playNIS(kEventCoudertBloodJacket);
- endGame(0, 1, 55, true);
- goto LABEL_39;
- case 4:
- case 5:
- case 6:
- case 7:
- getCharacter(kCharacterCond2).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
- fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
- break;
- case 9:
- playNIS(kEventCoudertAskTylerCompartment);
- bumpCath(kCarRedSleeping, 25, 255);
- break;
- default:
- return;
- }
- break;
- case 201439712:
- startCycOtis(kCharacterCond2, "627K");
- break;
- }
- } else if (msg->action == 16) {
- getCharacterCurrentParams(kCharacterCond2)[2]--;
- if (getCharacterCurrentParams(kCharacterCond2)[1] && getCharacterCurrentParams(kCharacterCond2)[2] == 0) {
- getCharacter(kCharacterCond2).inventoryItem = 0;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 7;
- Cond2Call(&LogicManager::CONS_Cond2_SitDownFast, 1, 0, 0, 0);
- }
- } else if (msg->action == 12) {
- if (getCharacterCurrentParams(kCharacterCond2)[1])
- getCharacterCurrentParams(kCharacterCond2)[2] = 1;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
- Cond2Call(&LogicManager::CONS_Cond2_StandAsideDialog, getCharacterCurrentParams(kCharacterCond2)[1], 0, 0, 0);
- }
- } else {
- if (msg->action == 11) {
- getCharacterCurrentParams(kCharacterCond2)[2]++;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
- Cond2Call(&LogicManager::CONS_Cond2_StandAsideDialog, msg->sender, 0, 0, 0);
- return;
- }
- if (msg->action) {
- if (msg->action == 1) {
- getCharacter(kCharacterCond2).inventoryItem = 0;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 9;
- Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventCoudertAskTylerCompartment, 0, 0);
- }
- return;
- }
+ switch (msg->action) {
+ case 0:
if (_gameProgress[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
- return;
+ break;
}
- LABEL_39:
+
if (!getCharacterCurrentParams(kCharacterCond2)[1] && !getCharacterCurrentParams(kCharacterCond2)[2]) {
if (!getCharacterCurrentParams(kCharacterCond2)[3]) {
getCharacterCurrentParams(kCharacterCond2)[3] = _currentGameSessionTicks + 75;
- if (_currentGameSessionTicks == -75)
- goto LABEL_45;
+ if (_currentGameSessionTicks == -75) {
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
+ Cond2Call(&LogicManager::CONS_Cond2_SitDownFast, 1, 0, 0, 0);
+ break;
+ }
}
+
if (getCharacterCurrentParams(kCharacterCond2)[3] < _currentGameSessionTicks) {
getCharacterCurrentParams(kCharacterCond2)[3] = 0x7FFFFFFF;
- LABEL_45:
+
getCharacter(kCharacterCond2).inventoryItem = 0;
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
Cond2Call(&LogicManager::CONS_Cond2_SitDownFast, 1, 0, 0, 0);
- return;
+ break;
}
}
+
if (getCharacterCurrentParams(kCharacterCond2)[4] ||
(getCharacterCurrentParams(kCharacterCond2)[4] = _currentGameSessionTicks + 225, _currentGameSessionTicks != -225)) {
if (getCharacterCurrentParams(kCharacterCond2)[4] >= _currentGameSessionTicks) {
- return;
+ break;
}
getCharacterCurrentParams(kCharacterCond2)[4] = 0x7FFFFFFF;
}
+
getCharacter(kCharacterCond2).inventoryItem = 0;
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
Cond2Call(&LogicManager::CONS_Cond2_SitDownFast, 1, 0, 0, 0);
- }
-}
-
-void LogicManager::CONS_Cond2_Listen(CONS_PARAMS) {
- CharacterCallParams *params = &getCharacter(kCharacterCond2).callParams[getCharacter(kCharacterCond2).currentCall];
- _engine->getMessageManager()->setMessageHandle(kCharacterCond2, &LogicManager::HAND_Cond2_Listen);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall] = 14;
-
- params->clear();
+ break;
+ case 1:
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 9;
+ Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventCoudertAskTylerCompartment, 0, 0);
+ break;
+ case 11:
+ getCharacterCurrentParams(kCharacterCond2)[2]++;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
+ Cond2Call(&LogicManager::CONS_Cond2_StandAsideDialog, msg->sender, 0, 0, 0);
+ break;
+ case 12:
+ if (getCharacterCurrentParams(kCharacterCond2)[1])
+ getCharacterCurrentParams(kCharacterCond2)[2] = 1;
- params->parameters[0] = param1.intParam;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
+ Cond2Call(&LogicManager::CONS_Cond2_StandAsideDialog, getCharacterCurrentParams(kCharacterCond2)[1], 0, 0, 0);
+ break;
+ case 16:
+ getCharacterCurrentParams(kCharacterCond2)[2]--;
+ if (getCharacterCurrentParams(kCharacterCond2)[1] && getCharacterCurrentParams(kCharacterCond2)[2] == 0) {
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 7;
+ Cond2Call(&LogicManager::CONS_Cond2_SitDownFast, 1, 0, 0, 0);
+ }
- fedEx(kCharacterCond2, kCharacterCond2, 12, 0);
-}
+ break;
+ case 17:
+ if (!getCharacterCurrentParams(kCharacterCond2)[2]) {
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 6;
+ Cond2Call(&LogicManager::CONS_Cond2_SitDownFast, 1, 0, 0, 0);
+ }
-void LogicManager::HAND_Cond2_Listen(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
- case 1:
- send(kCharacterCond2, getCharacterCurrentParams(kCharacterCond2)[0], 202558662, 0);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
- Cond2Call(&LogicManager::CONS_Cond2_GetUpListen, 0, 0, 0, 0);
- break;
- case 2:
- send(kCharacterCond2, getCharacterCurrentParams(kCharacterCond2)[0], 155853632, 0);
- startCycOtis(kCharacterCond2, "627K");
- break;
- case 3:
- send(kCharacterCond2, getCharacterCurrentParams(kCharacterCond2)[0], 202558662, 0);
- send(kCharacterCond2, getCharacterCurrentParams(kCharacterCond2)[0], 155853632, 0);
- startCycOtis(kCharacterCond2, "627K");
- takeItem(kItem5);
- break;
- case 4:
- playNIS(kEventCoudertBloodJacket);
- endGame(0, 1, 55, 1);
- break;
- case 5:
- getCharacter(kCharacterCond2).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
- fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
- break;
- default:
- return;
- }
- } else if (msg->action == 125499160) {
- if (getCharacterCurrentParams(kCharacterCond2)[0] == kCharacterTrainM) {
- getCharacterParams(kCharacterCond2, 8)[2] = 0;
- } else if (getCharacterCurrentParams(kCharacterCond2)[0] == kCharacterCond1) {
- getCharacterParams(kCharacterCond2, 8)[4] = 0;
- } else if (getCharacterCurrentParams(kCharacterCond2)[0] == kCharacterMadame) {
- getCharacterParams(kCharacterCond2, 8)[3] = 0;
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
+ Cond2Call(&LogicManager::CONS_Cond2_GetUpListen, 1, 0, 0, 0);
+ break;
+ case 2:
+ if (_gameProgress[kProgressChapter] == 1 && !_gameProgress[kProgressEventFoundCorpse] && !_gameEvents[kEventCoudertAskTylerCompartment]) {
+ getCharacter(kCharacterCond2).inventoryItem = 0x80;
}
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
- Cond2Call(&LogicManager::CONS_Cond2_SitDownFast, 0, 0, 0, 0);
- }
- } else if (msg->action == 12) {
- if (getCharacterParams(kCharacterCond2, 8)[16]) {
- getCharacterParams(kCharacterCond2, 8)[16] = 0;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
- Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 1500, 0, 0);
- } else {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
- Cond2Call(&LogicManager::CONS_Cond2_DoWait, 15, 0, 0, 0);
- }
- } else if (msg->action == 0 && _gameProgress[1] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
- Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, 123, 0, 0);
- }
-}
+
+ if (!getCharacterCurrentParams(kCharacterCond2)[0]) {
+ startCycOtis(kCharacterCond2, "667H");
+ } else {
+ startCycOtis(kCharacterCond2, "667I");
+ }
+
+ break;
+ case 3:
+ playNIS(kEventCoudertBloodJacket);
+ endGame(0, 1, 55, true);
+
+ if (!getCharacterCurrentParams(kCharacterCond2)[1] && !getCharacterCurrentParams(kCharacterCond2)[2]) {
+ if (!getCharacterCurrentParams(kCharacterCond2)[3]) {
+ getCharacterCurrentParams(kCharacterCond2)[3] = _currentGameSessionTicks + 75;
+ if (_currentGameSessionTicks == -75) {
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
+ Cond2Call(&LogicManager::CONS_Cond2_SitDownFast, 1, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterCond2)[3] < _currentGameSessionTicks) {
+ getCharacterCurrentParams(kCharacterCond2)[3] = 0x7FFFFFFF;
+
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
+ Cond2Call(&LogicManager::CONS_Cond2_SitDownFast, 1, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterCond2)[4] ||
+ (getCharacterCurrentParams(kCharacterCond2)[4] = _currentGameSessionTicks + 225, _currentGameSessionTicks != -225)) {
+ if (getCharacterCurrentParams(kCharacterCond2)[4] >= _currentGameSessionTicks) {
+ break;
+ }
+
+ getCharacterCurrentParams(kCharacterCond2)[4] = 0x7FFFFFFF;
+ }
+
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
+ Cond2Call(&LogicManager::CONS_Cond2_SitDownFast, 1, 0, 0, 0);
+ break;
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ getCharacter(kCharacterCond2).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
+ fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
+ break;
+ case 9:
+ playNIS(kEventCoudertAskTylerCompartment);
+ bumpCath(kCarRedSleeping, 25, 255);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 201439712:
+ startCycOtis(kCharacterCond2, "627K");
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_Cond2_Listen(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterCond2).callParams[getCharacter(kCharacterCond2).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, &LogicManager::HAND_Cond2_Listen);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall] = 14;
+
+ params->clear();
+
+ params->parameters[0] = param1.intParam;
+
+ fedEx(kCharacterCond2, kCharacterCond2, 12, 0);
+}
+
+void LogicManager::HAND_Cond2_Listen(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (_gameProgress[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
+ Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, 123, 0, 0);
+ }
+
+ break;
+ case 12:
+ if (getCharacterParams(kCharacterCond2, 8)[16]) {
+ getCharacterParams(kCharacterCond2, 8)[16] = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
+ Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 1500, 0, 0);
+ } else {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
+ Cond2Call(&LogicManager::CONS_Cond2_DoWait, 15, 0, 0, 0);
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
+ case 1:
+ send(kCharacterCond2, getCharacterCurrentParams(kCharacterCond2)[0], 202558662, 0);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
+ Cond2Call(&LogicManager::CONS_Cond2_GetUpListen, 0, 0, 0, 0);
+ break;
+ case 2:
+ send(kCharacterCond2, getCharacterCurrentParams(kCharacterCond2)[0], 155853632, 0);
+ startCycOtis(kCharacterCond2, "627K");
+ break;
+ case 3:
+ send(kCharacterCond2, getCharacterCurrentParams(kCharacterCond2)[0], 202558662, 0);
+ send(kCharacterCond2, getCharacterCurrentParams(kCharacterCond2)[0], 155853632, 0);
+ startCycOtis(kCharacterCond2, "627K");
+ takeItem(kItem5);
+ break;
+ case 4:
+ playNIS(kEventCoudertBloodJacket);
+ endGame(0, 1, 55, true);
+ break;
+ case 5:
+ getCharacter(kCharacterCond2).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
+ fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 125499160:
+ if (getCharacterCurrentParams(kCharacterCond2)[0] == kCharacterTrainM) {
+ getCharacterParams(kCharacterCond2, 8)[2] = 0;
+ } else if (getCharacterCurrentParams(kCharacterCond2)[0] == kCharacterCond1) {
+ getCharacterParams(kCharacterCond2, 8)[4] = 0;
+ } else if (getCharacterCurrentParams(kCharacterCond2)[0] == kCharacterMadame) {
+ getCharacterParams(kCharacterCond2, 8)[3] = 0;
+ }
+
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
+ Cond2Call(&LogicManager::CONS_Cond2_SitDownFast, 0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
void LogicManager::CONS_Cond2_TatianaLockUnlockMyComp(CONS_PARAMS) {
CharacterCallParams *params = &getCharacter(kCharacterCond2).callParams[getCharacter(kCharacterCond2).currentCall];
@@ -798,12 +907,14 @@ void LogicManager::CONS_Cond2_TatianaLockUnlockMyComp(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_TatianaLockUnlockMyComp(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacterParams(kCharacterCond2, 8)[7] = 0;
getCharacterParams(kCharacterCond2, 8)[8] = 0;
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_GetUp, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
@@ -837,8 +948,12 @@ void LogicManager::HAND_Cond2_TatianaLockUnlockMyComp(HAND_PARAMS) {
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -853,7 +968,8 @@ void LogicManager::CONS_Cond2_GetUp(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_GetUp(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (getCharacterParams(kCharacterCond2, 8)[16]) {
getCharacterParams(kCharacterCond2, 8)[16] = 0;
dropItem(kItem5, 1);
@@ -868,7 +984,9 @@ void LogicManager::HAND_Cond2_GetUp(HAND_PARAMS) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
Cond2Call(&LogicManager::CONS_Cond2_DoSeqOtis, "627F", 0, 0, 0);
}
- } else if (msg->action == 18) {
+
+ break;
+ case 18:
if (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
if (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] <= 2) {
dropItem(kItem5, 1);
@@ -880,6 +998,10 @@ void LogicManager::HAND_Cond2_GetUp(HAND_PARAMS) {
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
}
}
+
+ break;
+ default:
+ break;
}
}
@@ -896,7 +1018,8 @@ void LogicManager::CONS_Cond2_GetUpListen(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_GetUpListen(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
takeItem(kItem5);
if (getCharacterParams(kCharacterCond2, 8)[16]) {
getCharacterParams(kCharacterCond2, 8)[16] = 0;
@@ -914,10 +1037,18 @@ void LogicManager::HAND_Cond2_GetUpListen(HAND_PARAMS) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
Cond2Call(&LogicManager::CONS_Cond2_DoSeqOtis, "627F", 0, 0, 0);
}
- } else if (msg->action == 18 && getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] && getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] <= 3) {
- getCharacter(kCharacterCond2).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
- fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
+
+ break;
+ case 18:
+ if (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] && getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] <= 3) {
+ getCharacter(kCharacterCond2).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
+ fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -932,7 +1063,8 @@ void LogicManager::CONS_Cond2_SitDown(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_SitDown(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (getCharacterParams(kCharacterCond2, 8)[5] || getCharacterParams(kCharacterCond2, 8)[7] || getCharacterParams(kCharacterCond2, 8)[8] || getCharacterParams(kCharacterCond2, 8)[10] || getCharacterParams(kCharacterCond2, 8)[12] || getCharacterParams(kCharacterCond2, 8)[13] || getCharacterParams(kCharacterCond2, 8)[15] || getCharacterParams(kCharacterCond2, 8)[19] || getCharacterParams(kCharacterCond2, 8)[14] || getCharacterParams(kCharacterCond2, 8)[9] || getCharacterParams(kCharacterCond2, 8)[21]) {
dropItem(kItem5, 1);
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
@@ -950,16 +1082,22 @@ void LogicManager::HAND_Cond2_SitDown(HAND_PARAMS) {
startSeqOtis(kCharacterCond2, "627A");
else
startSeqOtis(kCharacterCond2, "627D");
+
takeItem(kItem5);
+
if (checkCathDir(kCarRedSleeping, 68)) {
if (!whoRunningDialog(kCharacterCond2))
playDialog(kCharacterCond2, "JAC1111", -1, 0);
+
bumpCath(kCarRedSleeping, 25, 255);
}
+
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
Cond2Call(&LogicManager::CONS_Cond2_FinishSeqOtis, 0, 0, 0, 0);
}
- } else if (msg->action == 18) {
+
+ break;
+ case 18:
switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
case 1:
endGraphics(kCharacterCond2);
@@ -986,7 +1124,13 @@ void LogicManager::HAND_Cond2_SitDown(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1003,7 +1147,8 @@ void LogicManager::CONS_Cond2_SitDownFast(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_SitDownFast(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (getCharacterParams(kCharacterCond2, 8)[5] || getCharacterParams(kCharacterCond2, 8)[7] || getCharacterParams(kCharacterCond2, 8)[8] || getCharacterParams(kCharacterCond2, 8)[10] || getCharacterParams(kCharacterCond2, 8)[12] || getCharacterParams(kCharacterCond2, 8)[13] || getCharacterParams(kCharacterCond2, 8)[15] || getCharacterParams(kCharacterCond2, 8)[19] || getCharacterParams(kCharacterCond2, 8)[14] || getCharacterParams(kCharacterCond2, 8)[9] || getCharacterParams(kCharacterCond2, 8)[21]) {
dropItem(kItem5, 1);
getCharacterParams(kCharacterCond2, 8)[16] = 1;
@@ -1031,18 +1176,26 @@ void LogicManager::HAND_Cond2_SitDownFast(HAND_PARAMS) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_FinishSeqOtis, 0, 0, 0, 0);
}
- } else if (msg->action == 18 && getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 1) {
- if (getCharacterParams(kCharacterCond2, 8)[1]) {
- startCycOtis(kCharacterCond2, "627B");
- } else {
- startCycOtis(kCharacterCond2, "627E");
- }
- getCharacterParams(kCharacterCond2, 8)[0] = 0;
+ break;
+ case 18:
+ if (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 1) {
+ if (getCharacterParams(kCharacterCond2, 8)[1]) {
+ startCycOtis(kCharacterCond2, "627B");
+ } else {
+ startCycOtis(kCharacterCond2, "627E");
+ }
- getCharacter(kCharacterCond2).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
- fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
+ getCharacterParams(kCharacterCond2, 8)[0] = 0;
+
+ getCharacter(kCharacterCond2).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
+ fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -1062,22 +1215,27 @@ void LogicManager::CONS_Cond2_MakeBed(CONS_PARAMS) {
void LogicManager::HAND_Cond2_MakeBed(HAND_PARAMS) {
switch (msg->action) {
case 0:
+ {
+ bool skip = false; // Horrible way to unroll a goto...
+
if (!getCharacterCurrentParams(kCharacterCond2)[10]) {
getCharacterCurrentParams(kCharacterCond2)[10] = _gameTime + 300;
- if (_gameTime == -300)
- goto LABEL_7;
+ if (_gameTime == -300) {
+ skip = true;
+ playDialog(0, "ZFX1004", getVolume(kCharacterCond2), 0);
+ }
}
- if (getCharacterCurrentParams(kCharacterCond2)[10] < _gameTime) {
+ if (!skip && getCharacterCurrentParams(kCharacterCond2)[10] < _gameTime) {
getCharacterCurrentParams(kCharacterCond2)[10] = 0x7FFFFFFF;
- LABEL_7:
playDialog(0, "ZFX1004", getVolume(kCharacterCond2), 0);
}
if (getCharacterCurrentParams(kCharacterCond2)[11] ||
(getCharacterCurrentParams(kCharacterCond2)[11] = _gameTime + 900, _gameTime != -900)) {
if (getCharacterCurrentParams(kCharacterCond2)[11] >= _gameTime)
- return;
+ break;
+
getCharacterCurrentParams(kCharacterCond2)[11] = 0x7FFFFFFF;
}
@@ -1093,6 +1251,7 @@ void LogicManager::HAND_Cond2_MakeBed(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
break;
+ }
case 8:
case 9:
setDoor(getCharacterCurrentParams(kCharacterCond2)[0], 4, 1, 0, 0);
@@ -1108,7 +1267,7 @@ void LogicManager::HAND_Cond2_MakeBed(HAND_PARAMS) {
Cond2Call(&LogicManager::CONS_Cond2_DoDialog, "LIB013", 0, 0, 0);
}
- return;
+ break;
case 12:
getCharacterCurrentParams(kCharacterCond2)[2] = _gameObjects[getCharacterCurrentParams(kCharacterCond2)[0]].character;
getCharacterCurrentParams(kCharacterCond2)[3] = _gameObjects[getCharacterCurrentParams(kCharacterCond2)[0]].door;
@@ -1125,7 +1284,8 @@ void LogicManager::HAND_Cond2_MakeBed(HAND_PARAMS) {
if (getCharacterCurrentParams(kCharacterCond2)[3] != 2)
setDoor(getCharacterCurrentParams(kCharacterCond2)[0], 4, 1, 10, 9);
- return;
+
+ break;
case 18:
switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
case 1:
@@ -1149,11 +1309,12 @@ void LogicManager::HAND_Cond2_MakeBed(HAND_PARAMS) {
break;
default:
- return;
+ break;
}
- return;
+
+ break;
default:
- return;
+ break;
}
}
@@ -1168,88 +1329,96 @@ void LogicManager::CONS_Cond2_MakeBedIvo(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_MakeBedIvo(HAND_PARAMS) {
- if (msg->action > 12) {
- switch (msg->action) {
- case 18:
- switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
- Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "627Vh", 39, 0, 0);
- break;
- case 2:
- send(kCharacterCond2, kCharacterIvo, 221683008, 0);
- startCycOtis(kCharacterCond2, "627Wh");
- softBlockAtDoor(kCharacterCond2, 39);
- break;
- case 3:
- softReleaseAtDoor(kCharacterCond2, 39);
- getCharacter(kCharacterCond2).characterPosition.location = 1;
- endGraphics(kCharacterCond2);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
- Cond2Call(&LogicManager::CONS_Cond2_MakeBed, 39, 0, 0, 0);
- break;
- case 4:
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
- Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "697Ah", 39, 0, 0);
- break;
- case 5:
- getCharacter(kCharacterCond2).characterPosition.location = 0;
-
- getCharacter(kCharacterCond2).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
- fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
- break;
- case 6:
- send(kCharacterCond2, kCharacterIvo, 122865568, 0);
- break;
- case 7:
- softReleaseAtDoor(kCharacterCond2, 39);
- setDoor(39, 0, 2, 255, 255);
- getCharacter(kCharacterCond2).characterPosition.location = 1;
- endGraphics(kCharacterCond2);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
- Cond2Call(&LogicManager::CONS_Cond2_MakeBed, 39, 0, 0, 0);
- break;
- case 8:
- playDialog(kCharacterCond2, "JAC1013A", -1, 0);
- setDoor(39, 0, 1, 255, 255);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 9;
- Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "667Uh", 39, 0, 0);
- break;
- case 9:
- getCharacter(kCharacterCond2).characterPosition.location = 0;
- send(kCharacterCond2, kCharacterIvo, 123852928, 0);
+ switch (msg->action) {
+ case 0:
+ if (!getCharacterCurrentParams(kCharacterCond2)[0]) {
+ if (getCharacterCurrentParams(kCharacterCond2)[1] ||
+ (getCharacterCurrentParams(kCharacterCond2)[1] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterCond2)[1] >= _currentGameSessionTicks)
+ break;
- getCharacter(kCharacterCond2).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
- fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
- break;
- default:
- return;
+ getCharacterCurrentParams(kCharacterCond2)[1] = 0x7FFFFFFF;
}
- break;
- case 88652208:
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 7;
- Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "667Th", 39, 0, 0);
- break;
- case 123199584:
- getCharacterCurrentParams(kCharacterCond2)[0] = 1;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 6;
- Cond2Call(&LogicManager::CONS_Cond2_DoDialog, "JAC1012", 0, 0, 0);
- break;
+
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
+ Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "627Zh", 39, 0, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 2740, 0, 0);
- } else if (msg->action == 0 && !getCharacterCurrentParams(kCharacterCond2)[0]) {
- if (getCharacterCurrentParams(kCharacterCond2)[1] ||
- (getCharacterCurrentParams(kCharacterCond2)[1] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterCond2)[1] >= _currentGameSessionTicks)
- return;
- getCharacterCurrentParams(kCharacterCond2)[1] = 0x7FFFFFFF;
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
+ Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "627Vh", 39, 0, 0);
+ break;
+ case 2:
+ send(kCharacterCond2, kCharacterIvo, 221683008, 0);
+ startCycOtis(kCharacterCond2, "627Wh");
+ softBlockAtDoor(kCharacterCond2, 39);
+ break;
+ case 3:
+ softReleaseAtDoor(kCharacterCond2, 39);
+ getCharacter(kCharacterCond2).characterPosition.location = 1;
+ endGraphics(kCharacterCond2);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
+ Cond2Call(&LogicManager::CONS_Cond2_MakeBed, 39, 0, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
+ Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "697Ah", 39, 0, 0);
+ break;
+ case 5:
+ getCharacter(kCharacterCond2).characterPosition.location = 0;
+
+ getCharacter(kCharacterCond2).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
+ fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
+ break;
+ case 6:
+ send(kCharacterCond2, kCharacterIvo, 122865568, 0);
+ break;
+ case 7:
+ softReleaseAtDoor(kCharacterCond2, 39);
+ setDoor(39, 0, 2, 255, 255);
+ getCharacter(kCharacterCond2).characterPosition.location = 1;
+ endGraphics(kCharacterCond2);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
+ Cond2Call(&LogicManager::CONS_Cond2_MakeBed, 39, 0, 0, 0);
+ break;
+ case 8:
+ playDialog(kCharacterCond2, "JAC1013A", -1, 0);
+ setDoor(39, 0, 1, 255, 255);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 9;
+ Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "667Uh", 39, 0, 0);
+ break;
+ case 9:
+ getCharacter(kCharacterCond2).characterPosition.location = 0;
+ send(kCharacterCond2, kCharacterIvo, 123852928, 0);
+
+ getCharacter(kCharacterCond2).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
+ fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
+ break;
+ default:
+ break;
}
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
- Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "627Zh", 39, 0, 0);
+
+ break;
+ case 88652208:
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 7;
+ Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "667Th", 39, 0, 0);
+ break;
+ case 123199584:
+ getCharacterCurrentParams(kCharacterCond2)[0] = 1;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 6;
+ Cond2Call(&LogicManager::CONS_Cond2_DoDialog, "JAC1012", 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1264,90 +1433,96 @@ void LogicManager::CONS_Cond2_MakeBedMilos(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_MakeBedMilos(HAND_PARAMS) {
- if (msg->action > 12) {
- switch (msg->action) {
- case 18:
- switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
- Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "627Mg", 38, 0, 0);
- break;
- case 2:
- send(kCharacterCond2, kCharacterMilos, 221683008, 0);
- startCycOtis(kCharacterCond2, "627Ng");
- softBlockAtDoor(kCharacterCond2, 38);
- break;
- case 3:
- softReleaseAtDoor(kCharacterCond2, 38);
- getCharacter(kCharacterCond2).characterPosition.location = 1;
- endGraphics(kCharacterCond2);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
- Cond2Call(&LogicManager::CONS_Cond2_MakeBed, 38, 0, 0, 0);
- break;
- case 4:
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
- Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "627Sg", 38, 0, 0);
- break;
- case 5:
- getCharacter(kCharacterCond2).characterPosition.location = 0;
-
- getCharacter(kCharacterCond2).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
- fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
- break;
- case 6:
- send(kCharacterCond2, kCharacterMilos, 122865568, 0);
- break;
- case 7:
- softReleaseAtDoor(kCharacterCond2, 38);
- setDoor(38, 0, 2, 255, 255);
- getCharacter(kCharacterCond2).characterPosition.location = 1;
- endGraphics(kCharacterCond2);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
- Cond2Call(&LogicManager::CONS_Cond2_MakeBed, 38, 0, 0, 0);
- break;
- case 8:
- playDialog(kCharacterCond2, "JAC1030A", -1, 0);
- setDoor(38, 0, 1, 255, 255);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 9;
- Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "627Ug", 38, 0, 0);
- break;
- case 9:
- getCharacter(kCharacterCond2).characterPosition.location = 0;
- send(kCharacterCond2, kCharacterMilos, 123852928, 0);
+ switch (msg->action) {
+ case 0:
+ if (!getCharacterCurrentParams(kCharacterCond2)[0]) {
+ if (getCharacterCurrentParams(kCharacterCond2)[1] ||
+ (getCharacterCurrentParams(kCharacterCond2)[1] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterCond2)[1] >= _currentGameSessionTicks)
+ break;
- getCharacter(kCharacterCond2).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
- fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
- break;
- default:
- return;
+ getCharacterCurrentParams(kCharacterCond2)[1] = 0x7FFFFFFF;
}
- break;
- case 88652208:
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 7;
- Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "627Tg", 38, 0, 0);
- break;
- case 123199584:
- getCharacterCurrentParams(kCharacterCond2)[0] = 1;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 6;
- Cond2Call(&LogicManager::CONS_Cond2_DoDialog, "JAC1030", 0, 0, 0);
- break;
+
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
+ Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "627Rg", 38, 0, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 3050, 0, 0);
- } else if (msg->action == 0 && !getCharacterCurrentParams(kCharacterCond2)[0]) {
- if (getCharacterCurrentParams(kCharacterCond2)[1] ||
- (getCharacterCurrentParams(kCharacterCond2)[1] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterCond2)[1] >= _currentGameSessionTicks)
- return;
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
+ Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "627Mg", 38, 0, 0);
+ break;
+ case 2:
+ send(kCharacterCond2, kCharacterMilos, 221683008, 0);
+ startCycOtis(kCharacterCond2, "627Ng");
+ softBlockAtDoor(kCharacterCond2, 38);
+ break;
+ case 3:
+ softReleaseAtDoor(kCharacterCond2, 38);
+ getCharacter(kCharacterCond2).characterPosition.location = 1;
+ endGraphics(kCharacterCond2);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
+ Cond2Call(&LogicManager::CONS_Cond2_MakeBed, 38, 0, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
+ Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "627Sg", 38, 0, 0);
+ break;
+ case 5:
+ getCharacter(kCharacterCond2).characterPosition.location = 0;
- getCharacterCurrentParams(kCharacterCond2)[1] = 0x7FFFFFFF;
+ getCharacter(kCharacterCond2).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
+ fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
+ break;
+ case 6:
+ send(kCharacterCond2, kCharacterMilos, 122865568, 0);
+ break;
+ case 7:
+ softReleaseAtDoor(kCharacterCond2, 38);
+ setDoor(38, 0, 2, 255, 255);
+ getCharacter(kCharacterCond2).characterPosition.location = 1;
+ endGraphics(kCharacterCond2);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
+ Cond2Call(&LogicManager::CONS_Cond2_MakeBed, 38, 0, 0, 0);
+ break;
+ case 8:
+ playDialog(kCharacterCond2, "JAC1030A", -1, 0);
+ setDoor(38, 0, 1, 255, 255);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 9;
+ Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "627Ug", 38, 0, 0);
+ break;
+ case 9:
+ getCharacter(kCharacterCond2).characterPosition.location = 0;
+ send(kCharacterCond2, kCharacterMilos, 123852928, 0);
+
+ getCharacter(kCharacterCond2).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
+ fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
+ break;
+ default:
+ break;
}
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
- Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "627Rg", 38, 0, 0);
+ break;
+ case 88652208:
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 7;
+ Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "627Tg", 38, 0, 0);
+ break;
+ case 123199584:
+ getCharacterCurrentParams(kCharacterCond2)[0] = 1;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 6;
+ Cond2Call(&LogicManager::CONS_Cond2_DoDialog, "JAC1030", 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1362,10 +1537,12 @@ void LogicManager::CONS_Cond2_TryMakeAnna(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_TryMakeAnna(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 4070, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
@@ -1385,7 +1562,13 @@ void LogicManager::HAND_Cond2_TryMakeAnna(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1400,10 +1583,12 @@ void LogicManager::CONS_Cond2_MakeBedAnna(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_MakeBedAnna(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 4070, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
@@ -1438,8 +1623,12 @@ void LogicManager::HAND_Cond2_MakeBedAnna(HAND_PARAMS) {
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1454,10 +1643,12 @@ void LogicManager::CONS_Cond2_MakeBedRebecca(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_MakeBedRebecca(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 4840, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
@@ -1498,8 +1689,12 @@ void LogicManager::HAND_Cond2_MakeBedRebecca(HAND_PARAMS) {
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1514,181 +1709,195 @@ void LogicManager::CONS_Cond2_MakeBedMadame(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_MakeBedMadame(HAND_PARAMS) {
- if (msg->action > 12) {
- switch (msg->action) {
- case 18:
- switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
- Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "627Vd", 0x23, 0, 0);
- break;
- case 2:
- send(kCharacterCond2, kCharacterMadame, 221683008, 0);
- startCycOtis(kCharacterCond2, "627Wd");
- softBlockAtDoor(kCharacterCond2, 35);
- break;
- case 3:
- softReleaseAtDoor(kCharacterCond2, 35);
- getCharacter(kCharacterCond2).characterPosition.location = 1;
- endGraphics(kCharacterCond2);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
- Cond2Call(&LogicManager::CONS_Cond2_MakeBed, 35, 51, 0, 0);
- break;
- case 4:
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
- Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "697Ad", 35, 0, 0);
- break;
- case 5:
- getCharacter(kCharacterCond2).characterPosition.location = 0;
-
- getCharacter(kCharacterCond2).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
- fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
- break;
- case 6:
- send(kCharacterCond2, kCharacterMadame, 122865568, 0);
- break;
- case 7:
- softReleaseAtDoor(kCharacterCond2, 35);
- getCharacter(kCharacterCond2).characterPosition.location = 1;
- endGraphics(kCharacterCond2);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
- Cond2Call(&LogicManager::CONS_Cond2_MakeBed, 35, 51, 0, 0);
- break;
- case 8:
- playDialog(kCharacterCond2, "JAC1013", -1, 0);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 9;
- Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "697Ad", 35, 0, 0);
- break;
- case 9:
- getCharacter(kCharacterCond2).characterPosition.location = 0;
- send(kCharacterCond2, kCharacterMadame, 123852928, 0);
+ switch (msg->action) {
+ case 0:
+ if (!getCharacterCurrentParams(kCharacterCond2)[0]) {
+ if (getCharacterCurrentParams(kCharacterCond2)[1] ||
+ (getCharacterCurrentParams(kCharacterCond2)[1] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterCond2)[1] >= _currentGameSessionTicks)
+ break;
- getCharacter(kCharacterCond2).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
- fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
- break;
- default:
- return;
+ getCharacterCurrentParams(kCharacterCond2)[1] = 0x7FFFFFFF;
}
- break;
- case 88652208:
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 7;
+
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
Cond2Call(&LogicManager::CONS_Cond2_DoEnterCorrOtis, "627Zd", 35, 5790, 6130);
- break;
- case 123199584:
- getCharacterCurrentParams(kCharacterCond2)[0] = 1;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 6;
- Cond2Call(&LogicManager::CONS_Cond2_DoDialog, "JAC1012", 0, 0, 0);
- break;
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 5790, 0, 0);
- } else if (msg->action == 0 && !getCharacterCurrentParams(kCharacterCond2)[0]) {
- if (getCharacterCurrentParams(kCharacterCond2)[1] ||
- (getCharacterCurrentParams(kCharacterCond2)[1] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterCond2)[1] >= _currentGameSessionTicks)
- return;
- getCharacterCurrentParams(kCharacterCond2)[1] = 0x7FFFFFFF;
- }
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
- Cond2Call(&LogicManager::CONS_Cond2_DoEnterCorrOtis, "627Zd", 35, 5790, 6130);
- }
-}
-
-void LogicManager::CONS_Cond2_MakeBedMonsieur(CONS_PARAMS) {
- CharacterCallParams *params = &getCharacter(kCharacterCond2).callParams[getCharacter(kCharacterCond2).currentCall];
- _engine->getMessageManager()->setMessageHandle(kCharacterCond2, &LogicManager::HAND_Cond2_MakeBedMonsieur);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall] = 27;
-
- params->clear();
-
- fedEx(kCharacterCond2, kCharacterCond2, 12, 0);
-}
-
-void LogicManager::HAND_Cond2_MakeBedMonsieur(HAND_PARAMS) {
- if (msg->action > 12) {
- switch (msg->action) {
- case 18:
- switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
- Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "627Mc", 34, 0, 0);
- break;
- case 2:
- send(kCharacterCond2, kCharacterMonsieur, 221683008, 0);
- startCycOtis(kCharacterCond2, "627Nc");
- softBlockAtDoor(kCharacterCond2, 34);
- break;
- case 3:
- softReleaseAtDoor(kCharacterCond2, 34);
- getCharacter(kCharacterCond2).characterPosition.location = 1;
- endGraphics(kCharacterCond2);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
- Cond2Call(&LogicManager::CONS_Cond2_MakeBed, 34, 50, 0, 0);
- break;
- case 4:
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
- Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "627Sc", 34, 0, 0);
- break;
- case 5:
- getCharacter(kCharacterCond2).characterPosition.location = 0;
- getCharacter(kCharacterCond2).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
- fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
- break;
- case 6:
- send(kCharacterCond2, kCharacterMonsieur, 122865568, 0);
- break;
- case 7:
- softReleaseAtDoor(kCharacterCond2, 34);
- getCharacter(kCharacterCond2).characterPosition.location = 1;
- endGraphics(kCharacterCond2);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
- Cond2Call(&LogicManager::CONS_Cond2_MakeBed, 34, 50, 0, 0);
- break;
- case 8:
- playDialog(kCharacterCond2, "JAC1013", -1, 0);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 9;
- Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "627Uc", 34, 0, 0);
- break;
- case 9:
- getCharacter(kCharacterCond2).characterPosition.location = 0;
- send(kCharacterCond2, kCharacterMonsieur, 123852928, 0);
-
- getCharacter(kCharacterCond2).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
- fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
- break;
- default:
- return;
- }
- break;
- case 88652208:
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 7;
- Cond2Call(&LogicManager::CONS_Cond2_DoEnterCorrOtis, "627Rc", 34, 6470, 6130);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
+ Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "627Vd", 0x23, 0, 0);
break;
- case 123199584:
- getCharacterCurrentParams(kCharacterCond2)[0] = 1;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 6;
- Cond2Call(&LogicManager::CONS_Cond2_DoDialog, "JAC1012", 0, 0, 0);
+ case 2:
+ send(kCharacterCond2, kCharacterMadame, 221683008, 0);
+ startCycOtis(kCharacterCond2, "627Wd");
+ softBlockAtDoor(kCharacterCond2, 35);
+ break;
+ case 3:
+ softReleaseAtDoor(kCharacterCond2, 35);
+ getCharacter(kCharacterCond2).characterPosition.location = 1;
+ endGraphics(kCharacterCond2);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
+ Cond2Call(&LogicManager::CONS_Cond2_MakeBed, 35, 51, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
+ Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "697Ad", 35, 0, 0);
+ break;
+ case 5:
+ getCharacter(kCharacterCond2).characterPosition.location = 0;
+
+ getCharacter(kCharacterCond2).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
+ fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
+ break;
+ case 6:
+ send(kCharacterCond2, kCharacterMadame, 122865568, 0);
+ break;
+ case 7:
+ softReleaseAtDoor(kCharacterCond2, 35);
+ getCharacter(kCharacterCond2).characterPosition.location = 1;
+ endGraphics(kCharacterCond2);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
+ Cond2Call(&LogicManager::CONS_Cond2_MakeBed, 35, 51, 0, 0);
+ break;
+ case 8:
+ playDialog(kCharacterCond2, "JAC1013", -1, 0);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 9;
+ Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "697Ad", 35, 0, 0);
+ break;
+ case 9:
+ getCharacter(kCharacterCond2).characterPosition.location = 0;
+ send(kCharacterCond2, kCharacterMadame, 123852928, 0);
+
+ getCharacter(kCharacterCond2).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
+ fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
+ break;
+ default:
break;
}
- } else if (msg->action == 12) {
+
+ break;
+ case 88652208:
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 7;
+ Cond2Call(&LogicManager::CONS_Cond2_DoEnterCorrOtis, "627Zd", 35, 5790, 6130);
+ break;
+ case 123199584:
+ getCharacterCurrentParams(kCharacterCond2)[0] = 1;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 6;
+ Cond2Call(&LogicManager::CONS_Cond2_DoDialog, "JAC1012", 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_Cond2_MakeBedMonsieur(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterCond2).callParams[getCharacter(kCharacterCond2).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, &LogicManager::HAND_Cond2_MakeBedMonsieur);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall] = 27;
+
+ params->clear();
+
+ fedEx(kCharacterCond2, kCharacterCond2, 12, 0);
+}
+
+void LogicManager::HAND_Cond2_MakeBedMonsieur(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (!getCharacterCurrentParams(kCharacterCond2)[0]) {
+ if (getCharacterCurrentParams(kCharacterCond2)[1] ||
+ (getCharacterCurrentParams(kCharacterCond2)[1] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterCond2)[1] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterCond2)[1] = 0x7FFFFFFF;
+ }
+
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
+ Cond2Call(&LogicManager::CONS_Cond2_DoEnterCorrOtis, "627Rc", 34, 6470, 6130);
+ }
+
+ break;
+ case 12:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 6470, 0, 0);
- } else if (msg->action == 0 && !getCharacterCurrentParams(kCharacterCond2)[0]) {
- if (getCharacterCurrentParams(kCharacterCond2)[1] ||
- (getCharacterCurrentParams(kCharacterCond2)[1] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterCond2)[1] >= _currentGameSessionTicks)
- return;
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
+ Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "627Mc", 34, 0, 0);
+ break;
+ case 2:
+ send(kCharacterCond2, kCharacterMonsieur, 221683008, 0);
+ startCycOtis(kCharacterCond2, "627Nc");
+ softBlockAtDoor(kCharacterCond2, 34);
+ break;
+ case 3:
+ softReleaseAtDoor(kCharacterCond2, 34);
+ getCharacter(kCharacterCond2).characterPosition.location = 1;
+ endGraphics(kCharacterCond2);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
+ Cond2Call(&LogicManager::CONS_Cond2_MakeBed, 34, 50, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
+ Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "627Sc", 34, 0, 0);
+ break;
+ case 5:
+ getCharacter(kCharacterCond2).characterPosition.location = 0;
+ getCharacter(kCharacterCond2).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
+ fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
+ break;
+ case 6:
+ send(kCharacterCond2, kCharacterMonsieur, 122865568, 0);
+ break;
+ case 7:
+ softReleaseAtDoor(kCharacterCond2, 34);
+ getCharacter(kCharacterCond2).characterPosition.location = 1;
+ endGraphics(kCharacterCond2);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
+ Cond2Call(&LogicManager::CONS_Cond2_MakeBed, 34, 50, 0, 0);
+ break;
+ case 8:
+ playDialog(kCharacterCond2, "JAC1013", -1, 0);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 9;
+ Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "627Uc", 34, 0, 0);
+ break;
+ case 9:
+ getCharacter(kCharacterCond2).characterPosition.location = 0;
+ send(kCharacterCond2, kCharacterMonsieur, 123852928, 0);
- getCharacterCurrentParams(kCharacterCond2)[1] = 0x7FFFFFFF;
+ getCharacter(kCharacterCond2).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
+ fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
+ break;
+ default:
+ break;
}
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
+ break;
+ case 88652208:
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 7;
Cond2Call(&LogicManager::CONS_Cond2_DoEnterCorrOtis, "627Rc", 34, 6470, 6130);
+ break;
+ case 123199584:
+ getCharacterCurrentParams(kCharacterCond2)[0] = 1;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 6;
+ Cond2Call(&LogicManager::CONS_Cond2_DoDialog, "JAC1012", 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1703,10 +1912,12 @@ void LogicManager::CONS_Cond2_MakeBedTatiana(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_MakeBedTatiana(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
- Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 0x1D4C, 0, 0);
- } else if (msg->action == 18) {
+ Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 7500, 0, 0);
+ break;
+ case 18:
switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
@@ -1716,7 +1927,7 @@ void LogicManager::HAND_Cond2_MakeBedTatiana(HAND_PARAMS) {
startCycOtis(kCharacterCond2, "627Wb");
softBlockAtDoor(kCharacterCond2, 33);
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
- Cond2Call(&LogicManager::CONS_Cond2_DoWait, 0x96, 0, 0, 0);
+ Cond2Call(&LogicManager::CONS_Cond2_DoWait, 150, 0, 0, 0);
break;
case 3:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
@@ -1741,8 +1952,12 @@ void LogicManager::HAND_Cond2_MakeBedTatiana(HAND_PARAMS) {
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1757,10 +1972,12 @@ void LogicManager::CONS_Cond2_MakeBedVassili(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_MakeBedVassili(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 8200, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
@@ -1795,8 +2012,12 @@ void LogicManager::HAND_Cond2_MakeBedVassili(HAND_PARAMS) {
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1813,7 +2034,8 @@ void LogicManager::CONS_Cond2_CathBuzzing(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_CathBuzzing(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
switch (getCharacterCurrentParams(kCharacterCond2)[0]) {
case 32:
getCharacterCurrentParams(kCharacterCond2)[1] = 8200;
@@ -1879,7 +2101,9 @@ void LogicManager::HAND_Cond2_CathBuzzing(HAND_PARAMS) {
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
break;
}
- } else if (msg->action == 18) {
+
+ break;
+ case 18:
switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
@@ -1892,6 +2116,7 @@ void LogicManager::HAND_Cond2_CathBuzzing(HAND_PARAMS) {
setDoor(getCharacterCurrentParams(kCharacterCond2)[0], 0, checkDoor(getCharacterCurrentParams(kCharacterCond2)[0]), 0, 0);
getCharacterCurrentParams(kCharacterCond2)[4] = 1;
}
+
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, (char *)&getCharacterCurrentParams(kCharacterCond2)[5], getCharacterCurrentParams(kCharacterCond2)[0], 0, 0);
break;
@@ -1911,6 +2136,7 @@ void LogicManager::HAND_Cond2_CathBuzzing(HAND_PARAMS) {
if (getCharacterCurrentParams(kCharacterCond2)[4]) {
setDoor(getCharacterCurrentParams(kCharacterCond2)[0], 0, checkDoor(getCharacterCurrentParams(kCharacterCond2)[0]), 10, 9);
}
+
softReleaseAtDoor(kCharacterCond2, getCharacterCurrentParams(kCharacterCond2)[0]);
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 0x7D0, 0, 0);
@@ -1925,8 +2151,12 @@ void LogicManager::HAND_Cond2_CathBuzzing(HAND_PARAMS) {
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1966,6 +2196,9 @@ void LogicManager::HAND_Cond2_CathRattling(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
}
+
+ break;
+ default:
break;
}
}
@@ -1981,10 +2214,12 @@ void LogicManager::CONS_Cond2_BathroomTrip(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_BathroomTrip(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_GetUp, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
@@ -2009,8 +2244,12 @@ void LogicManager::HAND_Cond2_BathroomTrip(HAND_PARAMS) {
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -2025,7 +2264,8 @@ void LogicManager::CONS_Cond2_DoPending(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_DoPending(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (getCharacterParams(kCharacterCond2, 8)[5] || getCharacterParams(kCharacterCond2, 8)[6] || getCharacterParams(kCharacterCond2, 8)[2] || getCharacterParams(kCharacterCond2, 8)[4] || getCharacterParams(kCharacterCond2, 8)[3] || getCharacterParams(kCharacterCond2, 8)[17] || getCharacterParams(kCharacterCond2, 8)[9] || getCharacterParams(kCharacterCond2, 8)[14]) {
getCharacterParams(kCharacterCond2, 8)[21] = 1;
if (getCharacterParams(kCharacterCond2, 8)[2] || getCharacterParams(kCharacterCond2, 8)[4] || getCharacterParams(kCharacterCond2, 8)[3]) {
@@ -2040,31 +2280,36 @@ void LogicManager::HAND_Cond2_DoPending(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
}
- } else if (msg->action == 18) {
+
+ break;
+ case 18:
switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
case 1:
getCharacterParams(kCharacterCond2, 8)[16] = 1;
- if (!getCharacterParams(kCharacterCond2, 8)[2])
- goto LABEL_25;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
- Cond2Call(&LogicManager::CONS_Cond2_Listen, 9, 0, 0, 0);
- break;
+ if (getCharacterParams(kCharacterCond2, 8)[2]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
+ Cond2Call(&LogicManager::CONS_Cond2_Listen, 9, 0, 0, 0);
+ break;
+ }
+
+ // fall through
case 2:
- LABEL_25:
- if (!getCharacterParams(kCharacterCond2, 8)[4])
- goto LABEL_27;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
- Cond2Call(&LogicManager::CONS_Cond2_Listen, 3, 0, 0, 0);
- break;
+ if (getCharacterParams(kCharacterCond2, 8)[4]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
+ Cond2Call(&LogicManager::CONS_Cond2_Listen, 3, 0, 0, 0);
+ break;
+ }
+
+ // fall through
case 3:
- LABEL_27:
- if (!getCharacterParams(kCharacterCond2, 8)[3])
- goto LABEL_29;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
- Cond2Call(&LogicManager::CONS_Cond2_Listen, 21, 0, 0, 0);
- break;
+ if (getCharacterParams(kCharacterCond2, 8)[3]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
+ Cond2Call(&LogicManager::CONS_Cond2_Listen, 21, 0, 0, 0);
+ break;
+ }
+
+ // fall through
case 4:
- LABEL_29:
getCharacterParams(kCharacterCond2, 8)[21] = 0;
getCharacter(kCharacterCond2).currentCall--;
@@ -2077,35 +2322,38 @@ void LogicManager::HAND_Cond2_DoPending(HAND_PARAMS) {
Cond2Call(&LogicManager::CONS_Cond2_DoWait, 75, 0, 0, 0);
break;
case 6:
- if (!getCharacterParams(kCharacterCond2, 8)[5] && !getCharacterParams(kCharacterCond2, 8)[6]) {
- goto LABEL_30;
+ if (getCharacterParams(kCharacterCond2, 8)[5] || getCharacterParams(kCharacterCond2, 8)[6]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 7;
+ Cond2Call(&LogicManager::CONS_Cond2_RespondVassili, 0, 0, 0, 0);
+ break;
}
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 7;
- Cond2Call(&LogicManager::CONS_Cond2_RespondVassili, 0, 0, 0, 0);
- break;
+
+ // fall through
case 7:
- LABEL_30:
- if (!getCharacterParams(kCharacterCond2, 8)[17])
- goto LABEL_32;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
- Cond2Call(&LogicManager::CONS_Cond2_AfterPolice, 0, 0, 0, 0);
- break;
+ if (getCharacterParams(kCharacterCond2, 8)[17]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
+ Cond2Call(&LogicManager::CONS_Cond2_AfterPolice, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
case 8:
- LABEL_32:
- if (!getCharacterParams(kCharacterCond2, 8)[9])
- goto LABEL_34;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 9;
- Cond2Call(&LogicManager::CONS_Cond2_ServiceAnna, 0, 0, 0, 0);
- break;
+ if (getCharacterParams(kCharacterCond2, 8)[9]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 9;
+ Cond2Call(&LogicManager::CONS_Cond2_ServiceAnna, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
case 9:
- LABEL_34:
- if (!getCharacterParams(kCharacterCond2, 8)[14])
- goto LABEL_36;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 10;
- Cond2Call(&LogicManager::CONS_Cond2_TakeMaxBack, 0, 0, 0, 0);
- break;
+ if (getCharacterParams(kCharacterCond2, 8)[14]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 10;
+ Cond2Call(&LogicManager::CONS_Cond2_TakeMaxBack, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
case 10:
- LABEL_36:
getCharacterParams(kCharacterCond2, 8)[21] = 0;
getCharacter(kCharacterCond2).currentCall--;
@@ -2113,8 +2361,12 @@ void LogicManager::HAND_Cond2_DoPending(HAND_PARAMS) {
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -2131,10 +2383,12 @@ void LogicManager::CONS_Cond2_TakeMaxBack(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_TakeMaxBack(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_GetUp, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
@@ -2143,12 +2397,17 @@ void LogicManager::HAND_Cond2_TakeMaxBack(HAND_PARAMS) {
case 2:
if (!getCharacterCurrentParams(kCharacterCond2)[0]) {
playDialog(kCharacterCond2, "Ann3124", -1, 0);
- goto LABEL_14;
+ getCharacterParams(kCharacterCond2, 8)[14] = 0;
+ getCharacterParams(kCharacterCond2, 8)[11] = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 7;
+ Cond2Call(&LogicManager::CONS_Cond2_ReturnMax, getCharacterCurrentParams(kCharacterCond2)[0], 0, 0, 0);
+ } else {
+ startCycOtis(kCharacterCond2, "627Vf");
+ softBlockAtDoor(kCharacterCond2, 37);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
+ Cond2Call(&LogicManager::CONS_Cond2_DoDialog, "LIB012", 0, 0, 0);
}
- startCycOtis(kCharacterCond2, "627Vf");
- softBlockAtDoor(kCharacterCond2, 37);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
- Cond2Call(&LogicManager::CONS_Cond2_DoDialog, "LIB012", 0, 0, 0);
+
break;
case 3:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
@@ -2165,7 +2424,6 @@ void LogicManager::HAND_Cond2_TakeMaxBack(HAND_PARAMS) {
break;
case 6:
softReleaseAtDoor(kCharacterCond2, 37);
- LABEL_14:
getCharacterParams(kCharacterCond2, 8)[14] = 0;
getCharacterParams(kCharacterCond2, 8)[11] = 0;
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 7;
@@ -2177,12 +2435,16 @@ void LogicManager::HAND_Cond2_TakeMaxBack(HAND_PARAMS) {
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
break;
default:
- return;
+ break;
}
- }
-}
-void LogicManager::CONS_Cond2_ReturnMax(CONS_PARAMS) {
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_Cond2_ReturnMax(CONS_PARAMS) {
CharacterCallParams *params = &getCharacter(kCharacterCond2).callParams[getCharacter(kCharacterCond2).currentCall];
_engine->getMessageManager()->setMessageHandle(kCharacterCond2, &LogicManager::HAND_Cond2_ReturnMax);
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall] = 35;
@@ -2195,57 +2457,68 @@ void LogicManager::CONS_Cond2_ReturnMax(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_ReturnMax(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- if (getCharacterCurrentParams(kCharacterCond2)[0])
- send(kCharacterCond2, kCharacterAnna, 156049968, 0);
- send(kCharacterCond2, kCharacterMax, 122358304, 0);
- getCharacter(kCharacterCond2).clothes = 1;
- getCharacter(kCharacterCond2).characterPosition.position = 4370;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
- Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 8200, 0, 0);
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
- case 1:
- if (!whoRunningDialog(kCharacterCond2))
- playDialog(kCharacterCond2, "Ann3124", -1, 0);
- if (getCharacterCurrentParams(kCharacterCond2)[0])
- send(kCharacterCond2, kCharacterAnna, 123733488, 0);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
- Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 9460, 0, 0);
- break;
- case 2:
- endGraphics(kCharacterCond2);
- break;
- case 3:
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
- Cond2Call(&LogicManager::CONS_Cond2_SitDown, 0, 0, 0, 0);
- break;
- case 4:
- getCharacter(kCharacterCond2).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
- fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
- break;
- default:
- return;
- }
- }
- } else {
+ switch (msg->action) {
+ case 0:
if (checkLoc(kCharacterCath, kCarBaggage)) {
playNIS(kEventCoudertBaggageCar);
playDialog(0, "BUMP", -1, 0);
bumpCath(kCarRestaurant, 65, 255);
}
+
if (getCharacterCurrentParams(kCharacterCond2)[1] ||
(getCharacterCurrentParams(kCharacterCond2)[1] = _gameTime + 2700, _gameTime != -2700)) {
if (getCharacterCurrentParams(kCharacterCond2)[1] >= _gameTime)
- return;
+ break;
+
getCharacterCurrentParams(kCharacterCond2)[1] = 0x7FFFFFFF;
}
+
send(kCharacterCond2, kCharacterMax, 135204609, 0);
getCharacter(kCharacterCond2).clothes = 0;
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 2000, 0, 0);
+ break;
+ case 12:
+ if (getCharacterCurrentParams(kCharacterCond2)[0])
+ send(kCharacterCond2, kCharacterAnna, 156049968, 0);
+
+ send(kCharacterCond2, kCharacterMax, 122358304, 0);
+ getCharacter(kCharacterCond2).clothes = 1;
+ getCharacter(kCharacterCond2).characterPosition.position = 4370;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
+ Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 8200, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
+ case 1:
+ if (!whoRunningDialog(kCharacterCond2))
+ playDialog(kCharacterCond2, "Ann3124", -1, 0);
+
+ if (getCharacterCurrentParams(kCharacterCond2)[0])
+ send(kCharacterCond2, kCharacterAnna, 123733488, 0);
+
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
+ Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 9460, 0, 0);
+ break;
+ case 2:
+ endGraphics(kCharacterCond2);
+ break;
+ case 3:
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
+ Cond2Call(&LogicManager::CONS_Cond2_SitDown, 0, 0, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterCond2).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
+ fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -2260,37 +2533,47 @@ void LogicManager::CONS_Cond2_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_Birth(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- autoMessage(kCharacterCond2, 292048641, 7);
- autoMessage(kCharacterCond2, 326348944, 8);
- autoMessage(kCharacterCond2, 171394341, 2);
- autoMessage(kCharacterCond2, 154005632, 4);
- autoMessage(kCharacterCond2, 169557824, 3);
- autoMessage(kCharacterCond2, 226031488, 5);
- autoMessage(kCharacterCond2, 339669520, 6);
- autoMessage(kCharacterCond2, 189750912, 10);
- autoMessage(kCharacterCond2, 185737168, 12);
- autoMessage(kCharacterCond2, 185671840, 13);
- autoMessage(kCharacterCond2, 205033696, 15);
- autoMessage(kCharacterCond2, 157026693, 14);
- autoMessage(kCharacterCond2, 189026624, 11);
- autoMessage(kCharacterCond2, 168254872, 17);
- autoMessage(kCharacterCond2, 201431954, 18);
- autoMessage(kCharacterCond2, 188570113, 19);
- getCharacter(kCharacterCond2).characterPosition.position = 1500;
- getCharacter(kCharacterCond2).characterPosition.location = 0;
- getCharacter(kCharacterCond2).characterPosition.car = kCarRedSleeping;
- getCharacterParams(kCharacterCond2, 8)[1] = 1;
- getCharacterParams(kCharacterCond2, 8)[0] = 0;
- setModel(111, 1);
- } else if (msg->action == 18 && getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 1) {
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterCond2)[0]) {
+ getCharacterCurrentParams(kCharacterCond2)[0] = 1;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
+ Cond2Call(&LogicManager::CONS_Cond2_SitDown, 0, 0, 0, 0);
+ }
+
+ break;
+ case 12:
+ autoMessage(kCharacterCond2, 292048641, 7);
+ autoMessage(kCharacterCond2, 326348944, 8);
+ autoMessage(kCharacterCond2, 171394341, 2);
+ autoMessage(kCharacterCond2, 154005632, 4);
+ autoMessage(kCharacterCond2, 169557824, 3);
+ autoMessage(kCharacterCond2, 226031488, 5);
+ autoMessage(kCharacterCond2, 339669520, 6);
+ autoMessage(kCharacterCond2, 189750912, 10);
+ autoMessage(kCharacterCond2, 185737168, 12);
+ autoMessage(kCharacterCond2, 185671840, 13);
+ autoMessage(kCharacterCond2, 205033696, 15);
+ autoMessage(kCharacterCond2, 157026693, 14);
+ autoMessage(kCharacterCond2, 189026624, 11);
+ autoMessage(kCharacterCond2, 168254872, 17);
+ autoMessage(kCharacterCond2, 201431954, 18);
+ autoMessage(kCharacterCond2, 188570113, 19);
+ getCharacter(kCharacterCond2).characterPosition.position = 1500;
+ getCharacter(kCharacterCond2).characterPosition.location = 0;
+ getCharacter(kCharacterCond2).characterPosition.car = kCarRedSleeping;
+ getCharacterParams(kCharacterCond2, 8)[1] = 1;
+ getCharacterParams(kCharacterCond2, 8)[0] = 0;
+ setModel(111, 1);
+ break;
+ case 18:
+ if (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 1) {
CONS_Cond2_Sitting(0, 0, 0, 0);
}
- } else if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterCond2)[0]) {
- getCharacterCurrentParams(kCharacterCond2)[0] = 1;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
- Cond2Call(&LogicManager::CONS_Cond2_SitDown, 0, 0, 0, 0);
+
+ break;
+ default:
+ break;
}
}
@@ -2305,19 +2588,22 @@ void LogicManager::CONS_Cond2_RespondVassili(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_RespondVassili(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (whoRunningDialog(kCharacterCond2))
fadeDialog(kCharacterCond2);
+
if (getCharacterParams(kCharacterCond2, 8)[6]) {
getCharacter(kCharacterCond2).characterPosition.position = 8200;
- LABEL_8:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
Cond2Call(&LogicManager::CONS_Cond2_DoEnterCorrOtis, "698Ha", 32, 8200, 7850);
} else {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_GetUp, 0, 0, 0, 0);
}
- } else if (msg->action == 18) {
+
+ break;
+ case 18:
switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
@@ -2329,16 +2615,22 @@ void LogicManager::HAND_Cond2_RespondVassili(HAND_PARAMS) {
Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 8200, 0, 0);
break;
case 3:
- goto LABEL_8;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
+ Cond2Call(&LogicManager::CONS_Cond2_DoEnterCorrOtis, "698Ha", 32, 8200, 7850);
+ break;
case 4:
- setDoor(32, 0, 2, 255, 255);
+ setDoor(32, kCharacterCath, 2, 255, 255);
getCharacter(kCharacterCond2).characterPosition.location = 1;
endGraphics(kCharacterCond2);
CONS_Cond2_AtSeizure(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -2368,14 +2660,17 @@ void LogicManager::HAND_Cond2_AtSeizure(HAND_PARAMS) {
} else if (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 2) {
CONS_Cond2_Sitting(0, 0, 0, 0);
}
+
break;
case 191477936:
getCharacter(kCharacterCond2).characterPosition.location = 0;
getCharacter(kCharacterCond2).characterPosition.position = 4070;
- setDoor(32, 0, 0, 10, 9);
+ setDoor(32, kCharacterCath, 0, 10, 9);
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 2000, 0, 0);
break;
+ default:
+ break;
}
}
@@ -2390,10 +2685,12 @@ void LogicManager::CONS_Cond2_AfterPolice(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_AfterPolice(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_DoDialog, "LIB070", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
@@ -2447,8 +2744,12 @@ void LogicManager::HAND_Cond2_AfterPolice(HAND_PARAMS) {
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -2463,182 +2764,230 @@ void LogicManager::CONS_Cond2_Sitting(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_Sitting(HAND_PARAMS) {
- if (msg->action > 11) {
- if (msg->action > 17) {
- if (msg->action > 168253822) {
- if (msg->action == 225358684) {
- if (!getCharacterParams(kCharacterCond2, 8)[0]) {
- getCharacter(kCharacterCond2).inventoryItem = 0;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 16;
- Cond2Call(&LogicManager::CONS_Cond2_CathBuzzing, msg->param, 0, 0, 0);
- }
- } else if (msg->action == 225932896) {
- if (!getCharacterParams(kCharacterCond2, 8)[16] && !getCharacterParams(kCharacterCond2, 8)[0]) {
- send(kCharacterCond2, kCharacterFrancois, 205346192, 0);
- }
- } else if (msg->action == 305159806 && !getCharacterParams(kCharacterCond2, 8)[16] && !getCharacterParams(kCharacterCond2, 8)[0]) {
- getCharacter(kCharacterCond2).inventoryItem = 0;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 17;
- Cond2Call(&LogicManager::CONS_Cond2_CathRattling, msg->param, 0, 0, 0);
- }
- } else if (msg->action == 168253822) {
- if (!getCharacterParams(kCharacterCond2, 8)[16] && !getCharacterParams(kCharacterCond2, 8)[0]) {
- getCharacter(kCharacterCond2).inventoryItem = 0;
- playDialog(kCharacterCond2, "JAC1120", -1, 0);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 14;
- Cond2Call(&LogicManager::CONS_Cond2_DoSeqOtis, "697D", 0, 0, 0);
- }
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
- case 1:
- playNIS(kEventCoudertBloodJacket);
- endGame(0, 1, 55, 1);
- break;
- case 4:
- goto LABEL_70;
- case 5:
- goto LABEL_72;
- case 6:
- goto LABEL_77;
- case 7:
- goto LABEL_79;
- case 8:
- goto LABEL_81;
- case 9:
- goto LABEL_83;
- case 10:
- getCharacterCurrentParams(kCharacterCond2)[0] = 1;
- goto LABEL_44;
- case 11:
- playNIS(kEventCoudertAskTylerCompartment);
- if (getCharacterParams(kCharacterCond2, 8)[1])
- startSeqOtis(kCharacterCond2, "627A");
- else
- startSeqOtis(kCharacterCond2, "627D");
- takeItem(kItem5);
- getCharacterParams(kCharacterCond2, 8)[0] = 0;
- bumpCath(kCarRedSleeping, 25, 255);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 12;
- Cond2Call(&LogicManager::CONS_Cond2_FinishSeqOtis, 0, 0, 0, 0);
- break;
- case 12:
- if (getCharacterParams(kCharacterCond2, 8)[1])
- startCycOtis(kCharacterCond2, "627B");
- else
- startCycOtis(kCharacterCond2, "627E");
- break;
- case 14:
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 15;
- Cond2Call(&LogicManager::CONS_Cond2_SitDown, 0, 0, 0, 0);
- break;
- default:
- return;
- }
- }
- } else if (msg->action == 17) {
- if (!getCharacterParams(kCharacterCond2, 8)[16] &&
- !getCharacterParams(kCharacterCond2, 8)[0] &&
- (checkCathDir(kCarRedSleeping, 1) || checkCathDir(kCarRedSleeping, 23))) {
- if (_gameProgress[kProgressJacket] == 1) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
- Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventCoudertBloodJacket, 0, 0);
- } else {
- if (checkCathDir(kCarRedSleeping, 1))
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
- else
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
- Cond2Call(&LogicManager::CONS_Cond2_Passing, 1, 0, 0, 0);
- }
+ switch (msg->action) {
+ case 0:
+ {
+ if (getCharacterParams(kCharacterCond2, 8)[18]) {
+ getCharacterParams(kCharacterCond2, 8)[17] = 0;
+ getCharacterParams(kCharacterCond2, 8)[2] = 0;
+ getCharacterParams(kCharacterCond2, 8)[4] = 0;
+ getCharacterParams(kCharacterCond2, 8)[3] = 0;
+ getCharacterParams(kCharacterCond2, 8)[16] = 0;
+ getCharacterParams(kCharacterCond2, 8)[0] = 1;
+ getCharacterParams(kCharacterCond2, 8)[7] = 0;
+ getCharacterParams(kCharacterCond2, 8)[8] = 0;
+ startCycOtis(kCharacterCond2, "697F");
+ getCharacterCurrentParams(kCharacterCond2)[0] = 1;
+ getCharacterCurrentParams(kCharacterCond2)[1] = 1;
+ getCharacterParams(kCharacterCond2, 8)[18] = 0;
+ }
+
+ if (_gameProgress[kProgressEventFoundCorpse] || _gameEvents[kEventCoudertAskTylerCompartment]) {
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ } else {
+ getCharacter(kCharacterCond2).inventoryItem = 0x80;
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[7]) {
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
+ Cond2Call(&LogicManager::CONS_Cond2_TatianaLockUnlockMyComp, 1, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[8]) {
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
+ Cond2Call(&LogicManager::CONS_Cond2_TatianaLockUnlockMyComp, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[5] || getCharacterParams(kCharacterCond2, 8)[6]) {
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ CONS_Cond2_RespondVassili(0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[2]) {
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 6;
+ Cond2Call(&LogicManager::CONS_Cond2_Listen, 9, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[4]) {
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 7;
+ Cond2Call(&LogicManager::CONS_Cond2_Listen, 3, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[3]) {
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
+ Cond2Call(&LogicManager::CONS_Cond2_Listen, 21, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[17]) {
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 9;
+ Cond2Call(&LogicManager::CONS_Cond2_AfterPolice, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[0] && !whoRunningDialog(kCharacterCond2)) {
+ if (rnd(2) == 0) {
+ playDialog(kCharacterCond2, "JAC1065A", -1, 0);
+ } else {
+ playDialog(kCharacterCond2, "JAC1065", -1, 0);
}
- } else if (msg->action == 12) {
- getCharacter(kCharacterCond2).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterCond2).characterPosition.position = 1500;
- getCharacter(kCharacterCond2).characterPosition.location = 0;
- takeItem(kItem5);
}
- } else {
- if (msg->action != 11) {
- if (msg->action) {
- if (msg->action == 1) {
- getCharacter(kCharacterCond2).inventoryItem = 0;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 11;
- Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventCoudertAskTylerCompartment, 0, 0);
+
+ if (_gameTime > 1107000 && !getCharacterCurrentParams(kCharacterCond2)[0] && !_gameEvents[84]) {
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 10;
+ Cond2Call(&LogicManager::CONS_Cond2_MakeAllBeds, 0, 0, 0, 0);
+ break;
+ }
+
+ bool skip = false; // Horrible way to unroll a goto...
+
+ if (_gameTime > 1189800 && !getCharacterParams(kCharacterCond2, 8)[0] && !getCharacterParams(kCharacterCond2, 8)[16]) {
+ if (getCharacterCurrentParams(kCharacterCond2)[2] ||
+ (getCharacterCurrentParams(kCharacterCond2)[2] = _gameTime + 2700, _gameTime != -2700)) {
+ if (getCharacterCurrentParams(kCharacterCond2)[2] >= _gameTime) {
+ skip = true;
}
- return;
+
+ if (!skip)
+ getCharacterCurrentParams(kCharacterCond2)[2] = 0x7FFFFFFF;
}
- if (getCharacterParams(kCharacterCond2, 8)[18]) {
- getCharacterParams(kCharacterCond2, 8)[17] = 0;
- getCharacterParams(kCharacterCond2, 8)[2] = 0;
- getCharacterParams(kCharacterCond2, 8)[4] = 0;
- getCharacterParams(kCharacterCond2, 8)[3] = 0;
- getCharacterParams(kCharacterCond2, 8)[16] = 0;
+ if (!skip) {
+ getCharacterParams(kCharacterCond2, 8)[1] = 0;
getCharacterParams(kCharacterCond2, 8)[0] = 1;
- getCharacterParams(kCharacterCond2, 8)[7] = 0;
- getCharacterParams(kCharacterCond2, 8)[8] = 0;
startCycOtis(kCharacterCond2, "697F");
- getCharacterCurrentParams(kCharacterCond2)[0] = 1;
- getCharacterCurrentParams(kCharacterCond2)[1] = 1;
- getCharacterParams(kCharacterCond2, 8)[18] = 0;
- }
-
- if (_gameProgress[kProgressEventFoundCorpse] || _gameEvents[kEventCoudertAskTylerCompartment]) {
- getCharacter(kCharacterCond2).inventoryItem = 0;
- } else {
- getCharacter(kCharacterCond2).inventoryItem = 0x80;
+ getCharacterCurrentParams(kCharacterCond2)[2] = 0;
}
+ }
- if (getCharacterParams(kCharacterCond2, 8)[7]) {
- getCharacter(kCharacterCond2).inventoryItem = 0;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
- Cond2Call(&LogicManager::CONS_Cond2_TatianaLockUnlockMyComp, 1, 0, 0, 0);
- return;
- }
- LABEL_70:
- if (getCharacterParams(kCharacterCond2, 8)[8]) {
- getCharacter(kCharacterCond2).inventoryItem = 0;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
- Cond2Call(&LogicManager::CONS_Cond2_TatianaLockUnlockMyComp, 0, 0, 0, 0);
- return;
- }
- LABEL_72:
- if (getCharacterParams(kCharacterCond2, 8)[5] || getCharacterParams(kCharacterCond2, 8)[6]) {
- getCharacter(kCharacterCond2).inventoryItem = 0;
- CONS_Cond2_RespondVassili(0, 0, 0, 0);
- return;
- }
- if (getCharacterParams(kCharacterCond2, 8)[2]) {
- getCharacter(kCharacterCond2).inventoryItem = 0;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 6;
- Cond2Call(&LogicManager::CONS_Cond2_Listen, 9, 0, 0, 0);
- return;
- }
- LABEL_77:
- if (getCharacterParams(kCharacterCond2, 8)[4]) {
- getCharacter(kCharacterCond2).inventoryItem = 0;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 7;
- Cond2Call(&LogicManager::CONS_Cond2_Listen, 3, 0, 0, 0);
- return;
+ if (getCharacterParams(kCharacterCond2, 8)[1]) {
+ if (_gameTime > 1107000 && !getCharacterCurrentParams(kCharacterCond2)[3]) {
+ getCharacterCurrentParams(kCharacterCond2)[3] = 1;
+ setModel(111, 2);
}
- LABEL_79:
- if (getCharacterParams(kCharacterCond2, 8)[3]) {
- getCharacter(kCharacterCond2).inventoryItem = 0;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
- Cond2Call(&LogicManager::CONS_Cond2_Listen, 21, 0, 0, 0);
- return;
+ if (_gameTime > 1161000 && !getCharacterCurrentParams(kCharacterCond2)[4]) {
+ getCharacterCurrentParams(kCharacterCond2)[4] = 1;
+ setModel(111, 3);
}
- LABEL_81:
- if (getCharacterParams(kCharacterCond2, 8)[17]) {
- getCharacter(kCharacterCond2).inventoryItem = 0;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 9;
- Cond2Call(&LogicManager::CONS_Cond2_AfterPolice, 0, 0, 0, 0);
- return;
+ if (_gameTime > 1206000 && !getCharacterCurrentParams(kCharacterCond2)[5]) {
+ getCharacterCurrentParams(kCharacterCond2)[5] = 1;
+ setModel(111, 4);
}
- LABEL_83:
- if (getCharacterParams(kCharacterCond2, 8)[0] && !whoRunningDialog(kCharacterCond2)) {
- if (rnd(2) == 0) {
- playDialog(kCharacterCond2, "JAC1065A", -1, 0);
- } else {
+ }
+
+ break;
+ }
+ case 1:
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 11;
+ Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventCoudertAskTylerCompartment, 0, 0);
+ break;
+ case 11:
+ if (!getCharacterParams(kCharacterCond2, 8)[0] && !getCharacterParams(kCharacterCond2, 8)[16]) {
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 13;
+ Cond2Call(&LogicManager::CONS_Cond2_Passing, msg->param, msg->sender, 0, 0);
+ }
+
+ break;
+ case 12:
+ getCharacter(kCharacterCond2).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterCond2).characterPosition.position = 1500;
+ getCharacter(kCharacterCond2).characterPosition.location = 0;
+ takeItem(kItem5);
+ break;
+ case 17:
+ if (!getCharacterParams(kCharacterCond2, 8)[16] &&
+ !getCharacterParams(kCharacterCond2, 8)[0] &&
+ (checkCathDir(kCarRedSleeping, 1) || checkCathDir(kCarRedSleeping, 23))) {
+ if (_gameProgress[kProgressJacket] == 1) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
+ Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventCoudertBloodJacket, 0, 0);
+ } else {
+ if (checkCathDir(kCarRedSleeping, 1))
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
+ else
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
+
+ Cond2Call(&LogicManager::CONS_Cond2_Passing, 1, 0, 0, 0);
+ }
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
+ case 1:
+ playNIS(kEventCoudertBloodJacket);
+ endGame(0, 1, 55, true);
+ break;
+ case 4:
+ if (getCharacterParams(kCharacterCond2, 8)[8]) {
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
+ Cond2Call(&LogicManager::CONS_Cond2_TatianaLockUnlockMyComp, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 5:
+ if (getCharacterParams(kCharacterCond2, 8)[5] || getCharacterParams(kCharacterCond2, 8)[6]) {
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ CONS_Cond2_RespondVassili(0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[2]) {
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 6;
+ Cond2Call(&LogicManager::CONS_Cond2_Listen, 9, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 6:
+ if (getCharacterParams(kCharacterCond2, 8)[4]) {
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 7;
+ Cond2Call(&LogicManager::CONS_Cond2_Listen, 3, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 7:
+ if (getCharacterParams(kCharacterCond2, 8)[3]) {
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
+ Cond2Call(&LogicManager::CONS_Cond2_Listen, 21, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 8:
+ if (getCharacterParams(kCharacterCond2, 8)[17]) {
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 9;
+ Cond2Call(&LogicManager::CONS_Cond2_AfterPolice, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 9:
+ if (getCharacterParams(kCharacterCond2, 8)[0] && !whoRunningDialog(kCharacterCond2)) {
+ if (rnd(2) == 0) {
+ playDialog(kCharacterCond2, "JAC1065A", -1, 0);
+ } else {
playDialog(kCharacterCond2, "JAC1065", -1, 0);
}
}
@@ -2647,22 +2996,37 @@ void LogicManager::HAND_Cond2_Sitting(HAND_PARAMS) {
getCharacter(kCharacterCond2).inventoryItem = 0;
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 10;
Cond2Call(&LogicManager::CONS_Cond2_MakeAllBeds, 0, 0, 0, 0);
- return;
+ break;
}
- LABEL_44:
- if (_gameTime <= 1189800 || getCharacterParams(kCharacterCond2, 8)[0] || getCharacterParams(kCharacterCond2, 8)[16])
- goto LABEL_52;
- if (getCharacterCurrentParams(kCharacterCond2)[2] ||
- (getCharacterCurrentParams(kCharacterCond2)[2] = _gameTime + 2700, _gameTime != -2700)) {
- if (getCharacterCurrentParams(kCharacterCond2)[2] >= _gameTime)
- goto LABEL_52;
- getCharacterCurrentParams(kCharacterCond2)[2] = 0x7FFFFFFF;
+
+ // fall through
+ case 10:
+ {
+ if (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 10) {
+ getCharacterCurrentParams(kCharacterCond2)[0] = 1;
}
- getCharacterParams(kCharacterCond2, 8)[1] = 0;
- getCharacterParams(kCharacterCond2, 8)[0] = 1;
- startCycOtis(kCharacterCond2, "697F");
- getCharacterCurrentParams(kCharacterCond2)[2] = 0;
- LABEL_52:
+
+ bool skip = false; // Horrible way to unroll a goto...
+
+ if (_gameTime > 1189800 && !getCharacterParams(kCharacterCond2, 8)[0] && !getCharacterParams(kCharacterCond2, 8)[16]) {
+ if (getCharacterCurrentParams(kCharacterCond2)[2] ||
+ (getCharacterCurrentParams(kCharacterCond2)[2] = _gameTime + 2700, _gameTime != -2700)) {
+ if (getCharacterCurrentParams(kCharacterCond2)[2] >= _gameTime) {
+ skip = true;
+ }
+
+ if (!skip)
+ getCharacterCurrentParams(kCharacterCond2)[2] = 0x7FFFFFFF;
+ }
+
+ if (!skip) {
+ getCharacterParams(kCharacterCond2, 8)[1] = 0;
+ getCharacterParams(kCharacterCond2, 8)[0] = 1;
+ startCycOtis(kCharacterCond2, "697F");
+ getCharacterCurrentParams(kCharacterCond2)[2] = 0;
+ }
+ }
+
if (getCharacterParams(kCharacterCond2, 8)[1]) {
if (_gameTime > 1107000 && !getCharacterCurrentParams(kCharacterCond2)[3]) {
getCharacterCurrentParams(kCharacterCond2)[3] = 1;
@@ -2677,13 +3041,72 @@ void LogicManager::HAND_Cond2_Sitting(HAND_PARAMS) {
setModel(111, 4);
}
}
- return;
+
+ break;
}
- if (!getCharacterParams(kCharacterCond2, 8)[0] && !getCharacterParams(kCharacterCond2, 8)[16]) {
+ case 11:
+ playNIS(kEventCoudertAskTylerCompartment);
+
+ if (getCharacterParams(kCharacterCond2, 8)[1])
+ startSeqOtis(kCharacterCond2, "627A");
+ else
+ startSeqOtis(kCharacterCond2, "627D");
+
+ takeItem(kItem5);
+ getCharacterParams(kCharacterCond2, 8)[0] = 0;
+ bumpCath(kCarRedSleeping, 25, 255);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 12;
+ Cond2Call(&LogicManager::CONS_Cond2_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 12:
+ if (getCharacterParams(kCharacterCond2, 8)[1])
+ startCycOtis(kCharacterCond2, "627B");
+ else
+ startCycOtis(kCharacterCond2, "627E");
+
+ break;
+ case 14:
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 15;
+ Cond2Call(&LogicManager::CONS_Cond2_SitDown, 0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 168253822:
+ if (!getCharacterParams(kCharacterCond2, 8)[16] && !getCharacterParams(kCharacterCond2, 8)[0]) {
getCharacter(kCharacterCond2).inventoryItem = 0;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 13;
- Cond2Call(&LogicManager::CONS_Cond2_Passing, msg->param, msg->sender, 0, 0);
+ playDialog(kCharacterCond2, "JAC1120", -1, 0);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 14;
+ Cond2Call(&LogicManager::CONS_Cond2_DoSeqOtis, "697D", 0, 0, 0);
+ }
+
+ break;
+ case 225932896:
+ if (!getCharacterParams(kCharacterCond2, 8)[16] && !getCharacterParams(kCharacterCond2, 8)[0]) {
+ send(kCharacterCond2, kCharacterFrancois, 205346192, 0);
+ }
+
+ break;
+ case 225358684:
+ if (!getCharacterParams(kCharacterCond2, 8)[0]) {
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 16;
+ Cond2Call(&LogicManager::CONS_Cond2_CathBuzzing, msg->param, 0, 0, 0);
+ }
+
+ break;
+ case 305159806:
+ if (!getCharacterParams(kCharacterCond2, 8)[16] && !getCharacterParams(kCharacterCond2, 8)[0]) {
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 17;
+ Cond2Call(&LogicManager::CONS_Cond2_CathRattling, msg->param, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -2698,10 +3121,12 @@ void LogicManager::CONS_Cond2_MakeAllBeds(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_MakeAllBeds(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_GetUp, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
@@ -2780,8 +3205,12 @@ void LogicManager::HAND_Cond2_MakeAllBeds(HAND_PARAMS) {
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -2796,34 +3225,41 @@ void LogicManager::CONS_Cond2_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_StartPart2(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterCond2);
- getCharacter(kCharacterCond2).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterCond2).characterPosition.position = 1500;
- getCharacter(kCharacterCond2).characterPosition.location = 0;
- getCharacter(kCharacterCond2).inventoryItem = 0;
- getCharacterParams(kCharacterCond2, 8)[7] = 0;
- getCharacterParams(kCharacterCond2, 8)[8] = 0;
- getCharacterParams(kCharacterCond2, 8)[2] = 0;
- getCharacterParams(kCharacterCond2, 8)[4] = 0;
- getCharacterParams(kCharacterCond2, 8)[3] = 0;
- getCharacterParams(kCharacterCond2, 8)[5] = 0;
- getCharacterParams(kCharacterCond2, 8)[10] = 0;
- getCharacterParams(kCharacterCond2, 8)[12] = 0;
- getCharacterParams(kCharacterCond2, 8)[13] = 0;
- getCharacterParams(kCharacterCond2, 8)[15] = 0;
- getCharacterParams(kCharacterCond2, 8)[19] = 0;
- getCharacterParams(kCharacterCond2, 8)[14] = 0;
- getCharacterParams(kCharacterCond2, 8)[9] = 0;
- getCharacterParams(kCharacterCond2, 8)[1] = 0;
- setModel(111, 5);
- } else if (msg->action == 18 && getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 1) {
- CONS_Cond2_SittingDay(0, 0, 0, 0);
- }
- } else {
+ switch (msg->action) {
+ case 0:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_SitDown, 0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterCond2);
+ getCharacter(kCharacterCond2).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterCond2).characterPosition.position = 1500;
+ getCharacter(kCharacterCond2).characterPosition.location = 0;
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ getCharacterParams(kCharacterCond2, 8)[7] = 0;
+ getCharacterParams(kCharacterCond2, 8)[8] = 0;
+ getCharacterParams(kCharacterCond2, 8)[2] = 0;
+ getCharacterParams(kCharacterCond2, 8)[4] = 0;
+ getCharacterParams(kCharacterCond2, 8)[3] = 0;
+ getCharacterParams(kCharacterCond2, 8)[5] = 0;
+ getCharacterParams(kCharacterCond2, 8)[10] = 0;
+ getCharacterParams(kCharacterCond2, 8)[12] = 0;
+ getCharacterParams(kCharacterCond2, 8)[13] = 0;
+ getCharacterParams(kCharacterCond2, 8)[15] = 0;
+ getCharacterParams(kCharacterCond2, 8)[19] = 0;
+ getCharacterParams(kCharacterCond2, 8)[14] = 0;
+ getCharacterParams(kCharacterCond2, 8)[9] = 0;
+ getCharacterParams(kCharacterCond2, 8)[1] = 0;
+ setModel(111, 5);
+ break;
+ case 18:
+ if (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 1) {
+ CONS_Cond2_SittingDay(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -2838,75 +3274,95 @@ void LogicManager::CONS_Cond2_SittingDay(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_SittingDay(HAND_PARAMS) {
- if (msg->action > 11) {
- if (msg->action > 225358684) {
- if (msg->action == 226078300) {
- if (!getCharacterParams(kCharacterCond2, 8)[16] && !getCharacterParams(kCharacterCond2, 8)[0]) {
- playDialog(kCharacterCond2, "JAC2020", -1, 0);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 7;
- Cond2Call(&LogicManager::CONS_Cond2_DoSeqOtis, "697D", 0, 0, 0);
- }
- } else if (msg->action == 305159806 && !getCharacterParams(kCharacterCond2, 8)[16] && !getCharacterParams(kCharacterCond2, 8)[0]) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 10;
- Cond2Call(&LogicManager::CONS_Cond2_CathRattling, msg->param, 0, 0, 0);
- }
- } else {
- switch (msg->action) {
- case 225358684:
- if (!getCharacterParams(kCharacterCond2, 8)[0]) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 9;
- Cond2Call(&LogicManager::CONS_Cond2_CathBuzzing, msg->param, 0, 0, 0);
- }
- break;
- case 17:
- if (!getCharacterParams(kCharacterCond2, 8)[16]) {
- if (checkCathDir(kCarRedSleeping, 1)) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
- Cond2Call(&LogicManager::CONS_Cond2_Passing, 1, 0, 0, 0);
- } else if (checkCathDir(kCarRedSleeping, 23)) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 6;
- Cond2Call(&LogicManager::CONS_Cond2_Passing, 0, 0, 0, 0);
- }
- }
- break;
- case 18:
- switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
- case 1:
- goto LABEL_24;
- case 2:
- goto LABEL_26;
- case 7:
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
- Cond2Call(&LogicManager::CONS_Cond2_SitDown, 0, 0, 0, 0);
- break;
- default:
- return;
- }
- break;
- }
+ switch (msg->action) {
+ case 0:
+ if (getCharacterParams(kCharacterCond2, 8)[7]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
+ Cond2Call(&LogicManager::CONS_Cond2_TatianaLockUnlockMyComp, 1, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[8]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
+ Cond2Call(&LogicManager::CONS_Cond2_TatianaLockUnlockMyComp, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[2]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
+ Cond2Call(&LogicManager::CONS_Cond2_Listen, 9, 0, 0, 0);
}
- } else if (msg->action == 11) {
+
+ break;
+ case 11:
if (!getCharacterParams(kCharacterCond2, 8)[16]) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
Cond2Call(&LogicManager::CONS_Cond2_Passing, msg->param, msg->sender, 0, 0);
}
- } else if (msg->action == 0) {
- if (getCharacterParams(kCharacterCond2, 8)[7]) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
- Cond2Call(&LogicManager::CONS_Cond2_TatianaLockUnlockMyComp, 1, 0, 0, 0);
- } else {
- LABEL_24:
+
+ break;
+ case 17:
+ if (!getCharacterParams(kCharacterCond2, 8)[16]) {
+ if (checkCathDir(kCarRedSleeping, 1)) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
+ Cond2Call(&LogicManager::CONS_Cond2_Passing, 1, 0, 0, 0);
+ } else if (checkCathDir(kCarRedSleeping, 23)) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 6;
+ Cond2Call(&LogicManager::CONS_Cond2_Passing, 0, 0, 0, 0);
+ }
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
+ case 1:
if (getCharacterParams(kCharacterCond2, 8)[8]) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
Cond2Call(&LogicManager::CONS_Cond2_TatianaLockUnlockMyComp, 0, 0, 0, 0);
- } else {
- LABEL_26:
- if (getCharacterParams(kCharacterCond2, 8)[2]) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
- Cond2Call(&LogicManager::CONS_Cond2_Listen, 9, 0, 0, 0);
- }
+ break;
}
+
+ // INTENTIONAL FALLTHROUGH
+ case 2:
+ if (getCharacterParams(kCharacterCond2, 8)[2]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
+ Cond2Call(&LogicManager::CONS_Cond2_Listen, 9, 0, 0, 0);
+ }
+
+ break;
+ case 7:
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
+ Cond2Call(&LogicManager::CONS_Cond2_SitDown, 0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 225358684:
+ if (!getCharacterParams(kCharacterCond2, 8)[0]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 9;
+ Cond2Call(&LogicManager::CONS_Cond2_CathBuzzing, msg->param, 0, 0, 0);
}
+
+ break;
+ case 226078300:
+ if (!getCharacterParams(kCharacterCond2, 8)[16] && !getCharacterParams(kCharacterCond2, 8)[0]) {
+ playDialog(kCharacterCond2, "JAC2020", -1, 0);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 7;
+ Cond2Call(&LogicManager::CONS_Cond2_DoSeqOtis, "697D", 0, 0, 0);
+ }
+
+ break;
+ case 305159806:
+ if (!getCharacterParams(kCharacterCond2, 8)[16] && !getCharacterParams(kCharacterCond2, 8)[0]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 10;
+ Cond2Call(&LogicManager::CONS_Cond2_CathRattling, msg->param, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -2921,36 +3377,43 @@ void LogicManager::CONS_Cond2_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_StartPart3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterCond2);
- getCharacter(kCharacterCond2).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterCond2).characterPosition.position = 1500;
- getCharacter(kCharacterCond2).characterPosition.location = 0;
- getCharacter(kCharacterCond2).clothes = 0;
- getCharacter(kCharacterCond2).inventoryItem = 0;
- getCharacterParams(kCharacterCond2, 8)[7] = 0;
- getCharacterParams(kCharacterCond2, 8)[8] = 0;
- getCharacterParams(kCharacterCond2, 8)[2] = 0;
- getCharacterParams(kCharacterCond2, 8)[4] = 0;
- getCharacterParams(kCharacterCond2, 8)[3] = 0;
- getCharacterParams(kCharacterCond2, 8)[10] = 0;
- getCharacterParams(kCharacterCond2, 8)[12] = 0;
- getCharacterParams(kCharacterCond2, 8)[13] = 0;
- getCharacterParams(kCharacterCond2, 8)[15] = 0;
- getCharacterParams(kCharacterCond2, 8)[19] = 0;
- getCharacterParams(kCharacterCond2, 8)[20] = 0;
- getCharacterParams(kCharacterCond2, 8)[11] = 0;
- getCharacterParams(kCharacterCond2, 8)[14] = 0;
- getCharacterParams(kCharacterCond2, 8)[9] = 0;
- getCharacterParams(kCharacterCond2, 8)[1] = 1;
- setModel(111, 6);
- } else if (msg->action == 18 && getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 1) {
- CONS_Cond2_SittingDay3(0, 0, 0, 0);
- }
- } else {
+ switch (msg->action) {
+ case 0:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_SitDown, 0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterCond2);
+ getCharacter(kCharacterCond2).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterCond2).characterPosition.position = 1500;
+ getCharacter(kCharacterCond2).characterPosition.location = 0;
+ getCharacter(kCharacterCond2).clothes = 0;
+ getCharacter(kCharacterCond2).inventoryItem = 0;
+ getCharacterParams(kCharacterCond2, 8)[7] = 0;
+ getCharacterParams(kCharacterCond2, 8)[8] = 0;
+ getCharacterParams(kCharacterCond2, 8)[2] = 0;
+ getCharacterParams(kCharacterCond2, 8)[4] = 0;
+ getCharacterParams(kCharacterCond2, 8)[3] = 0;
+ getCharacterParams(kCharacterCond2, 8)[10] = 0;
+ getCharacterParams(kCharacterCond2, 8)[12] = 0;
+ getCharacterParams(kCharacterCond2, 8)[13] = 0;
+ getCharacterParams(kCharacterCond2, 8)[15] = 0;
+ getCharacterParams(kCharacterCond2, 8)[19] = 0;
+ getCharacterParams(kCharacterCond2, 8)[20] = 0;
+ getCharacterParams(kCharacterCond2, 8)[11] = 0;
+ getCharacterParams(kCharacterCond2, 8)[14] = 0;
+ getCharacterParams(kCharacterCond2, 8)[9] = 0;
+ getCharacterParams(kCharacterCond2, 8)[1] = 1;
+ setModel(111, 6);
+ break;
+ case 18:
+ if (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 1) {
+ CONS_Cond2_SittingDay3(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -2961,232 +3424,373 @@ void LogicManager::CONS_Cond2_SittingDay3(CONS_PARAMS) {
params->clear();
- fedEx(kCharacterCond2, kCharacterCond2, 12, 0);
-}
+ fedEx(kCharacterCond2, kCharacterCond2, 12, 0);
+}
+
+void LogicManager::HAND_Cond2_SittingDay3(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (getCharacterParams(kCharacterCond2, 8)[7]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
+ Cond2Call(&LogicManager::CONS_Cond2_TatianaLockUnlockMyComp, 1, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[8]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
+ Cond2Call(&LogicManager::CONS_Cond2_TatianaLockUnlockMyComp, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[2]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
+ Cond2Call(&LogicManager::CONS_Cond2_Listen, 9, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[4]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
+ Cond2Call(&LogicManager::CONS_Cond2_Listen, 3, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[10]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
+ Cond2Call(&LogicManager::CONS_Cond2_AnnaTakeMax, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[12]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 6;
+ Cond2Call(&LogicManager::CONS_Cond2_AnnaLockMe, 1, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[13]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 7;
+ Cond2Call(&LogicManager::CONS_Cond2_AnnaLockMe, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[15]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
+ Cond2Call(&LogicManager::CONS_Cond2_AnnaUnlockMe, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[19]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 9;
+ Cond2Call(&LogicManager::CONS_Cond2_InviteTatiana, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[11]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 10;
+ Cond2Call(&LogicManager::CONS_Cond2_TakeMaxBack, 1, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[14]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 11;
+ Cond2Call(&LogicManager::CONS_Cond2_TakeMaxBack, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[3]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 12;
+ Cond2Call(&LogicManager::CONS_Cond2_Listen, 21, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[20] && _gameTime > 2056500 && _gameTime < 1417500) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 13;
+ Cond2Call(&LogicManager::CONS_Cond2_InviteRebecca, 0, 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2088900 && !getCharacterCurrentParams(kCharacterCond2)[0]) {
+ getCharacterCurrentParams(kCharacterCond2)[0] = 1;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 14;
+ Cond2Call(&LogicManager::CONS_Cond2_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2119500 && !getCharacterCurrentParams(kCharacterCond2)[1]) {
+ getCharacterCurrentParams(kCharacterCond2)[1] = 1;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 15;
+ Cond2Call(&LogicManager::CONS_Cond2_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2138400 && !getCharacterCurrentParams(kCharacterCond2)[2]) {
+ getCharacterCurrentParams(kCharacterCond2)[2] = 1;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 16;
+ Cond2Call(&LogicManager::CONS_Cond2_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2147400 && !getCharacterCurrentParams(kCharacterCond2)[3]) {
+ getCharacterCurrentParams(kCharacterCond2)[3] = 1;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 17;
+ Cond2Call(&LogicManager::CONS_Cond2_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2160000 && !getCharacterCurrentParams(kCharacterCond2)[4]) {
+ getCharacterCurrentParams(kCharacterCond2)[4] = 1;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 18;
+ Cond2Call(&LogicManager::CONS_Cond2_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2205000 && !getCharacterCurrentParams(kCharacterCond2)[5]) {
+ getCharacterCurrentParams(kCharacterCond2)[5] = 1;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 19;
+ Cond2Call(&LogicManager::CONS_Cond2_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[1]) {
+ if (_gameTime > 2025000 && !getCharacterCurrentParams(kCharacterCond2)[6]) {
+ getCharacterCurrentParams(kCharacterCond2)[6] = 1;
+ setModel(111, 7);
+ }
+ if (_gameTime > 2133000 && !getCharacterCurrentParams(kCharacterCond2)[7]) {
+ getCharacterCurrentParams(kCharacterCond2)[7] = 1;
+ setModel(111, 8);
+ }
+ if (_gameTime > 2173500 && !getCharacterCurrentParams(kCharacterCond2)[8]) {
+ getCharacterCurrentParams(kCharacterCond2)[8] = 1;
+ setModel(111, 9);
+ }
+ }
+
+ break;
+ case 11:
+ if (!getCharacterParams(kCharacterCond2, 8)[16]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 20;
+ Cond2Call(&LogicManager::CONS_Cond2_Passing, msg->param, msg->sender, 0, 0);
+ }
+
+ break;
+ case 17:
+ if (!getCharacterParams(kCharacterCond2, 8)[16]) {
+ if (checkCathDir(kCarRedSleeping, 1)) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 21;
+ Cond2Call(&LogicManager::CONS_Cond2_Passing, 1, 0, 0, 0);
+ } else if (checkCathDir(kCarRedSleeping, 23)) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 22;
+ Cond2Call(&LogicManager::CONS_Cond2_Passing, 0, 0, 0, 0);
+ }
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
+ case 1:
+ if (getCharacterParams(kCharacterCond2, 8)[8]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
+ Cond2Call(&LogicManager::CONS_Cond2_TatianaLockUnlockMyComp, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 2:
+ if (getCharacterParams(kCharacterCond2, 8)[2]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
+ Cond2Call(&LogicManager::CONS_Cond2_Listen, 9, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 3:
+ if (getCharacterParams(kCharacterCond2, 8)[4]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
+ Cond2Call(&LogicManager::CONS_Cond2_Listen, 3, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 4:
+ if (getCharacterParams(kCharacterCond2, 8)[10]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
+ Cond2Call(&LogicManager::CONS_Cond2_AnnaTakeMax, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 5:
+ if (getCharacterParams(kCharacterCond2, 8)[12]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 6;
+ Cond2Call(&LogicManager::CONS_Cond2_AnnaLockMe, 1, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 6:
+ if (getCharacterParams(kCharacterCond2, 8)[13]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 7;
+ Cond2Call(&LogicManager::CONS_Cond2_AnnaLockMe, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 7:
+ if (getCharacterParams(kCharacterCond2, 8)[15]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
+ Cond2Call(&LogicManager::CONS_Cond2_AnnaUnlockMe, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 8:
+ if (getCharacterParams(kCharacterCond2, 8)[19]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 9;
+ Cond2Call(&LogicManager::CONS_Cond2_InviteTatiana, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 9:
+ if (getCharacterParams(kCharacterCond2, 8)[11]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 10;
+ Cond2Call(&LogicManager::CONS_Cond2_TakeMaxBack, 1, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 10:
+ if (getCharacterParams(kCharacterCond2, 8)[14]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 11;
+ Cond2Call(&LogicManager::CONS_Cond2_TakeMaxBack, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 11:
+ if (getCharacterParams(kCharacterCond2, 8)[3]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 12;
+ Cond2Call(&LogicManager::CONS_Cond2_Listen, 21, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 12:
+ if (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 12) {
+ send(kCharacterCond2, kCharacterTrainM, 168255788, 0);
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[20] && _gameTime > 2056500 && _gameTime < 1417500) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 13;
+ Cond2Call(&LogicManager::CONS_Cond2_InviteRebecca, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 13:
+ if (_gameTime > 2088900 && !getCharacterCurrentParams(kCharacterCond2)[0]) {
+ getCharacterCurrentParams(kCharacterCond2)[0] = 1;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 14;
+ Cond2Call(&LogicManager::CONS_Cond2_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 14:
+ if (_gameTime > 2119500 && !getCharacterCurrentParams(kCharacterCond2)[1]) {
+ getCharacterCurrentParams(kCharacterCond2)[1] = 1;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 15;
+ Cond2Call(&LogicManager::CONS_Cond2_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 15:
+ if (_gameTime > 2138400 && !getCharacterCurrentParams(kCharacterCond2)[2]) {
+ getCharacterCurrentParams(kCharacterCond2)[2] = 1;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 16;
+ Cond2Call(&LogicManager::CONS_Cond2_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 16:
+ if (_gameTime > 2147400 && !getCharacterCurrentParams(kCharacterCond2)[3]) {
+ getCharacterCurrentParams(kCharacterCond2)[3] = 1;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 17;
+ Cond2Call(&LogicManager::CONS_Cond2_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 17:
+ if (_gameTime > 2160000 && !getCharacterCurrentParams(kCharacterCond2)[4]) {
+ getCharacterCurrentParams(kCharacterCond2)[4] = 1;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 18;
+ Cond2Call(&LogicManager::CONS_Cond2_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
-void LogicManager::HAND_Cond2_SittingDay3(HAND_PARAMS) {
- if (msg->action > 11) {
- if (msg->action > 225358684) {
- if (msg->action == 226078300) {
- if (!getCharacterParams(kCharacterCond2, 8)[16] && !getCharacterParams(kCharacterCond2, 8)[0]) {
- playDialog(kCharacterCond2, "JAC2020", -1, 0);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 23;
- Cond2Call(&LogicManager::CONS_Cond2_DoSeqOtis, "697D", 0, 0, 0);
- }
- } else if (msg->action == 305159806 && !getCharacterParams(kCharacterCond2, 8)[16] && !getCharacterParams(kCharacterCond2, 8)[0]) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 26;
- Cond2Call(&LogicManager::CONS_Cond2_CathRattling, msg->param, 0, 0, 0);
+ // fall through
+ case 18:
+ if (_gameTime > 2205000 && !getCharacterCurrentParams(kCharacterCond2)[5]) {
+ getCharacterCurrentParams(kCharacterCond2)[5] = 1;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 19;
+ Cond2Call(&LogicManager::CONS_Cond2_BathroomTrip, 0, 0, 0, 0);
+ break;
}
- } else {
- switch (msg->action) {
- case 225358684:
- if (!getCharacterParams(kCharacterCond2, 8)[0]) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 25;
- Cond2Call(&LogicManager::CONS_Cond2_CathBuzzing, msg->param, 0, 0, 0);
+
+ // fall through
+ case 19:
+ if (getCharacterParams(kCharacterCond2, 8)[1]) {
+ if (_gameTime > 2025000 && !getCharacterCurrentParams(kCharacterCond2)[6]) {
+ getCharacterCurrentParams(kCharacterCond2)[6] = 1;
+ setModel(111, 7);
}
- break;
- case 17:
- if (!getCharacterParams(kCharacterCond2, 8)[16]) {
- if (checkCathDir(kCarRedSleeping, 1)) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 21;
- Cond2Call(&LogicManager::CONS_Cond2_Passing, 1, 0, 0, 0);
- } else if (checkCathDir(kCarRedSleeping, 23)) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 22;
- Cond2Call(&LogicManager::CONS_Cond2_Passing, 0, 0, 0, 0);
- }
+ if (_gameTime > 2133000 && !getCharacterCurrentParams(kCharacterCond2)[7]) {
+ getCharacterCurrentParams(kCharacterCond2)[7] = 1;
+ setModel(111, 8);
}
- break;
- case 18:
- switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
- case 1:
- goto LABEL_29;
- case 2:
- goto LABEL_31;
- case 3:
- goto LABEL_33;
- case 4:
- goto LABEL_35;
- case 5:
- goto LABEL_37;
- case 6:
- goto LABEL_39;
- case 7:
- goto LABEL_41;
- case 8:
- goto LABEL_43;
- case 9:
- goto LABEL_45;
- case 10:
- goto LABEL_47;
- case 11:
- goto LABEL_49;
- case 12:
- send(kCharacterCond2, kCharacterTrainM, 168255788, 0);
- goto LABEL_24;
- case 13:
- goto LABEL_51;
- case 14:
- goto LABEL_54;
- case 15:
- goto LABEL_57;
- case 16:
- goto LABEL_60;
- case 17:
- goto LABEL_63;
- case 18:
- goto LABEL_66;
- case 19:
- goto LABEL_69;
- case 23:
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 24;
- Cond2Call(&LogicManager::CONS_Cond2_SitDown, 0, 0, 0, 0);
- break;
- default:
- return;
+ if (_gameTime > 2173500 && !getCharacterCurrentParams(kCharacterCond2)[8]) {
+ getCharacterCurrentParams(kCharacterCond2)[8] = 1;
+ setModel(111, 9);
}
- break;
}
+
+ break;
+ case 23:
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 24;
+ Cond2Call(&LogicManager::CONS_Cond2_SitDown, 0, 0, 0, 0);
+ break;
+ default:
+ break;
}
- } else if (msg->action == 11) {
- if (!getCharacterParams(kCharacterCond2, 8)[16]) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 20;
- Cond2Call(&LogicManager::CONS_Cond2_Passing, msg->param, msg->sender, 0, 0);
+
+ break;
+ case 225358684:
+ if (!getCharacterParams(kCharacterCond2, 8)[0]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 25;
+ Cond2Call(&LogicManager::CONS_Cond2_CathBuzzing, msg->param, 0, 0, 0);
}
- } else if (msg->action == 0) {
- if (getCharacterParams(kCharacterCond2, 8)[7]) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
- Cond2Call(&LogicManager::CONS_Cond2_TatianaLockUnlockMyComp, 1, 0, 0, 0);
- } else {
- LABEL_29:
- if (getCharacterParams(kCharacterCond2, 8)[8]) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
- Cond2Call(&LogicManager::CONS_Cond2_TatianaLockUnlockMyComp, 0, 0, 0, 0);
- } else {
- LABEL_31:
- if (getCharacterParams(kCharacterCond2, 8)[2]) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
- Cond2Call(&LogicManager::CONS_Cond2_Listen, 9, 0, 0, 0);
- } else {
- LABEL_33:
- if (getCharacterParams(kCharacterCond2, 8)[4]) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
- Cond2Call(&LogicManager::CONS_Cond2_Listen, 3, 0, 0, 0);
- } else {
- LABEL_35:
- if (getCharacterParams(kCharacterCond2, 8)[10]) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
- Cond2Call(&LogicManager::CONS_Cond2_AnnaTakeMax, 0, 0, 0, 0);
- } else {
- LABEL_37:
- if (getCharacterParams(kCharacterCond2, 8)[12]) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 6;
- Cond2Call(&LogicManager::CONS_Cond2_AnnaLockMe, 1, 0, 0, 0);
- } else {
- LABEL_39:
- if (getCharacterParams(kCharacterCond2, 8)[13]) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 7;
- Cond2Call(&LogicManager::CONS_Cond2_AnnaLockMe, 0, 0, 0, 0);
- } else {
- LABEL_41:
- if (getCharacterParams(kCharacterCond2, 8)[15]) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
- Cond2Call(&LogicManager::CONS_Cond2_AnnaUnlockMe, 0, 0, 0, 0);
- } else {
- LABEL_43:
- if (getCharacterParams(kCharacterCond2, 8)[19]) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 9;
- Cond2Call(&LogicManager::CONS_Cond2_InviteTatiana, 0, 0, 0, 0);
- } else {
- LABEL_45:
- if (getCharacterParams(kCharacterCond2, 8)[11]) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 10;
- Cond2Call(&LogicManager::CONS_Cond2_TakeMaxBack, 1, 0, 0, 0);
- } else {
- LABEL_47:
- if (getCharacterParams(kCharacterCond2, 8)[14]) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 11;
- Cond2Call(&LogicManager::CONS_Cond2_TakeMaxBack, 0, 0, 0, 0);
- } else {
- LABEL_49:
- if (getCharacterParams(kCharacterCond2, 8)[3]) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 12;
- Cond2Call(&LogicManager::CONS_Cond2_Listen, 21, 0, 0, 0);
- } else {
- LABEL_24:
- if (getCharacterParams(kCharacterCond2, 8)[20] && _gameTime > 2056500 && _gameTime < 1417500) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 13;
- Cond2Call(&LogicManager::CONS_Cond2_InviteRebecca, 0, 0, 0, 0);
- } else {
- LABEL_51:
- if (_gameTime <= 2088900 || getCharacterCurrentParams(kCharacterCond2)[0]) {
- LABEL_54:
- if (_gameTime <= 2119500 || getCharacterCurrentParams(kCharacterCond2)[1]) {
- LABEL_57:
- if (_gameTime <= 2138400 || getCharacterCurrentParams(kCharacterCond2)[2]) {
- LABEL_60:
- if (_gameTime <= 2147400 || getCharacterCurrentParams(kCharacterCond2)[3]) {
- LABEL_63:
- if (_gameTime <= 2160000 || getCharacterCurrentParams(kCharacterCond2)[4]) {
- LABEL_66:
- if (_gameTime <= 2205000 || getCharacterCurrentParams(kCharacterCond2)[5]) {
- LABEL_69:
- if (getCharacterParams(kCharacterCond2, 8)[1]) {
- if (_gameTime > 2025000 && !getCharacterCurrentParams(kCharacterCond2)[6]) {
- getCharacterCurrentParams(kCharacterCond2)[6] = 1;
- setModel(111, 7);
- }
- if (_gameTime > 2133000 && !getCharacterCurrentParams(kCharacterCond2)[7]) {
- getCharacterCurrentParams(kCharacterCond2)[7] = 1;
- setModel(111, 8);
- }
- if (_gameTime > 2173500 && !getCharacterCurrentParams(kCharacterCond2)[8]) {
- getCharacterCurrentParams(kCharacterCond2)[8] = 1;
- setModel(111, 9);
- }
- }
- } else {
- getCharacterCurrentParams(kCharacterCond2)[5] = 1;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 19;
- Cond2Call(&LogicManager::CONS_Cond2_BathroomTrip, 0, 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterCond2)[4] = 1;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 18;
- Cond2Call(&LogicManager::CONS_Cond2_BathroomTrip, 0, 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterCond2)[3] = 1;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 17;
- Cond2Call(&LogicManager::CONS_Cond2_BathroomTrip, 0, 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterCond2)[2] = 1;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 16;
- Cond2Call(&LogicManager::CONS_Cond2_BathroomTrip, 0, 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterCond2)[1] = 1;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 15;
- Cond2Call(&LogicManager::CONS_Cond2_BathroomTrip, 0, 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterCond2)[0] = 1;
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 14;
- Cond2Call(&LogicManager::CONS_Cond2_BathroomTrip, 0, 0, 0, 0);
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
+
+ break;
+ case 226078300:
+ if (!getCharacterParams(kCharacterCond2, 8)[16] && !getCharacterParams(kCharacterCond2, 8)[0]) {
+ playDialog(kCharacterCond2, "JAC2020", -1, 0);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 23;
+ Cond2Call(&LogicManager::CONS_Cond2_DoSeqOtis, "697D", 0, 0, 0);
+ }
+
+ break;
+ case 305159806:
+ if (!getCharacterParams(kCharacterCond2, 8)[16] && !getCharacterParams(kCharacterCond2, 8)[0]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 26;
+ Cond2Call(&LogicManager::CONS_Cond2_CathRattling, msg->param, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -3201,10 +3805,12 @@ void LogicManager::CONS_Cond2_AnnaTakeMax(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_AnnaTakeMax(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_GetUp, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
@@ -3234,9 +3840,9 @@ void LogicManager::HAND_Cond2_AnnaTakeMax(HAND_PARAMS) {
case 6:
startCycOtis(kCharacterCond2, "629Cf");
softBlockAtDoor(kCharacterCond2, 37);
- goto LABEL_12;
+
+ // fall through
case 7:
- LABEL_12:
if (whoRunningDialog(kCharacterCond2)) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 7;
Cond2Call(&LogicManager::CONS_Cond2_DoWait, 75, 0, 0, 0);
@@ -3244,6 +3850,7 @@ void LogicManager::HAND_Cond2_AnnaTakeMax(HAND_PARAMS) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
Cond2Call(&LogicManager::CONS_Cond2_DoDialog, "Ann3122", 0, 0, 0);
}
+
break;
case 8:
playDialog(kCharacterCond2, "Ann3123", -1, 0);
@@ -3266,8 +3873,12 @@ void LogicManager::HAND_Cond2_AnnaTakeMax(HAND_PARAMS) {
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -3284,10 +3895,12 @@ void LogicManager::CONS_Cond2_AnnaLockMe(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_AnnaLockMe(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_GetUp, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
@@ -3300,9 +3913,9 @@ void LogicManager::HAND_Cond2_AnnaLockMe(HAND_PARAMS) {
case 3:
startCycOtis(kCharacterCond2, "627Wf");
softBlockAtDoor(kCharacterCond2, 37);
- goto LABEL_9;
+
+ // fall through
case 4:
- LABEL_9:
if (whoRunningDialog(kCharacterCond2)) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
Cond2Call(&LogicManager::CONS_Cond2_DoWait, 225, 0, 0, 0);
@@ -3315,6 +3928,7 @@ void LogicManager::HAND_Cond2_AnnaLockMe(HAND_PARAMS) {
Cond2Call(&LogicManager::CONS_Cond2_DoDialog, "Ann3149", 0, 0, 0);
}
}
+
break;
case 5:
softReleaseAtDoor(kCharacterCond2, 37);
@@ -3334,8 +3948,12 @@ void LogicManager::HAND_Cond2_AnnaLockMe(HAND_PARAMS) {
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -3350,10 +3968,12 @@ void LogicManager::CONS_Cond2_AnnaUnlockMe(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_AnnaUnlockMe(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_GetUp, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
case 1:
playDialog(kCharacterCond2, "Ann3148A", -1, 0);
@@ -3386,8 +4006,12 @@ void LogicManager::HAND_Cond2_AnnaUnlockMe(HAND_PARAMS) {
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -3402,10 +4026,12 @@ void LogicManager::CONS_Cond2_InviteTatiana(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_InviteTatiana(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_GetUp, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
@@ -3426,6 +4052,7 @@ void LogicManager::HAND_Cond2_InviteTatiana(HAND_PARAMS) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
Cond2Call(&LogicManager::CONS_Cond2_DoDialog, "LIB012", 0, 0, 0);
}
+
break;
case 4:
softReleaseAtDoor(kCharacterCond2, 33);
@@ -3444,14 +4071,15 @@ void LogicManager::HAND_Cond2_InviteTatiana(HAND_PARAMS) {
break;
case 7:
getCharacter(kCharacterCond2).characterPosition.location = 0;
- goto LABEL_17;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 10;
+ Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 2000, 0, 0);
+ break;
case 8:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 9;
Cond2Call(&LogicManager::CONS_Cond2_DoWait, 0x96, 0, 0, 0);
break;
case 9:
softReleaseAtDoor(kCharacterCond2, 33);
- LABEL_17:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 10;
Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 2000, 0, 0);
break;
@@ -3468,8 +4096,12 @@ void LogicManager::HAND_Cond2_InviteTatiana(HAND_PARAMS) {
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -3484,10 +4116,12 @@ void LogicManager::CONS_Cond2_InviteRebecca(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_InviteRebecca(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_GetUp, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
@@ -3502,11 +4136,14 @@ void LogicManager::HAND_Cond2_InviteRebecca(HAND_PARAMS) {
case 3:
if (!inComp(kCharacterRebecca, kCarRedSleeping, 4840)) {
softReleaseAtDoor(kCharacterCond2, 36);
- goto LABEL_15;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
+ Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 2000, 0, 0);
+ } else {
+ startCycOtis(kCharacterCond2, "627Ne");
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
+ Cond2Call(&LogicManager::CONS_Cond2_DoDialog, "Jac3005", 0, 0, 0);
}
- startCycOtis(kCharacterCond2, "627Ne");
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
- Cond2Call(&LogicManager::CONS_Cond2_DoDialog, "Jac3005", 0, 0, 0);
+
break;
case 4:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
@@ -3525,7 +4162,6 @@ void LogicManager::HAND_Cond2_InviteRebecca(HAND_PARAMS) {
break;
case 7:
getCharacter(kCharacterCond2).characterPosition.location = 0;
- LABEL_15:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 2000, 0, 0);
break;
@@ -3540,8 +4176,12 @@ void LogicManager::HAND_Cond2_InviteRebecca(HAND_PARAMS) {
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -3556,80 +4196,95 @@ void LogicManager::CONS_Cond2_TatianaComeHere(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_TatianaComeHere(HAND_PARAMS) {
- if (msg->action > 9) {
- if (msg->action > 18) {
- if (msg->action == 168316032) {
- setDoor(32, 4, 0, 0, 9);
- setDoor(33, 4, 1, 0, 9);
- } else if (msg->action == 235061888) {
- softReleaseAtDoor(kCharacterCond2, 33);
- setDoor(32, 0, 0, 10, 9);
- setDoor(33, 0, 1, 10, 9);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
- Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 2000, 0, 0);
- }
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
- Cond2Call(&LogicManager::CONS_Cond2_SitDown, 0, 0, 0, 0);
- break;
- case 2:
- case 4:
- case 6:
- CONS_Cond2_SittingDay3(0, 0, 0, 0);
- break;
- case 3:
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
- Cond2Call(&LogicManager::CONS_Cond2_SitDown, 0, 0, 0, 0);
- break;
- case 5:
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 6;
- Cond2Call(&LogicManager::CONS_Cond2_SitDown, 0, 0, 0, 0);
- break;
- default:
- return;
- }
- } else if (msg->action == 12) {
- getCharacter(kCharacterCond2).characterPosition.car = 4;
- getCharacter(kCharacterCond2).characterPosition.position = 7500;
- getCharacter(kCharacterCond2).characterPosition.location = 0;
- send(kCharacterCond2, kCharacterMax, 135204609, 0);
- if (getCharacterParams(kCharacterCond2, 8)[4]) {
- send(kCharacterCond2, kCharacterCond1, 155853632, 0);
- send(kCharacterCond2, kCharacterCond1, 2, 0);
- getCharacterParams(kCharacterCond2, 8)[4] = 0;
- }
- if (getCharacterParams(kCharacterCond2, 8)[2]) {
- send(kCharacterCond2, kCharacterTrainM, 155853632, 0);
- send(kCharacterCond2, kCharacterTrainM, 2, 0);
- getCharacterParams(kCharacterCond2, 8)[2] = 0;
- }
- startCycOtis(kCharacterCond2, "627Wb");
- softBlockAtDoor(kCharacterCond2, 33);
- send(kCharacterCond2, kCharacterTatiana, 154071333, 0);
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 2133000 && !_gameProgress[kProgressField40]) {
+ softReleaseAtDoor(kCharacterCond2, 33);
+ setDoor(32, kCharacterCath, 0, 10, 9);
+ setDoor(33, kCharacterCath, 1, 10, 9);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
+ Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 2000, 0, 0);
}
- } else if (msg->action == 9) {
+
+ break;
+ case 9:
if (msg->param.intParam == 33)
getCharacter(kCharacterCond2).characterPosition.position = 7500;
+
playDialog(0, "LIB014", -1, 0);
playNIS(kEventCoudertGoingOutOfVassiliCompartment);
walk(kCharacterCond2, kCarRedSleeping, 2000);
+
if (msg->param.intParam == 33)
bumpCathRDoor(33);
else
bumpCathRDoor(32);
+
softReleaseAtDoor(kCharacterCond2, 33);
- setDoor(32, 0, 0, 10, 9);
- setDoor(33, 0, 1, 10, 9);
+ setDoor(32, kCharacterCath, 0, 10, 9);
+ setDoor(33, kCharacterCath, 1, 10, 9);
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 2000, 0, 0);
- } else if (msg->action == 0 && _gameTime > 2133000 && !_gameProgress[kProgressField40]) {
+ break;
+ case 12:
+ getCharacter(kCharacterCond2).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterCond2).characterPosition.position = 7500;
+ getCharacter(kCharacterCond2).characterPosition.location = 0;
+ send(kCharacterCond2, kCharacterMax, 135204609, 0);
+
+ if (getCharacterParams(kCharacterCond2, 8)[4]) {
+ send(kCharacterCond2, kCharacterCond1, 155853632, 0);
+ send(kCharacterCond2, kCharacterCond1, 2, 0);
+ getCharacterParams(kCharacterCond2, 8)[4] = 0;
+ }
+
+ if (getCharacterParams(kCharacterCond2, 8)[2]) {
+ send(kCharacterCond2, kCharacterTrainM, 155853632, 0);
+ send(kCharacterCond2, kCharacterTrainM, 2, 0);
+ getCharacterParams(kCharacterCond2, 8)[2] = 0;
+ }
+
+ startCycOtis(kCharacterCond2, "627Wb");
+ softBlockAtDoor(kCharacterCond2, 33);
+ send(kCharacterCond2, kCharacterTatiana, 154071333, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
+ Cond2Call(&LogicManager::CONS_Cond2_SitDown, 0, 0, 0, 0);
+ break;
+ case 2:
+ case 4:
+ case 6:
+ CONS_Cond2_SittingDay3(0, 0, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
+ Cond2Call(&LogicManager::CONS_Cond2_SitDown, 0, 0, 0, 0);
+ break;
+ case 5:
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 6;
+ Cond2Call(&LogicManager::CONS_Cond2_SitDown, 0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 168316032:
+ setDoor(32, kCharacterCond2, 0, 0, 9);
+ setDoor(33, kCharacterCond2, 1, 0, 9);
+ break;
+ case 235061888:
softReleaseAtDoor(kCharacterCond2, 33);
- setDoor(32, 0, 0, 10, 9);
- setDoor(33, 0, 1, 10, 9);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
+ setDoor(32, kCharacterCath, 0, 10, 9);
+ setDoor(33, kCharacterCath, 1, 10, 9);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 2000, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -3644,35 +4299,42 @@ void LogicManager::CONS_Cond2_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_StartPart4(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterCond2);
- getCharacter(kCharacterCond2).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterCond2).characterPosition.position = 1500;
- getCharacter(kCharacterCond2).characterPosition.location = 0;
- getCharacter(kCharacterCond2).clothes = 0;
- getCharacterParams(kCharacterCond2, 8)[18] = 0;
- getCharacterParams(kCharacterCond2, 8)[7] = 0;
- getCharacterParams(kCharacterCond2, 8)[8] = 0;
- getCharacterParams(kCharacterCond2, 8)[2] = 0;
- getCharacterParams(kCharacterCond2, 8)[4] = 0;
- getCharacterParams(kCharacterCond2, 8)[3] = 0;
- getCharacterParams(kCharacterCond2, 8)[5] = 0;
- getCharacterParams(kCharacterCond2, 8)[10] = 0;
- getCharacterParams(kCharacterCond2, 8)[12] = 0;
- getCharacterParams(kCharacterCond2, 8)[13] = 0;
- getCharacterParams(kCharacterCond2, 8)[15] = 0;
- getCharacterParams(kCharacterCond2, 8)[19] = 0;
- getCharacterParams(kCharacterCond2, 8)[14] = 0;
- getCharacterParams(kCharacterCond2, 8)[1] = 1;
- setModel(111, 10);
- } else if (msg->action == 18 && getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 1) {
+ switch (msg->action) {
+ case 0:
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
+ Cond2Call(&LogicManager::CONS_Cond2_SitDown, 0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterCond2);
+ getCharacter(kCharacterCond2).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterCond2).characterPosition.position = 1500;
+ getCharacter(kCharacterCond2).characterPosition.location = 0;
+ getCharacter(kCharacterCond2).clothes = 0;
+ getCharacterParams(kCharacterCond2, 8)[18] = 0;
+ getCharacterParams(kCharacterCond2, 8)[7] = 0;
+ getCharacterParams(kCharacterCond2, 8)[8] = 0;
+ getCharacterParams(kCharacterCond2, 8)[2] = 0;
+ getCharacterParams(kCharacterCond2, 8)[4] = 0;
+ getCharacterParams(kCharacterCond2, 8)[3] = 0;
+ getCharacterParams(kCharacterCond2, 8)[5] = 0;
+ getCharacterParams(kCharacterCond2, 8)[10] = 0;
+ getCharacterParams(kCharacterCond2, 8)[12] = 0;
+ getCharacterParams(kCharacterCond2, 8)[13] = 0;
+ getCharacterParams(kCharacterCond2, 8)[15] = 0;
+ getCharacterParams(kCharacterCond2, 8)[19] = 0;
+ getCharacterParams(kCharacterCond2, 8)[14] = 0;
+ getCharacterParams(kCharacterCond2, 8)[1] = 1;
+ setModel(111, 10);
+ break;
+ case 18:
+ if (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 1) {
getCharacterParams(kCharacterCond2, 8)[9] = 1;
CONS_Cond2_OnDuty4(0, 0, 0, 0);
}
- } else {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
- Cond2Call(&LogicManager::CONS_Cond2_SitDown, 0, 0, 0, 0);
+
+ break;
+ default:
+ break;
}
}
@@ -3687,70 +4349,8 @@ void LogicManager::CONS_Cond2_OnDuty4(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_OnDuty4(HAND_PARAMS) {
- if (msg->action > 11) {
- if (msg->action > 17) {
- if (msg->action > 225358684) {
- if (msg->action == 226078300) {
- if (!getCharacterParams(kCharacterCond2, 8)[16] && !getCharacterParams(kCharacterCond2, 8)[0]) {
- playDialog(kCharacterCond2, "JAC2020", -1, 0);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 10;
- Cond2Call(&LogicManager::CONS_Cond2_DoSeqOtis, "697D", 0, 0, 0);
- }
- } else if (msg->action == 305159806 && !getCharacterParams(kCharacterCond2, 8)[16] && !getCharacterParams(kCharacterCond2, 8)[0]) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 13;
- Cond2Call(&LogicManager::CONS_Cond2_CathRattling, msg->param, 0, 0, 0);
- }
- } else if (msg->action == 225358684) {
- if (!getCharacterParams(kCharacterCond2, 8)[0]) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 12;
- Cond2Call(&LogicManager::CONS_Cond2_CathBuzzing, msg->param, 0, 0, 0);
- }
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
- case 1:
- goto LABEL_30;
- case 2:
- goto LABEL_42;
- case 3:
- goto LABEL_44;
- case 4:
- goto LABEL_48;
- case 5:
- goto LABEL_51;
- case 6:
- goto LABEL_54;
- case 10:
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 11;
- Cond2Call(&LogicManager::CONS_Cond2_SitDown, 0, 0, 0, 0);
- break;
- default:
- return;
- }
- }
- } else if (msg->action == 17) {
- if (!getCharacterParams(kCharacterCond2, 8)[16] && !getCharacterParams(kCharacterCond2, 8)[0]) {
- if (checkCathDir(kCarRedSleeping, 1)) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
- Cond2Call(&LogicManager::CONS_Cond2_Passing, 1, 0, 0, 0);
- } else if (checkCathDir(kCarRedSleeping, 23)) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 9;
- Cond2Call(&LogicManager::CONS_Cond2_Passing, 0, 0, 0, 0);
- }
- }
- } else if (msg->action == 12) {
- getCharacter(kCharacterCond2).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterCond2).characterPosition.position = 1500;
- getCharacter(kCharacterCond2).characterPosition.location = 0;
- takeItem(kItem5);
- }
- } else if (msg->action == 11) {
- if (!getCharacterParams(kCharacterCond2, 8)[16] && !getCharacterParams(kCharacterCond2, 8)[0]) {
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 7;
- Cond2Call(&LogicManager::CONS_Cond2_Passing, msg->param, msg->sender, 0, 0);
- }
- } else {
- if (msg->action)
- return;
+ switch (msg->action) {
+ case 0:
if (getCharacterParams(kCharacterCond2, 8)[18]) {
getCharacterParams(kCharacterCond2, 8)[9] = 0;
getCharacterParams(kCharacterCond2, 8)[14] = 0;
@@ -3766,64 +4366,73 @@ void LogicManager::HAND_Cond2_OnDuty4(HAND_PARAMS) {
getCharacterParams(kCharacterCond2, 8)[18] = 0;
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_WaitBombDefused, 0, 0, 0, 0);
- return;
+ break;
}
- LABEL_30:
+
if (getCharacterParams(kCharacterCond2, 8)[9]) {
if (!getCharacterCurrentParams(kCharacterCond2)[1])
getCharacterCurrentParams(kCharacterCond2)[1] = _gameTime + 4500;
+
if (getCharacterCurrentParams(kCharacterCond2)[2] != 0x7FFFFFFF && _gameTime) {
- if (getCharacterCurrentParams(kCharacterCond2)[1] < _gameTime)
- goto LABEL_40;
+ if (getCharacterCurrentParams(kCharacterCond2)[1] < _gameTime) {
+ getCharacterCurrentParams(kCharacterCond2)[2] = 0x7FFFFFFF;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
+ Cond2Call(&LogicManager::CONS_Cond2_ServiceAnna, 0, 0, 0, 0);
+ break;
+ }
+
if (!cathInCorridor(kCarRedSleeping) || !getCharacterCurrentParams(kCharacterCond2)[2]) {
getCharacterCurrentParams(kCharacterCond2)[2] = _gameTime;
- if (!_gameTime)
- goto LABEL_41;
+ if (!_gameTime) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
+ Cond2Call(&LogicManager::CONS_Cond2_ServiceAnna, 0, 0, 0, 0);
+ break;
+ }
}
+
if (getCharacterCurrentParams(kCharacterCond2)[2] < _gameTime) {
- LABEL_40:
getCharacterCurrentParams(kCharacterCond2)[2] = 0x7FFFFFFF;
- LABEL_41:
+
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
Cond2Call(&LogicManager::CONS_Cond2_ServiceAnna, 0, 0, 0, 0);
- return;
+ break;
}
}
}
- LABEL_42:
+
if (getCharacterParams(kCharacterCond2, 8)[14]) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
Cond2Call(&LogicManager::CONS_Cond2_TakeMaxBack, 0, 0, 0, 0);
- return;
+ break;
}
- LABEL_44:
+
if (!getCharacterCurrentParams(kCharacterCond2)[0]) {
if (_gameTime > 2394000 && !getCharacterCurrentParams(kCharacterCond2)[3]) {
getCharacterCurrentParams(kCharacterCond2)[3] = 1;
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
Cond2Call(&LogicManager::CONS_Cond2_MakeAllBeds4, 0, 0, 0, 0);
- return;
+ break;
}
- LABEL_48:
+
if (_gameTime > 2434500 && !getCharacterCurrentParams(kCharacterCond2)[4]) {
getCharacterCurrentParams(kCharacterCond2)[4] = 1;
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
Cond2Call(&LogicManager::CONS_Cond2_BathroomTrip, 0, 0, 0, 0);
- return;
+ break;
}
- LABEL_51:
+
if (_gameTime > 2448000 && !getCharacterCurrentParams(kCharacterCond2)[5]) {
getCharacterCurrentParams(kCharacterCond2)[5] = 1;
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 6;
Cond2Call(&LogicManager::CONS_Cond2_BathroomTrip, 0, 0, 0, 0);
- return;
+ break;
}
}
- LABEL_54:
+
if (_gameTime > 2538000 && !getCharacterParams(kCharacterCond2, 8)[0] && !getCharacterParams(kCharacterCond2, 8)[16]) {
if (getCharacterCurrentParams(kCharacterCond2)[6] || (getCharacterCurrentParams(kCharacterCond2)[6] = _gameTime + 2700, _gameTime != -2700)) {
if (getCharacterCurrentParams(kCharacterCond2)[6] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterCond2)[6] = 0x7FFFFFFF;
}
@@ -3833,6 +4442,167 @@ void LogicManager::HAND_Cond2_OnDuty4(HAND_PARAMS) {
startCycOtis(kCharacterCond2, "697F");
getCharacterCurrentParams(kCharacterCond2)[6] = 0;
}
+
+ break;
+ case 11:
+ if (!getCharacterParams(kCharacterCond2, 8)[16] && !getCharacterParams(kCharacterCond2, 8)[0]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 7;
+ Cond2Call(&LogicManager::CONS_Cond2_Passing, msg->param, msg->sender, 0, 0);
+ }
+
+ break;
+ case 17:
+ if (!getCharacterParams(kCharacterCond2, 8)[16] && !getCharacterParams(kCharacterCond2, 8)[0]) {
+ if (checkCathDir(kCarRedSleeping, 1)) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
+ Cond2Call(&LogicManager::CONS_Cond2_Passing, 1, 0, 0, 0);
+ } else if (checkCathDir(kCarRedSleeping, 23)) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 9;
+ Cond2Call(&LogicManager::CONS_Cond2_Passing, 0, 0, 0, 0);
+ }
+ }
+
+ break;
+ case 12:
+ getCharacter(kCharacterCond2).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterCond2).characterPosition.position = 1500;
+ getCharacter(kCharacterCond2).characterPosition.location = 0;
+ takeItem(kItem5);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
+ case 1:
+ if (getCharacterParams(kCharacterCond2, 8)[9]) {
+ if (!getCharacterCurrentParams(kCharacterCond2)[1])
+ getCharacterCurrentParams(kCharacterCond2)[1] = _gameTime + 4500;
+ if (getCharacterCurrentParams(kCharacterCond2)[2] != 0x7FFFFFFF && _gameTime) {
+ if (getCharacterCurrentParams(kCharacterCond2)[1] < _gameTime) {
+ getCharacterCurrentParams(kCharacterCond2)[2] = 0x7FFFFFFF;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
+ Cond2Call(&LogicManager::CONS_Cond2_ServiceAnna, 0, 0, 0, 0);
+ break;
+ }
+
+ if (!cathInCorridor(kCarRedSleeping) || !getCharacterCurrentParams(kCharacterCond2)[2]) {
+ getCharacterCurrentParams(kCharacterCond2)[2] = _gameTime;
+ if (!_gameTime) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
+ Cond2Call(&LogicManager::CONS_Cond2_ServiceAnna, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterCond2)[2] < _gameTime) {
+ getCharacterCurrentParams(kCharacterCond2)[2] = 0x7FFFFFFF;
+
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
+ Cond2Call(&LogicManager::CONS_Cond2_ServiceAnna, 0, 0, 0, 0);
+ break;
+ }
+ }
+ }
+
+ // fall through
+ case 2:
+ if (getCharacterParams(kCharacterCond2, 8)[14]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
+ Cond2Call(&LogicManager::CONS_Cond2_TakeMaxBack, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 3:
+ if (!getCharacterCurrentParams(kCharacterCond2)[0]) {
+ if (_gameTime > 2394000 && !getCharacterCurrentParams(kCharacterCond2)[3]) {
+ getCharacterCurrentParams(kCharacterCond2)[3] = 1;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
+ Cond2Call(&LogicManager::CONS_Cond2_MakeAllBeds4, 0, 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2434500 && !getCharacterCurrentParams(kCharacterCond2)[4]) {
+ getCharacterCurrentParams(kCharacterCond2)[4] = 1;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
+ Cond2Call(&LogicManager::CONS_Cond2_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2448000 && !getCharacterCurrentParams(kCharacterCond2)[5]) {
+ getCharacterCurrentParams(kCharacterCond2)[5] = 1;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 6;
+ Cond2Call(&LogicManager::CONS_Cond2_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ // fall through
+ case 4:
+ if (_gameTime > 2434500 && !getCharacterCurrentParams(kCharacterCond2)[4]) {
+ getCharacterCurrentParams(kCharacterCond2)[4] = 1;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
+ Cond2Call(&LogicManager::CONS_Cond2_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 5:
+ if (_gameTime > 2448000 && !getCharacterCurrentParams(kCharacterCond2)[5]) {
+ getCharacterCurrentParams(kCharacterCond2)[5] = 1;
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 6;
+ Cond2Call(&LogicManager::CONS_Cond2_BathroomTrip, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 6:
+ if (_gameTime > 2538000 && !getCharacterParams(kCharacterCond2, 8)[0] && !getCharacterParams(kCharacterCond2, 8)[16]) {
+ if (getCharacterCurrentParams(kCharacterCond2)[6] || (getCharacterCurrentParams(kCharacterCond2)[6] = _gameTime + 2700, _gameTime != -2700)) {
+ if (getCharacterCurrentParams(kCharacterCond2)[6] >= _gameTime)
+ break;
+
+ getCharacterCurrentParams(kCharacterCond2)[6] = 0x7FFFFFFF;
+ }
+
+ getCharacterParams(kCharacterCond2, 8)[1] = 0;
+ getCharacterParams(kCharacterCond2, 8)[0] = 1;
+ startCycOtis(kCharacterCond2, "697F");
+ getCharacterCurrentParams(kCharacterCond2)[6] = 0;
+ }
+
+ break;
+ case 10:
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 11;
+ Cond2Call(&LogicManager::CONS_Cond2_SitDown, 0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 226078300:
+ if (!getCharacterParams(kCharacterCond2, 8)[16] && !getCharacterParams(kCharacterCond2, 8)[0]) {
+ playDialog(kCharacterCond2, "JAC2020", -1, 0);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 10;
+ Cond2Call(&LogicManager::CONS_Cond2_DoSeqOtis, "697D", 0, 0, 0);
+ }
+
+ break;
+ case 305159806:
+ if (!getCharacterParams(kCharacterCond2, 8)[16] && !getCharacterParams(kCharacterCond2, 8)[0]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 13;
+ Cond2Call(&LogicManager::CONS_Cond2_CathRattling, msg->param, 0, 0, 0);
+ }
+
+ break;
+ case 225358684:
+ if (!getCharacterParams(kCharacterCond2, 8)[0]) {
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 12;
+ Cond2Call(&LogicManager::CONS_Cond2_CathBuzzing, msg->param, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -3854,7 +4624,7 @@ void LogicManager::HAND_Cond2_WaitBombDefused(HAND_PARAMS) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 540, 0, 0);
} else {
- getCharacter(kCharacterCond2).characterPosition.car = 8;
+ getCharacter(kCharacterCond2).characterPosition.car = kCarLocomotive;
getCharacter(kCharacterCond2).characterPosition.position = 540;
}
@@ -3863,7 +4633,7 @@ void LogicManager::HAND_Cond2_WaitBombDefused(HAND_PARAMS) {
switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
case 1:
endGraphics(kCharacterCond2);
- getCharacter(kCharacterCond2).characterPosition.car = 8;
+ getCharacter(kCharacterCond2).characterPosition.car = kCarLocomotive;
break;
case 2:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
@@ -3874,6 +4644,8 @@ void LogicManager::HAND_Cond2_WaitBombDefused(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
break;
+ default:
+ break;
}
break;
@@ -3882,6 +4654,8 @@ void LogicManager::HAND_Cond2_WaitBombDefused(HAND_PARAMS) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 1500, 0, 0);
break;
+ default:
+ break;
}
}
@@ -3939,13 +4713,16 @@ void LogicManager::HAND_Cond2_ServiceAnna(HAND_PARAMS) {
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
break;
default:
- return;
+ break;
}
+
break;
case 123712592:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 6;
Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 2000, 0, 0);
break;
+ default:
+ break;
}
}
@@ -3960,10 +4737,12 @@ void LogicManager::CONS_Cond2_MakeAllBeds4(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_MakeAllBeds4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_GetUp, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
@@ -4031,8 +4810,12 @@ void LogicManager::HAND_Cond2_MakeAllBeds4(HAND_PARAMS) {
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -4047,16 +4830,19 @@ void LogicManager::CONS_Cond2_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_StartPart5(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterCond2);
- getCharacter(kCharacterCond2).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterCond2).characterPosition.position = 3969;
- getCharacter(kCharacterCond2).characterPosition.location = 1;
- getCharacter(kCharacterCond2).inventoryItem = kItemNone;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Cond2_Prisoner(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterCond2);
+ getCharacter(kCharacterCond2).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterCond2).characterPosition.position = 3969;
+ getCharacter(kCharacterCond2).characterPosition.location = 1;
+ getCharacter(kCharacterCond2).inventoryItem = kItemNone;
+ break;
+ default:
+ break;
}
}
@@ -4071,8 +4857,13 @@ void LogicManager::CONS_Cond2_Prisoner(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_Prisoner(HAND_PARAMS) {
- if (msg->action == 70549068)
+ switch (msg->action) {
+ case 70549068:
CONS_Cond2_ReturnSeat(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Cond2_ReturnSeat(CONS_PARAMS) {
@@ -4086,16 +4877,24 @@ void LogicManager::CONS_Cond2_ReturnSeat(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_ReturnSeat(HAND_PARAMS) {
- if (msg->action == 12) {
- getCharacter(kCharacterCond2).characterPosition.car = 4;
+ switch (msg->action) {
+ case 12:
+ getCharacter(kCharacterCond2).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterCond2).characterPosition.position = 7500;
getCharacter(kCharacterCond2).characterPosition.location = 0;
playDialog(kCharacterCond2, "Jac5010", -1, 0);
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 2000, 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 1) {
- startCycOtis(kCharacterCond2, "627K");
- CONS_Cond2_Waiting5(0, 0, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 1) {
+ startCycOtis(kCharacterCond2, "627K");
+ CONS_Cond2_Waiting5(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -4110,12 +4909,18 @@ void LogicManager::CONS_Cond2_Waiting5(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_Waiting5(HAND_PARAMS) {
- if (msg->action == 18) {
+ switch (msg->action) {
+ case 18:
if (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] == 1)
CONS_Cond2_MakeRounds(0, 0, 0, 0);
- } else if (msg->action == 155991520) {
+
+ break;
+ case 155991520:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_DoWait, 225, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -4130,11 +4935,13 @@ void LogicManager::CONS_Cond2_MakeRounds(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_MakeRounds(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterCond2).characterPosition.position = 2088;
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_DoWalk, 4, 4840, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
case 1:
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 2;
@@ -4154,7 +4961,7 @@ void LogicManager::HAND_Cond2_MakeRounds(HAND_PARAMS) {
case 4:
getCharacter(kCharacterCond2).characterPosition.location = 1;
endGraphics(kCharacterCond2);
- setDoor(36, 0, 3, 10, 9);
+ setDoor(36, kCharacterCath, 3, 10, 9);
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
Cond2Call(&LogicManager::CONS_Cond2_DoDialog, "Reb5010", 0, 0, 0);
break;
@@ -4179,8 +4986,12 @@ void LogicManager::HAND_Cond2_MakeRounds(HAND_PARAMS) {
CONS_Cond2_InCompH(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -4195,52 +5006,30 @@ void LogicManager::CONS_Cond2_InCompH(CONS_PARAMS) {
}
void LogicManager::HAND_Cond2_InCompH(HAND_PARAMS) {
- if (msg->action > 9) {
- if (msg->action > 17) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
- case 1:
- goto LABEL_29;
- case 2:
- case 3:
- getCharacterCurrentParams(kCharacterCond2)[2]++;
- if (getCharacterCurrentParams(kCharacterCond2)[2] == 1) {
- setDoor(39, 4, 1, 0, 0);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
- Cond2Call(&LogicManager::CONS_Cond2_DoDialog, "Jac5002", 0, 0, 0);
- } else if (getCharacterCurrentParams(kCharacterCond2)[2] == 2) {
- setDoor(39, 4, 1, 0, 0);
- getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
- Cond2Call(&LogicManager::CONS_Cond2_DoDialog, "Jac5002A", 0, 0, 0);
- }
- break;
- case 4:
- getCharacterCurrentParams(kCharacterCond2)[0] = 1;
- setDoor(39, 4, 1, 14, 0);
- break;
- case 5:
- getCharacterCurrentParams(kCharacterCond2)[1] = 1;
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterCond2)[0]) {
+ if (getCharacterCurrentParams(kCharacterCond2)[3] ||
+ (getCharacterCurrentParams(kCharacterCond2)[3] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterCond2)[3] >= _currentGameSessionTicks)
break;
- default:
- return;
- }
- } else if (msg->action == 135800432) {
- CONS_Cond2_Disappear(0, 0, 0, 0);
- }
- } else if (msg->action == 17) {
- if (getCharacterCurrentParams(kCharacterCond2)[1] || getCharacterCurrentParams(kCharacterCond2)[0]) {
- getCharacterCurrentParams(kCharacterCond2)[1] = 0;
- getCharacterCurrentParams(kCharacterCond2)[0] = 0;
- setDoor(39, 4, 1, 10, 9);
- getCharacterCurrentParams(kCharacterCond2)[2] = 0;
+
+ getCharacterCurrentParams(kCharacterCond2)[3] = 0x7FFFFFFF;
}
- } else if (msg->action == 12) {
- LABEL_29:
- setDoor(39, 4, 1, 10, 9);
+
+ getCharacterCurrentParams(kCharacterCond2)[0] = 0;
+ getCharacterCurrentParams(kCharacterCond2)[1] = 1;
+ setDoor(39, kCharacterCond2, 1, 0, 0);
+ getCharacterCurrentParams(kCharacterCond2)[3] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterCond2)[3] = 0;
}
- } else if (msg->action >= 8) {
+
+ break;
+ case 8:
+ case 9:
if (getCharacterCurrentParams(kCharacterCond2)[0]) {
- setDoor(39, 4, 1, 0, 0);
+ setDoor(39, kCharacterCond2, 1, 0, 0);
getCharacterCurrentParams(kCharacterCond2)[0] = 0;
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_DoDialog, getCathJustChecking(), 0, 0, 0);
@@ -4251,21 +5040,56 @@ void LogicManager::HAND_Cond2_InCompH(HAND_PARAMS) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
Cond2Call(&LogicManager::CONS_Cond2_DoDialog, "LIB013", 0, 0, 0);
}
- } else if (msg->action == 0) {
- if (getCharacterCurrentParams(kCharacterCond2)[0]) {
- if (getCharacterCurrentParams(kCharacterCond2)[3] ||
- (getCharacterCurrentParams(kCharacterCond2)[3] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterCond2)[3] >= _currentGameSessionTicks)
- return;
- getCharacterCurrentParams(kCharacterCond2)[3] = 0x7FFFFFFF;
- }
+
+ break;
+ case 12:
+ setDoor(39, kCharacterCond2, 1, 10, 9);
+ break;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterCond2)[1] || getCharacterCurrentParams(kCharacterCond2)[0]) {
+ getCharacterCurrentParams(kCharacterCond2)[1] = 0;
getCharacterCurrentParams(kCharacterCond2)[0] = 0;
+ setDoor(39, kCharacterCond2, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterCond2)[2] = 0;
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8]) {
+ case 1:
+ setDoor(39, kCharacterCond2, 1, 10, 9);
+ break;
+ case 2:
+ case 3:
+ getCharacterCurrentParams(kCharacterCond2)[2]++;
+ if (getCharacterCurrentParams(kCharacterCond2)[2] == 1) {
+ setDoor(39, kCharacterCond2, 1, 0, 0);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
+ Cond2Call(&LogicManager::CONS_Cond2_DoDialog, "Jac5002", 0, 0, 0);
+ } else if (getCharacterCurrentParams(kCharacterCond2)[2] == 2) {
+ setDoor(39, kCharacterCond2, 1, 0, 0);
+ getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 5;
+ Cond2Call(&LogicManager::CONS_Cond2_DoDialog, "Jac5002A", 0, 0, 0);
+ }
+
+ break;
+ case 4:
+ getCharacterCurrentParams(kCharacterCond2)[0] = 1;
+ setDoor(39, kCharacterCond2, 1, 14, 0);
+ break;
+ case 5:
getCharacterCurrentParams(kCharacterCond2)[1] = 1;
- setDoor(39, 4, 1, 0, 0);
- getCharacterCurrentParams(kCharacterCond2)[3] = 0;
- } else {
- getCharacterCurrentParams(kCharacterCond2)[3] = 0;
+ break;
+ default:
+ break;
}
+
+ break;
+ case 135800432:
+ CONS_Cond2_Disappear(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
Commit: 5e5578449ce2057f45ff3d3aa193c8e4007bb1da
https://github.com/scummvm/scummvm/commit/5e5578449ce2057f45ff3d3aa193c8e4007bb1da
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up François logic
Changed paths:
engines/lastexpress/characters/francois.cpp
diff --git a/engines/lastexpress/characters/francois.cpp b/engines/lastexpress/characters/francois.cpp
index 0d5db2382c7..11dab04b1ba 100644
--- a/engines/lastexpress/characters/francois.cpp
+++ b/engines/lastexpress/characters/francois.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_Francois(int chapter) {
CONS_Francois_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -69,24 +69,32 @@ void LogicManager::CONS_Francois_DebugWalks(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_DebugWalks(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 1) {
- getCharacter(kCharacterFrancois).clothes++;
- if (getCharacter(kCharacterFrancois).clothes > 1)
- getCharacter(kCharacterFrancois).clothes = 0;
- } else if (msg->action == 12) {
- getCharacter(kCharacterFrancois).characterPosition.position = 0;
- getCharacter(kCharacterFrancois).characterPosition.location = 0;
- getCharacter(kCharacterFrancois).characterPosition.car = kCarGreenSleeping;
- getCharacter(kCharacterFrancois).inventoryItem = 0x80;
- getCharacterCurrentParams(kCharacterFrancois)[0] = 10000;
- }
- } else if (walk(kCharacterFrancois, kCarGreenSleeping, getCharacterCurrentParams(kCharacterFrancois)[0])) {
- if (getCharacterCurrentParams(kCharacterFrancois)[0] == 10000) {
- getCharacterCurrentParams(kCharacterFrancois)[0] = 0;
- } else {
- getCharacterCurrentParams(kCharacterFrancois)[0] = 10000;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterFrancois, kCarGreenSleeping, getCharacterCurrentParams(kCharacterFrancois)[0])) {
+ if (getCharacterCurrentParams(kCharacterFrancois)[0] == 10000) {
+ getCharacterCurrentParams(kCharacterFrancois)[0] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterFrancois)[0] = 10000;
+ }
}
+
+ break;
+ case 1:
+ getCharacter(kCharacterFrancois).clothes++;
+ if (getCharacter(kCharacterFrancois).clothes > 1)
+ getCharacter(kCharacterFrancois).clothes = 0;
+
+ break;
+ case 12:
+ getCharacter(kCharacterFrancois).characterPosition.position = 0;
+ getCharacter(kCharacterFrancois).characterPosition.location = 0;
+ getCharacter(kCharacterFrancois).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterFrancois).inventoryItem = 0x80;
+ getCharacterCurrentParams(kCharacterFrancois)[0] = 10000;
+ break;
+ default:
+ break;
}
}
@@ -103,11 +111,12 @@ void LogicManager::CONS_Francois_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_DoWait(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterFrancois)[1] ||
(getCharacterCurrentParams(kCharacterFrancois)[1] = _gameTime + getCharacterCurrentParams(kCharacterFrancois)[0], _gameTime + getCharacterCurrentParams(kCharacterFrancois)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterFrancois)[1] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterFrancois)[1] = 0x7FFFFFFF;
}
@@ -115,6 +124,9 @@ void LogicManager::HAND_Francois_DoWait(HAND_PARAMS) {
getCharacter(kCharacterFrancois).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -131,12 +143,17 @@ void LogicManager::CONS_Francois_DoSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_DoSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
getCharacter(kCharacterFrancois).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterFrancois, (char *)&getCharacterCurrentParams(kCharacterFrancois)[0]);
+ break;
+ default:
+ break;
}
}
@@ -155,15 +172,20 @@ void LogicManager::CONS_Francois_DoCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_DoCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterFrancois, getCharacterCurrentParams(kCharacterFrancois)[3]);
getCharacter(kCharacterFrancois).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterFrancois, (char *)&getCharacterCurrentParams(kCharacterFrancois)[0]);
blockAtDoor(kCharacterFrancois, getCharacterCurrentParams(kCharacterFrancois)[3]);
+ break;
+ default:
+ break;
}
}
@@ -182,14 +204,16 @@ void LogicManager::CONS_Francois_DoEnterCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_DoEnterCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterFrancois, getCharacterCurrentParams(kCharacterFrancois)[3]);
getCharacter(kCharacterFrancois).characterPosition.position = 5790;
getCharacter(kCharacterFrancois).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterFrancois, (char *)&getCharacterCurrentParams(kCharacterFrancois)[0]);
blockAtDoor(kCharacterFrancois, getCharacterCurrentParams(kCharacterFrancois)[3]);
getCharacter(kCharacterFrancois).characterPosition.location = 1;
@@ -203,6 +227,10 @@ void LogicManager::HAND_Francois_DoEnterCorrOtis(HAND_PARAMS) {
playDialog(0, "BUMP", -1, 0);
bumpCathFDoor(35);
}
+
+ break;
+ default:
+ break;
}
}
@@ -219,12 +247,17 @@ void LogicManager::CONS_Francois_DoDialog(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_DoDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterFrancois).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterFrancois, (char *)&getCharacterCurrentParams(kCharacterFrancois)[0], -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -242,22 +275,25 @@ void LogicManager::CONS_Francois_SaveGame(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_SaveGame(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- save(
- kCharacterFrancois,
- getCharacterCurrentParams(kCharacterFrancois)[0],
- getCharacterCurrentParams(kCharacterFrancois)[1]
- );
+ switch (msg->action) {
+ case 0:
+ getCharacter(kCharacterFrancois).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
+ fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
+ break;
+ case 12:
+ save(
+ kCharacterFrancois,
+ getCharacterCurrentParams(kCharacterFrancois)[0],
+ getCharacterCurrentParams(kCharacterFrancois)[1]
+ );
- getCharacter(kCharacterFrancois).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
- fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
- }
- } else {
getCharacter(kCharacterFrancois).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -301,6 +337,7 @@ void LogicManager::HAND_Francois_DoWalk(HAND_PARAMS) {
FrancoisCall(&LogicManager::CONS_Francois_SaveGame, 2, kEventFrancoisTradeWhistle, 0, 0);
}
}
+
break;
case 1:
if (msg->param.intParam == 18) {
@@ -328,6 +365,7 @@ void LogicManager::HAND_Francois_DoWalk(HAND_PARAMS) {
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 2;
FrancoisCall(&LogicManager::CONS_Francois_SaveGame, 2, kEventFrancoisShowBeetle, 0, 0);
}
+
break;
case 5:
case 6:
@@ -339,6 +377,7 @@ void LogicManager::HAND_Francois_DoWalk(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
}
+
break;
case 18:
if (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] == 1) {
@@ -350,6 +389,7 @@ void LogicManager::HAND_Francois_DoWalk(HAND_PARAMS) {
giveCathItem(kItemWhistle);
takeCathItem(kItemMatchBox);
+
_gameInventory[kItemBeetle].location = 2;
if (getCharacter(kCharacterFrancois).direction == 1) {
@@ -374,9 +414,10 @@ void LogicManager::HAND_Francois_DoWalk(HAND_PARAMS) {
getCharacter(kCharacterFrancois).inventoryItem = 0;
}
+
break;
default:
- return;
+ break;
}
}
@@ -391,31 +432,38 @@ void LogicManager::CONS_Francois_ExitComp(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_ExitComp(HAND_PARAMS) {
- if (msg->action != 12) {
- if (msg->action != 18)
- return;
+ switch (msg->action) {
+ case 12:
+ if (checkDoor(35) == 2) {
+ setDoor(35, kCharacterCath, 0, 255, 255);
+ send(kCharacterFrancois, kCharacterMadame, 134289824, 0);
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 1;
+ FrancoisCall(&LogicManager::CONS_Francois_DoCorrOtis, "605Cd", 35, 0, 0);
+ } else {
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 2;
+ FrancoisCall(&LogicManager::CONS_Francois_DoCorrOtis, "605Ed", 35, 0, 0);
+ }
+ break;
+ case 18:
if (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] == 1) {
setDoor(35, kCharacterCath, 2, 255, 255);
- } else if (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] != 2) {
- return;
- }
+ getCharacter(kCharacterFrancois).characterPosition.location = 0;
- getCharacter(kCharacterFrancois).characterPosition.location = 0;
+ getCharacter(kCharacterFrancois).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
+ fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
+ } else if (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] == 2) {
+ getCharacter(kCharacterFrancois).characterPosition.location = 0;
- getCharacter(kCharacterFrancois).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
- fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
- return;
- }
- if (checkDoor(35) == 2) {
- setDoor(35, kCharacterCath, 0, 255, 255);
- send(kCharacterFrancois, kCharacterMadame, 134289824, 0);
- getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 1;
- FrancoisCall(&LogicManager::CONS_Francois_DoCorrOtis, "605Cd", 35, 0, 0);
- } else {
- getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 2;
- FrancoisCall(&LogicManager::CONS_Francois_DoCorrOtis, "605Ed", 35, 0, 0);
+ getCharacter(kCharacterFrancois).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
+ fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -430,32 +478,34 @@ void LogicManager::CONS_Francois_EnterComp(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_EnterComp(HAND_PARAMS) {
- if (msg->action != 12) {
- if (msg->action != 18)
- return;
+ switch (msg->action) {
+ case 12:
+ if (checkDoor(35) == 2) {
+ setDoor(35, kCharacterCath, 0, 255, 255);
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 1;
+ FrancoisCall(&LogicManager::CONS_Francois_DoEnterCorrOtis, "605Bd", 35, 0, 0);
+ } else {
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 2;
+ FrancoisCall(&LogicManager::CONS_Francois_DoEnterCorrOtis, "605Dd", 35, 0, 0);
+ }
+ break;
+ case 18:
if (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] == 1) {
setDoor(35, kCharacterCath, 2, 255, 255);
send(kCharacterFrancois, kCharacterMadame, 102484312, 0);
- } else if (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] != 2) {
- return;
- }
+ } else if (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] == 2) {
+ getCharacter(kCharacterFrancois).characterPosition.location = 1;
+ endGraphics(kCharacterFrancois);
- getCharacter(kCharacterFrancois).characterPosition.location = 1;
- endGraphics(kCharacterFrancois);
+ getCharacter(kCharacterFrancois).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
+ fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
+ }
- getCharacter(kCharacterFrancois).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
- fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
- return;
- }
- if (checkDoor(35) == 2) {
- setDoor(35, kCharacterCath, 0, 255, 255);
- getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 1;
- FrancoisCall(&LogicManager::CONS_Francois_DoEnterCorrOtis, "605Bd", 35, 0, 0);
- } else {
- getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 2;
- FrancoisCall(&LogicManager::CONS_Francois_DoEnterCorrOtis, "605Dd", 35, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -472,224 +522,300 @@ void LogicManager::CONS_Francois_Rampage(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_Rampage(HAND_PARAMS) {
- if (msg->action > 5) {
- if (msg->action > 18) {
- if (msg->action == 102752636) {
- endGraphics(kCharacterFrancois);
- getCharacter(kCharacterFrancois).characterPosition.location = 1;
- getCharacter(kCharacterFrancois).characterPosition.position = 5790;
- getCharacter(kCharacterFrancois).clothes = 0;
- getCharacter(kCharacterFrancois).walkStepSize = 30;
- getCharacter(kCharacterFrancois).inventoryItem = 0;
+ switch (msg->action) {
+ case 0:
+ if (!whoRunningDialog(kCharacterFrancois)) {
+ bool skip = false; // Horrible way to unroll a goto...
- getCharacter(kCharacterFrancois).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
- fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
- } else if (msg->action == 205346192) {
- if (msg->sender == 4) {
- getCharacterCurrentParams(kCharacterFrancois)[7] = 1;
- } else if (msg->sender == 3) {
- getCharacterCurrentParams(kCharacterFrancois)[6] = 1;
+ if (!getCharacterCurrentParams(kCharacterFrancois)[8]) {
+ getCharacterCurrentParams(kCharacterFrancois)[8] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterFrancois)[5];
+ if (_currentGameSessionTicks + getCharacterCurrentParams(kCharacterFrancois)[5] == 0) {
+ skip = true;
}
}
- } else {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8]) {
+
+ if (skip || getCharacterCurrentParams(kCharacterFrancois)[8] < _currentGameSessionTicks) {
+ if (!skip) {
+ getCharacterCurrentParams(kCharacterFrancois)[8] = 0x7FFFFFFF;
+ }
+
+ switch (rnd(7)) {
+ case 0:
+ playDialog(kCharacterFrancois, "Fra1002A", -1, 0);
+ break;
case 1:
- getCharacter(kCharacterFrancois).clothes = 1;
- getCharacter(kCharacterFrancois).walkStepSize = 100;
- getCharacter(kCharacterFrancois).inventoryItem = 0;
- getCharacterCurrentParams(kCharacterFrancois)[1] = 3;
- getCharacterCurrentParams(kCharacterFrancois)[2] = 540;
- walk(kCharacterFrancois, getCharacterCurrentParams(kCharacterFrancois)[1], 540);
- getCharacterCurrentParams(kCharacterFrancois)[5] = 15 * rnd(7);
- return;
+ playDialog(kCharacterFrancois, "Fra1002B", -1, 0);
+ break;
case 2:
- send(kCharacterFrancois, kCharacterCond2, 168253822, 0);
- goto LABEL_56;
+ playDialog(kCharacterFrancois, "Fra1002C", -1, 0);
+ break;
case 3:
- LABEL_56:
- getCharacterCurrentParams(kCharacterFrancois)[4] = 0;
- getCharacterCurrentParams(kCharacterFrancois)[1] = 4;
- getCharacterCurrentParams(kCharacterFrancois)[2] = 9460;
- getCharacter(kCharacterFrancois).characterPosition.position = 2088;
- walk(kCharacterFrancois, getCharacterCurrentParams(kCharacterFrancois)[1], getCharacterCurrentParams(kCharacterFrancois)[2]);
- goto LABEL_57;
+ playDialog(kCharacterFrancois, "Fra1002D", -1, 0);
+ break;
case 4:
- getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 5;
- FrancoisCall(&LogicManager::CONS_Francois_EnterComp, 0, 0, 0, 0);
- return;
+ playDialog(kCharacterFrancois, "Fra1002E", -1, 0);
+ break;
case 5:
- getCharacter(kCharacterFrancois).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
- fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
- return;
case 6:
- if (_gameProgress[kProgressJacket] == 2) {
- if (!isNight()) {
- if (getCharacter(kCharacterFrancois).characterPosition.position <= getCharacter(kCharacterCath).characterPosition.position) {
- playNIS(kEventFrancoisWhistleD);
- } else {
- playNIS(kEventFrancoisWhistle);
- }
- } else if (getCharacter(kCharacterFrancois).characterPosition.position <= getCharacter(kCharacterCath).characterPosition.position) {
- playNIS(kEventFrancoisWhistleNightD);
- } else {
- playNIS(kEventFrancoisWhistleNight);
- }
- }
- if (getCharacter(kCharacterFrancois).direction == 1) {
- bumpCathFx(getCharacter(kCharacterFrancois).characterPosition.car, getCharacter(kCharacterFrancois).characterPosition.position - 750);
- } else {
- bumpCathRx(getCharacter(kCharacterFrancois).characterPosition.car, getCharacter(kCharacterFrancois).characterPosition.position + 750);
- }
- return;
+ playDialog(kCharacterFrancois, "Fra1002F", -1, 0);
+ break;
default:
- return;
+ break;
}
+
+ getCharacterCurrentParams(kCharacterFrancois)[5] = 15 * rnd(7);
+ getCharacterCurrentParams(kCharacterFrancois)[8] = 0;
}
- if (msg->action == 12) {
- getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 1;
- FrancoisCall(&LogicManager::CONS_Francois_ExitComp, 0, 0, 0, 0);
- }
- }
- return;
- }
- if (msg->action == 5) {
- if (_gameProgress[kProgressJacket] == 2 && !_gameEvents[kEventFrancoisWhistle] && !_gameEvents[kEventFrancoisWhistleD] && !_gameEvents[kEventFrancoisWhistleNight] && !_gameEvents[kEventFrancoisWhistleNightD]) {
- getCharacter(kCharacterFrancois).inventoryItem = 0x80;
}
- return;
- }
- if (msg->action) {
- if (msg->action == 1) {
+
+ if (!whoOnScreen(kCharacterFrancois) || !whoFacingCath(kCharacterFrancois))
getCharacter(kCharacterFrancois).inventoryItem = 0;
- if (whoRunningDialog(kCharacterFrancois))
- fadeDialog(kCharacterFrancois);
- getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 6;
- FrancoisCall(&LogicManager::CONS_Francois_SaveGame, 2, kEventFrancoisWhistle, 0, 0);
- }
- return;
- }
- if (!whoRunningDialog(kCharacterFrancois)) {
- if (!getCharacterCurrentParams(kCharacterFrancois)[8]) {
- getCharacterCurrentParams(kCharacterFrancois)[8] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterFrancois)[5];
- if (_currentGameSessionTicks + getCharacterCurrentParams(kCharacterFrancois)[5] == 0)
- goto LABEL_18;
+
+ if (walk(kCharacterFrancois, getCharacterCurrentParams(kCharacterFrancois)[1], getCharacterCurrentParams(kCharacterFrancois)[2])) {
+ getCharacterCurrentParams(kCharacterFrancois)[4] = 0;
+
+ if (getCharacterCurrentParams(kCharacterFrancois)[2] == 540) {
+ getCharacterCurrentParams(kCharacterFrancois)[1] = 4;
+
+ if (_gameProgress[kProgressChapter] != 1)
+ getCharacterCurrentParams(kCharacterFrancois)[1] = 3;
+
+ getCharacterCurrentParams(kCharacterFrancois)[2] = 9460;
+ } else {
+ getCharacterCurrentParams(kCharacterFrancois)[1] = 3;
+ getCharacterCurrentParams(kCharacterFrancois)[2] = 540;
+ getCharacterCurrentParams(kCharacterFrancois)[7] = 0;
+ getCharacterCurrentParams(kCharacterFrancois)[6] = 0;
+ send(kCharacterFrancois, kCharacterCond2, 225932896, 0);
+ send(kCharacterFrancois, kCharacterCond1, 225932896, 0);
+ }
}
- if (getCharacterCurrentParams(kCharacterFrancois)[8] < _currentGameSessionTicks) {
- getCharacterCurrentParams(kCharacterFrancois)[8] = 0x7FFFFFFF;
- LABEL_18:
- switch (rnd(7)) {
- case 0:
- playDialog(kCharacterFrancois, "Fra1002A", -1, 0);
- break;
- case 1:
- playDialog(kCharacterFrancois, "Fra1002B", -1, 0);
- break;
- case 2:
- playDialog(kCharacterFrancois, "Fra1002C", -1, 0);
- break;
- case 3:
- playDialog(kCharacterFrancois, "Fra1002D", -1, 0);
- break;
- case 4:
- playDialog(kCharacterFrancois, "Fra1002E", -1, 0);
- break;
- case 5:
- case 6:
- playDialog(kCharacterFrancois, "Fra1002F", -1, 0);
- break;
- default:
- break;
+
+ if (!nearX(kCharacterFrancois, 2000, 500) || getCharacter(kCharacterFrancois).direction != 2) {
+ if (_gameProgress[kProgressChapter] == 1) {
+ if (checkLoc(kCharacterFrancois, kCarRedSleeping) &&
+ (whoOnScreen(kCharacterFrancois) || getCharacterCurrentParams(kCharacterFrancois)[0] < _gameTime || getCharacterCurrentParams(kCharacterFrancois)[3]) &&
+ !getCharacterCurrentParams(kCharacterFrancois)[4] && getCharacter(kCharacterFrancois).characterPosition.position < getCharacter(kCharacterMadame).characterPosition.position) {
+
+ if (getCharacter(kCharacterFrancois).direction == 2) {
+ send(kCharacterFrancois, kCharacterMadame, 202221040, 0);
+ getCharacterCurrentParams(kCharacterFrancois)[4] = 1;
+ getCharacterCurrentParams(kCharacterFrancois)[3] = 1;
+ } else if (getCharacterCurrentParams(kCharacterFrancois)[3] && nearChar(kCharacterFrancois, kCharacterMadame, 1000)) {
+ send(kCharacterFrancois, kCharacterMadame, 168986720, 0);
+ getCharacterCurrentParams(kCharacterFrancois)[4] = 1;
+ }
+ }
+ } else if (getCharacterCurrentParams(kCharacterFrancois)[0] < _gameTime) {
+ getCharacter(kCharacterFrancois).clothes = 0;
+ getCharacter(kCharacterFrancois).walkStepSize = 30;
+ getCharacter(kCharacterFrancois).inventoryItem = 0;
+
+ if (whoRunningDialog(kCharacterFrancois))
+ fadeDialog(kCharacterFrancois);
+
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 4;
+ FrancoisCall(&LogicManager::CONS_Francois_DoWalk, 4, 5790, 0, 0);
}
- getCharacterCurrentParams(kCharacterFrancois)[5] = 15 * rnd(7);
- getCharacterCurrentParams(kCharacterFrancois)[8] = 0;
+
+ break;
}
- }
- if (!whoOnScreen(kCharacterFrancois) || !whoFacingCath(20))
- getCharacter(kCharacterFrancois).inventoryItem = 0;
- if (walk(kCharacterFrancois, getCharacterCurrentParams(kCharacterFrancois)[1], getCharacterCurrentParams(kCharacterFrancois)[2])) {
- getCharacterCurrentParams(kCharacterFrancois)[4] = 0;
- if (getCharacterCurrentParams(kCharacterFrancois)[2] == 540) {
- getCharacterCurrentParams(kCharacterFrancois)[1] = 4;
- if (_gameProgress[kProgressChapter] != 1)
- getCharacterCurrentParams(kCharacterFrancois)[1] = 3;
- getCharacterCurrentParams(kCharacterFrancois)[2] = 9460;
- } else {
- getCharacterCurrentParams(kCharacterFrancois)[1] = 3;
- getCharacterCurrentParams(kCharacterFrancois)[2] = 540;
- getCharacterCurrentParams(kCharacterFrancois)[7] = 0;
- getCharacterCurrentParams(kCharacterFrancois)[6] = 0;
- send(kCharacterFrancois, kCharacterCond2, 225932896, 0);
- send(kCharacterFrancois, kCharacterCond1, 225932896, 0);
+
+ if (checkLoc(kCharacterFrancois, kCarRedSleeping) && getCharacterCurrentParams(kCharacterFrancois)[7]) {
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 2;
+ FrancoisCall(&LogicManager::CONS_Francois_DoSeqOtis, "605A", 0, 0, 0);
+ break;
}
- }
- if (!nearX(kCharacterFrancois, 2000, 500) || getCharacter(kCharacterFrancois).direction != 2)
- goto LABEL_57;
- if (checkLoc(kCharacterFrancois, kCarRedSleeping) && getCharacterCurrentParams(kCharacterFrancois)[7]) {
- getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 2;
- FrancoisCall(&LogicManager::CONS_Francois_DoSeqOtis, "605A", 0, 0, 0);
- return;
- }
- if (checkLoc(kCharacterFrancois, kCarGreenSleeping) && getCharacterCurrentParams(kCharacterFrancois)[6]) {
- getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 3;
- FrancoisCall(&LogicManager::CONS_Francois_DoSeqOtis, "605A", 0, 0, 0);
- } else {
- LABEL_57:
- if (_gameProgress[kProgressChapter] == 1) {
- if (checkLoc(kCharacterFrancois, kCarRedSleeping) &&
- (whoOnScreen(kCharacterFrancois) || getCharacterCurrentParams(kCharacterFrancois)[0] < _gameTime || getCharacterCurrentParams(kCharacterFrancois)[3]) &&
- !getCharacterCurrentParams(kCharacterFrancois)[4] && getCharacter(kCharacterFrancois).characterPosition.position < getCharacter(kCharacterMadame).characterPosition.position) {
- if (getCharacter(kCharacterFrancois).direction == 2) {
- send(kCharacterFrancois, kCharacterMadame, 202221040, 0);
- getCharacterCurrentParams(kCharacterFrancois)[4] = 1;
- getCharacterCurrentParams(kCharacterFrancois)[3] = 1;
- } else if (getCharacterCurrentParams(kCharacterFrancois)[3] && nearChar(kCharacterFrancois, kCharacterMadame, 0x3E8)) {
- send(kCharacterFrancois, kCharacterMadame, 168986720, 0);
- getCharacterCurrentParams(kCharacterFrancois)[4] = 1;
+
+ if (checkLoc(kCharacterFrancois, kCarGreenSleeping) && getCharacterCurrentParams(kCharacterFrancois)[6]) {
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 3;
+ FrancoisCall(&LogicManager::CONS_Francois_DoSeqOtis, "605A", 0, 0, 0);
+ } else {
+ if (_gameProgress[kProgressChapter] == 1) {
+ if (checkLoc(kCharacterFrancois, kCarRedSleeping) &&
+ (whoOnScreen(kCharacterFrancois) || getCharacterCurrentParams(kCharacterFrancois)[0] < _gameTime || getCharacterCurrentParams(kCharacterFrancois)[3]) &&
+ !getCharacterCurrentParams(kCharacterFrancois)[4] && getCharacter(kCharacterFrancois).characterPosition.position < getCharacter(kCharacterMadame).characterPosition.position) {
+
+ if (getCharacter(kCharacterFrancois).direction == 2) {
+ send(kCharacterFrancois, kCharacterMadame, 202221040, 0);
+ getCharacterCurrentParams(kCharacterFrancois)[4] = 1;
+ getCharacterCurrentParams(kCharacterFrancois)[3] = 1;
+ } else if (getCharacterCurrentParams(kCharacterFrancois)[3] && nearChar(kCharacterFrancois, kCharacterMadame, 1000)) {
+ send(kCharacterFrancois, kCharacterMadame, 168986720, 0);
+ getCharacterCurrentParams(kCharacterFrancois)[4] = 1;
+ }
}
+ } else if (getCharacterCurrentParams(kCharacterFrancois)[0] < _gameTime) {
+ getCharacter(kCharacterFrancois).clothes = 0;
+ getCharacter(kCharacterFrancois).walkStepSize = 30;
+ getCharacter(kCharacterFrancois).inventoryItem = 0;
+
+ if (whoRunningDialog(kCharacterFrancois))
+ fadeDialog(kCharacterFrancois);
+
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 4;
+ FrancoisCall(&LogicManager::CONS_Francois_DoWalk, 4, 5790, 0, 0);
}
- } else if (getCharacterCurrentParams(kCharacterFrancois)[0] < _gameTime) {
- getCharacter(kCharacterFrancois).clothes = 0;
- getCharacter(kCharacterFrancois).walkStepSize = 30;
- getCharacter(kCharacterFrancois).inventoryItem = 0;
- if (whoRunningDialog(kCharacterFrancois))
- fadeDialog(kCharacterFrancois);
- getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 4;
- FrancoisCall(&LogicManager::CONS_Francois_DoWalk, 4, 5790, 0, 0);
}
- }
-}
-void LogicManager::CONS_Francois_TakeWalk(CONS_PARAMS) {
- CharacterCallParams *params = &getCharacter(kCharacterFrancois).callParams[getCharacter(kCharacterFrancois).currentCall];
- _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, &LogicManager::HAND_Francois_TakeWalk);
- getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall] = 12;
+ break;
+ case 1:
+ getCharacter(kCharacterFrancois).inventoryItem = 0;
- params->clear();
+ if (whoRunningDialog(kCharacterFrancois))
+ fadeDialog(kCharacterFrancois);
- fedEx(kCharacterFrancois, kCharacterFrancois, 12, 0);
-}
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 6;
+ FrancoisCall(&LogicManager::CONS_Francois_SaveGame, 2, kEventFrancoisWhistle, 0, 0);
+ break;
+ case 5:
+ if (_gameProgress[kProgressJacket] == 2 && !_gameEvents[kEventFrancoisWhistle] && !_gameEvents[kEventFrancoisWhistleD] && !_gameEvents[kEventFrancoisWhistleNight] && !_gameEvents[kEventFrancoisWhistleNightD]) {
+ getCharacter(kCharacterFrancois).inventoryItem = 0x80;
+ }
-void LogicManager::HAND_Francois_TakeWalk(HAND_PARAMS) {
- if (msg->action == 12) {
+ break;
+ case 12:
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 1;
FrancoisCall(&LogicManager::CONS_Francois_ExitComp, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8]) {
case 1:
- getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 2;
- FrancoisCall(&LogicManager::CONS_Francois_DoWalk, 4, 9460, 0, 0);
+ getCharacter(kCharacterFrancois).clothes = 1;
+ getCharacter(kCharacterFrancois).walkStepSize = 100;
+ getCharacter(kCharacterFrancois).inventoryItem = 0;
+ getCharacterCurrentParams(kCharacterFrancois)[1] = 3;
+ getCharacterCurrentParams(kCharacterFrancois)[2] = 540;
+ walk(kCharacterFrancois, getCharacterCurrentParams(kCharacterFrancois)[1], 540);
+ getCharacterCurrentParams(kCharacterFrancois)[5] = 15 * rnd(7);
break;
case 2:
- getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 3;
- FrancoisCall(&LogicManager::CONS_Francois_DoWait, 675, 0, 0, 0);
- break;
+ send(kCharacterFrancois, kCharacterCond2, 168253822, 0);
+
+ // fall through
case 3:
- getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 4;
- FrancoisCall(&LogicManager::CONS_Francois_DoWalk, 4, 540, 0, 0);
- break;
+ getCharacterCurrentParams(kCharacterFrancois)[4] = 0;
+ getCharacterCurrentParams(kCharacterFrancois)[1] = 4;
+ getCharacterCurrentParams(kCharacterFrancois)[2] = 9460;
+ getCharacter(kCharacterFrancois).characterPosition.position = 2088;
+ walk(kCharacterFrancois, getCharacterCurrentParams(kCharacterFrancois)[1], getCharacterCurrentParams(kCharacterFrancois)[2]);
+
+ if (_gameProgress[kProgressChapter] == 1) {
+ if (checkLoc(kCharacterFrancois, kCarRedSleeping) &&
+ (whoOnScreen(kCharacterFrancois) || getCharacterCurrentParams(kCharacterFrancois)[0] < _gameTime || getCharacterCurrentParams(kCharacterFrancois)[3]) &&
+ !getCharacterCurrentParams(kCharacterFrancois)[4] && getCharacter(kCharacterFrancois).characterPosition.position < getCharacter(kCharacterMadame).characterPosition.position) {
+
+ if (getCharacter(kCharacterFrancois).direction == 2) {
+ send(kCharacterFrancois, kCharacterMadame, 202221040, 0);
+ getCharacterCurrentParams(kCharacterFrancois)[4] = 1;
+ getCharacterCurrentParams(kCharacterFrancois)[3] = 1;
+ } else if (getCharacterCurrentParams(kCharacterFrancois)[3] && nearChar(kCharacterFrancois, kCharacterMadame, 1000)) {
+ send(kCharacterFrancois, kCharacterMadame, 168986720, 0);
+ getCharacterCurrentParams(kCharacterFrancois)[4] = 1;
+ }
+ }
+ } else if (getCharacterCurrentParams(kCharacterFrancois)[0] < _gameTime) {
+ getCharacter(kCharacterFrancois).clothes = 0;
+ getCharacter(kCharacterFrancois).walkStepSize = 30;
+ getCharacter(kCharacterFrancois).inventoryItem = 0;
+ if (whoRunningDialog(kCharacterFrancois))
+ fadeDialog(kCharacterFrancois);
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 4;
+ FrancoisCall(&LogicManager::CONS_Francois_DoWalk, 4, 5790, 0, 0);
+ }
+
+ break;
+ case 4:
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 5;
+ FrancoisCall(&LogicManager::CONS_Francois_EnterComp, 0, 0, 0, 0);
+ break;
+ case 5:
+ getCharacter(kCharacterFrancois).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
+ fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
+ break;
+ case 6:
+ if (_gameProgress[kProgressJacket] == 2) {
+ if (!isNight()) {
+ if (getCharacter(kCharacterFrancois).characterPosition.position <= getCharacter(kCharacterCath).characterPosition.position) {
+ playNIS(kEventFrancoisWhistleD);
+ } else {
+ playNIS(kEventFrancoisWhistle);
+ }
+ } else if (getCharacter(kCharacterFrancois).characterPosition.position <= getCharacter(kCharacterCath).characterPosition.position) {
+ playNIS(kEventFrancoisWhistleNightD);
+ } else {
+ playNIS(kEventFrancoisWhistleNight);
+ }
+ }
+
+ if (getCharacter(kCharacterFrancois).direction == 1) {
+ bumpCathFx(getCharacter(kCharacterFrancois).characterPosition.car, getCharacter(kCharacterFrancois).characterPosition.position - 750);
+ } else {
+ bumpCathRx(getCharacter(kCharacterFrancois).characterPosition.car, getCharacter(kCharacterFrancois).characterPosition.position + 750);
+ }
+
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 102752636:
+ endGraphics(kCharacterFrancois);
+ getCharacter(kCharacterFrancois).characterPosition.location = 1;
+ getCharacter(kCharacterFrancois).characterPosition.position = 5790;
+ getCharacter(kCharacterFrancois).clothes = 0;
+ getCharacter(kCharacterFrancois).walkStepSize = 30;
+ getCharacter(kCharacterFrancois).inventoryItem = 0;
+
+ getCharacter(kCharacterFrancois).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
+ fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
+ break;
+ case 205346192:
+ if (msg->sender == 4) {
+ getCharacterCurrentParams(kCharacterFrancois)[7] = 1;
+ } else if (msg->sender == 3) {
+ getCharacterCurrentParams(kCharacterFrancois)[6] = 1;
+ }
+
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_Francois_TakeWalk(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterFrancois).callParams[getCharacter(kCharacterFrancois).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, &LogicManager::HAND_Francois_TakeWalk);
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall] = 12;
+
+ params->clear();
+
+ fedEx(kCharacterFrancois, kCharacterFrancois, 12, 0);
+}
+
+void LogicManager::HAND_Francois_TakeWalk(HAND_PARAMS) {
+ switch (msg->action) {
+ case 12:
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 1;
+ FrancoisCall(&LogicManager::CONS_Francois_ExitComp, 0, 0, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 2;
+ FrancoisCall(&LogicManager::CONS_Francois_DoWalk, 4, 9460, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 3;
+ FrancoisCall(&LogicManager::CONS_Francois_DoWait, 675, 0, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 4;
+ FrancoisCall(&LogicManager::CONS_Francois_DoWalk, 4, 540, 0, 0);
+ break;
case 4:
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 5;
FrancoisCall(&LogicManager::CONS_Francois_DoWait, 675, 0, 0, 0);
@@ -708,8 +834,12 @@ void LogicManager::HAND_Francois_TakeWalk(HAND_PARAMS) {
fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -755,11 +885,15 @@ void LogicManager::HAND_Francois_HaremVisit(HAND_PARAMS) {
case 6:
getCharacter(kCharacterFrancois).characterPosition.location = 0;
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 7;
- FrancoisCall(&LogicManager::CONS_Francois_DoWalk, 4, 0x12E8, 0, 0);
+ FrancoisCall(&LogicManager::CONS_Francois_DoWalk, 4, 4840, 0, 0);
break;
case 7:
- if (cathHasItem(kItemWhistle) || _gameInventory[kItemWhistle].location == 3)
- goto LABEL_20;
+ if (cathHasItem(kItemWhistle) || _gameInventory[kItemWhistle].location == 3) {
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 10;
+ FrancoisCall(&LogicManager::CONS_Francois_DoWalk, 4, 5790, 0, 0);
+ break;
+ }
+
startCycOtis(kCharacterFrancois, "605He");
softBlockAtDoor(kCharacterFrancois, 36);
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 8;
@@ -777,7 +911,6 @@ void LogicManager::HAND_Francois_HaremVisit(HAND_PARAMS) {
break;
case 9:
softReleaseAtDoor(kCharacterFrancois, 36);
- LABEL_20:
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 10;
FrancoisCall(&LogicManager::CONS_Francois_DoWalk, 4, 5790, 0, 0);
break;
@@ -791,13 +924,16 @@ void LogicManager::HAND_Francois_HaremVisit(HAND_PARAMS) {
fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
break;
default:
- return;
+ break;
}
+
break;
case 190219584:
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 6;
FrancoisCall(&LogicManager::CONS_Francois_DoCorrOtis, "605Ef", 6, 0, 0);
break;
+ default:
+ break;
}
}
@@ -817,12 +953,14 @@ void LogicManager::CONS_Francois_ChaseBeetle(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_ChaseBeetle(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterFrancois)[5], 12, "605H");
Common::strcat_s((char *)&getCharacterCurrentParams(kCharacterFrancois)[5], 12, (char *)&getCharacterCurrentParams(kCharacterFrancois)[2]);
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 1;
FrancoisCall(&LogicManager::CONS_Francois_ExitComp, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8]) {
case 1:
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 2;
@@ -904,8 +1042,12 @@ void LogicManager::HAND_Francois_ChaseBeetle(HAND_PARAMS) {
fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -920,10 +1062,12 @@ void LogicManager::CONS_Francois_FindCath(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_FindCath(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 1;
FrancoisCall(&LogicManager::CONS_Francois_ExitComp, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8]) {
case 1:
if (getCharacter(kCharacterCath).characterPosition.position <= getCharacter(kCharacterFrancois).characterPosition.position) {
@@ -933,6 +1077,7 @@ void LogicManager::HAND_Francois_FindCath(HAND_PARAMS) {
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 2;
FrancoisCall(&LogicManager::CONS_Francois_DoWalk, 4, 9460, 0, 0);
}
+
break;
case 2:
case 3:
@@ -952,20 +1097,28 @@ void LogicManager::HAND_Francois_FindCath(HAND_PARAMS) {
FrancoisCall(&LogicManager::CONS_Francois_DoWait, 900, 0, 0, 0);
break;
case 7:
- if (!inComp(kCharacterMadame, kCarRedSleeping, 5790))
- goto LABEL_15;
- getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 8;
- FrancoisCall(&LogicManager::CONS_Francois_DoDialog, "Fra2012", 0, 0, 0);
+ if (!inComp(kCharacterMadame, kCarRedSleeping, 5790)) {
+ getCharacter(kCharacterFrancois).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
+ fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
+ } else {
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 8;
+ FrancoisCall(&LogicManager::CONS_Francois_DoDialog, "Fra2012", 0, 0, 0);
+ }
+
break;
case 8:
- LABEL_15:
getCharacter(kCharacterFrancois).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -980,48 +1133,54 @@ void LogicManager::CONS_Francois_LetsGo(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_LetsGo(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterFrancois).characterPosition.location = 0;
- getCharacter(kCharacterFrancois).characterPosition.position = 5890;
- send(kCharacterFrancois, kCharacterMadame, 101107728, 0);
- getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 2;
- FrancoisCall(&LogicManager::CONS_Francois_DoWalk, 5, 850, 0, 0);
- break;
- case 2:
- endGraphics(kCharacterFrancois);
- send(kCharacterFrancois, kCharacterMonsieur, 237889408, 0);
- break;
- case 3:
- getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 4;
- FrancoisCall(&LogicManager::CONS_Francois_DoCorrOtis, "605Id", 35, 0, 0);
- break;
- case 4:
- setDoor(35, kCharacterCath, 2, 255, 255);
- send(kCharacterFrancois, kCharacterMadame, 100957716, 0);
- getCharacter(kCharacterFrancois).characterPosition.position = 5790;
- getCharacter(kCharacterFrancois).characterPosition.location = 1;
- endGraphics(kCharacterFrancois);
-
- getCharacter(kCharacterFrancois).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
- fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
- break;
- default:
- return;
- }
- } else if (msg->action == 100901266) {
- getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 3;
- FrancoisCall(&LogicManager::CONS_Francois_DoWalk, 4, 5790, 0, 0);
- }
- } else if (msg->action == 12) {
+ switch (msg->action) {
+ case 0:
+ getCharacter(kCharacterFrancois).characterPosition = getCharacter(kCharacterMonsieur).characterPosition;
+ break;
+ case 12:
setDoor(35, kCharacterCath, 0, 0, 0);
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 1;
FrancoisCall(&LogicManager::CONS_Francois_DoCorrOtis, "605Cd", 35, 0, 0);
- } else if (msg->action == 0) {
- getCharacter(kCharacterFrancois).characterPosition = getCharacter(kCharacterMonsieur).characterPosition;
+ break;
+ case 18:
+ switch (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterFrancois).characterPosition.location = 0;
+ getCharacter(kCharacterFrancois).characterPosition.position = 5890;
+ send(kCharacterFrancois, kCharacterMadame, 101107728, 0);
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 2;
+ FrancoisCall(&LogicManager::CONS_Francois_DoWalk, 5, 850, 0, 0);
+ break;
+ case 2:
+ endGraphics(kCharacterFrancois);
+ send(kCharacterFrancois, kCharacterMonsieur, 237889408, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 4;
+ FrancoisCall(&LogicManager::CONS_Francois_DoCorrOtis, "605Id", 35, 0, 0);
+ break;
+ case 4:
+ setDoor(35, kCharacterCath, 2, 255, 255);
+ send(kCharacterFrancois, kCharacterMadame, 100957716, 0);
+ getCharacter(kCharacterFrancois).characterPosition.position = 5790;
+ getCharacter(kCharacterFrancois).characterPosition.location = 1;
+ endGraphics(kCharacterFrancois);
+
+ getCharacter(kCharacterFrancois).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
+ fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 100901266:
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 3;
+ FrancoisCall(&LogicManager::CONS_Francois_DoWalk, 4, 5790, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1036,15 +1195,21 @@ void LogicManager::CONS_Francois_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_Birth(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterFrancois).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterFrancois).characterPosition.position = 5790;
- getCharacter(kCharacterFrancois).characterPosition.location = 1;
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterFrancois)[0]) {
+ getCharacterCurrentParams(kCharacterFrancois)[0] = 1;
+ CONS_Francois_StartPart1(0, 0, 0, 0);
}
- } else if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterFrancois)[0]) {
- getCharacterCurrentParams(kCharacterFrancois)[0] = 1;
- CONS_Francois_StartPart1(0, 0, 0, 0);
+
+ break;
+ case 12:
+ getCharacter(kCharacterFrancois).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterFrancois).characterPosition.position = 5790;
+ getCharacter(kCharacterFrancois).characterPosition.location = 1;
+ break;
+ default:
+ break;
}
}
@@ -1059,13 +1224,22 @@ void LogicManager::CONS_Francois_StartPart1(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_StartPart1(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 18 && getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] == 1)
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1075500 && !getCharacterCurrentParams(kCharacterFrancois)[0]) {
+ getCharacterCurrentParams(kCharacterFrancois)[0] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 1;
+ FrancoisCall(&LogicManager::CONS_Francois_Rampage, 1093500, 0, 0, 0);
+ }
+
+ break;
+ case 18:
+ if (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] == 1)
CONS_Francois_InComp(0, 0, 0, 0);
- } else if (_gameTime > 1075500 && !getCharacterCurrentParams(kCharacterFrancois)[0]) {
- getCharacterCurrentParams(kCharacterFrancois)[0] = 1;
- getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 1;
- FrancoisCall(&LogicManager::CONS_Francois_Rampage, 1093500, 0, 0, 0);
+
+ break;
+ default:
+ break;
}
}
@@ -1080,15 +1254,21 @@ void LogicManager::CONS_Francois_InComp(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_InComp(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 101107728) {
- getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 1;
- FrancoisCall(&LogicManager::CONS_Francois_LetsGo, 0, 0, 0, 0);
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1161000 && !getCharacterCurrentParams(kCharacterFrancois)[0]) {
+ getCharacterCurrentParams(kCharacterFrancois)[0] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 2;
+ FrancoisCall(&LogicManager::CONS_Francois_TakeWalk, 0, 0, 0, 0);
}
- } else if (_gameTime > 1161000 && !getCharacterCurrentParams(kCharacterFrancois)[0]) {
- getCharacterCurrentParams(kCharacterFrancois)[0] = 1;
- getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 2;
- FrancoisCall(&LogicManager::CONS_Francois_TakeWalk, 0, 0, 0, 0);
+
+ break;
+ case 101107728:
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 1;
+ FrancoisCall(&LogicManager::CONS_Francois_LetsGo, 0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1103,11 +1283,15 @@ void LogicManager::CONS_Francois_Asleep(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_Asleep(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterFrancois).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterFrancois).characterPosition.position = 5790;
getCharacter(kCharacterFrancois).characterPosition.location = 1;
endGraphics(kCharacterFrancois);
+ break;
+ default:
+ break;
}
}
@@ -1122,17 +1306,20 @@ void LogicManager::CONS_Francois_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_StartPart2(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterFrancois);
- getCharacter(kCharacterFrancois).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterFrancois).characterPosition.position = 4689;
- getCharacter(kCharacterFrancois).characterPosition.location = 1;
- getCharacter(kCharacterFrancois).clothes = 0;
- getCharacter(kCharacterFrancois).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Francois_AtBreakfast(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterFrancois);
+ getCharacter(kCharacterFrancois).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterFrancois).characterPosition.position = 4689;
+ getCharacter(kCharacterFrancois).characterPosition.location = 1;
+ getCharacter(kCharacterFrancois).clothes = 0;
+ getCharacter(kCharacterFrancois).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -1147,7 +1334,8 @@ void LogicManager::CONS_Francois_AtBreakfast(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_AtBreakfast(HAND_PARAMS) {
- if (msg->action == 18) {
+ switch (msg->action) {
+ case 18:
if (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] == 1) {
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 2;
FrancoisCall(&LogicManager::CONS_Francois_DoCorrOtis, "605Id", 35, 0, 0);
@@ -1159,9 +1347,14 @@ void LogicManager::HAND_Francois_AtBreakfast(HAND_PARAMS) {
endGraphics(kCharacterFrancois);
CONS_Francois_WithMama(0, 0, 0, 0);
}
- } else if (msg->action == 100901266) {
+
+ break;
+ case 100901266:
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 1;
FrancoisCall(&LogicManager::CONS_Francois_DoWalk, 4, 5790, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1176,103 +1369,243 @@ void LogicManager::CONS_Francois_WithMama(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_WithMama(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if ((_gameEvents[kEventFrancoisShowBeetle] || _gameEvents[kEventFrancoisShowBeetleD]) &&
!_gameEvents[kEventFrancoisTradeWhistle] && !_gameEvents[kEventFrancoisTradeWhistleD]) {
getCharacterParams(kCharacterFrancois, 8)[0] = 1;
}
+
if (getCharacterParams(kCharacterFrancois, 8)[0] && cathInCorridor(kCarRedSleeping)) {
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 1;
FrancoisCall(&LogicManager::CONS_Francois_FindCath, 0, 0, 0, 0);
- return;
+ break;
}
- LABEL_17:
+
if (_gameTime > 1764000 && !getCharacterCurrentParams(kCharacterFrancois)[0]) {
getCharacterCurrentParams(kCharacterFrancois)[0] = 1;
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 2;
FrancoisCall(&LogicManager::CONS_Francois_DoDialog, "Fra2011", 0, 0, 0);
- return;
+ break;
}
- LABEL_20:
+
if (_gameTime > 1800000 && !getCharacterCurrentParams(kCharacterFrancois)[1]) {
getCharacterCurrentParams(kCharacterFrancois)[1] = 1;
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 3;
FrancoisCall(&LogicManager::CONS_Francois_HaremVisit, 0, 0, 0, 0);
- return;
+ break;
}
- LABEL_23:
+
if (!cathHasItem(kItemWhistle) && _gameInventory[kItemWhistle].location != 3) {
if (_gameTime > 1768500 && !getCharacterCurrentParams(kCharacterFrancois)[2]) {
getCharacterCurrentParams(kCharacterFrancois)[2] = 1;
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 4;
FrancoisCall(&LogicManager::CONS_Francois_Rampage, 1773000, 0, 0, 0);
- return;
+ break;
}
- LABEL_28:
+
if (_gameTime > 1827000 && !getCharacterCurrentParams(kCharacterFrancois)[3]) {
getCharacterCurrentParams(kCharacterFrancois)[3] = 1;
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 5;
FrancoisCall(&LogicManager::CONS_Francois_Rampage, 1831500, 0, 0, 0);
- return;
+ break;
}
}
- LABEL_31:
+
if (_gameInventory[kItemBeetle].location != 3) {
cathHasItem(kItemWhistle);
- return;
+ break;
}
+
if (getCharacterCurrentParams(kCharacterFrancois)[4] != 2147483647 && _gameTime) {
- if (_gameTime > 15803100)
- goto LABEL_39;
+ if (_gameTime > 15803100) {
+ getCharacterCurrentParams(kCharacterFrancois)[4] = 0x7FFFFFFF;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 6;
+ FrancoisCall(&LogicManager::CONS_Francois_DoDialog, "Fra2010", 0, 0, 0);
+ break;
+ }
+
if (!nearChar(kCharacterFrancois, kCharacterCath, 2000) || !getCharacterCurrentParams(kCharacterFrancois)[4]) {
getCharacterCurrentParams(kCharacterFrancois)[4] = _gameTime + 75;
- if (_gameTime == -75)
- goto LABEL_40;
+ if (_gameTime == -75) {
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 6;
+ FrancoisCall(&LogicManager::CONS_Francois_DoDialog, "Fra2010", 0, 0, 0);
+ break;
+ }
}
+
if (getCharacterCurrentParams(kCharacterFrancois)[4] < _gameTime) {
- LABEL_39:
getCharacterCurrentParams(kCharacterFrancois)[4] = 0x7FFFFFFF;
- LABEL_40:
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 6;
FrancoisCall(&LogicManager::CONS_Francois_DoDialog, "Fra2010", 0, 0, 0);
- return;
+ break;
}
}
- LABEL_14:
- if (_gameTime <= 1782000 || getCharacterCurrentParams(kCharacterFrancois)[5]) {
- LABEL_41:
- if (_gameTime > 1813500 && !getCharacterCurrentParams(kCharacterFrancois)[6]) {
- getCharacterCurrentParams(kCharacterFrancois)[6] = 1;
- getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 8;
- FrancoisCall(&LogicManager::CONS_Francois_ChaseBeetle, 34, 6470, "c", 0);
- }
- } else {
+
+ if (_gameTime > 1782000 && !getCharacterCurrentParams(kCharacterFrancois)[5]) {
getCharacterCurrentParams(kCharacterFrancois)[5] = 1;
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 7;
FrancoisCall(&LogicManager::CONS_Francois_ChaseBeetle, 37, 4070, "f", 0);
+ break;
}
- return;
- }
- if (msg->action == 18) {
+
+ if (_gameTime > 1813500 && !getCharacterCurrentParams(kCharacterFrancois)[6]) {
+ getCharacterCurrentParams(kCharacterFrancois)[6] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 8;
+ FrancoisCall(&LogicManager::CONS_Francois_ChaseBeetle, 34, 6470, "c", 0);
+ }
+
+ break;
+ case 18:
switch (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8]) {
case 1:
- goto LABEL_17;
+ if (_gameTime > 1764000 && !getCharacterCurrentParams(kCharacterFrancois)[0]) {
+ getCharacterCurrentParams(kCharacterFrancois)[0] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 2;
+ FrancoisCall(&LogicManager::CONS_Francois_DoDialog, "Fra2011", 0, 0, 0);
+ break;
+ }
+
+ // fall through
case 2:
- goto LABEL_20;
+ if (_gameTime > 1800000 && !getCharacterCurrentParams(kCharacterFrancois)[1]) {
+ getCharacterCurrentParams(kCharacterFrancois)[1] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 3;
+ FrancoisCall(&LogicManager::CONS_Francois_HaremVisit, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
case 3:
- goto LABEL_23;
+ if (!cathHasItem(kItemWhistle) && _gameInventory[kItemWhistle].location != 3) {
+ if (_gameTime > 1768500 && !getCharacterCurrentParams(kCharacterFrancois)[2]) {
+ getCharacterCurrentParams(kCharacterFrancois)[2] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 4;
+ FrancoisCall(&LogicManager::CONS_Francois_Rampage, 1773000, 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 1827000 && !getCharacterCurrentParams(kCharacterFrancois)[3]) {
+ getCharacterCurrentParams(kCharacterFrancois)[3] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 5;
+ FrancoisCall(&LogicManager::CONS_Francois_Rampage, 1831500, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (_gameInventory[kItemBeetle].location != 3) {
+ cathHasItem(kItemWhistle);
+ break;
+ }
+
+ if (getCharacterCurrentParams(kCharacterFrancois)[4] != 2147483647 && _gameTime) {
+ if (_gameTime > 15803100) {
+ getCharacterCurrentParams(kCharacterFrancois)[4] = 0x7FFFFFFF;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 6;
+ FrancoisCall(&LogicManager::CONS_Francois_DoDialog, "Fra2010", 0, 0, 0);
+ break;
+ }
+
+ if (!nearChar(kCharacterFrancois, kCharacterCath, 2000) || !getCharacterCurrentParams(kCharacterFrancois)[4]) {
+ getCharacterCurrentParams(kCharacterFrancois)[4] = _gameTime + 75;
+ if (_gameTime == -75) {
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 6;
+ FrancoisCall(&LogicManager::CONS_Francois_DoDialog, "Fra2010", 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterFrancois)[4] < _gameTime) {
+ getCharacterCurrentParams(kCharacterFrancois)[4] = 0x7FFFFFFF;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 6;
+ FrancoisCall(&LogicManager::CONS_Francois_DoDialog, "Fra2010", 0, 0, 0);
+ break;
+ }
+ }
+
+ if (_gameTime > 1782000 && !getCharacterCurrentParams(kCharacterFrancois)[5]) {
+ getCharacterCurrentParams(kCharacterFrancois)[5] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 7;
+ FrancoisCall(&LogicManager::CONS_Francois_ChaseBeetle, 37, 4070, "f", 0);
+ break;
+ }
+
+ if (_gameTime > 1813500 && !getCharacterCurrentParams(kCharacterFrancois)[6]) {
+ getCharacterCurrentParams(kCharacterFrancois)[6] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 8;
+ FrancoisCall(&LogicManager::CONS_Francois_ChaseBeetle, 34, 6470, "c", 0);
+ }
+
+ break;
case 4:
- goto LABEL_28;
+ if (_gameTime > 1827000 && !getCharacterCurrentParams(kCharacterFrancois)[3]) {
+ getCharacterCurrentParams(kCharacterFrancois)[3] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 5;
+ FrancoisCall(&LogicManager::CONS_Francois_Rampage, 1831500, 0, 0, 0);
+ break;
+ }
+
+ // fall through
case 5:
- goto LABEL_31;
+ if (_gameInventory[kItemBeetle].location != 3) {
+ cathHasItem(kItemWhistle);
+ break;
+ }
+
+ if (getCharacterCurrentParams(kCharacterFrancois)[4] != 2147483647 && _gameTime) {
+ if (_gameTime > 15803100) {
+ getCharacterCurrentParams(kCharacterFrancois)[4] = 0x7FFFFFFF;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 6;
+ FrancoisCall(&LogicManager::CONS_Francois_DoDialog, "Fra2010", 0, 0, 0);
+ break;
+ }
+
+ if (!nearChar(kCharacterFrancois, kCharacterCath, 2000) || !getCharacterCurrentParams(kCharacterFrancois)[4]) {
+ getCharacterCurrentParams(kCharacterFrancois)[4] = _gameTime + 75;
+ if (_gameTime == -75) {
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 6;
+ FrancoisCall(&LogicManager::CONS_Francois_DoDialog, "Fra2010", 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterFrancois)[4] < _gameTime) {
+ getCharacterCurrentParams(kCharacterFrancois)[4] = 0x7FFFFFFF;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 6;
+ FrancoisCall(&LogicManager::CONS_Francois_DoDialog, "Fra2010", 0, 0, 0);
+ break;
+ }
+ }
+
+ // fall through
case 6:
- _gameProgress[kProgressField9C] = 1;
- goto LABEL_14;
+ if (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] == 6) {
+ _gameProgress[kProgressField9C] = 1;
+ }
+
+ if (_gameTime > 1782000 && !getCharacterCurrentParams(kCharacterFrancois)[5]) {
+ getCharacterCurrentParams(kCharacterFrancois)[5] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 7;
+ FrancoisCall(&LogicManager::CONS_Francois_ChaseBeetle, 37, 4070, "f", 0);
+ break;
+ }
+
+ // fall through
case 7:
- goto LABEL_41;
+ if (_gameTime > 1813500 && !getCharacterCurrentParams(kCharacterFrancois)[6]) {
+ getCharacterCurrentParams(kCharacterFrancois)[6] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 8;
+ FrancoisCall(&LogicManager::CONS_Francois_ChaseBeetle, 34, 6470, "c", 0);
+ }
+
+ break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1287,17 +1620,20 @@ void LogicManager::CONS_Francois_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_StartPart3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterFrancois);
- getCharacter(kCharacterFrancois).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterFrancois).characterPosition.position = 5790;
- getCharacter(kCharacterFrancois).characterPosition.location = 1;
- getCharacter(kCharacterFrancois).clothes = 0;
- getCharacter(kCharacterFrancois).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Francois_InPart3(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterFrancois);
+ getCharacter(kCharacterFrancois).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterFrancois).characterPosition.position = 5790;
+ getCharacter(kCharacterFrancois).characterPosition.location = 1;
+ getCharacter(kCharacterFrancois).clothes = 0;
+ getCharacter(kCharacterFrancois).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -1312,172 +1648,380 @@ void LogicManager::CONS_Francois_InPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_InPart3(HAND_PARAMS) {
- if (msg->action > 18) {
- switch (msg->action) {
- case 101107728:
- getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 1;
- FrancoisCall(&LogicManager::CONS_Francois_LetsGo, 0, 0, 0, 0);
- break;
- case 189872836:
- getCharacterCurrentParams(kCharacterFrancois)[0] = 1;
- break;
- case 190390860:
- getCharacterCurrentParams(kCharacterFrancois)[0] = 0;
- break;
- }
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8]) {
- case 1:
- getCharacterCurrentParams(kCharacterFrancois)[1] = 1;
- break;
- case 2:
- goto LABEL_26;
- case 3:
- goto LABEL_29;
- case 4:
- goto LABEL_32;
- case 5:
- goto LABEL_35;
- case 6:
- goto LABEL_38;
- case 7:
- goto LABEL_41;
- case 8:
- goto LABEL_44;
- case 9:
- goto LABEL_47;
- case 10:
- goto LABEL_52;
- case 11:
- goto LABEL_55;
- case 12:
- _gameProgress[kProgressField9C] = 1;
- goto LABEL_23;
- case 13:
- goto LABEL_65;
- case 14:
- goto LABEL_68;
- default:
- return;
- }
- } else if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if ((_gameEvents[kEventFrancoisShowBeetle] || _gameEvents[kEventFrancoisShowBeetleD]) && !_gameEvents[kEventFrancoisTradeWhistle] && !_gameEvents[kEventFrancoisTradeWhistleD]) {
getCharacterParams(kCharacterFrancois, 8)[0] = 1;
}
+
if (getCharacterCurrentParams(kCharacterFrancois)[1] && inComp(kCharacterMadame, kCarRedSleeping, 5790) && !getCharacterCurrentParams(kCharacterFrancois)[0]) {
if (getCharacterParams(kCharacterFrancois, 8)[0] && cathInCorridor(kCarRedSleeping)) {
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 2;
FrancoisCall(&LogicManager::CONS_Francois_FindCath, 0, 0, 0, 0);
- return;
+ break;
}
- LABEL_26:
+
if (_gameTime > 2025000 && !getCharacterCurrentParams(kCharacterFrancois)[2]) {
getCharacterCurrentParams(kCharacterFrancois)[2] = 1;
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 3;
FrancoisCall(&LogicManager::CONS_Francois_TakeWalk, 0, 0, 0, 0);
- return;
+ break;
}
- LABEL_29:
+
if (_gameTime > 2052000 && !getCharacterCurrentParams(kCharacterFrancois)[3]) {
getCharacterCurrentParams(kCharacterFrancois)[3] = 1;
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 4;
FrancoisCall(&LogicManager::CONS_Francois_TakeWalk, 0, 0, 0, 0);
- return;
+ break;
}
- LABEL_32:
+
if (_gameTime > 2079000 && !getCharacterCurrentParams(kCharacterFrancois)[4]) {
getCharacterCurrentParams(kCharacterFrancois)[4] = 1;
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 5;
FrancoisCall(&LogicManager::CONS_Francois_TakeWalk, 0, 0, 0, 0);
- return;
+ break;
}
- LABEL_35:
+
if (_gameTime > 2092500 && !getCharacterCurrentParams(kCharacterFrancois)[5]) {
getCharacterCurrentParams(kCharacterFrancois)[5] = 1;
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 6;
FrancoisCall(&LogicManager::CONS_Francois_TakeWalk, 0, 0, 0, 0);
- return;
+ break;
}
- LABEL_38:
+
if (_gameTime > 2173500 && !getCharacterCurrentParams(kCharacterFrancois)[6]) {
getCharacterCurrentParams(kCharacterFrancois)[6] = 1;
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 7;
FrancoisCall(&LogicManager::CONS_Francois_TakeWalk, 0, 0, 0, 0);
- return;
+ break;
}
- LABEL_41:
+
if (_gameTime > 2182500 && !getCharacterCurrentParams(kCharacterFrancois)[7]) {
getCharacterCurrentParams(kCharacterFrancois)[7] = 1;
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 8;
FrancoisCall(&LogicManager::CONS_Francois_TakeWalk, 0, 0, 0, 0);
- return;
+ break;
}
- LABEL_44:
+
if (_gameTime > 2241000 && !getCharacterCurrentParams(kCharacterFrancois)[8]) {
getCharacterCurrentParams(kCharacterFrancois)[8] = 1;
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 9;
FrancoisCall(&LogicManager::CONS_Francois_TakeWalk, 0, 0, 0, 0);
- return;
+ break;
}
- LABEL_47:
+
if (!cathHasItem(kItemWhistle) && _gameInventory[kItemWhistle].location != 3) {
if (_gameTime > 2011500 && !getCharacterCurrentParams(kCharacterFrancois)[9]) {
getCharacterCurrentParams(kCharacterFrancois)[9] = 1;
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 10;
FrancoisCall(&LogicManager::CONS_Francois_Rampage, 2016000, 0, 0, 0);
- return;
+ break;
}
- LABEL_52:
+
if (_gameTime > 2115000 && !getCharacterCurrentParams(kCharacterFrancois)[10]) {
getCharacterCurrentParams(kCharacterFrancois)[10] = 1;
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 11;
FrancoisCall(&LogicManager::CONS_Francois_Rampage, 2119500, 0, 0, 0);
- return;
+ break;
}
}
- LABEL_55:
+
if (_gameInventory[kItemBeetle].location == 3) {
if (getCharacterCurrentParams(kCharacterFrancois)[11] != 0x7FFFFFFF && _gameTime) {
- if (_gameTime > 15803100)
- goto LABEL_63;
+ if (_gameTime > 15803100) {
+ getCharacterCurrentParams(kCharacterFrancois)[11] = 0x7FFFFFFF;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 12;
+ FrancoisCall(&LogicManager::CONS_Francois_DoDialog, "Fra2010", 0, 0, 0);
+ break;
+ }
+
if (!nearChar(kCharacterFrancois, kCharacterCath, 2000) || !getCharacterCurrentParams(kCharacterFrancois)[11]) {
getCharacterCurrentParams(kCharacterFrancois)[11] = _gameTime + 75;
- if (_gameTime == -75)
- goto LABEL_64;
+ if (_gameTime == -75) {
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 12;
+ FrancoisCall(&LogicManager::CONS_Francois_DoDialog, "Fra2010", 0, 0, 0);
+ break;
+ }
}
+
if (getCharacterCurrentParams(kCharacterFrancois)[11] < _gameTime) {
- LABEL_63:
getCharacterCurrentParams(kCharacterFrancois)[11] = 0x7FFFFFFF;
- LABEL_64:
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 12;
FrancoisCall(&LogicManager::CONS_Francois_DoDialog, "Fra2010", 0, 0, 0);
- return;
+ break;
}
}
- LABEL_23:
- if (_gameTime <= 2040300 || getCharacterCurrentParams(kCharacterFrancois)[12]) {
- LABEL_65:
- if (_gameTime <= 2146500 || getCharacterCurrentParams(kCharacterFrancois)[13]) {
- LABEL_68:
- if (_gameTime > 2218500 && !getCharacterCurrentParams(kCharacterFrancois)[14]) {
- getCharacterCurrentParams(kCharacterFrancois)[14] = 1;
- getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 15;
- FrancoisCall(&LogicManager::CONS_Francois_ChaseBeetle, 33, 7500, "b", 0);
+
+ if (_gameTime > 2040300 && !getCharacterCurrentParams(kCharacterFrancois)[12]) {
+ getCharacterCurrentParams(kCharacterFrancois)[12] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 13;
+ FrancoisCall(&LogicManager::CONS_Francois_ChaseBeetle, 36, 4840, "e", 0);
+ break;
+ }
+
+ if (_gameTime > 2146500 && !getCharacterCurrentParams(kCharacterFrancois)[13]) {
+ getCharacterCurrentParams(kCharacterFrancois)[13] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 14;
+ FrancoisCall(&LogicManager::CONS_Francois_ChaseBeetle, 37, 4070, "f", 0);
+ break;
+ }
+
+ if (_gameTime > 2218500 && !getCharacterCurrentParams(kCharacterFrancois)[14]) {
+ getCharacterCurrentParams(kCharacterFrancois)[14] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 15;
+ FrancoisCall(&LogicManager::CONS_Francois_ChaseBeetle, 33, 7500, "b", 0);
+ break;
+ }
+ } else {
+ cathHasItem(kItemWhistle);
+ }
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8]) {
+ case 1:
+ getCharacterCurrentParams(kCharacterFrancois)[1] = 1;
+ break;
+ case 2:
+ if (_gameTime > 2025000 && !getCharacterCurrentParams(kCharacterFrancois)[2]) {
+ getCharacterCurrentParams(kCharacterFrancois)[2] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 3;
+ FrancoisCall(&LogicManager::CONS_Francois_TakeWalk, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 3:
+ if (_gameTime > 2052000 && !getCharacterCurrentParams(kCharacterFrancois)[3]) {
+ getCharacterCurrentParams(kCharacterFrancois)[3] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 4;
+ FrancoisCall(&LogicManager::CONS_Francois_TakeWalk, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 4:
+ if (_gameTime > 2079000 && !getCharacterCurrentParams(kCharacterFrancois)[4]) {
+ getCharacterCurrentParams(kCharacterFrancois)[4] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 5;
+ FrancoisCall(&LogicManager::CONS_Francois_TakeWalk, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 5:
+ if (_gameTime > 2092500 && !getCharacterCurrentParams(kCharacterFrancois)[5]) {
+ getCharacterCurrentParams(kCharacterFrancois)[5] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 6;
+ FrancoisCall(&LogicManager::CONS_Francois_TakeWalk, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 6:
+ if (_gameTime > 2173500 && !getCharacterCurrentParams(kCharacterFrancois)[6]) {
+ getCharacterCurrentParams(kCharacterFrancois)[6] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 7;
+ FrancoisCall(&LogicManager::CONS_Francois_TakeWalk, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 7:
+ if (_gameTime > 2182500 && !getCharacterCurrentParams(kCharacterFrancois)[7]) {
+ getCharacterCurrentParams(kCharacterFrancois)[7] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 8;
+ FrancoisCall(&LogicManager::CONS_Francois_TakeWalk, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 8:
+ if (_gameTime > 2241000 && !getCharacterCurrentParams(kCharacterFrancois)[8]) {
+ getCharacterCurrentParams(kCharacterFrancois)[8] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 9;
+ FrancoisCall(&LogicManager::CONS_Francois_TakeWalk, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 9:
+ if (!cathHasItem(kItemWhistle) && _gameInventory[kItemWhistle].location != 3) {
+ if (_gameTime > 2011500 && !getCharacterCurrentParams(kCharacterFrancois)[9]) {
+ getCharacterCurrentParams(kCharacterFrancois)[9] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 10;
+ FrancoisCall(&LogicManager::CONS_Francois_Rampage, 2016000, 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2115000 && !getCharacterCurrentParams(kCharacterFrancois)[10]) {
+ getCharacterCurrentParams(kCharacterFrancois)[10] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 11;
+ FrancoisCall(&LogicManager::CONS_Francois_Rampage, 2119500, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (_gameInventory[kItemBeetle].location == 3) {
+ if (getCharacterCurrentParams(kCharacterFrancois)[11] != 0x7FFFFFFF && _gameTime) {
+ if (_gameTime > 15803100) {
+ getCharacterCurrentParams(kCharacterFrancois)[11] = 0x7FFFFFFF;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 12;
+ FrancoisCall(&LogicManager::CONS_Francois_DoDialog, "Fra2010", 0, 0, 0);
+ break;
+ }
+
+ if (!nearChar(kCharacterFrancois, kCharacterCath, 2000) || !getCharacterCurrentParams(kCharacterFrancois)[11]) {
+ getCharacterCurrentParams(kCharacterFrancois)[11] = _gameTime + 75;
+ if (_gameTime == -75) {
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 12;
+ FrancoisCall(&LogicManager::CONS_Francois_DoDialog, "Fra2010", 0, 0, 0);
+ break;
}
- } else {
- getCharacterCurrentParams(kCharacterFrancois)[13] = 1;
- getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 14;
- FrancoisCall(&LogicManager::CONS_Francois_ChaseBeetle, 37, 4070, "f", 0);
}
- } else {
+
+ if (getCharacterCurrentParams(kCharacterFrancois)[11] < _gameTime) {
+ getCharacterCurrentParams(kCharacterFrancois)[11] = 0x7FFFFFFF;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 12;
+ FrancoisCall(&LogicManager::CONS_Francois_DoDialog, "Fra2010", 0, 0, 0);
+ break;
+ }
+ }
+
+ if (_gameTime > 2040300 && !getCharacterCurrentParams(kCharacterFrancois)[12]) {
getCharacterCurrentParams(kCharacterFrancois)[12] = 1;
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 13;
FrancoisCall(&LogicManager::CONS_Francois_ChaseBeetle, 36, 4840, "e", 0);
+ break;
+ }
+
+ if (_gameTime > 2146500 && !getCharacterCurrentParams(kCharacterFrancois)[13]) {
+ getCharacterCurrentParams(kCharacterFrancois)[13] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 14;
+ FrancoisCall(&LogicManager::CONS_Francois_ChaseBeetle, 37, 4070, "f", 0);
+ break;
+ }
+
+ if (_gameTime > 2218500 && !getCharacterCurrentParams(kCharacterFrancois)[14]) {
+ getCharacterCurrentParams(kCharacterFrancois)[14] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 15;
+ FrancoisCall(&LogicManager::CONS_Francois_ChaseBeetle, 33, 7500, "b", 0);
+ break;
}
} else {
cathHasItem(kItemWhistle);
}
+
+ break;
+ case 10:
+ if (_gameTime > 2115000 && !getCharacterCurrentParams(kCharacterFrancois)[10]) {
+ getCharacterCurrentParams(kCharacterFrancois)[10] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 11;
+ FrancoisCall(&LogicManager::CONS_Francois_Rampage, 2119500, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 11:
+ if (_gameInventory[kItemBeetle].location == 3) {
+ if (getCharacterCurrentParams(kCharacterFrancois)[11] != 0x7FFFFFFF && _gameTime) {
+ if (_gameTime > 15803100) {
+ getCharacterCurrentParams(kCharacterFrancois)[11] = 0x7FFFFFFF;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 12;
+ FrancoisCall(&LogicManager::CONS_Francois_DoDialog, "Fra2010", 0, 0, 0);
+ break;
+ }
+
+ if (!nearChar(kCharacterFrancois, kCharacterCath, 2000) || !getCharacterCurrentParams(kCharacterFrancois)[11]) {
+ getCharacterCurrentParams(kCharacterFrancois)[11] = _gameTime + 75;
+ if (_gameTime == -75) {
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 12;
+ FrancoisCall(&LogicManager::CONS_Francois_DoDialog, "Fra2010", 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterFrancois)[11] < _gameTime) {
+ getCharacterCurrentParams(kCharacterFrancois)[11] = 0x7FFFFFFF;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 12;
+ FrancoisCall(&LogicManager::CONS_Francois_DoDialog, "Fra2010", 0, 0, 0);
+ break;
+ }
+ }
+
+ if (_gameTime > 2040300 && !getCharacterCurrentParams(kCharacterFrancois)[12]) {
+ getCharacterCurrentParams(kCharacterFrancois)[12] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 13;
+ FrancoisCall(&LogicManager::CONS_Francois_ChaseBeetle, 36, 4840, "e", 0);
+ break;
+ }
+
+ if (_gameTime > 2146500 && !getCharacterCurrentParams(kCharacterFrancois)[13]) {
+ getCharacterCurrentParams(kCharacterFrancois)[13] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 14;
+ FrancoisCall(&LogicManager::CONS_Francois_ChaseBeetle, 37, 4070, "f", 0);
+ break;
+ }
+
+ if (_gameTime > 2218500 && !getCharacterCurrentParams(kCharacterFrancois)[14]) {
+ getCharacterCurrentParams(kCharacterFrancois)[14] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 15;
+ FrancoisCall(&LogicManager::CONS_Francois_ChaseBeetle, 33, 7500, "b", 0);
+ break;
+ }
+ } else {
+ cathHasItem(kItemWhistle);
+ }
+
+ break;
+ case 12:
+ if (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] == 12) {
+ _gameProgress[kProgressField9C] = 1;
+ }
+
+ if (_gameTime > 2040300 && !getCharacterCurrentParams(kCharacterFrancois)[12]) {
+ getCharacterCurrentParams(kCharacterFrancois)[12] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 13;
+ FrancoisCall(&LogicManager::CONS_Francois_ChaseBeetle, 36, 4840, "e", 0);
+ break;
+ }
+
+ // fall through
+ case 13:
+ if (_gameTime > 2146500 && !getCharacterCurrentParams(kCharacterFrancois)[13]) {
+ getCharacterCurrentParams(kCharacterFrancois)[13] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 14;
+ FrancoisCall(&LogicManager::CONS_Francois_ChaseBeetle, 37, 4070, "f", 0);
+ break;
+ }
+
+ // fall through
+ case 14:
+ if (_gameTime > 2218500 && !getCharacterCurrentParams(kCharacterFrancois)[14]) {
+ getCharacterCurrentParams(kCharacterFrancois)[14] = 1;
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 15;
+ FrancoisCall(&LogicManager::CONS_Francois_ChaseBeetle, 33, 7500, "b", 0);
+ }
+
+ break;
+ default:
+ break;
}
+
+ break;
+ case 101107728:
+ getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 1;
+ FrancoisCall(&LogicManager::CONS_Francois_LetsGo, 0, 0, 0, 0);
+ break;
+ case 189872836:
+ getCharacterCurrentParams(kCharacterFrancois)[0] = 1;
+ break;
+ case 190390860:
+ getCharacterCurrentParams(kCharacterFrancois)[0] = 0;
+ break;
+ default:
+ break;
}
}
@@ -1492,17 +2036,20 @@ void LogicManager::CONS_Francois_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_StartPart4(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterFrancois);
- getCharacter(kCharacterFrancois).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterFrancois).characterPosition.position = 5790;
- getCharacter(kCharacterFrancois).characterPosition.location = 1;
- getCharacter(kCharacterFrancois).clothes = 0;
- getCharacter(kCharacterFrancois).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Francois_InPart4(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterFrancois);
+ getCharacter(kCharacterFrancois).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterFrancois).characterPosition.position = 5790;
+ getCharacter(kCharacterFrancois).characterPosition.location = 1;
+ getCharacter(kCharacterFrancois).clothes = 0;
+ getCharacter(kCharacterFrancois).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -1517,9 +2064,13 @@ void LogicManager::CONS_Francois_InPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_InPart4(HAND_PARAMS) {
- if (msg->action == 101107728) {
+ switch (msg->action) {
+ case 101107728:
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 1;
FrancoisCall(&LogicManager::CONS_Francois_LetsGo, 0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1534,17 +2085,20 @@ void LogicManager::CONS_Francois_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_StartPart5(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterFrancois);
- getCharacter(kCharacterFrancois).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterFrancois).characterPosition.position = 3969;
- getCharacter(kCharacterFrancois).characterPosition.location = 1;
- getCharacter(kCharacterFrancois).clothes = 0;
- getCharacter(kCharacterFrancois).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Francois_Prisoner(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterFrancois);
+ getCharacter(kCharacterFrancois).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterFrancois).characterPosition.position = 3969;
+ getCharacter(kCharacterFrancois).characterPosition.location = 1;
+ getCharacter(kCharacterFrancois).clothes = 0;
+ getCharacter(kCharacterFrancois).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -1559,10 +2113,15 @@ void LogicManager::CONS_Francois_Prisoner(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_Prisoner(HAND_PARAMS) {
- if (msg->action == 70549068) {
+ switch (msg->action) {
+ case 70549068:
if (!cathHasItem(kItemWhistle) && _gameInventory[kItemWhistle].location != 3)
dropItem(kItemWhistle, 1);
+
CONS_Francois_Hiding(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1577,14 +2136,19 @@ void LogicManager::CONS_Francois_Hiding(CONS_PARAMS) {
}
void LogicManager::HAND_Francois_Hiding(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterFrancois).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterFrancois).characterPosition.position = 5790;
getCharacter(kCharacterFrancois).characterPosition.location = 1;
getCharacter(kCharacterFrancois).clothes = 0;
getCharacter(kCharacterFrancois).inventoryItem = 0;
- } else if (msg->action == 135800432) {
+ break;
+ case 135800432:
CONS_Francois_Disappear(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
Commit: 29d373e5fb762eb5f3783bad5765a6023019d3ae
https://github.com/scummvm/scummvm/commit/29d373e5fb762eb5f3783bad5765a6023019d3ae
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up HeadWait logic
Changed paths:
engines/lastexpress/characters/headwait.cpp
diff --git a/engines/lastexpress/characters/headwait.cpp b/engines/lastexpress/characters/headwait.cpp
index b060feee4ae..ca0fae90f9b 100644
--- a/engines/lastexpress/characters/headwait.cpp
+++ b/engines/lastexpress/characters/headwait.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_HeadWait(int chapter) {
CONS_HeadWait_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -82,10 +82,13 @@ void LogicManager::HAND_HeadWait_DoSeqOtis(HAND_PARAMS) {
playChrExcuseMe(kCharacterHeadWait, kCharacterCath, 0);
getCharacterCurrentParams(kCharacterHeadWait)[3] = 1;
}
+
break;
case 12:
startSeqOtis(kCharacterHeadWait, (char *)&getCharacterCurrentParams(kCharacterHeadWait)[0]);
break;
+ default:
+ break;
}
}
@@ -100,18 +103,18 @@ void LogicManager::CONS_HeadWait_WaitRCClear(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_WaitRCClear(HAND_PARAMS) {
- if (msg->action == 0) {
- if (!rcClear())
- return;
+ switch (msg->action) {
+ case 0:
+ case 12:
+ if (rcClear()) {
+ getCharacter(kCharacterHeadWait).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterHeadWait, _functionsHeadWait[getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall]]);
+ fedEx(kCharacterHeadWait, kCharacterHeadWait, 18, 0);
+ }
- getCharacter(kCharacterHeadWait).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterHeadWait, _functionsHeadWait[getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall]]);
- fedEx(kCharacterHeadWait, kCharacterHeadWait, 18, 0);
- }
- if (msg->action == 12 && rcClear()) {
- getCharacter(kCharacterHeadWait).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterHeadWait, _functionsHeadWait[getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall]]);
- fedEx(kCharacterHeadWait, kCharacterHeadWait, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -126,23 +129,29 @@ void LogicManager::CONS_HeadWait_FinishSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_FinishSeqOtis(HAND_PARAMS) {
- if (msg->action == 0) {
- if (getCharacter(kCharacterHeadWait).direction == 4)
- return;
- getCharacter(kCharacterHeadWait).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterHeadWait, _functionsHeadWait[getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall]]);
- fedEx(kCharacterHeadWait, kCharacterHeadWait, 18, 0);
- return;
- }
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 0:
+ if (getCharacter(kCharacterHeadWait).direction != 4) {
+ getCharacter(kCharacterHeadWait).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterHeadWait, _functionsHeadWait[getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall]]);
+ fedEx(kCharacterHeadWait, kCharacterHeadWait, 18, 0);
+ }
+
+ break;
+ case 3:
getCharacter(kCharacterHeadWait).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterHeadWait, _functionsHeadWait[getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall]]);
fedEx(kCharacterHeadWait, kCharacterHeadWait, 18, 0);
- return;
- }
- if (msg->action == 5 && !getCharacterCurrentParams(kCharacterHeadWait)[0]) {
- playChrExcuseMe(kCharacterHeadWait, kCharacterCath, 0);
- getCharacterCurrentParams(kCharacterHeadWait)[0] = 1;
+ break;
+ case 5:
+ if (!getCharacterCurrentParams(kCharacterHeadWait)[0]) {
+ playChrExcuseMe(kCharacterHeadWait, kCharacterCath, 0);
+ getCharacterCurrentParams(kCharacterHeadWait)[0] = 1;
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -159,10 +168,11 @@ void LogicManager::CONS_HeadWait_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_DoWait(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterHeadWait)[1] || (getCharacterCurrentParams(kCharacterHeadWait)[1] = _gameTime + getCharacterCurrentParams(kCharacterHeadWait)[0], _gameTime + getCharacterCurrentParams(kCharacterHeadWait)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterHeadWait)[1] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterHeadWait)[1] = 0x7FFFFFFF;
}
@@ -170,6 +180,9 @@ void LogicManager::HAND_HeadWait_DoWait(HAND_PARAMS) {
getCharacter(kCharacterHeadWait).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterHeadWait, _functionsHeadWait[getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall]]);
fedEx(kCharacterHeadWait, kCharacterHeadWait, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -202,11 +215,14 @@ void LogicManager::HAND_HeadWait_DoBlockSeqOtis(HAND_PARAMS) {
playChrExcuseMe(kCharacterHeadWait, kCharacterCath, 0);
getCharacterCurrentParams(kCharacterHeadWait)[5] = 1;
}
+
break;
case 12:
startSeqOtis(kCharacterHeadWait, (char *)&getCharacterCurrentParams(kCharacterHeadWait)[0]);
blockView(kCharacterHeadWait, getCharacterCurrentParams(kCharacterHeadWait)[3], getCharacterCurrentParams(kCharacterHeadWait)[4]);
break;
+ default:
+ break;
}
}
@@ -223,12 +239,17 @@ void LogicManager::CONS_HeadWait_DoDialog(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_DoDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterHeadWait).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterHeadWait, _functionsHeadWait[getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall]]);
fedEx(kCharacterHeadWait, kCharacterHeadWait, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterHeadWait, (char *)&getCharacterCurrentParams(kCharacterHeadWait)[0], -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -243,13 +264,18 @@ void LogicManager::CONS_HeadWait_DoComplexSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_DoComplexSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
getCharacter(kCharacterHeadWait).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterHeadWait, _functionsHeadWait[getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall]]);
fedEx(kCharacterHeadWait, kCharacterHeadWait, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterHeadWait, (char *)&getCharacterCurrentParams(kCharacterHeadWait)[0]);
startSeqOtis(getCharacterCurrentParams(kCharacterHeadWait)[6], (char *)&getCharacterCurrentParams(kCharacterHeadWait)[3]);
+ break;
+ default:
+ break;
}
}
@@ -264,12 +290,14 @@ void LogicManager::CONS_HeadWait_RebeccaHereWeAre(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_RebeccaHereWeAre(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterHeadWait).characterPosition.position = 850;
getCharacter(kCharacterHeadWait).characterPosition.location = 0;
getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 1;
HeadWaitCall(&LogicManager::CONS_HeadWait_DoSeqOtis, "901", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8]) {
case 1:
switch (_gameProgress[kProgressChapter]) {
@@ -282,7 +310,10 @@ void LogicManager::HAND_HeadWait_RebeccaHereWeAre(HAND_PARAMS) {
case 4:
playDialog(kCharacterHeadWait, "REB4001", -1, 30);
break;
+ default:
+ break;
}
+
getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 2;
HeadWaitCall(&LogicManager::CONS_HeadWait_DoOtis5012C, 0, 0, 0, 0);
break;
@@ -300,7 +331,13 @@ void LogicManager::HAND_HeadWait_RebeccaHereWeAre(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterHeadWait, _functionsHeadWait[getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall]]);
fedEx(kCharacterHeadWait, kCharacterHeadWait, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -315,14 +352,19 @@ void LogicManager::CONS_HeadWait_DoOtis5012C(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_DoOtis5012C(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
getCharacter(kCharacterHeadWait).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterHeadWait, _functionsHeadWait[getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall]]);
fedEx(kCharacterHeadWait, kCharacterHeadWait, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterHeadWait, "012C1");
startSeqOtis(kCharacterRebecca, "012C2");
startSeqOtis(kCharacterTableD, "012C3");
+ break;
+ default:
+ break;
}
}
@@ -343,6 +385,7 @@ void LogicManager::HAND_HeadWait_DoSeatOtis(HAND_PARAMS) {
if (!whoRunningDialog(kCharacterHeadWait))
releaseView(kCharacterHeadWait, kCarRestaurant, 64);
}
+
break;
case 3:
if (!getCharacterCurrentParams(kCharacterHeadWait)[1]) {
@@ -361,6 +404,7 @@ void LogicManager::HAND_HeadWait_DoSeatOtis(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterHeadWait)[0] = 1;
playDialog(kCharacterHeadWait, "HED1001", -1, 0);
}
+
break;
case 12:
blockView(kCharacterHeadWait, kCarRestaurant, 64);
@@ -376,9 +420,10 @@ void LogicManager::HAND_HeadWait_DoSeatOtis(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterHeadWait, _functionsHeadWait[getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall]]);
fedEx(kCharacterHeadWait, kCharacterHeadWait, 18, 0);
}
+
break;
default:
- return;
+ break;
}
}
@@ -393,7 +438,8 @@ void LogicManager::CONS_HeadWait_SeatCath(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_SeatCath(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterHeadWait).characterPosition.position = 5800;
getCharacter(kCharacterHeadWait).characterPosition.location = 0;
send(kCharacterHeadWait, kCharacterAugust, 168046720, 0);
@@ -402,7 +448,8 @@ void LogicManager::HAND_HeadWait_SeatCath(HAND_PARAMS) {
blockView(kCharacterHeadWait, kCarRestaurant, 55);
getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 1;
HeadWaitCall(&LogicManager::CONS_HeadWait_DoSeatOtis, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] == 1) {
send(kCharacterHeadWait, kCharacterAugust, 168627977, 0);
send(kCharacterHeadWait, kCharacterAnna, 168627977, 0);
@@ -418,6 +465,10 @@ void LogicManager::HAND_HeadWait_SeatCath(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterHeadWait, _functionsHeadWait[getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall]]);
fedEx(kCharacterHeadWait, kCharacterHeadWait, 18, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -432,25 +483,28 @@ void LogicManager::CONS_HeadWait_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_Birth(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- autoMessage(kCharacterHeadWait, 239072064, 0);
- autoMessage(kCharacterHeadWait, 257489762, 2);
- autoMessage(kCharacterHeadWait, 207769280, 6);
- autoMessage(kCharacterHeadWait, 101824388, 7);
- autoMessage(kCharacterHeadWait, 136059947, 8);
- autoMessage(kCharacterHeadWait, 223262556, 1);
- autoMessage(kCharacterHeadWait, 269479296, 3);
- autoMessage(kCharacterHeadWait, 352703104, 4);
- autoMessage(kCharacterHeadWait, 352768896, 5);
- autoMessage(kCharacterHeadWait, 191604416, 10);
- autoMessage(kCharacterHeadWait, 190605184, 11);
- getCharacter(kCharacterHeadWait).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterHeadWait).characterPosition.location = 0;
- getCharacter(kCharacterHeadWait).characterPosition.position = 5900;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_HeadWait_ServingDinner(0, 0, 0, 0);
+ break;
+ case 12:
+ autoMessage(kCharacterHeadWait, 239072064, 0);
+ autoMessage(kCharacterHeadWait, 257489762, 2);
+ autoMessage(kCharacterHeadWait, 207769280, 6);
+ autoMessage(kCharacterHeadWait, 101824388, 7);
+ autoMessage(kCharacterHeadWait, 136059947, 8);
+ autoMessage(kCharacterHeadWait, 223262556, 1);
+ autoMessage(kCharacterHeadWait, 269479296, 3);
+ autoMessage(kCharacterHeadWait, 352703104, 4);
+ autoMessage(kCharacterHeadWait, 352768896, 5);
+ autoMessage(kCharacterHeadWait, 191604416, 10);
+ autoMessage(kCharacterHeadWait, 190605184, 11);
+ getCharacter(kCharacterHeadWait).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterHeadWait).characterPosition.location = 0;
+ getCharacter(kCharacterHeadWait).characterPosition.position = 5900;
+ break;
+ default:
+ break;
}
}
@@ -465,19 +519,21 @@ void LogicManager::CONS_HeadWait_GreetAugust(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_GreetAugust(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterHeadWait).characterPosition.position = 5800;
getCharacter(kCharacterHeadWait).characterPosition.location = 0;
getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 1;
HeadWaitCall(&LogicManager::CONS_HeadWait_DoSeqOtis, "902", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] == 1) {
if (!getCharacterParams(kCharacterHeadWait, 8)[10]) {
startCycOtis(kCharacterHeadWait, "010E");
startCycOtis(kCharacterAugust, "BLANK");
getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 2;
HeadWaitCall(&LogicManager::CONS_HeadWait_DoDialog, "AUG1001", 0, 0, 0);
- return;
+ break;
}
} else {
if (getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] != 2) {
@@ -492,7 +548,7 @@ void LogicManager::HAND_HeadWait_GreetAugust(HAND_PARAMS) {
fedEx(kCharacterHeadWait, kCharacterHeadWait, 18, 0);
}
- return;
+ break;
}
startCycOtis(kCharacterAugust, "010B");
@@ -500,6 +556,9 @@ void LogicManager::HAND_HeadWait_GreetAugust(HAND_PARAMS) {
getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 3;
HeadWaitCall(&LogicManager::CONS_HeadWait_DoSeqOtis, "905", 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -514,16 +573,21 @@ void LogicManager::CONS_HeadWait_DoOtis5001C(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_DoOtis5001C(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseView(kCharacterHeadWait, kCarRestaurant, 62);
getCharacter(kCharacterHeadWait).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterHeadWait, _functionsHeadWait[getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall]]);
fedEx(kCharacterHeadWait, kCharacterHeadWait, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterTableA, "001C3");
startSeqOtis(kCharacterAnna, "001C2");
startSeqOtis(kCharacterHeadWait, "001C1");
blockView(kCharacterHeadWait, kCarRestaurant, 62);
+ break;
+ default:
+ break;
}
}
@@ -538,12 +602,14 @@ void LogicManager::CONS_HeadWait_GreetAnna(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_GreetAnna(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterHeadWait).characterPosition.position = 5800;
getCharacter(kCharacterHeadWait).characterPosition.location = 0;
getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 1;
HeadWaitCall(&LogicManager::CONS_HeadWait_DoSeqOtis, "901", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8]) {
case 1:
playDialog(kCharacterHeadWait, "ANN1047", -1, 0);
@@ -564,7 +630,13 @@ void LogicManager::HAND_HeadWait_GreetAnna(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterHeadWait, _functionsHeadWait[getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall]]);
fedEx(kCharacterHeadWait, kCharacterHeadWait, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -579,22 +651,26 @@ void LogicManager::CONS_HeadWait_GreetTatiana(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_GreetTatiana(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterHeadWait).characterPosition.position = 5800;
getCharacter(kCharacterHeadWait).characterPosition.location = 0;
getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 1;
HeadWaitCall(&LogicManager::CONS_HeadWait_DoSeqOtis, "903", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8]) {
case 1:
send(kCharacterHeadWait, kCharacterTatiana, 122358304, 0);
startCycOtis(kCharacterHeadWait, "014B");
blockView(kCharacterHeadWait, kCarRestaurant, 67);
+
if (dialogRunning("TAT1069A")) {
fadeDialog("TAT1069A");
} else if (dialogRunning("TAT1069B")) {
fadeDialog("TAT1069B");
}
+
getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 2;
HeadWaitCall(&LogicManager::CONS_HeadWait_DoDialog, "TAT1066", 0, 0, 0);
break;
@@ -613,7 +689,13 @@ void LogicManager::HAND_HeadWait_GreetTatiana(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterHeadWait, _functionsHeadWait[getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall]]);
fedEx(kCharacterHeadWait, kCharacterHeadWait, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -628,67 +710,100 @@ void LogicManager::CONS_HeadWait_ServingDinner(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_ServingDinner(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8]) {
- case 1:
- getCharacterCurrentParams(kCharacterHeadWait)[1] = 1;
- getCharacterCurrentParams(kCharacterHeadWait)[0] = 0;
- goto LABEL_23;
- case 2:
- goto LABEL_26;
- case 3:
- goto LABEL_28;
- case 4:
- goto LABEL_30;
- default:
- return;
- }
- }
- } else {
+ switch (msg->action) {
+ case 0:
if (!getCharacterCurrentParams(kCharacterHeadWait)[1]) {
if (checkCathDir(kCarRestaurant, 69) || checkCathDir(kCarRestaurant, 70) || checkCathDir(kCarRestaurant, 71)) {
getCharacterCurrentParams(kCharacterHeadWait)[1] = 1;
}
+
if (!getCharacterCurrentParams(kCharacterHeadWait)[1] && checkCathDir(kCarRestaurant, 61))
getCharacterCurrentParams(kCharacterHeadWait)[0] = 1;
}
+
if (inKitchen(kCharacterHeadWait)) {
if (getCharacterParams(kCharacterHeadWait, 8)[4] && getCharacterParams(kCharacterHeadWait, 8)[5]) {
CONS_HeadWait_AfterDinner(0, 0, 0, 0);
- return;
+ break;
}
- if (!rcClear())
- goto LABEL_28;
- if (getCharacterCurrentParams(kCharacterHeadWait)[0] && !getCharacterCurrentParams(kCharacterHeadWait)[1] && checkCathDir(kCarRestaurant, 61)) {
- getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 1;
- HeadWaitCall(&LogicManager::CONS_HeadWait_SeatCath, 0, 0, 0, 0);
- return;
+
+ if (rcClear()) {
+ if (getCharacterCurrentParams(kCharacterHeadWait)[0] && !getCharacterCurrentParams(kCharacterHeadWait)[1] && checkCathDir(kCarRestaurant, 61)) {
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 1;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_SeatCath, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterHeadWait, 8)[0] && !getCharacterParams(kCharacterHeadWait, 8)[10]) {
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 2;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_GreetAugust, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterHeadWait, 8)[2]) {
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 3;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_GreetTatiana, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterParams(kCharacterHeadWait, 8)[1]) {
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 4;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_GreetAnna, 0, 0, 0, 0);
+ break;
}
- LABEL_23:
+
+ if (getCharacterParams(kCharacterHeadWait, 8)[3]) {
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 5;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_RebeccaHereWeAre, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8]) {
+ case 1:
+ getCharacterCurrentParams(kCharacterHeadWait)[1] = 1;
+ getCharacterCurrentParams(kCharacterHeadWait)[0] = 0;
+
if (getCharacterParams(kCharacterHeadWait, 8)[0] && !getCharacterParams(kCharacterHeadWait, 8)[10]) {
getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 2;
HeadWaitCall(&LogicManager::CONS_HeadWait_GreetAugust, 0, 0, 0, 0);
- return;
+ break;
}
- LABEL_26:
+
+ // fall through
+ case 2:
if (getCharacterParams(kCharacterHeadWait, 8)[2]) {
getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 3;
HeadWaitCall(&LogicManager::CONS_HeadWait_GreetTatiana, 0, 0, 0, 0);
- } else {
- LABEL_28:
- if (getCharacterParams(kCharacterHeadWait, 8)[1]) {
- getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 4;
- HeadWaitCall(&LogicManager::CONS_HeadWait_GreetAnna, 0, 0, 0, 0);
- } else {
- LABEL_30:
- if (getCharacterParams(kCharacterHeadWait, 8)[3]) {
- getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 5;
- HeadWaitCall(&LogicManager::CONS_HeadWait_RebeccaHereWeAre, 0, 0, 0, 0);
- }
- }
+ break;
+ }
+
+ // fall through
+ case 3:
+ if (getCharacterParams(kCharacterHeadWait, 8)[1]) {
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 4;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_GreetAnna, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 4:
+ if (getCharacterParams(kCharacterHeadWait, 8)[3]) {
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 5;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_RebeccaHereWeAre, 0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -703,13 +818,20 @@ void LogicManager::CONS_HeadWait_AfterDinner(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_AfterDinner(HAND_PARAMS) {
- if (msg->action == 0 && _gameTime > 1242000 && !getCharacterCurrentParams(kCharacterHeadWait)[0]) {
- getCharacterCurrentParams(kCharacterHeadWait)[0] = 1;
- send(kCharacterHeadWait, kCharacterWaiter1, 101632192, 0);
- send(kCharacterHeadWait, kCharacterWaiter2, 101632192, 0);
- send(kCharacterHeadWait, kCharacterCook, 101632192, 0);
- send(kCharacterHeadWait, kCharacterTrainM, 101632192, 0);
- CONS_HeadWait_LockUp(0, 0, 0, 0);
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1242000 && !getCharacterCurrentParams(kCharacterHeadWait)[0]) {
+ getCharacterCurrentParams(kCharacterHeadWait)[0] = 1;
+ send(kCharacterHeadWait, kCharacterWaiter1, 101632192, 0);
+ send(kCharacterHeadWait, kCharacterWaiter2, 101632192, 0);
+ send(kCharacterHeadWait, kCharacterCook, 101632192, 0);
+ send(kCharacterHeadWait, kCharacterTrainM, 101632192, 0);
+ CONS_HeadWait_LockUp(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -724,22 +846,28 @@ void LogicManager::CONS_HeadWait_LockUp(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_LockUp(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterHeadWait).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterHeadWait).characterPosition.position = 5900;
- getCharacter(kCharacterHeadWait).characterPosition.location = 0;
- endGraphics(kCharacterHeadWait);
+ switch (msg->action) {
+ case 0:
+ if (!getCharacterCurrentParams(kCharacterHeadWait)[0] && getCharacter(kCharacterCath).characterPosition.position < 3650) {
+ setDoor(65, kCharacterCath, 1, 10, 9);
+ send(kCharacterHeadWait, kCharacterTableA, 103798704, "001P");
+ send(kCharacterHeadWait, kCharacterTableB, 103798704, "005J");
+ send(kCharacterHeadWait, kCharacterTableC, 103798704, "009G");
+ send(kCharacterHeadWait, kCharacterTableD, 103798704, "010M");
+ send(kCharacterHeadWait, kCharacterTableE, 103798704, "014F");
+ send(kCharacterHeadWait, kCharacterTableF, 103798704, "024D");
+ getCharacterCurrentParams(kCharacterHeadWait)[0] = 1;
}
- } else if (!getCharacterCurrentParams(kCharacterHeadWait)[0] && getCharacter(kCharacterCath).characterPosition.position < 3650) {
- setDoor(65, kCharacterCath, 1, 10, 9);
- send(kCharacterHeadWait, kCharacterTableA, 103798704, "001P");
- send(kCharacterHeadWait, kCharacterTableB, 103798704, "005J");
- send(kCharacterHeadWait, kCharacterTableC, 103798704, "009G");
- send(kCharacterHeadWait, kCharacterTableD, 103798704, "010M");
- send(kCharacterHeadWait, kCharacterTableE, 103798704, "014F");
- send(kCharacterHeadWait, kCharacterTableF, 103798704, "024D");
- getCharacterCurrentParams(kCharacterHeadWait)[0] = 1;
+
+ break;
+ case 12:
+ getCharacter(kCharacterHeadWait).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterHeadWait).characterPosition.position = 5900;
+ getCharacter(kCharacterHeadWait).characterPosition.location = 0;
+ endGraphics(kCharacterHeadWait);
+ break;
+ default:
+ break;
}
}
@@ -754,7 +882,8 @@ void LogicManager::CONS_HeadWait_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_StartPart2(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterHeadWait);
getCharacter(kCharacterHeadWait).characterPosition.position = 5900;
getCharacter(kCharacterHeadWait).characterPosition.location = 0;
@@ -762,6 +891,9 @@ void LogicManager::HAND_HeadWait_StartPart2(HAND_PARAMS) {
getCharacter(kCharacterHeadWait).inventoryItem = 0;
getCharacter(kCharacterHeadWait).clothes = 1;
setDoor(65, kCharacterCath, 0, 0, 1);
+ break;
+ default:
+ break;
}
}
@@ -776,18 +908,21 @@ void LogicManager::CONS_HeadWait_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_StartPart3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterHeadWait);
- getCharacter(kCharacterHeadWait).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterHeadWait).characterPosition.position = 5900;
- getCharacter(kCharacterHeadWait).characterPosition.location = 0;
- getCharacter(kCharacterHeadWait).inventoryItem = 0;
- getCharacterParams(kCharacterHeadWait, 8)[6] = 0;
- getCharacterParams(kCharacterHeadWait, 8)[3] = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_HeadWait_InPart3(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterHeadWait);
+ getCharacter(kCharacterHeadWait).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterHeadWait).characterPosition.position = 5900;
+ getCharacter(kCharacterHeadWait).characterPosition.location = 0;
+ getCharacter(kCharacterHeadWait).inventoryItem = 0;
+ getCharacterParams(kCharacterHeadWait, 8)[6] = 0;
+ getCharacterParams(kCharacterHeadWait, 8)[3] = 0;
+ break;
+ default:
+ break;
}
}
@@ -802,22 +937,30 @@ void LogicManager::CONS_HeadWait_InPart3(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_InPart3(HAND_PARAMS) {
- if (msg->action == 0) {
- if (!inKitchen(kCharacterHeadWait))
- return;
- if (getCharacterParams(kCharacterHeadWait, 8)[6]) {
- getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 1;
- HeadWaitCall(&LogicManager::CONS_HeadWait_AbbotSeatMe3, 0, 0, 0, 0);
- return;
+ switch (msg->action) {
+ case 0:
+ if (inKitchen(kCharacterHeadWait)) {
+ if (getCharacterParams(kCharacterHeadWait, 8)[6]) {
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 1;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_AbbotSeatMe3, 0, 0, 0, 0);
+ } else if (getCharacterParams(kCharacterHeadWait, 8)[3]) {
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 2;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_RebeccaHereWeAre, 0, 0, 0, 0);
+ }
}
- goto LABEL_8;
- }
- if (msg->action == 18 && getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] == 1) {
- LABEL_8:
- if (getCharacterParams(kCharacterHeadWait, 8)[3]) {
- getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 2;
- HeadWaitCall(&LogicManager::CONS_HeadWait_RebeccaHereWeAre, 0, 0, 0, 0);
+
+ break;
+ case 18:
+ if (getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] == 1) {
+ if (getCharacterParams(kCharacterHeadWait, 8)[3]) {
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 2;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_RebeccaHereWeAre, 0, 0, 0, 0);
+ }
}
+
+ break;
+ default:
+ break;
}
}
@@ -832,13 +975,15 @@ void LogicManager::CONS_HeadWait_AbbotSeatMe3(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_AbbotSeatMe3(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterHeadWait).characterPosition.position = 5800;
getCharacter(kCharacterHeadWait).characterPosition.location = 0;
blockView(kCharacterHeadWait, kCarRestaurant, 67);
getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 1;
HeadWaitCall(&LogicManager::CONS_HeadWait_DoOtis5029A, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] == 1) {
releaseView(kCharacterHeadWait, kCarRestaurant, 67);
send(kCharacterHeadWait, kCharacterAbbot, 122288808, 0);
@@ -853,6 +998,10 @@ void LogicManager::HAND_HeadWait_AbbotSeatMe3(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterHeadWait, _functionsHeadWait[getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall]]);
fedEx(kCharacterHeadWait, kCharacterHeadWait, 18, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -873,6 +1022,7 @@ void LogicManager::HAND_HeadWait_DoOtis5029A(HAND_PARAMS) {
playDialog(kCharacterHeadWait, "ABB3015A", -1, 0);
getCharacterCurrentParams(kCharacterHeadWait)[0] = 1;
}
+
break;
case 3:
getCharacter(kCharacterHeadWait).currentCall--;
@@ -888,7 +1038,7 @@ void LogicManager::HAND_HeadWait_DoOtis5029A(HAND_PARAMS) {
startSeqOtis(kCharacterAbbot, "029A2");
break;
default:
- return;
+ break;
}
}
@@ -903,20 +1053,23 @@ void LogicManager::CONS_HeadWait_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_StartPart4(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterHeadWait);
- getCharacter(kCharacterHeadWait).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterHeadWait).characterPosition.position = 5900;
- getCharacter(kCharacterHeadWait).characterPosition.location = 0;
- getCharacter(kCharacterHeadWait).inventoryItem = 0;
- getCharacterParams(kCharacterHeadWait, 8)[7] = 0;
- getCharacterParams(kCharacterHeadWait, 8)[8] = 0;
- getCharacterParams(kCharacterHeadWait, 8)[3] = 0;
- getCharacterParams(kCharacterHeadWait, 8)[9] = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_HeadWait_InPart4(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterHeadWait);
+ getCharacter(kCharacterHeadWait).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterHeadWait).characterPosition.position = 5900;
+ getCharacter(kCharacterHeadWait).characterPosition.location = 0;
+ getCharacter(kCharacterHeadWait).inventoryItem = 0;
+ getCharacterParams(kCharacterHeadWait, 8)[7] = 0;
+ getCharacterParams(kCharacterHeadWait, 8)[8] = 0;
+ getCharacterParams(kCharacterHeadWait, 8)[3] = 0;
+ getCharacterParams(kCharacterHeadWait, 8)[9] = 0;
+ break;
+ default:
+ break;
}
}
@@ -931,94 +1084,157 @@ void LogicManager::CONS_HeadWait_InPart4(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_InPart4(HAND_PARAMS) {
- if (msg->action > 12) {
- switch (msg->action) {
- case 17:
- if (!getCharacterCurrentParams(kCharacterHeadWait)[1]) {
- if (checkCathDir(kCarRestaurant, 69) || checkCathDir(kCarRestaurant, 70) || checkCathDir(kCarRestaurant, 71)) {
- getCharacterCurrentParams(kCharacterHeadWait)[1] = 1;
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 2511000 && !getCharacterCurrentParams(kCharacterHeadWait)[3]) {
+ getCharacterCurrentParams(kCharacterHeadWait)[3] = 1;
+ getCharacterCurrentParams(kCharacterHeadWait)[1] = 1;
+ }
+
+ if (inKitchen(kCharacterHeadWait)) {
+ if (rcClear()) {
+ if (getCharacterParams(kCharacterHeadWait, 8)[7]) {
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 1;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_MeetCond2, 0, 0, 0, 0);
+ break;
}
- if (!getCharacterCurrentParams(kCharacterHeadWait)[1] && checkCathDir(kCarRestaurant, 61))
- getCharacterCurrentParams(kCharacterHeadWait)[0] = 1;
- }
- break;
- case 18:
- if (getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] == 1) {
- LABEL_34:
+
if (getCharacterParams(kCharacterHeadWait, 8)[9] && getCharacterParams(kCharacterHeadWait, 8)[11]) {
if (!getCharacterCurrentParams(kCharacterHeadWait)[2])
getCharacterCurrentParams(kCharacterHeadWait)[2] = _gameTime + 9000;
+
if (getCharacterCurrentParams(kCharacterHeadWait)[4] != 0x7FFFFFFF && _gameTime) {
- if (getCharacterCurrentParams(kCharacterHeadWait)[2] < _gameTime)
- goto LABEL_45;
+ if (getCharacterCurrentParams(kCharacterHeadWait)[2] < _gameTime) {
+ getCharacterCurrentParams(kCharacterHeadWait)[4] = 0x7FFFFFFF;
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 2;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_TellAug, 0, 0, 0, 0);
+ break;
+ }
+
if (!inDiningRoom(kCharacterCath) || !getCharacterCurrentParams(kCharacterHeadWait)[4]) {
getCharacterCurrentParams(kCharacterHeadWait)[4] = _gameTime;
- if (!_gameTime)
- goto LABEL_46;
+ if (!_gameTime) {
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 2;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_TellAug, 0, 0, 0, 0);
+ break;
+ }
}
+
if (getCharacterCurrentParams(kCharacterHeadWait)[4] < _gameTime) {
- LABEL_45:
getCharacterCurrentParams(kCharacterHeadWait)[4] = 0x7FFFFFFF;
- LABEL_46:
getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 2;
HeadWaitCall(&LogicManager::CONS_HeadWait_TellAug, 0, 0, 0, 0);
- return;
+ break;
}
}
}
- LABEL_47:
+
if (getCharacterCurrentParams(kCharacterHeadWait)[0] && !getCharacterCurrentParams(kCharacterHeadWait)[1] && checkCathDir(kCarRestaurant, 61)) {
getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 3;
HeadWaitCall(&LogicManager::CONS_HeadWait_SeatCath, 0, 0, 0, 0);
- return;
+ break;
}
- goto LABEL_32;
}
- if (getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] == 2)
- goto LABEL_47;
- if (getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] != 3)
- return;
- getCharacterCurrentParams(kCharacterHeadWait)[1] = 1;
- getCharacterCurrentParams(kCharacterHeadWait)[0] = 0;
- LABEL_32:
+
if (getCharacterParams(kCharacterHeadWait, 8)[3]) {
getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 4;
HeadWaitCall(&LogicManager::CONS_HeadWait_RebeccaHereWeAre, 0, 0, 0, 0);
}
- return;
- case 201431954:
- getCharacterParams(kCharacterHeadWait, 8)[7] = 0;
- getCharacterParams(kCharacterHeadWait, 8)[3] = 0;
- send(kCharacterHeadWait, kCharacterTableA, 103798704, "001P");
- send(kCharacterHeadWait, kCharacterTableB, 103798704, "005J");
- send(kCharacterHeadWait, kCharacterTableC, 103798704, "009G");
- send(kCharacterHeadWait, kCharacterTableD, 103798704, "010M");
- send(kCharacterHeadWait, kCharacterTableE, 103798704, "014F");
- send(kCharacterHeadWait, kCharacterTableF, 103798704, "024D");
- getCharacter(kCharacterHeadWait).characterPosition.position = 5900;
- getCharacter(kCharacterHeadWait).characterPosition.location = 0;
+
break;
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
if (checkCathDir(kCarRestaurant, 69) || checkCathDir(kCarRestaurant, 70) || checkCathDir(kCarRestaurant, 71)) {
getCharacterCurrentParams(kCharacterHeadWait)[1] = 1;
}
- } else if (msg->action == 0) {
- if (_gameTime > 2511000 && !getCharacterCurrentParams(kCharacterHeadWait)[3]) {
- getCharacterCurrentParams(kCharacterHeadWait)[3] = 1;
- getCharacterCurrentParams(kCharacterHeadWait)[1] = 1;
+
+ break;
+ case 17:
+ if (!getCharacterCurrentParams(kCharacterHeadWait)[1]) {
+ if (checkCathDir(kCarRestaurant, 69) || checkCathDir(kCarRestaurant, 70) || checkCathDir(kCarRestaurant, 71)) {
+ getCharacterCurrentParams(kCharacterHeadWait)[1] = 1;
+ }
+
+ if (!getCharacterCurrentParams(kCharacterHeadWait)[1] && checkCathDir(kCarRestaurant, 61))
+ getCharacterCurrentParams(kCharacterHeadWait)[0] = 1;
}
- if (inKitchen(kCharacterHeadWait)) {
- if (rcClear()) {
- if (getCharacterParams(kCharacterHeadWait, 8)[7]) {
- getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 1;
- HeadWaitCall(&LogicManager::CONS_HeadWait_MeetCond2, 0, 0, 0, 0);
- return;
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8]) {
+ case 1:
+ if (getCharacterParams(kCharacterHeadWait, 8)[9] && getCharacterParams(kCharacterHeadWait, 8)[11]) {
+ if (!getCharacterCurrentParams(kCharacterHeadWait)[2])
+ getCharacterCurrentParams(kCharacterHeadWait)[2] = _gameTime + 9000;
+
+ if (getCharacterCurrentParams(kCharacterHeadWait)[4] != 0x7FFFFFFF && _gameTime) {
+ if (getCharacterCurrentParams(kCharacterHeadWait)[2] < _gameTime) {
+ getCharacterCurrentParams(kCharacterHeadWait)[4] = 0x7FFFFFFF;
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 2;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_TellAug, 0, 0, 0, 0);
+ break;
+ }
+
+ if (!inDiningRoom(kCharacterCath) || !getCharacterCurrentParams(kCharacterHeadWait)[4]) {
+ getCharacterCurrentParams(kCharacterHeadWait)[4] = _gameTime;
+ if (!_gameTime) {
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 2;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_TellAug, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterHeadWait)[4] < _gameTime) {
+ getCharacterCurrentParams(kCharacterHeadWait)[4] = 0x7FFFFFFF;
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 2;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_TellAug, 0, 0, 0, 0);
+ break;
+ }
}
- goto LABEL_34;
}
- goto LABEL_32;
+
+ // fall through
+ case 2:
+ if (getCharacterCurrentParams(kCharacterHeadWait)[0] && !getCharacterCurrentParams(kCharacterHeadWait)[1] && checkCathDir(kCarRestaurant, 61)) {
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 3;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_SeatCath, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 3:
+ if (getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] == 3) {
+ getCharacterCurrentParams(kCharacterHeadWait)[1] = 1;
+ getCharacterCurrentParams(kCharacterHeadWait)[0] = 0;
+ }
+
+ if (getCharacterParams(kCharacterHeadWait, 8)[3]) {
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 4;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_RebeccaHereWeAre, 0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
+
+ break;
+ case 201431954:
+ getCharacterParams(kCharacterHeadWait, 8)[7] = 0;
+ getCharacterParams(kCharacterHeadWait, 8)[3] = 0;
+ send(kCharacterHeadWait, kCharacterTableA, 103798704, "001P");
+ send(kCharacterHeadWait, kCharacterTableB, 103798704, "005J");
+ send(kCharacterHeadWait, kCharacterTableC, 103798704, "009G");
+ send(kCharacterHeadWait, kCharacterTableD, 103798704, "010M");
+ send(kCharacterHeadWait, kCharacterTableE, 103798704, "014F");
+ send(kCharacterHeadWait, kCharacterTableF, 103798704, "024D");
+ getCharacter(kCharacterHeadWait).characterPosition.position = 5900;
+ getCharacter(kCharacterHeadWait).characterPosition.location = 0;
+ break;
+ default:
+ break;
}
}
@@ -1033,42 +1249,50 @@ void LogicManager::CONS_HeadWait_MeetCond2(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_MeetCond2(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 1;
- HeadWaitCall(&LogicManager::CONS_HeadWait_RSWalkDowntrain, 0, 0, 0, 0);
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8]) {
- case 1:
- endGraphics(kCharacterHeadWait);
- break;
- case 2:
- send(kCharacterHeadWait, kCharacterCond2, 123712592, 0);
- getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 3;
- HeadWaitCall(&LogicManager::CONS_HeadWait_WaitRCClear, 0, 0, 0, 0);
- break;
- case 3:
- getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 4;
- HeadWaitCall(&LogicManager::CONS_HeadWait_RSWalkUptrain, 0, 0, 0, 0);
- break;
- case 4:
- endGraphics(kCharacterHeadWait);
- getCharacter(kCharacterHeadWait).characterPosition.position = 5900;
- getCharacterParams(kCharacterHeadWait, 8)[7] = 0;
- getCharacterParams(kCharacterHeadWait, 8)[8] = 0;
- getCharacterParams(kCharacterHeadWait, 8)[9] = 1;
-
- getCharacter(kCharacterHeadWait).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterHeadWait, _functionsHeadWait[getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall]]);
- fedEx(kCharacterHeadWait, kCharacterHeadWait, 18, 0);
- break;
- default:
- return;
- }
+ switch (msg->action) {
+ case 0:
+ if (getCharacterParams(kCharacterHeadWait, 8)[8]) {
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 2;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_DoWait, 450, 0, 0, 0);
+ }
+
+ break;
+ case 12:
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 1;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_RSWalkDowntrain, 0, 0, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8]) {
+ case 1:
+ endGraphics(kCharacterHeadWait);
+ break;
+ case 2:
+ send(kCharacterHeadWait, kCharacterCond2, 123712592, 0);
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 3;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 4;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_RSWalkUptrain, 0, 0, 0, 0);
+ break;
+ case 4:
+ endGraphics(kCharacterHeadWait);
+ getCharacter(kCharacterHeadWait).characterPosition.position = 5900;
+ getCharacterParams(kCharacterHeadWait, 8)[7] = 0;
+ getCharacterParams(kCharacterHeadWait, 8)[8] = 0;
+ getCharacterParams(kCharacterHeadWait, 8)[9] = 1;
+
+ getCharacter(kCharacterHeadWait).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterHeadWait, _functionsHeadWait[getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall]]);
+ fedEx(kCharacterHeadWait, kCharacterHeadWait, 18, 0);
+ break;
+ default:
+ break;
}
- } else if (getCharacterParams(kCharacterHeadWait, 8)[8]) {
- getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 2;
- HeadWaitCall(&LogicManager::CONS_HeadWait_DoWait, 0x1C2, 0, 0, 0);
+
+ break;
+ default:
+ break;
}
}
@@ -1083,12 +1307,14 @@ void LogicManager::CONS_HeadWait_TellAug(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_TellAug(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterHeadWait).characterPosition.position = 5800;
getCharacter(kCharacterHeadWait).characterPosition.location = 0;
getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 1;
HeadWaitCall(&LogicManager::CONS_HeadWait_DoSeqOtis, "902", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8]) {
case 1:
send(kCharacterHeadWait, kCharacterAugust, 122358304, 0);
@@ -1110,7 +1336,13 @@ void LogicManager::HAND_HeadWait_TellAug(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterHeadWait, _functionsHeadWait[getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall]]);
fedEx(kCharacterHeadWait, kCharacterHeadWait, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1125,16 +1357,20 @@ void LogicManager::CONS_HeadWait_RSWalkDowntrain(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_RSWalkDowntrain(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterHeadWait).characterPosition.position = 1540;
getCharacter(kCharacterHeadWait).characterPosition.location = 0;
getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 1;
HeadWaitCall(&LogicManager::CONS_HeadWait_DoSeqOtis, "817DD", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] == 1) {
startSeqOtis(kCharacterHeadWait, "817DS");
+
if (inDiningRoom(kCharacterCath))
advanceFrame(kCharacterHeadWait);
+
getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 2;
HeadWaitCall(&LogicManager::CONS_HeadWait_FinishSeqOtis, 0, 0, 0, 0);
} else if (getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] == 2) {
@@ -1144,6 +1380,10 @@ void LogicManager::HAND_HeadWait_RSWalkDowntrain(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterHeadWait, _functionsHeadWait[getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall]]);
fedEx(kCharacterHeadWait, kCharacterHeadWait, 18, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -1158,14 +1398,17 @@ void LogicManager::CONS_HeadWait_RSWalkUptrain(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_RSWalkUptrain(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterHeadWait).characterPosition.position = 9270;
getCharacter(kCharacterHeadWait).characterPosition.location = 0;
getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 1;
HeadWaitCall(&LogicManager::CONS_HeadWait_DoSeqOtis, "817US", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] == 1) {
startSeqOtis(kCharacterHeadWait, "817UD");
+
if (inSalon(kCharacterCath))
advanceFrame(kCharacterHeadWait);
@@ -1178,6 +1421,10 @@ void LogicManager::HAND_HeadWait_RSWalkUptrain(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterHeadWait, _functionsHeadWait[getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall]]);
fedEx(kCharacterHeadWait, kCharacterHeadWait, 18, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -1192,16 +1439,19 @@ void LogicManager::CONS_HeadWait_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_StartPart5(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterHeadWait);
- getCharacter(kCharacterHeadWait).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterHeadWait).characterPosition.position = 3969;
- getCharacter(kCharacterHeadWait).characterPosition.location = 1;
- getCharacter(kCharacterHeadWait).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_HeadWait_Prisoner(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterHeadWait);
+ getCharacter(kCharacterHeadWait).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterHeadWait).characterPosition.position = 3969;
+ getCharacter(kCharacterHeadWait).characterPosition.location = 1;
+ getCharacter(kCharacterHeadWait).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -1216,8 +1466,13 @@ void LogicManager::CONS_HeadWait_Prisoner(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_Prisoner(HAND_PARAMS) {
- if (msg->action == 70549068)
+ switch (msg->action) {
+ case 70549068:
CONS_HeadWait_Hiding(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_HeadWait_Hiding(CONS_PARAMS) {
@@ -1231,70 +1486,47 @@ void LogicManager::CONS_HeadWait_Hiding(CONS_PARAMS) {
}
void LogicManager::HAND_HeadWait_Hiding(HAND_PARAMS) {
- if (msg->action > 9) {
- if (msg->action > 17) {
- switch (msg->action) {
- case 18:
- switch (getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8]) {
- case 1:
- setDoor(38, kCharacterHeadWait, 1, 10, 9);
- goto LABEL_30;
- case 2:
- setDoor(38, kCharacterHeadWait, 1, 10, 9);
- break;
- case 3:
- case 4:
- getCharacterCurrentParams(kCharacterHeadWait)[2]++;
- if (getCharacterCurrentParams(kCharacterHeadWait)[2] == 1) {
- setDoor(38, kCharacterHeadWait, 1, 0, 0);
- getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 5;
- HeadWaitCall(&LogicManager::CONS_HeadWait_DoDialog, "Wat5001", 0, 0, 0);
- } else if (getCharacterCurrentParams(kCharacterHeadWait)[2] == 2) {
- setDoor(38, kCharacterHeadWait, 1, 0, 0);
- getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 6;
- HeadWaitCall(&LogicManager::CONS_HeadWait_DoDialog, "Wat5001A", 0, 0, 0);
- }
- break;
- case 5:
- getCharacterCurrentParams(kCharacterHeadWait)[0] = 1;
- setDoor(38, kCharacterHeadWait, 1, 14, 0);
- break;
- case 6:
- getCharacterCurrentParams(kCharacterHeadWait)[1] = 1;
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterHeadWait)[3]) {
+ if (!getCharacterCurrentParams(kCharacterHeadWait)[4]) {
+ getCharacterCurrentParams(kCharacterHeadWait)[4] = _gameTime + 4500;
+ if (_gameTime == -4500) {
+ setDoor(38, kCharacterHeadWait, 1, 0, 0);
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 1;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_DoDialog, "Wat5010", 0, 0, 0);
break;
- case 7:
- goto LABEL_48;
- default:
- return;
- }
- break;
- case 135800432:
- CONS_HeadWait_Disappear(0, 0, 0, 0);
- break;
- case 169750080:
- if (whoRunningDialog(kCharacterHeadWait)) {
- LABEL_48:
- getCharacterCurrentParams(kCharacterHeadWait)[3] = 1;
- } else {
- getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 7;
- HeadWaitCall(&LogicManager::CONS_HeadWait_DoDialog, "Wat5002", 0, 0, 0);
}
+ }
+
+ if (getCharacterCurrentParams(kCharacterHeadWait)[4] < _gameTime) {
+ getCharacterCurrentParams(kCharacterHeadWait)[4] = 0x7FFFFFFF;
+ setDoor(38, kCharacterHeadWait, 1, 0, 0);
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 1;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_DoDialog, "Wat5010", 0, 0, 0);
break;
}
- } else if (msg->action == 17) {
- if (getCharacterCurrentParams(kCharacterHeadWait)[1] || getCharacterCurrentParams(kCharacterHeadWait)[0]) {
- getCharacterCurrentParams(kCharacterHeadWait)[1] = 0;
- getCharacterCurrentParams(kCharacterHeadWait)[0] = 0;
- setDoor(38, kCharacterHeadWait, 1, 10, 9);
- getCharacterCurrentParams(kCharacterHeadWait)[2] = 0;
+ }
+
+ if (getCharacterCurrentParams(kCharacterHeadWait)[0]) {
+ if (getCharacterCurrentParams(kCharacterHeadWait)[5] || (getCharacterCurrentParams(kCharacterHeadWait)[5] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterHeadWait)[5] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterHeadWait)[5] = 0x7FFFFFFF;
}
- } else if (msg->action == 12) {
- getCharacter(kCharacterHeadWait).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterHeadWait).characterPosition.position = 3050;
- getCharacter(kCharacterHeadWait).characterPosition.location = 1;
- setDoor(38, kCharacterHeadWait, 1, 10, 9);
+
+ getCharacterCurrentParams(kCharacterHeadWait)[0] = 0;
+ getCharacterCurrentParams(kCharacterHeadWait)[1] = 1;
+ setDoor(38, kCharacterHeadWait, 1, 0, 0);
+ getCharacterCurrentParams(kCharacterHeadWait)[5] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterHeadWait)[5] = 0;
}
- } else if (msg->action >= 8) {
+
+ break;
+ case 8:
+ case 9:
if (getCharacterCurrentParams(kCharacterHeadWait)[0]) {
setDoor(38, kCharacterHeadWait, 1, 0, 0);
getCharacterCurrentParams(kCharacterHeadWait)[0] = 0;
@@ -1307,40 +1539,91 @@ void LogicManager::HAND_HeadWait_Hiding(HAND_PARAMS) {
getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 4;
HeadWaitCall(&LogicManager::CONS_HeadWait_DoDialog, "LIB013", 0, 0, 0);
}
- } else {
- if (msg->action)
- return;
- if (getCharacterCurrentParams(kCharacterHeadWait)[3]) {
- if (!getCharacterCurrentParams(kCharacterHeadWait)[4]) {
- getCharacterCurrentParams(kCharacterHeadWait)[4] = _gameTime + 4500;
- if (_gameTime == -4500)
- goto LABEL_18;
- }
- if (getCharacterCurrentParams(kCharacterHeadWait)[4] < _gameTime) {
- getCharacterCurrentParams(kCharacterHeadWait)[4] = 0x7FFFFFFF;
- LABEL_18:
+
+ break;
+ case 12:
+ getCharacter(kCharacterHeadWait).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterHeadWait).characterPosition.position = 3050;
+ getCharacter(kCharacterHeadWait).characterPosition.location = 1;
+ setDoor(38, kCharacterHeadWait, 1, 10, 9);
+ break;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterHeadWait)[1] || getCharacterCurrentParams(kCharacterHeadWait)[0]) {
+ getCharacterCurrentParams(kCharacterHeadWait)[1] = 0;
+ getCharacterCurrentParams(kCharacterHeadWait)[0] = 0;
+ setDoor(38, kCharacterHeadWait, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterHeadWait)[2] = 0;
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8]) {
+ case 1:
+ setDoor(38, kCharacterHeadWait, 1, 10, 9);
+
+ if (getCharacterCurrentParams(kCharacterHeadWait)[0]) {
+ if (getCharacterCurrentParams(kCharacterHeadWait)[5] || (getCharacterCurrentParams(kCharacterHeadWait)[5] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterHeadWait)[5] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterHeadWait)[5] = 0x7FFFFFFF;
+ }
+
+ getCharacterCurrentParams(kCharacterHeadWait)[0] = 0;
+ getCharacterCurrentParams(kCharacterHeadWait)[1] = 1;
setDoor(38, kCharacterHeadWait, 1, 0, 0);
- getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 1;
- HeadWaitCall(&LogicManager::CONS_HeadWait_DoDialog, "Wat5010", 0, 0, 0);
- return;
+ getCharacterCurrentParams(kCharacterHeadWait)[5] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterHeadWait)[5] = 0;
}
- }
- LABEL_30:
- if (getCharacterCurrentParams(kCharacterHeadWait)[0]) {
- if (getCharacterCurrentParams(kCharacterHeadWait)[5] || (getCharacterCurrentParams(kCharacterHeadWait)[5] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterHeadWait)[5] >= _currentGameSessionTicks)
- return;
- getCharacterCurrentParams(kCharacterHeadWait)[5] = 0x7FFFFFFF;
+ break;
+ case 2:
+ setDoor(38, kCharacterHeadWait, 1, 10, 9);
+ break;
+ case 3:
+ case 4:
+ getCharacterCurrentParams(kCharacterHeadWait)[2]++;
+ if (getCharacterCurrentParams(kCharacterHeadWait)[2] == 1) {
+ setDoor(38, kCharacterHeadWait, 1, 0, 0);
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 5;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_DoDialog, "Wat5001", 0, 0, 0);
+ } else if (getCharacterCurrentParams(kCharacterHeadWait)[2] == 2) {
+ setDoor(38, kCharacterHeadWait, 1, 0, 0);
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 6;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_DoDialog, "Wat5001A", 0, 0, 0);
}
- getCharacterCurrentParams(kCharacterHeadWait)[0] = 0;
+ break;
+ case 5:
+ getCharacterCurrentParams(kCharacterHeadWait)[0] = 1;
+ setDoor(38, kCharacterHeadWait, 1, 14, 0);
+ break;
+ case 6:
getCharacterCurrentParams(kCharacterHeadWait)[1] = 1;
- setDoor(38, kCharacterHeadWait, 1, 0, 0);
- getCharacterCurrentParams(kCharacterHeadWait)[5] = 0;
+ break;
+ case 7:
+ getCharacterCurrentParams(kCharacterHeadWait)[3] = 1;
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 135800432:
+ CONS_HeadWait_Disappear(0, 0, 0, 0);
+ break;
+ case 169750080:
+ if (whoRunningDialog(kCharacterHeadWait)) {
+ getCharacterCurrentParams(kCharacterHeadWait)[3] = 1;
} else {
- getCharacterCurrentParams(kCharacterHeadWait)[5] = 0;
+ getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8] = 7;
+ HeadWaitCall(&LogicManager::CONS_HeadWait_DoDialog, "Wat5002", 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
Commit: 7f75090fff5ae20cdbedc893f256ffc670e446ff
https://github.com/scummvm/scummvm/commit/7f75090fff5ae20cdbedc893f256ffc670e446ff
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Ivo logic
Changed paths:
engines/lastexpress/characters/ivo.cpp
diff --git a/engines/lastexpress/characters/ivo.cpp b/engines/lastexpress/characters/ivo.cpp
index f498f0b7f20..62a3479caed 100644
--- a/engines/lastexpress/characters/ivo.cpp
+++ b/engines/lastexpress/characters/ivo.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_Ivo(int chapter) {
CONS_Ivo_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -69,19 +69,25 @@ void LogicManager::CONS_Ivo_DebugWalks(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_DebugWalks(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterIvo).characterPosition.position = 0;
- getCharacter(kCharacterIvo).characterPosition.location = 0;
- getCharacter(kCharacterIvo).characterPosition.car = kCarGreenSleeping;
- getCharacterCurrentParams(kCharacterIvo)[0] = 10000;
- }
- } else if (walk(kCharacterIvo, kCarGreenSleeping, getCharacterCurrentParams(kCharacterIvo)[0])) {
- if (getCharacterCurrentParams(kCharacterIvo)[0] == 10000) {
- getCharacterCurrentParams(kCharacterIvo)[0] = 0;
- } else {
- getCharacterCurrentParams(kCharacterIvo)[0] = 10000;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterIvo, kCarGreenSleeping, getCharacterCurrentParams(kCharacterIvo)[0])) {
+ if (getCharacterCurrentParams(kCharacterIvo)[0] == 10000) {
+ getCharacterCurrentParams(kCharacterIvo)[0] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterIvo)[0] = 10000;
+ }
}
+
+ break;
+ case 12:
+ break;
+ getCharacter(kCharacterIvo).characterPosition.position = 0;
+ getCharacter(kCharacterIvo).characterPosition.location = 0;
+ getCharacter(kCharacterIvo).characterPosition.car = kCarGreenSleeping;
+ getCharacterCurrentParams(kCharacterIvo)[0] = 10000;
+ default:
+ break;
}
}
@@ -98,12 +104,17 @@ void LogicManager::CONS_Ivo_DoSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_DoSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
getCharacter(kCharacterIvo).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterIvo, (char *)&getCharacterCurrentParams(kCharacterIvo)[0]);
+ break;
+ default:
+ break;
}
}
@@ -122,15 +133,20 @@ void LogicManager::CONS_Ivo_DoCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_DoCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterIvo, getCharacterCurrentParams(kCharacterIvo)[3]);
getCharacter(kCharacterIvo).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterIvo, (char *)&getCharacterCurrentParams(kCharacterIvo)[0]);
blockAtDoor(kCharacterIvo, getCharacterCurrentParams(kCharacterIvo)[3]);
+ break;
+ default:
+ break;
}
}
@@ -147,11 +163,12 @@ void LogicManager::CONS_Ivo_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_DoWait(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterIvo)[1] || (getCharacterCurrentParams(kCharacterIvo)[1] = _gameTime + getCharacterCurrentParams(kCharacterIvo)[0],
_gameTime + getCharacterCurrentParams(kCharacterIvo)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterIvo)[1] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterIvo)[1] = 0x7FFFFFFF;
}
@@ -159,6 +176,9 @@ void LogicManager::HAND_Ivo_DoWait(HAND_PARAMS) {
getCharacter(kCharacterIvo).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -175,11 +195,12 @@ void LogicManager::CONS_Ivo_DoWaitReal(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_DoWaitReal(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterIvo)[1] || (getCharacterCurrentParams(kCharacterIvo)[1] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterIvo)[0],
_currentGameSessionTicks + getCharacterCurrentParams(kCharacterIvo)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterIvo)[1] >= _currentGameSessionTicks)
- return;
+ break;
getCharacterCurrentParams(kCharacterIvo)[1] = 0x7FFFFFFF;
}
@@ -187,6 +208,9 @@ void LogicManager::HAND_Ivo_DoWaitReal(HAND_PARAMS) {
getCharacter(kCharacterIvo).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -206,23 +230,20 @@ void LogicManager::CONS_Ivo_DoWalk(CONS_PARAMS) {
void LogicManager::HAND_Ivo_DoWalk(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (walk(kCharacterIvo, getCharacterCurrentParams(kCharacterIvo)[0], getCharacterCurrentParams(kCharacterIvo)[1]))
- goto LABEL_7;
- break;
- case 5:
- case 6:
- playDialog(0, "CAT1127A", -1, 0);
- break;
case 12:
if (walk(kCharacterIvo, getCharacterCurrentParams(kCharacterIvo)[0], getCharacterCurrentParams(kCharacterIvo)[1])) {
- LABEL_7:
getCharacter(kCharacterIvo).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
}
+
+ break;
+ case 5:
+ case 6:
+ playDialog(kCharacterCath, "CAT1127A", -1, 0);
break;
default:
- return;
+ break;
}
}
@@ -237,16 +258,22 @@ void LogicManager::CONS_Ivo_FinishSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_FinishSeqOtis(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacter(kCharacterIvo).direction != 4) {
getCharacter(kCharacterIvo).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
}
- } else if (msg->action == 3) {
+
+ break;
+ case 3:
getCharacter(kCharacterIvo).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -261,13 +288,18 @@ void LogicManager::CONS_Ivo_DoDialog(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_DoDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterIvo).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
getCharacter(kCharacterIvo).inventoryItem = 0;
playDialog(kCharacterIvo, (char *)&getCharacterCurrentParams(kCharacterIvo)[0], -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -282,10 +314,18 @@ void LogicManager::CONS_Ivo_WaitRCClear(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_WaitRCClear(HAND_PARAMS) {
- if ((msg->action == 0 && rcClear()) || (msg->action == 12 && rcClear())) {
- getCharacter(kCharacterIvo).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
- fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
+ switch (msg->action) {
+ case 0:
+ case 12:
+ if (rcClear()) {
+ getCharacter(kCharacterIvo).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
+ fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -303,22 +343,25 @@ void LogicManager::CONS_Ivo_SaveGame(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_SaveGame(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- save(
- kCharacterIvo,
- getCharacterCurrentParams(kCharacterIvo)[0],
- getCharacterCurrentParams(kCharacterIvo)[1]
- );
+ switch (msg->action) {
+ case 0:
+ getCharacter(kCharacterIvo).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
+ fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
+ break;
+ case 12:
+ save(
+ kCharacterIvo,
+ getCharacterCurrentParams(kCharacterIvo)[0],
+ getCharacterCurrentParams(kCharacterIvo)[1]
+ );
- getCharacter(kCharacterIvo).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
- fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
- }
- } else {
getCharacter(kCharacterIvo).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -333,57 +376,67 @@ void LogicManager::CONS_Ivo_GoCompartment(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_GoCompartment(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- startSeqOtis(kCharacterIvo, "809DS");
- if (inDiningRoom(kCharacterCath))
- advanceFrame(kCharacterIvo);
- getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 1;
- IvoCall(&LogicManager::CONS_Ivo_FinishSeqOtis, 0, 0, 0, 0);
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8]) {
- case 1:
- send(kCharacterIvo, kCharacterSalko, 125242096, 0);
- getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 2;
- IvoCall(&LogicManager::CONS_Ivo_DoWalk, 4, 2740, 0, 0);
- break;
- case 2:
- if (nearChar(kCharacterIvo, kCharacterSalko, 750) || nearX(kCharacterSalko, 2740, 500)) {
- send(kCharacterIvo, kCharacterSalko, 123668192, 0);
- getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 3;
- IvoCall(&LogicManager::CONS_Ivo_DoCorrOtis, "613Ah", 39, 0, 0);
- } else {
- startCycOtis(kCharacterIvo, "613Hh");
- softBlockAtDoor(kCharacterIvo, 39);
- }
- break;
- case 3:
- getCharacter(kCharacterIvo).characterPosition.position = 2740;
- getCharacter(kCharacterIvo).characterPosition.location = 1;
- endGraphics(kCharacterIvo);
-
- getCharacter(kCharacterIvo).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
- fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
- break;
- case 4:
- softReleaseAtDoor(kCharacterIvo, 39);
- getCharacter(kCharacterIvo).characterPosition.position = 2740;
- getCharacter(kCharacterIvo).characterPosition.location = 1;
- endGraphics(kCharacterIvo);
-
- getCharacter(kCharacterIvo).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
- fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
- break;
- default:
- return;
+ switch (msg->action) {
+ case 0:
+ if (nearChar(kCharacterIvo, kCharacterSalko, 750) || nearX(kCharacterSalko, 2740, 500)) {
+ send(kCharacterIvo, kCharacterSalko, 123668192, 0);
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 4;
+ IvoCall(&LogicManager::CONS_Ivo_DoCorrOtis, "613Ah", 39, 0, 0);
+ }
+ break;
+ case 12:
+ startSeqOtis(kCharacterIvo, "809DS");
+
+ if (inDiningRoom(kCharacterCath))
+ advanceFrame(kCharacterIvo);
+
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 1;
+ IvoCall(&LogicManager::CONS_Ivo_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8]) {
+ case 1:
+ send(kCharacterIvo, kCharacterSalko, 125242096, 0);
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 2;
+ IvoCall(&LogicManager::CONS_Ivo_DoWalk, 4, 2740, 0, 0);
+ break;
+ case 2:
+ if (nearChar(kCharacterIvo, kCharacterSalko, 750) || nearX(kCharacterSalko, 2740, 500)) {
+ send(kCharacterIvo, kCharacterSalko, 123668192, 0);
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 3;
+ IvoCall(&LogicManager::CONS_Ivo_DoCorrOtis, "613Ah", 39, 0, 0);
+ } else {
+ startCycOtis(kCharacterIvo, "613Hh");
+ softBlockAtDoor(kCharacterIvo, 39);
}
+
+ break;
+ case 3:
+ getCharacter(kCharacterIvo).characterPosition.position = 2740;
+ getCharacter(kCharacterIvo).characterPosition.location = 1;
+ endGraphics(kCharacterIvo);
+
+ getCharacter(kCharacterIvo).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
+ fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
+ break;
+ case 4:
+ softReleaseAtDoor(kCharacterIvo, 39);
+ getCharacter(kCharacterIvo).characterPosition.position = 2740;
+ getCharacter(kCharacterIvo).characterPosition.location = 1;
+ endGraphics(kCharacterIvo);
+
+ getCharacter(kCharacterIvo).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
+ fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
+ break;
+ default:
+ break;
}
- } else if (nearChar(kCharacterIvo, kCharacterSalko, 750) || nearX(kCharacterSalko, 2740, 500)) {
- send(kCharacterIvo, kCharacterSalko, 123668192, 0);
- getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 4;
- IvoCall(&LogicManager::CONS_Ivo_DoCorrOtis, "613Ah", 39, 0, 0);
+
+ break;
+ default:
+ break;
}
}
@@ -398,17 +451,22 @@ void LogicManager::CONS_Ivo_DoSplitOtis023A(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_DoSplitOtis023A(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
endGraphics(kCharacterSalko);
send(kCharacterIvo, kCharacterTableC, 136455232, 0);
getCharacter(kCharacterIvo).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterIvo, "023A1");
startSeqOtis(kCharacterSalko, "023A2");
startSeqOtis(kCharacterTableC, "023A3");
+ break;
+ default:
+ break;
}
}
@@ -423,17 +481,22 @@ void LogicManager::CONS_Ivo_DoSplitOtis023D(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_DoSplitOtis023D(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
send(kCharacterIvo, kCharacterTableC, 103798704, "009E");
endGraphics(kCharacterSalko);
getCharacter(kCharacterIvo).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterIvo, _functionsIvo[getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall]]);
fedEx(kCharacterIvo, kCharacterIvo, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterIvo, "023D1");
startSeqOtis(kCharacterSalko, "023D2");
startSeqOtis(kCharacterTableC, "023D3");
+ break;
+ default:
+ break;
}
}
@@ -448,17 +511,23 @@ void LogicManager::CONS_Ivo_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_Birth(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- setDoor(39, kCharacterCath, 3, 10, 9);
- setDoor(47, kCharacterCath, 0, 255, 255);
- getCharacter(kCharacterIvo).characterPosition.position = 4691;
- getCharacter(kCharacterIvo).characterPosition.location = 1;
- getCharacter(kCharacterIvo).characterPosition.car = kCarRestaurant;
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterIvo)[0]) {
+ getCharacterCurrentParams(kCharacterIvo)[0] = 1;
+ CONS_Ivo_ReturnComp(0, 0, 0, 0);
}
- } else if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterIvo)[0]) {
- getCharacterCurrentParams(kCharacterIvo)[0] = 1;
- CONS_Ivo_ReturnComp(0, 0, 0, 0);
+
+ break;
+ case 12:
+ setDoor(39, kCharacterCath, 3, 10, 9);
+ setDoor(47, kCharacterCath, 0, 255, 255);
+ getCharacter(kCharacterIvo).characterPosition.position = 4691;
+ getCharacter(kCharacterIvo).characterPosition.location = 1;
+ getCharacter(kCharacterIvo).characterPosition.car = kCarRestaurant;
+ break;
+ default:
+ break;
}
}
@@ -473,21 +542,26 @@ void LogicManager::CONS_Ivo_ReturnComp(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_ReturnComp(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 18) {
- if (getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] == 1) {
- getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 2;
- IvoCall(&LogicManager::CONS_Ivo_GoCompartment, 0, 0, 0, 0);
- } else if (getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] == 2) {
- send(kCharacterIvo, kCharacterMilos, 135024800, 0);
- CONS_Ivo_InComp(0, 0, 0, 0);
- }
- } else if (msg->action == 125242096) {
- getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 1;
- IvoCall(&LogicManager::CONS_Ivo_DoWaitReal, 75, 0, 0, 0);
- }
- } else {
+ switch (msg->action) {
+ case 0:
getCharacter(kCharacterIvo).characterPosition = getCharacter(kCharacterMilos).characterPosition;
+ break;
+ case 18:
+ if (getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] == 1) {
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 2;
+ IvoCall(&LogicManager::CONS_Ivo_GoCompartment, 0, 0, 0, 0);
+ } else if (getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] == 2) {
+ send(kCharacterIvo, kCharacterMilos, 135024800, 0);
+ CONS_Ivo_InComp(0, 0, 0, 0);
+ }
+
+ break;
+ case 125242096:
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 1;
+ IvoCall(&LogicManager::CONS_Ivo_DoWaitReal, 75, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -502,23 +576,15 @@ void LogicManager::CONS_Ivo_InComp(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_InComp(HAND_PARAMS) {
- if (msg->action > 18) {
- switch (msg->action) {
- case 122865568:
- getCharacter(kCharacterIvo).characterPosition.location = 0;
- getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 1;
- IvoCall(&LogicManager::CONS_Ivo_DoCorrOtis, "613Bh", 39, 0, 0);
- break;
- case 123852928:
- softReleaseAtDoor(kCharacterIvo, 39);
- getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 2;
- IvoCall(&LogicManager::CONS_Ivo_DoCorrOtis, "613Dh", 39, 0, 0);
- break;
- case 221683008:
- send(kCharacterIvo, kCharacterCond2, 123199584, 0);
- break;
- }
- } else if (msg->action == 18) {
+ switch (msg->action) {
+ case 12:
+ getCharacter(kCharacterIvo).characterPosition.position = 2740;
+ getCharacter(kCharacterIvo).characterPosition.location = 1;
+ getCharacter(kCharacterIvo).characterPosition.car = kCarRedSleeping;
+ setDoor(39, kCharacterCath, 3, 10, 9);
+ endGraphics(kCharacterIvo);
+ break;
+ case 18:
if (getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] == 1) {
startCycOtis(kCharacterIvo, "613Ch");
softBlockAtDoor(kCharacterIvo, 39);
@@ -529,12 +595,23 @@ void LogicManager::HAND_Ivo_InComp(HAND_PARAMS) {
endGraphics(kCharacterIvo);
setDoor(39, kCharacterCath, 3, 10, 9);
}
- } else if (msg->action == 12) {
- getCharacter(kCharacterIvo).characterPosition.position = 2740;
- getCharacter(kCharacterIvo).characterPosition.location = 1;
- getCharacter(kCharacterIvo).characterPosition.car = kCarRedSleeping;
- setDoor(39, kCharacterCath, 3, 10, 9);
- endGraphics(kCharacterIvo);
+
+ break;
+ case 122865568:
+ getCharacter(kCharacterIvo).characterPosition.location = 0;
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 1;
+ IvoCall(&LogicManager::CONS_Ivo_DoCorrOtis, "613Bh", 39, 0, 0);
+ break;
+ case 123852928:
+ softReleaseAtDoor(kCharacterIvo, 39);
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 2;
+ IvoCall(&LogicManager::CONS_Ivo_DoCorrOtis, "613Dh", 39, 0, 0);
+ break;
+ case 221683008:
+ send(kCharacterIvo, kCharacterCond2, 123199584, 0);
+ break;
+ default:
+ break;
}
}
@@ -549,12 +626,16 @@ void LogicManager::CONS_Ivo_Asleep(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_Asleep(HAND_PARAMS) {
- if (msg->action == 12) {
- getCharacter(kCharacterIvo).characterPosition.car = 4;
+ switch (msg->action) {
+ case 12:
+ getCharacter(kCharacterIvo).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterIvo).characterPosition.position = 2740;
getCharacter(kCharacterIvo).characterPosition.location = 1;
endGraphics(kCharacterIvo);
setDoor(39, kCharacterCath, 3, 10, 9);
+ break;
+ default:
+ break;
}
}
@@ -569,20 +650,26 @@ void LogicManager::CONS_Ivo_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_StartPart2(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterIvo);
- getCharacter(kCharacterIvo).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterIvo).characterPosition.position = 2740;
- getCharacter(kCharacterIvo).characterPosition.location = 1;
- getCharacter(kCharacterIvo).clothes = 0;
- getCharacter(kCharacterIvo).inventoryItem = 0;
- setDoor(39, kCharacterCath, 3, 10, 9);
- setDoor(47, kCharacterCath, 1, 255, 255);
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1777500 && !getCharacterCurrentParams(kCharacterIvo)[0]) {
+ getCharacterCurrentParams(kCharacterIvo)[0] = 1;
+ CONS_Ivo_GoBreakfast(0, 0, 0, 0);
}
- } else if (_gameTime > 1777500 && !getCharacterCurrentParams(kCharacterIvo)[0]) {
- getCharacterCurrentParams(kCharacterIvo)[0] = 1;
- CONS_Ivo_GoBreakfast(0, 0, 0, 0);
+
+ break;
+ case 12:
+ endGraphics(kCharacterIvo);
+ getCharacter(kCharacterIvo).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterIvo).characterPosition.position = 2740;
+ getCharacter(kCharacterIvo).characterPosition.location = 1;
+ getCharacter(kCharacterIvo).clothes = 0;
+ getCharacter(kCharacterIvo).inventoryItem = 0;
+ setDoor(39, kCharacterCath, 3, 10, 9);
+ setDoor(47, kCharacterCath, 1, 255, 255);
+ break;
+ default:
+ break;
}
}
@@ -606,8 +693,10 @@ void LogicManager::HAND_Ivo_GoBreakfast(HAND_PARAMS) {
switch (getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8]) {
case 1:
getCharacter(kCharacterIvo).characterPosition.location = 0;
+
if (getCharacter(kCharacterIvo).characterPosition.position < 2087)
getCharacter(kCharacterIvo).characterPosition.position = 2088;
+
getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 2;
IvoCall(&LogicManager::CONS_Ivo_DoWalk, 5, 850, 0, 0);
break;
@@ -629,13 +718,16 @@ void LogicManager::HAND_Ivo_GoBreakfast(HAND_PARAMS) {
CONS_Ivo_AtBreakfast(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
break;
case 102675536:
getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 3;
IvoCall(&LogicManager::CONS_Ivo_WaitRCClear, 0, 0, 0, 0);
break;
+ default:
+ break;
}
}
@@ -650,37 +742,48 @@ void LogicManager::CONS_Ivo_AtBreakfast(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_AtBreakfast(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8]) {
- case 1:
- send(kCharacterIvo, kCharacterWaiter2, 101106391, 0);
- startCycOtis(kCharacterIvo, "023B");
- getCharacterCurrentParams(kCharacterIvo)[0] = 1;
- break;
- case 2:
- getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 3;
- IvoCall(&LogicManager::CONS_Ivo_GoCompartment, 0, 0, 0, 0);
- break;
- case 3:
- send(kCharacterIvo, kCharacterWaiter2, 236237423, 0);
- CONS_Ivo_InComp2(0, 0, 0, 0);
- break;
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1809000 && getCharacterCurrentParams(kCharacterIvo)[0]) {
+ if (rcClear()) {
+ getCharacter(kCharacterIvo).characterPosition.location = 0;
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 2;
+ IvoCall(&LogicManager::CONS_Ivo_DoSplitOtis023D, 0, 0, 0, 0);
}
- } else if (msg->action == 123712592) {
- startCycOtis(kCharacterIvo, "023C2");
- getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 1;
- IvoCall(&LogicManager::CONS_Ivo_DoWait, 450, 0, 0, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
send(kCharacterIvo, kCharacterWaiter2, 189688608, 0);
startCycOtis(kCharacterIvo, "023B");
- } else if (msg->action == 0 && _gameTime > 1809000 && getCharacterCurrentParams(kCharacterIvo)[0]) {
- if (rcClear()) {
- getCharacter(kCharacterIvo).characterPosition.location = 0;
- getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 2;
- IvoCall(&LogicManager::CONS_Ivo_DoSplitOtis023D, 0, 0, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8]) {
+ case 1:
+ send(kCharacterIvo, kCharacterWaiter2, 101106391, 0);
+ startCycOtis(kCharacterIvo, "023B");
+ getCharacterCurrentParams(kCharacterIvo)[0] = 1;
+ break;
+ case 2:
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 3;
+ IvoCall(&LogicManager::CONS_Ivo_GoCompartment, 0, 0, 0, 0);
+ break;
+ case 3:
+ send(kCharacterIvo, kCharacterWaiter2, 236237423, 0);
+ CONS_Ivo_InComp2(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
+
+ break;
+ case 123712592:
+ startCycOtis(kCharacterIvo, "023C2");
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 1;
+ IvoCall(&LogicManager::CONS_Ivo_DoWait, 450, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -695,11 +798,15 @@ void LogicManager::CONS_Ivo_InComp2(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_InComp2(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterIvo).characterPosition.position = 2740;
getCharacter(kCharacterIvo).characterPosition.location = 1;
getCharacter(kCharacterIvo).characterPosition.car = kCarRedSleeping;
setDoor(39, kCharacterCath, 3, 10, 9);
+ break;
+ default:
+ break;
}
}
@@ -714,17 +821,20 @@ void LogicManager::CONS_Ivo_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_StartPart3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterIvo);
- getCharacter(kCharacterIvo).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterIvo).characterPosition.position = 2740;
- getCharacter(kCharacterIvo).characterPosition.location = 1;
- getCharacter(kCharacterIvo).clothes = 0;
- getCharacter(kCharacterIvo).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Ivo_InComp3(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterIvo);
+ getCharacter(kCharacterIvo).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterIvo).characterPosition.position = 2740;
+ getCharacter(kCharacterIvo).characterPosition.location = 1;
+ getCharacter(kCharacterIvo).clothes = 0;
+ getCharacter(kCharacterIvo).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -739,8 +849,13 @@ void LogicManager::CONS_Ivo_InComp3(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_InComp3(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
setDoor(39, kCharacterCath, 3, 10, 9);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Ivo_StartPart4(CONS_PARAMS) {
@@ -754,14 +869,17 @@ void LogicManager::CONS_Ivo_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_StartPart4(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterIvo).characterPosition.location = 1;
- getCharacter(kCharacterIvo).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterIvo).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Ivo_AtDinner4(0, 0, 0, 0);
+ break;
+ case 12:
+ getCharacter(kCharacterIvo).characterPosition.location = 1;
+ getCharacter(kCharacterIvo).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterIvo).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -776,14 +894,20 @@ void LogicManager::CONS_Ivo_AtDinner4(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_AtDinner4(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- send(kCharacterIvo, kCharacterTableC, 136455232, 0);
- startCycOtis(kCharacterIvo, "023B");
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 2361600 && rcClear()) {
+ getCharacter(kCharacterIvo).characterPosition.location = 0;
+ CONS_Ivo_ReturnComp4(0, 0, 0, 0);
}
- } else if (_gameTime > 2361600 && rcClear()) {
- getCharacter(kCharacterIvo).characterPosition.location = 0;
- CONS_Ivo_ReturnComp4(0, 0, 0, 0);
+
+ break;
+ case 12:
+ send(kCharacterIvo, kCharacterTableC, 136455232, 0);
+ startCycOtis(kCharacterIvo, "023B");
+ break;
+ default:
+ break;
}
}
@@ -798,16 +922,22 @@ void LogicManager::CONS_Ivo_ReturnComp4(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_ReturnComp4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 1;
IvoCall(&LogicManager::CONS_Ivo_DoSplitOtis023D, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] == 1) {
getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 2;
IvoCall(&LogicManager::CONS_Ivo_GoCompartment, 0, 0, 0, 0);
} else if (getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] == 2) {
CONS_Ivo_InComp4(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -822,28 +952,18 @@ void LogicManager::CONS_Ivo_InComp4(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_InComp4(HAND_PARAMS) {
- if (msg->action > 18) {
- if (msg->action > 122865568) {
- if (msg->action == 123852928) {
- getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 4;
- IvoCall(&LogicManager::CONS_Ivo_DoCorrOtis, "613Dh", 39, 0, 0);
- } else if (msg->action == 221683008) {
- send(kCharacterIvo, kCharacterCond2, 123199584, 0);
- }
- } else if (msg->action == 122865568) {
- getCharacter(kCharacterIvo).characterPosition.location = 0;
- getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 3;
- IvoCall(&LogicManager::CONS_Ivo_DoCorrOtis, "613Bh", 39, 0, 0);
- } else if (msg->action == 55996766) {
- getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 1;
- IvoCall(&LogicManager::CONS_Ivo_DoCorrOtis, "613FH", 39, 0, 0);
- }
- } else if (msg->action == 18) {
+ switch (msg->action) {
+ case 12:
+ setDoor(39, kCharacterCath, 3, 10, 9);
+ break;
+ case 18:
switch (getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8]) {
case 1:
getCharacter(kCharacterIvo).characterPosition.location = 0;
+
if (getCharacter(kCharacterIvo).characterPosition.position < 2087)
getCharacter(kCharacterIvo).characterPosition.position = 2088;
+
getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 2;
IvoCall(&LogicManager::CONS_Ivo_DoWalk, 5, 850, 0, 0);
break;
@@ -863,10 +983,28 @@ void LogicManager::HAND_Ivo_InComp4(HAND_PARAMS) {
endGraphics(kCharacterIvo);
break;
default:
- return;
+ break;
}
- } else if (msg->action == 12) {
- setDoor(39, kCharacterCath, 3, 10, 9);
+
+ break;
+ case 123852928:
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 4;
+ IvoCall(&LogicManager::CONS_Ivo_DoCorrOtis, "613Dh", 39, 0, 0);
+ break;
+ case 221683008:
+ send(kCharacterIvo, kCharacterCond2, 123199584, 0);
+ break;
+ case 122865568:
+ getCharacter(kCharacterIvo).characterPosition.location = 0;
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 3;
+ IvoCall(&LogicManager::CONS_Ivo_DoCorrOtis, "613Bh", 39, 0, 0);
+ break;
+ case 55996766:
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 1;
+ IvoCall(&LogicManager::CONS_Ivo_DoCorrOtis, "613FH", 39, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -881,19 +1019,26 @@ void LogicManager::CONS_Ivo_Hiding(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_Hiding(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 18) {
- if (getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] == 1) {
- getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 2;
- IvoCall(&LogicManager::CONS_Ivo_DoCorrOtis, "613EH", 39, 0, 0);
- } else if (getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] == 2) {
- CONS_Ivo_EndPart4(0, 0, 0, 0);
- }
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 2425500 && !getCharacterCurrentParams(kCharacterIvo)[0]) {
+ getCharacterCurrentParams(kCharacterIvo)[0] = 1;
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 1;
+ IvoCall(&LogicManager::CONS_Ivo_DoWalk, 4, 2740, 0, 0);
}
- } else if (_gameTime > 2425500 && !getCharacterCurrentParams(kCharacterIvo)[0]) {
- getCharacterCurrentParams(kCharacterIvo)[0] = 1;
- getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 1;
- IvoCall(&LogicManager::CONS_Ivo_DoWalk, 4, 2740, 0, 0);
+
+ break;
+ case 18:
+ if (getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] == 1) {
+ getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 2;
+ IvoCall(&LogicManager::CONS_Ivo_DoCorrOtis, "613EH", 39, 0, 0);
+ } else if (getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] == 2) {
+ CONS_Ivo_EndPart4(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -908,13 +1053,17 @@ void LogicManager::CONS_Ivo_EndPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_EndPart4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterIvo);
setDoor(39, kCharacterCath, 3, 10, 9);
getCharacter(kCharacterIvo).characterPosition.location = 1;
getCharacter(kCharacterIvo).characterPosition.position = 2740;
getCharacter(kCharacterIvo).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterIvo).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -929,16 +1078,19 @@ void LogicManager::CONS_Ivo_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_StartPart5(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterIvo);
- getCharacter(kCharacterIvo).characterPosition.location = kCarBaggageRear;
- getCharacter(kCharacterIvo).characterPosition.position = 540;
- getCharacter(kCharacterIvo).characterPosition.car = kCarBaggageRear;
- getCharacter(kCharacterIvo).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Ivo_GoofingOff(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterIvo);
+ getCharacter(kCharacterIvo).characterPosition.location = kCarBaggageRear;
+ getCharacter(kCharacterIvo).characterPosition.position = 540;
+ getCharacter(kCharacterIvo).characterPosition.car = kCarBaggageRear;
+ getCharacter(kCharacterIvo).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -953,8 +1105,13 @@ void LogicManager::CONS_Ivo_GoofingOff(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_GoofingOff(HAND_PARAMS) {
- if (msg->action == 192637492)
+ switch (msg->action) {
+ case 192637492:
CONS_Ivo_FightCath(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Ivo_FightCath(CONS_PARAMS) {
@@ -968,14 +1125,16 @@ void LogicManager::CONS_Ivo_FightCath(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_FightCath(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterIvo).characterPosition.location = 0;
getCharacter(kCharacterIvo).characterPosition.position = 540;
getCharacter(kCharacterIvo).characterPosition.car = 1;
getCharacter(kCharacterIvo).inventoryItem = 0;
getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] = 1;
IvoCall(&LogicManager::CONS_Ivo_SaveGame, 2, kEventCathIvoFight, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] == 1) {
playDialog(0, "LIB090", -1, 0);
playNIS(kEventCathIvoFight);
@@ -991,6 +1150,10 @@ void LogicManager::HAND_Ivo_FightCath(HAND_PARAMS) {
CONS_Ivo_KnockedOut(0, 0, 0, 0);
}
}
+
+ break;
+ default:
+ break;
}
}
@@ -1014,10 +1177,13 @@ void LogicManager::HAND_Ivo_KnockedOut(HAND_PARAMS) {
case 18:
if (getCharacter(kCharacterIvo).callbacks[getCharacter(kCharacterIvo).currentCall + 8] == 1)
setDoor(94, kCharacterCath, 2, 255, 255);
+
break;
case 135800432:
CONS_Ivo_Disappear(0, 0, 0, 0);
break;
+ default:
+ break;
}
}
@@ -1032,8 +1198,13 @@ void LogicManager::CONS_Ivo_Disappear(CONS_PARAMS) {
}
void LogicManager::HAND_Ivo_Disappear(HAND_PARAMS) {
- if (msg->action == 12)
- endGraphics(16);
+ switch (msg->action) {
+ case 12:
+ endGraphics(kCharacterIvo);
+ break;
+ default:
+ break;
+ }
}
void (LogicManager::*LogicManager::_functionsIvo[])(HAND_PARAMS) = {
Commit: 2e3622d3a1240eaa159b9b8ccc428c4c6c5e79f8
https://github.com/scummvm/scummvm/commit/2e3622d3a1240eaa159b9b8ccc428c4c6c5e79f8
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Kronos logic
Changed paths:
engines/lastexpress/characters/kronos.cpp
diff --git a/engines/lastexpress/characters/kronos.cpp b/engines/lastexpress/characters/kronos.cpp
index 33439e71d3a..befefe724ca 100644
--- a/engines/lastexpress/characters/kronos.cpp
+++ b/engines/lastexpress/characters/kronos.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_Kronos(int chapter) {
CONS_Kronos_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -69,19 +69,25 @@ void LogicManager::CONS_Kronos_DebugWalks(CONS_PARAMS) {
}
void LogicManager::HAND_Kronos_DebugWalks(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterKronos).characterPosition.position = 0;
- getCharacter(kCharacterKronos).characterPosition.location = 0;
- getCharacter(kCharacterKronos).characterPosition.car = kCarGreenSleeping;
- getCharacterCurrentParams(kCharacterKronos)[0] = 10000;
- }
- } else if (walk(kCharacterKronos, kCarGreenSleeping, getCharacterCurrentParams(kCharacterKronos)[0])) {
- if (getCharacterCurrentParams(kCharacterKronos)[0] == 10000) {
- getCharacterCurrentParams(kCharacterKronos)[0] = 0;
- } else {
- getCharacterCurrentParams(kCharacterKronos)[0] = 10000;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterKronos, kCarGreenSleeping, getCharacterCurrentParams(kCharacterKronos)[0])) {
+ if (getCharacterCurrentParams(kCharacterKronos)[0] == 10000) {
+ getCharacterCurrentParams(kCharacterKronos)[0] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterKronos)[0] = 10000;
+ }
}
+
+ break;
+ case 12:
+ getCharacter(kCharacterKronos).characterPosition.position = 0;
+ getCharacter(kCharacterKronos).characterPosition.location = 0;
+ getCharacter(kCharacterKronos).characterPosition.car = kCarGreenSleeping;
+ getCharacterCurrentParams(kCharacterKronos)[0] = 10000;
+ break;
+ default:
+ break;
}
}
@@ -99,22 +105,25 @@ void LogicManager::CONS_Kronos_SaveGame(CONS_PARAMS) {
}
void LogicManager::HAND_Kronos_SaveGame(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- save(
- kCharacterKronos,
- getCharacterCurrentParams(kCharacterKronos)[0],
- getCharacterCurrentParams(kCharacterKronos)[1]
- );
+ switch (msg->action) {
+ case 0:
+ getCharacter(kCharacterKronos).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterKronos, _functionsKronos[getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall]]);
+ fedEx(kCharacterKronos, kCharacterKronos, 18, 0);
+ break;
+ case 12:
+ save(
+ kCharacterKronos,
+ getCharacterCurrentParams(kCharacterKronos)[0],
+ getCharacterCurrentParams(kCharacterKronos)[1]
+ );
- getCharacter(kCharacterKronos).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterKronos, _functionsKronos[getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall]]);
- fedEx(kCharacterKronos, kCharacterKronos, 18, 0);
- }
- } else {
getCharacter(kCharacterKronos).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterKronos, _functionsKronos[getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall]]);
fedEx(kCharacterKronos, kCharacterKronos, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -132,16 +141,18 @@ void LogicManager::CONS_Kronos_DoWalk(CONS_PARAMS) {
}
void LogicManager::HAND_Kronos_DoWalk(HAND_PARAMS) {
- if (msg->action == 0) {
- if (!walk(kCharacterKronos, getCharacterCurrentParams(kCharacterKronos)[0], getCharacterCurrentParams(kCharacterKronos)[1]))
- return;
- goto LABEL_7;
- }
- if (msg->action == 12 && walk(kCharacterKronos, getCharacterCurrentParams(kCharacterKronos)[0], getCharacterCurrentParams(kCharacterKronos)[1])) {
- LABEL_7:
- getCharacter(kCharacterKronos).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterKronos, _functionsKronos[getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall]]);
- fedEx(kCharacterKronos, kCharacterKronos, 18, 0);
+ switch (msg->action) {
+ case 0:
+ case 12:
+ if (walk(kCharacterKronos, getCharacterCurrentParams(kCharacterKronos)[0], getCharacterCurrentParams(kCharacterKronos)[1])) {
+ getCharacter(kCharacterKronos).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterKronos, _functionsKronos[getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall]]);
+ fedEx(kCharacterKronos, kCharacterKronos, 18, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -156,12 +167,17 @@ void LogicManager::CONS_Kronos_DoDialog(CONS_PARAMS) {
}
void LogicManager::HAND_Kronos_DoDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterKronos).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterKronos, _functionsKronos[getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall]]);
fedEx(kCharacterKronos, kCharacterKronos, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterKronos, (char *)&getCharacterCurrentParams(kCharacterKronos)[0], -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -176,11 +192,12 @@ void LogicManager::CONS_Kronos_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_Kronos_DoWait(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterKronos)[1] || (getCharacterCurrentParams(kCharacterKronos)[1] = _gameTime + getCharacterCurrentParams(kCharacterKronos)[0],
_gameTime + getCharacterCurrentParams(kCharacterKronos)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterKronos)[1] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterKronos)[1] = 0x7FFFFFFF;
}
@@ -188,6 +205,9 @@ void LogicManager::HAND_Kronos_DoWait(HAND_PARAMS) {
getCharacter(kCharacterKronos).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterKronos, _functionsKronos[getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall]]);
fedEx(kCharacterKronos, kCharacterKronos, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -202,11 +222,12 @@ void LogicManager::CONS_Kronos_DoWaitReal(CONS_PARAMS) {
}
void LogicManager::HAND_Kronos_DoWaitReal(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterKronos)[1] || (getCharacterCurrentParams(kCharacterKronos)[1] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterKronos)[0],
_currentGameSessionTicks + getCharacterCurrentParams(kCharacterKronos)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterKronos)[1] >= _currentGameSessionTicks)
- return;
+ break;
getCharacterCurrentParams(kCharacterKronos)[1] = 0x7FFFFFFF;
}
@@ -214,6 +235,9 @@ void LogicManager::HAND_Kronos_DoWaitReal(HAND_PARAMS) {
getCharacter(kCharacterKronos).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterKronos, _functionsKronos[getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall]]);
fedEx(kCharacterKronos, kCharacterKronos, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -228,16 +252,22 @@ void LogicManager::CONS_Kronos_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Kronos_Birth(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterKronos).characterPosition.car = 2;
- getCharacter(kCharacterKronos).characterPosition.position = 6000;
- getCharacter(kCharacterKronos).characterPosition.location = 1;
- setDoor(73, kCharacterCath, 1, 255, 255);
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterKronos)[0]) {
+ getCharacterCurrentParams(kCharacterKronos)[0] = 1;
+ CONS_Kronos_AwaitingCath(0, 0, 0, 0);
}
- } else if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterKronos)[0]) {
- getCharacterCurrentParams(kCharacterKronos)[0] = 1;
- CONS_Kronos_AwaitingCath(0, 0, 0, 0);
+
+ break;
+ case 12:
+ getCharacter(kCharacterKronos).characterPosition.car = 2;
+ getCharacter(kCharacterKronos).characterPosition.position = 6000;
+ getCharacter(kCharacterKronos).characterPosition.location = 1;
+ setDoor(73, kCharacterCath, 1, 255, 255);
+ break;
+ default:
+ break;
}
}
@@ -257,24 +287,28 @@ void LogicManager::HAND_Kronos_AwaitingCath(HAND_PARAMS) {
if (_gameTime > 1489500 && !getCharacterCurrentParams(kCharacterKronos)[1]) {
getCharacterCurrentParams(kCharacterKronos)[1] = 1;
CONS_Kronos_PlayingAtNight(0, 0, 0, 0);
- return;
+ break;
}
- if (!getCharacterCurrentParams(kCharacterKronos)[0] || !checkLoc(kCharacterCath, kCarKronos))
- return;
- if (getCharacterCurrentParams(kCharacterKronos)[2] || (getCharacterCurrentParams(kCharacterKronos)[2] = _currentGameSessionTicks + 150,
- _currentGameSessionTicks != -150)) {
- if (getCharacterCurrentParams(kCharacterKronos)[2] >= _currentGameSessionTicks)
- return;
- getCharacterCurrentParams(kCharacterKronos)[2] = 0x7FFFFFFF;
+
+ if (getCharacterCurrentParams(kCharacterKronos)[0] && checkLoc(kCharacterCath, kCarKronos)) {
+ if (getCharacterCurrentParams(kCharacterKronos)[2] || (getCharacterCurrentParams(kCharacterKronos)[2] = _currentGameSessionTicks + 150,
+ _currentGameSessionTicks != -150)) {
+ if (getCharacterCurrentParams(kCharacterKronos)[2] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterKronos)[2] = 0x7FFFFFFF;
+ }
+
+ CONS_Kronos_GreetCath(0, 0, 0, 0);
}
- LABEL_16:
- CONS_Kronos_GreetCath(0, 0, 0, 0);
- return;
+
+ break;
case 171849314:
getCharacterCurrentParams(kCharacterKronos)[0] = 1;
return;
case 202621266:
- goto LABEL_16;
+ CONS_Kronos_GreetCath(0, 0, 0, 0);
+ break;
}
}
@@ -289,14 +323,22 @@ void LogicManager::CONS_Kronos_GreetCath(CONS_PARAMS) {
}
void LogicManager::HAND_Kronos_GreetCath(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] = 1;
KronosCall(&LogicManager::CONS_Kronos_SaveGame, 2, kEventKronosConversation, 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] == 1) {
- playNIS(kEventKronosConversation);
- bumpCath(kCarKronos, 87, 255);
- send(kCharacterKronos, kCharacterKahina, 137685712, 0);
- CONS_Kronos_CathDone(0, 0, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] == 1) {
+ playNIS(kEventKronosConversation);
+ bumpCath(kCarKronos, 87, 255);
+ send(kCharacterKronos, kCharacterKahina, 137685712, 0);
+ CONS_Kronos_CathDone(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -311,16 +353,22 @@ void LogicManager::CONS_Kronos_CathDone(CONS_PARAMS) {
}
void LogicManager::HAND_Kronos_CathDone(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterKronos).characterPosition.car = kCarKronos;
- getCharacter(kCharacterKronos).characterPosition.position = 6000;
- getCharacter(kCharacterKronos).characterPosition.location = 0;
- endGraphics(kCharacterKronos);
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1489500 && !getCharacterCurrentParams(kCharacterKronos)[0]) {
+ getCharacterCurrentParams(kCharacterKronos)[0] = 1;
+ CONS_Kronos_PlayingAtNight(0, 0, 0, 0);
}
- } else if (_gameTime > 1489500 && !getCharacterCurrentParams(kCharacterKronos)[0]) {
- getCharacterCurrentParams(kCharacterKronos)[0] = 1;
- CONS_Kronos_PlayingAtNight(0, 0, 0, 0);
+
+ break;
+ case 12:
+ getCharacter(kCharacterKronos).characterPosition.car = kCarKronos;
+ getCharacter(kCharacterKronos).characterPosition.position = 6000;
+ getCharacter(kCharacterKronos).characterPosition.location = 0;
+ endGraphics(kCharacterKronos);
+ break;
+ default:
+ break;
}
}
@@ -335,19 +383,24 @@ void LogicManager::CONS_Kronos_PlayingAtNight(CONS_PARAMS) {
}
void LogicManager::HAND_Kronos_PlayingAtNight(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacterCurrentParams(kCharacterKronos)[0]++;
if ((getCharacterCurrentParams(kCharacterKronos)[0] & 1) == 0) {
playDialog(kCharacterKronos, "KRO1002", -1, 0);
- return;
+ } else {
+ playDialog(kCharacterKronos, "KRO1001", -1, 0);
}
- goto LABEL_7;
- }
- if (msg->action == 12) {
+
+ break;
+ case 12:
getCharacter(kCharacterKronos).characterPosition.position = 7000;
if (!whoRunningDialog(kCharacterKronos))
- LABEL_7:
playDialog(kCharacterKronos, "KRO1001", -1, 0);
+
+ break;
+ default:
+ break;
}
}
@@ -362,8 +415,13 @@ void LogicManager::CONS_Kronos_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Kronos_StartPart2(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterKronos);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Kronos_StartPart3(CONS_PARAMS) {
@@ -377,18 +435,21 @@ void LogicManager::CONS_Kronos_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Kronos_StartPart3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterKronos);
- getCharacter(kCharacterKronos).characterPosition.position = 6000;
- getCharacter(kCharacterKronos).characterPosition.location = 0;
- getCharacter(kCharacterKronos).characterPosition.car = 2;
- getCharacter(kCharacterKronos).inventoryItem = 0;
- getCharacter(kCharacterKronos).clothes = 0;
- setDoor(73, 0, 0, 255, 255);
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Kronos_InSeclusion(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterKronos);
+ getCharacter(kCharacterKronos).characterPosition.position = 6000;
+ getCharacter(kCharacterKronos).characterPosition.location = 0;
+ getCharacter(kCharacterKronos).characterPosition.car = kCarKronos;
+ getCharacter(kCharacterKronos).inventoryItem = 0;
+ getCharacter(kCharacterKronos).clothes = 0;
+ setDoor(73, kCharacterCath, 0, 255, 255);
+ break;
+ default:
+ break;
}
}
@@ -403,22 +464,31 @@ void LogicManager::CONS_Kronos_InSeclusion(CONS_PARAMS) {
}
void LogicManager::HAND_Kronos_InSeclusion(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 157159392) {
- switch (msg->sender) {
- case kCharacterAnna:
- getCharacterCurrentParams(kCharacterKronos)[0] = 1;
- break;
- case kCharacterTatiana:
- getCharacterCurrentParams(kCharacterKronos)[1] = 1;
- break;
- case kCharacterAbbot:
- getCharacterCurrentParams(kCharacterKronos)[2] = 1;
- break;
- }
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1993500 && getCharacterCurrentParams(kCharacterKronos)[0] && getCharacterCurrentParams(kCharacterKronos)[1] && getCharacterCurrentParams(kCharacterKronos)[2]) {
+ CONS_Kronos_WBWait(0, 0, 0, 0);
}
- } else if (_gameTime > 1993500 && getCharacterCurrentParams(kCharacterKronos)[0] && getCharacterCurrentParams(kCharacterKronos)[1] && getCharacterCurrentParams(kCharacterKronos)[2]) {
- CONS_Kronos_WBWait(0, 0, 0, 0);
+
+ break;
+ case 157159392:
+ switch (msg->sender) {
+ case kCharacterAnna:
+ getCharacterCurrentParams(kCharacterKronos)[0] = 1;
+ break;
+ case kCharacterTatiana:
+ getCharacterCurrentParams(kCharacterKronos)[1] = 1;
+ break;
+ case kCharacterAbbot:
+ getCharacterCurrentParams(kCharacterKronos)[2] = 1;
+ break;
+ default:
+ break;
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -433,55 +503,77 @@ void LogicManager::CONS_Kronos_WBWait(CONS_PARAMS) {
}
void LogicManager::HAND_Kronos_WBWait(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterKronos)[0] && !inSalon(kCharacterMonsieur)) {
if (!getCharacterCurrentParams(kCharacterKronos)[1]) {
getCharacterCurrentParams(kCharacterKronos)[1] = _currentGameSessionTicks + 75;
- if (_currentGameSessionTicks == -75)
- goto LABEL_22;
+ if (_currentGameSessionTicks == -75) {
+ CONS_Kronos_VisitSalon(0, 0, 0, 0);
+ break;
+ }
}
+
if (getCharacterCurrentParams(kCharacterKronos)[1] < _currentGameSessionTicks) {
getCharacterCurrentParams(kCharacterKronos)[1] = 0x7FFFFFFF;
- goto LABEL_22;
+ CONS_Kronos_VisitSalon(0, 0, 0, 0);
+ break;
}
}
- if (getCharacterCurrentParams(kCharacterKronos)[2] == 0x7FFFFFFF || _gameTime <= 2002500)
- return;
- if (_gameTime <= 2052000) {
- if (!inSalon(kCharacterCath) || inSalon(kCharacterMonsieur) || !getCharacterCurrentParams(kCharacterKronos)[2]) {
- getCharacterCurrentParams(kCharacterKronos)[2] = _gameTime + 900;
- if (_gameTime == -900) {
- LABEL_21:
- if (!inSalon(kCharacterCath)) {
- send(kCharacterKronos, kCharacterAnna, 101169422, 0);
- send(kCharacterKronos, kCharacterTatiana, 101169422, 0);
- send(kCharacterKronos, kCharacterAbbot, 101169422, 0);
- CONS_Kronos_PreConcert(0, 0, 0, 0);
- return;
+
+ if (getCharacterCurrentParams(kCharacterKronos)[2] != 0x7FFFFFFF && _gameTime > 2002500) {
+ if (_gameTime <= 2052000) {
+ if (!inSalon(kCharacterCath) || inSalon(kCharacterMonsieur) || !getCharacterCurrentParams(kCharacterKronos)[2]) {
+ getCharacterCurrentParams(kCharacterKronos)[2] = _gameTime + 900;
+ if (_gameTime == -900) {
+ if (!inSalon(kCharacterCath)) {
+ send(kCharacterKronos, kCharacterAnna, 101169422, 0);
+ send(kCharacterKronos, kCharacterTatiana, 101169422, 0);
+ send(kCharacterKronos, kCharacterAbbot, 101169422, 0);
+ CONS_Kronos_PreConcert(0, 0, 0, 0);
+ break;
+ }
+
+ CONS_Kronos_VisitSalon(0, 0, 0, 0);
+ break;
}
- goto LABEL_22;
}
+
+ if (getCharacterCurrentParams(kCharacterKronos)[2] >= _gameTime)
+ break;
}
- if (getCharacterCurrentParams(kCharacterKronos)[2] >= _gameTime)
- return;
+
+ getCharacterCurrentParams(kCharacterKronos)[2] = 0x7FFFFFFF;
+ if (!inSalon(kCharacterCath)) {
+ send(kCharacterKronos, kCharacterAnna, 101169422, 0);
+ send(kCharacterKronos, kCharacterTatiana, 101169422, 0);
+ send(kCharacterKronos, kCharacterAbbot, 101169422, 0);
+ CONS_Kronos_PreConcert(0, 0, 0, 0);
+ break;
+ }
+
+ CONS_Kronos_VisitSalon(0, 0, 0, 0);
}
- getCharacterCurrentParams(kCharacterKronos)[2] = 0x7FFFFFFF;
- goto LABEL_21;
- }
- if (msg->action != 12) {
- if (msg->action != 17)
- return;
+
+ break;
+ case 12:
+ if (checkCathDir(kCarRestaurant, 60) || checkCathDir(kCarRestaurant, 59) || checkCathDir(kCarRestaurant, 83) || checkCathDir(kCarRestaurant, 81) || checkCathDir(kCarRestaurant, 87)) {
+ getCharacterCurrentParams(kCharacterKronos)[0] = 1;
+ }
+
+ break;
+ case 17:
if (!getCharacterCurrentParams(kCharacterKronos)[0] || !checkCathDir(kCarRestaurant, 51) || inSalon(kCharacterMonsieur)) {
getCharacterCurrentParams(kCharacterKronos)[0] = checkCathDir(kCarRestaurant, 60) || checkCathDir(kCarRestaurant, 59) || checkCathDir(kCarRestaurant, 83) || checkCathDir(kCarRestaurant, 81) || checkCathDir(kCarRestaurant, 87);
- return;
+ break;
}
- LABEL_22:
+
CONS_Kronos_VisitSalon(0, 0, 0, 0);
- return;
- }
- if (checkCathDir(kCarRestaurant, 60) || checkCathDir(kCarRestaurant, 59) || checkCathDir(kCarRestaurant, 83) || checkCathDir(kCarRestaurant, 81) || checkCathDir(kCarRestaurant, 87)) {
- getCharacterCurrentParams(kCharacterKronos)[0] = 1;
+ break;
+ default:
+ break;
}
+
}
void LogicManager::CONS_Kronos_VisitSalon(CONS_PARAMS) {
@@ -495,16 +587,24 @@ void LogicManager::CONS_Kronos_VisitSalon(CONS_PARAMS) {
}
void LogicManager::HAND_Kronos_VisitSalon(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] = 1;
KronosCall(&LogicManager::CONS_Kronos_SaveGame, 2, kEventKronosVisit, 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] == 1) {
- playNIS(kEventKronosVisit);
- send(kCharacterKronos, kCharacterAnna, 101169422, 0);
- send(kCharacterKronos, kCharacterTatiana, 101169422, 0);
- send(kCharacterKronos, kCharacterAbbot, 101169422, 0);
- bumpCath(kCarRestaurant, 60, 255);
- CONS_Kronos_ReturnComp(0, 0, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] == 1) {
+ playNIS(kEventKronosVisit);
+ send(kCharacterKronos, kCharacterAnna, 101169422, 0);
+ send(kCharacterKronos, kCharacterTatiana, 101169422, 0);
+ send(kCharacterKronos, kCharacterAbbot, 101169422, 0);
+ bumpCath(kCarRestaurant, 60, 255);
+ CONS_Kronos_ReturnComp(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -519,14 +619,22 @@ void LogicManager::CONS_Kronos_ReturnComp(CONS_PARAMS) {
}
void LogicManager::HAND_Kronos_ReturnComp(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterKronos).characterPosition.position = 7500;
getCharacter(kCharacterKronos).characterPosition.location = 0;
getCharacter(kCharacterKronos).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] = 1;
KronosCall(&LogicManager::CONS_Kronos_DoWalk, 2, 9270, 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] == 1) {
- CONS_Kronos_PreConcert(0, 0, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] == 1) {
+ CONS_Kronos_PreConcert(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -541,22 +649,15 @@ void LogicManager::CONS_Kronos_PreConcert(CONS_PARAMS) {
}
void LogicManager::HAND_Kronos_PreConcert(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterKronos).characterPosition.position = 6000;
- getCharacter(kCharacterKronos).characterPosition.location = 0;
- getCharacter(kCharacterKronos).characterPosition.car = kCarKronos;
- } else if (msg->action == 18 && getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] == 1) {
- playNIS(kEventKahinaPunchSuite4);
- endGame(3, 253, 0, 1);
- }
- } else {
+ switch (msg->action) {
+ case 0:
if (_gameTime > 2079000 && !getCharacterCurrentParams(kCharacterKronos)[1]) {
getCharacterCurrentParams(kCharacterKronos)[1] = 1;
setModel(75, 3);
setDoor(75, kCharacterCath, 3, 10, 9);
getCharacterCurrentParams(kCharacterKronos)[0] = 1;
}
+
if (_gameTime <= 2106000 || getCharacterCurrentParams(kCharacterKronos)[2]) {
if (getCharacterCurrentParams(kCharacterKronos)[0] && inInnerSanctum(kCharacterCath)) {
getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] = 1;
@@ -566,6 +667,22 @@ void LogicManager::HAND_Kronos_PreConcert(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterKronos)[2] = 1;
CONS_Kronos_StartConcert(0, 0, 0, 0);
}
+
+ break;
+ case 12:
+ getCharacter(kCharacterKronos).characterPosition.position = 6000;
+ getCharacter(kCharacterKronos).characterPosition.location = 0;
+ getCharacter(kCharacterKronos).characterPosition.car = kCarKronos;
+ break;
+ case 18:
+ if (getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] == 1) {
+ playNIS(kEventKahinaPunchSuite4);
+ endGame(3, 253, 0, true);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -592,6 +709,7 @@ void LogicManager::HAND_Kronos_StartConcert(HAND_PARAMS) {
playDialog(kCharacterKronos, "1917.lnk", -1, 0);
CONS_Kronos_Concert(0, 0, 0, 0);
}
+
break;
case 12:
setDoor(75, kCharacterCath, 1, 0, 0);
@@ -602,11 +720,12 @@ void LogicManager::HAND_Kronos_StartConcert(HAND_PARAMS) {
getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] = 2;
KronosCall(&LogicManager::CONS_Kronos_SaveGame, 2, kEventConcertStart, 0, 0);
}
+
break;
case 18:
if (getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] == 1) {
playNIS(kEventKahinaPunchSuite4);
- endGame(3, 253, 0, 1);
+ endGame(3, 253, 0, true);
} else if (getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] == 2) {
playNIS(kEventConcertStart);
claimNISLink(kCharacterKronos);
@@ -618,9 +737,10 @@ void LogicManager::HAND_Kronos_StartConcert(HAND_PARAMS) {
forceJump(kCharacterTatiana, &LogicManager::CONS_Tatiana_Concert);
CONS_Kronos_Concert(0, 0, 0, 0);
}
+
break;
default:
- return;
+ break;
}
}
@@ -638,40 +758,36 @@ void LogicManager::HAND_Kronos_Concert(HAND_PARAMS) {
switch (msg->action) {
case 0:
getCharacterCurrentParams(kCharacterKronos)[4] = getSoundTicks(kCharacterKronos);
- if (getCharacterCurrentParams(kCharacterKronos)[5] >= 54)
- goto LABEL_21;
-
- if (_concertPhasesTicks[getCharacterCurrentParams(kCharacterKronos)[5]] >= getCharacterCurrentParams(kCharacterKronos)[4])
- goto LABEL_21;
-
- startCycOtis(kCharacterKronos, _concertPhases[getCharacterCurrentParams(kCharacterKronos)[5]]);
- if (!scumm_stricmp(_concertPhases[getCharacterCurrentParams(kCharacterKronos)[5]], "201e")) {
- if (checkCathDir(kCarKronos, 85) || checkCathDir(kCarKronos, 86))
- bumpCath(kCarKronos, 83, 255);
- blockView(kCharacterKronos, kCarKronos, 85);
- blockView(kCharacterKronos, kCarKronos, 86);
- goto LABEL_20;
- }
- if (!scumm_stricmp(_concertPhases[getCharacterCurrentParams(kCharacterKronos)[5]], "201c")) {
- if (checkCathDir(kCarKronos, 85))
- bumpCath(kCarKronos, 83, 255);
- blockView(kCharacterKronos, kCarKronos, 85);
- goto LABEL_19;
- }
- if (scumm_stricmp(_concertPhases[getCharacterCurrentParams(kCharacterKronos)[5]], "201d")) {
- releaseView(kCharacterKronos, kCarKronos, 85);
- LABEL_19:
- releaseView(kCharacterKronos, kCarKronos, 86);
- goto LABEL_20;
+
+ if ((getCharacterCurrentParams(kCharacterKronos)[5] < 54) && (_concertPhasesTicks[getCharacterCurrentParams(kCharacterKronos)[5]] < getCharacterCurrentParams(kCharacterKronos)[4])) {
+ startCycOtis(kCharacterKronos, _concertPhases[getCharacterCurrentParams(kCharacterKronos)[5]]);
+ if (!scumm_stricmp(_concertPhases[getCharacterCurrentParams(kCharacterKronos)[5]], "201e")) {
+ if (checkCathDir(kCarKronos, 85) || checkCathDir(kCarKronos, 86))
+ bumpCath(kCarKronos, 83, 255);
+
+ blockView(kCharacterKronos, kCarKronos, 85);
+ blockView(kCharacterKronos, kCarKronos, 86);
+ } else {
+ if (!scumm_stricmp(_concertPhases[getCharacterCurrentParams(kCharacterKronos)[5]], "201c")) {
+ if (checkCathDir(kCarKronos, 85))
+ bumpCath(kCarKronos, 83, 255);
+ blockView(kCharacterKronos, kCarKronos, 85);
+ releaseView(kCharacterKronos, kCarKronos, 86);
+ } else if (scumm_stricmp(_concertPhases[getCharacterCurrentParams(kCharacterKronos)[5]], "201d")) {
+ releaseView(kCharacterKronos, kCarKronos, 85);
+ releaseView(kCharacterKronos, kCarKronos, 86);
+ } else {
+ if (checkCathDir(kCarKronos, 86))
+ bumpCath(kCarKronos, 83, 255);
+
+ blockView(kCharacterKronos, kCarKronos, 86);
+ releaseView(kCharacterKronos, kCarKronos, 85);
+ }
+ }
+
+ getCharacterCurrentParams(kCharacterKronos)[5]++;
}
- if (checkCathDir(kCarKronos, 86))
- bumpCath(kCarKronos, 83, 255);
- blockView(kCharacterKronos, kCarKronos, 86);
- releaseView(kCharacterKronos, kCarKronos, 85);
- LABEL_20:
- getCharacterCurrentParams(kCharacterKronos)[5]++;
- LABEL_21:
if (cathHasItem(kItemBriefcase))
setDoor(76, kCharacterKronos, 0, 0, 9);
else
@@ -682,22 +798,29 @@ void LogicManager::HAND_Kronos_Concert(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterKronos)[7] = _gameTime + 13500;
}
- if (getCharacterCurrentParams(kCharacterKronos)[9] == 0x7FFFFFFF || getCharacterCurrentParams(kCharacterKronos)[6] >= _gameTime)
- goto LABEL_35;
- if (getCharacterCurrentParams(kCharacterKronos)[7] < _gameTime)
- goto LABEL_33;
- if (!getCharacterCurrentParams(kCharacterKronos)[0] || !getCharacterCurrentParams(kCharacterKronos)[9]) {
- getCharacterCurrentParams(kCharacterKronos)[9] = _gameTime + 450;
- if (_gameTime == -450)
- goto LABEL_34;
- }
- if (getCharacterCurrentParams(kCharacterKronos)[9] < _gameTime) {
- LABEL_33:
- getCharacterCurrentParams(kCharacterKronos)[9] = 0x7FFFFFFF;
- LABEL_34:
- send(kCharacterKronos, kCharacterKahina, 237555748, 0);
+ if (getCharacterCurrentParams(kCharacterKronos)[9] != 0x7FFFFFFF && getCharacterCurrentParams(kCharacterKronos)[6] < _gameTime) {
+ if (getCharacterCurrentParams(kCharacterKronos)[7] < _gameTime) {
+ getCharacterCurrentParams(kCharacterKronos)[9] = 0x7FFFFFFF;
+ send(kCharacterKronos, kCharacterKahina, 237555748, 0);
+ } else {
+ bool skip = false;
+
+ if (!getCharacterCurrentParams(kCharacterKronos)[0] || !getCharacterCurrentParams(kCharacterKronos)[9]) {
+ getCharacterCurrentParams(kCharacterKronos)[9] = _gameTime + 450;
+
+ if (_gameTime == -450) {
+ skip = true;
+ send(kCharacterKronos, kCharacterKahina, 237555748, 0);
+ }
+ }
+
+ if (!skip && getCharacterCurrentParams(kCharacterKronos)[9] < _gameTime) {
+ getCharacterCurrentParams(kCharacterKronos)[9] = 0x7FFFFFFF;
+ send(kCharacterKronos, kCharacterKahina, 237555748, 0);
+ }
+ }
}
- LABEL_35:
+
if (!getCharacterCurrentParams(kCharacterKronos)[0])
getCharacterCurrentParams(kCharacterKronos)[1] = getCharacterCurrentParams(kCharacterKronos)[2];
@@ -721,20 +844,27 @@ void LogicManager::HAND_Kronos_Concert(HAND_PARAMS) {
case 3:
playNIS(kEventCathFallingAsleep);
fadeToBlack();
+
while (dialogRunning("1919.LNK"))
_engine->getSoundManager()->soundThread();
+
playNIS(kEventCathWakingUp);
cleanNIS();
getCharacterCurrentParams(kCharacterKronos)[2] = 162000;
break;
+ default:
+ break;
}
+
getCharacterCurrentParams(kCharacterKronos)[1] = getCharacterCurrentParams(kCharacterKronos)[2];
}
+
if ((getCharacterCurrentParams(kCharacterKronos)[4] > 23400 || getCharacterCurrentParams(kCharacterKronos)[8]) && inInnerSanctum(kCharacterCath)) {
getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] = 1;
KronosCall(&LogicManager::CONS_Kronos_SaveGame, 2, kEventKahinaWrongDoor, 0, 0);
}
- return;
+
+ break;
case 2:
setDoor(75, kCharacterCath, 3, 10, 9);
if (getCharacterCurrentParams(kCharacterKronos)[8]) {
@@ -751,40 +881,47 @@ void LogicManager::HAND_Kronos_Concert(HAND_PARAMS) {
} else {
CONS_Kronos_AfterConcert(0, 0, 0, 0);
}
- return;
+
+ break;
case 9:
getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] = 2;
KronosCall(&LogicManager::CONS_Kronos_SaveGame, 2, kEventConcertLeaveWithBriefcase, 0, 0);
- return;
+ break;
case 12:
_gameTime = 2115000;
_gameTimeTicksDelta = 3;
+
if (checkCathDir(kCarKronos, 88) || checkCathDir(kCarKronos, 84) || checkCathDir(kCarKronos, 85) || checkCathDir(kCarKronos, 86) || checkCathDir(kCarKronos, 83)) {
getCharacterCurrentParams(kCharacterKronos)[0] = 1;
}
+
if (cathHasItem(kItemFirebird))
setDoor(75, kCharacterCath, 0, 0, 0);
else
setDoor(75, kCharacterCath, 0, 10, 9);
+
setDoor(76, kCharacterKronos, 0, 10, 9);
_gameProgress[kProgressField40] = 1;
startCycOtis(kCharacterKronos, "201a");
getCharacterCurrentParams(kCharacterKronos)[2] = 2700;
getCharacterCurrentParams(kCharacterKronos)[1] = 2700;
- return;
+ break;
case 17:
getCharacterCurrentParams(kCharacterKronos)[0] = checkCathDir(kCarKronos, 88) || checkCathDir(kCarKronos, 84) || checkCathDir(kCarKronos, 85) || checkCathDir(kCarKronos, 86) || checkCathDir(kCarKronos, 83);
if (cathHasItem(kItemFirebird))
setDoor(75, kCharacterCath, 3, 0, 0);
else
setDoor(75, kCharacterCath, 0, 10, 9);
- return;
+
+ break;
case 18:
switch (getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8]) {
case 1:
playNIS(kEventKahinaWrongDoor);
+
if (cathHasItem(kItemBriefcase))
takeCathItem(kItemBriefcase);
+
playDialog(0, "BUMP", -1, 0);
bumpCath(kCarKronos, 81, 255);
setDoor(75, kCharacterCath, 3, 0, 0);
@@ -802,10 +939,13 @@ void LogicManager::HAND_Kronos_Concert(HAND_PARAMS) {
bumpCath(kCarGreenSleeping, 26, 255);
CONS_Kronos_AfterConcert(0, 0, 0, 0);
break;
+ default:
+ break;
}
- return;
+
+ break;
default:
- return;
+ break;
}
}
@@ -820,35 +960,42 @@ void LogicManager::CONS_Kronos_AfterConcert(CONS_PARAMS) {
}
void LogicManager::HAND_Kronos_AfterConcert(HAND_PARAMS) {
- if (msg->action <= 12) {
- if (msg->action != 12) {
- if (msg->action == 0 && inInnerSanctum(kCharacterCath)) {
- getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] = 1;
- KronosCall(&LogicManager::CONS_Kronos_SaveGame, 2, kEventKahinaWrongDoor, 0, 0);
- }
- return;
+ switch (msg->action) {
+ case 0:
+ if (inInnerSanctum(kCharacterCath)) {
+ getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] = 1;
+ KronosCall(&LogicManager::CONS_Kronos_SaveGame, 2, kEventKahinaWrongDoor, 0, 0);
}
+
+ break;
+ case 12:
_gameProgress[kProgressField40] = 0;
setDoor(75, kCharacterCath, 3, 0, 0);
send(kCharacterKronos, kCharacterRebecca, 191668032, 0);
+
if (_gameEvents[kEventConcertLeaveWithBriefcase])
- return;
- LABEL_16:
+ break;
+
CONS_Kronos_AwaitingCath3(0, 0, 0, 0);
- return;
- }
- if (msg->action != 18) {
- if (msg->action != 235599361)
- return;
- goto LABEL_16;
- }
- if (getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] == 1) {
- playNIS(kEventKahinaWrongDoor);
- if (cathHasItem(kItemBriefcase))
- takeCathItem(kItemBriefcase);
- playDialog(0, "BUMP", -1, 0);
- bumpCath(kCarKronos, 81, 255);
- playDialog(0, "lib015", -1, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] == 1) {
+ playNIS(kEventKahinaWrongDoor);
+
+ if (cathHasItem(kItemBriefcase))
+ takeCathItem(kItemBriefcase);
+
+ playDialog(0, "BUMP", -1, 0);
+ bumpCath(kCarKronos, 81, 255);
+ playDialog(0, "lib015", -1, 0);
+ }
+
+ break;
+ case 235599361:
+ CONS_Kronos_AwaitingCath3(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -863,66 +1010,28 @@ void LogicManager::CONS_Kronos_AwaitingCath3(CONS_PARAMS) {
}
void LogicManager::HAND_Kronos_AwaitingCath3(HAND_PARAMS) {
- if (msg->action > 9) {
- switch (msg->action) {
- case 12:
- setDoor(75, kCharacterKronos, 3, 10, 9);
- break;
- case 18:
- switch (getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8]) {
- case 1:
- playNIS(kEventKronosReturnBriefcase);
- bumpCath(kCarKronos, 87, 255);
- takeCathItem(kItemBriefcase);
- takeCathItem(kItemScarf);
- CONS_Kronos_Finished(0, 0, 0, 0);
- break;
- case 2:
- playNIS(kEventKronosBringEggCeiling);
- bumpCath(kCarKronos, 87, 255);
- takeCathItem(kItemFirebird);
- _gameInventory[kItemFirebird].location = 5;
- CONS_Kronos_Finished(0, 0, 0, 0);
- break;
- case 3:
- takeCathItem(kItemFirebird);
- _gameInventory[kItemFirebird].location = 5;
- playNIS(kEventKronosBringEgg);
- bumpCath(kCarKronos, 87, 255);
- giveCathItem(kItemBriefcase);
- CONS_Kronos_Finished(0, 0, 0, 0);
- break;
- case 4:
- playNIS(kEventKronosBringNothing);
- endGame(0, 1, 0, 1);
- break;
- case 5:
- playNIS(kEventKahinaPunchSuite4);
- endGame(0, 1, 0, 1);
- break;
- case 6:
- playNIS(kEventKahinaWrongDoor);
- if (cathHasItem(kItemBriefcase))
- takeCathItem(kItemBriefcase);
- playDialog(0, "BUMP", -1, 0);
- bumpCath(kCarKronos, 81, 255);
- playDialog(0, "lib015", -1, 0);
- break;
- default:
- return;
+ switch (msg->action) {
+ case 0:
+ if (inInnerSanctum(kCharacterCath)) {
+ if (_gameProgress[kProgressField44]) {
+ getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] = 5;
+ KronosCall(&LogicManager::CONS_Kronos_SaveGame, 2, kEventKahinaPunchBaggageCarEntrance, 0, 0);
+ } else {
+ getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] = 6;
+ KronosCall(&LogicManager::CONS_Kronos_SaveGame, 2, kEventKahinaWrongDoor, 0, 0);
}
- break;
- case 138085344:
- CONS_Kronos_Finished(0, 0, 0, 0);
- break;
}
- } else if (msg->action >= 8) {
+
+ break;
+ case 8:
+ case 9:
if (msg->action == 8) {
if (!cathRunningDialog("LIB012"))
playDialog(0, "LIB012", -1, 0);
} else if (!cathRunningDialog("LIB013")) {
playDialog(0, "LIB013", -1, 0);
}
+
if (_gameEvents[kEventConcertLeaveWithBriefcase])
fedEx(kCharacterKronos, kCharacterKahina, 137503360, 0);
if (cathHasItem(kItemBriefcase)) {
@@ -938,14 +1047,61 @@ void LogicManager::HAND_Kronos_AwaitingCath3(HAND_PARAMS) {
getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] = 4;
KronosCall(&LogicManager::CONS_Kronos_SaveGame, 2, kEventKronosBringNothing, 0, 0);
}
- } else if (msg->action == 0 && inInnerSanctum(kCharacterCath)) {
- if (_gameProgress[kProgressField44]) {
- getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] = 5;
- KronosCall(&LogicManager::CONS_Kronos_SaveGame, 2, kEventKahinaPunchBaggageCarEntrance, 0, 0);
- } else {
- getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] = 6;
- KronosCall(&LogicManager::CONS_Kronos_SaveGame, 2, kEventKahinaWrongDoor, 0, 0);
+
+ break;
+ case 12:
+ setDoor(75, kCharacterKronos, 3, 10, 9);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8]) {
+ case 1:
+ playNIS(kEventKronosReturnBriefcase);
+ bumpCath(kCarKronos, 87, 255);
+ takeCathItem(kItemBriefcase);
+ takeCathItem(kItemScarf);
+ CONS_Kronos_Finished(0, 0, 0, 0);
+ break;
+ case 2:
+ playNIS(kEventKronosBringEggCeiling);
+ bumpCath(kCarKronos, 87, 255);
+ takeCathItem(kItemFirebird);
+ _gameInventory[kItemFirebird].location = 5;
+ CONS_Kronos_Finished(0, 0, 0, 0);
+ break;
+ case 3:
+ takeCathItem(kItemFirebird);
+ _gameInventory[kItemFirebird].location = 5;
+ playNIS(kEventKronosBringEgg);
+ bumpCath(kCarKronos, 87, 255);
+ giveCathItem(kItemBriefcase);
+ CONS_Kronos_Finished(0, 0, 0, 0);
+ break;
+ case 4:
+ playNIS(kEventKronosBringNothing);
+ endGame(0, 1, 0, true);
+ break;
+ case 5:
+ playNIS(kEventKahinaPunchSuite4);
+ endGame(0, 1, 0, true);
+ break;
+ case 6:
+ playNIS(kEventKahinaWrongDoor);
+ if (cathHasItem(kItemBriefcase))
+ takeCathItem(kItemBriefcase);
+ playDialog(0, "BUMP", -1, 0);
+ bumpCath(kCarKronos, 81, 255);
+ playDialog(0, "lib015", -1, 0);
+ break;
+ default:
+ break;
}
+
+ break;
+ case 138085344:
+ CONS_Kronos_Finished(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -960,10 +1116,19 @@ void LogicManager::CONS_Kronos_Finished(CONS_PARAMS) {
}
void LogicManager::HAND_Kronos_Finished(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- setDoor(75, kCharacterCath, 3, 10, 9);
- } else if (msg->action == 18 && getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] == 1) {
+ switch (msg->action) {
+ case 0:
+ if (inInnerSanctum(kCharacterCath)) {
+ getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] = 1;
+ KronosCall(&LogicManager::CONS_Kronos_SaveGame, 2, kEventKahinaWrongDoor, 0, 0);
+ }
+
+ break;
+ case 12:
+ setDoor(75, kCharacterCath, 3, 10, 9);
+ break;
+ case 18:
+ if (getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] == 1) {
playNIS(kEventKahinaWrongDoor);
if (cathHasItem(kItemBriefcase))
takeCathItem(kItemBriefcase);
@@ -971,10 +1136,11 @@ void LogicManager::HAND_Kronos_Finished(HAND_PARAMS) {
bumpCath(kCarKronos, 81, 255);
playDialog(0, "lib015", -1, 0);
}
- } else if (inInnerSanctum(kCharacterCath)) {
- getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] = 1;
- KronosCall(&LogicManager::CONS_Kronos_SaveGame, 2, kEventKahinaWrongDoor, 0, 0);
- }
+
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Kronos_StartPart4(CONS_PARAMS) {
@@ -988,8 +1154,13 @@ void LogicManager::CONS_Kronos_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Kronos_StartPart4(HAND_PARAMS) {
- if (msg->action == 12)
- endGraphics(18);
+ switch (msg->action) {
+ case 12:
+ endGraphics(kCharacterKronos);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Kronos_StartPart5(CONS_PARAMS) {
@@ -1003,8 +1174,13 @@ void LogicManager::CONS_Kronos_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Kronos_StartPart5(HAND_PARAMS) {
- if (msg->action == 12)
- endGraphics(18);
+ switch (msg->action) {
+ case 12:
+ endGraphics(kCharacterKronos);
+ break;
+ default:
+ break;
+ }
}
void (LogicManager::*LogicManager::_functionsKronos[])(HAND_PARAMS) = {
Commit: 9af209d4180275bd06cd26d67980ba2a751e80aa
https://github.com/scummvm/scummvm/commit/9af209d4180275bd06cd26d67980ba2a751e80aa
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Mahmud logic
Changed paths:
engines/lastexpress/characters/mahmud.cpp
diff --git a/engines/lastexpress/characters/mahmud.cpp b/engines/lastexpress/characters/mahmud.cpp
index a6e0c5171ec..501a6768b90 100644
--- a/engines/lastexpress/characters/mahmud.cpp
+++ b/engines/lastexpress/characters/mahmud.cpp
@@ -47,7 +47,7 @@ void LogicManager::CONS_Mahmud(int chapter) {
CONS_Mahmud_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -68,19 +68,26 @@ void LogicManager::CONS_Mahmud_DebugWalks(CONS_PARAMS) {
}
void LogicManager::HAND_Mahmud_DebugWalks(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterMahmud).characterPosition.position = 0;
- getCharacter(kCharacterMahmud).characterPosition.location = 0;
- getCharacter(kCharacterMahmud).characterPosition.car = kCarGreenSleeping;
- getCharacterCurrentParams(kCharacterMahmud)[0] = 10000;
- }
- } else if (walk(kCharacterMahmud, kCarGreenSleeping, getCharacterCurrentParams(kCharacterMahmud)[0])) {
- if (getCharacterCurrentParams(kCharacterMahmud)[0] == 10000) {
- getCharacterCurrentParams(kCharacterMahmud)[0] = 0;
- } else {
- getCharacterCurrentParams(kCharacterMahmud)[0] = 10000;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterMahmud, kCarGreenSleeping, getCharacterCurrentParams(kCharacterMahmud)[0])) {
+ if (getCharacterCurrentParams(kCharacterMahmud)[0] == 10000) {
+ getCharacterCurrentParams(kCharacterMahmud)[0] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterMahmud)[0] = 10000;
+ }
}
+
+ break;
+ case 12:
+ getCharacter(kCharacterMahmud).characterPosition.position = 0;
+ getCharacter(kCharacterMahmud).characterPosition.location = 0;
+ getCharacter(kCharacterMahmud).characterPosition.car = kCarGreenSleeping;
+ getCharacterCurrentParams(kCharacterMahmud)[0] = 10000;
+
+ break;
+ default:
+ break;
}
}
@@ -97,12 +104,17 @@ void LogicManager::CONS_Mahmud_DoSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Mahmud_DoSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
getCharacter(kCharacterMahmud).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMahmud, _functionsMahmud[getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall]]);
fedEx(kCharacterMahmud, kCharacterMahmud, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterMahmud, (char *)&getCharacterCurrentParams(kCharacterMahmud));
+ break;
+ default:
+ break;
}
}
@@ -121,14 +133,19 @@ void LogicManager::CONS_Mahmud_DoCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Mahmud_DoCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterMahmud, getCharacterCurrentParams(kCharacterMahmud)[3]);
getCharacter(kCharacterMahmud).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMahmud, _functionsMahmud[getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall]]);
fedEx(kCharacterMahmud, kCharacterMahmud, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterMahmud, (char *)&getCharacter(kCharacterMahmud).callParams[getCharacter(kCharacterMahmud).currentCall]);
blockAtDoor(kCharacterMahmud, getCharacterCurrentParams(kCharacterMahmud)[3]);
+ break;
+ default:
+ break;
}
}
@@ -149,27 +166,32 @@ void LogicManager::CONS_Mahmud_DoBumpCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Mahmud_DoBumpCorrOtis(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 3) {
- releaseAtDoor(kCharacterMahmud, getCharacterCurrentParams(kCharacterMahmud)[3]);
- getCharacter(kCharacterMahmud).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterMahmud, _functionsMahmud[getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall]]);
- fedEx(kCharacterMahmud, kCharacterMahmud, 18, 0);
- } else if (msg->action == 12) {
- startSeqOtis(kCharacterMahmud, (char *)&getCharacter(kCharacterMahmud).callParams[getCharacter(kCharacterMahmud).currentCall]);
- blockAtDoor(kCharacterMahmud, getCharacterCurrentParams(kCharacterMahmud)[3]);
- }
- } else {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterMahmud)[6] ||
(getCharacterCurrentParams(kCharacterMahmud)[6] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMahmud)[4], _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMahmud)[4] != 0)) {
if (getCharacterCurrentParams(kCharacterMahmud)[6] >= _currentGameSessionTicks)
- return;
+ break;
getCharacterCurrentParams(kCharacterMahmud)[6] = 0x7FFFFFFF;
}
if (!cathFacingUp())
bumpCathFDoor(getCharacterCurrentParams(kCharacterMahmud)[5]);
+
+ break;
+ case 3:
+ releaseAtDoor(kCharacterMahmud, getCharacterCurrentParams(kCharacterMahmud)[3]);
+ getCharacter(kCharacterMahmud).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMahmud, _functionsMahmud[getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall]]);
+ fedEx(kCharacterMahmud, kCharacterMahmud, 18, 0);
+ break;
+ case 12:
+ startSeqOtis(kCharacterMahmud, (char *)&getCharacter(kCharacterMahmud).callParams[getCharacter(kCharacterMahmud).currentCall]);
+ blockAtDoor(kCharacterMahmud, getCharacterCurrentParams(kCharacterMahmud)[3]);
+ break;
+ default:
+ break;
}
}
@@ -186,12 +208,17 @@ void LogicManager::CONS_Mahmud_DoDialog(CONS_PARAMS) {
}
void LogicManager::HAND_Mahmud_DoDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterMahmud).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMahmud, _functionsMahmud[getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall]]);
fedEx(kCharacterMahmud, kCharacterMahmud, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterMahmud, (char *)&getCharacter(kCharacterMahmud).callParams[getCharacter(kCharacterMahmud).currentCall], -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -208,12 +235,17 @@ void LogicManager::CONS_Mahmud_DoCondDialog(CONS_PARAMS) {
}
void LogicManager::HAND_Mahmud_DoCondDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterMahmud).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMahmud, _functionsMahmud[getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall]]);
fedEx(kCharacterMahmud, kCharacterMahmud, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterMahmud, (char *)&getCharacter(kCharacterMahmud).callParams[getCharacter(kCharacterMahmud).currentCall], getVolume(kCharacterCond1), 0);
+ break;
+ default:
+ break;
}
}
@@ -230,11 +262,12 @@ void LogicManager::CONS_Mahmud_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_Mahmud_DoWait(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterMahmud)[1] ||
(getCharacterCurrentParams(kCharacterMahmud)[1] = _gameTime + getCharacterCurrentParams(kCharacterMahmud)[0], _gameTime + getCharacterCurrentParams(kCharacterMahmud)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterMahmud)[1] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterMahmud)[1] = 0x7FFFFFFF;
}
@@ -242,6 +275,9 @@ void LogicManager::HAND_Mahmud_DoWait(HAND_PARAMS) {
getCharacter(kCharacterMahmud).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMahmud, _functionsMahmud[getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall]]);
fedEx(kCharacterMahmud, kCharacterMahmud, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -259,22 +295,25 @@ void LogicManager::CONS_Mahmud_SaveGame(CONS_PARAMS) {
}
void LogicManager::HAND_Mahmud_SaveGame(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- save(
- kCharacterMahmud,
- getCharacterCurrentParams(kCharacterMahmud)[0],
- getCharacterCurrentParams(kCharacterMahmud)[1]
- );
+ switch (msg->action) {
+ case 0:
+ getCharacter(kCharacterMahmud).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMahmud, _functionsMahmud[getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall]]);
+ fedEx(kCharacterMahmud, kCharacterMahmud, 18, 0);
+ break;
+ case 12:
+ save(
+ kCharacterMahmud,
+ getCharacterCurrentParams(kCharacterMahmud)[0],
+ getCharacterCurrentParams(kCharacterMahmud)[1]
+ );
- getCharacter(kCharacterMahmud).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterMahmud, _functionsMahmud[getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall]]);
- fedEx(kCharacterMahmud, kCharacterMahmud, 18, 0);
- }
- } else {
getCharacter(kCharacterMahmud).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMahmud, _functionsMahmud[getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall]]);
fedEx(kCharacterMahmud, kCharacterMahmud, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -351,7 +390,7 @@ void LogicManager::HAND_Mahmud_CathKnockingHarem(HAND_PARAMS) {
case 0:
if (getCharacterCurrentParams(kCharacterMahmud)[5] || (getCharacterCurrentParams(kCharacterMahmud)[5] = _gameTime + 13500, _gameTime != -13500)) {
if (getCharacterCurrentParams(kCharacterMahmud)[5] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterMahmud)[5] = 0x7FFFFFFF;
}
@@ -411,6 +450,7 @@ void LogicManager::HAND_Mahmud_CathKnockingHarem(HAND_PARAMS) {
break;
}
}
+
if (getCharacterCurrentParams(kCharacterMahmud)[3]) {
if (_gameTime >= 2418300) {
getCharacterCurrentParams(kCharacterMahmud)[2] = 0;
@@ -437,9 +477,10 @@ void LogicManager::HAND_Mahmud_CathKnockingHarem(HAND_PARAMS) {
bumpCathFDoor(8);
break;
default:
- return;
+ break;
}
}
+
break;
case 12:
if (!getCharacterCurrentParams(kCharacterMahmud)[1]) {
@@ -487,90 +528,14 @@ void LogicManager::CONS_Mahmud_CondKnocking(CONS_PARAMS) {
}
void LogicManager::HAND_Mahmud_CondKnocking(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterMahmud).characterPosition.location = 0;
- setDoor(4, kCharacterCath, 3, 10, 9);
- startCycOtis(kCharacterMahmud, "614Kd");
- softBlockAtDoor(kCharacterMahmud, 4);
- getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 2;
- MahmudCall(&LogicManager::CONS_Mahmud_DoDialog, "MAH1170A", 0, 0, 0);
- break;
- case 2:
- getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 3;
- MahmudCall(&LogicManager::CONS_Mahmud_DoCondDialog, "MAH1170B", 0, 0, 0);
- break;
- case 3:
- getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 4;
- MahmudCall(&LogicManager::CONS_Mahmud_DoDialog, "MAH1170C", 0, 0, 0);
- break;
- case 4:
- getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 5;
- MahmudCall(&LogicManager::CONS_Mahmud_DoCondDialog, "MAH1170D", 0, 0, 0);
- break;
- case 5:
- getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 6;
- MahmudCall(&LogicManager::CONS_Mahmud_DoDialog, "MAH1170E", 0, 0, 0);
- break;
- case 6:
- getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 7;
- MahmudCall(&LogicManager::CONS_Mahmud_DoCondDialog, "MAH1170F", 0, 0, 0);
- break;
- case 7:
- getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 8;
- MahmudCall(&LogicManager::CONS_Mahmud_DoCorrOtis, "614Ld", 4, 0, 0);
- break;
- case 8:
- send(kCharacterMahmud, kCharacterCond1, 156567128, 0);
- startCycOtis(kCharacterMahmud, "614Bd");
- softBlockAtDoor(kCharacterMahmud, 4);
- getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 9;
- MahmudCall(&LogicManager::CONS_Mahmud_DoDialog, "MAH1170G", 0, 0, 0);
- break;
- case 9:
- getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 10;
- MahmudCall(&LogicManager::CONS_Mahmud_DoCondDialog, "MAH1170H", 0, 0, 0);
- break;
- case 10:
- setDoor(5, kCharacterMahmud, 3, 10, 9);
- setDoor(6, kCharacterMahmud, 3, 10, 9);
- setDoor(7, kCharacterMahmud, 3, 10, 9);
- setDoor(8, kCharacterMahmud, 3, 10, 9);
- break;
- case 11:
- softReleaseAtDoor(kCharacterMahmud, 4);
- getCharacter(kCharacterMahmud).characterPosition.location = 1;
- endGraphics(kCharacterMahmud);
- setDoor(4, kCharacterMahmud, 3, 10, 9);
-
- getCharacter(kCharacterMahmud).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterMahmud, _functionsMahmud[getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall]]);
- fedEx(kCharacterMahmud, kCharacterMahmud, 18, 0);
- break;
- default:
- return;
- }
- } else if (msg->action == 123852928) {
- if (whoRunningDialog(kCharacterMahmud))
- fadeDialog(kCharacterMahmud);
- setDoor(5, kCharacterClerk, 3, 10, 9);
- setDoor(6, kCharacterClerk, 3, 10, 9);
- setDoor(7, kCharacterClerk, 3, 10, 9);
- setDoor(8, kCharacterClerk, 3, 10, 9);
- getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 11;
- MahmudCall(&LogicManager::CONS_Mahmud_DoCorrOtis, "614Cd", 4, 0, 0);
- }
- } else if (msg->action == 12) {
- send(kCharacterMahmud, kCharacterCond1, 102227384, 0);
- getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 1;
- MahmudCall(&LogicManager::CONS_Mahmud_DoCorrOtis, "614Ad", 4, 0, 0);
- } else if (msg->action >= 8 && msg->action <= 9) {
+ switch (msg->action) {
+ case 8:
+ case 9:
if (msg->action == 8)
playDialog(0, "LIB012", -1, 0);
else
playDialog(0, "LIB013", -1, 0);
+
if (!whoRunningDialog(kCharacterMahmud)) {
getCharacterCurrentParams(kCharacterMahmud)[0]++;
if (getCharacterCurrentParams(kCharacterMahmud)[0] == 1) {
@@ -581,6 +546,7 @@ void LogicManager::HAND_Mahmud_CondKnocking(HAND_PARAMS) {
playDialog(kCharacterMahmud, "MAH1174", -1, 0);
}
}
+
switch (checkCathDir()) {
case 55:
bumpCathFDoor(5);
@@ -595,8 +561,94 @@ void LogicManager::HAND_Mahmud_CondKnocking(HAND_PARAMS) {
bumpCathFDoor(8);
break;
default:
- return;
+ break;
}
+
+ break;
+ case 12:
+ send(kCharacterMahmud, kCharacterCond1, 102227384, 0);
+ getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 1;
+ MahmudCall(&LogicManager::CONS_Mahmud_DoCorrOtis, "614Ad", 4, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterMahmud).characterPosition.location = 0;
+ setDoor(4, kCharacterCath, 3, 10, 9);
+ startCycOtis(kCharacterMahmud, "614Kd");
+ softBlockAtDoor(kCharacterMahmud, 4);
+ getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 2;
+ MahmudCall(&LogicManager::CONS_Mahmud_DoDialog, "MAH1170A", 0, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 3;
+ MahmudCall(&LogicManager::CONS_Mahmud_DoCondDialog, "MAH1170B", 0, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 4;
+ MahmudCall(&LogicManager::CONS_Mahmud_DoDialog, "MAH1170C", 0, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 5;
+ MahmudCall(&LogicManager::CONS_Mahmud_DoCondDialog, "MAH1170D", 0, 0, 0);
+ break;
+ case 5:
+ getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 6;
+ MahmudCall(&LogicManager::CONS_Mahmud_DoDialog, "MAH1170E", 0, 0, 0);
+ break;
+ case 6:
+ getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 7;
+ MahmudCall(&LogicManager::CONS_Mahmud_DoCondDialog, "MAH1170F", 0, 0, 0);
+ break;
+ case 7:
+ getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 8;
+ MahmudCall(&LogicManager::CONS_Mahmud_DoCorrOtis, "614Ld", 4, 0, 0);
+ break;
+ case 8:
+ send(kCharacterMahmud, kCharacterCond1, 156567128, 0);
+ startCycOtis(kCharacterMahmud, "614Bd");
+ softBlockAtDoor(kCharacterMahmud, 4);
+ getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 9;
+ MahmudCall(&LogicManager::CONS_Mahmud_DoDialog, "MAH1170G", 0, 0, 0);
+ break;
+ case 9:
+ getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 10;
+ MahmudCall(&LogicManager::CONS_Mahmud_DoCondDialog, "MAH1170H", 0, 0, 0);
+ break;
+ case 10:
+ setDoor(5, kCharacterMahmud, 3, 10, 9);
+ setDoor(6, kCharacterMahmud, 3, 10, 9);
+ setDoor(7, kCharacterMahmud, 3, 10, 9);
+ setDoor(8, kCharacterMahmud, 3, 10, 9);
+ break;
+ case 11:
+ softReleaseAtDoor(kCharacterMahmud, 4);
+ getCharacter(kCharacterMahmud).characterPosition.location = 1;
+ endGraphics(kCharacterMahmud);
+ setDoor(4, kCharacterMahmud, 3, 10, 9);
+
+ getCharacter(kCharacterMahmud).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMahmud, _functionsMahmud[getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall]]);
+ fedEx(kCharacterMahmud, kCharacterMahmud, 18, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 123852928:
+ if (whoRunningDialog(kCharacterMahmud))
+ fadeDialog(kCharacterMahmud);
+
+ setDoor(5, kCharacterClerk, 3, 10, 9);
+ setDoor(6, kCharacterClerk, 3, 10, 9);
+ setDoor(7, kCharacterClerk, 3, 10, 9);
+ setDoor(8, kCharacterClerk, 3, 10, 9);
+ getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 11;
+ MahmudCall(&LogicManager::CONS_Mahmud_DoCorrOtis, "614Cd", 4, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -611,10 +663,12 @@ void LogicManager::CONS_Mahmud_CheckF(CONS_PARAMS) {
}
void LogicManager::HAND_Mahmud_CheckF(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 1;
MahmudCall(&LogicManager::CONS_Mahmud_DoCorrOtis, "614Gd", 4, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8]) {
case 1:
getCharacter(kCharacterMahmud).characterPosition.location = 0;
@@ -656,6 +710,10 @@ void LogicManager::HAND_Mahmud_CheckF(HAND_PARAMS) {
default:
break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -670,10 +728,12 @@ void LogicManager::CONS_Mahmud_CheckH(CONS_PARAMS) {
}
void LogicManager::HAND_Mahmud_CheckH(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 1;
MahmudCall(&LogicManager::CONS_Mahmud_DoCorrOtis, "614Gd", 4, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8]) {
case 1:
getCharacter(kCharacterMahmud).characterPosition.location = 0;
@@ -714,6 +774,10 @@ void LogicManager::HAND_Mahmud_CheckH(HAND_PARAMS) {
default:
break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -728,99 +792,49 @@ void LogicManager::CONS_Mahmud_Vigilant(CONS_PARAMS) {
}
void LogicManager::HAND_Mahmud_Vigilant(HAND_PARAMS) {
- if (msg->action > 9) {
- if (msg->action > 17) {
- switch (msg->action) {
- case 18:
- switch (getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8]) {
- case 1:
- setDoor(4, kCharacterMahmud, 3, 10, 9);
- getCharacterCurrentParams(kCharacterMahmud)[3] = 0;
- getCharacterCurrentParams(kCharacterMahmud)[4] = 0;
- goto LABEL_42;
- case 2:
- setDoor(4, kCharacterMahmud, 3, 10, 9);
- getCharacterCurrentParams(kCharacterMahmud)[3] = 0;
- getCharacterCurrentParams(kCharacterMahmud)[4] = 0;
- goto LABEL_47;
- case 3:
- case 4:
- getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 5;
- MahmudCall(&LogicManager::CONS_Mahmud_DoDialog, "MAH1175", 0, 0, 0);
- return;
- case 5:
- if (_gameProgress[kProgressJacket] == 1 ||
- _gameEvents[kEventMahmudWrongDoor] ||
- _gameEvents[kEventMahmudWrongDoorOriginalJacket] ||
- _gameEvents[kEventMahmudWrongDoorDay]) {
- setDoor(4, kCharacterMahmud, 1, 14, 0);
- } else {
- setDoor(4, kCharacterMahmud, 1, 10, 9);
- }
+ switch (msg->action) {
+ case 0:
+ if (getCharacterParams(kCharacterMahmud, 8)[0]) {
+ getCharacterCurrentParams(kCharacterMahmud)[1] = 1;
+ send(kCharacterMahmud, kCharacterCond1, 204379649, 0);
+ getCharacterParams(kCharacterMahmud, 8)[0] = 0;
+ }
- getCharacterCurrentParams(kCharacterMahmud)[4] = 1;
- return;
- case 6:
- case 7:
- goto LABEL_67;
- case 8:
- case 9:
- getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 10;
- MahmudCall(&LogicManager::CONS_Mahmud_SaveGame, 2, kEventMahmudWrongDoor, 0, 0);
- return;
- case 10:
- if (_gameProgress[kProgressJacket] == 2) {
- if (isNight()) {
- playNIS(kEventMahmudWrongDoor);
- } else {
- playNIS(kEventMahmudWrongDoorDay);
- }
- } else {
- playNIS(kEventMahmudWrongDoorOriginalJacket);
- }
- playDialog(0, "LIB015", -1, 0);
- cleanNIS();
- LABEL_67:
- getCharacterCurrentParams(kCharacterMahmud)[3] = 1;
- break;
- case 11:
- goto LABEL_39;
- case 12:
- setDoor(4, kCharacterMahmud, 3, 10, 9);
- getCharacterCurrentParams(kCharacterMahmud)[3] = 0;
- getCharacterCurrentParams(kCharacterMahmud)[4] = 0;
- getCharacterCurrentParams(kCharacterMahmud)[1] = 0;
- break;
- default:
- return;
- }
- break;
- case 225563840:
- getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 12;
- MahmudCall(&LogicManager::CONS_Mahmud_CondKnocking, 0, 0, 0, 0);
+ if (!getCharacterCurrentParams(kCharacterMahmud)[1] && _gameProgress[kProgressChapter] == 1) {
+ if (_gameTime > 1098000 && !getCharacterCurrentParams(kCharacterMahmud)[5]) {
+ getCharacterCurrentParams(kCharacterMahmud)[5] = 1;
+ getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 1;
+ MahmudCall(&LogicManager::CONS_Mahmud_CheckH, 0, 0, 0, 0);
break;
- case 290410610:
- getCharacterCurrentParams(kCharacterMahmud)[2] = getCharacterCurrentParams(kCharacterMahmud)[2] == 0;
- getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 11;
- MahmudCall(&LogicManager::CONS_Mahmud_CathKnockingHarem, msg->param, getCharacterCurrentParams(kCharacterMahmud)[2], 0, 0);
+ }
+
+ if (!dialogRunning("HAR1104") && _gameTime > 1167300 && !getCharacterCurrentParams(kCharacterMahmud)[6]) {
+ getCharacterCurrentParams(kCharacterMahmud)[6] = 1;
+ getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 2;
+ MahmudCall(&LogicManager::CONS_Mahmud_CheckF, 0, 0, 0, 0);
break;
}
- } else if (msg->action == 17) {
- if (getCharacterCurrentParams(kCharacterMahmud)[3] || getCharacterCurrentParams(kCharacterMahmud)[4]) {
- LABEL_39:
- setDoor(4, kCharacterMahmud, 3, 10, 9);
- getCharacterCurrentParams(kCharacterMahmud)[3] = 0;
- getCharacterCurrentParams(kCharacterMahmud)[4] = 0;
+ }
+
+ if (getCharacterCurrentParams(kCharacterMahmud)[4]) {
+ if (getCharacterCurrentParams(kCharacterMahmud)[7] || (getCharacterCurrentParams(kCharacterMahmud)[7] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterMahmud)[7] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterMahmud)[7] = 0x7FFFFFFF;
}
- } else if (msg->action == 12) {
- getCharacter(kCharacterMahmud).characterPosition.car = 3;
- getCharacter(kCharacterMahmud).characterPosition.position = 5790;
- getCharacter(kCharacterMahmud).characterPosition.location = 1;
- endGraphics(kCharacterMahmud);
- getCharacterCurrentParams(kCharacterMahmud)[2] = 1;
- setDoor(4, kCharacterMahmud, 3, 10, 9);
+
+ getCharacterCurrentParams(kCharacterMahmud)[4] = 0;
+ getCharacterCurrentParams(kCharacterMahmud)[3] = 1;
+ setDoor(4, kCharacterMahmud, 3, 0, 0);
+ getCharacterCurrentParams(kCharacterMahmud)[7] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterMahmud)[7] = 0;
}
- } else if (msg->action >= 8) {
+
+ break;
+ case 8:
+ case 9:
if (getCharacterCurrentParams(kCharacterMahmud)[4]) {
setDoor(4, kCharacterMahmud, 3, 0, 0);
if (_gameProgress[kProgressJacket] == 1 || _gameEvents[kEventMahmudWrongDoor] || _gameEvents[kEventMahmudWrongDoorOriginalJacket] || _gameEvents[kEventMahmudWrongDoorDay]) {
@@ -836,7 +850,7 @@ void LogicManager::HAND_Mahmud_Vigilant(HAND_PARAMS) {
MahmudCall(&LogicManager::CONS_Mahmud_DoDialog, getCathSorryDialog(), 0, 0, 0);
break;
}
-
+
} else {
getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 7;
MahmudCall(&LogicManager::CONS_Mahmud_DoDialog, getCathSorryDialog(), 0, 0, 0);
@@ -858,43 +872,132 @@ void LogicManager::HAND_Mahmud_Vigilant(HAND_PARAMS) {
MahmudCall(&LogicManager::CONS_Mahmud_DoDialog, "LIB013", 0, 0, 0);
}
}
- } else if (msg->action == 0) {
- if (getCharacterParams(kCharacterMahmud, 8)[0]) {
- getCharacterCurrentParams(kCharacterMahmud)[1] = 1;
- send(kCharacterMahmud, kCharacterCond1, 204379649, 0);
- getCharacterParams(kCharacterMahmud, 8)[0] = 0;
+
+ break;
+ case 12:
+ getCharacter(kCharacterMahmud).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterMahmud).characterPosition.position = 5790;
+ getCharacter(kCharacterMahmud).characterPosition.location = 1;
+ endGraphics(kCharacterMahmud);
+ getCharacterCurrentParams(kCharacterMahmud)[2] = 1;
+ setDoor(4, kCharacterMahmud, 3, 10, 9);
+ break;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterMahmud)[3] || getCharacterCurrentParams(kCharacterMahmud)[4]) {
+ setDoor(4, kCharacterMahmud, 3, 10, 9);
+ getCharacterCurrentParams(kCharacterMahmud)[3] = 0;
+ getCharacterCurrentParams(kCharacterMahmud)[4] = 0;
}
- if (!getCharacterCurrentParams(kCharacterMahmud)[1] && _gameProgress[kProgressChapter] == 1) {
- if (_gameTime > 1098000 && !getCharacterCurrentParams(kCharacterMahmud)[5]) {
- getCharacterCurrentParams(kCharacterMahmud)[5] = 1;
- getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 1;
- MahmudCall(&LogicManager::CONS_Mahmud_CheckH, 0, 0, 0, 0);
- return;
- }
- LABEL_42:
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8]) {
+ case 1:
+ setDoor(4, kCharacterMahmud, 3, 10, 9);
+ getCharacterCurrentParams(kCharacterMahmud)[3] = 0;
+ getCharacterCurrentParams(kCharacterMahmud)[4] = 0;
+
if (!dialogRunning("HAR1104") && _gameTime > 1167300 && !getCharacterCurrentParams(kCharacterMahmud)[6]) {
getCharacterCurrentParams(kCharacterMahmud)[6] = 1;
getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 2;
MahmudCall(&LogicManager::CONS_Mahmud_CheckF, 0, 0, 0, 0);
- return;
+ break;
}
- }
- LABEL_47:
- if (getCharacterCurrentParams(kCharacterMahmud)[4]) {
- if (getCharacterCurrentParams(kCharacterMahmud)[7] || (getCharacterCurrentParams(kCharacterMahmud)[7] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterMahmud)[7] >= _currentGameSessionTicks)
- return;
- getCharacterCurrentParams(kCharacterMahmud)[7] = 0x7FFFFFFF;
+ // fall through
+ case 2:
+ if (getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] == 2) {
+ setDoor(4, kCharacterMahmud, 3, 10, 9);
+ getCharacterCurrentParams(kCharacterMahmud)[3] = 0;
+ getCharacterCurrentParams(kCharacterMahmud)[4] = 0;
}
- getCharacterCurrentParams(kCharacterMahmud)[4] = 0;
+ if (getCharacterCurrentParams(kCharacterMahmud)[4]) {
+ if (getCharacterCurrentParams(kCharacterMahmud)[7] || (getCharacterCurrentParams(kCharacterMahmud)[7] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterMahmud)[7] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterMahmud)[7] = 0x7FFFFFFF;
+ }
+
+ getCharacterCurrentParams(kCharacterMahmud)[4] = 0;
+ getCharacterCurrentParams(kCharacterMahmud)[3] = 1;
+ setDoor(4, kCharacterMahmud, 3, 0, 0);
+ getCharacterCurrentParams(kCharacterMahmud)[7] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterMahmud)[7] = 0;
+ }
+
+ break;
+ case 3:
+ case 4:
+ getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 5;
+ MahmudCall(&LogicManager::CONS_Mahmud_DoDialog, "MAH1175", 0, 0, 0);
+ break;
+ case 5:
+ if (_gameProgress[kProgressJacket] == 1 ||
+ _gameEvents[kEventMahmudWrongDoor] ||
+ _gameEvents[kEventMahmudWrongDoorOriginalJacket] ||
+ _gameEvents[kEventMahmudWrongDoorDay]) {
+ setDoor(4, kCharacterMahmud, 1, 14, 0);
+ } else {
+ setDoor(4, kCharacterMahmud, 1, 10, 9);
+ }
+
+ getCharacterCurrentParams(kCharacterMahmud)[4] = 1;
+ break;
+ case 6:
+ case 7:
getCharacterCurrentParams(kCharacterMahmud)[3] = 1;
- setDoor(4, kCharacterMahmud, 3, 0, 0);
- getCharacterCurrentParams(kCharacterMahmud)[7] = 0;
- } else {
- getCharacterCurrentParams(kCharacterMahmud)[7] = 0;
+ break;
+ case 8:
+ case 9:
+ getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 10;
+ MahmudCall(&LogicManager::CONS_Mahmud_SaveGame, 2, kEventMahmudWrongDoor, 0, 0);
+ break;
+ case 10:
+ if (_gameProgress[kProgressJacket] == 2) {
+ if (isNight()) {
+ playNIS(kEventMahmudWrongDoor);
+ } else {
+ playNIS(kEventMahmudWrongDoorDay);
+ }
+ } else {
+ playNIS(kEventMahmudWrongDoorOriginalJacket);
+ }
+
+ playDialog(0, "LIB015", -1, 0);
+ cleanNIS();
+
+ getCharacterCurrentParams(kCharacterMahmud)[3] = 1;
+ break;
+ case 11:
+ setDoor(4, kCharacterMahmud, 3, 10, 9);
+ getCharacterCurrentParams(kCharacterMahmud)[3] = 0;
+ getCharacterCurrentParams(kCharacterMahmud)[4] = 0;
+ break;
+ case 12:
+ setDoor(4, kCharacterMahmud, 3, 10, 9);
+ getCharacterCurrentParams(kCharacterMahmud)[3] = 0;
+ getCharacterCurrentParams(kCharacterMahmud)[4] = 0;
+ getCharacterCurrentParams(kCharacterMahmud)[1] = 0;
+ break;
+ default:
+ break;
}
+
+ break;
+ case 225563840:
+ getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 12;
+ MahmudCall(&LogicManager::CONS_Mahmud_CondKnocking, 0, 0, 0, 0);
+ break;
+ case 290410610:
+ getCharacterCurrentParams(kCharacterMahmud)[2] = getCharacterCurrentParams(kCharacterMahmud)[2] == 0;
+ getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 11;
+ MahmudCall(&LogicManager::CONS_Mahmud_CathKnockingHarem, msg->param, getCharacterCurrentParams(kCharacterMahmud)[2], 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -909,18 +1012,24 @@ void LogicManager::CONS_Mahmud_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Mahmud_Birth(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- autoMessage(kCharacterMahmud, 170483072, 0);
- getCharacter(kCharacterMahmud).characterPosition.position = 540;
- getCharacter(kCharacterMahmud).characterPosition.location = 0;
- getCharacter(kCharacterMahmud).characterPosition.car = kCarGreenSleeping;
- setDoor(4, kCharacterCath, 3, 10, 9);
- setDoor(20, kCharacterCath, 3, 10, 9);
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterMahmud)[0]) {
+ getCharacterCurrentParams(kCharacterMahmud)[0] = 1;
+ CONS_Mahmud_Vigilant(0, 0, 0, 0);
}
- } else if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterMahmud)[0]) {
- getCharacterCurrentParams(kCharacterMahmud)[0] = 1;
- CONS_Mahmud_Vigilant(0, 0, 0, 0);
+
+ break;
+ case 12:
+ autoMessage(kCharacterMahmud, 170483072, 0);
+ getCharacter(kCharacterMahmud).characterPosition.position = 540;
+ getCharacter(kCharacterMahmud).characterPosition.location = 0;
+ getCharacter(kCharacterMahmud).characterPosition.car = kCarGreenSleeping;
+ setDoor(4, kCharacterCath, 3, 10, 9);
+ setDoor(20, kCharacterCath, 3, 10, 9);
+ break;
+ default:
+ break;
}
}
@@ -935,12 +1044,16 @@ void LogicManager::CONS_Mahmud_Asleep(CONS_PARAMS) {
}
void LogicManager::HAND_Mahmud_Asleep(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterMahmud).characterPosition.position = 5790;
getCharacter(kCharacterMahmud).characterPosition.location = 1;
getCharacter(kCharacterMahmud).characterPosition.car = kCarGreenSleeping;
setDoor(4, kCharacterCath, 3, 10, 9);
endGraphics(kCharacterMahmud);
+ break;
+ default:
+ break;
}
}
@@ -955,17 +1068,20 @@ void LogicManager::CONS_Mahmud_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Mahmud_StartPart2(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterMahmud);
- getCharacter(kCharacterMahmud).characterPosition.position = 5790;
- getCharacter(kCharacterMahmud).characterPosition.location = 1;
- getCharacter(kCharacterMahmud).characterPosition.car = kCarGreenSleeping;
- getCharacter(kCharacterMahmud).clothes = 0;
- getCharacter(kCharacterMahmud).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Mahmud_Vigilant(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterMahmud);
+ getCharacter(kCharacterMahmud).characterPosition.position = 5790;
+ getCharacter(kCharacterMahmud).characterPosition.location = 1;
+ getCharacter(kCharacterMahmud).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterMahmud).clothes = 0;
+ getCharacter(kCharacterMahmud).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -980,17 +1096,20 @@ void LogicManager::CONS_Mahmud_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Mahmud_StartPart3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterMahmud);
- getCharacter(kCharacterMahmud).characterPosition.position = 5790;
- getCharacter(kCharacterMahmud).characterPosition.location = 1;
- getCharacter(kCharacterMahmud).characterPosition.car = kCarGreenSleeping;
- getCharacter(kCharacterMahmud).clothes = 0;
- getCharacter(kCharacterMahmud).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Mahmud_Vigilant(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterMahmud);
+ getCharacter(kCharacterMahmud).characterPosition.position = 5790;
+ getCharacter(kCharacterMahmud).characterPosition.location = 1;
+ getCharacter(kCharacterMahmud).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterMahmud).clothes = 0;
+ getCharacter(kCharacterMahmud).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -1005,16 +1124,19 @@ void LogicManager::CONS_Mahmud_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Mahmud_StartPart4(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterMahmud);
- getCharacter(kCharacterMahmud).characterPosition.position = 2740;
- getCharacter(kCharacterMahmud).characterPosition.location = 1;
- getCharacter(kCharacterMahmud).characterPosition.car = kCarGreenSleeping;
- getCharacter(kCharacterMahmud).clothes = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Mahmud_Vigilant(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterMahmud);
+ getCharacter(kCharacterMahmud).characterPosition.position = 2740;
+ getCharacter(kCharacterMahmud).characterPosition.location = 1;
+ getCharacter(kCharacterMahmud).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterMahmud).clothes = 0;
+ break;
+ default:
+ break;
}
}
@@ -1029,8 +1151,13 @@ void LogicManager::CONS_Mahmud_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Mahmud_StartPart5(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterMahmud);
+ break;
+ default:
+ break;
+ }
}
void (LogicManager::*LogicManager::_functionsMahmud[])(HAND_PARAMS) = {
Commit: 2fa6388835508632718205df6d61dc64b53cf5d0
https://github.com/scummvm/scummvm/commit/2fa6388835508632718205df6d61dc64b53cf5d0
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Master logic
Changed paths:
engines/lastexpress/characters/master.cpp
diff --git a/engines/lastexpress/characters/master.cpp b/engines/lastexpress/characters/master.cpp
index 9d2162fbfd8..a8138eb4680 100644
--- a/engines/lastexpress/characters/master.cpp
+++ b/engines/lastexpress/characters/master.cpp
@@ -584,14 +584,19 @@ void LogicManager::HAND_Master_MovingNight(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (_gameProgress[kProgressIsTrainRunning] && _gameTime < 1458000) {
+ bool skip = false;
+
if (!getCharacterCurrentParams(kCharacterMaster)[5]) {
getCharacterCurrentParams(kCharacterMaster)[5] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[1];
- if (getCharacterCurrentParams(kCharacterMaster)[5] == 0)
- goto LABEL_19;
+ if (getCharacterCurrentParams(kCharacterMaster)[5] == 0) {
+ skip = true;
+ }
}
- if (getCharacterCurrentParams(kCharacterMaster)[5] < _currentGameSessionTicks) {
- getCharacterCurrentParams(kCharacterMaster)[5] = 0x7FFFFFFF;
- LABEL_19:
+ if (skip || getCharacterCurrentParams(kCharacterMaster)[5] < _currentGameSessionTicks) {
+ if (!skip) {
+ getCharacterCurrentParams(kCharacterMaster)[5] = 0x7FFFFFFF;
+ }
+
switch (rnd(5)) {
case 0:
playDialog(0, "ZFX1005", rnd(15) + 2, 0);
@@ -616,67 +621,69 @@ void LogicManager::HAND_Master_MovingNight(HAND_PARAMS) {
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);
- return;
+ break;
}
- LABEL_75:
+
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);
- return;
+ break;
}
- LABEL_78:
+
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);
- return;
+ break;
}
- LABEL_81:
+
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);
- return;
+ break;
}
- LABEL_57:
+
if (_gameTime > 1170000 && !getCharacterCurrentParams(kCharacterMaster)[9]) {
getCharacterCurrentParams(kCharacterMaster)[9] = 1;
_gameProgress[kProgressField18] = 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);
- return;
+ break;
}
- LABEL_84:
+
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);
- return;
+ break;
}
- LABEL_87:
+
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);
- return;
+ break;
}
- LABEL_90:
+
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);
- return;
+ break;
}
- LABEL_93:
+
if (_gameTime > 1260000 && !getCharacterCurrentParams(kCharacterMaster)[14]) {
getCharacterCurrentParams(kCharacterMaster)[14] = 1;
_gameTimeTicksDelta = 1;
@@ -685,90 +692,90 @@ void LogicManager::HAND_Master_MovingNight(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterMaster)[15] = 1;
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 9;
MasterCall(&LogicManager::CONS_Master_Arrive, "Nancy", 3, 0, 0);
- return;
+ break;
}
- LABEL_99:
+
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);
- return;
+ break;
}
- LABEL_102:
+
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);
- return;
+ break;
}
- LABEL_105:
+
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);
- return;
+ break;
}
- LABEL_108:
+
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);
- return;
+ break;
}
- LABEL_111:
+
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);
- return;
+ break;
}
- LABEL_114:
+
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);
- return;
+ break;
}
- LABEL_117:
+
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);
- return;
+ break;
}
- LABEL_65:
+
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);
- return;
- }
- }
- LABEL_120:
- if (_gameTime <= 1493100 || getCharacterCurrentParams(kCharacterMaster)[24]) {
- LABEL_70:
- if (_gameTime <= 1539000 || getCharacterCurrentParams(kCharacterMaster)[25]) {
- LABEL_123:
- if (_gameTime <= 1541700 || getCharacterCurrentParams(kCharacterMaster)[26]) {
- LABEL_126:
- if (_gameTime > 1674000 && !getCharacterCurrentParams(kCharacterMaster)[27]) {
- getCharacterCurrentParams(kCharacterMaster)[27] = 1;
- CONS_Master_SecondSleep(0, 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterMaster)[26] = 1;
- getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 21;
- MasterCall(&LogicManager::CONS_Master_Depart, "BadenOos", 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterMaster)[25] = 1;
- getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 20;
- MasterCall(&LogicManager::CONS_Master_Arrive, "BadenOos", 8, 0, 0);
+ break;
}
- } else {
+ }
+
+ 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;
@@ -778,14 +785,23 @@ void LogicManager::HAND_Master_MovingNight(HAND_PARAMS) {
if (getCharacter(kCharacterCath).characterPosition.location == 2) {
if (cathOutHisWindow()) {
bumpCath(kCarGreenSleeping, 49, 255);
- goto LABEL_44;
+ _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)
- goto LABEL_44;
+ 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);
@@ -793,17 +809,22 @@ void LogicManager::HAND_Master_MovingNight(HAND_PARAMS) {
bumpCath(kCarGreenSleeping, 82, 255);
}
- goto LABEL_44;
+ _engine->getSoundManager()->startAmbient();
+ _engine->getSoundManager()->startSteam(getCharacterParams(kCharacterMaster, 8)[3]);
+ getCharacterParams(kCharacterMaster, 8)[1] = 0;
+ break;
}
+
bumpCath(kCarRestaurant, 82, 255);
}
}
- LABEL_44:
+
_engine->getSoundManager()->startAmbient();
_engine->getSoundManager()->startSteam(getCharacterParams(kCharacterMaster, 8)[3]);
getCharacterParams(kCharacterMaster, 8)[1] = 0;
- return;
+ break;
}
+
if (getCharacterParams(kCharacterMaster, 8)[2]) {
_engine->getSoundManager()->startAmbient();
getCharacterParams(kCharacterMaster, 8)[2] = 0;
@@ -812,6 +833,7 @@ void LogicManager::HAND_Master_MovingNight(HAND_PARAMS) {
send(kCharacterMaster, kCharacterTrainM, 168187490, 0);
else
send(kCharacterMaster, kCharacterCond1, 224122407, 0);
+
getCharacterCurrentParams(kCharacterMaster)[3] = 0;
}
}
@@ -844,167 +866,443 @@ void LogicManager::HAND_Master_MovingNight(HAND_PARAMS) {
case 18:
switch (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8]) {
case 1:
- goto LABEL_75;
+ 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:
- goto LABEL_78;
+ 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:
- goto LABEL_81;
- case 4:
- getCharacterCurrentParams(kCharacterMaster)[4] = 0;
- goto LABEL_57;
- case 5:
- goto LABEL_84;
- case 6:
- goto LABEL_87;
- case 7:
- goto LABEL_90;
- case 8:
- goto LABEL_93;
- case 9:
- goto LABEL_99;
- case 10:
- goto LABEL_102;
- case 11:
- goto LABEL_105;
- case 12:
- goto LABEL_108;
- case 13:
- goto LABEL_111;
- case 14:
- goto LABEL_114;
- case 15:
- goto LABEL_117;
- case 16:
- _gameTime = 1424700;
- goto LABEL_65;
- case 17:
- _gameProgress[kProgressField18] = 1;
- getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 18;
- MasterCall(&LogicManager::CONS_Master_Arrive, "Strasbou", 7, 0, 0);
- break;
- case 18:
- goto LABEL_120;
- case 19:
- _gameTimeTicksDelta = 1;
- goto LABEL_70;
- case 20:
- goto LABEL_123;
- case 21:
- goto LABEL_126;
- case 22:
- getCharacterCurrentParams(kCharacterMaster)[4] = 1;
- break;
- case 23:
- getCharacterCurrentParams(kCharacterMaster)[0] = 1;
- break;
- default:
- 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;
+ }
- break;
- }
-}
+ // fall through
+ case 4:
+ if (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] == 4) {
+ getCharacterCurrentParams(kCharacterMaster)[4] = 0;
+ }
-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;
+ if (_gameTime > 1170000 && !getCharacterCurrentParams(kCharacterMaster)[9]) {
+ getCharacterCurrentParams(kCharacterMaster)[9] = 1;
+ _gameProgress[kProgressField18] = 2;
+ }
- params->clear();
+ 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;
+ }
- fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
-}
+ 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;
+ }
-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;
- }
+ 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;
+ }
- playDialog(kCharacterCath, "MUS008", 16, 0);
+ 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;
+ }
- _inventorySelectedItemIdx = 0;
- fadeToBlack();
+ if (_gameTime > 1260000 && !getCharacterCurrentParams(kCharacterMaster)[14]) {
+ getCharacterCurrentParams(kCharacterMaster)[14] = 1;
+ _gameTimeTicksDelta = 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;
+ }
- while (dialogRunning("MUS008")) {
- _engine->getSoundManager()->soundThread();
- }
+ 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;
+ }
- CONS_Master_StartPart2(0, 0, 0, 0);
- break;
- default:
- 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;
+ }
-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;
+ 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;
+ }
- params->clear();
+ 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;
+ }
- fedEx(kCharacterMaster, kCharacterMaster, 12, 0);
-}
+ 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;
+ }
-void LogicManager::HAND_Master_StartPart2(HAND_PARAMS) {
- switch (msg->action) {
- case 12:
- if (_gameProgress[kProgressChapter] != 2) {
- _gameProgress[kProgressChapter] = 2;
- makeAllJump(2);
- }
+ 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;
+ }
- _gameTime = 1750500;
- _gameTimeTicksDelta = 5;
+ 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;
+ }
- getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 1;
+ 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;
+ }
+ }
- 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);
+ 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;
}
- }
- break;
- default:
- 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;
+ }
-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;
+ 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;
+ }
- params->clear();
+ if (_gameTime > 1674000 && !getCharacterCurrentParams(kCharacterMaster)[27]) {
+ getCharacterCurrentParams(kCharacterMaster)[27] = 1;
+ CONS_Master_SecondSleep(0, 0, 0, 0);
+ }
- fedEx(kCharacterMaster, kCharacterMaster, 12, 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;
+ }
-void LogicManager::HAND_Master_InitPart2(HAND_PARAMS) {
- switch (msg->action) {
- case 12:
- _gameProgress[kProgressIsTrainRunning] = 1;
- setDoor(26, kCharacterCath, 1, 0, 9);
- setDoor(27, kCharacterCath, 1, 0, 9);
- _gameProgress[kProgressField18] = 1;
- giveCathItem(kItemGreenJacket);
+ // 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;
+ }
- _gameInventory[kItemCorpse].location = 0;
- _gameInventory[kItemCorpse].isPresent = 0;
- _gameProgress[kProgressJacket] = 2;
- _gameProgress[kProgressPortrait] = 34;
- _gameProgress[kProgressEventCorpseMovedFromFloor] = 1;
+ // 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;
+ _gameTimeTicksDelta = 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) {
+ _gameProgress[kProgressField18] = 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) {
+ _gameTimeTicksDelta = 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);
+
+ _inventorySelectedItemIdx = 0;
+ fadeToBlack();
+
+ while (dialogRunning("MUS008")) {
+ _engine->getSoundManager()->soundThread();
+ }
+
+ 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 (_gameProgress[kProgressChapter] != 2) {
+ _gameProgress[kProgressChapter] = 2;
+ makeAllJump(2);
+ }
+
+ _gameTime = 1750500;
+ _gameTimeTicksDelta = 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:
+ _gameProgress[kProgressIsTrainRunning] = 1;
+ setDoor(26, kCharacterCath, 1, 0, 9);
+ setDoor(27, kCharacterCath, 1, 0, 9);
+ _gameProgress[kProgressField18] = 1;
+ giveCathItem(kItemGreenJacket);
+
+ _gameInventory[kItemCorpse].location = 0;
+ _gameInventory[kItemCorpse].isPresent = 0;
+ _gameProgress[kProgressJacket] = 2;
+ _gameProgress[kProgressPortrait] = 34;
+ _gameProgress[kProgressEventCorpseMovedFromFloor] = 1;
_gameProgress[kProgressEventFoundCorpse] = 1;
dropItem(kItemBeetle, 3);
dropItem(kItem3, 1);
@@ -1069,7 +1367,7 @@ void LogicManager::HAND_Master_MovingDay(HAND_PARAMS) {
(getCharacterCurrentParams(kCharacterMaster)[1] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[0],
_currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterMaster)[1] >= _currentGameSessionTicks)
- return;
+ break;
getCharacterCurrentParams(kCharacterMaster)[1] = 0x7FFFFFFF;
}
@@ -1205,16 +1503,22 @@ void LogicManager::CONS_Master_MovingAfternoon(CONS_PARAMS) {
void LogicManager::HAND_Master_MovingAfternoon(HAND_PARAMS) {
switch (msg->action) {
case 0:
+ {
if (_gameProgress[kProgressIsTrainRunning]) {
+ bool skip1 = false;
+
if (!getCharacterCurrentParams(kCharacterMaster)[3]) {
getCharacterCurrentParams(kCharacterMaster)[3] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[0];
- if (getCharacterCurrentParams(kCharacterMaster)[3] == 0)
- goto LABEL_7;
+ if (getCharacterCurrentParams(kCharacterMaster)[3] == 0) {
+ skip1 = true;
+ }
}
- if (getCharacterCurrentParams(kCharacterMaster)[3] < _currentGameSessionTicks) {
- getCharacterCurrentParams(kCharacterMaster)[3] = 0x7FFFFFFF;
- LABEL_7:
+ if (skip1 || getCharacterCurrentParams(kCharacterMaster)[3] < _currentGameSessionTicks) {
+ if (!skip1) {
+ getCharacterCurrentParams(kCharacterMaster)[3] = 0x7FFFFFFF;
+ }
+
switch (rnd(5)) {
case 0:
playDialog(0, "ZFX1005", rnd(15) + 2, 0);
@@ -1240,16 +1544,20 @@ void LogicManager::HAND_Master_MovingAfternoon(HAND_PARAMS) {
}
}
+ bool skip2 = false;
+
if (!getCharacterCurrentParams(kCharacterMaster)[4]) {
getCharacterCurrentParams(kCharacterMaster)[4] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[1];
if (getCharacterCurrentParams(kCharacterMaster)[4] == 0) {
- goto LABEL_18;
+ skip2 = true;
}
}
- if (getCharacterCurrentParams(kCharacterMaster)[4] < _currentGameSessionTicks) {
- getCharacterCurrentParams(kCharacterMaster)[4] = 0x7FFFFFFF;
- LABEL_18:
+ if (skip2 || getCharacterCurrentParams(kCharacterMaster)[4] < _currentGameSessionTicks) {
+ if (!skip2) {
+ getCharacterCurrentParams(kCharacterMaster)[4] = 0x7FFFFFFF;
+ }
+
switch (rnd(2)) {
case 0:
playDialog(0, "ZFX1008", rnd(15) + 2, 0);
@@ -1264,75 +1572,77 @@ void LogicManager::HAND_Master_MovingAfternoon(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterMaster)[4] = 0;
}
- if (_gameTime <= 1982700 || getCharacterCurrentParams(kCharacterMaster)[5]) {
- LABEL_49:
- if (_gameTime <= 1989900 || getCharacterCurrentParams(kCharacterMaster)[6]) {
- LABEL_52:
- if (_gameTime <= 2047500 || getCharacterCurrentParams(kCharacterMaster)[7]) {
- LABEL_55:
- if (_gameTime <= 2052900 || getCharacterCurrentParams(kCharacterMaster)[8]) {
- LABEL_58:
- if (_gameTime <= 2073600 || getCharacterCurrentParams(kCharacterMaster)[9]) {
- LABEL_61:
- if (_gameTime <= 2079900 || getCharacterCurrentParams(kCharacterMaster)[10]) {
- LABEL_64:
- if (_gameTime <= 2099700 || getCharacterCurrentParams(kCharacterMaster)[11]) {
- LABEL_67:
- if (_gameTime <= 2105100 || getCharacterCurrentParams(kCharacterMaster)[12]) {
- LABEL_70:
- if (_gameTime > 2187000 && !getCharacterCurrentParams(kCharacterMaster)[13]) {
- getCharacterCurrentParams(kCharacterMaster)[13] = 1;
- _gameTimeTicksDelta = 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);
- }
- } else {
- getCharacterCurrentParams(kCharacterMaster)[12] = 1;
- getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 8;
- MasterCall(&LogicManager::CONS_Master_Depart, "Linz", 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterMaster)[11] = 1;
- getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 7;
- MasterCall(&LogicManager::CONS_Master_Arrive, "Linz", 12, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterMaster)[10] = 1;
- getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 6;
- MasterCall(&LogicManager::CONS_Master_Depart, "Wels", 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterMaster)[9] = 1;
- getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 5;
- MasterCall(&LogicManager::CONS_Master_Arrive, "Wels", 11, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterMaster)[8] = 1;
- getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 4;
- MasterCall(&LogicManager::CONS_Master_Depart, "Attnang", 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterMaster)[7] = 1;
- getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 3;
- MasterCall(&LogicManager::CONS_Master_Arrive, "Attnang", 10, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterMaster)[6] = 1;
- getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 2;
- MasterCall(&LogicManager::CONS_Master_Depart, "Salzburg", 0, 0, 0);
- }
- } else {
+ 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;
}
- break;
- case 2:
- if (getCharacterParams(kCharacterMaster, 8)[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;
+ }
+
+ 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;
+ _gameTimeTicksDelta = 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()) {
@@ -1391,21 +1701,81 @@ void LogicManager::HAND_Master_MovingAfternoon(HAND_PARAMS) {
case 18:
switch (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8]) {
case 1:
- goto LABEL_49;
+ 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:
- goto LABEL_52;
+ 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:
- goto LABEL_55;
+ 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:
- goto LABEL_58;
+ 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:
- goto LABEL_61;
+ 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:
- goto LABEL_64;
+ 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:
- goto LABEL_67;
+ 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:
- goto LABEL_70;
+ if (_gameTime > 2187000 && !getCharacterCurrentParams(kCharacterMaster)[13]) {
+ getCharacterCurrentParams(kCharacterMaster)[13] = 1;
+ _gameTimeTicksDelta = 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;
@@ -1623,269 +1993,109 @@ void LogicManager::CONS_Master_MovingSecondNight(CONS_PARAMS) {
}
void LogicManager::HAND_Master_MovingSecondNight(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action > 139254416) {
- if (msg->action > 158610240) {
- if (msg->action > 190346110) {
- switch (msg->action) {
- case 191001984:
- _gameTime = 2520000;
- if (whoRunningDialog(kCharacterMaster))
- endDialog(kCharacterMaster);
- endGraphics(kCharacterMaster);
- takeCathItem(kItemTelegram);
- _gameTimeTicksDelta = 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, 1);
- break;
- case 225367984:
- getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 9;
- MasterCall(&LogicManager::CONS_Master_SaveGame, 2, kEventCathDefusingBomb, 0, 0);
- break;
- }
- } else if (msg->action == 190346110) {
- _gameProgress[6] = 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);
- _inventorySelectedItemIdx = 0;
- fadeToBlack();
- while (dialogRunning("MUS008"))
- _engine->getSoundManager()->soundThread();
- 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);
- }
- } else if (msg->action == 169300225) {
- if (_gameTime < 2519100)
- _gameTime = 2519100;
- getCharacterCurrentParams(kCharacterMaster)[2] = 1;
- startSeqOtis(kCharacterMaster, "BOMB");
- }
- } else if (msg->action == 158610240) {
- getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 8;
- MasterCall(&LogicManager::CONS_Master_SaveGame, 1, 0, 0, 0);
- } else if (msg->action == 156435676) {
- send(kCharacterMaster, kCharacterTatiana, 169360385, 0);
- send(kCharacterMaster, kCharacterCond2, 201431954, 0);
- send(kCharacterMaster, kCharacterTrainM, 201431954, 0);
- _gameTimeTicksDelta = 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);
- }
- } else if (msg->action == 139254416) {
- CONS_Master_StartPart5(0, 0, 0, 0);
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8]) {
- case 1:
- goto LABEL_82;
- case 2:
- goto LABEL_85;
- case 3:
- goto LABEL_93;
- case 4:
- goto LABEL_96;
- case 5:
- if (whoRunningDialog(kCharacterMaster))
- endDialog(kCharacterMaster);
- playNIS(kEventTrainExplosionBridge);
- endGame(0, 1, 0, 1);
- break;
- case 6:
- _engine->getSoundManager()->endAmbient();
- playNIS(kEventTylerCastleDream);
- _engine->getSoundManager()->startAmbient();
- _gameProgress[kProgressField18] = 1;
- bumpCathTylerComp();
- send(kCharacterMaster, kCharacterTatiana, 169360385, 0);
- _gameTimeTicksDelta = 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, 1);
- 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);
- _gameInventory[kItem2].location = 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, 1);
- break;
- default:
- return;
- }
- }
- return;
- }
- if (msg->action == 12) {
- getCharacterCurrentParams(kCharacterMaster)[3] = 225 * (4 * rnd(5) + 20);
- getCharacterCurrentParams(kCharacterMaster)[4] = 225 * (4 * rnd(6) + 8);
- return;
- }
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
+ {
+ bool skip = false;
if (_gameProgress[kProgressIsTrainRunning]) {
if (getCharacterCurrentParams(kCharacterMaster)[5] ||
(getCharacterCurrentParams(kCharacterMaster)[5] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[3], _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[3] != 0)) {
- if (getCharacterCurrentParams(kCharacterMaster)[5] >= _currentGameSessionTicks)
- goto LABEL_35;
- 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;
+ if (getCharacterCurrentParams(kCharacterMaster)[5] >= _currentGameSessionTicks) {
+ skip = true;
+ }
+
+ if (!skip) {
+ getCharacterCurrentParams(kCharacterMaster)[5] = 0x7FFFFFFF;
+ }
}
- getCharacterCurrentParams(kCharacterMaster)[3] = 225 * (4 * rnd(5) + 20);
- getCharacterCurrentParams(kCharacterMaster)[5] = 0;
+ 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;
+ }
}
- LABEL_35:
+
if (getCharacterCurrentParams(kCharacterMaster)[6] ||
(getCharacterCurrentParams(kCharacterMaster)[6] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[4], _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[4] != 0)) {
if (getCharacterCurrentParams(kCharacterMaster)[6] >= _currentGameSessionTicks) {
- LABEL_45:
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);
- return;
+ break;
}
- LABEL_82:
+
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);
- return;
+ break;
}
- LABEL_85:
+
if (getModel(1) == 1 && _gameTime > 2403000 && !getCharacterCurrentParams(kCharacterMaster)[9]) {
getCharacterCurrentParams(kCharacterMaster)[9] = 1;
- _gameProgress[6] = 2;
+ _gameProgress[kProgressField18] = 2;
}
- if (getCharacterCurrentParams(kCharacterMaster)[0])
- goto LABEL_96;
- 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);
- return;
- }
- LABEL_93:
- if (_gameTime <= 2421900 || getCharacterCurrentParams(kCharacterMaster)[11]) {
- LABEL_96:
- if (_gameTime > 2470500 && !getCharacterCurrentParams(kCharacterMaster)[12]) {
- getCharacterCurrentParams(kCharacterMaster)[12] = 1;
- if (_gameProgress[kProgressField18] == 2)
- _gameTimeTicksDelta = 1;
+
+ 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 > 2506500 && !getCharacterCurrentParams(kCharacterMaster)[13]) {
- getCharacterCurrentParams(kCharacterMaster)[13] = 1;
- if (_gameProgress[kProgressField18] == 2)
- _gameProgress[kProgressField18] = 1;
+
+ 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 > 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);
- }
+ }
+
+ if (_gameTime > 2470500 && !getCharacterCurrentParams(kCharacterMaster)[12]) {
+ getCharacterCurrentParams(kCharacterMaster)[12] = 1;
+ if (_gameProgress[kProgressField18] == 2)
+ _gameTimeTicksDelta = 1;
+ }
+
+ if (_gameTime > 2506500 && !getCharacterCurrentParams(kCharacterMaster)[13]) {
+ getCharacterCurrentParams(kCharacterMaster)[13] = 1;
+ if (_gameProgress[kProgressField18] == 2)
+ _gameProgress[kProgressField18] = 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);
}
- } else {
- getCharacterCurrentParams(kCharacterMaster)[11] = 1;
- getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 4;
- MasterCall(&LogicManager::CONS_Master_Depart, "Galanta", 0, 0, 0);
}
- return;
+
+ break;
}
+
getCharacterCurrentParams(kCharacterMaster)[6] = 0x7FFFFFFF;
}
@@ -1901,64 +2111,374 @@ void LogicManager::HAND_Master_MovingSecondNight(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterMaster)[4] = 225 * (4 * rnd(6) + 8);
getCharacterCurrentParams(kCharacterMaster)[6] = 0;
- goto LABEL_45;
- }
- if (msg->action != 2) {
- if (msg->action == 3) {
- endGraphics(kCharacterMaster);
- getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 11;
- MasterCall(&LogicManager::CONS_Master_SaveGame, 1, 0, 0, 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;
}
- return;
- }
- 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;
- return;
+
+ 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;
+ _gameProgress[kProgressField18] = 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 (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) {
+
+ 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 (_gameProgress[kProgressField18] == 2)
+ _gameTimeTicksDelta = 1;
+ }
+
+ if (_gameTime > 2506500 && !getCharacterCurrentParams(kCharacterMaster)[13]) {
+ getCharacterCurrentParams(kCharacterMaster)[13] = 1;
+ if (_gameProgress[kProgressField18] == 2)
+ _gameProgress[kProgressField18] = 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;
- return;
+ break;
}
- if (checkCathDir(kCarGreenSleeping, 98)) {
- playDialog(0, "LIB015", -1, 0);
- bumpCath(kCarGreenSleeping, 71, 255);
- } else {
- bumpCath(kCarGreenSleeping, 82, 255);
+ 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;
+ _gameProgress[kProgressField18] = 2;
+ }
+
+ if (getCharacterCurrentParams(kCharacterMaster)[0]) {
+ if (_gameTime > 2470500 && !getCharacterCurrentParams(kCharacterMaster)[12]) {
+ getCharacterCurrentParams(kCharacterMaster)[12] = 1;
+ if (_gameProgress[kProgressField18] == 2)
+ _gameTimeTicksDelta = 1;
+ }
+
+ if (_gameTime > 2506500 && !getCharacterCurrentParams(kCharacterMaster)[13]) {
+ getCharacterCurrentParams(kCharacterMaster)[13] = 1;
+ if (_gameProgress[kProgressField18] == 2)
+ _gameProgress[kProgressField18] = 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);
}
-
- _engine->getSoundManager()->startAmbient();
- _engine->getSoundManager()->startSteam(getCharacterParams(kCharacterMaster, 8)[3]);
- getCharacterParams(kCharacterMaster, 8)[1] = 0;
- return;
}
- bumpCath(kCarRestaurant, 82, 255);
+ 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 (_gameProgress[kProgressField18] == 2)
+ _gameTimeTicksDelta = 1;
+ }
+
+ if (_gameTime > 2506500 && !getCharacterCurrentParams(kCharacterMaster)[13]) {
+ getCharacterCurrentParams(kCharacterMaster)[13] = 1;
+ if (_gameProgress[kProgressField18] == 2)
+ _gameProgress[kProgressField18] = 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();
+ _gameProgress[kProgressField18] = 1;
+ bumpCathTylerComp();
+ send(kCharacterMaster, kCharacterTatiana, 169360385, 0);
+ _gameTimeTicksDelta = 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);
+ _gameInventory[kItem2].location = 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;
}
- _engine->getSoundManager()->startAmbient();
- _engine->getSoundManager()->startSteam(getCharacterParams(kCharacterMaster, 8)[3]);
- getCharacterParams(kCharacterMaster, 8)[1] = 0;
- return;
- }
- if (getCharacterParams(kCharacterMaster, 8)[2]) {
- _engine->getSoundManager()->startAmbient();
- getCharacterParams(kCharacterMaster, 8)[2] = 0;
- } else if (!getCharacterCurrentParams(kCharacterMaster)[1] && !getCharacterCurrentParams(kCharacterMaster)[2]) {
+ 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);
+ _gameTimeTicksDelta = 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:
+ _gameProgress[kProgressField18] = 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);
+ _inventorySelectedItemIdx = 0;
+ fadeToBlack();
+
+ while (dialogRunning("MUS008"))
+ _engine->getSoundManager()->soundThread();
+
+ 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);
+ _gameTimeTicksDelta = 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;
}
}
Commit: 714b0e4d76317b78aef8a59f78ae26d43cd42568
https://github.com/scummvm/scummvm/commit/714b0e4d76317b78aef8a59f78ae26d43cd42568
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Kahina logic
Changed paths:
engines/lastexpress/characters/kahina.cpp
diff --git a/engines/lastexpress/characters/kahina.cpp b/engines/lastexpress/characters/kahina.cpp
index cc86959d19e..55e984d6e9a 100644
--- a/engines/lastexpress/characters/kahina.cpp
+++ b/engines/lastexpress/characters/kahina.cpp
@@ -69,19 +69,25 @@ void LogicManager::CONS_Kahina_DebugWalks(CONS_PARAMS) {
}
void LogicManager::HAND_Kahina_DebugWalks(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterKahina).characterPosition.position = 0;
- getCharacter(kCharacterKahina).characterPosition.location = 0;
- getCharacter(kCharacterKahina).characterPosition.car = kCarGreenSleeping;
- getCharacterCurrentParams(kCharacterKahina)[0] = 10000;
- }
- } else if (walk(kCharacterKahina, kCarGreenSleeping, getCharacterCurrentParams(kCharacterKahina)[0])) {
- if (getCharacterCurrentParams(kCharacterKahina)[0] == 10000) {
- getCharacterCurrentParams(kCharacterKahina)[0] = 0;
- } else {
- getCharacterCurrentParams(kCharacterKahina)[0] = 10000;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterKahina, kCarGreenSleeping, getCharacterCurrentParams(kCharacterKahina)[0])) {
+ if (getCharacterCurrentParams(kCharacterKahina)[0] == 10000) {
+ getCharacterCurrentParams(kCharacterKahina)[0] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterKahina)[0] = 10000;
+ }
}
+
+ break;
+ case 12:
+ getCharacter(kCharacterKahina).characterPosition.position = 0;
+ getCharacter(kCharacterKahina).characterPosition.location = 0;
+ getCharacter(kCharacterKahina).characterPosition.car = kCarGreenSleeping;
+ getCharacterCurrentParams(kCharacterKahina)[0] = 10000;
+ break;
+ default:
+ break;
}
}
@@ -98,12 +104,17 @@ void LogicManager::CONS_Kahina_DoDialog(CONS_PARAMS) {
}
void LogicManager::HAND_Kahina_DoDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterKahina).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterKahina, (char *)&getCharacterCurrentParams(kCharacterKahina)[0], -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -121,22 +132,25 @@ void LogicManager::CONS_Kahina_SaveGame(CONS_PARAMS) {
}
void LogicManager::HAND_Kahina_SaveGame(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- save(
- kCharacterKahina,
- getCharacterCurrentParams(kCharacterKahina)[0],
- getCharacterCurrentParams(kCharacterKahina)[1]
- );
+ switch (msg->action) {
+ case 0:
+ getCharacter(kCharacterKahina).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
+ fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
+ break;
+ case 12:
+ save(
+ kCharacterKahina,
+ getCharacterCurrentParams(kCharacterKahina)[0],
+ getCharacterCurrentParams(kCharacterKahina)[1]
+ );
- getCharacter(kCharacterKahina).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
- fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
- }
- } else {
getCharacter(kCharacterKahina).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -153,19 +167,12 @@ void LogicManager::CONS_Kahina_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_Kahina_DoWait(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 137503360) {
- getCharacterParams(kCharacterKahina, 8)[1] = 1;
-
- getCharacter(kCharacterKahina).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
- fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
- }
- } else {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterKahina)[1] || (getCharacterCurrentParams(kCharacterKahina)[1] = _gameTime + getCharacterCurrentParams(kCharacterKahina)[0],
_gameTime + getCharacterCurrentParams(kCharacterKahina)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterKahina)[1] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterKahina)[1] = 0x7FFFFFFF;
}
@@ -173,6 +180,16 @@ void LogicManager::HAND_Kahina_DoWait(HAND_PARAMS) {
getCharacter(kCharacterKahina).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
+ break;
+ case 137503360:
+ getCharacterParams(kCharacterKahina, 8)[1] = 1;
+
+ getCharacter(kCharacterKahina).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
+ fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -189,11 +206,12 @@ void LogicManager::CONS_Kahina_DoWaitReal(CONS_PARAMS) {
}
void LogicManager::HAND_Kahina_DoWaitReal(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterKahina)[1] || (getCharacterCurrentParams(kCharacterKahina)[1] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterKahina)[0],
_currentGameSessionTicks + getCharacterCurrentParams(kCharacterKahina)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterKahina)[1] >= _currentGameSessionTicks)
- return;
+ break;
getCharacterCurrentParams(kCharacterKahina)[1] = 0x7FFFFFFF;
}
@@ -201,6 +219,9 @@ void LogicManager::HAND_Kahina_DoWaitReal(HAND_PARAMS) {
getCharacter(kCharacterKahina).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -217,56 +238,8 @@ void LogicManager::CONS_Kahina_LookingForCath(CONS_PARAMS) {
}
void LogicManager::HAND_Kahina_LookingForCath(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8]) {
- case 1:
- if (getCharacterParams(kCharacterKahina, 8)[0] || getCharacterParams(kCharacterKahina, 8)[1]) {
- goto LABEL_30;
- }
- goto LABEL_20;
- case 2:
- case 3:
- if (getCharacterParams(kCharacterKahina, 8)[0] || getCharacterParams(kCharacterKahina, 8)[1]) {
- goto LABEL_30;
- }
- endGraphics(kCharacterKahina);
- getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 4;
- KahinaCall(&LogicManager::CONS_Kahina_DoWait, 450, 0, 0, 0);
- break;
- case 4:
- if (getCharacterParams(kCharacterKahina, 8)[1])
- goto LABEL_30;
- getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 5;
- KahinaCall(&LogicManager::CONS_Kahina_DoWalkSearchingForCath, 4, 540, 0, 0);
- break;
- case 5:
- if (getCharacterParams(kCharacterKahina, 8)[0] || getCharacterParams(kCharacterKahina, 8)[1]) {
- LABEL_30:
- getCharacter(kCharacterKahina).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
- fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
- } else {
- LABEL_20:
- endGraphics(kCharacterKahina);
- }
- break;
- default:
- return;
- }
- } else if (msg->action == 137503360) {
- getCharacterParams(kCharacterKahina, 8)[1] = 1;
-
- getCharacter(kCharacterKahina).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
- fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
- }
- } else if (msg->action == 12) {
- getCharacterParams(kCharacterKahina, 8)[0] = 0;
- getCharacterParams(kCharacterKahina, 8)[1] = 0;
- getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 1;
- KahinaCall(&LogicManager::CONS_Kahina_DoWalkSearchingForCath, 4, 540, 0, 0);
- } else if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterKahina)[0] >= _gameTime || getCharacterCurrentParams(kCharacterKahina)[1]) {
if (cathInCorridor(kCarGreenSleeping) || cathInCorridor(kCarRedSleeping)) {
if (checkLoc(kCharacterCath, kCarGreenSleeping)) {
@@ -284,6 +257,73 @@ void LogicManager::HAND_Kahina_LookingForCath(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
}
+
+ break;
+ case 12:
+ getCharacterParams(kCharacterKahina, 8)[0] = 0;
+ getCharacterParams(kCharacterKahina, 8)[1] = 0;
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 1;
+ KahinaCall(&LogicManager::CONS_Kahina_DoWalkSearchingForCath, 4, 540, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8]) {
+ case 1:
+ if (getCharacterParams(kCharacterKahina, 8)[0] || getCharacterParams(kCharacterKahina, 8)[1]) {
+ getCharacter(kCharacterKahina).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
+ fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
+ } else {
+ endGraphics(kCharacterKahina);
+ }
+
+ break;
+ case 2:
+ case 3:
+ if (getCharacterParams(kCharacterKahina, 8)[0] || getCharacterParams(kCharacterKahina, 8)[1]) {
+ getCharacter(kCharacterKahina).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
+ fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
+ } else {
+ endGraphics(kCharacterKahina);
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 4;
+ KahinaCall(&LogicManager::CONS_Kahina_DoWait, 450, 0, 0, 0);
+ }
+
+ break;
+ case 4:
+ if (getCharacterParams(kCharacterKahina, 8)[1]) {
+ getCharacter(kCharacterKahina).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
+ fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
+ } else {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 5;
+ KahinaCall(&LogicManager::CONS_Kahina_DoWalkSearchingForCath, 4, 540, 0, 0);
+ }
+
+ break;
+ case 5:
+ if (getCharacterParams(kCharacterKahina, 8)[0] || getCharacterParams(kCharacterKahina, 8)[1]) {
+ getCharacter(kCharacterKahina).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
+ fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
+ } else {
+ endGraphics(kCharacterKahina);
+ }
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 137503360:
+ getCharacterParams(kCharacterKahina, 8)[1] = 1;
+
+ getCharacter(kCharacterKahina).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
+ fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -301,37 +341,42 @@ void LogicManager::CONS_Kahina_DoWalkSearchingForCath(CONS_PARAMS) {
}
void LogicManager::HAND_Kahina_DoWalkSearchingForCath(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action != 12) {
- if (msg->action == 137503360) {
- getCharacterParams(kCharacterKahina, 8)[1] = 1;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterKahina, getCharacterCurrentParams(kCharacterKahina)[0], getCharacterCurrentParams(kCharacterKahina)[1])) {
+ getCharacter(kCharacterKahina).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
+ fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
+ break;
+ }
+
+ if (nearChar(kCharacterKahina, kCharacterCath, 1000) && !onLowPlatform(kCharacterCath) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
+ if (getCharacter(kCharacterKahina).characterPosition.car == kCarGreenSleeping || getCharacter(kCharacterKahina).characterPosition.car == kCarRedSleeping) {
+ getCharacterParams(kCharacterKahina, 8)[0] = 1;
getCharacter(kCharacterKahina).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
}
- return;
+ }
+ break;
+ case 12:
+ if (walk(kCharacterKahina, getCharacterCurrentParams(kCharacterKahina)[0], getCharacterCurrentParams(kCharacterKahina)[1])) {
+ getCharacter(kCharacterKahina).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
+ fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
}
- if (!walk(kCharacterKahina, getCharacterCurrentParams(kCharacterKahina)[0], getCharacterCurrentParams(kCharacterKahina)[1]))
- return;
- LABEL_6:
+ break;
+ case 137503360:
+ getCharacterParams(kCharacterKahina, 8)[1] = 1;
getCharacter(kCharacterKahina).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
- return;
- }
- if (walk(kCharacterKahina, getCharacterCurrentParams(kCharacterKahina)[0], getCharacterCurrentParams(kCharacterKahina)[1]))
- goto LABEL_6;
- if (nearChar(kCharacterKahina, kCharacterCath, 1000) && !onLowPlatform(kCharacterCath) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
- if (getCharacter(kCharacterKahina).characterPosition.car == kCarGreenSleeping || getCharacter(kCharacterKahina).characterPosition.car == kCarRedSleeping) {
- getCharacterParams(kCharacterKahina, 8)[0] = 1;
-
- getCharacter(kCharacterKahina).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
- fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
- }
+ break;
+ default:
+ break;
}
}
@@ -351,8 +396,13 @@ void LogicManager::CONS_Kahina_DoWalk(CONS_PARAMS) {
void LogicManager::HAND_Kahina_DoWalk(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (walk(kCharacterKahina, getCharacterCurrentParams(kCharacterKahina)[0], getCharacterCurrentParams(kCharacterKahina)[1]))
- goto LABEL_13;
+ case 12:
+ if (walk(kCharacterKahina, getCharacterCurrentParams(kCharacterKahina)[0], getCharacterCurrentParams(kCharacterKahina)[1])) {
+ getCharacter(kCharacterKahina).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
+ fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
+ }
+
break;
case 5:
if (_gameEvents[kEventKronosConversation] || _gameEvents[kEventKronosConversationFirebird]) {
@@ -361,24 +411,16 @@ void LogicManager::HAND_Kahina_DoWalk(HAND_PARAMS) {
} else {
playDialog(kCharacterCath, "CAT1019", -1, 0);
}
-
} else {
playCathExcuseMe();
}
+
break;
case 6:
playChrExcuseMe(kCharacterKahina, kCharacterCath, 0);
break;
- case 12:
- if (walk(kCharacterKahina, getCharacterCurrentParams(kCharacterKahina)[0], getCharacterCurrentParams(kCharacterKahina)[1])) {
- LABEL_13:
- getCharacter(kCharacterKahina).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
- fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
- }
- break;
default:
- return;
+ break;
}
}
@@ -397,15 +439,20 @@ void LogicManager::CONS_Kahina_DoCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Kahina_DoCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterKahina, getCharacterCurrentParams(kCharacterKahina)[3]);
getCharacter(kCharacterKahina).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterKahina, (char *)&getCharacterCurrentParams(kCharacterKahina)[0]);
blockAtDoor(kCharacterKahina, getCharacterCurrentParams(kCharacterKahina)[3]);
+ break;
+ default:
+ break;
}
}
@@ -420,16 +467,22 @@ void LogicManager::CONS_Kahina_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Kahina_Birth(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- setDoor(75, kCharacterCath, 1, 10, 9);
- getCharacter(kCharacterKahina).characterPosition.position = 5000;
- getCharacter(kCharacterKahina).characterPosition.location = 0;
- getCharacter(kCharacterKahina).characterPosition.car = kCarKronos;
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterKahina)[0]) {
+ getCharacterCurrentParams(kCharacterKahina)[0] = 1;
+ CONS_Kahina_InSeclusion(0, 0, 0, 0);
}
- } else if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterKahina)[0]) {
- getCharacterCurrentParams(kCharacterKahina)[0] = 1;
- CONS_Kahina_InSeclusion(0, 0, 0, 0);
+
+ break;
+ case 12:
+ setDoor(75, kCharacterCath, 1, 10, 9);
+ getCharacter(kCharacterKahina).characterPosition.position = 5000;
+ getCharacter(kCharacterKahina).characterPosition.location = 0;
+ getCharacter(kCharacterKahina).characterPosition.car = kCarKronos;
+ break;
+ default:
+ break;
}
}
@@ -444,13 +497,19 @@ void LogicManager::CONS_Kahina_InSeclusion(CONS_PARAMS) {
}
void LogicManager::HAND_Kahina_InSeclusion(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (_gameTime > 1107000 && !getCharacterCurrentParams(kCharacterKahina)[0] && _gameProgress[kProgressJacket]) {
send(kCharacterKahina, kCharacterCond1, 238732837, 0);
getCharacterCurrentParams(kCharacterKahina)[0] = 1;
}
+
if (_gameProgress[kProgressEventMertensChronosInvitation])
CONS_Kahina_AwaitingCath(0, 0, 0, 0);
+
+ break;
+ default:
+ break;
}
}
@@ -465,41 +524,49 @@ void LogicManager::CONS_Kahina_AwaitingCath(CONS_PARAMS) {
}
void LogicManager::HAND_Kahina_AwaitingCath(HAND_PARAMS) {
- if (msg->action <= 9) {
- if (msg->action < 8) {
- if (msg->action == 0 && _gameTime > 1485000 && !getCharacterCurrentParams(kCharacterKahina)[1]) {
- getCharacterCurrentParams(kCharacterKahina)[1] = 1;
- CONS_Kahina_CathDone(0, 0, 0, 0);
- }
- return;
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1485000 && !getCharacterCurrentParams(kCharacterKahina)[1]) {
+ getCharacterCurrentParams(kCharacterKahina)[1] = 1;
+ CONS_Kahina_CathDone(0, 0, 0, 0);
}
+
+ break;
+ case 8:
+ case 9:
if (msg->action == 8)
playDialog(0, "LIB012", -1, 0);
+
if (!_gameEvents[kEventKronosGoingToInvitation]) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 1;
KahinaCall(&LogicManager::CONS_Kahina_SaveGame, 2, kEventKronosGoingToInvitation, 0, 0);
- return;
+ break;
}
+
if (msg->action == 9)
playDialog(0, "LIB014", -1, 0);
- LABEL_21:
+
bumpCath(kCarKronos, 80, 255);
send(kCharacterKahina, kCharacterKronos, 171849314, 0);
getCharacterCurrentParams(kCharacterKahina)[0] = 1;
- return;
- }
- switch (msg->action) {
+ break;
case 12:
setDoor(75, kCharacterKahina, 0, 10, 9);
- return;
+ break;
case 18:
- if (getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] != 1)
- return;
- playNIS(kEventKronosGoingToInvitation);
- goto LABEL_21;
+ if (getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] == 1) {
+ playNIS(kEventKronosGoingToInvitation);
+ bumpCath(kCarKronos, 80, 255);
+ send(kCharacterKahina, kCharacterKronos, 171849314, 0);
+ getCharacterCurrentParams(kCharacterKahina)[0] = 1;
+ }
+
+ break;
case 137685712:
CONS_Kahina_CathDone(0, 0, 0, 0);
break;
+ default:
+ break;
}
}
@@ -514,31 +581,40 @@ void LogicManager::CONS_Kahina_CathDone(CONS_PARAMS) {
}
void LogicManager::HAND_Kahina_CathDone(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterKahina).characterPosition.car = kCarKronos;
- getCharacter(kCharacterKahina).characterPosition.position = 5000;
- getCharacter(kCharacterKahina).characterPosition.location = 0;
- setDoor(75, kCharacterCath, 1, 10, 9);
- getCharacterCurrentParams(kCharacterKahina)[0] = _gameTime + 1800;
- }
- return;
- }
- if (!_gameProgress[kProgressField14] && _gameTime < 1201500 && getCharacterCurrentParams(kCharacterKahina)[1] != 0x7FFFFFFF && getCharacterCurrentParams(kCharacterKahina)[0] < _gameTime) {
- if (_gameTime <= 1197000) {
- if (!cathInCorridor(kCarGreenSleeping) || !getCharacterCurrentParams(kCharacterKahina)[1]) {
- getCharacterCurrentParams(kCharacterKahina)[1] = _gameTime;
- if (!_gameTime)
- goto LABEL_14;
+ switch (msg->action) {
+ case 0:
+ if (!_gameProgress[kProgressField14] && _gameTime < 1201500 && getCharacterCurrentParams(kCharacterKahina)[1] != 0x7FFFFFFF && getCharacterCurrentParams(kCharacterKahina)[0] < _gameTime) {
+ if (_gameTime <= 1197000) {
+ if (!cathInCorridor(kCarGreenSleeping) || !getCharacterCurrentParams(kCharacterKahina)[1]) {
+ getCharacterCurrentParams(kCharacterKahina)[1] = _gameTime;
+ if (!_gameTime) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 1;
+ KahinaCall(&LogicManager::CONS_Kahina_SearchTrain, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterKahina)[1] >= _gameTime)
+ break;
}
- if (getCharacterCurrentParams(kCharacterKahina)[1] >= _gameTime)
- return;
+
+ getCharacterCurrentParams(kCharacterKahina)[1] = 0x7FFFFFFF;
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 1;
+ KahinaCall(&LogicManager::CONS_Kahina_SearchTrain, 0, 0, 0, 0);
}
- getCharacterCurrentParams(kCharacterKahina)[1] = 0x7FFFFFFF;
- LABEL_14:
- getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 1;
- KahinaCall(&LogicManager::CONS_Kahina_SearchTrain, 0, 0, 0, 0);
+
+ break;
+ case 12:
+ getCharacter(kCharacterKahina).characterPosition.car = kCarKronos;
+ getCharacter(kCharacterKahina).characterPosition.position = 5000;
+ getCharacter(kCharacterKahina).characterPosition.location = 0;
+ setDoor(75, kCharacterCath, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterKahina)[0] = _gameTime + 1800;
+ break;
+ default:
+ break;
}
+
}
void LogicManager::CONS_Kahina_DoDogBarkOtis(CONS_PARAMS) {
@@ -552,16 +628,22 @@ void LogicManager::CONS_Kahina_DoDogBarkOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Kahina_DoDogBarkOtis(HAND_PARAMS) {
- if (msg->action == 3 || msg->action == 4) {
+ switch (msg->action) {
+ case 3:
+ case 4:
releaseAtDoor(kCharacterKahina, 37);
getCharacter(kCharacterKahina).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterKahina, "616Cf");
blockAtDoor(kCharacterKahina, 37);
send(kCharacterKahina, kCharacterMax, 158007856, 0);
+ break;
+ default:
+ break;
}
}
@@ -578,32 +660,50 @@ void LogicManager::CONS_Kahina_SearchTrain(CONS_PARAMS) {
void LogicManager::HAND_Kahina_SearchTrain(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (getCharacterCurrentParams(kCharacterKahina)[1] == 0x7FFFFFFF || !_gameTime)
- return;
- if (getCharacterCurrentParams(kCharacterKahina)[0] >= _gameTime) {
- if (!cathInCorridor(kCarRedSleeping) || !getCharacterCurrentParams(kCharacterKahina)[1]) {
- getCharacterCurrentParams(kCharacterKahina)[1] = _gameTime;
- if (!_gameTime)
- goto LABEL_13;
+ if (getCharacterCurrentParams(kCharacterKahina)[1] != 0x7FFFFFFF && _gameTime) {
+ if (getCharacterCurrentParams(kCharacterKahina)[0] >= _gameTime) {
+ if (!cathInCorridor(kCarRedSleeping) || !getCharacterCurrentParams(kCharacterKahina)[1]) {
+ getCharacterCurrentParams(kCharacterKahina)[1] = _gameTime;
+ if (!_gameTime) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 9;
+ KahinaCall(&LogicManager::CONS_Kahina_DoWalk, 4, 4070, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterKahina)[1] >= _gameTime)
+ break;
}
- if (getCharacterCurrentParams(kCharacterKahina)[1] >= _gameTime)
- return;
+
+ getCharacterCurrentParams(kCharacterKahina)[1] = 0x7FFFFFFF;
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 9;
+ KahinaCall(&LogicManager::CONS_Kahina_DoWalk, 4, 4070, 0, 0);
}
- getCharacterCurrentParams(kCharacterKahina)[1] = 0x7FFFFFFF;
- LABEL_13:
- getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 9;
- KahinaCall(&LogicManager::CONS_Kahina_DoWalk, 4, 4070, 0, 0);
- return;
+
+ break;
case 12:
- _gameProgress[5] = 19;
+ _gameProgress[kProgressField14] = 19;
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 1;
KahinaCall(&LogicManager::CONS_Kahina_DoWalk, 3, 8200, 0, 0);
break;
case 18:
switch (getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8]) {
case 1:
- if (!whoOnScreen(kCharacterKahina))
- goto LABEL_39;
+ if (!whoOnScreen(kCharacterKahina)) {
+ if (inComp(kCharacterCath, kCarGreenSleeping, 8200) || cathOutHisWindow() || nearChar(kCharacterKahina, kCharacterCath, 2000)) {
+ if (_gameProgress[kProgressField14] == 19)
+ _gameProgress[kProgressField14] = 0;
+
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 8;
+ KahinaCall(&LogicManager::CONS_Kahina_DoWalk, 3, 9460, 0, 0);
+ } else {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 5;
+ KahinaCall(&LogicManager::CONS_Kahina_DoCorrOtis, "616Aa", 1, 0, 0);
+ }
+
+ break;
+ }
+
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 2;
KahinaCall(&LogicManager::CONS_Kahina_DoWalk, 4, 9460, 0, 0);
break;
@@ -616,12 +716,17 @@ void LogicManager::HAND_Kahina_SearchTrain(HAND_PARAMS) {
KahinaCall(&LogicManager::CONS_Kahina_DoWalk, 3, 8200, 0, 0);
break;
case 4:
- LABEL_39:
if (inComp(kCharacterCath, kCarGreenSleeping, 8200) || cathOutHisWindow() || nearChar(kCharacterKahina, kCharacterCath, 2000)) {
- goto LABEL_23;
+ if (_gameProgress[kProgressField14] == 19)
+ _gameProgress[kProgressField14] = 0;
+
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 8;
+ KahinaCall(&LogicManager::CONS_Kahina_DoWalk, 3, 9460, 0, 0);
+ } else {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 5;
+ KahinaCall(&LogicManager::CONS_Kahina_DoCorrOtis, "616Aa", 1, 0, 0);
}
- getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 5;
- KahinaCall(&LogicManager::CONS_Kahina_DoCorrOtis, "616Aa", 1, 0, 0);
+
break;
case 5:
getCharacter(kCharacterKahina).characterPosition.location = 1;
@@ -639,9 +744,10 @@ void LogicManager::HAND_Kahina_SearchTrain(HAND_PARAMS) {
break;
case 7:
getCharacter(kCharacterKahina).characterPosition.location = 0;
- LABEL_23:
- if (_gameProgress[5] == 19)
- _gameProgress[5] = 0;
+
+ if (_gameProgress[kProgressField14] == 19)
+ _gameProgress[kProgressField14] = 0;
+
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 8;
KahinaCall(&LogicManager::CONS_Kahina_DoWalk, 3, 9460, 0, 0);
break;
@@ -658,10 +764,14 @@ void LogicManager::HAND_Kahina_SearchTrain(HAND_PARAMS) {
KahinaCall(&LogicManager::CONS_Kahina_DoWalk, 4, 6470, 0, 0);
break;
case 11:
- if (inSuite(kCharacterCath, kCarRedSleeping, 6130))
- goto LABEL_35;
- getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 12;
- KahinaCall(&LogicManager::CONS_Kahina_DoCorrOtis, "616Ac", 34, 0, 0);
+ if (inSuite(kCharacterCath, kCarRedSleeping, 6130)) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 15;
+ KahinaCall(&LogicManager::CONS_Kahina_DoWalk, 4, 9460, 0, 0);
+ } else {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 12;
+ KahinaCall(&LogicManager::CONS_Kahina_DoCorrOtis, "616Ac", 34, 0, 0);
+ }
+
break;
case 12:
getCharacter(kCharacterKahina).characterPosition.location = 1;
@@ -679,7 +789,6 @@ void LogicManager::HAND_Kahina_SearchTrain(HAND_PARAMS) {
break;
case 14:
getCharacter(kCharacterKahina).characterPosition.location = 0;
- LABEL_35:
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 15;
KahinaCall(&LogicManager::CONS_Kahina_DoWalk, 4, 9460, 0, 0);
break;
@@ -700,8 +809,11 @@ void LogicManager::HAND_Kahina_SearchTrain(HAND_PARAMS) {
fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
break;
}
}
@@ -717,18 +829,21 @@ void LogicManager::CONS_Kahina_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Kahina_StartPart2(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterKahina);
- getCharacter(kCharacterKahina).characterPosition.car = kCarKronos;
- getCharacter(kCharacterKahina).characterPosition.position = 6000;
- getCharacter(kCharacterKahina).characterPosition.location = 0;
- getCharacter(kCharacterKahina).inventoryItem = 0;
- getCharacter(kCharacterKahina).clothes = 0;
- setDoor(75, kCharacterKahina, 1, 10, 9);
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Kahina_InSeclusionPart2(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterKahina);
+ getCharacter(kCharacterKahina).characterPosition.car = kCarKronos;
+ getCharacter(kCharacterKahina).characterPosition.position = 6000;
+ getCharacter(kCharacterKahina).characterPosition.location = 0;
+ getCharacter(kCharacterKahina).inventoryItem = 0;
+ getCharacter(kCharacterKahina).clothes = 0;
+ setDoor(75, kCharacterKahina, 1, 10, 9);
+ break;
+ default:
+ break;
}
}
@@ -745,40 +860,55 @@ void LogicManager::CONS_Kahina_InSeclusionPart2(CONS_PARAMS) {
void LogicManager::HAND_Kahina_InSeclusionPart2(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (getCharacterCurrentParams(kCharacterKahina)[0])
- goto LABEL_9;
- if (!getCharacterCurrentParams(kCharacterKahina)[1]) {
- getCharacterCurrentParams(kCharacterKahina)[1] = _gameTime + 9000;
- if (_gameTime == -9000)
- goto LABEL_8;
- }
- if (getCharacterCurrentParams(kCharacterKahina)[1] < _gameTime) {
- getCharacterCurrentParams(kCharacterKahina)[1] = 0x7FFFFFFF;
- LABEL_8:
- getCharacterCurrentParams(kCharacterKahina)[0] = 1;
- getCharacterCurrentParams(kCharacterKahina)[1] = 0;
+ if (!getCharacterCurrentParams(kCharacterKahina)[0]) {
+ bool skip = false;
+
+ if (!getCharacterCurrentParams(kCharacterKahina)[1]) {
+ getCharacterCurrentParams(kCharacterKahina)[1] = _gameTime + 9000;
+ if (_gameTime == -9000) {
+ skip = true;
+ getCharacterCurrentParams(kCharacterKahina)[0] = 1;
+ getCharacterCurrentParams(kCharacterKahina)[1] = 0;
+ }
+ }
+
+ if (!skip && getCharacterCurrentParams(kCharacterKahina)[1] < _gameTime) {
+ getCharacterCurrentParams(kCharacterKahina)[1] = 0x7FFFFFFF;
+ getCharacterCurrentParams(kCharacterKahina)[0] = 1;
+ getCharacterCurrentParams(kCharacterKahina)[1] = 0;
+ }
}
- LABEL_9:
+
if (!_gameEvents[kEventKahinaAskSpeakFirebird] || _gameEvents[kEventKronosConversationFirebird] || !checkLoc(kCharacterCath, kCarKronos)) {
- goto LABEL_46;
+ if (_gameTime > 1845000 && _gameEvents[kEventKronosConversationFirebird] && inOuterSanctum(kCharacterCath)) {
+ setDoor(75, kCharacterCath, 1, 10, 9);
+ bumpCath(kCarKronos, 87, 255);
+ }
+
+ break;
}
+
if (!getCharacterCurrentParams(kCharacterKahina)[2]) {
getCharacterCurrentParams(kCharacterKahina)[2] = _gameTime + 900;
- if (_gameTime == -900)
- goto LABEL_16;
+ if (_gameTime == -900) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 1;
+ KahinaCall(&LogicManager::CONS_Kahina_SaveGame, 2, kEventKronosConversationFirebird, 0, 0);
+ break;
+ }
}
+
if (getCharacterCurrentParams(kCharacterKahina)[2] < _gameTime) {
getCharacterCurrentParams(kCharacterKahina)[2] = 0x7FFFFFFF;
- LABEL_16:
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 1;
KahinaCall(&LogicManager::CONS_Kahina_SaveGame, 2, kEventKronosConversationFirebird, 0, 0);
- return;
+ break;
}
- LABEL_46:
+
if (_gameTime > 1845000 && _gameEvents[kEventKronosConversationFirebird] && inOuterSanctum(kCharacterCath)) {
setDoor(75, kCharacterCath, 1, 10, 9);
bumpCath(kCarKronos, 87, 255);
}
+
break;
case 8:
case 9:
@@ -786,18 +916,22 @@ void LogicManager::HAND_Kahina_InSeclusionPart2(HAND_PARAMS) {
if (_gameEvents[kEventKahinaAskSpeakFirebird]) {
if (whoRunningDialog(kCharacterKahina))
fadeDialog(kCharacterKahina);
+
if (msg->action == 8)
playDialog(0, "LIB012", -1, 0);
+
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 4;
KahinaCall(&LogicManager::CONS_Kahina_SaveGame, 2, kEventKronosConversationFirebird, 0, 0);
} else if (_gameEvents[kEventMilosCompartmentVisitAugust] || _gameEvents[kEventTatianaGivePoem] || _gameEvents[kEventTatianaBreakfastGivePoem]) {
if (msg->action == 8)
playDialog(0, "LIB012", -1, 0);
+
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 7;
KahinaCall(&LogicManager::CONS_Kahina_SaveGame, 2, kEventKahinaAskSpeakFirebird, 0, 0);
} else if (getCharacterCurrentParams(kCharacterKahina)[0]) {
if (msg->action == 8)
playDialog(0, "LIB012", -1, 0);
+
playNIS(kEventKahinaAskSpeak);
cleanNIS();
setDoor(75, kCharacterKahina, 1, 0, 0);
@@ -805,6 +939,7 @@ void LogicManager::HAND_Kahina_InSeclusionPart2(HAND_PARAMS) {
KahinaCall(&LogicManager::CONS_Kahina_DoDialog, "KRO3003", 0, 0, 0);
} else {
setDoor(75, kCharacterKahina, 1, 0, 0);
+
if (msg->action == 8) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 9;
KahinaCall(&LogicManager::CONS_Kahina_DoDialog, "LIB012", 0, 0, 0);
@@ -814,11 +949,12 @@ void LogicManager::HAND_Kahina_InSeclusionPart2(HAND_PARAMS) {
}
}
}
- return;
+
+ break;
case 12:
getCharacterCurrentParams(kCharacterKahina)[0] = 1;
setDoor(75, kCharacterKahina, 1, 10, 9);
- return;
+ break;
case 18:
switch (getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8]) {
case 1:
@@ -833,7 +969,12 @@ void LogicManager::HAND_Kahina_InSeclusionPart2(HAND_PARAMS) {
KahinaCall(&LogicManager::CONS_Kahina_DoDialog, "KRO3005", 0, 0, 0);
break;
case 3:
- goto LABEL_46;
+ if (_gameTime > 1845000 && _gameEvents[kEventKronosConversationFirebird] && inOuterSanctum(kCharacterCath)) {
+ setDoor(75, kCharacterCath, 1, 10, 9);
+ bumpCath(kCarKronos, 87, 255);
+ }
+
+ break;
case 4:
playNIS(kEventKronosConversationFirebird);
setDoor(75, kCharacterCath, 0, 10, 9);
@@ -859,11 +1000,12 @@ void LogicManager::HAND_Kahina_InSeclusionPart2(HAND_PARAMS) {
setDoor(75, kCharacterKahina, 1, 10, 9);
break;
default:
- return;
+ break;
}
- return;
+
+ break;
default:
- return;
+ break;
}
}
@@ -878,17 +1020,19 @@ void LogicManager::CONS_Kahina_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Kahina_StartPart3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterKahina);
- getCharacter(kCharacterKahina).characterPosition.car = kCarKronos;
- getCharacter(kCharacterKahina).characterPosition.position = 5000;
- getCharacter(kCharacterKahina).characterPosition.location = 0;
- getCharacter(kCharacterKahina).inventoryItem = 0;
- getCharacter(kCharacterKahina).clothes = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Kahina_BeforeConcert(0, 0, 0, 0);
+ case 12:
+ endGraphics(kCharacterKahina);
+ getCharacter(kCharacterKahina).characterPosition.car = kCarKronos;
+ getCharacter(kCharacterKahina).characterPosition.position = 5000;
+ getCharacter(kCharacterKahina).characterPosition.location = 0;
+ getCharacter(kCharacterKahina).inventoryItem = 0;
+ getCharacter(kCharacterKahina).clothes = 0;
+ break;
+ default:
+ break;
}
}
@@ -910,8 +1054,13 @@ void LogicManager::HAND_Kahina_DoWalk1033(HAND_PARAMS) {
case 0:
if (_gameEvents[kEventAnnaBaggageArgument])
forceJump(kCharacterKahina, &LogicManager::CONS_Kahina_Finished);
- if (walk(kCharacterKahina, getCharacterCurrentParams(kCharacterKahina)[0], getCharacterCurrentParams(kCharacterKahina)[1]))
- goto LABEL_15;
+
+ if (walk(kCharacterKahina, getCharacterCurrentParams(kCharacterKahina)[0], getCharacterCurrentParams(kCharacterKahina)[1])) {
+ getCharacter(kCharacterKahina).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
+ fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
+ }
+
break;
case 5:
if (_gameEvents[kEventKronosConversation] || _gameEvents[kEventKronosConversationFirebird]) {
@@ -920,24 +1069,24 @@ void LogicManager::HAND_Kahina_DoWalk1033(HAND_PARAMS) {
} else {
playDialog(kCharacterCath, "CAT1019", -1, 0);
}
-
} else {
playCathExcuseMe();
}
+
break;
case 6:
playChrExcuseMe(kCharacterKahina, kCharacterCath, 0);
break;
case 12:
if (walk(kCharacterKahina, getCharacterCurrentParams(kCharacterKahina)[0], getCharacterCurrentParams(kCharacterKahina)[1])) {
- LABEL_15:
getCharacter(kCharacterKahina).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
}
+
break;
default:
- return;
+ break;
}
}
@@ -956,49 +1105,60 @@ void LogicManager::HAND_Kahina_BeforeConcert(HAND_PARAMS) {
case 0:
if (_gameEvents[kEventKronosVisit])
setDoor(75, kCharacterCath, 3, 10, 9);
+
if (inInnerSanctum(kCharacterCath)) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 1;
KahinaCall(&LogicManager::CONS_Kahina_SaveGame, 2, kEventKahinaPunchSuite4, 0, 0);
- return;
+ break;
}
- LABEL_30:
+
if (_gameTime > 2079000 && !getCharacterCurrentParams(kCharacterKahina)[1]) {
getCharacterCurrentParams(kCharacterKahina)[1] = 1;
if (_gameEvents[kEventKahinaAskSpeakFirebird] && !_gameEvents[kEventKronosConversationFirebird] && checkLoc(kCharacterCath, kCarKronos)) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 2;
KahinaCall(&LogicManager::CONS_Kahina_SaveGame, 2, kEventKronosConversationFirebird, 0, 0);
} else {
- LABEL_51:
if (inOuterSanctum(kCharacterCath))
bumpCath(kCarKronos, 87, 255);
+
CONS_Kahina_Concert(0, 0, 0, 0);
}
- return;
- }
- if (getCharacterCurrentParams(kCharacterKahina)[0])
- goto LABEL_42;
- if (!getCharacterCurrentParams(kCharacterKahina)[2]) {
- getCharacterCurrentParams(kCharacterKahina)[2] = _gameTime + 9000;
- if (_gameTime == -9000)
- goto LABEL_41;
+
+ break;
}
- if (getCharacterCurrentParams(kCharacterKahina)[2] < _gameTime) {
- getCharacterCurrentParams(kCharacterKahina)[2] = 0x7FFFFFFF;
- LABEL_41:
- getCharacterCurrentParams(kCharacterKahina)[0] = 1;
- getCharacterCurrentParams(kCharacterKahina)[2] = 0;
+
+ if (!getCharacterCurrentParams(kCharacterKahina)[0]) {
+ bool skip = false;
+
+ if (!getCharacterCurrentParams(kCharacterKahina)[2]) {
+ getCharacterCurrentParams(kCharacterKahina)[2] = _gameTime + 9000;
+ if (_gameTime == -9000) {
+ skip = true;
+ getCharacterCurrentParams(kCharacterKahina)[0] = 1;
+ getCharacterCurrentParams(kCharacterKahina)[2] = 0;
+ }
+ }
+
+ if (!skip && getCharacterCurrentParams(kCharacterKahina)[2] < _gameTime) {
+ getCharacterCurrentParams(kCharacterKahina)[2] = 0x7FFFFFFF;
+ getCharacterCurrentParams(kCharacterKahina)[0] = 1;
+ getCharacterCurrentParams(kCharacterKahina)[2] = 0;
+ }
}
- LABEL_42:
+
if (_gameEvents[kEventKahinaAskSpeakFirebird] && !_gameEvents[kEventKronosConversationFirebird] && checkLoc(kCharacterCath, kCarKronos)) {
if (getCharacterCurrentParams(kCharacterKahina)[3] || (getCharacterCurrentParams(kCharacterKahina)[3] = _gameTime + 900,
_gameTime != -900)) {
if (getCharacterCurrentParams(kCharacterKahina)[3] >= _gameTime)
- return;
+ break;
+
getCharacterCurrentParams(kCharacterKahina)[3] = 0x7FFFFFFF;
}
+
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 3;
KahinaCall(&LogicManager::CONS_Kahina_SaveGame, 2, kEventKronosConversationFirebird, 0, 0);
}
+
break;
case 8:
case 9:
@@ -1006,16 +1166,19 @@ void LogicManager::HAND_Kahina_BeforeConcert(HAND_PARAMS) {
if (_gameEvents[kEventKahinaAskSpeakFirebird]) {
if (msg->action == 8)
playDialog(0, "LIB012", -1, 0);
+
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 6;
KahinaCall(&LogicManager::CONS_Kahina_SaveGame, 2, kEventKronosConversationFirebird, 0, 0);
} else if (_gameEvents[kEventMilosCompartmentVisitAugust] || _gameEvents[kEventTatianaGivePoem] || _gameEvents[kEventTatianaBreakfastGivePoem]) {
if (msg->action == 8)
playDialog(0, "LIB012", -1, 0);
+
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 9;
KahinaCall(&LogicManager::CONS_Kahina_SaveGame, 2, kEventKahinaAskSpeakFirebird, 0, 0);
} else if (getCharacterCurrentParams(kCharacterKahina)[0]) {
if (msg->action == 8)
playDialog(0, "LIB012", -1, 0);
+
playNIS(kEventKahinaAskSpeak);
cleanNIS();
setDoor(75, kCharacterKahina, 1, 0, 0);
@@ -1023,6 +1186,7 @@ void LogicManager::HAND_Kahina_BeforeConcert(HAND_PARAMS) {
KahinaCall(&LogicManager::CONS_Kahina_DoDialog, "KRO3003", 0, 0, 0);
} else {
setDoor(75, kCharacterKahina, 1, 0, 0);
+
if (msg->action == 8) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 11;
KahinaCall(&LogicManager::CONS_Kahina_DoDialog, "LIB012", 0, 0, 0);
@@ -1032,7 +1196,8 @@ void LogicManager::HAND_Kahina_BeforeConcert(HAND_PARAMS) {
}
}
}
- return;
+
+ break;
case 12:
if (_gameEvents[kEventKronosConversationFirebird]) {
setDoor(75, kCharacterCath, 3, 10, 9);
@@ -1045,12 +1210,65 @@ void LogicManager::HAND_Kahina_BeforeConcert(HAND_PARAMS) {
switch (getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8]) {
case 1:
playNIS(kEventKahinaPunchSuite4);
- endGame(3, 253, 0, 1);
- goto LABEL_30;
+ endGame(3, 253, 0, true);
+
+ if (_gameTime > 2079000 && !getCharacterCurrentParams(kCharacterKahina)[1]) {
+ getCharacterCurrentParams(kCharacterKahina)[1] = 1;
+ if (_gameEvents[kEventKahinaAskSpeakFirebird] && !_gameEvents[kEventKronosConversationFirebird] && checkLoc(kCharacterCath, kCarKronos)) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 2;
+ KahinaCall(&LogicManager::CONS_Kahina_SaveGame, 2, kEventKronosConversationFirebird, 0, 0);
+ } else {
+ if (inOuterSanctum(kCharacterCath))
+ bumpCath(kCarKronos, 87, 255);
+
+ CONS_Kahina_Concert(0, 0, 0, 0);
+ }
+
+ break;
+ }
+
+ if (!getCharacterCurrentParams(kCharacterKahina)[0]) {
+ bool skip = false;
+
+ if (!getCharacterCurrentParams(kCharacterKahina)[2]) {
+ getCharacterCurrentParams(kCharacterKahina)[2] = _gameTime + 9000;
+ if (_gameTime == -9000) {
+ skip = true;
+ getCharacterCurrentParams(kCharacterKahina)[0] = 1;
+ getCharacterCurrentParams(kCharacterKahina)[2] = 0;
+ }
+ }
+
+ if (!skip && getCharacterCurrentParams(kCharacterKahina)[2] < _gameTime) {
+ getCharacterCurrentParams(kCharacterKahina)[2] = 0x7FFFFFFF;
+ getCharacterCurrentParams(kCharacterKahina)[0] = 1;
+ getCharacterCurrentParams(kCharacterKahina)[2] = 0;
+ }
+ }
+
+ if (_gameEvents[kEventKahinaAskSpeakFirebird] && !_gameEvents[kEventKronosConversationFirebird] && checkLoc(kCharacterCath, kCarKronos)) {
+ if (getCharacterCurrentParams(kCharacterKahina)[3] || (getCharacterCurrentParams(kCharacterKahina)[3] = _gameTime + 900,
+ _gameTime != -900)) {
+ if (getCharacterCurrentParams(kCharacterKahina)[3] >= _gameTime)
+ break;
+
+ getCharacterCurrentParams(kCharacterKahina)[3] = 0x7FFFFFFF;
+ }
+
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 3;
+ KahinaCall(&LogicManager::CONS_Kahina_SaveGame, 2, kEventKronosConversationFirebird, 0, 0);
+ }
+
+ break;
case 2:
playNIS(kEventKronosConversationFirebird);
bumpCath(kCarKronos, 87, 255);
- goto LABEL_51;
+
+ if (inOuterSanctum(kCharacterCath))
+ bumpCath(kCarKronos, 87, 255);
+
+ CONS_Kahina_Concert(0, 0, 0, 0);
+ break;
case 3:
playNIS(kEventKronosConversationFirebird);
setDoor(75, kCharacterCath, 0, 10, 9);
@@ -1087,11 +1305,12 @@ void LogicManager::HAND_Kahina_BeforeConcert(HAND_PARAMS) {
setDoor(75, kCharacterKahina, 1, 10, 9);
break;
default:
- return;
+ break;
}
- return;
+
+ break;
default:
- return;
+ break;
}
}
@@ -1106,52 +1325,92 @@ void LogicManager::CONS_Kahina_Concert(CONS_PARAMS) {
}
void LogicManager::HAND_Kahina_Concert(HAND_PARAMS) {
- if (msg->action <= 12) {
- if (msg->action == 12) {
- getCharacter(kCharacterKahina).characterPosition.car = kCarKronos;
- getCharacter(kCharacterKahina).characterPosition.position = 5000;
- getCharacter(kCharacterKahina).characterPosition.location = 0;
- startCycOtis(kCharacterKahina, "202a");
- return;
- }
- if (msg->action)
- return;
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterKahina)[0]) {
if (!getCharacterCurrentParams(kCharacterKahina)[2])
getCharacterCurrentParams(kCharacterKahina)[2] = _gameTime + 4500;
+
if (getCharacterCurrentParams(kCharacterKahina)[4] != 0x7FFFFFFF && _gameTime) {
- if (getCharacterCurrentParams(kCharacterKahina)[2] < _gameTime)
- goto LABEL_24;
+ if (getCharacterCurrentParams(kCharacterKahina)[2] < _gameTime) {
+ getCharacterCurrentParams(kCharacterKahina)[4] = 0x7FFFFFFF;
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 2;
+ KahinaCall(&LogicManager::CONS_Kahina_FindFirebird, 0, 0, 0, 0);
+ break;
+ }
+
if (checkCathDir(kCarKronos, 80) || checkCathDir(kCarKronos, 88) || !getCharacterCurrentParams(kCharacterKahina)[4]) {
getCharacterCurrentParams(kCharacterKahina)[4] = _gameTime;
- if (!_gameTime)
- goto LABEL_25;
+ if (!_gameTime) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 2;
+ KahinaCall(&LogicManager::CONS_Kahina_FindFirebird, 0, 0, 0, 0);
+ break;
+ }
}
+
if (getCharacterCurrentParams(kCharacterKahina)[4] < _gameTime) {
- LABEL_24:
getCharacterCurrentParams(kCharacterKahina)[4] = 0x7FFFFFFF;
- LABEL_25:
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 2;
KahinaCall(&LogicManager::CONS_Kahina_FindFirebird, 0, 0, 0, 0);
- return;
+ break;
+ }
+ }
+ }
+
+ if (!getCharacterCurrentParams(kCharacterKahina)[1]) {
+ if (!_gameProgress[kProgressField44] && _gameTime > 2214000) {
+ if (_gameInventory[kProgressField48].location == 3 || _gameInventory[kProgressField48].location == 7) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 3;
+ KahinaCall(&LogicManager::CONS_Kahina_SearchCath, 0, 0, 0, 0);
+ } else if (_gameInventory[kProgressField48].location == 2 || _gameInventory[kProgressField48].location == 1) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 4;
+ KahinaCall(&LogicManager::CONS_Kahina_SearchTatiana, 0, 0, 0, 0);
}
}
+
+ break;
}
- LABEL_32:
- if (!getCharacterCurrentParams(kCharacterKahina)[1])
- goto LABEL_45;
+
if (!getCharacterCurrentParams(kCharacterKahina)[3])
getCharacterCurrentParams(kCharacterKahina)[3] = _gameTime + 4500;
- if (getCharacterCurrentParams(kCharacterKahina)[5] == 0x7FFFFFFF || !_gameTime)
- goto LABEL_45;
+
+ if (getCharacterCurrentParams(kCharacterKahina)[5] == 0x7FFFFFFF || !_gameTime) {
+ if (!_gameProgress[kProgressField44] && _gameTime > 2214000) {
+ if (_gameInventory[kProgressField48].location == 3 || _gameInventory[kProgressField48].location == 7) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 3;
+ KahinaCall(&LogicManager::CONS_Kahina_SearchCath, 0, 0, 0, 0);
+ } else if (_gameInventory[kProgressField48].location == 2 || _gameInventory[kProgressField48].location == 1) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 4;
+ KahinaCall(&LogicManager::CONS_Kahina_SearchTatiana, 0, 0, 0, 0);
+ }
+ }
+
+ break;
+ }
+
if (getCharacterCurrentParams(kCharacterKahina)[2] >= _gameTime) {
if (checkCathDir(kCarKronos, 80) || checkCathDir(kCarKronos, 88) || !getCharacterCurrentParams(kCharacterKahina)[5]) {
getCharacterCurrentParams(kCharacterKahina)[5] = _gameTime;
- if (!_gameTime)
- goto LABEL_44;
+ if (!_gameTime) {
+ playDialog(0, "LIB014", getVolume(kCharacterKahina), 0);
+ playDialog(0, "LIB015", getVolume(kCharacterKahina), 15);
+ startCycOtis(kCharacterKahina, "202a");
+ getCharacterCurrentParams(kCharacterKahina)[1] = 0;
+ if (!_gameProgress[kProgressField44] && _gameTime > 2214000) {
+ if (_gameInventory[kProgressField48].location == 3 || _gameInventory[kProgressField48].location == 7) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 3;
+ KahinaCall(&LogicManager::CONS_Kahina_SearchCath, 0, 0, 0, 0);
+ } else if (_gameInventory[kProgressField48].location == 2 || _gameInventory[kProgressField48].location == 1) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 4;
+ KahinaCall(&LogicManager::CONS_Kahina_SearchTatiana, 0, 0, 0, 0);
+ }
+ }
+
+ break;
+ }
}
+
if (getCharacterCurrentParams(kCharacterKahina)[5] >= _gameTime) {
- LABEL_45:
if (!_gameProgress[kProgressField44] && _gameTime > 2214000) {
if (_gameInventory[kProgressField48].location == 3 || _gameInventory[kProgressField48].location == 7) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 3;
@@ -1161,50 +1420,153 @@ void LogicManager::HAND_Kahina_Concert(HAND_PARAMS) {
KahinaCall(&LogicManager::CONS_Kahina_SearchTatiana, 0, 0, 0, 0);
}
}
- return;
+
+ break;
}
}
+
getCharacterCurrentParams(kCharacterKahina)[5] = 0x7FFFFFFF;
- LABEL_44:
playDialog(0, "LIB014", getVolume(kCharacterKahina), 0);
playDialog(0, "LIB015", getVolume(kCharacterKahina), 15);
startCycOtis(kCharacterKahina, "202a");
getCharacterCurrentParams(kCharacterKahina)[1] = 0;
- goto LABEL_45;
- }
- if (msg->action > 92186062) {
- switch (msg->action) {
- case 134611040:
- if (_gameEvents[kEventConcertLeaveWithBriefcase])
- CONS_Kahina_SeekCath(0, 0, 0, 0);
- break;
- case 137503360:
- CONS_Kahina_Finished(0, 0, 0, 0);
- break;
- case 237555748:
- getCharacterCurrentParams(kCharacterKahina)[0] = 1;
- break;
+
+ if (!_gameProgress[kProgressField44] && _gameTime > 2214000) {
+ if (_gameInventory[kProgressField48].location == 3 || _gameInventory[kProgressField48].location == 7) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 3;
+ KahinaCall(&LogicManager::CONS_Kahina_SearchCath, 0, 0, 0, 0);
+ } else if (_gameInventory[kProgressField48].location == 2 || _gameInventory[kProgressField48].location == 1) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 4;
+ KahinaCall(&LogicManager::CONS_Kahina_SearchTatiana, 0, 0, 0, 0);
+ }
}
- return;
- }
- if (msg->action == 92186062) {
- if (getCharacterCurrentParams(kCharacterKahina)[0]) {
- getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 1;
- KahinaCall(&LogicManager::CONS_Kahina_FindFirebird, 0, 0, 0, 0);
- }
- return;
- }
- if (msg->action == 18) {
+
+ break;
+ case 12:
+ getCharacter(kCharacterKahina).characterPosition.car = kCarKronos;
+ getCharacter(kCharacterKahina).characterPosition.position = 5000;
+ getCharacter(kCharacterKahina).characterPosition.location = 0;
+ startCycOtis(kCharacterKahina, "202a");
+ break;
+ case 18:
if (getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] == 1) {
getCharacterCurrentParams(kCharacterKahina)[0] = 0;
getCharacterCurrentParams(kCharacterKahina)[1] = 1;
- return;
+ break;
}
+
if (getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] == 2) {
getCharacterCurrentParams(kCharacterKahina)[0] = 0;
getCharacterCurrentParams(kCharacterKahina)[1] = 1;
- goto LABEL_32;
+ if (!getCharacterCurrentParams(kCharacterKahina)[1]) {
+ if (!_gameProgress[kProgressField44] && _gameTime > 2214000) {
+ if (_gameInventory[kProgressField48].location == 3 || _gameInventory[kProgressField48].location == 7) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 3;
+ KahinaCall(&LogicManager::CONS_Kahina_SearchCath, 0, 0, 0, 0);
+ } else if (_gameInventory[kProgressField48].location == 2 || _gameInventory[kProgressField48].location == 1) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 4;
+ KahinaCall(&LogicManager::CONS_Kahina_SearchTatiana, 0, 0, 0, 0);
+ }
+ }
+
+ break;
+ }
+
+ if (!getCharacterCurrentParams(kCharacterKahina)[3])
+ getCharacterCurrentParams(kCharacterKahina)[3] = _gameTime + 4500;
+
+ if (getCharacterCurrentParams(kCharacterKahina)[5] == 0x7FFFFFFF || !_gameTime) {
+ if (!_gameProgress[kProgressField44] && _gameTime > 2214000) {
+ if (_gameInventory[kProgressField48].location == 3 || _gameInventory[kProgressField48].location == 7) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 3;
+ KahinaCall(&LogicManager::CONS_Kahina_SearchCath, 0, 0, 0, 0);
+ } else if (_gameInventory[kProgressField48].location == 2 || _gameInventory[kProgressField48].location == 1) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 4;
+ KahinaCall(&LogicManager::CONS_Kahina_SearchTatiana, 0, 0, 0, 0);
+ }
+ }
+
+ break;
+ }
+
+ if (getCharacterCurrentParams(kCharacterKahina)[2] >= _gameTime) {
+ if (checkCathDir(kCarKronos, 80) || checkCathDir(kCarKronos, 88) || !getCharacterCurrentParams(kCharacterKahina)[5]) {
+ getCharacterCurrentParams(kCharacterKahina)[5] = _gameTime;
+ if (!_gameTime) {
+ playDialog(0, "LIB014", getVolume(kCharacterKahina), 0);
+ playDialog(0, "LIB015", getVolume(kCharacterKahina), 15);
+ startCycOtis(kCharacterKahina, "202a");
+ getCharacterCurrentParams(kCharacterKahina)[1] = 0;
+ if (!_gameProgress[kProgressField44] && _gameTime > 2214000) {
+ if (_gameInventory[kProgressField48].location == 3 || _gameInventory[kProgressField48].location == 7) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 3;
+ KahinaCall(&LogicManager::CONS_Kahina_SearchCath, 0, 0, 0, 0);
+ } else if (_gameInventory[kProgressField48].location == 2 || _gameInventory[kProgressField48].location == 1) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 4;
+ KahinaCall(&LogicManager::CONS_Kahina_SearchTatiana, 0, 0, 0, 0);
+ }
+ }
+
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterKahina)[5] >= _gameTime) {
+ if (!_gameProgress[kProgressField44] && _gameTime > 2214000) {
+ if (_gameInventory[kProgressField48].location == 3 || _gameInventory[kProgressField48].location == 7) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 3;
+ KahinaCall(&LogicManager::CONS_Kahina_SearchCath, 0, 0, 0, 0);
+ } else if (_gameInventory[kProgressField48].location == 2 || _gameInventory[kProgressField48].location == 1) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 4;
+ KahinaCall(&LogicManager::CONS_Kahina_SearchTatiana, 0, 0, 0, 0);
+ }
+ }
+
+ break;
+ }
+ }
+
+ getCharacterCurrentParams(kCharacterKahina)[5] = 0x7FFFFFFF;
+ playDialog(0, "LIB014", getVolume(kCharacterKahina), 0);
+ playDialog(0, "LIB015", getVolume(kCharacterKahina), 15);
+ startCycOtis(kCharacterKahina, "202a");
+ getCharacterCurrentParams(kCharacterKahina)[1] = 0;
+
+ if (!_gameProgress[kProgressField44] && _gameTime > 2214000) {
+ if (_gameInventory[kProgressField48].location == 3 || _gameInventory[kProgressField48].location == 7) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 3;
+ KahinaCall(&LogicManager::CONS_Kahina_SearchCath, 0, 0, 0, 0);
+ } else if (_gameInventory[kProgressField48].location == 2 || _gameInventory[kProgressField48].location == 1) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 4;
+ KahinaCall(&LogicManager::CONS_Kahina_SearchTatiana, 0, 0, 0, 0);
+ }
+ }
+
+ break;
+ }
+
+ break;
+ case 92186062:
+ if (getCharacterCurrentParams(kCharacterKahina)[0]) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 1;
+ KahinaCall(&LogicManager::CONS_Kahina_FindFirebird, 0, 0, 0, 0);
}
+
+ break;
+ case 134611040:
+ if (_gameEvents[kEventConcertLeaveWithBriefcase])
+ CONS_Kahina_SeekCath(0, 0, 0, 0);
+
+ break;
+ case 137503360:
+ CONS_Kahina_Finished(0, 0, 0, 0);
+ break;
+ case 237555748:
+ getCharacterCurrentParams(kCharacterKahina)[0] = 1;
+ break;
+
+ default:
+ break;
}
}
@@ -1230,6 +1592,7 @@ void LogicManager::HAND_Kahina_Finished(HAND_PARAMS) {
KahinaCall(&LogicManager::CONS_Kahina_SearchTatiana, 0, 0, 0, 0);
}
}
+
break;
case 12:
getCharacter(kCharacterKahina).characterPosition.car = kCarKronos;
@@ -1240,9 +1603,10 @@ void LogicManager::HAND_Kahina_Finished(HAND_PARAMS) {
if (getCharacter(kCharacterCath).characterPosition.car > kCarGreenSleeping || getCharacter(kCharacterCath).characterPosition.car == kCarGreenSleeping && getCharacter(kCharacterCath).characterPosition.position > 2740) {
getCharacterCurrentParams(kCharacterKahina)[0] = 1;
}
+
break;
default:
- return;
+ break;
}
}
@@ -1257,7 +1621,8 @@ void LogicManager::CONS_Kahina_FindFirebird(CONS_PARAMS) {
}
void LogicManager::HAND_Kahina_FindFirebird(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
playDialog(0, "LIB014", getVolume(kCharacterKahina), 0);
playDialog(0, "LIB015", getVolume(kCharacterKahina), 15);
endGraphics(kCharacterKahina);
@@ -1265,13 +1630,18 @@ void LogicManager::HAND_Kahina_FindFirebird(HAND_PARAMS) {
getCharacter(kCharacterKahina).characterPosition.position = 540;
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 1;
KahinaCall(&LogicManager::CONS_Kahina_DoWalk, 4, 4070, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8]) {
case 1:
- if (inSuite(kCharacterCath, kCarRedSleeping, 4455) || cathOutRebeccaWindow())
- goto LABEL_12;
- getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 2;
- KahinaCall(&LogicManager::CONS_Kahina_DoCorrOtis, "616Cf", 37, 0, 0);
+ if (inSuite(kCharacterCath, kCarRedSleeping, 4455) || cathOutRebeccaWindow()) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 5;
+ KahinaCall(&LogicManager::CONS_Kahina_DoWalk, 4, 9460, 0, 0);
+ } else {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 2;
+ KahinaCall(&LogicManager::CONS_Kahina_DoCorrOtis, "616Cf", 37, 0, 0);
+ }
+
break;
case 2:
getCharacter(kCharacterKahina).characterPosition.location = 1;
@@ -1290,7 +1660,6 @@ void LogicManager::HAND_Kahina_FindFirebird(HAND_PARAMS) {
break;
case 4:
getCharacter(kCharacterKahina).characterPosition.location = 0;
- LABEL_12:
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 5;
KahinaCall(&LogicManager::CONS_Kahina_DoWalk, 4, 9460, 0, 0);
break;
@@ -1311,8 +1680,12 @@ void LogicManager::HAND_Kahina_FindFirebird(HAND_PARAMS) {
fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1327,69 +1700,80 @@ void LogicManager::CONS_Kahina_SeekCath(CONS_PARAMS) {
}
void LogicManager::HAND_Kahina_SeekCath(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- if (getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] != 1) {
- if (getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] == 2) {
- if (getCharacter(kCharacterCath).characterPosition.position >= getCharacter(kCharacterKahina).characterPosition.position) {
- playNIS((kEventKahinaGunBlue - (getCharacter(kCharacterKahina).characterPosition.car == kCarGreenSleeping)));
- } else {
- playNIS(kEventKahinaGun);
- }
- walk(kCharacterKahina, kCarKronos, 9270);
- bumpCathRx(getCharacter(kCharacterKahina).characterPosition.car, getCharacter(kCharacterKahina).characterPosition.position + 750);
- send(kCharacterKahina, kCharacterKronos, 235599361, 0);
- playDialog(kCharacterKahina, "MUS016", 16, 0);
- _gameProgress[kProgressField44] = 1;
- getCharacterCurrentParams(kCharacterKahina)[0] = 1;
- getCharacterCurrentParams(kCharacterKahina)[1] = 2;
- getCharacterCurrentParams(kCharacterKahina)[2] = 9270;
- }
- return;
- }
- if (!getCharacterParams(kCharacterKahina, 8)[1]) {
- if (getCharacterParams(kCharacterKahina, 8)[0]) {
- getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 2;
- KahinaCall(&LogicManager::CONS_Kahina_SaveGame, 2, kEventKahinaGunYellow, 0, 0);
- return;
- }
- goto LABEL_24;
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterKahina)[0]) {
+ if (walk(kCharacterKahina, getCharacterCurrentParams(kCharacterKahina)[1], getCharacterCurrentParams(kCharacterKahina)[2])) {
+ endGraphics(kCharacterKahina);
+ getCharacterCurrentParams(kCharacterKahina)[0] = 0;
}
- endGraphics(kCharacterKahina);
- if (whoRunningDialog(kCharacterKahina))
- fadeDialog(kCharacterKahina);
+ }
+
+ break;
+ case 2:
+ if (checkLoc(kCharacterCath, kCarKronos)) {
+ send(kCharacterKahina, kCharacterKronos, 9, 0);
} else {
- if (msg->action != 137503360)
- return;
- endGraphics(kCharacterKahina);
- if (whoRunningDialog(kCharacterKahina))
- fadeDialog(kCharacterKahina);
+ CONS_Kahina_KillCathAnywhere(0, 0, 0, 0);
}
- _gameProgress[kProgressField44] = 0;
- CONS_Kahina_Finished(0, 0, 0, 0);
- return;
- }
- if (msg->action == 12) {
+
+ break;
+ case 12:
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 1;
KahinaCall(&LogicManager::CONS_Kahina_LookingForCath, 2241000, 0, 0, 0);
- return;
- }
- if (msg->action) {
- if (msg->action != 2)
- return;
- if (checkLoc(kCharacterCath, kCarKronos)) {
- send(kCharacterKahina, kCharacterKronos, 9, 0);
- return;
+ break;
+ case 18:
+ if (getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] != 1) {
+ if (getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] == 2) {
+ if (getCharacter(kCharacterCath).characterPosition.position >= getCharacter(kCharacterKahina).characterPosition.position) {
+ playNIS((kEventKahinaGunBlue - (getCharacter(kCharacterKahina).characterPosition.car == kCarGreenSleeping)));
+ } else {
+ playNIS(kEventKahinaGun);
+ }
+
+ walk(kCharacterKahina, kCarKronos, 9270);
+ bumpCathRx(getCharacter(kCharacterKahina).characterPosition.car, getCharacter(kCharacterKahina).characterPosition.position + 750);
+ send(kCharacterKahina, kCharacterKronos, 235599361, 0);
+ playDialog(kCharacterKahina, "MUS016", 16, 0);
+ _gameProgress[kProgressField44] = 1;
+ getCharacterCurrentParams(kCharacterKahina)[0] = 1;
+ getCharacterCurrentParams(kCharacterKahina)[1] = 2;
+ getCharacterCurrentParams(kCharacterKahina)[2] = 9270;
+ }
+
+ break;
}
- LABEL_24:
- CONS_Kahina_KillCathAnywhere(0, 0, 0, 0);
- return;
- }
- if (getCharacterCurrentParams(kCharacterKahina)[0]) {
- if (walk(kCharacterKahina, getCharacterCurrentParams(kCharacterKahina)[1], getCharacterCurrentParams(kCharacterKahina)[2])) {
- endGraphics(kCharacterKahina);
- getCharacterCurrentParams(kCharacterKahina)[0] = 0;
+
+ if (!getCharacterParams(kCharacterKahina, 8)[1]) {
+ if (getCharacterParams(kCharacterKahina, 8)[0]) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 2;
+ KahinaCall(&LogicManager::CONS_Kahina_SaveGame, 2, kEventKahinaGunYellow, 0, 0);
+ } else {
+ CONS_Kahina_KillCathAnywhere(0, 0, 0, 0);
+ }
+
+ break;
}
+
+ endGraphics(kCharacterKahina);
+
+ if (whoRunningDialog(kCharacterKahina))
+ fadeDialog(kCharacterKahina);
+
+ _gameProgress[kProgressField44] = 0;
+ CONS_Kahina_Finished(0, 0, 0, 0);
+ break;
+ case 137503360:
+ endGraphics(kCharacterKahina);
+
+ if (whoRunningDialog(kCharacterKahina))
+ fadeDialog(kCharacterKahina);
+
+ _gameProgress[kProgressField44] = 0;
+ CONS_Kahina_Finished(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1404,36 +1788,40 @@ void LogicManager::CONS_Kahina_SearchCath(CONS_PARAMS) {
}
void LogicManager::HAND_Kahina_SearchCath(HAND_PARAMS) {
- if (msg->action == 0) {
- if (getCharacterCurrentParams(kCharacterKahina)[0] == 0x7FFFFFFF || !_gameTime)
- return;
- if (_gameTime <= 2263500) {
- if (!cathInCorridor(kCarGreenSleeping) || !getCharacterCurrentParams(kCharacterKahina)[0]) {
- getCharacterCurrentParams(kCharacterKahina)[0] = _gameTime;
- if (!_gameTime)
- goto LABEL_13;
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterKahina)[0] != 0x7FFFFFFF && _gameTime) {
+ if (_gameTime <= 2263500) {
+ if (!cathInCorridor(kCarGreenSleeping) || !getCharacterCurrentParams(kCharacterKahina)[0]) {
+ getCharacterCurrentParams(kCharacterKahina)[0] = _gameTime;
+ if (!_gameTime) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 12;
+ KahinaCall(&LogicManager::CONS_Kahina_DoCorrOtis, "616Ba", 1, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterKahina)[0] >= _gameTime)
+ break;
}
- if (getCharacterCurrentParams(kCharacterKahina)[0] >= _gameTime)
- return;
+
+ getCharacterCurrentParams(kCharacterKahina)[0] = 0x7FFFFFFF;
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 12;
+ KahinaCall(&LogicManager::CONS_Kahina_DoCorrOtis, "616Ba", 1, 0, 0);
}
- getCharacterCurrentParams(kCharacterKahina)[0] = 0x7FFFFFFF;
- LABEL_13:
- getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 12;
- KahinaCall(&LogicManager::CONS_Kahina_DoCorrOtis, "616Ba", 1, 0, 0);
- return;
- }
- if (msg->action == 12) {
+
+ break;
+ case 12:
if (!_gameEvents[kEventAnnaBaggageArgument]) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 1;
KahinaCall(&LogicManager::CONS_Kahina_DoWalk1033, 3, 8200, 0, 0);
- return;
+ break;
}
if (_gameInventory[kItemFirebird].location == 3) {
_gameProgress[kProgressField7C] = 1;
} else {
if (_gameInventory[kItemFirebird].location != 7) {
- LABEL_20:
dropItem(kItemBriefcase, 2);
_gameProgress[kProgressField78] = 1;
getCharacterParams(kCharacterKahina, 8)[2] = 0;
@@ -1441,113 +1829,153 @@ void LogicManager::HAND_Kahina_SearchCath(HAND_PARAMS) {
getCharacter(kCharacterKahina).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
- return;
+ break;
}
+
_gameProgress[kProgressField80] = 1;
}
+
takeItem(kItemFirebird);
_gameInventory[kItemFirebird].location = 5;
send(kCharacterKahina, kCharacterKronos, 138085344, 0);
- goto LABEL_20;
- }
- if (msg->action != 18)
- return;
-
- switch (getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8]) {
- case 1:
- if (!cathInCorridor(kCarGreenSleeping))
- goto LABEL_29;
- getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 2;
- KahinaCall(&LogicManager::CONS_Kahina_DoWalk1033, 3, 9460, 0, 0);
- return;
- case 2:
- getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 3;
- KahinaCall(&LogicManager::CONS_Kahina_DoWait, 1800, 0, 0, 0);
- return;
- case 3:
- getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 4;
- KahinaCall(&LogicManager::CONS_Kahina_DoWalk1033, 3, 8200, 0, 0);
- return;
- case 4:
- if (cathInCorridor(kCarGreenSleeping)) {
- getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 5;
- KahinaCall(&LogicManager::CONS_Kahina_DoWalk1033, 2, 9270, 0, 0);
- } else {
- LABEL_29:
- if (inSuite(kCharacterCath, kCarGreenSleeping, 7850) || cathOutHisWindow()) {
- getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 6;
- KahinaCall(&LogicManager::CONS_Kahina_DoDialog, "LIB013", 0, 0, 0);
- } else {
- getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 8;
- KahinaCall(&LogicManager::CONS_Kahina_DoCorrOtis, "616Aa", 1, 0, 0);
- }
- }
- return;
- case 5:
- case 7:
- case 11:
- case 13:
- endGraphics(kCharacterKahina);
+ dropItem(kItemBriefcase, 2);
+ _gameProgress[kProgressField78] = 1;
+ getCharacterParams(kCharacterKahina, 8)[2] = 0;
getCharacter(kCharacterKahina).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
- return;
- case 6:
- getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 7;
- KahinaCall(&LogicManager::CONS_Kahina_DoWalk1033, 2, 9270, 0, 0);
- return;
- case 8:
- getCharacter(kCharacterKahina).characterPosition.location = 1;
- endGraphics(kCharacterKahina);
- setDoor(1, kCharacterCath, 0, 0, 0);
- setDoor(17, kCharacterCath, 0, 0, 0);
- getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 9;
- KahinaCall(&LogicManager::CONS_Kahina_DoWait, 900, 0, 0, 0);
- return;
- case 9:
- setDoor(1, kCharacterCath, 0, 10, 9);
- setDoor(17, kCharacterCath, 0, 10, 9);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8]) {
+ case 1:
+ if (!cathInCorridor(kCarGreenSleeping)) {
+ if (inSuite(kCharacterCath, kCarGreenSleeping, 7850) || cathOutHisWindow()) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 6;
+ KahinaCall(&LogicManager::CONS_Kahina_DoDialog, "LIB013", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 8;
+ KahinaCall(&LogicManager::CONS_Kahina_DoCorrOtis, "616Aa", 1, 0, 0);
+ }
+ } else {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 2;
+ KahinaCall(&LogicManager::CONS_Kahina_DoWalk1033, 3, 9460, 0, 0);
+ }
- if (_gameInventory[kItemFirebird].location == 3) {
- _gameProgress[kProgressField7C] = 1;
- goto LABEL_41;
- }
- if (_gameInventory[kItemFirebird].location == 7) {
- _gameProgress[kProgressField80] = 1;
- LABEL_41:
- takeItem(kItemFirebird);
- _gameInventory[kItemFirebird].location = 5;
- send(kCharacterKahina, kCharacterKronos, 138085344, 0);
- dropItem(kItemBriefcase, 2);
- _gameProgress[kProgressFieldC0] = _gameTime;
- _gameProgress[kProgressField78] = 1;
- goto LABEL_42;
- }
- if (!getCharacterParams(kCharacterKahina, 8)[2])
- goto LABEL_43;
- dropItem(kItemBriefcase, 2);
- _gameProgress[kProgressField78] = 1;
- LABEL_42:
- getCharacterParams(kCharacterKahina, 8)[2] = 0;
- LABEL_43:
- if (_gameInventory[kItemFirebird].location != 18) {
- getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 10;
- KahinaCall(&LogicManager::CONS_Kahina_DoCorrOtis, "616Ba", 1, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 3;
+ KahinaCall(&LogicManager::CONS_Kahina_DoWait, 1800, 0, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 4;
+ KahinaCall(&LogicManager::CONS_Kahina_DoWalk1033, 3, 8200, 0, 0);
+ break;
+ case 4:
+ if (cathInCorridor(kCarGreenSleeping)) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 5;
+ KahinaCall(&LogicManager::CONS_Kahina_DoWalk1033, 2, 9270, 0, 0);
+ } else {
+ if (inSuite(kCharacterCath, kCarGreenSleeping, 7850) || cathOutHisWindow()) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 6;
+ KahinaCall(&LogicManager::CONS_Kahina_DoDialog, "LIB013", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 8;
+ KahinaCall(&LogicManager::CONS_Kahina_DoCorrOtis, "616Aa", 1, 0, 0);
+ }
+ }
+
+ break;
+ case 5:
+ case 7:
+ case 11:
+ case 13:
+ endGraphics(kCharacterKahina);
+
+ getCharacter(kCharacterKahina).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
+ fedEx(kCharacterKahina, kCharacterKahina, 18, 0);
+ break;
+ case 6:
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 7;
+ KahinaCall(&LogicManager::CONS_Kahina_DoWalk1033, 2, 9270, 0, 0);
+ break;
+ case 8:
+ getCharacter(kCharacterKahina).characterPosition.location = 1;
+ endGraphics(kCharacterKahina);
+ setDoor(1, kCharacterCath, 0, 0, 0);
+ setDoor(17, kCharacterCath, 0, 0, 0);
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 9;
+ KahinaCall(&LogicManager::CONS_Kahina_DoWait, 900, 0, 0, 0);
+ break;
+ case 9:
+ setDoor(1, kCharacterCath, 0, 10, 9);
+ setDoor(17, kCharacterCath, 0, 10, 9);
+
+ if (_gameInventory[kItemFirebird].location == 3) {
+ _gameProgress[kProgressField7C] = 1;
+ takeItem(kItemFirebird);
+ _gameInventory[kItemFirebird].location = 5;
+ send(kCharacterKahina, kCharacterKronos, 138085344, 0);
+ dropItem(kItemBriefcase, 2);
+ _gameProgress[kProgressFieldC0] = _gameTime;
+ _gameProgress[kProgressField78] = 1;
+ getCharacterParams(kCharacterKahina, 8)[2] = 0;
+
+ if (_gameInventory[kItemFirebird].location != 18) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 10;
+ KahinaCall(&LogicManager::CONS_Kahina_DoCorrOtis, "616Ba", 1, 0, 0);
+ }
+
+ break;
+ }
+
+ if (_gameInventory[kItemFirebird].location == 7) {
+ _gameProgress[kProgressField80] = 1;
+ takeItem(kItemFirebird);
+ _gameInventory[kItemFirebird].location = 5;
+ send(kCharacterKahina, kCharacterKronos, 138085344, 0);
+ dropItem(kItemBriefcase, 2);
+ _gameProgress[kProgressFieldC0] = _gameTime;
+ _gameProgress[kProgressField78] = 1;
+ getCharacterParams(kCharacterKahina, 8)[2] = 0;
+
+ if (_gameInventory[kItemFirebird].location != 18) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 10;
+ KahinaCall(&LogicManager::CONS_Kahina_DoCorrOtis, "616Ba", 1, 0, 0);
+ }
+
+ break;
+ }
+
+ if (getCharacterParams(kCharacterKahina, 8)[2]) {
+ dropItem(kItemBriefcase, 2);
+ _gameProgress[kProgressField78] = 1;
+ getCharacterParams(kCharacterKahina, 8)[2] = 0;
+ }
+
+ if (_gameInventory[kItemFirebird].location != 18) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 10;
+ KahinaCall(&LogicManager::CONS_Kahina_DoCorrOtis, "616Ba", 1, 0, 0);
+ }
+ break;
+ case 10:
+ getCharacter(kCharacterKahina).characterPosition.location = 0;
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 11;
+ KahinaCall(&LogicManager::CONS_Kahina_DoWalk, 2, 9270, 0, 0);
+ break;
+ case 12:
+ getCharacter(kCharacterKahina).characterPosition.location = 0;
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 13;
+ KahinaCall(&LogicManager::CONS_Kahina_DoWalk, 2, 9270, 0, 0);
+ break;
+ default:
+ break;
}
- return;
- case 10:
- getCharacter(kCharacterKahina).characterPosition.location = 0;
- getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 11;
- KahinaCall(&LogicManager::CONS_Kahina_DoWalk, 2, 9270, 0, 0);
- return;
- case 12:
- getCharacter(kCharacterKahina).characterPosition.location = 0;
- getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 13;
- KahinaCall(&LogicManager::CONS_Kahina_DoWalk, 2, 9270, 0, 0);
- return;
+
+ break;
default:
- return;
+ break;
}
}
@@ -1562,7 +1990,8 @@ void LogicManager::CONS_Kahina_SearchTatiana(CONS_PARAMS) {
}
void LogicManager::HAND_Kahina_SearchTatiana(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (_gameEvents[kEventAnnaBaggageArgument]) {
takeItem(kItemFirebird);
_gameInventory[kItemFirebird].location = 5;
@@ -1577,13 +2006,19 @@ void LogicManager::HAND_Kahina_SearchTatiana(HAND_PARAMS) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 1;
KahinaCall(&LogicManager::CONS_Kahina_DoWalk1033, 4, 8200, 0, 0);
}
- } else if (msg->action == 18) {
+
+ break;
+ case 18:
switch (getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8]) {
case 1:
- if (!inSuite(kCharacterCath, kCarRedSleeping, 7850))
- goto LABEL_14;
- getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 2;
- KahinaCall(&LogicManager::CONS_Kahina_DoWalk1033, 4, 9460, 0, 0);
+ if (!inSuite(kCharacterCath, kCarRedSleeping, 7850)) {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 6;
+ KahinaCall(&LogicManager::CONS_Kahina_DoCorrOtis, "616Aa", 32, 0, 0);
+ } else {
+ getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 2;
+ KahinaCall(&LogicManager::CONS_Kahina_DoWalk1033, 4, 9460, 0, 0);
+ }
+
break;
case 2:
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 3;
@@ -1598,10 +2033,10 @@ void LogicManager::HAND_Kahina_SearchTatiana(HAND_PARAMS) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 5;
KahinaCall(&LogicManager::CONS_Kahina_DoWalk1033, 2, 9270, 0, 0);
} else {
- LABEL_14:
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 6;
KahinaCall(&LogicManager::CONS_Kahina_DoCorrOtis, "616Aa", 32, 0, 0);
}
+
break;
case 5:
case 9:
@@ -1640,8 +2075,12 @@ void LogicManager::HAND_Kahina_SearchTatiana(HAND_PARAMS) {
KahinaCall(&LogicManager::CONS_Kahina_DoWalk, 2, 9270, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1656,14 +2095,8 @@ void LogicManager::CONS_Kahina_KillCathAnywhere(CONS_PARAMS) {
}
void LogicManager::HAND_Kahina_KillCathAnywhere(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- _gameTimeTicksDelta = 0;
- } else if (msg->action == 18 && getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] == 1) {
- playNIS(getCharacterCurrentParams(kCharacterKahina)[0]);
- endGame(0, 1, 0, 1);
- }
- } else {
+ switch (msg->action) {
+ case 0:
if (onLowPlatform(kCharacterCath)) {
getCharacterCurrentParams(kCharacterKahina)[0] = kEventKahinaPunchCar;
} else if (cathInCorridor(kCarGreenSleeping)) {
@@ -1681,10 +2114,25 @@ void LogicManager::HAND_Kahina_KillCathAnywhere(HAND_PARAMS) {
} else if (checkLoc(kCharacterCath, kCarBaggage)) {
getCharacterCurrentParams(kCharacterKahina)[0] = kEventKahinaPunchBaggageCar;
}
+
if (getCharacterCurrentParams(kCharacterKahina)[0]) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 1;
KahinaCall(&LogicManager::CONS_Kahina_SaveGame, 2, kEventKahinaPunchBaggageCarEntrance, 0, 0);
}
+
+ break;
+ case 12:
+ _gameTimeTicksDelta = 0;
+ break;
+ case 18:
+ if (getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] == 1) {
+ playNIS(getCharacterCurrentParams(kCharacterKahina)[0]);
+ endGame(0, 1, 0, true);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -1699,8 +2147,13 @@ void LogicManager::CONS_Kahina_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Kahina_StartPart4(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterKahina);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Kahina_StartPart5(CONS_PARAMS) {
@@ -1714,8 +2167,13 @@ void LogicManager::CONS_Kahina_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Kahina_StartPart5(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterKahina);
+ break;
+ default:
+ break;
+ }
}
void (LogicManager::*LogicManager::_functionsKahina[])(HAND_PARAMS) = {
Commit: b80ecda5e3b9d5023022dd97b7d535ef83df18a4
https://github.com/scummvm/scummvm/commit/b80ecda5e3b9d5023022dd97b7d535ef83df18a4
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Waiter1 logic
Changed paths:
engines/lastexpress/characters/waiter1.cpp
diff --git a/engines/lastexpress/characters/waiter1.cpp b/engines/lastexpress/characters/waiter1.cpp
index d0e0af633b6..089a1eaf116 100644
--- a/engines/lastexpress/characters/waiter1.cpp
+++ b/engines/lastexpress/characters/waiter1.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_Waiter1(int chapter) {
CONS_Waiter1_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -90,18 +90,20 @@ void LogicManager::HAND_Waiter1_DoJoinedSeqOtis(HAND_PARAMS) {
playChrExcuseMe(kCharacterWaiter1, kCharacterCath, 0);
getCharacterCurrentParams(kCharacterWaiter1)[9] = 1;
}
+
break;
case 10:
if (!getCharacterCurrentParams(kCharacterWaiter1)[8]) {
fedEx(kCharacterWaiter1, getCharacterCurrentParams(kCharacterWaiter1)[3], getCharacterCurrentParams(kCharacterWaiter1)[4], (char *)&getCharacterCurrentParams(kCharacterWaiter1)[5]);
getCharacterCurrentParams(kCharacterWaiter1)[8] = 1;
}
+
break;
case 12:
startSeqOtis(kCharacterWaiter1, (char *)&getCharacterCurrentParams(kCharacterWaiter1)[0]);
break;
default:
- return;
+ break;
}
}
@@ -118,10 +120,11 @@ void LogicManager::CONS_Waiter1_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_DoWait(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterWaiter1)[1] || (getCharacterCurrentParams(kCharacterWaiter1)[1] = _gameTime + getCharacterCurrentParams(kCharacterWaiter1)[0], _gameTime + getCharacterCurrentParams(kCharacterWaiter1)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterWaiter1)[1] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterWaiter1)[1] = 0x7FFFFFFF;
}
@@ -129,6 +132,9 @@ void LogicManager::HAND_Waiter1_DoWait(HAND_PARAMS) {
getCharacter(kCharacterWaiter1).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -156,10 +162,13 @@ void LogicManager::HAND_Waiter1_DoSeqOtis(HAND_PARAMS) {
playChrExcuseMe(kCharacterWaiter1, kCharacterCath, 0);
getCharacterCurrentParams(kCharacterWaiter1)[3] = 1;
}
+
break;
case 12:
startSeqOtis(kCharacterWaiter1, (char *)&getCharacterCurrentParams(kCharacterWaiter1)[0]);
break;
+ default:
+ break;
}
}
@@ -192,11 +201,14 @@ void LogicManager::HAND_Waiter1_DoBlockSeqOtis(HAND_PARAMS) {
playChrExcuseMe(kCharacterWaiter1, kCharacterCath, 0);
getCharacterCurrentParams(kCharacterWaiter1)[5] = 1;
}
+
break;
case 12:
startSeqOtis(kCharacterWaiter1, (char *)&getCharacterCurrentParams(kCharacterWaiter1)[0]);
blockView(kCharacterWaiter1, getCharacterCurrentParams(kCharacterWaiter1)[3], getCharacterCurrentParams(kCharacterWaiter1)[4]);
break;
+ default:
+ break;
}
}
@@ -211,21 +223,29 @@ void LogicManager::CONS_Waiter1_FinishSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_FinishSeqOtis(HAND_PARAMS) {
- if (msg->action == 0) {
- if (getCharacter(kCharacterWaiter1).direction == 4)
- return;
- goto LABEL_6;
- }
- if (msg->action == 3) {
- LABEL_6:
+ switch (msg->action) {
+ case 0:
+ if (getCharacter(kCharacterWaiter1).direction != 4) {
+ getCharacter(kCharacterWaiter1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
+ fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
+ }
+
+ break;
+ case 3:
getCharacter(kCharacterWaiter1).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
- return;
- }
- if (msg->action == 5 && !getCharacterCurrentParams(kCharacterWaiter1)[0]) {
- playChrExcuseMe(kCharacterWaiter1, kCharacterCath, 0);
- getCharacterCurrentParams(kCharacterWaiter1)[0] = 1;
+ break;
+ case 5:
+ if (!getCharacterCurrentParams(kCharacterWaiter1)[0]) {
+ playChrExcuseMe(kCharacterWaiter1, kCharacterCath, 0);
+ getCharacterCurrentParams(kCharacterWaiter1)[0] = 1;
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -240,12 +260,17 @@ void LogicManager::CONS_Waiter1_DoDialog(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_DoDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterWaiter1).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterWaiter1, (char *)&getCharacterCurrentParams(kCharacterWaiter1)[0], -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -280,11 +305,14 @@ void LogicManager::HAND_Waiter1_RebeccaFeedUs(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
}
+
break;
case 136702400:
getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 2;
Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "913", 0, 0, 0);
break;
+ default:
+ break;
}
}
@@ -299,12 +327,14 @@ void LogicManager::CONS_Waiter1_RebeccaClearOurTable(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_RebeccaClearOurTable(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter1).characterPosition.position = 5800;
getCharacter(kCharacterWaiter1).characterPosition.location = 0;
getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "911", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8]) {
case 1:
send(kCharacterWaiter1, kCharacterTableD, 136455232, 0);
@@ -324,7 +354,13 @@ void LogicManager::HAND_Waiter1_RebeccaClearOurTable(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -339,12 +375,14 @@ void LogicManager::CONS_Waiter1_AbbotCheckMe(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_AbbotCheckMe(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter1).characterPosition.position = 5800;
getCharacter(kCharacterWaiter1).characterPosition.location = 0;
getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "915", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8]) {
case 1:
send(kCharacterWaiter1, kCharacterAbbot, 122358304, 0);
@@ -373,7 +411,13 @@ void LogicManager::HAND_Waiter1_AbbotCheckMe(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -388,10 +432,12 @@ void LogicManager::CONS_Waiter1_AbbotClearTable(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_AbbotClearTable(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "916", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8]) {
case 1:
send(kCharacterWaiter1, kCharacterTableE, 136455232, 0);
@@ -411,7 +457,13 @@ void LogicManager::HAND_Waiter1_AbbotClearTable(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -426,30 +478,33 @@ void LogicManager::CONS_Waiter1_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_Birth(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- autoMessage(kCharacterWaiter1, 270410280, 0);
- autoMessage(kCharacterWaiter1, 304061224, 1);
- autoMessage(kCharacterWaiter1, 252568704, 10);
- autoMessage(kCharacterWaiter1, 286534136, 11);
- autoMessage(kCharacterWaiter1, 218983616, 12);
- autoMessage(kCharacterWaiter1, 218586752, 13);
- autoMessage(kCharacterWaiter1, 207330561, 14);
- autoMessage(kCharacterWaiter1, 286403504, 16);
- autoMessage(kCharacterWaiter1, 218128129, 17);
- autoMessage(kCharacterWaiter1, 270068760, 18);
- autoMessage(kCharacterWaiter1, 223712416, 2);
- autoMessage(kCharacterWaiter1, 237485916, 5);
- autoMessage(kCharacterWaiter1, 188893625, 8);
- autoMessage(kCharacterWaiter1, 204704037, 6);
- autoMessage(kCharacterWaiter1, 292758554, 7);
- autoMessage(kCharacterWaiter1, 337548856, 9);
- getCharacter(kCharacterWaiter1).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterWaiter1).characterPosition.location = 0;
- getCharacter(kCharacterWaiter1).characterPosition.position = 5900;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Waiter1_ServingDinner(0, 0, 0, 0);
+ break;
+ case 12:
+ autoMessage(kCharacterWaiter1, 270410280, 0);
+ autoMessage(kCharacterWaiter1, 304061224, 1);
+ autoMessage(kCharacterWaiter1, 252568704, 10);
+ autoMessage(kCharacterWaiter1, 286534136, 11);
+ autoMessage(kCharacterWaiter1, 218983616, 12);
+ autoMessage(kCharacterWaiter1, 218586752, 13);
+ autoMessage(kCharacterWaiter1, 207330561, 14);
+ autoMessage(kCharacterWaiter1, 286403504, 16);
+ autoMessage(kCharacterWaiter1, 218128129, 17);
+ autoMessage(kCharacterWaiter1, 270068760, 18);
+ autoMessage(kCharacterWaiter1, 223712416, 2);
+ autoMessage(kCharacterWaiter1, 237485916, 5);
+ autoMessage(kCharacterWaiter1, 188893625, 8);
+ autoMessage(kCharacterWaiter1, 204704037, 6);
+ autoMessage(kCharacterWaiter1, 292758554, 7);
+ autoMessage(kCharacterWaiter1, 337548856, 9);
+ getCharacter(kCharacterWaiter1).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterWaiter1).characterPosition.location = 0;
+ getCharacter(kCharacterWaiter1).characterPosition.position = 5900;
+ break;
+ default:
+ break;
}
}
@@ -464,19 +519,27 @@ void LogicManager::CONS_Waiter1_AnnaOrder(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_AnnaOrder(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter1).characterPosition.position = 5800;
getCharacter(kCharacterWaiter1).characterPosition.location = 0;
getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "907", 0, 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] == 1) {
- endGraphics(kCharacterWaiter1);
- send(kCharacterWaiter1, kCharacterAnna, 268773672, 0);
- getCharacterParams(kCharacterWaiter1, 8)[0] = 0;
+ break;
+ case 18:
+ if (getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] == 1) {
+ endGraphics(kCharacterWaiter1);
+ send(kCharacterWaiter1, kCharacterAnna, 268773672, 0);
+ getCharacterParams(kCharacterWaiter1, 8)[0] = 0;
- getCharacter(kCharacterWaiter1).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
- fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
+ getCharacter(kCharacterWaiter1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
+ fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -491,19 +554,27 @@ void LogicManager::CONS_Waiter1_AugustOrder(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_AugustOrder(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter1).characterPosition.position = 5800;
getCharacter(kCharacterWaiter1).characterPosition.location = 0;
getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "911", 0, 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] == 1) {
- startCycOtis(kCharacterWaiter1, "010F");
- send(kCharacterWaiter1, kCharacterAugust, 268773672, 0);
- getCharacterParams(kCharacterWaiter1, 8)[1] = 0;
+ break;
+ case 18:
+ if (getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] == 1) {
+ startCycOtis(kCharacterWaiter1, "010F");
+ send(kCharacterWaiter1, kCharacterAugust, 268773672, 0);
+ getCharacterParams(kCharacterWaiter1, 8)[1] = 0;
- getCharacter(kCharacterWaiter1).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
- fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
+ getCharacter(kCharacterWaiter1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
+ fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -518,19 +589,27 @@ void LogicManager::CONS_Waiter1_ServeAnna(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_ServeAnna(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter1).characterPosition.position = 5800;
getCharacter(kCharacterWaiter1).characterPosition.location = 0;
getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "908", 0, 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] == 1) {
- endGraphics(kCharacterWaiter1);
- send(kCharacterWaiter1, kCharacterAnna, 170016384, 0);
- getCharacterParams(kCharacterWaiter1, 8)[3] = 0;
+ break;
+ case 18:
+ if (getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] == 1) {
+ endGraphics(kCharacterWaiter1);
+ send(kCharacterWaiter1, kCharacterAnna, 170016384, 0);
+ getCharacterParams(kCharacterWaiter1, 8)[3] = 0;
- getCharacter(kCharacterWaiter1).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
- fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
+ getCharacter(kCharacterWaiter1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
+ fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -545,19 +624,27 @@ void LogicManager::CONS_Waiter1_ServeAugust(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_ServeAugust(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter1).characterPosition.position = 5800;
getCharacter(kCharacterWaiter1).characterPosition.location = 0;
getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "912", 0, 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] == 1) {
- endGraphics(kCharacterWaiter1);
- send(kCharacterWaiter1, kCharacterAugust, 170016384, 0);
- getCharacterParams(kCharacterWaiter1, 8)[4] = 0;
+ break;
+ case 18:
+ if (getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] == 1) {
+ endGraphics(kCharacterWaiter1);
+ send(kCharacterWaiter1, kCharacterAugust, 170016384, 0);
+ getCharacterParams(kCharacterWaiter1, 8)[4] = 0;
- getCharacter(kCharacterWaiter1).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
- fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
+ getCharacter(kCharacterWaiter1).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
+ fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -572,12 +659,14 @@ void LogicManager::CONS_Waiter1_ClearAnna(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_ClearAnna(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter1).characterPosition.position = 5800;
getCharacter(kCharacterWaiter1).characterPosition.location = 0;
getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "907", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8]) {
case 1:
send(kCharacterWaiter1, kCharacterTableA, 136455232, 0);
@@ -597,7 +686,13 @@ void LogicManager::HAND_Waiter1_ClearAnna(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -612,12 +707,14 @@ void LogicManager::CONS_Waiter1_ClearTatiana(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_ClearTatiana(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter1).characterPosition.position = 5800;
getCharacter(kCharacterWaiter1).characterPosition.location = 0;
getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "915", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8]) {
case 1:
blockView(kCharacterWaiter1, kCarRestaurant, 67);
@@ -639,7 +736,13 @@ void LogicManager::HAND_Waiter1_ClearTatiana(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -654,12 +757,14 @@ void LogicManager::CONS_Waiter1_ClearAugust1(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_ClearAugust1(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter1).characterPosition.position = 5800;
getCharacter(kCharacterWaiter1).characterPosition.location = 0;
getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "911", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8]) {
case 1:
send(kCharacterWaiter1, kCharacterTableD, 136455232, 0);
@@ -679,7 +784,13 @@ void LogicManager::HAND_Waiter1_ClearAugust1(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -694,12 +805,14 @@ void LogicManager::CONS_Waiter1_ClearAugust2(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_ClearAugust2(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter1).characterPosition.position = 5800;
getCharacter(kCharacterWaiter1).characterPosition.location = 0;
getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "911", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8]) {
case 1:
send(kCharacterWaiter1, kCharacterTableD, 136455232, 0);
@@ -720,7 +833,13 @@ void LogicManager::HAND_Waiter1_ClearAugust2(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -735,87 +854,85 @@ void LogicManager::CONS_Waiter1_ServingDinner(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_ServingDinner(HAND_PARAMS) {
- if (msg->action > 18) {
- if (msg->action == 136702400) {
- if (msg->sender == 1) {
- getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 13;
- Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "909", 0, 0, 0);
- } else {
- getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 14;
- Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "913", 0, 0, 0);
- }
- } else if (msg->action == 203859488) {
- if (msg->sender == 1) {
- getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 11;
- Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "910", 0, 0, 0);
- } else {
- getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 12;
- Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "913", 0, 0, 0);
- }
- }
- } else {
- if (msg->action != 18) {
- if (msg->action)
- return;
- if (getCharacterCurrentParams(kCharacterWaiter1)[1]) {
- if (getCharacterCurrentParams(kCharacterWaiter1)[2] || (getCharacterCurrentParams(kCharacterWaiter1)[2] = _gameTime + 2700, _gameTime != -2700)) {
- if (getCharacterCurrentParams(kCharacterWaiter1)[2] >= _gameTime)
- goto LABEL_14;
+ switch (msg->action) {
+ case 0:
+ {
+ bool skip1 = false;
+
+ if (getCharacterCurrentParams(kCharacterWaiter1)[1]) {
+ if (getCharacterCurrentParams(kCharacterWaiter1)[2] || (getCharacterCurrentParams(kCharacterWaiter1)[2] = _gameTime + 2700, _gameTime != -2700)) {
+ if (getCharacterCurrentParams(kCharacterWaiter1)[2] >= _gameTime) {
+ skip1 = true;
+ }
+
+ if (!skip1) {
getCharacterCurrentParams(kCharacterWaiter1)[2] = 0x7FFFFFFF;
}
+ }
+
+ if (!skip1) {
getCharacterParams(kCharacterWaiter1, 8)[3] = 1;
getCharacterCurrentParams(kCharacterWaiter1)[1] = 0;
}
- LABEL_14:
- if (getCharacterCurrentParams(kCharacterWaiter1)[0]) {
- if (!getCharacterCurrentParams(kCharacterWaiter1)[3]) {
+ }
- getCharacterCurrentParams(kCharacterWaiter1)[3] = _gameTime + 4500;
- if (_gameTime == -4500)
- goto LABEL_19;
- }
- if (getCharacterCurrentParams(kCharacterWaiter1)[3] < _gameTime) {
- getCharacterCurrentParams(kCharacterWaiter1)[3] = 0x7FFFFFFF;
- LABEL_19:
+ bool skip2 = false;
+
+ if (getCharacterCurrentParams(kCharacterWaiter1)[0]) {
+ if (!getCharacterCurrentParams(kCharacterWaiter1)[3]) {
+
+ getCharacterCurrentParams(kCharacterWaiter1)[3] = _gameTime + 4500;
+ if (_gameTime == -4500) {
+ skip2 = true;
getCharacterParams(kCharacterWaiter1, 8)[4] = 1;
getCharacterCurrentParams(kCharacterWaiter1)[0] = 0;
}
}
- if (inKitchen(kCharacterWaiter1) && rcClear()) {
- if (getCharacterParams(kCharacterWaiter1, 8)[0]) {
- getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
- Waiter1Call(&LogicManager::CONS_Waiter1_AnnaOrder, 0, 0, 0, 0);
- } else if (getCharacterParams(kCharacterWaiter1, 8)[1]) {
- getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 2;
- Waiter1Call(&LogicManager::CONS_Waiter1_AugustOrder, 0, 0, 0, 0);
- } else if (getCharacterParams(kCharacterWaiter1, 8)[2]) {
- getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 3;
- Waiter1Call(&LogicManager::CONS_Waiter1_RebeccaFeedUs, 0, 0, 0, 0);
- } else if (getCharacterParams(kCharacterWaiter1, 8)[3]) {
- getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 4;
- Waiter1Call(&LogicManager::CONS_Waiter1_ServeAnna, 0, 0, 0, 0);
- } else if (getCharacterParams(kCharacterWaiter1, 8)[4]) {
- getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 5;
- Waiter1Call(&LogicManager::CONS_Waiter1_ServeAugust, 0, 0, 0, 0);
- } else if (getCharacterParams(kCharacterWaiter1, 8)[5]) {
- getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 6;
- Waiter1Call(&LogicManager::CONS_Waiter1_ClearAnna, 0, 0, 0, 0);
- } else if (getCharacterParams(kCharacterWaiter1, 8)[8]) {
- getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 7;
- Waiter1Call(&LogicManager::CONS_Waiter1_ClearTatiana, 0, 0, 0, 0);
- } else if (getCharacterParams(kCharacterWaiter1, 8)[6]) {
- getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 8;
- Waiter1Call(&LogicManager::CONS_Waiter1_ClearAugust1, 0, 0, 0, 0);
- } else if (getCharacterParams(kCharacterWaiter1, 8)[7]) {
- getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 9;
- Waiter1Call(&LogicManager::CONS_Waiter1_ClearAugust2, 0, 0, 0, 0);
- } else if (getCharacterParams(kCharacterWaiter1, 8)[9]) {
- getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 10;
- Waiter1Call(&LogicManager::CONS_Waiter1_RebeccaClearOurTable, 0, 0, 0, 0);
- }
+
+ if (!skip2 && getCharacterCurrentParams(kCharacterWaiter1)[3] < _gameTime) {
+ getCharacterCurrentParams(kCharacterWaiter1)[3] = 0x7FFFFFFF;
+ getCharacterParams(kCharacterWaiter1, 8)[4] = 1;
+ getCharacterCurrentParams(kCharacterWaiter1)[0] = 0;
+ }
+ }
+
+ if (inKitchen(kCharacterWaiter1) && rcClear()) {
+ if (getCharacterParams(kCharacterWaiter1, 8)[0]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
+ Waiter1Call(&LogicManager::CONS_Waiter1_AnnaOrder, 0, 0, 0, 0);
+ } else if (getCharacterParams(kCharacterWaiter1, 8)[1]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 2;
+ Waiter1Call(&LogicManager::CONS_Waiter1_AugustOrder, 0, 0, 0, 0);
+ } else if (getCharacterParams(kCharacterWaiter1, 8)[2]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 3;
+ Waiter1Call(&LogicManager::CONS_Waiter1_RebeccaFeedUs, 0, 0, 0, 0);
+ } else if (getCharacterParams(kCharacterWaiter1, 8)[3]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 4;
+ Waiter1Call(&LogicManager::CONS_Waiter1_ServeAnna, 0, 0, 0, 0);
+ } else if (getCharacterParams(kCharacterWaiter1, 8)[4]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 5;
+ Waiter1Call(&LogicManager::CONS_Waiter1_ServeAugust, 0, 0, 0, 0);
+ } else if (getCharacterParams(kCharacterWaiter1, 8)[5]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 6;
+ Waiter1Call(&LogicManager::CONS_Waiter1_ClearAnna, 0, 0, 0, 0);
+ } else if (getCharacterParams(kCharacterWaiter1, 8)[8]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 7;
+ Waiter1Call(&LogicManager::CONS_Waiter1_ClearTatiana, 0, 0, 0, 0);
+ } else if (getCharacterParams(kCharacterWaiter1, 8)[6]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 8;
+ Waiter1Call(&LogicManager::CONS_Waiter1_ClearAugust1, 0, 0, 0, 0);
+ } else if (getCharacterParams(kCharacterWaiter1, 8)[7]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 9;
+ Waiter1Call(&LogicManager::CONS_Waiter1_ClearAugust2, 0, 0, 0, 0);
+ } else if (getCharacterParams(kCharacterWaiter1, 8)[9]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 10;
+ Waiter1Call(&LogicManager::CONS_Waiter1_RebeccaClearOurTable, 0, 0, 0, 0);
}
- return;
}
+
+ break;
+ }
+ case 18:
switch (getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8]) {
case 10:
send(kCharacterWaiter1, kCharacterHeadWait, 352703104, 0);
@@ -837,8 +954,32 @@ void LogicManager::HAND_Waiter1_ServingDinner(HAND_PARAMS) {
getCharacter(kCharacterWaiter1).characterPosition.position = 5900;
break;
default:
- return;
+ break;
+ }
+
+ break;
+ case 136702400:
+ if (msg->sender == kCharacterAnna) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 13;
+ Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "909", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 14;
+ Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "913", 0, 0, 0);
+ }
+
+ break;
+ case 203859488:
+ if (msg->sender == kCharacterAnna) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 11;
+ Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "910", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 12;
+ Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "913", 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -853,10 +994,15 @@ void LogicManager::CONS_Waiter1_AfterDinner(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_AfterDinner(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter1).characterPosition.position = 5900;
- } else if (msg->action == 101632192) {
+ break;
+ case 101632192:
CONS_Waiter1_LockUp(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -871,11 +1017,15 @@ void LogicManager::CONS_Waiter1_LockUp(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_LockUp(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter1).characterPosition.car = kCarRestaurant;
getCharacter(kCharacterWaiter1).characterPosition.position = 5900;
getCharacter(kCharacterWaiter1).characterPosition.location = 0;
endGraphics(kCharacterWaiter1);
+ break;
+ default:
+ break;
}
}
@@ -890,19 +1040,22 @@ void LogicManager::CONS_Waiter1_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_StartPart2(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterWaiter1);
- getCharacter(kCharacterWaiter1).characterPosition.position = 5900;
- getCharacter(kCharacterWaiter1).characterPosition.location = 0;
- getCharacter(kCharacterWaiter1).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterWaiter1).inventoryItem = 0;
- getCharacter(kCharacterWaiter1).clothes = 1;
- getCharacterParams(kCharacterWaiter1, 8)[10] = 0;
- getCharacterParams(kCharacterWaiter1, 8)[11] = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Waiter1_InKitchen(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterWaiter1);
+ getCharacter(kCharacterWaiter1).characterPosition.position = 5900;
+ getCharacter(kCharacterWaiter1).characterPosition.location = 0;
+ getCharacter(kCharacterWaiter1).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterWaiter1).inventoryItem = 0;
+ getCharacter(kCharacterWaiter1).clothes = 1;
+ getCharacterParams(kCharacterWaiter1, 8)[10] = 0;
+ getCharacterParams(kCharacterWaiter1, 8)[11] = 0;
+ break;
+ default:
+ break;
}
}
@@ -917,21 +1070,30 @@ void LogicManager::CONS_Waiter1_InKitchen(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_InKitchen(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 18 && getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] == 1) {
- LABEL_9:
- if (getCharacterParams(kCharacterWaiter1, 8)[11]) {
+ switch (msg->action) {
+ case 0:
+ if (inKitchen(kCharacterWaiter1) && rcClear()) {
+ if (getCharacterParams(kCharacterWaiter1, 8)[10]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
+ Waiter1Call(&LogicManager::CONS_Waiter1_AugustComeHere2, 0, 0, 0, 0);
+ } else if (getCharacterParams(kCharacterWaiter1, 8)[11]) {
getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 2;
Waiter1Call(&LogicManager::CONS_Waiter1_AugustClearTable2, 0, 0, 0, 0);
}
}
- } else if (inKitchen(kCharacterWaiter1) && rcClear()) {
- if (getCharacterParams(kCharacterWaiter1, 8)[10]) {
- getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
- Waiter1Call(&LogicManager::CONS_Waiter1_AugustComeHere2, 0, 0, 0, 0);
- return;
+
+ break;
+ case 18:
+ if (getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] == 1) {
+ if (getCharacterParams(kCharacterWaiter1, 8)[11]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 2;
+ Waiter1Call(&LogicManager::CONS_Waiter1_AugustClearTable2, 0, 0, 0, 0);
+ }
}
- goto LABEL_9;
+
+ break;
+ default:
+ break;
}
}
@@ -966,11 +1128,14 @@ void LogicManager::HAND_Waiter1_AugustComeHere2(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
}
+
break;
case 219522616:
getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 2;
Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "959", 0, 0, 0);
break;
+ default:
+ break;
}
}
@@ -985,12 +1150,14 @@ void LogicManager::CONS_Waiter1_AugustClearTable2(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_AugustClearTable2(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter1).characterPosition.position = 5800;
getCharacter(kCharacterWaiter1).characterPosition.location = 0;
getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "957", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8]) {
case 1:
send(kCharacterWaiter1, kCharacterTableA, 136455232, 0);
@@ -1010,7 +1177,13 @@ void LogicManager::HAND_Waiter1_AugustClearTable2(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1025,23 +1198,26 @@ void LogicManager::CONS_Waiter1_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_StartPart3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterWaiter1);
- getCharacter(kCharacterWaiter1).characterPosition.position = 5900;
- getCharacter(kCharacterWaiter1).characterPosition.location = 0;
- getCharacter(kCharacterWaiter1).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterWaiter1).inventoryItem = 0;
- getCharacter(kCharacterWaiter1).clothes = 1;
- getCharacterParams(kCharacterWaiter1, 8)[12] = 0;
- getCharacterParams(kCharacterWaiter1, 8)[13] = 0;
- getCharacterParams(kCharacterWaiter1, 8)[18] = 0;
- getCharacterParams(kCharacterWaiter1, 8)[19] = 0;
- getCharacterParams(kCharacterWaiter1, 8)[2] = 0;
- getCharacterParams(kCharacterWaiter1, 8)[9] = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Waiter1_Serving3(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterWaiter1);
+ getCharacter(kCharacterWaiter1).characterPosition.position = 5900;
+ getCharacter(kCharacterWaiter1).characterPosition.location = 0;
+ getCharacter(kCharacterWaiter1).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterWaiter1).inventoryItem = 0;
+ getCharacter(kCharacterWaiter1).clothes = 1;
+ getCharacterParams(kCharacterWaiter1, 8)[12] = 0;
+ getCharacterParams(kCharacterWaiter1, 8)[13] = 0;
+ getCharacterParams(kCharacterWaiter1, 8)[18] = 0;
+ getCharacterParams(kCharacterWaiter1, 8)[19] = 0;
+ getCharacterParams(kCharacterWaiter1, 8)[2] = 0;
+ getCharacterParams(kCharacterWaiter1, 8)[9] = 0;
+ break;
+ default:
+ break;
}
}
@@ -1056,58 +1232,94 @@ void LogicManager::CONS_Waiter1_Serving3(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_Serving3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8]) {
- case 1:
- goto LABEL_9;
- case 2:
- goto LABEL_11;
- case 3:
- goto LABEL_13;
- case 4:
- goto LABEL_15;
- case 5:
- goto LABEL_17;
- default:
- return;
+ switch (msg->action) {
+ case 0:
+ if (inKitchen(kCharacterWaiter1) && rcClear()) {
+ if (getCharacterParams(kCharacterWaiter1, 8)[12]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
+ Waiter1Call(&LogicManager::CONS_Waiter1_AnnaComeHere3, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterWaiter1, 8)[13]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 2;
+ Waiter1Call(&LogicManager::CONS_Waiter1_AbbotCheckMe, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterWaiter1, 8)[19]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 3;
+ Waiter1Call(&LogicManager::CONS_Waiter1_AbbotServeLunch3, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterWaiter1, 8)[18]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 4;
+ Waiter1Call(&LogicManager::CONS_Waiter1_AbbotClearTable, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterWaiter1, 8)[2]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 5;
+ Waiter1Call(&LogicManager::CONS_Waiter1_RebeccaFeedUs, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterWaiter1, 8)[9]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 6;
+ Waiter1Call(&LogicManager::CONS_Waiter1_RebeccaClearOurTable, 0, 0, 0, 0);
}
}
- } else if (inKitchen(kCharacterWaiter1) && rcClear()) {
- if (getCharacterParams(kCharacterWaiter1, 8)[12]) {
- getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
- Waiter1Call(&LogicManager::CONS_Waiter1_AnnaComeHere3, 0, 0, 0, 0);
- } else {
- LABEL_9:
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8]) {
+ case 1:
if (getCharacterParams(kCharacterWaiter1, 8)[13]) {
getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 2;
Waiter1Call(&LogicManager::CONS_Waiter1_AbbotCheckMe, 0, 0, 0, 0);
- } else {
- LABEL_11:
- if (getCharacterParams(kCharacterWaiter1, 8)[19]) {
- getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 3;
- Waiter1Call(&LogicManager::CONS_Waiter1_AbbotServeLunch3, 0, 0, 0, 0);
- } else {
- LABEL_13:
- if (getCharacterParams(kCharacterWaiter1, 8)[18]) {
- getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 4;
- Waiter1Call(&LogicManager::CONS_Waiter1_AbbotClearTable, 0, 0, 0, 0);
- } else {
- LABEL_15:
- if (getCharacterParams(kCharacterWaiter1, 8)[2]) {
- getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 5;
- Waiter1Call(&LogicManager::CONS_Waiter1_RebeccaFeedUs, 0, 0, 0, 0);
- } else {
- LABEL_17:
- if (getCharacterParams(kCharacterWaiter1, 8)[9]) {
- getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 6;
- Waiter1Call(&LogicManager::CONS_Waiter1_RebeccaClearOurTable, 0, 0, 0, 0);
- }
- }
- }
- }
+ break;
+ }
+
+ // fall through
+ case 2:
+ if (getCharacterParams(kCharacterWaiter1, 8)[19]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 3;
+ Waiter1Call(&LogicManager::CONS_Waiter1_AbbotServeLunch3, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 3:
+ if (getCharacterParams(kCharacterWaiter1, 8)[18]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 4;
+ Waiter1Call(&LogicManager::CONS_Waiter1_AbbotClearTable, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 4:
+ if (getCharacterParams(kCharacterWaiter1, 8)[2]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 5;
+ Waiter1Call(&LogicManager::CONS_Waiter1_RebeccaFeedUs, 0, 0, 0, 0);
+ break;
}
+
+ // fall through
+ case 5:
+ if (getCharacterParams(kCharacterWaiter1, 8)[9]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 6;
+ Waiter1Call(&LogicManager::CONS_Waiter1_RebeccaClearOurTable, 0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1122,12 +1334,14 @@ void LogicManager::CONS_Waiter1_AnnaComeHere3(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_AnnaComeHere3(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter1).characterPosition.position = 5800;
getCharacter(kCharacterWaiter1).characterPosition.location = 0;
getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "911", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8]) {
case 1:
send(kCharacterWaiter1, kCharacterAnna, 122358304, 0);
@@ -1149,7 +1363,13 @@ void LogicManager::HAND_Waiter1_AnnaComeHere3(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1164,12 +1384,14 @@ void LogicManager::CONS_Waiter1_AbbotServeLunch3(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_AbbotServeLunch3(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter1).characterPosition.position = 5800;
getCharacter(kCharacterWaiter1).characterPosition.location = 0;
getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "916", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8]) {
case 1:
send(kCharacterWaiter1, kCharacterAbbot, 122358304, 0);
@@ -1191,7 +1413,13 @@ void LogicManager::HAND_Waiter1_AbbotServeLunch3(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1206,23 +1434,26 @@ void LogicManager::CONS_Waiter1_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_StartPart4(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterWaiter1);
- getCharacter(kCharacterWaiter1).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterWaiter1).characterPosition.position = 5900;
- getCharacter(kCharacterWaiter1).characterPosition.location = 0;
- getCharacter(kCharacterWaiter1).inventoryItem = 0;
- getCharacter(kCharacterWaiter1).clothes = 0;
- getCharacterParams(kCharacterWaiter1, 8)[14] = 0;
- getCharacterParams(kCharacterWaiter1, 8)[15] = 0;
- getCharacterParams(kCharacterWaiter1, 8)[16] = 0;
- getCharacterParams(kCharacterWaiter1, 8)[17] = 0;
- getCharacterParams(kCharacterWaiter1, 8)[18] = 0;
- getCharacterParams(kCharacterWaiter1, 8)[2] = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Waiter1_Serving4(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterWaiter1);
+ getCharacter(kCharacterWaiter1).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterWaiter1).characterPosition.position = 5900;
+ getCharacter(kCharacterWaiter1).characterPosition.location = 0;
+ getCharacter(kCharacterWaiter1).inventoryItem = 0;
+ getCharacter(kCharacterWaiter1).clothes = 0;
+ getCharacterParams(kCharacterWaiter1, 8)[14] = 0;
+ getCharacterParams(kCharacterWaiter1, 8)[15] = 0;
+ getCharacterParams(kCharacterWaiter1, 8)[16] = 0;
+ getCharacterParams(kCharacterWaiter1, 8)[17] = 0;
+ getCharacterParams(kCharacterWaiter1, 8)[18] = 0;
+ getCharacterParams(kCharacterWaiter1, 8)[2] = 0;
+ break;
+ default:
+ break;
}
}
@@ -1237,83 +1468,124 @@ void LogicManager::CONS_Waiter1_Serving4(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_Serving4(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8]) {
- case 1:
- getCharacterCurrentParams(kCharacterWaiter1)[0] = 1;
- goto LABEL_17;
- case 2:
- goto LABEL_19;
- case 3:
- goto LABEL_21;
- case 4:
- goto LABEL_23;
- case 5:
- goto LABEL_25;
- default:
- return;
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterWaiter1)[0]) {
+ bool skip = false;
+
+ if (!getCharacterCurrentParams(kCharacterWaiter1)[1]) {
+ getCharacterCurrentParams(kCharacterWaiter1)[1] = _gameTime + 3600;
+ if (_gameTime == -3600) {
+ skip = true;
+ getCharacterParams(kCharacterWaiter1, 8)[15] = 1;
+ getCharacterCurrentParams(kCharacterWaiter1)[0] = 0;
+ }
+ }
+
+ if (!skip && getCharacterCurrentParams(kCharacterWaiter1)[1] < _gameTime) {
+ getCharacterCurrentParams(kCharacterWaiter1)[1] = 0x7FFFFFFF;
+ getCharacterParams(kCharacterWaiter1, 8)[15] = 1;
+ getCharacterCurrentParams(kCharacterWaiter1)[0] = 0;
}
- } else if (msg->action == 201431954) {
- getCharacter(kCharacterWaiter1).callParams[8].parameters[14] = 0;
- getCharacterParams(kCharacterWaiter1, 8)[15] = 0;
- getCharacterParams(kCharacterWaiter1, 8)[16] = 0;
- getCharacterParams(kCharacterWaiter1, 8)[18] = 0;
- getCharacterParams(kCharacterWaiter1, 8)[2] = 0;
- getCharacterCurrentParams(kCharacterWaiter1)[0] = 0;
- getCharacter(kCharacterWaiter1).characterPosition.position = 5900;
- getCharacter(kCharacterWaiter1).characterPosition.location = 0;
- }
- return;
- }
- if (getCharacterCurrentParams(kCharacterWaiter1)[0]) {
- if (!getCharacterCurrentParams(kCharacterWaiter1)[1]) {
- getCharacterCurrentParams(kCharacterWaiter1)[1] = _gameTime + 3600;
- if (_gameTime == -3600)
- goto LABEL_10;
}
- if (getCharacterCurrentParams(kCharacterWaiter1)[1] < _gameTime) {
- getCharacterCurrentParams(kCharacterWaiter1)[1] = 0x7FFFFFFF;
- LABEL_10:
- getCharacterParams(kCharacterWaiter1, 8)[15] = 1;
- getCharacterCurrentParams(kCharacterWaiter1)[0] = 0;
+
+ if (inKitchen(kCharacterWaiter1) && rcClear()) {
+ if (getCharacterParams(kCharacterWaiter1, 8)[14]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
+ Waiter1Call(&LogicManager::CONS_Waiter1_AugustOrder4, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterWaiter1, 8)[15]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 2;
+ Waiter1Call(&LogicManager::CONS_Waiter1_ServeAugust4, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterWaiter1, 8)[16]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 3;
+ Waiter1Call(&LogicManager::CONS_Waiter1_AugustClearTable, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterWaiter1, 8)[17]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 4;
+ Waiter1Call(&LogicManager::CONS_Waiter1_AbbotCheckMe, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterWaiter1, 8)[18]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 5;
+ Waiter1Call(&LogicManager::CONS_Waiter1_AbbotClearTable, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterWaiter1, 8)[2]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 6;
+ Waiter1Call(&LogicManager::CONS_Waiter1_RebeccaFeedUs, 0, 0, 0, 0);
+ }
}
- }
- if (inKitchen(kCharacterWaiter1) && rcClear()) {
- if (getCharacterParams(kCharacterWaiter1, 8)[14]) {
- getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
- Waiter1Call(&LogicManager::CONS_Waiter1_AugustOrder4, 0, 0, 0, 0);
- } else {
- LABEL_17:
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8]) {
+ case 1:
+ getCharacterCurrentParams(kCharacterWaiter1)[0] = 1;
if (getCharacterParams(kCharacterWaiter1, 8)[15]) {
getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 2;
Waiter1Call(&LogicManager::CONS_Waiter1_ServeAugust4, 0, 0, 0, 0);
- } else {
- LABEL_19:
- if (getCharacterParams(kCharacterWaiter1, 8)[16]) {
- getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 3;
- Waiter1Call(&LogicManager::CONS_Waiter1_AugustClearTable, 0, 0, 0, 0);
- } else {
- LABEL_21:
- if (getCharacterParams(kCharacterWaiter1, 8)[17]) {
- getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 4;
- Waiter1Call(&LogicManager::CONS_Waiter1_AbbotCheckMe, 0, 0, 0, 0);
- } else {
- LABEL_23:
- if (getCharacterParams(kCharacterWaiter1, 8)[18]) {
- getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 5;
- Waiter1Call(&LogicManager::CONS_Waiter1_AbbotClearTable, 0, 0, 0, 0);
- } else {
- LABEL_25:
- if (getCharacterParams(kCharacterWaiter1, 8)[2]) {
- getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 6;
- Waiter1Call(&LogicManager::CONS_Waiter1_RebeccaFeedUs, 0, 0, 0, 0);
- }
- }
- }
- }
+ break;
+ }
+
+ // fall through
+ case 2:
+ if (getCharacterParams(kCharacterWaiter1, 8)[16]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 3;
+ Waiter1Call(&LogicManager::CONS_Waiter1_AugustClearTable, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 3:
+ if (getCharacterParams(kCharacterWaiter1, 8)[17]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 4;
+ Waiter1Call(&LogicManager::CONS_Waiter1_AbbotCheckMe, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 4:
+ if (getCharacterParams(kCharacterWaiter1, 8)[18]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 5;
+ Waiter1Call(&LogicManager::CONS_Waiter1_AbbotClearTable, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 5:
+ if (getCharacterParams(kCharacterWaiter1, 8)[2]) {
+ getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 6;
+ Waiter1Call(&LogicManager::CONS_Waiter1_RebeccaFeedUs, 0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
+
+ break;
+ case 201431954:
+ getCharacter(kCharacterWaiter1).callParams[8].parameters[14] = 0;
+ getCharacterParams(kCharacterWaiter1, 8)[15] = 0;
+ getCharacterParams(kCharacterWaiter1, 8)[16] = 0;
+ getCharacterParams(kCharacterWaiter1, 8)[18] = 0;
+ getCharacterParams(kCharacterWaiter1, 8)[2] = 0;
+ getCharacterCurrentParams(kCharacterWaiter1)[0] = 0;
+ getCharacter(kCharacterWaiter1).characterPosition.position = 5900;
+ getCharacter(kCharacterWaiter1).characterPosition.location = 0;
+ break;
+ default:
+ break;
}
}
@@ -1328,10 +1600,12 @@ void LogicManager::CONS_Waiter1_AugustOrder4(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_AugustOrder4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "911", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8]) {
case 1:
startCycOtis(kCharacterWaiter1, "010F3");
@@ -1353,7 +1627,13 @@ void LogicManager::HAND_Waiter1_AugustOrder4(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1368,10 +1648,12 @@ void LogicManager::CONS_Waiter1_ServeAugust4(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_ServeAugust4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "912", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8]) {
case 1:
send(kCharacterWaiter1, kCharacterAugust, 122358304, 0);
@@ -1393,7 +1675,13 @@ void LogicManager::HAND_Waiter1_ServeAugust4(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1408,10 +1696,12 @@ void LogicManager::CONS_Waiter1_AugustClearTable(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_AugustClearTable(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 1;
Waiter1Call(&LogicManager::CONS_Waiter1_DoSeqOtis, "911", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8]) {
case 1:
send(kCharacterWaiter1, kCharacterTableD, 136455232, 0);
@@ -1432,7 +1722,13 @@ void LogicManager::HAND_Waiter1_AugustClearTable(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter1, _functionsWaiter1[getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall]]);
fedEx(kCharacterWaiter1, kCharacterWaiter1, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1447,16 +1743,19 @@ void LogicManager::CONS_Waiter1_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_StartPart5(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterWaiter1);
- getCharacter(kCharacterWaiter1).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterWaiter1).characterPosition.position = 3969;
- getCharacter(kCharacterWaiter1).characterPosition.location = 1;
- getCharacter(kCharacterWaiter1).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Waiter1_Prisoner(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterWaiter1);
+ getCharacter(kCharacterWaiter1).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterWaiter1).characterPosition.position = 3969;
+ getCharacter(kCharacterWaiter1).characterPosition.location = 1;
+ getCharacter(kCharacterWaiter1).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -1471,8 +1770,13 @@ void LogicManager::CONS_Waiter1_Prisoner(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter1_Prisoner(HAND_PARAMS) {
- if (msg->action == 70549068)
+ switch (msg->action) {
+ case 70549068:
CONS_Waiter1_Disappear(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Waiter1_Disappear(CONS_PARAMS) {
Commit: 023913f0edd2d8ede1b10fcef706f9c2da388374
https://github.com/scummvm/scummvm/commit/023913f0edd2d8ede1b10fcef706f9c2da388374
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Waiter2 logic
Changed paths:
engines/lastexpress/characters/waiter2.cpp
diff --git a/engines/lastexpress/characters/waiter2.cpp b/engines/lastexpress/characters/waiter2.cpp
index 674c26db971..c0d9275ee36 100644
--- a/engines/lastexpress/characters/waiter2.cpp
+++ b/engines/lastexpress/characters/waiter2.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_Waiter2(int chapter) {
CONS_Waiter2_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -71,11 +71,12 @@ void LogicManager::CONS_Waiter2_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_DoWait(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterWaiter2)[1] ||
(getCharacterCurrentParams(kCharacterWaiter2)[1] = _gameTime + getCharacterCurrentParams(kCharacterWaiter2)[0], _gameTime + getCharacterCurrentParams(kCharacterWaiter2)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterWaiter2)[1] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterWaiter2)[1] = 0x7FFFFFFF;
}
@@ -83,6 +84,9 @@ void LogicManager::HAND_Waiter2_DoWait(HAND_PARAMS) {
getCharacter(kCharacterWaiter2).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter2, _functionsWaiter2[getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall]]);
fedEx(kCharacterWaiter2, kCharacterWaiter2, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -110,10 +114,13 @@ void LogicManager::HAND_Waiter2_DoSeqOtis(HAND_PARAMS) {
playChrExcuseMe(kCharacterWaiter2, kCharacterCath, 0);
getCharacterCurrentParams(kCharacterWaiter2)[3] = 1;
}
+
break;
case 12:
startSeqOtis(kCharacterWaiter2, (char *)&getCharacterCurrentParams(kCharacterWaiter2)[0]);
break;
+ default:
+ break;
}
}
@@ -152,6 +159,8 @@ void LogicManager::HAND_Waiter2_DoBlockSeqOtis(HAND_PARAMS) {
startSeqOtis(kCharacterWaiter2, (char *)&getCharacterCurrentParams(kCharacterWaiter2)[0]);
blockView(kCharacterWaiter2, getCharacterCurrentParams(kCharacterWaiter2)[3], getCharacterCurrentParams(kCharacterWaiter2)[4]);
break;
+ default:
+ break;
}
}
@@ -166,21 +175,29 @@ void LogicManager::CONS_Waiter2_FinishSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_FinishSeqOtis(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacter(kCharacterWaiter2).direction != 4) {
getCharacter(kCharacterWaiter2).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter2, _functionsWaiter2[getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall]]);
fedEx(kCharacterWaiter2, kCharacterWaiter2, 18, 0);
}
- } else if (msg->action == 3) {
+
+ break;
+ case 3:
getCharacter(kCharacterWaiter2).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter2, _functionsWaiter2[getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall]]);
fedEx(kCharacterWaiter2, kCharacterWaiter2, 18, 0);
- } else if (msg->action == 5) {
+ break;
+ case 5:
if (!getCharacterCurrentParams(kCharacterWaiter2)[0]) {
playChrExcuseMe(kCharacterWaiter2, kCharacterCath, 0);
getCharacterCurrentParams(kCharacterWaiter2)[0] = 1;
}
+
+ break;
+ default:
+ break;
}
}
@@ -229,7 +246,7 @@ void LogicManager::HAND_Waiter2_DoJoinedSeqOtis(HAND_PARAMS) {
startSeqOtis(kCharacterWaiter2, (char *)&getCharacterCurrentParams(kCharacterWaiter2)[0]);
break;
default:
- return;
+ break;
}
}
@@ -246,12 +263,17 @@ void LogicManager::CONS_Waiter2_DoDialog(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_DoDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterWaiter2).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter2, _functionsWaiter2[getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall]]);
fedEx(kCharacterWaiter2, kCharacterWaiter2, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterWaiter2, (char *)&getCharacterCurrentParams(kCharacterWaiter2)[0], -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -266,12 +288,14 @@ void LogicManager::CONS_Waiter2_MonsieurServeUs(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_MonsieurServeUs(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter2).characterPosition.position = 5800;
getCharacter(kCharacterWaiter2).characterPosition.location = 0;
getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 1;
Waiter2Call(&LogicManager::CONS_Waiter2_DoSeqOtis, "924", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8]) {
case 1:
send(kCharacterWaiter2, kCharacterMonsieur, 122358304, 0);
@@ -292,7 +316,13 @@ void LogicManager::HAND_Waiter2_MonsieurServeUs(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter2, _functionsWaiter2[getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall]]);
fedEx(kCharacterWaiter2, kCharacterWaiter2, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -307,25 +337,28 @@ void LogicManager::CONS_Waiter2_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_Birth(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- autoMessage(kCharacterWaiter2, 302203328, 5);
- autoMessage(kCharacterWaiter2, 189688608, 6);
- autoMessage(kCharacterWaiter2, 236237423, 7);
- autoMessage(kCharacterWaiter2, 219377792, 8);
- autoMessage(kCharacterWaiter2, 291721418, 10);
- autoMessage(kCharacterWaiter2, 258136010, 11);
- autoMessage(kCharacterWaiter2, 302996448, 2);
- autoMessage(kCharacterWaiter2, 223002560, 0);
- autoMessage(kCharacterWaiter2, 256200848, 9);
- autoMessage(kCharacterWaiter2, 269485588, 3);
- autoMessage(kCharacterWaiter2, 326144276, 4);
- getCharacter(kCharacterWaiter2).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterWaiter2).characterPosition.location = 0;
- getCharacter(kCharacterWaiter2).characterPosition.position = 5900;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Waiter2_ServingDinner(0, 0, 0, 0);
+ break;
+ case 12:
+ autoMessage(kCharacterWaiter2, 302203328, 5);
+ autoMessage(kCharacterWaiter2, 189688608, 6);
+ autoMessage(kCharacterWaiter2, 236237423, 7);
+ autoMessage(kCharacterWaiter2, 219377792, 8);
+ autoMessage(kCharacterWaiter2, 291721418, 10);
+ autoMessage(kCharacterWaiter2, 258136010, 11);
+ autoMessage(kCharacterWaiter2, 302996448, 2);
+ autoMessage(kCharacterWaiter2, 223002560, 0);
+ autoMessage(kCharacterWaiter2, 256200848, 9);
+ autoMessage(kCharacterWaiter2, 269485588, 3);
+ autoMessage(kCharacterWaiter2, 326144276, 4);
+ getCharacter(kCharacterWaiter2).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterWaiter2).characterPosition.location = 0;
+ getCharacter(kCharacterWaiter2).characterPosition.position = 5900;
+ break;
+ default:
+ break;
}
}
@@ -340,12 +373,14 @@ void LogicManager::CONS_Waiter2_MilosOrder(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_MilosOrder(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter2).characterPosition.position = 5800;
getCharacter(kCharacterWaiter2).characterPosition.location = 0;
getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 1;
Waiter2Call(&LogicManager::CONS_Waiter2_DoSeqOtis, "924", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8]) {
case 1:
startCycOtis(kCharacterMilos, "BLANK");
@@ -367,7 +402,13 @@ void LogicManager::HAND_Waiter2_MilosOrder(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter2, _functionsWaiter2[getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall]]);
fedEx(kCharacterWaiter2, kCharacterWaiter2, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -382,12 +423,14 @@ void LogicManager::CONS_Waiter2_MonsieurOrder(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_MonsieurOrder(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter2).characterPosition.position = 5800;
getCharacter(kCharacterWaiter2).characterPosition.location = 0;
getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 1;
Waiter2Call(&LogicManager::CONS_Waiter2_DoSeqOtis, "924", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8]) {
case 1:
startCycOtis(kCharacterMonsieur, "BLANK");
@@ -409,7 +452,13 @@ void LogicManager::HAND_Waiter2_MonsieurOrder(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter2, _functionsWaiter2[getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall]]);
fedEx(kCharacterWaiter2, kCharacterWaiter2, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -424,12 +473,14 @@ void LogicManager::CONS_Waiter2_ClearAlexei(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_ClearAlexei(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter2).characterPosition.position = 5800;
getCharacter(kCharacterWaiter2).characterPosition.location = 0;
getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 1;
Waiter2Call(&LogicManager::CONS_Waiter2_DoSeqOtis, "919", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8]) {
case 1:
blockView(kCharacterWaiter2, kCarRestaurant, 63);
@@ -451,7 +502,13 @@ void LogicManager::HAND_Waiter2_ClearAlexei(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter2, _functionsWaiter2[getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall]]);
fedEx(kCharacterWaiter2, kCharacterWaiter2, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -466,12 +523,14 @@ void LogicManager::CONS_Waiter2_ClearMilos(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_ClearMilos(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter2).characterPosition.position = 5800;
getCharacter(kCharacterWaiter2).characterPosition.location = 0;
getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 1;
Waiter2Call(&LogicManager::CONS_Waiter2_DoSeqOtis, "923", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8]) {
case 1:
send(kCharacterWaiter2, kCharacterTableC, 136455232, 0);
@@ -491,7 +550,13 @@ void LogicManager::HAND_Waiter2_ClearMilos(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter2, _functionsWaiter2[getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall]]);
fedEx(kCharacterWaiter2, kCharacterWaiter2, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -506,12 +571,14 @@ void LogicManager::CONS_Waiter2_ClearMonsieur(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_ClearMonsieur(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter2).characterPosition.position = 5800;
getCharacter(kCharacterWaiter2).characterPosition.location = 0;
getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 1;
Waiter2Call(&LogicManager::CONS_Waiter2_DoSeqOtis, "923", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8]) {
case 1:
send(kCharacterWaiter2, kCharacterTableC, 136455232, 0);
@@ -531,7 +598,13 @@ void LogicManager::HAND_Waiter2_ClearMonsieur(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter2, _functionsWaiter2[getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall]]);
fedEx(kCharacterWaiter2, kCharacterWaiter2, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -546,28 +619,37 @@ void LogicManager::CONS_Waiter2_ServingDinner(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_ServingDinner(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 18 && getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] == 5) {
+ switch (msg->action) {
+ case 0:
+ if (inKitchen(kCharacterWaiter2) && rcClear()) {
+ if (getCharacterParams(kCharacterWaiter2, 8)[0]) {
+ getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 1;
+ Waiter2Call(&LogicManager::CONS_Waiter2_MilosOrder, 0, 0, 0, 0);
+ } else if (getCharacterParams(kCharacterWaiter2, 8)[9]) {
+ getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 2;
+ Waiter2Call(&LogicManager::CONS_Waiter2_MonsieurOrder, 0, 0, 0, 0);
+ } else if (getCharacterParams(kCharacterWaiter2, 8)[2]) {
+ getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 3;
+ Waiter2Call(&LogicManager::CONS_Waiter2_ClearAlexei, 0, 0, 0, 0);
+ } else if (getCharacterParams(kCharacterWaiter2, 8)[3]) {
+ getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 4;
+ Waiter2Call(&LogicManager::CONS_Waiter2_ClearMilos, 0, 0, 0, 0);
+ } else if (getCharacterParams(kCharacterWaiter2, 8)[4]) {
+ getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 5;
+ Waiter2Call(&LogicManager::CONS_Waiter2_ClearMonsieur, 0, 0, 0, 0);
+ }
+ }
+
+ break;
+ case 18:
+ if (getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] == 5) {
send(kCharacterWaiter2, kCharacterHeadWait, 352768896, 0);
CONS_Waiter2_AfterDinner(0, 0, 0, 0);
}
- } else if (inKitchen(kCharacterWaiter2) && rcClear()) {
- if (getCharacterParams(kCharacterWaiter2, 8)[0]) {
- getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 1;
- Waiter2Call(&LogicManager::CONS_Waiter2_MilosOrder, 0, 0, 0, 0);
- } else if (getCharacterParams(kCharacterWaiter2, 8)[9]) {
- getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 2;
- Waiter2Call(&LogicManager::CONS_Waiter2_MonsieurOrder, 0, 0, 0, 0);
- } else if (getCharacterParams(kCharacterWaiter2, 8)[2]) {
- getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 3;
- Waiter2Call(&LogicManager::CONS_Waiter2_ClearAlexei, 0, 0, 0, 0);
- } else if (getCharacterParams(kCharacterWaiter2, 8)[3]) {
- getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 4;
- Waiter2Call(&LogicManager::CONS_Waiter2_ClearMilos, 0, 0, 0, 0);
- } else if (getCharacterParams(kCharacterWaiter2, 8)[4]) {
- getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 5;
- Waiter2Call(&LogicManager::CONS_Waiter2_ClearMonsieur, 0, 0, 0, 0);
- }
+
+ break;
+ default:
+ break;
}
}
@@ -582,10 +664,15 @@ void LogicManager::CONS_Waiter2_AfterDinner(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_AfterDinner(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter2).characterPosition.position = 5900;
- } else if (msg->action == 101632192) {
+ break;
+ case 101632192:
CONS_Waiter2_LockUp(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -600,11 +687,15 @@ void LogicManager::CONS_Waiter2_LockUp(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_LockUp(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter2).characterPosition.car = kCarRestaurant;
getCharacter(kCharacterWaiter2).characterPosition.position = 5900;
getCharacter(kCharacterWaiter2).characterPosition.location = 0;
endGraphics(kCharacterWaiter2);
+ break;
+ default:
+ break;
}
}
@@ -619,20 +710,23 @@ void LogicManager::CONS_Waiter2_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_StartPart2(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterWaiter2);
- getCharacter(kCharacterWaiter2).characterPosition.position = 5900;
- getCharacter(kCharacterWaiter2).characterPosition.location = 0;
- getCharacter(kCharacterWaiter2).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterWaiter2).clothes = 1;
- getCharacter(kCharacterWaiter2).inventoryItem = 0;
- getCharacterParams(kCharacterWaiter2, 8)[5] = 0;
- getCharacterParams(kCharacterWaiter2, 8)[6] = 0;
- getCharacterParams(kCharacterWaiter2, 8)[7] = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Waiter2_InKitchen(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterWaiter2);
+ getCharacter(kCharacterWaiter2).characterPosition.position = 5900;
+ getCharacter(kCharacterWaiter2).characterPosition.location = 0;
+ getCharacter(kCharacterWaiter2).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterWaiter2).clothes = 1;
+ getCharacter(kCharacterWaiter2).inventoryItem = 0;
+ getCharacterParams(kCharacterWaiter2, 8)[5] = 0;
+ getCharacterParams(kCharacterWaiter2, 8)[6] = 0;
+ getCharacterParams(kCharacterWaiter2, 8)[7] = 0;
+ break;
+ default:
+ break;
}
}
@@ -647,45 +741,58 @@ void LogicManager::CONS_Waiter2_InKitchen(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_InKitchen(HAND_PARAMS) {
- if (msg->action == 0) {
- if (!inKitchen(kCharacterWaiter2) || !rcClear())
- return;
-
- if (getCharacterParams(kCharacterWaiter2, 8)[5]) {
- getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 1;
- Waiter2Call(&LogicManager::CONS_Waiter2_TatianaClearTableB, 0, 0, 0, 0);
- return;
+ switch (msg->action) {
+ case 0:
+ if (inKitchen(kCharacterWaiter2) && rcClear()) {
+ if (getCharacterParams(kCharacterWaiter2, 8)[5]) {
+ getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 1;
+ Waiter2Call(&LogicManager::CONS_Waiter2_TatianaClearTableB, 0, 0, 0, 0);
+ } else if (getCharacterParams(kCharacterWaiter2, 8)[6]) {
+ getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 2;
+ Waiter2Call(&LogicManager::CONS_Waiter2_IvoComeHere, 0, 0, 0, 0);
+ } else if (getCharacterParams(kCharacterWaiter2, 8)[7] || getCharacterParams(kCharacterWaiter2, 8)[4]) {
+ getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 3;
+ Waiter2Call(&LogicManager::CONS_Waiter2_IvoClearTableC, 0, 0, 0, 0);
+ }
+
+ break;
}
- goto LABEL_13;
- }
- if (msg->action != 18) {
- if (msg->action == 101106391) {
- getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 4;
- Waiter2Call(&LogicManager::CONS_Waiter2_DoSeqOtis, "975", 0, 0, 0);
+
+ break;
+ case 18:
+ if (getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] == 1) {
+ if (getCharacterParams(kCharacterWaiter2, 8)[6]) {
+ getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 2;
+ Waiter2Call(&LogicManager::CONS_Waiter2_IvoComeHere, 0, 0, 0, 0);
+ } else if (getCharacterParams(kCharacterWaiter2, 8)[7] || getCharacterParams(kCharacterWaiter2, 8)[4]) {
+ getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 3;
+ Waiter2Call(&LogicManager::CONS_Waiter2_IvoClearTableC, 0, 0, 0, 0);
+ }
+
+ break;
}
- return;
- }
- if (getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] == 1) {
- LABEL_13:
- if (getCharacterParams(kCharacterWaiter2, 8)[6]) {
- getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 2;
- Waiter2Call(&LogicManager::CONS_Waiter2_IvoComeHere, 0, 0, 0, 0);
- return;
+ if (getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] != 2) {
+ if (getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] == 4) {
+ endGraphics(kCharacterWaiter2);
+ getCharacter(kCharacterWaiter2).characterPosition.position = 5900;
+ }
+
+ break;
}
- goto LABEL_15;
- }
- if (getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] != 2) {
- if (getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] == 4) {
- endGraphics(kCharacterWaiter2);
- getCharacter(kCharacterWaiter2).characterPosition.position = 5900;
+
+ if (getCharacterParams(kCharacterWaiter2, 8)[7] || getCharacterParams(kCharacterWaiter2, 8)[4]) {
+ getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 3;
+ Waiter2Call(&LogicManager::CONS_Waiter2_IvoClearTableC, 0, 0, 0, 0);
}
- return;
- }
-LABEL_15:
- if (getCharacterParams(kCharacterWaiter2, 8)[7] || getCharacterParams(kCharacterWaiter2, 8)[4]) {
- getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 3;
- Waiter2Call(&LogicManager::CONS_Waiter2_IvoClearTableC, 0, 0, 0, 0);
+
+ break;
+ case 101106391:
+ getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 4;
+ Waiter2Call(&LogicManager::CONS_Waiter2_DoSeqOtis, "975", 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -700,12 +807,14 @@ void LogicManager::CONS_Waiter2_TatianaClearTableB(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_TatianaClearTableB(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter2).characterPosition.position = 5800;
getCharacter(kCharacterWaiter2).characterPosition.location = 0;
getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 1;
Waiter2Call(&LogicManager::CONS_Waiter2_DoSeqOtis, "969", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8]) {
case 1:
blockView(kCharacterWaiter2, kCarRestaurant, 63);
@@ -727,7 +836,13 @@ void LogicManager::HAND_Waiter2_TatianaClearTableB(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter2, _functionsWaiter2[getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall]]);
fedEx(kCharacterWaiter2, kCharacterWaiter2, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -742,19 +857,27 @@ void LogicManager::CONS_Waiter2_IvoComeHere(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_IvoComeHere(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter2).characterPosition.position = 5800;
getCharacter(kCharacterWaiter2).characterPosition.location = 0;
getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 1;
Waiter2Call(&LogicManager::CONS_Waiter2_DoSeqOtis, "973", 0, 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] == 1) {
- send(kCharacterWaiter2, kCharacterIvo, 123712592, 0);
- startCycOtis(kCharacterWaiter2, "BLANK");
- getCharacterParams(kCharacterWaiter2, 8)[6] = 0;
+ break;
+ case 18:
+ if (getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] == 1) {
+ send(kCharacterWaiter2, kCharacterIvo, 123712592, 0);
+ startCycOtis(kCharacterWaiter2, "BLANK");
+ getCharacterParams(kCharacterWaiter2, 8)[6] = 0;
- getCharacter(kCharacterWaiter2).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterWaiter2, _functionsWaiter2[getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall]]);
- fedEx(kCharacterWaiter2, kCharacterWaiter2, 18, 0);
+ getCharacter(kCharacterWaiter2).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterWaiter2, _functionsWaiter2[getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall]]);
+ fedEx(kCharacterWaiter2, kCharacterWaiter2, 18, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -769,12 +892,14 @@ void LogicManager::CONS_Waiter2_IvoClearTableC(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_IvoClearTableC(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter2).characterPosition.position = 5800;
getCharacter(kCharacterWaiter2).characterPosition.location = 0;
getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 1;
Waiter2Call(&LogicManager::CONS_Waiter2_DoSeqOtis, "974", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8]) {
case 1:
send(kCharacterWaiter2, kCharacterTableC, 136455232, 0);
@@ -795,7 +920,13 @@ void LogicManager::HAND_Waiter2_IvoClearTableC(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterWaiter2, _functionsWaiter2[getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall]]);
fedEx(kCharacterWaiter2, kCharacterWaiter2, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -810,19 +941,22 @@ void LogicManager::CONS_Waiter2_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_StartPart3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterWaiter2);
- getCharacter(kCharacterWaiter2).characterPosition.position = 5900;
- getCharacter(kCharacterWaiter2).characterPosition.location = 0;
- getCharacter(kCharacterWaiter2).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterWaiter2).clothes = 1;
- getCharacter(kCharacterWaiter2).inventoryItem = 0;
- getCharacterParams(kCharacterWaiter2, 8)[8] = 0;
- getCharacterParams(kCharacterWaiter2, 8)[9] = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Waiter2_Serving3(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterWaiter2);
+ getCharacter(kCharacterWaiter2).characterPosition.position = 5900;
+ getCharacter(kCharacterWaiter2).characterPosition.location = 0;
+ getCharacter(kCharacterWaiter2).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterWaiter2).clothes = 1;
+ getCharacter(kCharacterWaiter2).inventoryItem = 0;
+ getCharacterParams(kCharacterWaiter2, 8)[8] = 0;
+ getCharacterParams(kCharacterWaiter2, 8)[9] = 0;
+ break;
+ default:
+ break;
}
}
@@ -837,14 +971,21 @@ void LogicManager::CONS_Waiter2_Serving3(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_Serving3(HAND_PARAMS) {
- if (msg->action == 0 && inKitchen(kCharacterWaiter2) && rcClear()) {
- if (getCharacterParams(kCharacterWaiter2, 8)[8]) {
- getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 1;
- Waiter2Call(&LogicManager::CONS_Waiter2_AnnaBringTea3, 0, 0, 0, 0);
- } else if (getCharacterParams(kCharacterWaiter2, 8)[9]) {
- getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 2;
- Waiter2Call(&LogicManager::CONS_Waiter2_MonsieurServeUs, 0, 0, 0, 0);
+ switch (msg->action) {
+ case 0:
+ if (inKitchen(kCharacterWaiter2) && rcClear()) {
+ if (getCharacterParams(kCharacterWaiter2, 8)[8]) {
+ getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 1;
+ Waiter2Call(&LogicManager::CONS_Waiter2_AnnaBringTea3, 0, 0, 0, 0);
+ } else if (getCharacterParams(kCharacterWaiter2, 8)[9]) {
+ getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 2;
+ Waiter2Call(&LogicManager::CONS_Waiter2_MonsieurServeUs, 0, 0, 0, 0);
+ }
}
+
+ break;
+ default:
+ break;
}
}
@@ -859,12 +1000,14 @@ void LogicManager::CONS_Waiter2_AnnaBringTea3(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_AnnaBringTea3(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter2).characterPosition.position = 5800;
getCharacter(kCharacterWaiter2).characterPosition.location = 0;
getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 1;
Waiter2Call(&LogicManager::CONS_Waiter2_DoSeqOtis, "816DD", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8]) {
case 1:
startSeqOtis(kCharacterWaiter2, "927");
@@ -889,8 +1032,10 @@ void LogicManager::HAND_Waiter2_AnnaBringTea3(HAND_PARAMS) {
break;
case 4:
startSeqOtis(kCharacterWaiter2, "816UD");
+
if (inSalon(kCharacterCath))
advanceFrame(kCharacterWaiter2);
+
getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 5;
Waiter2Call(&LogicManager::CONS_Waiter2_FinishSeqOtis, 0, 0, 0, 0);
break;
@@ -904,8 +1049,12 @@ void LogicManager::HAND_Waiter2_AnnaBringTea3(HAND_PARAMS) {
fedEx(kCharacterWaiter2, kCharacterWaiter2, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -920,21 +1069,24 @@ void LogicManager::CONS_Waiter2_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_StartPart4(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterWaiter2);
- getCharacter(kCharacterWaiter2).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterWaiter2).characterPosition.position = 5900;
- getCharacter(kCharacterWaiter2).characterPosition.location = 0;
- getCharacter(kCharacterWaiter2).inventoryItem = 0;
- endGraphics(kCharacterWaiter2);
- getCharacterParams(kCharacterWaiter2, 8)[10] = 0;
- getCharacterParams(kCharacterWaiter2, 8)[12] = 0;
- getCharacterParams(kCharacterWaiter2, 8)[11] = 0;
- getCharacterParams(kCharacterWaiter2, 8)[9] = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Waiter2_Serving4(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterWaiter2);
+ getCharacter(kCharacterWaiter2).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterWaiter2).characterPosition.position = 5900;
+ getCharacter(kCharacterWaiter2).characterPosition.location = 0;
+ getCharacter(kCharacterWaiter2).inventoryItem = 0;
+ endGraphics(kCharacterWaiter2);
+ getCharacterParams(kCharacterWaiter2, 8)[10] = 0;
+ getCharacterParams(kCharacterWaiter2, 8)[12] = 0;
+ getCharacterParams(kCharacterWaiter2, 8)[11] = 0;
+ getCharacterParams(kCharacterWaiter2, 8)[9] = 0;
+ break;
+ default:
+ break;
}
}
@@ -949,47 +1101,59 @@ void LogicManager::CONS_Waiter2_Serving4(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_Serving4(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 18) {
- if (getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] == 1)
- getCharacterCurrentParams(kCharacterWaiter2)[0] = 1;
- } else if (msg->action == 201431954) {
- getCharacter(kCharacterWaiter2).callParams[8].parameters[10] = 0;
- getCharacterParams(kCharacterWaiter2, 8)[12] = 0;
- getCharacterParams(kCharacterWaiter2, 8)[11] = 0;
- getCharacterParams(kCharacterWaiter2, 8)[9] = 0;
- getCharacter(kCharacterWaiter2).characterPosition.position = 5900;
- getCharacter(kCharacterWaiter2).characterPosition.location = 0;
- }
- return;
- }
- if (getCharacterCurrentParams(kCharacterWaiter2)[0]) {
- if (!getCharacterCurrentParams(kCharacterWaiter2)[1]) {
- getCharacterCurrentParams(kCharacterWaiter2)[1] = _gameTime + 900;
- if (_gameTime == -900)
- goto LABEL_10;
- }
- if (getCharacterCurrentParams(kCharacterWaiter2)[1] < _gameTime) {
- getCharacterCurrentParams(kCharacterWaiter2)[1] = 0x7FFFFFFF;
- LABEL_10:
- getCharacterParams(kCharacterWaiter2, 8)[12] = 1;
- getCharacterCurrentParams(kCharacterWaiter2)[0] = 0;
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterWaiter2)[0]) {
+ bool skip = false;
+
+ if (!getCharacterCurrentParams(kCharacterWaiter2)[1]) {
+ getCharacterCurrentParams(kCharacterWaiter2)[1] = _gameTime + 900;
+ if (_gameTime == -900) {
+ skip = true;
+ getCharacterParams(kCharacterWaiter2, 8)[12] = 1;
+ getCharacterCurrentParams(kCharacterWaiter2)[0] = 0;
+ }
+ }
+
+ if (!skip && getCharacterCurrentParams(kCharacterWaiter2)[1] < _gameTime) {
+ getCharacterCurrentParams(kCharacterWaiter2)[1] = 0x7FFFFFFF;
+ getCharacterParams(kCharacterWaiter2, 8)[12] = 1;
+ getCharacterCurrentParams(kCharacterWaiter2)[0] = 0;
+ }
}
- }
- if (inKitchen(kCharacterWaiter2) && rcClear()) {
- if (getCharacterParams(kCharacterWaiter2, 8)[10]) {
- getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 1;
- Waiter2Call(&LogicManager::CONS_Waiter2_AugustNeedsADrink, 0, 0, 0, 0);
- } else if (getCharacterParams(kCharacterWaiter2, 8)[12]) {
- getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 2;
- Waiter2Call(&LogicManager::CONS_Waiter2_ServeAugustADrink, 0, 0, 0, 0);
- } else if (getCharacterParams(kCharacterWaiter2, 8)[11]) {
- getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 3;
- Waiter2Call(&LogicManager::CONS_Waiter2_AnnaNeedsADrink, 0, 0, 0, 0);
- } else if (getCharacterParams(kCharacterWaiter2, 8)[9]) {
- getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 4;
- Waiter2Call(&LogicManager::CONS_Waiter2_MonsieurServeUs, 0, 0, 0, 0);
+
+ if (inKitchen(kCharacterWaiter2) && rcClear()) {
+ if (getCharacterParams(kCharacterWaiter2, 8)[10]) {
+ getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 1;
+ Waiter2Call(&LogicManager::CONS_Waiter2_AugustNeedsADrink, 0, 0, 0, 0);
+ } else if (getCharacterParams(kCharacterWaiter2, 8)[12]) {
+ getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 2;
+ Waiter2Call(&LogicManager::CONS_Waiter2_ServeAugustADrink, 0, 0, 0, 0);
+ } else if (getCharacterParams(kCharacterWaiter2, 8)[11]) {
+ getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 3;
+ Waiter2Call(&LogicManager::CONS_Waiter2_AnnaNeedsADrink, 0, 0, 0, 0);
+ } else if (getCharacterParams(kCharacterWaiter2, 8)[9]) {
+ getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 4;
+ Waiter2Call(&LogicManager::CONS_Waiter2_MonsieurServeUs, 0, 0, 0, 0);
+ }
}
+
+ break;
+ case 18:
+ if (getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] == 1)
+ getCharacterCurrentParams(kCharacterWaiter2)[0] = 1;
+
+ break;
+ case 201431954:
+ getCharacter(kCharacterWaiter2).callParams[8].parameters[10] = 0;
+ getCharacterParams(kCharacterWaiter2, 8)[12] = 0;
+ getCharacterParams(kCharacterWaiter2, 8)[11] = 0;
+ getCharacterParams(kCharacterWaiter2, 8)[9] = 0;
+ getCharacter(kCharacterWaiter2).characterPosition.position = 5900;
+ getCharacter(kCharacterWaiter2).characterPosition.location = 0;
+ break;
+ default:
+ break;
}
}
@@ -1004,12 +1168,14 @@ void LogicManager::CONS_Waiter2_AugustNeedsADrink(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_AugustNeedsADrink(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter2).characterPosition.position = 5800;
getCharacter(kCharacterWaiter2).characterPosition.location = 0;
getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 1;
Waiter2Call(&LogicManager::CONS_Waiter2_DoSeqOtis, "816DD", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8]) {
case 1:
startSeqOtis(kCharacterWaiter2, "929");
@@ -1048,8 +1214,12 @@ void LogicManager::HAND_Waiter2_AugustNeedsADrink(HAND_PARAMS) {
fedEx(kCharacterWaiter2, kCharacterWaiter2, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1064,12 +1234,14 @@ void LogicManager::CONS_Waiter2_ServeAugustADrink(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_ServeAugustADrink(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter2).characterPosition.position = 5800;
getCharacter(kCharacterWaiter2).characterPosition.location = 0;
getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 1;
Waiter2Call(&LogicManager::CONS_Waiter2_DoSeqOtis, "816DD", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8]) {
case 1:
startSeqOtis(kCharacterWaiter2, "931");
@@ -1108,8 +1280,12 @@ void LogicManager::HAND_Waiter2_ServeAugustADrink(HAND_PARAMS) {
fedEx(kCharacterWaiter2, kCharacterWaiter2, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1124,12 +1300,14 @@ void LogicManager::CONS_Waiter2_AnnaNeedsADrink(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_AnnaNeedsADrink(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterWaiter2).characterPosition.position = 5800;
getCharacter(kCharacterWaiter2).characterPosition.location = 0;
getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8] = 1;
Waiter2Call(&LogicManager::CONS_Waiter2_DoSeqOtis, "816DD", 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterWaiter2).callbacks[getCharacter(kCharacterWaiter2).currentCall + 8]) {
case 1:
startSeqOtis(kCharacterWaiter2, "932");
@@ -1168,8 +1346,12 @@ void LogicManager::HAND_Waiter2_AnnaNeedsADrink(HAND_PARAMS) {
fedEx(kCharacterWaiter2, kCharacterWaiter2, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1184,16 +1366,19 @@ void LogicManager::CONS_Waiter2_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_StartPart5(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterWaiter2);
- getCharacter(kCharacterWaiter2).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterWaiter2).characterPosition.position = 3969;
- getCharacter(kCharacterWaiter2).characterPosition.location = 1;
- getCharacter(kCharacterWaiter2).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Waiter2_Prisoner(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterWaiter2);
+ getCharacter(kCharacterWaiter2).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterWaiter2).characterPosition.position = 3969;
+ getCharacter(kCharacterWaiter2).characterPosition.location = 1;
+ getCharacter(kCharacterWaiter2).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -1208,8 +1393,13 @@ void LogicManager::CONS_Waiter2_Prisoner(CONS_PARAMS) {
}
void LogicManager::HAND_Waiter2_Prisoner(HAND_PARAMS) {
- if (msg->action == 70549068)
+ switch (msg->action) {
+ case 70549068:
CONS_Waiter2_Disappear(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Waiter2_Disappear(CONS_PARAMS) {
Commit: 1e5e44525125f776510544c86881189a86b43607
https://github.com/scummvm/scummvm/commit/1e5e44525125f776510544c86881189a86b43607
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up TrainM logic
Changed paths:
engines/lastexpress/characters/trainm.cpp
diff --git a/engines/lastexpress/characters/trainm.cpp b/engines/lastexpress/characters/trainm.cpp
index 6db7f3c700f..e700e9060c9 100644
--- a/engines/lastexpress/characters/trainm.cpp
+++ b/engines/lastexpress/characters/trainm.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_TrainM(int chapter) {
CONS_TrainM_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -69,19 +69,25 @@ void LogicManager::CONS_TrainM_DebugWalks(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_DebugWalks(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterTrainM).characterPosition.position = 0;
- getCharacter(kCharacterTrainM).characterPosition.location = 0;
- getCharacter(kCharacterTrainM).characterPosition.car = kCarGreenSleeping;
- getCharacterCurrentParams(kCharacterTrainM)[0] = 10000;
- }
- } else if (walk(kCharacterTrainM, kCarGreenSleeping, getCharacterCurrentParams(kCharacterTrainM)[0])) {
- if (getCharacterCurrentParams(kCharacterTrainM)[0] == 10000) {
- getCharacterCurrentParams(kCharacterTrainM)[0] = 0;
- } else {
- getCharacterCurrentParams(kCharacterTrainM)[0] = 10000;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterTrainM, kCarGreenSleeping, getCharacterCurrentParams(kCharacterTrainM)[0])) {
+ if (getCharacterCurrentParams(kCharacterTrainM)[0] == 10000) {
+ getCharacterCurrentParams(kCharacterTrainM)[0] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterTrainM)[0] = 10000;
+ }
}
+
+ break;
+ case 12:
+ getCharacter(kCharacterTrainM).characterPosition.position = 0;
+ getCharacter(kCharacterTrainM).characterPosition.location = 0;
+ getCharacter(kCharacterTrainM).characterPosition.car = kCarGreenSleeping;
+ getCharacterCurrentParams(kCharacterTrainM)[0] = 10000;
+ break;
+ default:
+ break;
}
}
@@ -130,13 +136,29 @@ void LogicManager::CONS_TrainM_FinishSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_FinishSeqOtis(HAND_PARAMS) {
- if (msg->action == 3 || (msg->action == 0 && getCharacter(kCharacterTrainM).direction != 4)) {
+ switch (msg->action) {
+ case 0:
+ if (getCharacter(kCharacterTrainM).direction != 4) {
+ getCharacter(kCharacterTrainM).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterTrainM, _functionsTrainM[getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall]]);
+ fedEx(kCharacterTrainM, kCharacterTrainM, 18, 0);
+ }
+
+ break;
+ case 3:
getCharacter(kCharacterTrainM).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterTrainM, _functionsTrainM[getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall]]);
fedEx(kCharacterTrainM, kCharacterTrainM, 18, 0);
- } else if (msg->action == 5 && !getCharacterCurrentParams(kCharacterTrainM)[0]) {
- playChrExcuseMe(kCharacterTrainM, kCharacterCath, 0);
- getCharacterCurrentParams(kCharacterTrainM)[0] = 1;
+ break;
+ case 5:
+ if (!getCharacterCurrentParams(kCharacterTrainM)[0]) {
+ playChrExcuseMe(kCharacterTrainM, kCharacterCath, 0);
+ getCharacterCurrentParams(kCharacterTrainM)[0] = 1;
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -153,12 +175,17 @@ void LogicManager::CONS_TrainM_DoDialog(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_DoDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterTrainM).currentCall--;
_engine->getMessageManager()->setMessageHandle(9, _functionsTrainM[getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall]]);
fedEx(kCharacterTrainM, kCharacterTrainM, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterTrainM, (char *)&getCharacterCurrentParams(kCharacterTrainM), -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -175,12 +202,17 @@ void LogicManager::CONS_TrainM_DoDialogFullVol(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_DoDialogFullVol(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterTrainM).currentCall--;
_engine->getMessageManager()->setMessageHandle(9, _functionsTrainM[getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall]]);
fedEx(kCharacterTrainM, kCharacterTrainM, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterTrainM, (char *)&getCharacterCurrentParams(kCharacterTrainM), 16, 0);
+ break;
+ default:
+ break;
}
}
@@ -195,10 +227,18 @@ void LogicManager::CONS_TrainM_WaitRCClear(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_WaitRCClear(HAND_PARAMS) {
- if ((msg->action == 12 && rcClear()) || (msg->action == 0 && rcClear())) {
- getCharacter(kCharacterTrainM).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterTrainM, _functionsTrainM[getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall]]);
- fedEx(kCharacterTrainM, kCharacterTrainM, 18, 0);
+ switch (msg->action) {
+ case 0:
+ case 12:
+ if (rcClear()) {
+ getCharacter(kCharacterTrainM).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterTrainM, _functionsTrainM[getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall]]);
+ fedEx(kCharacterTrainM, kCharacterTrainM, 18, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -216,19 +256,25 @@ void LogicManager::CONS_TrainM_SaveGame(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_SaveGame(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
getCharacter(kCharacterTrainM).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterTrainM, _functionsTrainM[getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall]]);
fedEx(kCharacterTrainM, kCharacterTrainM, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
save(
kCharacterTrainM,
- getCharacter(kCharacterTrainM).callParams[getCharacter(kCharacterTrainM).currentCall].parameters[0],
- getCharacter(kCharacterTrainM).callParams[getCharacter(kCharacterTrainM).currentCall].parameters[1]);
+ getCharacterCurrentParams(kCharacterTrainM)[0],
+ getCharacterCurrentParams(kCharacterTrainM)[1]
+ );
getCharacter(kCharacterTrainM).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterTrainM, _functionsTrainM[getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall]]);
fedEx(kCharacterTrainM, kCharacterTrainM, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -290,7 +336,8 @@ void LogicManager::CONS_TrainM_Announce(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_Announce(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
setDoor(104, kCharacterCath, 0, 0, 9);
setDoor(105, kCharacterCath, 0, 0, 9);
@@ -318,7 +365,8 @@ void LogicManager::HAND_TrainM_Announce(HAND_PARAMS) {
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
TrainMCall(&LogicManager::CONS_TrainM_WaitRCClear, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8]) {
case 1:
getCharacter(kCharacterTrainM).characterPosition.position = 5800;
@@ -361,6 +409,10 @@ void LogicManager::HAND_TrainM_Announce(HAND_PARAMS) {
default:
break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -380,7 +432,8 @@ void LogicManager::CONS_TrainM_DoAnnounceWalk(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_DoAnnounceWalk(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (!getCharacterCurrentParams(kCharacterTrainM)[6] && !whoRunningDialog(kCharacterTrainM)) {
playDialog(kCharacterTrainM, (char *)&getCharacterCurrentParams(kCharacterTrainM)[2], -1, 0);
getCharacterCurrentParams(kCharacterTrainM)[6] = 1;
@@ -390,25 +443,27 @@ void LogicManager::HAND_TrainM_DoAnnounceWalk(HAND_PARAMS) {
getCharacter(kCharacterTrainM).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterTrainM, _functionsTrainM[getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall]]);
fedEx(kCharacterTrainM, kCharacterTrainM, 18, 0);
- return;
+ break;
}
- if (!getCharacterCurrentParams(kCharacterTrainM)[5])
- return;
+ if (getCharacterCurrentParams(kCharacterTrainM)[5]) {
+ if (getCharacterCurrentParams(kCharacterTrainM)[7] || (getCharacterCurrentParams(kCharacterTrainM)[7] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterTrainM)[7] >= _currentGameSessionTicks)
+ break;
- if (getCharacterCurrentParams(kCharacterTrainM)[7] || (getCharacterCurrentParams(kCharacterTrainM)[7] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterTrainM)[7] >= _currentGameSessionTicks)
- return;
+ getCharacterCurrentParams(kCharacterTrainM)[7] = 0x7FFFFFFF;
+ }
- getCharacterCurrentParams(kCharacterTrainM)[7] = 0x7FFFFFFF;
+ playDialog(kCharacterTrainM, (char *)&getCharacterCurrentParams(kCharacterTrainM)[2], -1, 0);
+ getCharacterCurrentParams(kCharacterTrainM)[5] = 0;
+ getCharacterCurrentParams(kCharacterTrainM)[7] = 0;
}
- playDialog(kCharacterTrainM, (char *)&getCharacterCurrentParams(kCharacterTrainM)[2], -1, 0);
- getCharacterCurrentParams(kCharacterTrainM)[5] = 0;
- getCharacterCurrentParams(kCharacterTrainM)[7] = 0;
- } else if (msg->action == 2) {
+ break;
+ case 2:
getCharacterCurrentParams(kCharacterTrainM)[5] = 1;
- } else if (msg->action == 12) {
+ break;
+ case 12:
if (!whoRunningDialog(kCharacterTrainM)) {
playDialog(kCharacterTrainM, (char *)&getCharacterCurrentParams(kCharacterTrainM)[2], -1, 0);
getCharacterCurrentParams(kCharacterTrainM)[6] = 1;
@@ -419,6 +474,10 @@ void LogicManager::HAND_TrainM_DoAnnounceWalk(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterTrainM, _functionsTrainM[getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall]]);
fedEx(kCharacterTrainM, kCharacterTrainM, 18, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -433,10 +492,12 @@ void LogicManager::CONS_TrainM_WalkBackToOffice(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_WalkBackToOffice(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
TrainMCall(&LogicManager::CONS_TrainM_DoWalk, 5, 540, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8]) {
case 1:
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 2;
@@ -500,6 +561,10 @@ void LogicManager::HAND_TrainM_WalkBackToOffice(HAND_PARAMS) {
default:
break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -514,7 +579,8 @@ void LogicManager::CONS_TrainM_LeaveOffice(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_LeaveOffice(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
setDoor(104, kCharacterCath, 0, 0, 9);
setDoor(105, kCharacterCath, 0, 0, 9);
if (inLowBaggage(kCharacterCath)) {
@@ -526,7 +592,7 @@ void LogicManager::HAND_TrainM_LeaveOffice(HAND_PARAMS) {
getCharacter(kCharacterTrainM).characterPosition.position = 5900;
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
TrainMCall(&LogicManager::CONS_TrainM_WaitRCClear, 0, 0, 0, 0);
- return;
+ break;
}
playNIS(kEventVergesCanIHelpYou);
@@ -539,7 +605,8 @@ void LogicManager::HAND_TrainM_LeaveOffice(HAND_PARAMS) {
getCharacter(kCharacterTrainM).characterPosition.position = 5900;
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
TrainMCall(&LogicManager::CONS_TrainM_WaitRCClear, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8]) {
case 1:
getCharacter(kCharacterTrainM).characterPosition.position = 5800;
@@ -561,7 +628,13 @@ void LogicManager::HAND_TrainM_LeaveOffice(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterTrainM, _functionsTrainM[getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall]]);
fedEx(kCharacterTrainM, kCharacterTrainM, 18, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -578,10 +651,12 @@ void LogicManager::CONS_TrainM_KickCathOut(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_KickCathOut(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
- TrainMCall(&LogicManager::CONS_TrainM_SaveGame, 2, 130, 0, 0);
- } else if (msg->action == 18) {
+ TrainMCall(&LogicManager::CONS_TrainM_SaveGame, 2, kEventVergesSuitcase, 0, 0);
+ break;
+ case 18:
if (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] == 1) {
if (_gameEvents[kEventVergesSuitcase] || _gameEvents[kEventVergesSuitcaseNight] || _gameEvents[kEventVergesSuitcaseOtherEntry] || _gameEvents[kEventVergesSuitcaseNightOtherEntry]) {
getCharacterCurrentParams(kCharacterTrainM)[1] = 1;
@@ -624,6 +699,10 @@ void LogicManager::HAND_TrainM_KickCathOut(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterTrainM, _functionsTrainM[getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall]]);
fedEx(kCharacterTrainM, kCharacterTrainM, 18, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -640,11 +719,12 @@ void LogicManager::CONS_TrainM_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_DoWait(HAND_PARAMS) {
- if (!msg->action) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterTrainM)[1] ||
(getCharacterCurrentParams(kCharacterTrainM)[1] = _gameTime + getCharacterCurrentParams(kCharacterTrainM)[0], (_gameTime + getCharacterCurrentParams(kCharacterTrainM)[0] != 0))) {
if (getCharacterCurrentParams(kCharacterTrainM)[1] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterTrainM)[1] = 0x7FFFFFFF;
}
@@ -652,6 +732,9 @@ void LogicManager::HAND_TrainM_DoWait(HAND_PARAMS) {
getCharacter(kCharacterTrainM).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterTrainM, _functionsTrainM[getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall]]);
fedEx(kCharacterTrainM, kCharacterTrainM, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -670,7 +753,8 @@ void LogicManager::CONS_TrainM_DoCond(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_DoCond(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterTrainM)[4] && getCharacterCurrentParams(kCharacterTrainM)[5]) {
send(kCharacterTrainM, getCharacterCurrentParams(kCharacterTrainM)[0], 125499160, 0);
if (!checkCathDir(3, 2) && !checkCathDir(4, 2))
@@ -680,16 +764,24 @@ void LogicManager::HAND_TrainM_DoCond(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterTrainM, _functionsTrainM[getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall]]);
fedEx(kCharacterTrainM, kCharacterTrainM, 18, 0);
}
- } else if (msg->action == 2) {
+
+ break;
+ case 2:
getCharacterCurrentParams(kCharacterTrainM)[4] = 1;
- } else if (msg->action == 12) {
+ break;
+ case 12:
startCycOtis(kCharacterTrainM, "620F");
send(kCharacterTrainM, getCharacterCurrentParams(kCharacterTrainM)[0], 171394341, 0);
- } else if (msg->action == 155853632) {
+ break;
+ case 155853632:
getCharacterCurrentParams(kCharacterTrainM)[5] = 1;
- } else if (msg->action == 202558662) {
+ break;
+ case 202558662:
startCycOtis(kCharacterTrainM, "620E");
playDialog(kCharacterTrainM, (char *)&getCharacterCurrentParams(kCharacterTrainM)[1], -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -709,7 +801,8 @@ void LogicManager::CONS_TrainM_DoCondDoubl(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_DoCondDoubl(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterTrainM)[8] >= 2 && getCharacterCurrentParams(kCharacterTrainM)[7]) {
send(kCharacterTrainM, getCharacterCurrentParams(kCharacterTrainM)[0], 125499160, 0);
if (!checkCathDir(kCarGreenSleeping, 2) && !checkCathDir(4, 2))
@@ -719,18 +812,27 @@ void LogicManager::HAND_TrainM_DoCondDoubl(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterTrainM, _functionsTrainM[getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall]]);
fedEx(kCharacterTrainM, kCharacterTrainM, 18, 0);
}
- } else if (msg->action == 2) {
+
+ break;
+ case 2:
getCharacterCurrentParams(kCharacterTrainM)[8]++;
if (getCharacterCurrentParams(kCharacterTrainM)[8] == 1)
playDialog(kCharacterTrainM, (char *)&getCharacterCurrentParams(kCharacterTrainM)[4], -1, 0);
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
startCycOtis(kCharacterTrainM, "620F");
send(kCharacterTrainM, getCharacterCurrentParams(kCharacterTrainM)[0], 171394341, 0);
- } else if (msg->action == 155853632) {
+ break;
+ case 155853632:
getCharacterCurrentParams(kCharacterTrainM)[7] = 1;
- } else if (msg->action == 202558662) {
+ break;
+ case 202558662:
startCycOtis(kCharacterTrainM, "620E");
playDialog(kCharacterTrainM, (char *)&getCharacterCurrentParams(kCharacterTrainM)[1], -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -745,14 +847,16 @@ void LogicManager::CONS_TrainM_DoCond1ListMessage(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_DoCond1ListMessage(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
TrainMCall(&LogicManager::CONS_TrainM_LeaveOffice, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8]) {
case 1:
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 2;
- TrainMCall(&LogicManager::CONS_TrainM_DoWalk, 3, 0x7D0, 0, 0);
+ TrainMCall(&LogicManager::CONS_TrainM_DoWalk, 3, 2000, 0, 0);
break;
case 2:
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 3;
@@ -769,8 +873,12 @@ void LogicManager::HAND_TrainM_DoCond1ListMessage(HAND_PARAMS) {
fedEx(kCharacterTrainM, kCharacterTrainM, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -785,12 +893,15 @@ void LogicManager::CONS_TrainM_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_Birth(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterTrainM)[0]) {
getCharacterCurrentParams(kCharacterTrainM)[0] = 1;
CONS_TrainM_InOffice(0, 0, 0, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
autoMessage(kCharacterTrainM, 191337656, 0);
autoMessage(kCharacterTrainM, 226031488, 1);
autoMessage(kCharacterTrainM, 339669520, 1);
@@ -806,6 +917,9 @@ void LogicManager::HAND_TrainM_Birth(HAND_PARAMS) {
setDoor(104, kCharacterTrainM, 0, 0, 9);
setDoor(105, kCharacterTrainM, 0, 0, 9);
+ break;
+ default:
+ break;
}
}
@@ -820,10 +934,12 @@ void LogicManager::CONS_TrainM_DoMadeBedsMessages(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_DoMadeBedsMessages(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
TrainMCall(&LogicManager::CONS_TrainM_LeaveOffice, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8]) {
case 1:
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 2;
@@ -851,8 +967,12 @@ void LogicManager::HAND_TrainM_DoMadeBedsMessages(HAND_PARAMS) {
fedEx(kCharacterTrainM, kCharacterTrainM, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -867,10 +987,12 @@ void LogicManager::CONS_TrainM_DoMissingListMessages(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_DoMissingListMessages(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
TrainMCall(&LogicManager::CONS_TrainM_LeaveOffice, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8]) {
case 1:
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 2;
@@ -900,6 +1022,10 @@ void LogicManager::HAND_TrainM_DoMissingListMessages(HAND_PARAMS) {
default:
break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -914,10 +1040,12 @@ void LogicManager::CONS_TrainM_DoAfterPoliceMessages(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_DoAfterPoliceMessages(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
TrainMCall(&LogicManager::CONS_TrainM_LeaveOffice, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8]) {
case 1:
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 2;
@@ -947,6 +1075,10 @@ void LogicManager::HAND_TrainM_DoAfterPoliceMessages(HAND_PARAMS) {
default:
break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -961,10 +1093,12 @@ void LogicManager::CONS_TrainM_DoHWMessage(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_DoHWMessage(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
TrainMCall(&LogicManager::CONS_TrainM_LeaveOffice, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8]) {
case 1:
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 2;
@@ -991,8 +1125,12 @@ void LogicManager::HAND_TrainM_DoHWMessage(HAND_PARAMS) {
fedEx(kCharacterTrainM, kCharacterTrainM, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1007,17 +1145,22 @@ void LogicManager::CONS_TrainM_DoSeizure(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_DoSeizure(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
takeItem(kItem9);
getCharacter(kCharacterTrainM).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterTrainM).characterPosition.position = 8200;
getCharacter(kCharacterTrainM).characterPosition.location = 1;
- } else if (msg->action == 191477936) {
+ break;
+ case 191477936:
getCharacter(kCharacterTrainM).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterTrainM).characterPosition.position = 8200;
getCharacter(kCharacterTrainM).characterPosition.location = 0;
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
TrainMCall(&LogicManager::CONS_TrainM_WalkBackToOffice, 0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1122,7 +1265,12 @@ void LogicManager::HAND_TrainM_BoardPolice(HAND_PARAMS) {
bumpCath(kCarRedSleeping, 49, 255);
if (inComp(kCharacterCath, kCarRedSleeping, 4840) || inComp(kCharacterCath, kCarRedSleeping, 4455)) {
- playNIS(kEventCathTurningNight - !isNight());
+ if (isNight()) {
+ playNIS(kEventCathTurningNight);
+ } else {
+ playNIS(kEventCathTurningDay);
+ }
+
playDialog(kCharacterCath, "BUMP", -1, 0);
bumpCathFDoor(36);
}
@@ -1137,6 +1285,7 @@ void LogicManager::HAND_TrainM_BoardPolice(HAND_PARAMS) {
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 7;
TrainMCall(&LogicManager::CONS_TrainM_DoAnnounceWalk, 4, 9460, "TRA1005", 0);
}
+
break;
case 2:
if (_gameEvents[kProgressFieldCC]) {
@@ -1192,7 +1341,7 @@ void LogicManager::HAND_TrainM_BoardPolice(HAND_PARAMS) {
TrainMCall(&LogicManager::CONS_TrainM_WalkBackToOffice, 0, 0, 0, 0);
break;
default:
- return;
+ break;
}
break;
@@ -1209,7 +1358,6 @@ void LogicManager::HAND_TrainM_BoardPolice(HAND_PARAMS) {
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 8;
TrainMCall(&LogicManager::CONS_TrainM_SaveGame, 1, 0, 0, 0);
-
break;
default:
break;
@@ -1238,111 +1386,190 @@ void LogicManager::HAND_TrainM_InOffice(HAND_PARAMS) {
getCharacterParams(kCharacterTrainM, 8)[5] = 0;
getCharacterCurrentParams(kCharacterTrainM)[5] = 1;
}
+
if (getCharacterParams(kCharacterTrainM, 8)[1]) {
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
TrainMCall(&LogicManager::CONS_TrainM_DoSeizure, 0, 0, 0, 0);
- return;
+ break;
}
- LABEL_33:
+
if (inOffice(kCharacterCath)) {
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 2;
TrainMCall(&LogicManager::CONS_TrainM_KickCathOut, 0, 0, 0, 0);
- return;
+ break;
}
- LABEL_35:
+
if (getCharacterParams(kCharacterTrainM, 8)[6]) {
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 3;
TrainMCall(&LogicManager::CONS_TrainM_BoardPolice, 0, 0, 0, 0);
- return;
- }
- LABEL_37:
- if (getCharacterCurrentParams(kCharacterTrainM)[5])
- goto LABEL_57;
- if (_gameTime <= 1062000 || getCharacterCurrentParams(kCharacterTrainM)[6]) {
- LABEL_41:
- if (_gameTime <= 1089000 || getCharacterCurrentParams(kCharacterTrainM)[7] || (getCharacterCurrentParams(kCharacterTrainM)[7] = 1, getCharacterCurrentParams(kCharacterTrainM)[4])) {
- LABEL_45:
- if (_gameTime <= 1107000 || getCharacterCurrentParams(kCharacterTrainM)[8]) {
- LABEL_48:
- if (_gameTime <= 1134000 || getCharacterCurrentParams(kCharacterTrainM)[9]) {
- LABEL_51:
- if (_gameTime <= 1165500 || getCharacterCurrentParams(kCharacterTrainM)[10]) {
- LABEL_54:
- if (_gameTime <= 1225800 || getCharacterCurrentParams(kCharacterTrainM)[11]) {
- LABEL_57:
- if (!getCharacterParams(kCharacterTrainM, 8)[4] || getCharacterCurrentParams(kCharacterTrainM)[1]) {
- LABEL_14:
- if (!cathHasItem(kItemPassengerList) || getCharacterCurrentParams(kCharacterTrainM)[2] || _gameTime >= 1134000 && _gameTime <= 1156500) {
- LABEL_20:
- if (!getCharacterParams(kCharacterTrainM, 8)[2] || getCharacterCurrentParams(kCharacterTrainM)[3] || _gameTime >= 1134000 && _gameTime <= 1156500) {
- LABEL_26:
- if (getCharacterParams(kCharacterTrainM, 8)[0] && !getCharacterCurrentParams(kCharacterTrainM)[4] && (_gameTime < 1134000 || _gameTime > 1156500)) {
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 16;
- TrainMCall(&LogicManager::CONS_TrainM_DoHWMessage, 0, 0, 0, 0);
- }
- } else {
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 15;
- TrainMCall(&LogicManager::CONS_TrainM_DoCond1ListMessage, 0, 0, 0, 0);
- }
- } else {
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 14;
- TrainMCall(&LogicManager::CONS_TrainM_DoMissingListMessages, 0, 0, 0, 0);
- }
- } else {
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 13;
- TrainMCall(&LogicManager::CONS_TrainM_DoAfterPoliceMessages, 0, 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterTrainM)[11] = 1;
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 12;
- TrainMCall(&LogicManager::CONS_TrainM_Announce, "TRA1004", 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterTrainM)[10] = 1;
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 11;
- TrainMCall(&LogicManager::CONS_TrainM_Announce, "TRA1003", 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterTrainM)[9] = 1;
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 10;
- TrainMCall(&LogicManager::CONS_TrainM_Announce, "TRA1002", 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterTrainM)[8] = 1;
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 9;
- TrainMCall(&LogicManager::CONS_TrainM_Announce, "TRA1001A", 0, 0, 0);
- }
- } else {
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 5;
- TrainMCall(&LogicManager::CONS_TrainM_LeaveOffice, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterCurrentParams(kCharacterTrainM)[5]) {
+ if (getCharacterParams(kCharacterTrainM, 8)[4] && !getCharacterCurrentParams(kCharacterTrainM)[1]) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 13;
+ TrainMCall(&LogicManager::CONS_TrainM_DoAfterPoliceMessages, 0, 0, 0, 0);
+ break;
}
- } else {
+
+ if (cathHasItem(kItemPassengerList) && !getCharacterCurrentParams(kCharacterTrainM)[2] && !(_gameTime >= 1134000 && _gameTime <= 1156500)) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 14;
+ TrainMCall(&LogicManager::CONS_TrainM_DoMissingListMessages, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterTrainM, 8)[2] && !getCharacterCurrentParams(kCharacterTrainM)[3] && !(_gameTime >= 1134000 && _gameTime <= 1156500)) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 15;
+ TrainMCall(&LogicManager::CONS_TrainM_DoCond1ListMessage, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterTrainM, 8)[0] && !getCharacterCurrentParams(kCharacterTrainM)[4] && (_gameTime < 1134000 || _gameTime > 1156500)) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 16;
+ TrainMCall(&LogicManager::CONS_TrainM_DoHWMessage, 0, 0, 0, 0);
+ }
+
+ break;
+ }
+
+ if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterTrainM)[6]) {
getCharacterCurrentParams(kCharacterTrainM)[6] = 1;
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 4;
TrainMCall(&LogicManager::CONS_TrainM_Announce, "TRA1001", 0, 0, 0);
+ break;
}
- break;
- case 9:
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 17;
- TrainMCall(&LogicManager::CONS_TrainM_KickCathOut, msg->param.intParam == 105, 0, 0, 0);
- return;
- case 12:
- getCharacter(kCharacterTrainM).characterPosition.car = kCarBaggage;
- getCharacter(kCharacterTrainM).characterPosition.position = 5000;
+
+ if (_gameTime > 1089000 && !getCharacterCurrentParams(kCharacterTrainM)[7] && !(getCharacterCurrentParams(kCharacterTrainM)[7] = 1, getCharacterCurrentParams(kCharacterTrainM)[4])) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 5;
+ TrainMCall(&LogicManager::CONS_TrainM_LeaveOffice, 0, 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 1107000 && !getCharacterCurrentParams(kCharacterTrainM)[8]) {
+ getCharacterCurrentParams(kCharacterTrainM)[8] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 9;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "TRA1001A", 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 1134000 && !getCharacterCurrentParams(kCharacterTrainM)[9]) {
+ getCharacterCurrentParams(kCharacterTrainM)[9] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 10;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "TRA1002", 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 1165500 && !getCharacterCurrentParams(kCharacterTrainM)[10]) {
+ getCharacterCurrentParams(kCharacterTrainM)[10] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 11;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "TRA1003", 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 1225800 && !getCharacterCurrentParams(kCharacterTrainM)[11]) {
+ getCharacterCurrentParams(kCharacterTrainM)[11] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 12;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "TRA1004", 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterTrainM, 8)[4] && !getCharacterCurrentParams(kCharacterTrainM)[1]) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 13;
+ TrainMCall(&LogicManager::CONS_TrainM_DoAfterPoliceMessages, 0, 0, 0, 0);
+ break;
+ }
+
+ if (cathHasItem(kItemPassengerList) && !getCharacterCurrentParams(kCharacterTrainM)[2] && !(_gameTime >= 1134000 && _gameTime <= 1156500)) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 14;
+ TrainMCall(&LogicManager::CONS_TrainM_DoMissingListMessages, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterTrainM, 8)[2] && !getCharacterCurrentParams(kCharacterTrainM)[3] && !(_gameTime >= 1134000 && _gameTime <= 1156500)) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 15;
+ TrainMCall(&LogicManager::CONS_TrainM_DoCond1ListMessage, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterTrainM, 8)[0] && !getCharacterCurrentParams(kCharacterTrainM)[4] && (_gameTime < 1134000 || _gameTime > 1156500)) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 16;
+ TrainMCall(&LogicManager::CONS_TrainM_DoHWMessage, 0, 0, 0, 0);
+ }
+
+ break;
+ case 9:
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 17;
+ TrainMCall(&LogicManager::CONS_TrainM_KickCathOut, msg->param.intParam == 105, 0, 0, 0);
+ break;
+ case 12:
+ getCharacter(kCharacterTrainM).characterPosition.car = kCarBaggage;
+ getCharacter(kCharacterTrainM).characterPosition.position = 5000;
getCharacter(kCharacterTrainM).characterPosition.location = 0;
- endGraphics(9);
+ endGraphics(kCharacterTrainM);
dropItem(kItem9, 1);
- return;
+ break;
case 18:
switch (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8]) {
case 1:
- goto LABEL_33;
+ if (inOffice(kCharacterCath)) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 2;
+ TrainMCall(&LogicManager::CONS_TrainM_KickCathOut, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
case 2:
- goto LABEL_35;
+ if (getCharacterParams(kCharacterTrainM, 8)[6]) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 3;
+ TrainMCall(&LogicManager::CONS_TrainM_BoardPolice, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
case 3:
- goto LABEL_37;
+ if (getCharacterCurrentParams(kCharacterTrainM)[5]) {
+ if (getCharacterParams(kCharacterTrainM, 8)[4] && !getCharacterCurrentParams(kCharacterTrainM)[1]) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 13;
+ TrainMCall(&LogicManager::CONS_TrainM_DoAfterPoliceMessages, 0, 0, 0, 0);
+ break;
+ }
+
+ if (cathHasItem(kItemPassengerList) && !getCharacterCurrentParams(kCharacterTrainM)[2] && !(_gameTime >= 1134000 && _gameTime <= 1156500)) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 14;
+ TrainMCall(&LogicManager::CONS_TrainM_DoMissingListMessages, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterTrainM, 8)[2] && !getCharacterCurrentParams(kCharacterTrainM)[3] && !(_gameTime >= 1134000 && _gameTime <= 1156500)) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 15;
+ TrainMCall(&LogicManager::CONS_TrainM_DoCond1ListMessage, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterTrainM, 8)[0] && !getCharacterCurrentParams(kCharacterTrainM)[4] && (_gameTime < 1134000 || _gameTime > 1156500)) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 16;
+ TrainMCall(&LogicManager::CONS_TrainM_DoHWMessage, 0, 0, 0, 0);
+ }
+
+ break;
+ }
+
+ if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterTrainM)[6]) {
+ getCharacterCurrentParams(kCharacterTrainM)[6] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 4;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "TRA1001", 0, 0, 0);
+ break;
+ }
+
+ // fall through
case 4:
- goto LABEL_41;
+ if (_gameTime > 1089000 && !getCharacterCurrentParams(kCharacterTrainM)[7] && !(getCharacterCurrentParams(kCharacterTrainM)[7] = 1, getCharacterCurrentParams(kCharacterTrainM)[4])) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 5;
+ TrainMCall(&LogicManager::CONS_TrainM_LeaveOffice, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
case 5:
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 6;
TrainMCall(&LogicManager::CONS_TrainM_DoWalk, 3, 2000, 0, 0);
@@ -1356,33 +1583,94 @@ void LogicManager::HAND_TrainM_InOffice(HAND_PARAMS) {
TrainMCall(&LogicManager::CONS_TrainM_WalkBackToOffice, 0, 0, 0, 0);
break;
case 8:
- goto LABEL_45;
+ if (_gameTime > 1107000 && !getCharacterCurrentParams(kCharacterTrainM)[8]) {
+ getCharacterCurrentParams(kCharacterTrainM)[8] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 9;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "TRA1001A", 0, 0, 0);
+ break;
+ }
+
+ // fall through
case 9:
- goto LABEL_48;
+ if (_gameTime > 1134000 && !getCharacterCurrentParams(kCharacterTrainM)[9]) {
+ getCharacterCurrentParams(kCharacterTrainM)[9] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 10;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "TRA1002", 0, 0, 0);
+ break;
+ }
+
+ // fall through
case 10:
- goto LABEL_51;
+ if (_gameTime > 1165500 && !getCharacterCurrentParams(kCharacterTrainM)[10]) {
+ getCharacterCurrentParams(kCharacterTrainM)[10] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 11;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "TRA1003", 0, 0, 0);
+ break;
+ }
+
+ // fall through
case 11:
- goto LABEL_54;
+ if (_gameTime > 1225800 && !getCharacterCurrentParams(kCharacterTrainM)[11]) {
+ getCharacterCurrentParams(kCharacterTrainM)[11] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 12;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "TRA1004", 0, 0, 0);
+ break;
+ }
+
+ // fall through
case 12:
- goto LABEL_57;
+ if (getCharacterParams(kCharacterTrainM, 8)[4] && !getCharacterCurrentParams(kCharacterTrainM)[1]) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 13;
+ TrainMCall(&LogicManager::CONS_TrainM_DoAfterPoliceMessages, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
case 13:
- getCharacterCurrentParams(kCharacterTrainM)[1] = 1;
- goto LABEL_14;
+ if (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] == 13) {
+ getCharacterCurrentParams(kCharacterTrainM)[1] = 1;
+ }
+
+ if (cathHasItem(kItemPassengerList) && !getCharacterCurrentParams(kCharacterTrainM)[2] && !(_gameTime >= 1134000 && _gameTime <= 1156500)) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 14;
+ TrainMCall(&LogicManager::CONS_TrainM_DoMissingListMessages, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
case 14:
- getCharacterCurrentParams(kCharacterTrainM)[2] = 1;
- goto LABEL_20;
+ if (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] == 14) {
+ getCharacterCurrentParams(kCharacterTrainM)[2] = 1;
+ }
+
+ if (getCharacterParams(kCharacterTrainM, 8)[2] && !getCharacterCurrentParams(kCharacterTrainM)[3] && !(_gameTime >= 1134000 && _gameTime <= 1156500)) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 15;
+ TrainMCall(&LogicManager::CONS_TrainM_DoCond1ListMessage, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
case 15:
- getCharacterCurrentParams(kCharacterTrainM)[3] = 1;
- goto LABEL_26;
+ if (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] == 15) {
+ getCharacterCurrentParams(kCharacterTrainM)[3] = 1;
+ }
+
+ if (getCharacterParams(kCharacterTrainM, 8)[0] && !getCharacterCurrentParams(kCharacterTrainM)[4] && (_gameTime < 1134000 || _gameTime > 1156500)) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 16;
+ TrainMCall(&LogicManager::CONS_TrainM_DoHWMessage, 0, 0, 0, 0);
+ }
+
+ break;
case 16:
getCharacterCurrentParams(kCharacterTrainM)[4] = 1;
break;
default:
- return;
+ break;
}
- return;
+
+ break;
default:
- return;
+ break;
}
}
@@ -1397,9 +1685,11 @@ void LogicManager::CONS_TrainM_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_StartPart2(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_TrainM_InPart2(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
endGraphics(kCharacterTrainM);
getCharacter(kCharacterTrainM).characterPosition.car = kCarBaggage;
getCharacter(kCharacterTrainM).characterPosition.position = 5000;
@@ -1410,6 +1700,9 @@ void LogicManager::HAND_TrainM_StartPart2(HAND_PARAMS) {
setDoor(105, kCharacterTrainM, 0, 0, 9);
getCharacterParams(kCharacterTrainM, 8)[2] = 0;
+ break;
+ default:
+ break;
}
}
@@ -1424,79 +1717,136 @@ void LogicManager::CONS_TrainM_InPart2(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_InPart2(HAND_PARAMS) {
- if (msg->action <= 18) {
- switch (msg->action) {
- case 0:
- if (inOffice(kCharacterCath)) {
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
- TrainMCall(&LogicManager::CONS_TrainM_KickCathOut, 0, 0, 0, 0);
- return;
+ switch (msg->action) {
+ case 0:
+ if (inOffice(kCharacterCath)) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
+ TrainMCall(&LogicManager::CONS_TrainM_KickCathOut, 0, 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 1818900 && !getCharacterCurrentParams(kCharacterTrainM)[0]) {
+ getCharacterCurrentParams(kCharacterTrainM)[0] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 2;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra2177", 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterCurrentParams(kCharacterTrainM)[1] == 0x7FFFFFFF || !_gameTime) {
+ if (getCharacterParams(kCharacterTrainM, 8)[2]) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 7;
+ TrainMCall(&LogicManager::CONS_TrainM_DoCond1ListMessage, 0, 0, 0, 0);
}
- LABEL_11:
+ }
+
+ if (_gameTime > 1836000) {
+ getCharacterCurrentParams(kCharacterTrainM)[1] = 0x7FFFFFFF;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 3;
+ TrainMCall(&LogicManager::CONS_TrainM_LeaveOffice, 0, 0, 0, 0);
+ break;
+ }
+
+ if (!cathInCorridor(kCarRedSleeping) || !getCharacterCurrentParams(kCharacterTrainM)[1]) {
+ getCharacterCurrentParams(kCharacterTrainM)[1] = _gameTime;
+ if (!_gameTime) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 3;
+ TrainMCall(&LogicManager::CONS_TrainM_LeaveOffice, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterTrainM)[1] >= _gameTime) {
+ if (getCharacterParams(kCharacterTrainM, 8)[2]) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 7;
+ TrainMCall(&LogicManager::CONS_TrainM_DoCond1ListMessage, 0, 0, 0, 0);
+ }
+ } else {
+ getCharacterCurrentParams(kCharacterTrainM)[1] = 0x7FFFFFFF;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 3;
+ TrainMCall(&LogicManager::CONS_TrainM_LeaveOffice, 0, 0, 0, 0);
+ }
+
+ break;
+ case 9:
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 8;
+ TrainMCall(&LogicManager::CONS_TrainM_KickCathOut, msg->param.intParam == 105, 0, 0, 0);
+ break;
+ case 12:
+ dropItem(kItem9, 1);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8]) {
+ case 1:
if (_gameTime > 1818900 && !getCharacterCurrentParams(kCharacterTrainM)[0]) {
getCharacterCurrentParams(kCharacterTrainM)[0] = 1;
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 2;
TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra2177", 0, 0, 0);
- return;
+ break;
}
- LABEL_14:
- if (getCharacterCurrentParams(kCharacterTrainM)[1] == 0x7FFFFFFF || !_gameTime)
- goto LABEL_23;
- if (_gameTime > 1836000)
- goto LABEL_21;
+
+ // fall through
+ case 2:
+ if (getCharacterCurrentParams(kCharacterTrainM)[1] == 0x7FFFFFFF || !_gameTime) {
+ if (getCharacterParams(kCharacterTrainM, 8)[2]) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 7;
+ TrainMCall(&LogicManager::CONS_TrainM_DoCond1ListMessage, 0, 0, 0, 0);
+ }
+ }
+
+ if (_gameTime > 1836000) {
+ getCharacterCurrentParams(kCharacterTrainM)[1] = 0x7FFFFFFF;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 3;
+ TrainMCall(&LogicManager::CONS_TrainM_LeaveOffice, 0, 0, 0, 0);
+ break;
+ }
+
if (!cathInCorridor(kCarRedSleeping) || !getCharacterCurrentParams(kCharacterTrainM)[1]) {
getCharacterCurrentParams(kCharacterTrainM)[1] = _gameTime;
- if (!_gameTime)
- goto LABEL_22;
+ if (!_gameTime) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 3;
+ TrainMCall(&LogicManager::CONS_TrainM_LeaveOffice, 0, 0, 0, 0);
+ break;
+ }
}
+
if (getCharacterCurrentParams(kCharacterTrainM)[1] >= _gameTime) {
- LABEL_23:
if (getCharacterParams(kCharacterTrainM, 8)[2]) {
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 7;
TrainMCall(&LogicManager::CONS_TrainM_DoCond1ListMessage, 0, 0, 0, 0);
}
} else {
- LABEL_21:
getCharacterCurrentParams(kCharacterTrainM)[1] = 0x7FFFFFFF;
- LABEL_22:
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 3;
TrainMCall(&LogicManager::CONS_TrainM_LeaveOffice, 0, 0, 0, 0);
}
+
break;
- case 9:
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 8;
- TrainMCall(&LogicManager::CONS_TrainM_KickCathOut, msg->param.intParam == 105, 0, 0, 0);
- return;
- case 12:
- dropItem(kItem9, 1);
- return;
- case 18:
- switch (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8]) {
- case 1:
- goto LABEL_11;
- case 2:
- goto LABEL_14;
- case 3:
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 4;
- TrainMCall(&LogicManager::CONS_TrainM_DoWalk, 4, 2000, 0, 0);
- break;
- case 4:
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 5;
- TrainMCall(&LogicManager::CONS_TrainM_DoCond, 4, "TRA2100", 0, 0);
- break;
- case 5:
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 6;
- TrainMCall(&LogicManager::CONS_TrainM_WalkBackToOffice, 0, 0, 0, 0);
- break;
- case 6:
- goto LABEL_23;
- default:
- return;
+ case 3:
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 4;
+ TrainMCall(&LogicManager::CONS_TrainM_DoWalk, 4, 2000, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 5;
+ TrainMCall(&LogicManager::CONS_TrainM_DoCond, 4, "TRA2100", 0, 0);
+ break;
+ case 5:
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 6;
+ TrainMCall(&LogicManager::CONS_TrainM_WalkBackToOffice, 0, 0, 0, 0);
+ break;
+ case 6:
+ if (getCharacterParams(kCharacterTrainM, 8)[2]) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 7;
+ TrainMCall(&LogicManager::CONS_TrainM_DoCond1ListMessage, 0, 0, 0, 0);
}
- return;
+
+ break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1511,9 +1861,11 @@ void LogicManager::CONS_TrainM_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_StartPart3(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_TrainM_OnRearPlatform(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
endGraphics(kCharacterTrainM);
getCharacter(kCharacterTrainM).characterPosition.car = kCarRestaurant;
getCharacter(kCharacterTrainM).characterPosition.position = 540;
@@ -1526,6 +1878,9 @@ void LogicManager::HAND_TrainM_StartPart3(HAND_PARAMS) {
getCharacterParams(kCharacterTrainM, 8)[3] = 0;
getCharacterParams(kCharacterTrainM, 8)[2] = 0;
+ break;
+ default:
+ break;
}
}
@@ -1542,10 +1897,12 @@ void LogicManager::CONS_TrainM_VisitCond2(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_VisitCond2(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
TrainMCall(&LogicManager::CONS_TrainM_LeaveOffice, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8]) {
case 1:
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 2;
@@ -1565,8 +1922,12 @@ void LogicManager::HAND_TrainM_VisitCond2(HAND_PARAMS) {
fedEx(kCharacterTrainM, kCharacterTrainM, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1581,10 +1942,12 @@ void LogicManager::CONS_TrainM_DoDogProblem(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_DoDogProblem(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
TrainMCall(&LogicManager::CONS_TrainM_LeaveOffice, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8]) {
case 1:
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 2;
@@ -1608,8 +1971,12 @@ void LogicManager::HAND_TrainM_DoDogProblem(HAND_PARAMS) {
fedEx(kCharacterTrainM, kCharacterTrainM, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1624,13 +1991,16 @@ void LogicManager::CONS_TrainM_AnnounceVienna(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_AnnounceVienna(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (_gameTime > 2263500 && !getCharacterCurrentParams(kCharacterTrainM)[0]) {
getCharacterCurrentParams(kCharacterTrainM)[0] = 1;
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 5;
TrainMCall(&LogicManager::CONS_TrainM_DoAnnounceWalk, 4, 9460, "TRA3006", 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
setDoor(104, kCharacterCath, 0, 0, 9);
setDoor(105, kCharacterCath, 0, 0, 9);
@@ -1643,7 +2013,7 @@ void LogicManager::HAND_TrainM_AnnounceVienna(HAND_PARAMS) {
getCharacter(kCharacterTrainM).characterPosition.position = 5900;
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
TrainMCall(&LogicManager::CONS_TrainM_WaitRCClear, 0, 0, 0, 0);
- return;
+ break;
} else {
playNIS(kEventVergesCanIHelpYou);
}
@@ -1656,7 +2026,8 @@ void LogicManager::HAND_TrainM_AnnounceVienna(HAND_PARAMS) {
getCharacter(kCharacterTrainM).characterPosition.position = 5900;
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
TrainMCall(&LogicManager::CONS_TrainM_WaitRCClear, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8]) {
case 1:
getCharacter(kCharacterTrainM).characterPosition.position = 5800;
@@ -1668,9 +2039,12 @@ void LogicManager::HAND_TrainM_AnnounceVienna(HAND_PARAMS) {
case 2:
if (!whoRunningDialog(kCharacterTrainM))
playDialog(kCharacterTrainM, "TRA3004", -1, 0);
+
startSeqOtis(kCharacterTrainM, "813DS");
+
if (inDiningRoom(kCharacterCath))
advanceFrame(kCharacterTrainM);
+
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 3;
TrainMCall(&LogicManager::CONS_TrainM_FinishSeqOtis, 0, 0, 0, 0);
break;
@@ -1693,6 +2067,10 @@ void LogicManager::HAND_TrainM_AnnounceVienna(HAND_PARAMS) {
default:
break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1707,10 +2085,12 @@ void LogicManager::CONS_TrainM_OnRearPlatform(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_OnRearPlatform(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
TrainMCall(&LogicManager::CONS_TrainM_WaitRCClear, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8]) {
case 1:
getCharacter(kCharacterTrainM).characterPosition.position = 1540;
@@ -1751,115 +2131,187 @@ void LogicManager::HAND_TrainM_OnRearPlatform(HAND_PARAMS) {
case 6:
CONS_TrainM_InPart3(0, 0, 0, 0);
break;
- default:
- return;
+ default:
+ break;
+ }
+
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_TrainM_InPart3(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterTrainM).callParams[getCharacter(kCharacterTrainM).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterTrainM, &LogicManager::HAND_TrainM_InPart3);
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall] = 34;
+
+ params->clear();
+
+ fedEx(kCharacterTrainM, kCharacterTrainM, 12, 0);
+}
+
+void LogicManager::HAND_TrainM_InPart3(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (inOffice(kCharacterCath)) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
+ TrainMCall(&LogicManager::CONS_TrainM_KickCathOut, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterTrainM, 8)[3]) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 2;
+ TrainMCall(&LogicManager::CONS_TrainM_DoDogProblem, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterTrainM, 8)[2]) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 3;
+ TrainMCall(&LogicManager::CONS_TrainM_DoCond1ListMessage, 0, 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 1971000 && !getCharacterCurrentParams(kCharacterTrainM)[0]) {
+ getCharacterCurrentParams(kCharacterTrainM)[0] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 4;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra3001", 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 1998000 && !getCharacterCurrentParams(kCharacterTrainM)[1]) {
+ getCharacterCurrentParams(kCharacterTrainM)[1] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 5;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra3010a", 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2016000 && !getCharacterCurrentParams(kCharacterTrainM)[2]) {
+ getCharacterCurrentParams(kCharacterTrainM)[2] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 6;
+ TrainMCall(&LogicManager::CONS_TrainM_VisitKron, 0, 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2070000 && !getCharacterCurrentParams(kCharacterTrainM)[3]) {
+ getCharacterCurrentParams(kCharacterTrainM)[3] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 7;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra3002", 0, 0, 0);
+ break;
}
- }
-}
-void LogicManager::CONS_TrainM_InPart3(CONS_PARAMS) {
- CharacterCallParams *params = &getCharacter(kCharacterTrainM).callParams[getCharacter(kCharacterTrainM).currentCall];
- _engine->getMessageManager()->setMessageHandle(kCharacterTrainM, &LogicManager::HAND_TrainM_InPart3);
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall] = 34;
+ if (_gameTime > 2142000 && !getCharacterCurrentParams(kCharacterTrainM)[4]) {
+ getCharacterCurrentParams(kCharacterTrainM)[4] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 8;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra3003", 0, 0, 0);
+ break;
+ }
- params->clear();
+ if (_gameTime > 2173500 && !getCharacterCurrentParams(kCharacterTrainM)[5]) {
+ getCharacterCurrentParams(kCharacterTrainM)[5] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 9;
+ TrainMCall(&LogicManager::CONS_TrainM_VisitCond2, "Tra3012", 0, 0, 0);
+ break;
+ }
- fedEx(kCharacterTrainM, kCharacterTrainM, 12, 0);
-}
+ if (_gameTime > 2218500 && !getCharacterCurrentParams(kCharacterTrainM)[6]) {
+ getCharacterCurrentParams(kCharacterTrainM)[6] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 10;
+ TrainMCall(&LogicManager::CONS_TrainM_AnnounceVienna, 0, 0, 0, 0);
+ }
-void LogicManager::HAND_TrainM_InPart3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 9) {
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 11;
- TrainMCall(&LogicManager::CONS_TrainM_KickCathOut, msg->param.intParam == 105, 0, 0, 0);
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8]) {
- case 1:
- goto LABEL_9;
- case 2:
- goto LABEL_11;
- case 3:
- goto LABEL_13;
- case 4:
- goto LABEL_16;
- case 5:
- goto LABEL_19;
- case 6:
- goto LABEL_22;
- case 7:
- goto LABEL_25;
- case 8:
- goto LABEL_28;
- case 9:
- goto LABEL_31;
- default:
- return;
+ break;
+ case 9:
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 11;
+ TrainMCall(&LogicManager::CONS_TrainM_KickCathOut, (msg->param.intParam == 105) ? 1 : 0, 0, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8]) {
+ case 1:
+ if (getCharacterParams(kCharacterTrainM, 8)[3]) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 2;
+ TrainMCall(&LogicManager::CONS_TrainM_DoDogProblem, 0, 0, 0, 0);
+ break;
}
- }
- } else if (inOffice(kCharacterCath)) {
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
- TrainMCall(&LogicManager::CONS_TrainM_KickCathOut, 0, 0, 0, 0);
- } else {
- LABEL_9:
- if (getCharacterParams(kCharacterTrainM, 8)[3]) {
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 2;
- TrainMCall(&LogicManager::CONS_TrainM_DoDogProblem, 0, 0, 0, 0);
- } else {
- LABEL_11:
+
+ // fall through
+ case 2:
if (getCharacterParams(kCharacterTrainM, 8)[2]) {
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 3;
TrainMCall(&LogicManager::CONS_TrainM_DoCond1ListMessage, 0, 0, 0, 0);
- } else {
- LABEL_13:
- if (_gameTime <= 1971000 || getCharacterCurrentParams(kCharacterTrainM)[0]) {
- LABEL_16:
- if (_gameTime <= 1998000 || getCharacterCurrentParams(kCharacterTrainM)[1]) {
- LABEL_19:
- if (_gameTime <= 2016000 || getCharacterCurrentParams(kCharacterTrainM)[2]) {
- LABEL_22:
- if (_gameTime <= 2070000 || getCharacterCurrentParams(kCharacterTrainM)[3]) {
- LABEL_25:
- if (_gameTime <= 2142000 || getCharacterCurrentParams(kCharacterTrainM)[4]) {
- LABEL_28:
- if (_gameTime <= 2173500 || getCharacterCurrentParams(kCharacterTrainM)[5]) {
- LABEL_31:
- if (_gameTime > 2218500 && !getCharacterCurrentParams(kCharacterTrainM)[6]) {
- getCharacterCurrentParams(kCharacterTrainM)[6] = 1;
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 10;
- TrainMCall(&LogicManager::CONS_TrainM_AnnounceVienna, 0, 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterTrainM)[5] = 1;
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 9;
- TrainMCall(&LogicManager::CONS_TrainM_VisitCond2, "Tra3012", 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterTrainM)[4] = 1;
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 8;
- TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra3003", 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterTrainM)[3] = 1;
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 7;
- TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra3002", 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterTrainM)[2] = 1;
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 6;
- TrainMCall(&LogicManager::CONS_TrainM_VisitKron, 0, 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterTrainM)[1] = 1;
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 5;
- TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra3010a", 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterTrainM)[0] = 1;
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 4;
- TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra3001", 0, 0, 0);
- }
+ break;
+ }
+
+ // fall through
+ case 3:
+ if (_gameTime > 1971000 && !getCharacterCurrentParams(kCharacterTrainM)[0]) {
+ getCharacterCurrentParams(kCharacterTrainM)[0] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 4;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra3001", 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 4:
+ if (_gameTime > 1998000 && !getCharacterCurrentParams(kCharacterTrainM)[1]) {
+ getCharacterCurrentParams(kCharacterTrainM)[1] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 5;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra3010a", 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 5:
+ if (_gameTime > 2016000 && !getCharacterCurrentParams(kCharacterTrainM)[2]) {
+ getCharacterCurrentParams(kCharacterTrainM)[2] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 6;
+ TrainMCall(&LogicManager::CONS_TrainM_VisitKron, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 6:
+ if (_gameTime > 2070000 && !getCharacterCurrentParams(kCharacterTrainM)[3]) {
+ getCharacterCurrentParams(kCharacterTrainM)[3] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 7;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra3002", 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 7:
+ if (_gameTime > 2142000 && !getCharacterCurrentParams(kCharacterTrainM)[4]) {
+ getCharacterCurrentParams(kCharacterTrainM)[4] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 8;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra3003", 0, 0, 0);
+ break;
}
+
+ // fall through
+ case 8:
+ if (_gameTime > 2173500 && !getCharacterCurrentParams(kCharacterTrainM)[5]) {
+ getCharacterCurrentParams(kCharacterTrainM)[5] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 9;
+ TrainMCall(&LogicManager::CONS_TrainM_VisitCond2, "Tra3012", 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 9:
+ if (_gameTime > 2218500 && !getCharacterCurrentParams(kCharacterTrainM)[6]) {
+ getCharacterCurrentParams(kCharacterTrainM)[6] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 10;
+ TrainMCall(&LogicManager::CONS_TrainM_AnnounceVienna, 0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1874,10 +2326,12 @@ void LogicManager::CONS_TrainM_VisitKron(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_VisitKron(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
TrainMCall(&LogicManager::CONS_TrainM_LeaveOffice, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8]) {
case 1:
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 2;
@@ -1909,6 +2363,10 @@ void LogicManager::HAND_TrainM_VisitKron(HAND_PARAMS) {
default:
break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1923,9 +2381,11 @@ void LogicManager::CONS_TrainM_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_StartPart4(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_TrainM_InOffice4(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
endGraphics(kCharacterTrainM);
getCharacter(kCharacterTrainM).characterPosition.car = kCarBaggage;
@@ -1939,6 +2399,9 @@ void LogicManager::HAND_TrainM_StartPart4(HAND_PARAMS) {
getCharacterParams(kCharacterTrainM, 8)[2] = 0;
getCharacterParams(kCharacterTrainM, 8)[5] = 0;
+ break;
+ default:
+ break;
}
}
@@ -1953,106 +2416,172 @@ void LogicManager::CONS_TrainM_InOffice4(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_InOffice4(HAND_PARAMS) {
- if (msg->action <= 18) {
- switch (msg->action) {
- case 0:
- if (inOffice(kCharacterCath)) {
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
- TrainMCall(&LogicManager::CONS_TrainM_KickCathOut, 0, 0, 0, 0);
- return;
+ switch (msg->action) {
+ case 0:
+ if (inOffice(kCharacterCath)) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
+ TrainMCall(&LogicManager::CONS_TrainM_KickCathOut, 0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterParams(kCharacterTrainM, 8)[5]) {
+ if (_gameTime > 2538000 && !getCharacterCurrentParams(kCharacterTrainM)[6]) {
+ getCharacterCurrentParams(kCharacterTrainM)[6] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 9;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra4005", 0, 0, 0);
}
- LABEL_8:
- if (getCharacterParams(kCharacterTrainM, 8)[5])
- goto LABEL_29;
- if (getCharacterParams(kCharacterTrainM, 8)[2]) {
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 2;
- TrainMCall(&LogicManager::CONS_TrainM_DoCond1ListMessage, 0, 0, 0, 0);
- } else {
- LABEL_11:
- if (_gameTime <= 2349000 || getCharacterCurrentParams(kCharacterTrainM)[0]) {
- LABEL_14:
- if (_gameTime <= 2378700 || getCharacterCurrentParams(kCharacterTrainM)[1]) {
- LABEL_17:
- if (_gameTime <= 2403000 || getCharacterCurrentParams(kCharacterTrainM)[2]) {
- LABEL_20:
- if (_gameTime <= 2414700 || getCharacterCurrentParams(kCharacterTrainM)[3]) {
- LABEL_23:
- if (_gameTime <= 2484000 || getCharacterCurrentParams(kCharacterTrainM)[4]) {
- LABEL_26:
- if (_gameTime <= 2511000 || getCharacterCurrentParams(kCharacterTrainM)[5]) {
- LABEL_29:
- if (_gameTime > 2538000 && !getCharacterCurrentParams(kCharacterTrainM)[6]) {
- getCharacterCurrentParams(kCharacterTrainM)[6] = 1;
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 9;
- TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra4005", 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterTrainM)[5] = 1;
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 8;
- TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra4004", 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterTrainM)[4] = 1;
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 7;
- TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra4003", 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterTrainM)[3] = 1;
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 6;
- TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra4002", 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterTrainM)[2] = 1;
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 5;
- TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra1001A", 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterTrainM)[1] = 1;
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 4;
- TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra4001", 0, 0, 0);
- }
- } else {
- getCharacterCurrentParams(kCharacterTrainM)[0] = 1;
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 3;
- TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra1001", 0, 0, 0);
+
+ break;
+ }
+
+ if (getCharacterParams(kCharacterTrainM, 8)[2]) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 2;
+ TrainMCall(&LogicManager::CONS_TrainM_DoCond1ListMessage, 0, 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2349000 && !getCharacterCurrentParams(kCharacterTrainM)[0]) {
+ getCharacterCurrentParams(kCharacterTrainM)[0] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 3;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra1001", 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2378700 && !getCharacterCurrentParams(kCharacterTrainM)[1]) {
+ getCharacterCurrentParams(kCharacterTrainM)[1] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 4;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra4001", 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2403000 && !getCharacterCurrentParams(kCharacterTrainM)[2]) {
+ getCharacterCurrentParams(kCharacterTrainM)[2] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 5;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra1001A", 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2414700 && !getCharacterCurrentParams(kCharacterTrainM)[3]) {
+ getCharacterCurrentParams(kCharacterTrainM)[3] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 6;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra4002", 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2484000 && !getCharacterCurrentParams(kCharacterTrainM)[4]) {
+ getCharacterCurrentParams(kCharacterTrainM)[4] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 7;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra4003", 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2511000 && !getCharacterCurrentParams(kCharacterTrainM)[5]) {
+ getCharacterCurrentParams(kCharacterTrainM)[5] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 8;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra4004", 0, 0, 0);
+ break;
+ }
+
+ if (_gameTime > 2538000 && !getCharacterCurrentParams(kCharacterTrainM)[6]) {
+ getCharacterCurrentParams(kCharacterTrainM)[6] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 9;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra4005", 0, 0, 0);
+ }
+
+ break;
+ case 9:
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 10;
+ TrainMCall(&LogicManager::CONS_TrainM_KickCathOut, (msg->param.intParam == 105) ? 1 : 0, 0, 0, 0);
+ break;
+ case 12:
+ getCharacter(kCharacterTrainM).characterPosition.car = kCarBaggage;
+ getCharacter(kCharacterTrainM).characterPosition.position = 5000;
+ getCharacter(kCharacterTrainM).characterPosition.location = 0;
+ dropItem(kItem9, 1);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8]) {
+ case 1:
+ if (getCharacterParams(kCharacterTrainM, 8)[5]) {
+ if (_gameTime > 2538000 && !getCharacterCurrentParams(kCharacterTrainM)[6]) {
+ getCharacterCurrentParams(kCharacterTrainM)[6] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 9;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra4005", 0, 0, 0);
}
+
+ break;
}
- break;
- case 9:
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 10;
- TrainMCall(&LogicManager::CONS_TrainM_KickCathOut, msg->param.intParam == 105, 0, 0, 0);
- return;
- case 12:
- getCharacter(kCharacterTrainM).characterPosition.car = kCarBaggage;
- getCharacter(kCharacterTrainM).characterPosition.position = 5000;
- getCharacter(kCharacterTrainM).characterPosition.location = 0;
- dropItem(kItem9, 1);
- return;
- case 18:
- switch (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8]) {
- case 1:
- goto LABEL_8;
- case 2:
- goto LABEL_11;
- case 3:
- goto LABEL_14;
- case 4:
- goto LABEL_17;
- case 5:
- goto LABEL_20;
- case 6:
- goto LABEL_23;
- case 7:
- goto LABEL_26;
- case 8:
- goto LABEL_29;
- default:
- return;
+
+ // fall through
+ case 2:
+ if (_gameTime > 2349000 && !getCharacterCurrentParams(kCharacterTrainM)[0]) {
+ getCharacterCurrentParams(kCharacterTrainM)[0] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 3;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra1001", 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 3:
+ if (_gameTime > 2378700 && !getCharacterCurrentParams(kCharacterTrainM)[1]) {
+ getCharacterCurrentParams(kCharacterTrainM)[1] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 4;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra4001", 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 4:
+ if (_gameTime > 2403000 && !getCharacterCurrentParams(kCharacterTrainM)[2]) {
+ getCharacterCurrentParams(kCharacterTrainM)[2] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 5;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra1001A", 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 5:
+ if (_gameTime > 2414700 && !getCharacterCurrentParams(kCharacterTrainM)[3]) {
+ getCharacterCurrentParams(kCharacterTrainM)[3] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 6;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra4002", 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 6:
+ if (_gameTime > 2484000 && !getCharacterCurrentParams(kCharacterTrainM)[4]) {
+ getCharacterCurrentParams(kCharacterTrainM)[4] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 7;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra4003", 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 7:
+ if (_gameTime > 2511000 && !getCharacterCurrentParams(kCharacterTrainM)[5]) {
+ getCharacterCurrentParams(kCharacterTrainM)[5] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 8;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra4004", 0, 0, 0);
+ break;
+ }
+
+ // fall through
+ case 8:
+ if (_gameTime > 2538000 && !getCharacterCurrentParams(kCharacterTrainM)[6]) {
+ getCharacterCurrentParams(kCharacterTrainM)[6] = 1;
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 9;
+ TrainMCall(&LogicManager::CONS_TrainM_Announce, "Tra4005", 0, 0, 0);
}
- return;
+
+ break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -2093,6 +2622,8 @@ void LogicManager::HAND_TrainM_Conferring(HAND_PARAMS) {
case 3:
CONS_TrainM_InOffice4(0, 0, 0, 0);
break;
+ default:
+ break;
}
break;
@@ -2101,6 +2632,8 @@ void LogicManager::HAND_TrainM_Conferring(HAND_PARAMS) {
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
TrainMCall(&LogicManager::CONS_TrainM_DoWalk, 4, 540, 0, 0);
break;
+ default:
+ break;
}
}
@@ -2115,9 +2648,11 @@ void LogicManager::CONS_TrainM_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_StartPart5(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
CONS_TrainM_Prisoner(0, 0, 0, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
endGraphics(kCharacterTrainM);
getCharacter(kCharacterTrainM).characterPosition.location = 1;
getCharacter(kCharacterTrainM).characterPosition.position = 3650;
@@ -2126,6 +2661,9 @@ void LogicManager::HAND_TrainM_StartPart5(HAND_PARAMS) {
getCharacter(kCharacterTrainM).clothes = 0;
setDoor(104, kCharacterCath, 0, 0, 9);
setDoor(105, kCharacterCath, 0, 0, 9);
+ break;
+ default:
+ break;
}
}
@@ -2155,8 +2693,7 @@ void LogicManager::HAND_TrainM_Prisoner(HAND_PARAMS) {
setDoor(65, kCharacterCath, 0, 0, 1);
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
- TrainMCall(&LogicManager::CONS_TrainM_SaveGame, 2, 95, 0, 0);
-
+ TrainMCall(&LogicManager::CONS_TrainM_SaveGame, 2, kEventCathFreePassengers, 0, 0);
break;
case 12:
takeItem(kItem9);
@@ -2172,7 +2709,7 @@ void LogicManager::HAND_TrainM_Prisoner(HAND_PARAMS) {
break;
default:
- return;
+ break;
}
}
@@ -2187,7 +2724,8 @@ void LogicManager::CONS_TrainM_InCharge(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_InCharge(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
setModel(55, 3);
getCharacter(kCharacterTrainM).characterPosition.car = kCarRedSleeping;
@@ -2196,7 +2734,8 @@ void LogicManager::HAND_TrainM_InCharge(HAND_PARAMS) {
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 1;
TrainMCall(&LogicManager::CONS_TrainM_DoAnnounceWalk, 4, 2000, "Tra5001", 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8]) {
case 1:
case 2:
@@ -2222,8 +2761,12 @@ void LogicManager::HAND_TrainM_InCharge(HAND_PARAMS) {
CONS_TrainM_Disappear(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -2238,8 +2781,13 @@ void LogicManager::CONS_TrainM_Disappear(CONS_PARAMS) {
}
void LogicManager::HAND_TrainM_Disappear(HAND_PARAMS) {
- if (msg->action == 12)
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterTrainM);
+ break;
+ default:
+ break;
+ }
}
void (LogicManager::*LogicManager::_functionsTrainM[])(HAND_PARAMS) = {
Commit: f0db0084ded743f58c5d4be6c3dbd6c5a4ad4618
https://github.com/scummvm/scummvm/commit/f0db0084ded743f58c5d4be6c3dbd6c5a4ad4618
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Madame logic
Changed paths:
engines/lastexpress/characters/madame.cpp
diff --git a/engines/lastexpress/characters/madame.cpp b/engines/lastexpress/characters/madame.cpp
index e9e99b864a1..706d5ef6a3c 100644
--- a/engines/lastexpress/characters/madame.cpp
+++ b/engines/lastexpress/characters/madame.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_Madame(int chapter) {
CONS_Madame_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -69,18 +69,24 @@ void LogicManager::CONS_Madame_DebugWalks(CONS_PARAMS) {
}
void LogicManager::HAND_Madame_DebugWalks(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterMadame).characterPosition.position = 0;
- getCharacter(kCharacterMadame).characterPosition.location = 0;
- getCharacter(kCharacterMadame).characterPosition.car = kCarGreenSleeping;
- getCharacterCurrentParams(kCharacterMadame)[0] = 10000;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterMadame, kCarGreenSleeping, getCharacterCurrentParams(kCharacterMadame)[0])) {
+ if (getCharacterCurrentParams(kCharacterMadame)[0] == 10000)
+ getCharacterCurrentParams(kCharacterMadame)[0] = 0;
+ else
+ getCharacterCurrentParams(kCharacterMadame)[0] = 10000;
}
- } else if (walk(kCharacterMadame, kCarGreenSleeping, getCharacterCurrentParams(kCharacterMadame)[0])) {
- if (getCharacterCurrentParams(kCharacterMadame)[0] == 10000)
- getCharacterCurrentParams(kCharacterMadame)[0] = 0;
- else
- getCharacterCurrentParams(kCharacterMadame)[0] = 10000;
+
+ break;
+ case 12:
+ getCharacter(kCharacterMadame).characterPosition.position = 0;
+ getCharacter(kCharacterMadame).characterPosition.location = 0;
+ getCharacter(kCharacterMadame).characterPosition.car = kCarGreenSleeping;
+ getCharacterCurrentParams(kCharacterMadame)[0] = 10000;
+ break;
+ default:
+ break;
}
}
@@ -97,12 +103,17 @@ void LogicManager::CONS_Madame_DoDialog(CONS_PARAMS) {
}
void LogicManager::HAND_Madame_DoDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterMadame).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMadame, _functionsMadame[getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall]]);
fedEx(kCharacterMadame, kCharacterMadame, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterMadame, (char *)&getCharacterCurrentParams(kCharacterMadame)[0], -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -119,12 +130,17 @@ void LogicManager::CONS_Madame_DoSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Madame_DoSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
getCharacter(kCharacterMadame).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMadame, _functionsMadame[getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall]]);
fedEx(kCharacterMadame, kCharacterMadame, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterMadame, (char *)&getCharacterCurrentParams(kCharacterMadame)[0]);
+ break;
+ default:
+ break;
}
}
@@ -141,11 +157,12 @@ void LogicManager::CONS_Madame_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_Madame_DoWait(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterMadame)[1] || (getCharacterCurrentParams(kCharacterMadame)[1] = _gameTime + getCharacterCurrentParams(kCharacterMadame)[0],
_gameTime + getCharacterCurrentParams(kCharacterMadame)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterMadame)[1] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterMadame)[1] = 0x7FFFFFFF;
}
@@ -153,6 +170,9 @@ void LogicManager::HAND_Madame_DoWait(HAND_PARAMS) {
getCharacter(kCharacterMadame).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMadame, _functionsMadame[getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall]]);
fedEx(kCharacterMadame, kCharacterMadame, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -171,15 +191,20 @@ void LogicManager::CONS_Madame_DoCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Madame_DoCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterMadame, getCharacterCurrentParams(kCharacterMadame)[3]);
getCharacter(kCharacterMadame).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMadame, _functionsMadame[getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall]]);
fedEx(kCharacterMadame, kCharacterMadame, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterMadame, (char *)&getCharacterCurrentParams(kCharacterMadame)[0]);
blockAtDoor(kCharacterMadame, getCharacterCurrentParams(kCharacterMadame)[3]);
+ break;
+ default:
+ break;
}
}
@@ -198,22 +223,34 @@ void LogicManager::CONS_Madame_DoEnterCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Madame_DoEnterCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterMadame, getCharacterCurrentParams(kCharacterMadame)[3]);
getCharacter(kCharacterMadame).characterPosition.position = 5790;
getCharacter(kCharacterMadame).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMadame, _functionsMadame[getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall]]);
fedEx(kCharacterMadame, kCharacterMadame, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterMadame, (char *)&getCharacterCurrentParams(kCharacterMadame)[0]);
blockAtDoor(kCharacterMadame, getCharacterCurrentParams(kCharacterMadame)[3]);
getCharacter(kCharacterMadame).characterPosition.location = 1;
+
if (inComp(kCharacterCath, kCarRedSleeping, 5790) || inComp(kCharacterCath, kCarRedSleeping, 6130)) {
- playNIS((kEventCathTurningNight - !isNight()));
+ if (isNight()) {
+ playNIS(kEventCathTurningNight);
+ } else {
+ playNIS(kEventCathTurningDay);
+ }
+
playDialog(0, "BUMP", -1, 0);
bumpCathFDoor(35);
}
+
+ break;
+ default:
+ break;
}
}
@@ -233,28 +270,27 @@ void LogicManager::CONS_Madame_DoWalk(CONS_PARAMS) {
void LogicManager::HAND_Madame_DoWalk(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (walk(kCharacterMadame, getCharacterCurrentParams(kCharacterMadame)[0], getCharacterCurrentParams(kCharacterMadame)[1]))
- goto LABEL_10;
+ case 12:
+ if (walk(kCharacterMadame, getCharacterCurrentParams(kCharacterMadame)[0], getCharacterCurrentParams(kCharacterMadame)[1])) {
+ getCharacter(kCharacterMadame).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMadame, _functionsMadame[getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall]]);
+ fedEx(kCharacterMadame, kCharacterMadame, 18, 0);
+ }
+
break;
case 5:
- if (cathHasItem(kItemPassengerList))
+ if (cathHasItem(kItemPassengerList)) {
playDialog(kCharacterCath, "CAT1021", -1, 0);
- else
+ } else {
playCathExcuseMe();
+ }
+
break;
case 6:
playChrExcuseMe(kCharacterMadame, kCharacterCath, 0);
break;
- case 12:
- if (walk(kCharacterMadame, getCharacterCurrentParams(kCharacterMadame)[0], getCharacterCurrentParams(kCharacterMadame)[1])) {
- LABEL_10:
- getCharacter(kCharacterMadame).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterMadame, _functionsMadame[getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall]]);
- fedEx(kCharacterMadame, kCharacterMadame, 18, 0);
- }
- break;
default:
- return;
+ break;
}
}
@@ -271,34 +307,43 @@ void LogicManager::CONS_Madame_ComplainCond2(CONS_PARAMS) {
}
void LogicManager::HAND_Madame_ComplainCond2(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 155853632) {
- getCharacterCurrentParams(kCharacterMadame)[3] = 1;
- } else if (msg->action == 202558662) {
- startCycOtis(kCharacterMadame, "606L");
- playDialog(kCharacterMadame, (char *)&getCharacterCurrentParams(kCharacterMadame)[0], -1, 0);
- if (whoOnScreen(kCharacterMadame) || nearChar(kCharacterMadame, kCharacterCath, 2000)) {
- if (_gameProgress[kProgressChapter] == 1) {
- _gameProgress[kProgressFieldA8] = 1;
- } else if (_gameProgress[kProgressChapter] == 3) {
- _gameProgress[kProgressFieldA4] = 1;
- }
- }
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterMadame)[4] && getCharacterCurrentParams(kCharacterMadame)[3]) {
+ send(kCharacterMadame, kCharacterCond2, 125499160, 0);
+ if (!checkCathDir(kCarRedSleeping, 2))
+ getCharacter(kCharacterMadame).characterPosition.position = 2088;
+
+ getCharacter(kCharacterMadame).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMadame, _functionsMadame[getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall]]);
+ fedEx(kCharacterMadame, kCharacterMadame, 18, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 2:
+ getCharacterCurrentParams(kCharacterMadame)[4] = 1;
+ break;
+ case 12:
startCycOtis(kCharacterMadame, "606U");
send(kCharacterMadame, kCharacterCond2, 169557824, 0);
- } else if (msg->action) {
- if (msg->action == 2)
- getCharacterCurrentParams(kCharacterMadame)[4] = 1;
- } else if (getCharacterCurrentParams(kCharacterMadame)[4] && getCharacterCurrentParams(kCharacterMadame)[3]) {
- send(kCharacterMadame, kCharacterCond2, 125499160, 0);
- if (!checkCathDir(kCarRedSleeping, 2))
- getCharacter(kCharacterMadame).characterPosition.position = 2088;
+ break;
+ case 155853632:
+ getCharacterCurrentParams(kCharacterMadame)[3] = 1;
+ break;
+ case 202558662:
+ startCycOtis(kCharacterMadame, "606L");
+ playDialog(kCharacterMadame, (char *)&getCharacterCurrentParams(kCharacterMadame)[0], -1, 0);
+ if (whoOnScreen(kCharacterMadame) || nearChar(kCharacterMadame, kCharacterCath, 2000)) {
+ if (_gameProgress[kProgressChapter] == 1) {
+ _gameProgress[kProgressFieldA8] = 1;
+ } else if (_gameProgress[kProgressChapter] == 3) {
+ _gameProgress[kProgressFieldA4] = 1;
+ }
+ }
- getCharacter(kCharacterMadame).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterMadame, _functionsMadame[getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall]]);
- fedEx(kCharacterMadame, kCharacterMadame, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -313,70 +358,77 @@ void LogicManager::CONS_Madame_LetsGo(CONS_PARAMS) {
}
void LogicManager::HAND_Madame_LetsGo(HAND_PARAMS) {
- if (msg->action > 12) {
- switch (msg->action) {
- case 18:
- switch (getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterMadame).characterPosition.location = 0;
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 2;
- MadameCall(&LogicManager::CONS_Madame_DoWalk, 5, 850, 0, 0);
- break;
- case 2:
- endGraphics(kCharacterMadame);
- send(kCharacterMadame, kCharacterMonsieur, 203520448, 0);
- break;
- case 3:
- if (inComp(kCharacterFrancois, kCarRedSleeping, 5790)) {
- setDoor(35, kCharacterCath, 0, 0, 0);
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 4;
- MadameCall(&LogicManager::CONS_Madame_DoEnterCorrOtis, "606Ad", 35, 0, 0);
- } else {
- getCharacterCurrentParams(kCharacterMadame)[0] = 1;
- startCycOtis(kCharacterMadame, "606Md");
- softBlockAtDoor(kCharacterMadame, 35);
- }
- break;
- case 4:
- setDoor(35, kCharacterCath, 2, 0, 0);
- getCharacter(kCharacterMadame).characterPosition.location = 1;
- endGraphics(kCharacterMadame);
-
- getCharacter(kCharacterMadame).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterMadame, _functionsMadame[getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall]]);
- fedEx(kCharacterMadame, kCharacterMadame, 18, 0);
- break;
- case 5:
- softReleaseAtDoor(kCharacterMadame, 35);
- setDoor(35, kCharacterCath, 2, 0, 0);
- getCharacter(kCharacterMadame).characterPosition.location = 1;
- endGraphics(kCharacterMadame);
-
- getCharacter(kCharacterMadame).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterMadame, _functionsMadame[getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall]]);
- fedEx(kCharacterMadame, kCharacterMadame, 18, 0);
- break;
- default:
- return;
- }
- break;
- case 100901266:
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 3;
- MadameCall(&LogicManager::CONS_Madame_DoWalk, 4, 5790, 0, 0);
- break;
- case 100957716:
- setDoor(35, kCharacterCath, 0, 0, 0);
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 5;
- MadameCall(&LogicManager::CONS_Madame_DoEnterCorrOtis, "606Ad", 35, 0, 0);
- break;
+ switch (msg->action) {
+ case 0:
+ if (!getCharacterCurrentParams(kCharacterMadame)[0]) {
+ getCharacter(kCharacterMadame).characterPosition = getCharacter(kCharacterMonsieur).characterPosition;
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
setDoor(35, kCharacterCath, 0, 10, 9);
setDoor(51, kCharacterCath, 0, 10, 9);
getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 1;
MadameCall(&LogicManager::CONS_Madame_DoCorrOtis, "606Rd", 35, 0, 0);
- } else if (msg->action == 0 && !getCharacterCurrentParams(kCharacterMadame)[0]) {
- getCharacter(kCharacterMadame).characterPosition = getCharacter(kCharacterMonsieur).characterPosition;
+ break;
+ case 18:
+ switch (getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterMadame).characterPosition.location = 0;
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 2;
+ MadameCall(&LogicManager::CONS_Madame_DoWalk, 5, 850, 0, 0);
+ break;
+ case 2:
+ endGraphics(kCharacterMadame);
+ send(kCharacterMadame, kCharacterMonsieur, 203520448, 0);
+ break;
+ case 3:
+ if (inComp(kCharacterFrancois, kCarRedSleeping, 5790)) {
+ setDoor(35, kCharacterCath, 0, 0, 0);
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 4;
+ MadameCall(&LogicManager::CONS_Madame_DoEnterCorrOtis, "606Ad", 35, 0, 0);
+ } else {
+ getCharacterCurrentParams(kCharacterMadame)[0] = 1;
+ startCycOtis(kCharacterMadame, "606Md");
+ softBlockAtDoor(kCharacterMadame, 35);
+ }
+
+ break;
+ case 4:
+ setDoor(35, kCharacterCath, 2, 0, 0);
+ getCharacter(kCharacterMadame).characterPosition.location = 1;
+ endGraphics(kCharacterMadame);
+
+ getCharacter(kCharacterMadame).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMadame, _functionsMadame[getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall]]);
+ fedEx(kCharacterMadame, kCharacterMadame, 18, 0);
+ break;
+ case 5:
+ softReleaseAtDoor(kCharacterMadame, 35);
+ setDoor(35, kCharacterCath, 2, 0, 0);
+ getCharacter(kCharacterMadame).characterPosition.location = 1;
+ endGraphics(kCharacterMadame);
+
+ getCharacter(kCharacterMadame).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMadame, _functionsMadame[getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall]]);
+ fedEx(kCharacterMadame, kCharacterMadame, 18, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 100901266:
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 3;
+ MadameCall(&LogicManager::CONS_Madame_DoWalk, 4, 5790, 0, 0);
+ break;
+ case 100957716:
+ setDoor(35, kCharacterCath, 0, 0, 0);
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 5;
+ MadameCall(&LogicManager::CONS_Madame_DoEnterCorrOtis, "606Ad", 35, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -391,18 +443,24 @@ void LogicManager::CONS_Madame_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Madame_Birth(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- setDoor(35, kCharacterCath, 2, 0, 0);
- setDoor(51, kCharacterCath, 0, 10, 9);
- autoMessage(kCharacterMadame, 242526416, 0);
- getCharacter(kCharacterMadame).characterPosition.position = 5790;
- getCharacter(kCharacterMadame).characterPosition.location = 1;
- getCharacter(kCharacterMadame).characterPosition.car = kCarRedSleeping;
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterMadame)[0]) {
+ getCharacterCurrentParams(kCharacterMadame)[0] = 1;
+ CONS_Madame_OpenComp1(0, 0, 0, 0);
}
- } else if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterMadame)[0]) {
- getCharacterCurrentParams(kCharacterMadame)[0] = 1;
- CONS_Madame_OpenComp1(0, 0, 0, 0);
+
+ break;
+ case 12:
+ setDoor(35, kCharacterCath, 2, 0, 0);
+ setDoor(51, kCharacterCath, 0, 10, 9);
+ autoMessage(kCharacterMadame, 242526416, 0);
+ getCharacter(kCharacterMadame).characterPosition.position = 5790;
+ getCharacter(kCharacterMadame).characterPosition.location = 1;
+ getCharacter(kCharacterMadame).characterPosition.car = kCarRedSleeping;
+ break;
+ default:
+ break;
}
}
@@ -419,22 +477,27 @@ void LogicManager::CONS_Madame_FranStory(CONS_PARAMS) {
void LogicManager::HAND_Madame_FranStory(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (getCharacterCurrentParams(kCharacterMadame)[1] == 0x7FFFFFFF || !_gameTime)
- return;
- if (getCharacterCurrentParams(kCharacterMadame)[0] >= _gameTime) {
- if (!nearChar(kCharacterMadame, kCharacterCath, 1000) || !getCharacterCurrentParams(kCharacterMadame)[1]) {
- getCharacterCurrentParams(kCharacterMadame)[1] = _gameTime + 150;
- if (_gameTime == -150)
- goto LABEL_13;
+ if (getCharacterCurrentParams(kCharacterMadame)[1] != 0x7FFFFFFF && _gameTime) {
+ if (getCharacterCurrentParams(kCharacterMadame)[0] >= _gameTime) {
+ if (!nearChar(kCharacterMadame, kCharacterCath, 1000) || !getCharacterCurrentParams(kCharacterMadame)[1]) {
+ getCharacterCurrentParams(kCharacterMadame)[1] = _gameTime + 150;
+ if (_gameTime == -150) {
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 1;
+ MadameCall(&LogicManager::CONS_Madame_DoDialog, "MME1040", 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterMadame)[1] >= _gameTime)
+ break;
}
- if (getCharacterCurrentParams(kCharacterMadame)[1] >= _gameTime)
- return;
+
+ getCharacterCurrentParams(kCharacterMadame)[1] = 0x7FFFFFFF;
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 1;
+ MadameCall(&LogicManager::CONS_Madame_DoDialog, "MME1040", 0, 0, 0);
}
- getCharacterCurrentParams(kCharacterMadame)[1] = 0x7FFFFFFF;
- LABEL_13:
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 1;
- MadameCall(&LogicManager::CONS_Madame_DoDialog, "MME1040", 0, 0, 0);
- return;
+
+ break;
case 12:
getCharacterCurrentParams(kCharacterMadame)[0] = _gameTime + 1800;
setDoor(35, kCharacterMadame, 1, 0, 0);
@@ -459,8 +522,11 @@ void LogicManager::HAND_Madame_FranStory(HAND_PARAMS) {
fedEx(kCharacterMadame, kCharacterMadame, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
break;
}
}
@@ -476,59 +542,66 @@ void LogicManager::CONS_Madame_OpenComp1(CONS_PARAMS) {
}
void LogicManager::HAND_Madame_OpenComp1(HAND_PARAMS) {
- if (msg->action > 17) {
- if (msg->action > 102484312) {
- switch (msg->action) {
- case 134289824:
- startCycOtis(kCharacterMadame, "502A");
- getCharacterCurrentParams(kCharacterMadame)[0] = 0;
- break;
- case 168986720:
- send(kCharacterMadame, kCharacterFrancois, 102752636, 0);
- playDialog(kCharacterMadame, "MME1036", -1, 0);
- softReleaseAtDoor(kCharacterMadame, 35);
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 3;
- MadameCall(&LogicManager::CONS_Madame_DoCorrOtis, "606Fd", 35, 0, 0);
- break;
- case 202221040:
- setDoor(35, kCharacterCath, 0, 255, 255);
- getCharacter(kCharacterMadame).characterPosition.location = 0;
- playDialog(kCharacterMadame, "MME1035A", -1, 0);
- if (whoOnScreen(kCharacterMadame) || nearChar(kCharacterMadame, kCharacterCath, 2000))
- _gameProgress[kProgressFieldAC] = 1;
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 2;
- MadameCall(&LogicManager::CONS_Madame_DoCorrOtis, "606Ed", 35, 0, 0);
- break;
- }
- } else if (msg->action == 102484312) {
- startCycOtis(kCharacterMadame, "501");
- getCharacterCurrentParams(kCharacterMadame)[0] = 1;
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8]) {
- case 1:
- startCycOtis(kCharacterMadame, "502A");
- break;
- case 2:
- startCycOtis(kCharacterMadame, "606Qd");
- softBlockAtDoor(kCharacterMadame, 35);
- break;
- case 3:
- getCharacter(kCharacterMadame).characterPosition.location = 1;
- getCharacterCurrentParams(kCharacterMadame)[0] = 1;
- endGraphics(kCharacterMadame);
- CONS_Madame_ClosedComp1(0, 0, 0, 0);
- break;
- }
- }
- } else if (msg->action == 17) {
+ switch (msg->action) {
+ case 12:
+ getCharacterCurrentParams(kCharacterMadame)[0] = 1;
+ startCycOtis(kCharacterMadame, "501");
+ break;
+ case 17:
if (checkCathDir(kCarRedSleeping, 44)) {
getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 1;
MadameCall(&LogicManager::CONS_Madame_DoSeqOtis, "502B", 0, 0, 0);
}
- } else if (msg->action == 12) {
- getCharacterCurrentParams(kCharacterMadame)[0] = 1;
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8]) {
+ case 1:
+ startCycOtis(kCharacterMadame, "502A");
+ break;
+ case 2:
+ startCycOtis(kCharacterMadame, "606Qd");
+ softBlockAtDoor(kCharacterMadame, 35);
+ break;
+ case 3:
+ getCharacter(kCharacterMadame).characterPosition.location = 1;
+ getCharacterCurrentParams(kCharacterMadame)[0] = 1;
+ endGraphics(kCharacterMadame);
+ CONS_Madame_ClosedComp1(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 102484312:
startCycOtis(kCharacterMadame, "501");
+ getCharacterCurrentParams(kCharacterMadame)[0] = 1;
+ break;
+ case 134289824:
+ startCycOtis(kCharacterMadame, "502A");
+ getCharacterCurrentParams(kCharacterMadame)[0] = 0;
+ break;
+ case 168986720:
+ send(kCharacterMadame, kCharacterFrancois, 102752636, 0);
+ playDialog(kCharacterMadame, "MME1036", -1, 0);
+ softReleaseAtDoor(kCharacterMadame, 35);
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 3;
+ MadameCall(&LogicManager::CONS_Madame_DoCorrOtis, "606Fd", 35, 0, 0);
+ break;
+ case 202221040:
+ setDoor(35, kCharacterCath, 0, 255, 255);
+ getCharacter(kCharacterMadame).characterPosition.location = 0;
+ playDialog(kCharacterMadame, "MME1035A", -1, 0);
+
+ if (whoOnScreen(kCharacterMadame) || nearChar(kCharacterMadame, kCharacterCath, 2000))
+ _gameProgress[kProgressFieldAC] = 1;
+
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 2;
+ MadameCall(&LogicManager::CONS_Madame_DoCorrOtis, "606Ed", 35, 0, 0);
+ break;
}
+
}
void LogicManager::CONS_Madame_ClosedComp1(CONS_PARAMS) {
@@ -544,57 +617,88 @@ void LogicManager::CONS_Madame_ClosedComp1(CONS_PARAMS) {
void LogicManager::HAND_Madame_ClosedComp1(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (whoRunningDialog(kCharacterMadame) || getCharacterCurrentParams(kCharacterMadame)[5] == 0x7FFFFFFF || !_gameTime)
- goto LABEL_30;
- if (getCharacterCurrentParams(kCharacterMadame)[0] < _gameTime)
- goto LABEL_11;
- if (!nearChar(kCharacterMadame, kCharacterCath, 2000) || !getCharacterCurrentParams(kCharacterMadame)[5]) {
- getCharacterCurrentParams(kCharacterMadame)[5] = _gameTime;
- if (!_gameTime)
- goto LABEL_12;
- }
- if (getCharacterCurrentParams(kCharacterMadame)[5] < _gameTime) {
- LABEL_11:
- getCharacterCurrentParams(kCharacterMadame)[5] = 0x7FFFFFFF;
- LABEL_12:
- setDoor(35, kCharacterCath, 1, 0, 0);
- setDoor(51, kCharacterCath, 1, 0, 0);
- if (nearChar(kCharacterMadame, kCharacterCath, 2000))
- _gameProgress[kProgressFieldA0] = 1;
- getCharacterCurrentParams(kCharacterMadame)[4] = 1;
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 1;
- MadameCall(&LogicManager::CONS_Madame_DoDialog, "MME1037", 0, 0, 0);
- return;
- }
- LABEL_30:
- if (!_gameProgress[kProgressField24] || getCharacterCurrentParams(kCharacterMadame)[6] == 0x7FFFFFFF || !_gameTime)
- goto LABEL_41;
- if (_gameTime > 1093500)
- goto LABEL_39;
- if (!getCharacterCurrentParams(kCharacterMadame)[4] || !cathInCorridor(kCarRedSleeping) || !getCharacterCurrentParams(kCharacterMadame)[6]) {
- getCharacterCurrentParams(kCharacterMadame)[6] = _gameTime;
- if (!_gameTime)
- goto LABEL_40;
+ if (!whoRunningDialog(kCharacterMadame) && getCharacterCurrentParams(kCharacterMadame)[5] != 0x7FFFFFFF && _gameTime) {
+ if (getCharacterCurrentParams(kCharacterMadame)[0] < _gameTime) {
+ getCharacterCurrentParams(kCharacterMadame)[5] = 0x7FFFFFFF;
+ setDoor(35, kCharacterCath, 1, 0, 0);
+ setDoor(51, kCharacterCath, 1, 0, 0);
+
+ if (nearChar(kCharacterMadame, kCharacterCath, 2000))
+ _gameProgress[kProgressFieldA0] = 1;
+
+ getCharacterCurrentParams(kCharacterMadame)[4] = 1;
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 1;
+ MadameCall(&LogicManager::CONS_Madame_DoDialog, "MME1037", 0, 0, 0);
+ break;
+ }
+
+ if (!nearChar(kCharacterMadame, kCharacterCath, 2000) || !getCharacterCurrentParams(kCharacterMadame)[5]) {
+ getCharacterCurrentParams(kCharacterMadame)[5] = _gameTime;
+ if (!_gameTime) {
+ setDoor(35, kCharacterCath, 1, 0, 0);
+ setDoor(51, kCharacterCath, 1, 0, 0);
+
+ if (nearChar(kCharacterMadame, kCharacterCath, 2000))
+ _gameProgress[kProgressFieldA0] = 1;
+
+ getCharacterCurrentParams(kCharacterMadame)[4] = 1;
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 1;
+ MadameCall(&LogicManager::CONS_Madame_DoDialog, "MME1037", 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterMadame)[5] < _gameTime) {
+ getCharacterCurrentParams(kCharacterMadame)[5] = 0x7FFFFFFF;
+ setDoor(35, kCharacterCath, 1, 0, 0);
+ setDoor(51, kCharacterCath, 1, 0, 0);
+
+ if (nearChar(kCharacterMadame, kCharacterCath, 2000))
+ _gameProgress[kProgressFieldA0] = 1;
+
+ getCharacterCurrentParams(kCharacterMadame)[4] = 1;
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 1;
+ MadameCall(&LogicManager::CONS_Madame_DoDialog, "MME1037", 0, 0, 0);
+ break;
+ }
}
- if (getCharacterCurrentParams(kCharacterMadame)[6] < _gameTime) {
- LABEL_39:
- getCharacterCurrentParams(kCharacterMadame)[6] = 0x7FFFFFFF;
- LABEL_40:
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 2;
- MadameCall(&LogicManager::CONS_Madame_FranStory, 0, 0, 0, 0);
- return;
+
+ if (_gameProgress[kProgressField24] && getCharacterCurrentParams(kCharacterMadame)[6] != 0x7FFFFFFF && _gameTime) {
+ if (_gameTime > 1093500) {
+ getCharacterCurrentParams(kCharacterMadame)[6] = 0x7FFFFFFF;
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 2;
+ MadameCall(&LogicManager::CONS_Madame_FranStory, 0, 0, 0, 0);
+ break;
+ }
+
+ if (!getCharacterCurrentParams(kCharacterMadame)[4] || !cathInCorridor(kCarRedSleeping) || !getCharacterCurrentParams(kCharacterMadame)[6]) {
+ getCharacterCurrentParams(kCharacterMadame)[6] = _gameTime;
+ if (!_gameTime) {
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 2;
+ MadameCall(&LogicManager::CONS_Madame_FranStory, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterMadame)[6] < _gameTime) {
+ getCharacterCurrentParams(kCharacterMadame)[6] = 0x7FFFFFFF;
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 2;
+ MadameCall(&LogicManager::CONS_Madame_FranStory, 0, 0, 0, 0);
+ break;
+ }
}
- LABEL_41:
+
if (_gameTime > 1094400 && !getCharacterCurrentParams(kCharacterMadame)[7]) {
getCharacterCurrentParams(kCharacterMadame)[7] = 1;
CONS_Madame_OpenComp(0, 0, 0, 0);
- return;
+ break;
}
+
if (getCharacterCurrentParams(kCharacterMadame)[3]) {
if (getCharacterCurrentParams(kCharacterMadame)[8] || (getCharacterCurrentParams(kCharacterMadame)[8] = _currentGameSessionTicks + 75,
_currentGameSessionTicks != -75)) {
if (getCharacterCurrentParams(kCharacterMadame)[8] >= _currentGameSessionTicks)
- return;
+ break;
getCharacterCurrentParams(kCharacterMadame)[8] = 0x7FFFFFFF;
}
@@ -607,12 +711,14 @@ void LogicManager::HAND_Madame_ClosedComp1(HAND_PARAMS) {
} else {
getCharacterCurrentParams(kCharacterMadame)[8] = 0;
}
- return;
+
+ break;
case 8:
case 9:
if (getCharacterCurrentParams(kCharacterMadame)[3]) {
setDoor(35, kCharacterMadame, 1, 0, 0);
setDoor(51, kCharacterMadame, 1, 0, 0);
+
if (cathHasItem(kItemPassengerList)) {
getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 7;
@@ -621,7 +727,6 @@ void LogicManager::HAND_Madame_ClosedComp1(HAND_PARAMS) {
} else {
MadameCall(&LogicManager::CONS_Madame_DoDialog, "CAT1510", 0, 0, 0);
}
-
} else {
getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 8;
MadameCall(&LogicManager::CONS_Madame_DoDialog, getCathSorryDialog(), 0, 0, 0);
@@ -630,6 +735,7 @@ void LogicManager::HAND_Madame_ClosedComp1(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterMadame)[1]++;
setDoor(35, kCharacterMadame, 1, 0, 0);
setDoor(51, kCharacterMadame, 1, 0, 0);
+
if (msg->action == 9) {
getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 3;
MadameCall(&LogicManager::CONS_Madame_DoDialog, "LIB013", 0, 0, 0);
@@ -638,13 +744,14 @@ void LogicManager::HAND_Madame_ClosedComp1(HAND_PARAMS) {
MadameCall(&LogicManager::CONS_Madame_DoDialog, "LIB012", 0, 0, 0);
}
}
- return;
+
+ break;
case 12:
getCharacterCurrentParams(kCharacterMadame)[0] = _gameTime + 900;
getCharacter(kCharacterMadame).characterPosition.position = 5790;
setDoor(35, kCharacterMadame, 1, 10, 9);
setDoor(51, kCharacterMadame, 1, 10, 9);
- return;
+ break;
case 17:
if (getCharacterCurrentParams(kCharacterMadame)[2] || getCharacterCurrentParams(kCharacterMadame)[3]) {
setDoor(35, kCharacterMadame, 1, 10, 9);
@@ -654,13 +761,63 @@ void LogicManager::HAND_Madame_ClosedComp1(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterMadame)[1] = 0;
}
- return;
+ break;
case 18:
switch (getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8]) {
case 1:
setDoor(35, kCharacterMadame, 1, 10, 9);
setDoor(51, kCharacterMadame, 1, 10, 9);
- goto LABEL_30;
+
+ if (_gameProgress[kProgressField24] && getCharacterCurrentParams(kCharacterMadame)[6] != 0x7FFFFFFF && _gameTime) {
+ if (_gameTime > 1093500) {
+ getCharacterCurrentParams(kCharacterMadame)[6] = 0x7FFFFFFF;
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 2;
+ MadameCall(&LogicManager::CONS_Madame_FranStory, 0, 0, 0, 0);
+ break;
+ }
+
+ if (!getCharacterCurrentParams(kCharacterMadame)[4] || !cathInCorridor(kCarRedSleeping) || !getCharacterCurrentParams(kCharacterMadame)[6]) {
+ getCharacterCurrentParams(kCharacterMadame)[6] = _gameTime;
+ if (!_gameTime) {
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 2;
+ MadameCall(&LogicManager::CONS_Madame_FranStory, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterMadame)[6] < _gameTime) {
+ getCharacterCurrentParams(kCharacterMadame)[6] = 0x7FFFFFFF;
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 2;
+ MadameCall(&LogicManager::CONS_Madame_FranStory, 0, 0, 0, 0);
+ break;
+ }
+ }
+
+ if (_gameTime > 1094400 && !getCharacterCurrentParams(kCharacterMadame)[7]) {
+ getCharacterCurrentParams(kCharacterMadame)[7] = 1;
+ CONS_Madame_OpenComp(0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterCurrentParams(kCharacterMadame)[3]) {
+ if (getCharacterCurrentParams(kCharacterMadame)[8] || (getCharacterCurrentParams(kCharacterMadame)[8] = _currentGameSessionTicks + 75,
+ _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterMadame)[8] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterMadame)[8] = 0x7FFFFFFF;
+ }
+
+ getCharacterCurrentParams(kCharacterMadame)[3] = 0;
+ getCharacterCurrentParams(kCharacterMadame)[2] = 1;
+ setDoor(35, kCharacterMadame, 1, 0, 0);
+ setDoor(51, kCharacterMadame, 1, 0, 0);
+ getCharacterCurrentParams(kCharacterMadame)[8] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterMadame)[8] = 0;
+ }
+
+ break;
case 2:
CONS_Madame_OpenComp(0, 0, 0, 0);
break;
@@ -673,6 +830,7 @@ void LogicManager::HAND_Madame_ClosedComp1(HAND_PARAMS) {
getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 5;
MadameCall(&LogicManager::CONS_Madame_DoDialog, "MME1038C", 0, 0, 0);
}
+
break;
case 5:
case 6:
@@ -686,11 +844,12 @@ void LogicManager::HAND_Madame_ClosedComp1(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterMadame)[2] = 1;
break;
default:
- return;
+ break;
}
- return;
+
+ break;
default:
- return;
+ break;
}
}
@@ -725,20 +884,23 @@ void LogicManager::HAND_Madame_OpenComp(HAND_PARAMS) {
case 3:
setDoor(35, kCharacterCath, 1, 255, 255);
getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 4;
- MadameCall(&LogicManager::CONS_Madame_DoCorrOtis, "606Cd", 0x23, 0, 0);
+ MadameCall(&LogicManager::CONS_Madame_DoCorrOtis, "606Cd", 35, 0, 0);
break;
case 4:
endGraphics(kCharacterMadame);
CONS_Madame_InComp(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
break;
case 101107728:
getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 2;
MadameCall(&LogicManager::CONS_Madame_LetsGo, 0, 0, 0, 0);
break;
+ default:
+ break;
}
}
@@ -753,83 +915,38 @@ void LogicManager::CONS_Madame_InComp(CONS_PARAMS) {
}
void LogicManager::HAND_Madame_InComp(HAND_PARAMS) {
- if (msg->action > 9) {
- if (msg->action > 17) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8]) {
- case 1:
- setDoor(35, kCharacterCath, 1, 10, 9);
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 2;
- MadameCall(&LogicManager::CONS_Madame_DoWalk, 4, 2000, 0, 0);
- break;
- case 2:
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 3;
- MadameCall(&LogicManager::CONS_Madame_ComplainCond2, "MME1101", 0, 0, 0);
- break;
- case 3:
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 4;
- MadameCall(&LogicManager::CONS_Madame_DoWalk, 4, 5790, 0, 0);
- break;
- case 4:
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 5;
- MadameCall(&LogicManager::CONS_Madame_DoEnterCorrOtis, "606Td", 35, 0, 0);
- break;
- case 5:
- getCharacter(kCharacterMadame).characterPosition.location = 1;
- getCharacter(kCharacterMadame).characterPosition.position = 5790;
- endGraphics(kCharacterMadame);
- setDoor(35, kCharacterMadame, 1, 10, 9);
- setDoor(51, kCharacterMadame, 1, 10, 9);
- goto LABEL_34;
- case 6:
- case 7:
- if (getCharacterCurrentParams(kCharacterMadame)[2] <= 1) {
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 9;
- MadameCall(&LogicManager::CONS_Madame_DoDialog, "MME1038", 0, 0, 0);
- } else {
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 8;
- MadameCall(&LogicManager::CONS_Madame_DoDialog, "MME1038C", 0, 0, 0);
- }
- break;
- case 8:
- case 9:
- setDoor(35, kCharacterMadame, 1, 14, 0);
- setDoor(51, kCharacterMadame, 1, 14, 0);
- getCharacterCurrentParams(kCharacterMadame)[1] = 1;
- break;
- case 10:
- case 11:
- getCharacterCurrentParams(kCharacterMadame)[1] = 0;
- getCharacterCurrentParams(kCharacterMadame)[0] = 1;
- break;
- case 12:
- setDoor(35, kCharacterMadame, 1, 10, 9);
- setDoor(51, kCharacterMadame, 1, 10, 9);
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1170000 && !getCharacterCurrentParams(kCharacterMadame)[3]) {
+ getCharacterCurrentParams(kCharacterMadame)[3] = 1;
+ getCharacter(kCharacterMadame).characterPosition.location = 0;
+ setDoor(51, kCharacterCath, 1, 10, 9);
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 1;
+ MadameCall(&LogicManager::CONS_Madame_DoCorrOtis, "606Rd", 35, 0, 0);
+ break;
+ }
+
+ if (getCharacterCurrentParams(kCharacterMadame)[1]) {
+ if (getCharacterCurrentParams(kCharacterMadame)[4] || (getCharacterCurrentParams(kCharacterMadame)[4] = _currentGameSessionTicks + 75,
+ _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterMadame)[4] >= _currentGameSessionTicks)
break;
- default:
- return;
- }
- } else if (msg->action == 223068211) {
- setDoor(35, kCharacterMadame, 1, 0, 0);
- setDoor(51, kCharacterMadame, 1, 0, 0);
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 12;
- MadameCall(&LogicManager::CONS_Madame_DoDialog, "MME1151B", 0, 0, 0);
- }
- } else if (msg->action == 17) {
- if (getCharacterCurrentParams(kCharacterMadame)[0] || getCharacterCurrentParams(kCharacterMadame)[1]) {
- setDoor(35, kCharacterMadame, 1, 10, 9);
- setDoor(51, kCharacterMadame, 1, 10, 9);
- getCharacterCurrentParams(kCharacterMadame)[2] = 0;
- getCharacterCurrentParams(kCharacterMadame)[0] = 0;
+
+ getCharacterCurrentParams(kCharacterMadame)[4] = 0x7FFFFFFF;
}
- } else if (msg->action == 12) {
- setDoor(35, kCharacterMadame, 1, 10, 9);
- setDoor(51, kCharacterMadame, 1, 10, 9);
- getCharacter(kCharacterMadame).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterMadame).characterPosition.location = 1;
- getCharacter(kCharacterMadame).characterPosition.position = 5790;
+
+ getCharacterCurrentParams(kCharacterMadame)[1] = 0;
+ getCharacterCurrentParams(kCharacterMadame)[0] = 1;
+ setDoor(35, kCharacterMadame, 1, 0, 0);
+ setDoor(51, kCharacterMadame, 1, 0, 0);
+ getCharacterCurrentParams(kCharacterMadame)[4] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterMadame)[4] = 0;
}
- } else if (msg->action >= 8) {
+
+ break;
+ case 8:
+ case 9:
if (getCharacterCurrentParams(kCharacterMadame)[1]) {
setDoor(35, kCharacterMadame, 1, 0, 0);
setDoor(51, kCharacterMadame, 1, 0, 0);
@@ -857,33 +974,108 @@ void LogicManager::HAND_Madame_InComp(HAND_PARAMS) {
MadameCall(&LogicManager::CONS_Madame_DoDialog, "LIB012", 0, 0, 0);
}
}
- } else if (msg->action == 0) {
- if (_gameTime > 1170000 && !getCharacterCurrentParams(kCharacterMadame)[3]) {
- getCharacterCurrentParams(kCharacterMadame)[3] = 1;
- getCharacter(kCharacterMadame).characterPosition.location = 0;
- setDoor(51, kCharacterCath, 1, 10, 9);
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 1;
- MadameCall(&LogicManager::CONS_Madame_DoCorrOtis, "606Rd", 35, 0, 0);
- return;
+
+ break;
+ case 12:
+ setDoor(35, kCharacterMadame, 1, 10, 9);
+ setDoor(51, kCharacterMadame, 1, 10, 9);
+ getCharacter(kCharacterMadame).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterMadame).characterPosition.location = 1;
+ getCharacter(kCharacterMadame).characterPosition.position = 5790;
+ break;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterMadame)[0] || getCharacterCurrentParams(kCharacterMadame)[1]) {
+ setDoor(35, kCharacterMadame, 1, 10, 9);
+ setDoor(51, kCharacterMadame, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterMadame)[2] = 0;
+ getCharacterCurrentParams(kCharacterMadame)[0] = 0;
}
- LABEL_34:
- if (getCharacterCurrentParams(kCharacterMadame)[1]) {
- if (getCharacterCurrentParams(kCharacterMadame)[4] || (getCharacterCurrentParams(kCharacterMadame)[4] = _currentGameSessionTicks + 75,
- _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterMadame)[4] >= _currentGameSessionTicks)
- return;
- getCharacterCurrentParams(kCharacterMadame)[4] = 0x7FFFFFFF;
+ break;
+ case 18:
+ switch (getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8]) {
+ case 1:
+ setDoor(35, kCharacterCath, 1, 10, 9);
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 2;
+ MadameCall(&LogicManager::CONS_Madame_DoWalk, 4, 2000, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 3;
+ MadameCall(&LogicManager::CONS_Madame_ComplainCond2, "MME1101", 0, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 4;
+ MadameCall(&LogicManager::CONS_Madame_DoWalk, 4, 5790, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 5;
+ MadameCall(&LogicManager::CONS_Madame_DoEnterCorrOtis, "606Td", 35, 0, 0);
+ break;
+ case 5:
+ getCharacter(kCharacterMadame).characterPosition.location = 1;
+ getCharacter(kCharacterMadame).characterPosition.position = 5790;
+ endGraphics(kCharacterMadame);
+ setDoor(35, kCharacterMadame, 1, 10, 9);
+ setDoor(51, kCharacterMadame, 1, 10, 9);
+
+ if (getCharacterCurrentParams(kCharacterMadame)[1]) {
+ if (getCharacterCurrentParams(kCharacterMadame)[4] || (getCharacterCurrentParams(kCharacterMadame)[4] = _currentGameSessionTicks + 75,
+ _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterMadame)[4] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterMadame)[4] = 0x7FFFFFFF;
+ }
+
+ getCharacterCurrentParams(kCharacterMadame)[1] = 0;
+ getCharacterCurrentParams(kCharacterMadame)[0] = 1;
+ setDoor(35, kCharacterMadame, 1, 0, 0);
+ setDoor(51, kCharacterMadame, 1, 0, 0);
+ getCharacterCurrentParams(kCharacterMadame)[4] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterMadame)[4] = 0;
+ }
+
+ break;
+ case 6:
+ case 7:
+ if (getCharacterCurrentParams(kCharacterMadame)[2] <= 1) {
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 9;
+ MadameCall(&LogicManager::CONS_Madame_DoDialog, "MME1038", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 8;
+ MadameCall(&LogicManager::CONS_Madame_DoDialog, "MME1038C", 0, 0, 0);
}
+ break;
+ case 8:
+ case 9:
+ setDoor(35, kCharacterMadame, 1, 14, 0);
+ setDoor(51, kCharacterMadame, 1, 14, 0);
+ getCharacterCurrentParams(kCharacterMadame)[1] = 1;
+ break;
+ case 10:
+ case 11:
getCharacterCurrentParams(kCharacterMadame)[1] = 0;
getCharacterCurrentParams(kCharacterMadame)[0] = 1;
- setDoor(35, kCharacterMadame, 1, 0, 0);
- setDoor(51, kCharacterMadame, 1, 0, 0);
- getCharacterCurrentParams(kCharacterMadame)[4] = 0;
- } else {
- getCharacterCurrentParams(kCharacterMadame)[4] = 0;
+ break;
+ case 12:
+ setDoor(35, kCharacterMadame, 1, 10, 9);
+ setDoor(51, kCharacterMadame, 1, 10, 9);
+ break;
+ default:
+ break;
}
+
+ break;
+ case 223068211:
+ setDoor(35, kCharacterMadame, 1, 0, 0);
+ setDoor(51, kCharacterMadame, 1, 0, 0);
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 12;
+ MadameCall(&LogicManager::CONS_Madame_DoDialog, "MME1151B", 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -898,13 +1090,17 @@ void LogicManager::CONS_Madame_Asleep(CONS_PARAMS) {
}
void LogicManager::HAND_Madame_Asleep(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterMadame).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterMadame).characterPosition.position = 5790;
getCharacter(kCharacterMadame).characterPosition.location = 1;
setDoor(35, kCharacterCath, 1, 10, 9);
setDoor(51, kCharacterCath, 1, 10, 9);
endGraphics(kCharacterMadame);
+ break;
+ default:
+ break;
}
}
@@ -919,20 +1115,23 @@ void LogicManager::CONS_Madame_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Madame_StartPart2(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterMadame);
- getCharacter(kCharacterMadame).characterPosition.position = 4689;
- getCharacter(kCharacterMadame).characterPosition.location = 1;
- getCharacter(kCharacterMadame).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterMadame).inventoryItem = 0;
- getCharacter(kCharacterMadame).clothes = 0;
- setDoor(35, kCharacterCath, 0, 10, 9);
- setDoor(51, kCharacterCath, 0, 10, 9);
- setDoor(43, kCharacterCath, 0, 255, 255);
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Madame_AtBreakfast(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterMadame);
+ getCharacter(kCharacterMadame).characterPosition.position = 4689;
+ getCharacter(kCharacterMadame).characterPosition.location = 1;
+ getCharacter(kCharacterMadame).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterMadame).inventoryItem = 0;
+ getCharacter(kCharacterMadame).clothes = 0;
+ setDoor(35, kCharacterCath, 0, 10, 9);
+ setDoor(51, kCharacterCath, 0, 10, 9);
+ setDoor(43, kCharacterCath, 0, 255, 255);
+ break;
+ default:
+ break;
}
}
@@ -964,6 +1163,7 @@ void LogicManager::HAND_Madame_AtBreakfast(HAND_PARAMS) {
getCharacter(kCharacterMadame).characterPosition.location = 1;
CONS_Madame_OpenComp2(0, 0, 0, 0);
}
+
break;
case 100901266:
getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 1;
@@ -975,6 +1175,8 @@ void LogicManager::HAND_Madame_AtBreakfast(HAND_PARAMS) {
getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 3;
MadameCall(&LogicManager::CONS_Madame_DoEnterCorrOtis, "606Ad", 35, 0, 0);
break;
+ default:
+ break;
}
}
@@ -989,34 +1191,40 @@ void LogicManager::CONS_Madame_OpenComp2(CONS_PARAMS) {
}
void LogicManager::HAND_Madame_OpenComp2(HAND_PARAMS) {
- if (msg->action > 12) {
- switch (msg->action) {
- case 18:
- if (getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] == 1 && checkCathDir(kCarRedSleeping, 44)) {
- bumpCath(kCarRedSleeping, 11, 255);
+ switch (msg->action) {
+ case 0:
+ if (checkCathDir(kCarRedSleeping, 44) && !getCharacterCurrentParams(kCharacterMadame)[1]) {
+ if (getCharacterCurrentParams(kCharacterMadame)[0]) {
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 1;
+ MadameCall(&LogicManager::CONS_Madame_DoSeqOtis, "502B", 0, 0, 0);
+ } else {
+ getCharacterCurrentParams(kCharacterMadame)[0] = 1;
}
- break;
- case 102484312:
- startCycOtis(kCharacterMadame, "501");
- getCharacterCurrentParams(kCharacterMadame)[1] = 1;
- break;
- case 134289824:
- startCycOtis(kCharacterMadame, "502A");
- getCharacterCurrentParams(kCharacterMadame)[1] = 0;
- break;
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
setDoor(35, kCharacterCath, 2, 0, 0);
setDoor(51, kCharacterCath, 0, 10, 9);
getCharacterCurrentParams(kCharacterMadame)[1] = 1;
startCycOtis(kCharacterMadame, "501");
- } else if (msg->action == 0 && checkCathDir(kCarRedSleeping, 44) && !getCharacterCurrentParams(kCharacterMadame)[1]) {
- if (getCharacterCurrentParams(kCharacterMadame)[0]) {
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 1;
- MadameCall(&LogicManager::CONS_Madame_DoSeqOtis, "502B", 0, 0, 0);
- } else {
- getCharacterCurrentParams(kCharacterMadame)[0] = 1;
+ break;
+ case 18:
+ if (getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] == 1 && checkCathDir(kCarRedSleeping, 44)) {
+ bumpCath(kCarRedSleeping, 11, 255);
}
+
+ break;
+ case 102484312:
+ startCycOtis(kCharacterMadame, "501");
+ getCharacterCurrentParams(kCharacterMadame)[1] = 1;
+ break;
+ case 134289824:
+ startCycOtis(kCharacterMadame, "502A");
+ getCharacterCurrentParams(kCharacterMadame)[1] = 0;
+ break;
+ default:
+ break;
}
}
@@ -1031,17 +1239,20 @@ void LogicManager::CONS_Madame_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Madame_StartPart3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterMadame);
- getCharacter(kCharacterMadame).characterPosition.position = 5790;
- getCharacter(kCharacterMadame).characterPosition.location = 1;
- getCharacter(kCharacterMadame).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterMadame).inventoryItem = 0;
- getCharacter(kCharacterMadame).clothes = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Madame_OpenComp3(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterMadame);
+ getCharacter(kCharacterMadame).characterPosition.position = 5790;
+ getCharacter(kCharacterMadame).characterPosition.location = 1;
+ getCharacter(kCharacterMadame).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterMadame).inventoryItem = 0;
+ getCharacter(kCharacterMadame).clothes = 0;
+ break;
+ default:
+ break;
}
}
@@ -1056,88 +1267,104 @@ void LogicManager::CONS_Madame_OpenComp3(CONS_PARAMS) {
}
void LogicManager::HAND_Madame_OpenComp3(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action > 101107728) {
- if (msg->action == 102484312) {
- LABEL_36:
- startCycOtis(kCharacterMadame, "501");
- getCharacterCurrentParams(kCharacterMadame)[0] = 1;
- } else if (msg->action == 134289824) {
- startCycOtis(kCharacterMadame, "502A");
- getCharacterCurrentParams(kCharacterMadame)[0] = 0;
- }
- } else if (msg->action == 101107728) {
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 9;
- MadameCall(&LogicManager::CONS_Madame_LetsGo, 0, 0, 0, 0);
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 2;
- MadameCall(&LogicManager::CONS_Madame_DoCorrOtis, "606Rd", 35, 0, 0);
- break;
- case 2:
- getCharacter(kCharacterMadame).characterPosition.location = 0;
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 3;
- MadameCall(&LogicManager::CONS_Madame_DoWalk, 4, 2000, 0, 0);
- break;
- case 3:
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 4;
- MadameCall(&LogicManager::CONS_Madame_ComplainCond2, "MME3001", 0, 0, 0);
- break;
- case 4:
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 5;
- MadameCall(&LogicManager::CONS_Madame_DoWalk, 4, 5790, 0, 0);
- break;
- case 5:
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 6;
- MadameCall(&LogicManager::CONS_Madame_DoEnterCorrOtis, "606Td", 35, 0, 0);
- break;
- case 6:
- endGraphics(kCharacterMadame);
- setDoor(35, kCharacterCath, 1, 10, 9);
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 7;
- MadameCall(&LogicManager::CONS_Madame_DoWait, 150, 0, 0, 0);
- break;
- case 7:
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 8;
- MadameCall(&LogicManager::CONS_Madame_DoCorrOtis, "606Dd", 35, 0, 0);
- break;
- case 8:
- setDoor(35, kCharacterCath, 2, 0, 0);
- startCycOtis(kCharacterMadame, "501");
- send(kCharacterMadame, kCharacterFrancois, 190390860, 0);
- break;
- case 9:
- goto LABEL_36;
- default:
- return;
+ switch (msg->action) {
+ case 0:
+ if (getCharacterParams(kCharacterMadame, 8)[0] && getCharacterCurrentParams(kCharacterMadame)[1] != 0x7FFFFFFF && _gameTime) {
+ if (_gameTime <= 2038500) {
+ if (!cathInCorridor(kCarRedSleeping) || !getCharacterCurrentParams(kCharacterMadame)[0] ||
+ dialogRunning("FRA2012") || dialogRunning("FRA2010") || dialogRunning("FRA2012") ||
+ !getCharacterCurrentParams(kCharacterMadame)[1]) {
+
+ getCharacterCurrentParams(kCharacterMadame)[1] = _gameTime;
+ if (!_gameTime) {
+ send(kCharacterMadame, kCharacterFrancois, 189872836, 0);
+ setDoor(35, kCharacterCath, 1, 10, 9);
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 1;
+ MadameCall(&LogicManager::CONS_Madame_DoCorrOtis, "606Cd", 35, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterMadame)[1] >= _gameTime)
+ break;
}
+
+ getCharacterCurrentParams(kCharacterMadame)[1] = 0x7FFFFFFF;
+ send(kCharacterMadame, kCharacterFrancois, 189872836, 0);
+ setDoor(35, kCharacterCath, 1, 10, 9);
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 1;
+ MadameCall(&LogicManager::CONS_Madame_DoCorrOtis, "606Cd", 35, 0, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
getCharacterCurrentParams(kCharacterMadame)[0] = 1;
setDoor(35, kCharacterCath, 2, 0, 0);
setDoor(51, kCharacterCath, 1, 10, 9);
setDoor(43, kCharacterCath, 0, 255, 255);
startCycOtis(kCharacterMadame, "501");
- } else if (msg->action == 0 && getCharacterParams(kCharacterMadame, 8)[0] && getCharacterCurrentParams(kCharacterMadame)[1] != 0x7FFFFFFF && _gameTime) {
- if (_gameTime <= 2038500) {
- if (!cathInCorridor(kCarRedSleeping) || !getCharacterCurrentParams(kCharacterMadame)[0] ||
- dialogRunning("FRA2012") || dialogRunning("FRA2010") || dialogRunning("FRA2012") ||
- !getCharacterCurrentParams(kCharacterMadame)[1]) {
-
- getCharacterCurrentParams(kCharacterMadame)[1] = _gameTime;
- if (!_gameTime)
- goto LABEL_25;
- }
- if (getCharacterCurrentParams(kCharacterMadame)[1] >= _gameTime)
- return;
+ break;
+ case 18:
+ switch (getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 2;
+ MadameCall(&LogicManager::CONS_Madame_DoCorrOtis, "606Rd", 35, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterMadame).characterPosition.location = 0;
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 3;
+ MadameCall(&LogicManager::CONS_Madame_DoWalk, 4, 2000, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 4;
+ MadameCall(&LogicManager::CONS_Madame_ComplainCond2, "MME3001", 0, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 5;
+ MadameCall(&LogicManager::CONS_Madame_DoWalk, 4, 5790, 0, 0);
+ break;
+ case 5:
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 6;
+ MadameCall(&LogicManager::CONS_Madame_DoEnterCorrOtis, "606Td", 35, 0, 0);
+ break;
+ case 6:
+ endGraphics(kCharacterMadame);
+ setDoor(35, kCharacterCath, 1, 10, 9);
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 7;
+ MadameCall(&LogicManager::CONS_Madame_DoWait, 150, 0, 0, 0);
+ break;
+ case 7:
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 8;
+ MadameCall(&LogicManager::CONS_Madame_DoCorrOtis, "606Dd", 35, 0, 0);
+ break;
+ case 8:
+ setDoor(35, kCharacterCath, 2, 0, 0);
+ startCycOtis(kCharacterMadame, "501");
+ send(kCharacterMadame, kCharacterFrancois, 190390860, 0);
+ break;
+ case 9:
+ startCycOtis(kCharacterMadame, "501");
+ getCharacterCurrentParams(kCharacterMadame)[0] = 1;
+ break;
+ default:
+ break;
}
- getCharacterCurrentParams(kCharacterMadame)[1] = 0x7FFFFFFF;
- LABEL_25:
- send(kCharacterMadame, kCharacterFrancois, 189872836, 0);
- setDoor(35, kCharacterCath, 1, 10, 9);
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 1;
- MadameCall(&LogicManager::CONS_Madame_DoCorrOtis, "606Cd", 35, 0, 0);
+
+ break;
+ case 101107728:
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 9;
+ MadameCall(&LogicManager::CONS_Madame_LetsGo, 0, 0, 0, 0);
+ break;
+ case 102484312:
+ startCycOtis(kCharacterMadame, "501");
+ getCharacterCurrentParams(kCharacterMadame)[0] = 1;
+ break;
+ case 134289824:
+ startCycOtis(kCharacterMadame, "502A");
+ getCharacterCurrentParams(kCharacterMadame)[0] = 0;
+ break;
+ default:
+ break;
}
}
@@ -1152,17 +1379,20 @@ void LogicManager::CONS_Madame_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Madame_StartPart4(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterMadame);
- getCharacter(kCharacterMadame).characterPosition.position = 5790;
- getCharacter(kCharacterMadame).characterPosition.location = 1;
- getCharacter(kCharacterMadame).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterMadame).inventoryItem = 0;
- getCharacter(kCharacterMadame).clothes = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Madame_OpenComp4(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterMadame);
+ getCharacter(kCharacterMadame).characterPosition.position = 5790;
+ getCharacter(kCharacterMadame).characterPosition.location = 1;
+ getCharacter(kCharacterMadame).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterMadame).inventoryItem = 0;
+ getCharacter(kCharacterMadame).clothes = 0;
+ break;
+ default:
+ break;
}
}
@@ -1177,35 +1407,44 @@ void LogicManager::CONS_Madame_OpenComp4(CONS_PARAMS) {
}
void LogicManager::HAND_Madame_OpenComp4(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- if (getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] == 1) {
- endGraphics(kCharacterMadame);
- CONS_Madame_ClosedComp4(0, 0, 0, 0);
- } else if (getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] == 2) {
- startCycOtis(kCharacterMadame, "501");
- getCharacterCurrentParams(kCharacterMadame)[0] = 1;
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterMadame)[0]) {
+ if (getCharacterCurrentParams(kCharacterMadame)[1] || (getCharacterCurrentParams(kCharacterMadame)[1] = _gameTime + 900,
+ _gameTime != -900)) {
+ if (getCharacterCurrentParams(kCharacterMadame)[1] >= _gameTime)
+ break;
+
+ getCharacterCurrentParams(kCharacterMadame)[1] = 0x7FFFFFFF;
}
- } else if (msg->action == 101107728) {
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 2;
- MadameCall(&LogicManager::CONS_Madame_LetsGo, 0, 0, 0, 0);
+
+ setDoor(35, kCharacterCath, 1, 255, 255);
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 1;
+ MadameCall(&LogicManager::CONS_Madame_DoCorrOtis, "606Cd", 35, 0, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
setDoor(35, kCharacterCath, 2, 0, 0);
setDoor(51, kCharacterCath, 1, 10, 9);
startCycOtis(kCharacterMadame, "501");
- } else if (msg->action == 0 && getCharacterCurrentParams(kCharacterMadame)[0]) {
- if (getCharacterCurrentParams(kCharacterMadame)[1] || (getCharacterCurrentParams(kCharacterMadame)[1] = _gameTime + 900,
- _gameTime != -900)) {
- if (getCharacterCurrentParams(kCharacterMadame)[1] >= _gameTime)
- return;
-
- getCharacterCurrentParams(kCharacterMadame)[1] = 0x7FFFFFFF;
+ break;
+ case 18:
+ if (getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] == 1) {
+ endGraphics(kCharacterMadame);
+ CONS_Madame_ClosedComp4(0, 0, 0, 0);
+ } else if (getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] == 2) {
+ startCycOtis(kCharacterMadame, "501");
+ getCharacterCurrentParams(kCharacterMadame)[0] = 1;
}
- setDoor(35, kCharacterCath, 1, 255, 255);
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 1;
- MadameCall(&LogicManager::CONS_Madame_DoCorrOtis, "606Cd", 35, 0, 0);
+ break;
+ case 101107728:
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 2;
+ MadameCall(&LogicManager::CONS_Madame_LetsGo, 0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1220,63 +1459,35 @@ void LogicManager::CONS_Madame_ClosedComp4(CONS_PARAMS) {
}
void LogicManager::HAND_Madame_ClosedComp4(HAND_PARAMS) {
- if (msg->action > 9) {
- if (msg->action > 17) {
- switch (msg->action) {
- case 18:
- switch (getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8]) {
- case 1:
- case 2:
- if (getCharacterCurrentParams(kCharacterMadame)[2] <= 1) {
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 4;
- MadameCall(&LogicManager::CONS_Madame_DoDialog, "MME1038", 0, 0, 0);
- } else {
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 3;
- MadameCall(&LogicManager::CONS_Madame_DoDialog, "MME1038C", 0, 0, 0);
- }
- break;
- case 3:
- case 4:
- setDoor(35, kCharacterMadame, 1, 14, 0);
- setDoor(51, kCharacterMadame, 1, 14, 0);
- getCharacterCurrentParams(kCharacterMadame)[1] = 1;
- break;
- case 5:
- case 6:
- getCharacterCurrentParams(kCharacterMadame)[1] = 0;
- getCharacterCurrentParams(kCharacterMadame)[0] = 1;
- break;
- case 7:
- send(kCharacterMadame, kCharacterCond2, 123199584, 0);
- break;
- case 8:
- send(kCharacterMadame, kCharacterCond2, 88652208, 0);
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 2470500 && !getCharacterCurrentParams(kCharacterMadame)[3]) {
+ getCharacterCurrentParams(kCharacterMadame)[3] = 1;
+ CONS_Madame_Asleep4(0, 0, 0, 0);
+ break;
+ }
+
+ if (getCharacterCurrentParams(kCharacterMadame)[1]) {
+ if (getCharacterCurrentParams(kCharacterMadame)[4] || (getCharacterCurrentParams(kCharacterMadame)[4] = _currentGameSessionTicks + 75,
+ _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterMadame)[4] >= _currentGameSessionTicks)
break;
- default:
- return;
- }
- break;
- case 122865568:
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 8;
- MadameCall(&LogicManager::CONS_Madame_DoDialog, "Mme1151A", 0, 0, 0);
- break;
- case 221683008:
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 7;
- MadameCall(&LogicManager::CONS_Madame_DoDialog, "Mme1038", 0, 0, 0);
- break;
- }
- } else if (msg->action == 17) {
- if (getCharacterCurrentParams(kCharacterMadame)[0] || getCharacterCurrentParams(kCharacterMadame)[1]) {
- setDoor(35, kCharacterMadame, 1, 10, 9);
- setDoor(51, kCharacterMadame, 1, 10, 9);
- getCharacterCurrentParams(kCharacterMadame)[0] = 0;
- getCharacterCurrentParams(kCharacterMadame)[1] = 0;
+
+ getCharacterCurrentParams(kCharacterMadame)[4] = 0x7FFFFFFF;
}
- } else if (msg->action == 12) {
- setDoor(35, kCharacterMadame, 1, 10, 9);
+
+ getCharacterCurrentParams(kCharacterMadame)[1] = 0;
+ getCharacterCurrentParams(kCharacterMadame)[0] = 1;
+ setDoor(35, kCharacterMadame, 1, 0, 0);
setDoor(51, kCharacterMadame, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterMadame)[4] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterMadame)[4] = 0;
}
- } else if (msg->action >= 8) {
+
+ break;
+ case 8:
+ case 9:
if (getCharacterCurrentParams(kCharacterMadame)[1]) {
setDoor(35, kCharacterMadame, 1, 0, 0);
setDoor(51, kCharacterMadame, 1, 0, 0);
@@ -1304,29 +1515,66 @@ void LogicManager::HAND_Madame_ClosedComp4(HAND_PARAMS) {
MadameCall(&LogicManager::CONS_Madame_DoDialog, "LIB012", 0, 0, 0);
}
}
- } else if (msg->action == 0) {
- if (_gameTime > 2470500 && !getCharacterCurrentParams(kCharacterMadame)[3]) {
- getCharacterCurrentParams(kCharacterMadame)[3] = 1;
- CONS_Madame_Asleep4(0, 0, 0, 0);
- return;
+
+ break;
+ case 12:
+ setDoor(35, kCharacterMadame, 1, 10, 9);
+ setDoor(51, kCharacterMadame, 1, 10, 9);
+ break;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterMadame)[0] || getCharacterCurrentParams(kCharacterMadame)[1]) {
+ setDoor(35, kCharacterMadame, 1, 10, 9);
+ setDoor(51, kCharacterMadame, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterMadame)[0] = 0;
+ getCharacterCurrentParams(kCharacterMadame)[1] = 0;
}
- if (getCharacterCurrentParams(kCharacterMadame)[1]) {
- if (getCharacterCurrentParams(kCharacterMadame)[4] || (getCharacterCurrentParams(kCharacterMadame)[4] = _currentGameSessionTicks + 75,
- _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterMadame)[4] >= _currentGameSessionTicks)
- return;
- getCharacterCurrentParams(kCharacterMadame)[4] = 0x7FFFFFFF;
+ break;
+ case 18:
+ switch (getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8]) {
+ case 1:
+ case 2:
+ if (getCharacterCurrentParams(kCharacterMadame)[2] <= 1) {
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 4;
+ MadameCall(&LogicManager::CONS_Madame_DoDialog, "MME1038", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 3;
+ MadameCall(&LogicManager::CONS_Madame_DoDialog, "MME1038C", 0, 0, 0);
}
+ break;
+ case 3:
+ case 4:
+ setDoor(35, kCharacterMadame, 1, 14, 0);
+ setDoor(51, kCharacterMadame, 1, 14, 0);
+ getCharacterCurrentParams(kCharacterMadame)[1] = 1;
+ break;
+ case 5:
+ case 6:
getCharacterCurrentParams(kCharacterMadame)[1] = 0;
getCharacterCurrentParams(kCharacterMadame)[0] = 1;
- setDoor(35, kCharacterMadame, 1, 0, 0);
- setDoor(51, kCharacterMadame, 1, 10, 9);
- getCharacterCurrentParams(kCharacterMadame)[4] = 0;
- } else {
- getCharacterCurrentParams(kCharacterMadame)[4] = 0;
+ break;
+ case 7:
+ send(kCharacterMadame, kCharacterCond2, 123199584, 0);
+ break;
+ case 8:
+ send(kCharacterMadame, kCharacterCond2, 88652208, 0);
+ break;
+ default:
+ break;
}
+
+ break;
+ case 122865568:
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 8;
+ MadameCall(&LogicManager::CONS_Madame_DoDialog, "Mme1151A", 0, 0, 0);
+ break;
+ case 221683008:
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 7;
+ MadameCall(&LogicManager::CONS_Madame_DoDialog, "Mme1038", 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1341,13 +1589,17 @@ void LogicManager::CONS_Madame_Asleep4(CONS_PARAMS) {
}
void LogicManager::HAND_Madame_Asleep4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterMadame);
getCharacter(kCharacterMadame).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterMadame).characterPosition.position = 5790;
getCharacter(kCharacterMadame).characterPosition.location = 1;
setDoor(35, kCharacterCath, 1, 10, 9);
setDoor(51, kCharacterCath, 1, 10, 9);
+ break;
+ default:
+ break;
}
}
@@ -1362,17 +1614,20 @@ void LogicManager::CONS_Madame_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Madame_StartPart5(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterMadame);
- getCharacter(kCharacterMadame).characterPosition.position = 3969;
- getCharacter(kCharacterMadame).characterPosition.location = 1;
- getCharacter(kCharacterMadame).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterMadame).inventoryItem = 0;
- getCharacter(kCharacterMadame).clothes = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Madame_Prisoner(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterMadame);
+ getCharacter(kCharacterMadame).characterPosition.position = 3969;
+ getCharacter(kCharacterMadame).characterPosition.location = 1;
+ getCharacter(kCharacterMadame).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterMadame).inventoryItem = 0;
+ getCharacter(kCharacterMadame).clothes = 0;
+ break;
+ default:
+ break;
}
}
@@ -1387,8 +1642,13 @@ void LogicManager::CONS_Madame_Prisoner(CONS_PARAMS) {
}
void LogicManager::HAND_Madame_Prisoner(HAND_PARAMS) {
- if (msg->action == 70549068)
+ switch (msg->action) {
+ case 70549068:
CONS_Madame_Hiding(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Madame_Hiding(CONS_PARAMS) {
@@ -1402,52 +1662,28 @@ void LogicManager::CONS_Madame_Hiding(CONS_PARAMS) {
}
void LogicManager::HAND_Madame_Hiding(HAND_PARAMS) {
- if (msg->action > 9) {
- if (msg->action > 17) {
- switch (msg->action) {
- case 18:
- switch (getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8]) {
- case 1:
- goto LABEL_33;
- case 2:
- case 3:
- setDoor(35, kCharacterMadame, 1, 0, 0);
- setDoor(51, kCharacterMadame, 1, 0, 0);
- getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 4;
- MadameCall(&LogicManager::CONS_Madame_DoDialog, "Mme5001", 0, 0, 0);
- break;
- case 4:
- getCharacterCurrentParams(kCharacterMadame)[0] = 1;
- setDoor(35, kCharacterMadame, 1, 14, 0);
- setDoor(51, kCharacterMadame, 1, 14, 0);
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterMadame)[0]) {
+ if (getCharacterCurrentParams(kCharacterMadame)[2] || (getCharacterCurrentParams(kCharacterMadame)[2] = _currentGameSessionTicks + 75,
+ _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterMadame)[2] >= _currentGameSessionTicks)
break;
- default:
- return;
- }
- break;
- case 135800432:
- CONS_Madame_Disappear(0, 0, 0, 0);
- break;
- case 155604840:
- LABEL_33:
- setDoor(35, kCharacterMadame, 1, 10, 9);
- setDoor(51, kCharacterMadame, 1, 10, 9);
- break;
- }
- } else if (msg->action == 17) {
- if (getCharacterCurrentParams(kCharacterMadame)[1] || getCharacterCurrentParams(kCharacterMadame)[0]) {
- getCharacterCurrentParams(kCharacterMadame)[1] = 0;
- getCharacterCurrentParams(kCharacterMadame)[0] = 0;
- setDoor(35, kCharacterMadame, 1, 10, 9);
- setDoor(51, kCharacterMadame, 1, 10, 9);
+
+ getCharacterCurrentParams(kCharacterMadame)[2] = 0x7FFFFFFF;
}
- } else if (msg->action == 12) {
- getCharacter(kCharacterMadame).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterMadame).characterPosition.position = 5790;
- getCharacter(kCharacterMadame).characterPosition.location = 1;
- endGraphics(kCharacterMadame);
+ getCharacterCurrentParams(kCharacterMadame)[0] = 0;
+ getCharacterCurrentParams(kCharacterMadame)[1] = 1;
+ setDoor(35, kCharacterMadame, 1, 0, 0);
+ setDoor(51, kCharacterMadame, 1, 0, 0);
+ getCharacterCurrentParams(kCharacterMadame)[2] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterMadame)[2] = 0;
}
- } else if (msg->action >= 8) {
+
+ break;
+ case 8:
+ case 9:
if (getCharacterCurrentParams(kCharacterMadame)[0]) {
setDoor(35, kCharacterMadame, 1, 0, 0);
setDoor(51, kCharacterMadame, 1, 0, 0);
@@ -1462,23 +1698,55 @@ void LogicManager::HAND_Madame_Hiding(HAND_PARAMS) {
getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 3;
MadameCall(&LogicManager::CONS_Madame_DoDialog, "LIB013", 0, 0, 0);
}
- } else if (msg->action == 0) {
- if (getCharacterCurrentParams(kCharacterMadame)[0]) {
- if (getCharacterCurrentParams(kCharacterMadame)[2] || (getCharacterCurrentParams(kCharacterMadame)[2] = _currentGameSessionTicks + 75,
- _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterMadame)[2] >= _currentGameSessionTicks)
- return;
- getCharacterCurrentParams(kCharacterMadame)[2] = 0x7FFFFFFF;
- }
+ break;
+ case 12:
+ getCharacter(kCharacterMadame).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterMadame).characterPosition.position = 5790;
+ getCharacter(kCharacterMadame).characterPosition.location = 1;
+ endGraphics(kCharacterMadame);
+ break;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterMadame)[1] || getCharacterCurrentParams(kCharacterMadame)[0]) {
+ getCharacterCurrentParams(kCharacterMadame)[1] = 0;
getCharacterCurrentParams(kCharacterMadame)[0] = 0;
- getCharacterCurrentParams(kCharacterMadame)[1] = 1;
+ setDoor(35, kCharacterMadame, 1, 10, 9);
+ setDoor(51, kCharacterMadame, 1, 10, 9);
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8]) {
+ case 1:
+ setDoor(35, kCharacterMadame, 1, 10, 9);
+ setDoor(51, kCharacterMadame, 1, 10, 9);
+ break;
+ case 2:
+ case 3:
setDoor(35, kCharacterMadame, 1, 0, 0);
setDoor(51, kCharacterMadame, 1, 0, 0);
- getCharacterCurrentParams(kCharacterMadame)[2] = 0;
- } else {
- getCharacterCurrentParams(kCharacterMadame)[2] = 0;
+ getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 4;
+ MadameCall(&LogicManager::CONS_Madame_DoDialog, "Mme5001", 0, 0, 0);
+ break;
+ case 4:
+ getCharacterCurrentParams(kCharacterMadame)[0] = 1;
+ setDoor(35, kCharacterMadame, 1, 14, 0);
+ setDoor(51, kCharacterMadame, 1, 14, 0);
+ break;
+ default:
+ break;
}
+
+ break;
+ case 135800432:
+ CONS_Madame_Disappear(0, 0, 0, 0);
+ break;
+ case 155604840:
+ setDoor(35, kCharacterMadame, 1, 10, 9);
+ setDoor(51, kCharacterMadame, 1, 10, 9);
+ break;
+ default:
+ break;
}
}
Commit: 11b223fe172b566586bbcbf7c6b9ced89768ba15
https://github.com/scummvm/scummvm/commit/11b223fe172b566586bbcbf7c6b9ced89768ba15
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Milos logic
Changed paths:
engines/lastexpress/characters/milos.cpp
diff --git a/engines/lastexpress/characters/milos.cpp b/engines/lastexpress/characters/milos.cpp
index 15cbfca6d1d..7ab065a304d 100644
--- a/engines/lastexpress/characters/milos.cpp
+++ b/engines/lastexpress/characters/milos.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_Milos(int chapter) {
CONS_Milos_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -69,19 +69,25 @@ void LogicManager::CONS_Milos_DebugWalks(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_DebugWalks(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterMilos).characterPosition.position = 0;
- getCharacter(kCharacterMilos).characterPosition.location = 0;
- getCharacter(kCharacterMilos).characterPosition.car = kCarGreenSleeping;
- getCharacterCurrentParams(kCharacterMilos)[0] = 10000;
- }
- } else if (walk(kCharacterMilos, kCarGreenSleeping, getCharacterCurrentParams(kCharacterMilos)[0])) {
- if (getCharacterCurrentParams(kCharacterMilos)[0] == 10000) {
- getCharacterCurrentParams(kCharacterMilos)[0] = 0;
- } else {
- getCharacterCurrentParams(kCharacterMilos)[0] = 10000;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterMilos, kCarGreenSleeping, getCharacterCurrentParams(kCharacterMilos)[0])) {
+ if (getCharacterCurrentParams(kCharacterMilos)[0] == 10000) {
+ getCharacterCurrentParams(kCharacterMilos)[0] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterMilos)[0] = 10000;
+ }
}
+
+ break;
+ case 12:
+ getCharacter(kCharacterMilos).characterPosition.position = 0;
+ getCharacter(kCharacterMilos).characterPosition.location = 0;
+ getCharacter(kCharacterMilos).characterPosition.car = kCarGreenSleeping;
+ getCharacterCurrentParams(kCharacterMilos)[0] = 10000;
+ break;
+ default:
+ break;
}
}
@@ -98,12 +104,17 @@ void LogicManager::CONS_Milos_DoSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_DoSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
getCharacter(kCharacterMilos).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterMilos, (char *)&getCharacterCurrentParams(kCharacterMilos)[0]);
+ break;
+ default:
+ break;
}
}
@@ -122,15 +133,20 @@ void LogicManager::CONS_Milos_DoCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_DoCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterMilos, getCharacterCurrentParams(kCharacterMilos)[3]);
getCharacter(kCharacterMilos).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterMilos, (char *)&getCharacterCurrentParams(kCharacterMilos)[0]);
blockAtDoor(kCharacterMilos, getCharacterCurrentParams(kCharacterMilos)[3]);
+ break;
+ default:
+ break;
}
}
@@ -149,15 +165,20 @@ void LogicManager::CONS_Milos_DoBriefCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_DoBriefCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterMilos, getCharacterCurrentParams(kCharacterMilos)[3]);
getCharacter(kCharacterMilos).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterMilos, (char *)&getCharacterCurrentParams(kCharacterMilos)[0]);
blockAtDoor(kCharacterMilos, getCharacterCurrentParams(kCharacterMilos)[3]);
+ break;
+ default:
+ break;
}
}
@@ -172,16 +193,22 @@ void LogicManager::CONS_Milos_FinishSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_FinishSeqOtis(HAND_PARAMS) {
- if (msg->action == 0) {
- if (getCharacter(kCharacterMilos).direction == 4)
- return;
- goto LABEL_5;
- }
- if (msg->action == 3) {
- LABEL_5:
+ switch (msg->action) {
+ case 0:
+ if (getCharacter(kCharacterMilos).direction != 4) {
+ getCharacter(kCharacterMilos).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
+ fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
+ }
+
+ break;
+ case 3:
getCharacter(kCharacterMilos).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -198,12 +225,17 @@ void LogicManager::CONS_Milos_DoDialog(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_DoDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterMilos).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterMilos, (char *)&getCharacterCurrentParams(kCharacterMilos)[0], -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -220,12 +252,17 @@ void LogicManager::CONS_Milos_DoDialogFullVol(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_DoDialogFullVol(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterMilos).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterMilos, (char *)&getCharacterCurrentParams(kCharacterMilos)[0], 16, 0);
+ break;
+ default:
+ break;
}
}
@@ -243,22 +280,25 @@ void LogicManager::CONS_Milos_SaveGame(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_SaveGame(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- save(
- kCharacterMilos,
- getCharacterCurrentParams(kCharacterMilos)[0],
- getCharacterCurrentParams(kCharacterMilos)[1]
- );
+ switch (msg->action) {
+ case 0:
+ getCharacter(kCharacterMilos).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
+ fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
+ break;
+ case 12:
+ save(
+ kCharacterMilos,
+ getCharacterCurrentParams(kCharacterMilos)[0],
+ getCharacterCurrentParams(kCharacterMilos)[1]
+ );
- getCharacter(kCharacterMilos).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
- fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
- }
- } else {
getCharacter(kCharacterMilos).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -275,11 +315,12 @@ void LogicManager::CONS_Milos_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_DoWait(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterMilos)[1] || (getCharacterCurrentParams(kCharacterMilos)[1] = _gameTime + getCharacterCurrentParams(kCharacterMilos)[0],
_gameTime + getCharacterCurrentParams(kCharacterMilos)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterMilos)[1] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterMilos)[1] = 0x7FFFFFFF;
}
@@ -287,6 +328,9 @@ void LogicManager::HAND_Milos_DoWait(HAND_PARAMS) {
getCharacter(kCharacterMilos).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -306,8 +350,13 @@ void LogicManager::CONS_Milos_DoWalk(CONS_PARAMS) {
void LogicManager::HAND_Milos_DoWalk(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (walk(kCharacterMilos, getCharacterCurrentParams(kCharacterMilos)[0], getCharacterCurrentParams(kCharacterMilos)[1]))
- goto LABEL_15;
+ case 12:
+ if (walk(kCharacterMilos, getCharacterCurrentParams(kCharacterMilos)[0], getCharacterCurrentParams(kCharacterMilos)[1])) {
+ getCharacter(kCharacterMilos).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
+ fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
+ }
+
break;
case 5:
case 6:
@@ -327,17 +376,10 @@ void LogicManager::HAND_Milos_DoWalk(HAND_PARAMS) {
} else {
playCathExcuseMe();
}
- break;
- case 12:
- if (walk(kCharacterMilos, getCharacterCurrentParams(kCharacterMilos)[0], getCharacterCurrentParams(kCharacterMilos)[1])) {
- LABEL_15:
- getCharacter(kCharacterMilos).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
- fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
- }
+
break;
default:
- return;
+ break;
}
}
@@ -354,110 +396,127 @@ void LogicManager::CONS_Milos_CompLogic(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_CompLogic(HAND_PARAMS) {
- if (msg->action > 9) {
- if (msg->action > 17) {
- if (msg->action > 122865568) {
- if (msg->action == 123852928) {
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 13;
- MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "611Dg", 38, 0, 0);
- } else if (msg->action == 221683008) {
- getCharacterCurrentParams(kCharacterMilos)[4] = 1;
- send(kCharacterMilos, kCharacterCond2, 123199584, 0);
+ switch (msg->action) {
+ case 0:
+ {
+ if (!getCharacterCurrentParams(kCharacterMilos)[4] && getCharacterCurrentParams(kCharacterMilos)[0] < _gameTime && !getCharacterCurrentParams(kCharacterMilos)[6]) {
+ getCharacterCurrentParams(kCharacterMilos)[6] = 1;
+ getCharacter(kCharacterMilos).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
+ fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
+ break;
+ }
+
+ bool skip1 = false;
+
+ if (!getCharacterCurrentParams(kCharacterMilos)[1]) {
+ getCharacterCurrentParams(kCharacterMilos)[7] = 0;
+ skip1 = true;
+ }
+
+ if (!skip1 && !getCharacterCurrentParams(kCharacterMilos)[7]) {
+ getCharacterCurrentParams(kCharacterMilos)[7] = _currentGameSessionTicks + 75;
+ if (_currentGameSessionTicks == -75) {
+ getCharacterCurrentParams(kCharacterMilos)[1] = 0;
+ getCharacterCurrentParams(kCharacterMilos)[2] = 1;
+ setDoor(38, kCharacterMilos, 1, 0, 0);
+ getCharacterCurrentParams(kCharacterMilos)[7] = 0;
+ skip1 = true;
+ }
+ }
+
+ if (!skip1 && getCharacterCurrentParams(kCharacterMilos)[7] < _currentGameSessionTicks) {
+ getCharacterCurrentParams(kCharacterMilos)[7] = 0x7FFFFFFF;
+ getCharacterCurrentParams(kCharacterMilos)[1] = 0;
+ getCharacterCurrentParams(kCharacterMilos)[2] = 1;
+ setDoor(38, kCharacterMilos, 1, 0, 0);
+ getCharacterCurrentParams(kCharacterMilos)[7] = 0;
+ }
+
+ if (_gameProgress[kProgressChapter] == 1 && !getCharacterCurrentParams(kCharacterMilos)[4]) {
+ bool skip2 = false;
+
+ if (getCharacterCurrentParams(kCharacterMilos)[5]) {
+ if (getCharacterCurrentParams(kCharacterMilos)[8] || (getCharacterCurrentParams(kCharacterMilos)[8] = _gameTime + 4500, _gameTime != -4500)) {
+ if (getCharacterCurrentParams(kCharacterMilos)[8] >= _gameTime) {
+ skip2 = true;
+ }
+
+ if (!skip2) {
+ getCharacterCurrentParams(kCharacterMilos)[8] = 0x7FFFFFFF;
+ }
}
- } else if (msg->action == 122865568) {
- getCharacter(kCharacterMilos).characterPosition.location = 0;
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 12;
- MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "611Bg", 38, 0, 0);
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterMilos).characterPosition.location = 0;
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 2;
- MilosCall(&LogicManager::CONS_Milos_DoWalk, 3, 8200, 0, 0);
- break;
- case 2:
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 3;
- MilosCall(&LogicManager::CONS_Milos_KnockTyler, 0, 0, 0, 0);
- break;
- case 3:
- if (_gameProgress[kProgressField14] == 14)
- _gameProgress[kProgressField14] = 0;
- getCharacterCurrentParams(kCharacterMilos)[5] = 1;
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 4;
- MilosCall(&LogicManager::CONS_Milos_DoWalk, 4, 3050, 0, 0);
- break;
- case 4:
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 5;
- MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "609Bg", 38, 0, 0);
- break;
- case 5:
- getCharacter(kCharacterMilos).characterPosition.location = 1;
- endGraphics(kCharacterMilos);
- send(kCharacterMilos, kCharacterVesna, 101687594, 0);
- setDoor(38, kCharacterMilos, 3, 10, 9);
- break;
- case 6:
- goto LABEL_62;
- case 7:
- case 8:
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 9;
- MilosCall(&LogicManager::CONS_Milos_DoDialog, "MIL1117A", 0, 0, 0);
- break;
- case 9:
- setDoor(38, kCharacterMilos, 3, 14, 0);
- getCharacterCurrentParams(kCharacterMilos)[1] = 1;
- break;
- case 10:
- case 11:
- getCharacterCurrentParams(kCharacterMilos)[1] = 0;
- getCharacterCurrentParams(kCharacterMilos)[2] = 1;
- break;
- case 12:
- startCycOtis(kCharacterMilos, "611Cg");
- softBlockAtDoor(kCharacterMilos, 38);
- send(kCharacterMilos, kCharacterCond2, 88652208, 0);
- break;
- case 13:
- softReleaseAtDoor(kCharacterMilos, 38);
- getCharacter(kCharacterMilos).characterPosition.location = 1;
- endGraphics(kCharacterMilos);
- setDoor(38, kCharacterMilos, 3, 10, 9);
- getCharacterCurrentParams(kCharacterMilos)[4] = 0;
- break;
- default:
- return;
+
+ if (!skip2) {
+ getCharacterCurrentParams(kCharacterMilos)[5] = 0;
+ getCharacterCurrentParams(kCharacterMilos)[8] = 0;
}
}
- } else if (msg->action == 17) {
- if (getCharacterCurrentParams(kCharacterMilos)[2] || getCharacterCurrentParams(kCharacterMilos)[1]) {
- setDoor(38, kCharacterMilos, 3, 10, 9);
- getCharacterCurrentParams(kCharacterMilos)[2] = 0;
- getCharacterCurrentParams(kCharacterMilos)[1] = 0;
+
+ if (!_gameProgress[kProgressFieldCC]) {
+ if (getCharacterParams(kCharacterMilos, 8)[2] && !_gameProgress[kProgressField14] && !getCharacterCurrentParams(kCharacterMilos)[5]) {
+ _gameProgress[kProgressField14] = 14;
+ send(kCharacterMilos, kCharacterVesna, 190412928, 0);
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 1;
+ MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "609Cg", 38, 0, 0);
+ }
+
+ break;
+ }
+
+ if (!getCharacterCurrentParams(kCharacterMilos)[3])
+ getCharacterCurrentParams(kCharacterMilos)[3] = _gameTime + 18000;
+
+ if (getCharacterCurrentParams(kCharacterMilos)[9] != 0x7FFFFFFF && _gameTime) {
+ if (getCharacterCurrentParams(kCharacterMilos)[3] >= _gameTime) {
+ if (!nearChar(kCharacterCath, kCharacterMilos, 2000) || !getCharacterCurrentParams(kCharacterMilos)[9]) {
+ getCharacterCurrentParams(kCharacterMilos)[9] = _gameTime + 150;
+ if (_gameTime == -150) {
+ if (nearChar(kCharacterCath, kCharacterMilos, 2000))
+ _gameProgress[kProgressField98] = 1;
+
+ setDoor(38, kCharacterMilos, 3, 0, 0);
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 6;
+ MilosCall(&LogicManager::CONS_Milos_DoDialog, "MIL1012", 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterMilos)[9] >= _gameTime)
+ break;
+ }
+
+ getCharacterCurrentParams(kCharacterMilos)[9] = 0x7FFFFFFF;
+ if (nearChar(kCharacterCath, kCharacterMilos, 2000))
+ _gameProgress[kProgressField98] = 1;
+
+ setDoor(38, kCharacterMilos, 3, 0, 0);
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 6;
+ MilosCall(&LogicManager::CONS_Milos_DoDialog, "MIL1012", 0, 0, 0);
}
- } else if (msg->action == 12) {
- LABEL_62:
- setDoor(38, kCharacterMilos, 3, 10, 9);
}
- return;
+
+ break;
}
- if (msg->action >= 8) {
+ case 8:
+ case 9:
if (getCharacterCurrentParams(kCharacterMilos)[1]) {
setDoor(38, kCharacterMilos, 3, 0, 0);
+
if (cathHasItem(kItemPassengerList)) {
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 10;
-
if (rnd(2) != 0) {
MilosCall(&LogicManager::CONS_Milos_DoDialog, getCathSorryDialog(), 0, 0, 0);
} else {
MilosCall(&LogicManager::CONS_Milos_DoDialog, "CAT1504", 0, 0, 0);
}
-
} else {
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 11;
MilosCall(&LogicManager::CONS_Milos_DoDialog, getCathSorryDialog(), 0, 0, 0);
}
} else {
setDoor(38, kCharacterMilos, 3, 0, 0);
+
if (msg->action == 8) {
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 7;
MilosCall(&LogicManager::CONS_Milos_DoDialog, "LIB012", 0, 0, 0);
@@ -466,76 +525,97 @@ void LogicManager::HAND_Milos_CompLogic(HAND_PARAMS) {
MilosCall(&LogicManager::CONS_Milos_DoDialog, "LIB013", 0, 0, 0);
}
}
- return;
- }
- if (msg->action)
- return;
- if (!getCharacterCurrentParams(kCharacterMilos)[4] && getCharacterCurrentParams(kCharacterMilos)[0] < _gameTime && !getCharacterCurrentParams(kCharacterMilos)[6]) {
- getCharacterCurrentParams(kCharacterMilos)[6] = 1;
- getCharacter(kCharacterMilos).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
- fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
- return;
- }
- if (!getCharacterCurrentParams(kCharacterMilos)[1])
- goto LABEL_26;
- if (!getCharacterCurrentParams(kCharacterMilos)[7]) {
- getCharacterCurrentParams(kCharacterMilos)[7] = _currentGameSessionTicks + 75;
- if (_currentGameSessionTicks == -75) {
- LABEL_25:
+
+ break;
+ case 12:
+ setDoor(38, kCharacterMilos, 3, 10, 9);
+ break;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterMilos)[2] || getCharacterCurrentParams(kCharacterMilos)[1]) {
+ setDoor(38, kCharacterMilos, 3, 10, 9);
+ getCharacterCurrentParams(kCharacterMilos)[2] = 0;
getCharacterCurrentParams(kCharacterMilos)[1] = 0;
- getCharacterCurrentParams(kCharacterMilos)[2] = 1;
- setDoor(38, kCharacterMilos, 1, 0, 0);
- LABEL_26:
- getCharacterCurrentParams(kCharacterMilos)[7] = 0;
- goto LABEL_27;
- }
- }
- if (getCharacterCurrentParams(kCharacterMilos)[7] < _currentGameSessionTicks) {
- getCharacterCurrentParams(kCharacterMilos)[7] = 0x7FFFFFFF;
- goto LABEL_25;
- }
-LABEL_27:
- if (_gameProgress[kProgressChapter] != 1 || getCharacterCurrentParams(kCharacterMilos)[4])
- return;
- if (getCharacterCurrentParams(kCharacterMilos)[5]) {
- if (getCharacterCurrentParams(kCharacterMilos)[8] || (getCharacterCurrentParams(kCharacterMilos)[8] = _gameTime + 4500, _gameTime != -4500)) {
- if (getCharacterCurrentParams(kCharacterMilos)[8] >= _gameTime)
- goto LABEL_35;
- getCharacterCurrentParams(kCharacterMilos)[8] = 0x7FFFFFFF;
- }
- getCharacterCurrentParams(kCharacterMilos)[5] = 0;
- getCharacterCurrentParams(kCharacterMilos)[8] = 0;
- }
-LABEL_35:
- if (!_gameProgress[kProgressFieldCC]) {
- if (getCharacterParams(kCharacterMilos, 8)[2] && !_gameProgress[kProgressField14] && !getCharacterCurrentParams(kCharacterMilos)[5]) {
- _gameProgress[kProgressField14] = 14;
- send(kCharacterMilos, kCharacterVesna, 190412928, 0);
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 1;
- MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "609Cg", 38, 0, 0);
}
- return;
- }
- if (!getCharacterCurrentParams(kCharacterMilos)[3])
- getCharacterCurrentParams(kCharacterMilos)[3] = _gameTime + 18000;
- if (getCharacterCurrentParams(kCharacterMilos)[9] != 0x7FFFFFFF && _gameTime) {
- if (getCharacterCurrentParams(kCharacterMilos)[3] >= _gameTime) {
- if (!nearChar(kCharacterCath, kCharacterMilos, 2000) || !getCharacterCurrentParams(kCharacterMilos)[9]) {
- getCharacterCurrentParams(kCharacterMilos)[9] = _gameTime + 150;
- if (_gameTime == -150)
- goto LABEL_50;
- }
- if (getCharacterCurrentParams(kCharacterMilos)[9] >= _gameTime)
- return;
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterMilos).characterPosition.location = 0;
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 2;
+ MilosCall(&LogicManager::CONS_Milos_DoWalk, 3, 8200, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 3;
+ MilosCall(&LogicManager::CONS_Milos_KnockTyler, 0, 0, 0, 0);
+ break;
+ case 3:
+ if (_gameProgress[kProgressField14] == 14)
+ _gameProgress[kProgressField14] = 0;
+
+ getCharacterCurrentParams(kCharacterMilos)[5] = 1;
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 4;
+ MilosCall(&LogicManager::CONS_Milos_DoWalk, 4, 3050, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 5;
+ MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "609Bg", 38, 0, 0);
+ break;
+ case 5:
+ getCharacter(kCharacterMilos).characterPosition.location = 1;
+ endGraphics(kCharacterMilos);
+ send(kCharacterMilos, kCharacterVesna, 101687594, 0);
+ setDoor(38, kCharacterMilos, 3, 10, 9);
+ break;
+ case 6:
+ setDoor(38, kCharacterMilos, 3, 10, 9);
+ break;
+ case 7:
+ case 8:
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 9;
+ MilosCall(&LogicManager::CONS_Milos_DoDialog, "MIL1117A", 0, 0, 0);
+ break;
+ case 9:
+ setDoor(38, kCharacterMilos, 3, 14, 0);
+ getCharacterCurrentParams(kCharacterMilos)[1] = 1;
+ break;
+ case 10:
+ case 11:
+ getCharacterCurrentParams(kCharacterMilos)[1] = 0;
+ getCharacterCurrentParams(kCharacterMilos)[2] = 1;
+ break;
+ case 12:
+ startCycOtis(kCharacterMilos, "611Cg");
+ softBlockAtDoor(kCharacterMilos, 38);
+ send(kCharacterMilos, kCharacterCond2, 88652208, 0);
+ break;
+ case 13:
+ softReleaseAtDoor(kCharacterMilos, 38);
+ getCharacter(kCharacterMilos).characterPosition.location = 1;
+ endGraphics(kCharacterMilos);
+ setDoor(38, kCharacterMilos, 3, 10, 9);
+ getCharacterCurrentParams(kCharacterMilos)[4] = 0;
+ break;
+ default:
+ break;
}
- getCharacterCurrentParams(kCharacterMilos)[9] = 0x7FFFFFFF;
- LABEL_50:
- if (nearChar(kCharacterCath, kCharacterMilos, 2000))
- _gameProgress[kProgressField98] = 1;
- setDoor(38, kCharacterMilos, 3, 0, 0);
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 6;
- MilosCall(&LogicManager::CONS_Milos_DoDialog, "MIL1012", 0, 0, 0);
+
+ break;
+ case 122865568:
+ getCharacter(kCharacterMilos).characterPosition.location = 0;
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 12;
+ MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "611Bg", 38, 0, 0);
+ break;
+ case 123852928:
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 13;
+ MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "611Dg", 38, 0, 0);
+ break;
+ case 221683008:
+ getCharacterCurrentParams(kCharacterMilos)[4] = 1;
+ send(kCharacterMilos, kCharacterCond2, 123199584, 0);
+ break;
+ default:
+ break;
}
}
@@ -550,20 +630,26 @@ void LogicManager::CONS_Milos_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_Birth(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- setDoor(38, kCharacterCath, 3, 10, 9);
- setDoor(46, kCharacterCath, 0, 255, 255);
- getCharacter(kCharacterMilos).characterPosition.position = 4689;
- getCharacter(kCharacterMilos).characterPosition.location = 1;
- getCharacter(kCharacterMilos).characterPosition.car = kCarRestaurant;
- autoMessage(kCharacterMilos, 157691176, 0);
- autoMessage(kCharacterMilos, 208228224, 2);
- autoMessage(kCharacterMilos, 259125998, 3);
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterMilos)[0]) {
+ getCharacterCurrentParams(kCharacterMilos)[0] = 1;
+ CONS_Milos_AtDinner(0, 0, 0, 0);
}
- } else if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterMilos)[0]) {
- getCharacterCurrentParams(kCharacterMilos)[0] = 1;
- CONS_Milos_AtDinner(0, 0, 0, 0);
+
+ break;
+ case 12:
+ setDoor(38, kCharacterCath, 3, 10, 9);
+ setDoor(46, kCharacterCath, 0, 255, 255);
+ getCharacter(kCharacterMilos).characterPosition.position = 4689;
+ getCharacter(kCharacterMilos).characterPosition.location = 1;
+ getCharacter(kCharacterMilos).characterPosition.car = kCarRestaurant;
+ autoMessage(kCharacterMilos, 157691176, 0);
+ autoMessage(kCharacterMilos, 208228224, 2);
+ autoMessage(kCharacterMilos, 259125998, 3);
+ break;
+ default:
+ break;
}
}
@@ -578,7 +664,8 @@ void LogicManager::CONS_Milos_DoOtis5009D(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_DoOtis5009D(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
send(kCharacterMilos, kCharacterTableC, 103798704, "009E");
endGraphics(kCharacterVesna);
endGraphics(kCharacterIvo);
@@ -587,12 +674,16 @@ void LogicManager::HAND_Milos_DoOtis5009D(HAND_PARAMS) {
getCharacter(kCharacterMilos).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterSalko, "009D5");
startSeqOtis(kCharacterTableC, "009D4");
startSeqOtis(kCharacterIvo, "009D3");
startSeqOtis(kCharacterVesna, "009D2");
startSeqOtis(kCharacterMilos, "009D1");
+ break;
+ default:
+ break;
}
}
@@ -617,7 +708,6 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "609Ca", 1, 0, 0);
} else {
softReleaseAtDoor(kCharacterMilos, 1);
- LABEL_59:
setDoor(1, kCharacterCath, 0, 10, 9);
getCharacter(kCharacterMilos).currentCall--;
@@ -629,7 +719,7 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
if (checkDoor(1) == 1) {
if (getCharacterCurrentParams(kCharacterMilos)[9] || (getCharacterCurrentParams(kCharacterMilos)[9] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
if (getCharacterCurrentParams(kCharacterMilos)[9] >= _currentGameSessionTicks)
- return;
+ break;
getCharacterCurrentParams(kCharacterMilos)[9] = 0x7FFFFFFF;
}
@@ -640,20 +730,22 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
case 1:
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 6;
MilosCall(&LogicManager::CONS_Milos_DoDialog, "LIB013", 0, 0, 0);
- return;
+ break;
case 2:
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 8;
MilosCall(&LogicManager::CONS_Milos_DoDialog, "LIB012", 0, 0, 0);
- return;
+ break;
case 3:
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 10;
MilosCall(&LogicManager::CONS_Milos_DoDialog, "LIB012", 0, 0, 0);
- return;
+ break;
case 4:
getCharacterCurrentParams(kCharacterMilos)[6]++;
if (getCharacterCurrentParams(kCharacterMilos)[6] < 3) {
getCharacterCurrentParams(kCharacterMilos)[4] = 1;
- goto LABEL_25;
+ setDoor(1, kCharacterMilos, checkDoor(1), getCharacterCurrentParams(kCharacterMilos)[2] == 0 ? 14 : 0, 9);
+ getCharacterCurrentParams(kCharacterMilos)[9] = 0;
+ break;
}
setDoor(1, kCharacterCath, checkDoor(1), 10, 9);
@@ -663,7 +755,9 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
break;
default:
- goto LABEL_25;
+ setDoor(1, kCharacterMilos, checkDoor(1), getCharacterCurrentParams(kCharacterMilos)[2] == 0 ? 14 : 0, 9);
+ getCharacterCurrentParams(kCharacterMilos)[9] = 0;
+ break;
}
} else if (!_gameProgress[kProgressEventCorpseMovedFromFloor] || _gameProgress[kProgressJacket] == 1) {
setDoor(9, kCharacterCath, 0, 255, 255);
@@ -683,17 +777,18 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
if (!getCharacterCurrentParams(kCharacterMilos)[3]) {
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 12;
MilosCall(&LogicManager::CONS_Milos_DoDialog, "MIL1030C", 0, 0, 0);
- return;
+ break;
}
- LABEL_70:
+
if (getCharacterCurrentParams(kCharacterMilos)[11] || (getCharacterCurrentParams(kCharacterMilos)[11] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
if (getCharacterCurrentParams(kCharacterMilos)[11] >= _currentGameSessionTicks)
- return;
+ break;
getCharacterCurrentParams(kCharacterMilos)[11] = 0x7FFFFFFF;
}
softReleaseAtDoor(kCharacterMilos, 1);
+
if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 13;
MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "609Ba", 1, 0, 0);
@@ -702,12 +797,12 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
MilosCall(&LogicManager::CONS_Milos_DoBriefCorrOtis, "609Ba", 1, 0, 0);
} else {
bumpCath(kCarNone, 1, 255);
- LABEL_79:
setDoor(9, kCharacterCath, 0, 255, 255);
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 15;
MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventMilosCorpseFloor, 0, 0);
}
}
+
break;
case 8:
if (getCharacterCurrentParams(kCharacterMilos)[1]) {
@@ -719,6 +814,7 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 22;
MilosCall(&LogicManager::CONS_Milos_DoDialogFullVol, "MIL1032", 0, 0, 0);
}
+
break;
case 9:
if (!_gameProgress[kProgressEventCorpseMovedFromFloor] || _gameProgress[kProgressJacket] == 1) {
@@ -728,18 +824,22 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
} else {
if (getCharacterCurrentParams(kCharacterMilos)[1]) {
getCharacter(kCharacterCath).characterPosition.location = 1;
- if (getModel(1) == 1)
+ if (getModel(1) == 1) {
getCharacterCurrentParams(kCharacterMilos)[5] = kEventMilosTylerCompartmentBed;
- else
+ } else {
getCharacterCurrentParams(kCharacterMilos)[5] = kEventMilosTylerCompartment;
+ }
} else {
getCharacterCurrentParams(kCharacterMilos)[5] = kEventMilosTylerCompartmentBedVisit;
+
if (getModel(1) != 1)
getCharacterCurrentParams(kCharacterMilos)[5] = kEventMilosTylerCompartmentVisit;
}
+
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 17;
MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventMilosTylerCompartmentVisit, 0, 0);
}
+
break;
case 12:
if (inComp(kCharacterCath, kCarGreenSleeping, 8200) || inComp(kCharacterCath, kCarGreenSleeping, 7850) || cathOutHisWindow()) {
@@ -755,17 +855,23 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
startCycOtis(kCharacterMilos, "609Aa");
softBlockAtDoor(kCharacterMilos, 1);
}
+
break;
case 18:
switch (getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8]) {
case 1:
getCharacter(kCharacterMilos).characterPosition.location = 0;
- goto LABEL_59;
+ setDoor(1, kCharacterCath, 0, 10, 9);
+
+ getCharacter(kCharacterMilos).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
+ fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
+ break;
case 2:
playDialog(0, "LIB014", -1, 0);
playNIS(kEventMilosCorpseFloor);
endGame(0, 1, _gameProgress[kProgressEventCorpseMovedFromFloor] == kProgressField0 ? 57 : 55, 1);
- return;
+ break;
case 3:
setDoor(1, kCharacterCath, 0, 10, 9);
setDoor(9, kCharacterCath, 0, 255, 255);
@@ -773,12 +879,16 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
playNIS(getCharacterCurrentParams(kCharacterMilos)[5]);
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 4;
MilosCall(&LogicManager::CONS_Milos_SaveGame, 1, 0, 0, 0);
- return;
+ break;
case 4:
fightOutcome = playFight(2001);
getCharacterCurrentParams(kCharacterMilos)[7] = fightOutcome;
- if (fightOutcome)
- goto LABEL_63;
+
+ if (fightOutcome) {
+ endGame(0, 0, 0, fightOutcome == 1);
+ break;
+ }
+
_gameTime += 1800;
_gameProgress[kProgressFieldCC] = 1;
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 5;
@@ -794,41 +904,65 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
getCharacter(kCharacterMilos).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
- return;
+ break;
case 6:
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 7;
MilosCall(&LogicManager::CONS_Milos_DoDialogFullVol, "MIL1031C", 0, 0, 0);
- return;
+ break;
case 7:
case 9:
case 11:
- LABEL_25:
setDoor(1, kCharacterMilos, checkDoor(1), getCharacterCurrentParams(kCharacterMilos)[2] == 0 ? 14 : 0, 9);
getCharacterCurrentParams(kCharacterMilos)[9] = 0;
- return;
+ break;
case 8:
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 9;
MilosCall(&LogicManager::CONS_Milos_DoDialogFullVol, "MIL1031A", 0, 0, 0);
- return;
+ break;
case 10:
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 11;
MilosCall(&LogicManager::CONS_Milos_DoDialogFullVol, "MIL1031B", 0, 0, 0);
- return;
+ break;
case 12:
getCharacterCurrentParams(kCharacterMilos)[3] = 1;
- goto LABEL_70;
+
+ if (getCharacterCurrentParams(kCharacterMilos)[11] || (getCharacterCurrentParams(kCharacterMilos)[11] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterMilos)[11] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterMilos)[11] = 0x7FFFFFFF;
+ }
+
+ softReleaseAtDoor(kCharacterMilos, 1);
+ if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 13;
+ MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "609Ba", 1, 0, 0);
+ } else if (checkLoc(kCharacterCath, kCarGreenSleeping)) {
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 14;
+ MilosCall(&LogicManager::CONS_Milos_DoBriefCorrOtis, "609Ba", 1, 0, 0);
+ } else {
+ bumpCath(kCarNone, 1, 255);
+ setDoor(9, kCharacterCath, 0, 255, 255);
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 15;
+ MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventMilosCorpseFloor, 0, 0);
+ }
+
+ break;
case 13:
getCharacterCurrentParams(kCharacterMilos)[1] = 1;
endGraphics(kCharacterMilos);
getCharacter(kCharacterMilos).characterPosition.location = 1;
- setDoor(1, 14, 0, 10, 9);
- return;
+ setDoor(1, kCharacterMilos, 0, 10, 9);
+ break;
case 14:
- goto LABEL_79;
+ setDoor(9, kCharacterCath, 0, 255, 255);
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 15;
+ MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventMilosCorpseFloor, 0, 0);
+ break;
case 15:
playNIS(kEventMilosCorpseFloor);
- endGame(0, 1, 57, 1);
- return;
+ endGame(0, 1, 57, true);
+ break;
case 16:
if (checkDoor(1) != 1) {
playDialog(0, "LIB014", -1, 0);
@@ -837,8 +971,8 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
}
playNIS(kEventMilosCorpseFloor);
- endGame(0, 1, _gameProgress[kProgressEventCorpseMovedFromFloor] == 0 ? 57 : 55, 1);
- return;
+ endGame(0, 1, _gameProgress[kProgressEventCorpseMovedFromFloor] == 0 ? 57 : 55, true);
+ break;
case 17:
if (checkDoor(1) != 1) {
playDialog(0, "LIB014", -1, 0);
@@ -851,12 +985,11 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
playNIS(getCharacterCurrentParams(kCharacterMilos)[5]);
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 18;
MilosCall(&LogicManager::CONS_Milos_SaveGame, 1, 0, 0, 0);
- return;
+ break;
case 18:
fightOutcome = playFight(2001);
getCharacterCurrentParams(kCharacterMilos)[7] = fightOutcome;
if (fightOutcome) {
- LABEL_63:
endGame(0, 0, 0, fightOutcome == 1);
} else {
_gameTime += 1800;
@@ -864,24 +997,26 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 19;
MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventMilosTylerCompartmentDefeat, 0, 0);
}
+
break;
case 20:
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 21;
MilosCall(&LogicManager::CONS_Milos_DoDialog, "MIL1117A", 0, 0, 0);
break;
case 21:
- setDoor(1, 14, 0, 10, 9);
+ setDoor(1, kCharacterMilos, 0, 10, 9);
break;
case 22:
getCharacterCurrentParams(kCharacterMilos)[2] = 1;
setDoor(1, kCharacterMilos, checkDoor(1), 0, 9);
break;
default:
- return;
+ break;
}
+
break;
default:
- return;
+ break;
}
}
@@ -896,54 +1031,91 @@ void LogicManager::CONS_Milos_AtDinner(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_AtDinner(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- send(kCharacterMilos, kCharacterTableC, 136455232, 0);
- startCycOtis(kCharacterMilos, "009A");
- return;
- }
- if (msg->action != 18)
- return;
- if (getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] != 1) {
- if (getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] == 2) {
- startCycOtis(kCharacterMilos, "009A");
- getCharacterCurrentParams(kCharacterMilos)[1] = 1;
- }
- return;
- }
- startCycOtis(kCharacterMilos, "009A");
- getCharacterCurrentParams(kCharacterMilos)[0] = 1;
- } else {
+ switch (msg->action) {
+ case 0:
if (_gameTime > 1071000 && !getCharacterCurrentParams(kCharacterMilos)[2]) {
getCharacterCurrentParams(kCharacterMilos)[2] = 1;
send(kCharacterMilos, kCharacterWaiter2, 223002560, 0);
}
+
if (_gameTime > 1089000 && rcClear()) {
CONS_Milos_ReturnFromDinner(0, 0, 0, 0);
- return;
+ break;
}
+
if (checkCathDir(kCarRestaurant, 61) && !getCharacterCurrentParams(kCharacterMilos)[0]) {
if (getCharacterCurrentParams(kCharacterMilos)[3] || (getCharacterCurrentParams(kCharacterMilos)[3] = _currentGameSessionTicks + 45,
_currentGameSessionTicks != -45)) {
- if (getCharacterCurrentParams(kCharacterMilos)[3] >= _currentGameSessionTicks)
- goto LABEL_23;
+ if (getCharacterCurrentParams(kCharacterMilos)[3] >= _currentGameSessionTicks) {
+ if (checkCathDir(kCarRestaurant, 70) && !getCharacterCurrentParams(kCharacterMilos)[1]) {
+ if (getCharacterCurrentParams(kCharacterMilos)[4] || (getCharacterCurrentParams(kCharacterMilos)[4] = _currentGameSessionTicks + 45,
+ _currentGameSessionTicks != -45)) {
+ if (getCharacterCurrentParams(kCharacterMilos)[4] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterMilos)[4] = 0x7FFFFFFF;
+ }
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 2;
+ MilosCall(&LogicManager::CONS_Milos_DoSeqOtis, "009C", 0, 0, 0);
+ }
+
+ break;
+ }
+
getCharacterCurrentParams(kCharacterMilos)[3] = 0x7FFFFFFF;
}
+
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 1;
MilosCall(&LogicManager::CONS_Milos_DoSeqOtis, "009C", 0, 0, 0);
- return;
+ break;
}
- }
-LABEL_23:
- if (checkCathDir(kCarRestaurant, 70) && !getCharacterCurrentParams(kCharacterMilos)[1]) {
- if (getCharacterCurrentParams(kCharacterMilos)[4] || (getCharacterCurrentParams(kCharacterMilos)[4] = _currentGameSessionTicks + 45,
- _currentGameSessionTicks != -45)) {
- if (getCharacterCurrentParams(kCharacterMilos)[4] >= _currentGameSessionTicks)
- return;
- getCharacterCurrentParams(kCharacterMilos)[4] = 0x7FFFFFFF;
+
+ if (checkCathDir(kCarRestaurant, 70) && !getCharacterCurrentParams(kCharacterMilos)[1]) {
+ if (getCharacterCurrentParams(kCharacterMilos)[4] || (getCharacterCurrentParams(kCharacterMilos)[4] = _currentGameSessionTicks + 45,
+ _currentGameSessionTicks != -45)) {
+ if (getCharacterCurrentParams(kCharacterMilos)[4] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterMilos)[4] = 0x7FFFFFFF;
+ }
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 2;
+ MilosCall(&LogicManager::CONS_Milos_DoSeqOtis, "009C", 0, 0, 0);
}
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 2;
- MilosCall(&LogicManager::CONS_Milos_DoSeqOtis, "009C", 0, 0, 0);
+
+ break;
+ case 12:
+ send(kCharacterMilos, kCharacterTableC, 136455232, 0);
+ startCycOtis(kCharacterMilos, "009A");
+ break;
+ case 18:
+ if (getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] != 1) {
+ if (getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] == 2) {
+ startCycOtis(kCharacterMilos, "009A");
+ getCharacterCurrentParams(kCharacterMilos)[1] = 1;
+ }
+
+ break;
+ }
+
+ startCycOtis(kCharacterMilos, "009A");
+ getCharacterCurrentParams(kCharacterMilos)[0] = 1;
+
+ if (checkCathDir(kCarRestaurant, 70) && !getCharacterCurrentParams(kCharacterMilos)[1]) {
+ if (getCharacterCurrentParams(kCharacterMilos)[4] || (getCharacterCurrentParams(kCharacterMilos)[4] = _currentGameSessionTicks + 45,
+ _currentGameSessionTicks != -45)) {
+ if (getCharacterCurrentParams(kCharacterMilos)[4] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterMilos)[4] = 0x7FFFFFFF;
+ }
+
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 2;
+ MilosCall(&LogicManager::CONS_Milos_DoSeqOtis, "009C", 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -958,61 +1130,71 @@ void LogicManager::CONS_Milos_ReturnFromDinner(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_ReturnFromDinner(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8]) {
- case 1:
- send(kCharacterMilos, kCharacterWaiter2, 269485588, 0);
- send(kCharacterMilos, kCharacterIvo, 125242096, 0);
- startSeqOtis(kCharacterMilos, "807DS");
- if (inDiningRoom(kCharacterCath))
- advanceFrame(kCharacterMilos);
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 2;
- MilosCall(&LogicManager::CONS_Milos_FinishSeqOtis, 0, 0, 0, 0);
- break;
- case 2:
- endGraphics(kCharacterMilos);
- break;
- case 3:
- if (nearChar(kCharacterMilos, kCharacterVesna, 750) || nearX(kCharacterVesna, 3050, 500)) {
- send(kCharacterMilos, kCharacterVesna, 123668192, 0);
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 4;
- MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "611Ag", 0x26, 0, 0);
- } else {
- getCharacterCurrentParams(kCharacterMilos)[0] = 1;
- startCycOtis(kCharacterMilos, "609Dg");
- softBlockAtDoor(kCharacterMilos, 38);
- }
- break;
- case 4:
- getCharacter(kCharacterMilos).characterPosition.position = 3050;
- getCharacter(kCharacterMilos).characterPosition.location = 1;
- endGraphics(kCharacterMilos);
- CONS_Milos_InComp(0, 0, 0, 0);
- break;
- case 5:
- softReleaseAtDoor(kCharacterMilos, 38);
- getCharacter(kCharacterMilos).characterPosition.position = 3050;
- getCharacter(kCharacterMilos).characterPosition.location = 1;
- endGraphics(kCharacterMilos);
- CONS_Milos_InComp(0, 0, 0, 0);
- break;
- default:
- return;
- }
- } else if (msg->action == 135024800) {
- send(kCharacterMilos, kCharacterVesna, 204832737, 0);
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 3;
- MilosCall(&LogicManager::CONS_Milos_DoWalk, 4, 0xBEA, 0, 0);
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterMilos)[0] && (nearChar(kCharacterMilos, kCharacterVesna, 750) || nearX(kCharacterVesna, 3050, 500))) {
+ send(kCharacterMilos, kCharacterVesna, 123668192, 0);
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 5;
+ MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "611Ag", 38, 0, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
getCharacter(kCharacterMilos).characterPosition.location = 0;
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 1;
MilosCall(&LogicManager::CONS_Milos_DoOtis5009D, 0, 0, 0, 0);
- } else if (msg->action == 0 && getCharacterCurrentParams(kCharacterMilos)[0] && (nearChar(kCharacterMilos, kCharacterVesna, 750) || nearX(kCharacterVesna, 3050, 500))) {
- send(kCharacterMilos, kCharacterVesna, 123668192, 0);
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 5;
- MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "611Ag", 38, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8]) {
+ case 1:
+ send(kCharacterMilos, kCharacterWaiter2, 269485588, 0);
+ send(kCharacterMilos, kCharacterIvo, 125242096, 0);
+ startSeqOtis(kCharacterMilos, "807DS");
+ if (inDiningRoom(kCharacterCath))
+ advanceFrame(kCharacterMilos);
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 2;
+ MilosCall(&LogicManager::CONS_Milos_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 2:
+ endGraphics(kCharacterMilos);
+ break;
+ case 3:
+ if (nearChar(kCharacterMilos, kCharacterVesna, 750) || nearX(kCharacterVesna, 3050, 500)) {
+ send(kCharacterMilos, kCharacterVesna, 123668192, 0);
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 4;
+ MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "611Ag", 38, 0, 0);
+ } else {
+ getCharacterCurrentParams(kCharacterMilos)[0] = 1;
+ startCycOtis(kCharacterMilos, "609Dg");
+ softBlockAtDoor(kCharacterMilos, 38);
+ }
+
+ break;
+ case 4:
+ getCharacter(kCharacterMilos).characterPosition.position = 3050;
+ getCharacter(kCharacterMilos).characterPosition.location = 1;
+ endGraphics(kCharacterMilos);
+ CONS_Milos_InComp(0, 0, 0, 0);
+ break;
+ case 5:
+ softReleaseAtDoor(kCharacterMilos, 38);
+ getCharacter(kCharacterMilos).characterPosition.position = 3050;
+ getCharacter(kCharacterMilos).characterPosition.location = 1;
+ endGraphics(kCharacterMilos);
+ CONS_Milos_InComp(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 135024800:
+ send(kCharacterMilos, kCharacterVesna, 204832737, 0);
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 3;
+ MilosCall(&LogicManager::CONS_Milos_DoWalk, 4, 3050, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1027,9 +1209,13 @@ void LogicManager::CONS_Milos_InComp(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_InComp(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 1;
MilosCall(&LogicManager::CONS_Milos_CompLogic, 1404000, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1044,12 +1230,16 @@ void LogicManager::CONS_Milos_Asleep(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_Asleep(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterMilos).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterMilos).characterPosition.position = 3050;
getCharacter(kCharacterMilos).characterPosition.location = 1;
endGraphics(kCharacterMilos);
setDoor(38, kCharacterCath, 3, 10, 9);
+ break;
+ default:
+ break;
}
}
@@ -1064,19 +1254,22 @@ void LogicManager::CONS_Milos_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_StartPart2(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterMilos);
- getCharacter(kCharacterMilos).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterMilos).characterPosition.position = 540;
- getCharacter(kCharacterMilos).characterPosition.location = 0;
- getCharacter(kCharacterMilos).inventoryItem = 0;
- getCharacter(kCharacterMilos).clothes = 0;
- setDoor(38, kCharacterCath, 3, 10, 9);
- setDoor(46, kCharacterCath, 0, 255, 255);
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Milos_OnRearPlat(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterMilos);
+ getCharacter(kCharacterMilos).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterMilos).characterPosition.position = 540;
+ getCharacter(kCharacterMilos).characterPosition.location = 0;
+ getCharacter(kCharacterMilos).inventoryItem = 0;
+ getCharacter(kCharacterMilos).clothes = 0;
+ setDoor(38, kCharacterCath, 3, 10, 9);
+ setDoor(46, kCharacterCath, 0, 255, 255);
+ break;
+ default:
+ break;
}
}
@@ -1103,6 +1296,7 @@ void LogicManager::HAND_Milos_OnRearPlat(HAND_PARAMS) {
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 1;
MilosCall(&LogicManager::CONS_Milos_DoWalk, 4, 3050, 0, 0);
}
+
break;
case 18:
if (getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] == 1) {
@@ -1115,6 +1309,9 @@ void LogicManager::HAND_Milos_OnRearPlat(HAND_PARAMS) {
send(kCharacterMilos, kCharacterVesna, 101687594, 0);
CONS_Milos_InPart2(0, 0, 0, 0);
}
+
+ break;
+ default:
break;
}
}
@@ -1134,33 +1331,38 @@ void LogicManager::HAND_Milos_InPart2(HAND_PARAMS) {
case 0:
if (!getCharacterCurrentParams(kCharacterMilos)[1]) {
getCharacterCurrentParams(kCharacterMilos)[1] = _gameTime + 4500;
- if (_gameTime == -4500)
- goto LABEL_7;
+ if (_gameTime == -4500) {
+ getCharacterCurrentParams(kCharacterMilos)[0] = 1;
+ break;
+ }
}
+
if (getCharacterCurrentParams(kCharacterMilos)[1] < _gameTime) {
getCharacterCurrentParams(kCharacterMilos)[1] = 0x7FFFFFFF;
- LABEL_7:
getCharacterCurrentParams(kCharacterMilos)[0] = 1;
}
+
break;
case 8:
setDoor(38, kCharacterMilos, 3, 0, 0);
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 1;
MilosCall(&LogicManager::CONS_Milos_DoDialog, "LIB012", 0, 0, 0);
- return;
+ break;
case 9:
setDoor(38, kCharacterMilos, 3, 0, 0);
getCharacter(kCharacterCath).characterPosition.location = 1;
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 3;
MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventMilosCompartmentVisitAugust, 0, 0);
- return;
+ break;
case 12:
- goto LABEL_10;
+ setDoor(38, kCharacterMilos, 3, 10, 9);
+ break;
case 17:
if (!_gameEvents[kEventMilosCompartmentVisitAugust] && !checkLoc(kCharacterCath, kCarRedSleeping) && getCharacterCurrentParams(kCharacterMilos)[0]) {
CONS_Milos_OnRearPlat(0, 0, 0, 0);
}
- return;
+
+ break;
case 18:
switch (getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8]) {
case 1:
@@ -1168,7 +1370,6 @@ void LogicManager::HAND_Milos_InPart2(HAND_PARAMS) {
MilosCall(&LogicManager::CONS_Milos_DoDialog, "Mil1118", 0, 0, 0);
break;
case 2:
- LABEL_10:
setDoor(38, kCharacterMilos, 3, 10, 9);
break;
case 3:
@@ -1178,10 +1379,13 @@ void LogicManager::HAND_Milos_InPart2(HAND_PARAMS) {
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 4;
MilosCall(&LogicManager::CONS_Milos_CompLogic, 15803100, 0, 0, 0);
break;
+ default:
+ break;
}
- return;
+
+ break;
default:
- return;
+ break;
}
}
@@ -1196,19 +1400,25 @@ void LogicManager::CONS_Milos_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_StartPart3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterMilos);
- getCharacter(kCharacterMilos).inventoryItem = 0;
- getCharacter(kCharacterMilos).clothes = 0;
- setDoor(38, kCharacterMilos, 3, 10, 9);
- getCharacterParams(kCharacterMilos, 8)[0] = 0;
- getCharacterParams(kCharacterMilos, 8)[3] = 0;
+ switch (msg->action) {
+ case 0:
+ if (_gameEvents[kEventMilosCompartmentVisitAugust]) {
+ CONS_Milos_Unfriendly(0, 0, 0, 0);
+ } else {
+ CONS_Milos_OnRearPlat3(0, 0, 0, 0);
}
- } else if (_gameEvents[kEventMilosCompartmentVisitAugust]) {
- CONS_Milos_Unfriendly(0, 0, 0, 0);
- } else {
- CONS_Milos_OnRearPlat3(0, 0, 0, 0);
+
+ break;
+ case 12:
+ endGraphics(kCharacterMilos);
+ getCharacter(kCharacterMilos).inventoryItem = 0;
+ getCharacter(kCharacterMilos).clothes = 0;
+ setDoor(38, kCharacterMilos, 3, 10, 9);
+ getCharacterParams(kCharacterMilos, 8)[0] = 0;
+ getCharacterParams(kCharacterMilos, 8)[3] = 0;
+ break;
+ default:
+ break;
}
}
@@ -1230,6 +1440,7 @@ void LogicManager::HAND_Milos_OnRearPlat3(HAND_PARAMS) {
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 1;
MilosCall(&LogicManager::CONS_Milos_DoWalk, 4, 3050, 0, 0);
}
+
break;
case 12:
getCharacter(kCharacterMilos).characterPosition.position = 540;
@@ -1242,6 +1453,7 @@ void LogicManager::HAND_Milos_OnRearPlat3(HAND_PARAMS) {
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 3;
MilosCall(&LogicManager::CONS_Milos_DoWalk, 4, 0xBEA, 0, 0);
}
+
break;
case 18:
switch (getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8]) {
@@ -1261,11 +1473,12 @@ void LogicManager::HAND_Milos_OnRearPlat3(HAND_PARAMS) {
MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "609Bg", 38, 0, 0);
break;
default:
- return;
+ break;
}
+
break;
default:
- return;
+ break;
}
}
@@ -1282,26 +1495,33 @@ void LogicManager::CONS_Milos_Unfriendly(CONS_PARAMS) {
void LogicManager::HAND_Milos_Unfriendly(HAND_PARAMS) {
switch (msg->action) {
case 0:
+ {
+ bool skip = false;
+
if (!getCharacterCurrentParams(kCharacterMilos)[3]) {
getCharacterCurrentParams(kCharacterMilos)[3] = _gameTime + 4500;
- if (_gameTime == -4500)
- goto LABEL_7;
+ if (_gameTime == -4500) {
+ skip = true;
+ getCharacterCurrentParams(kCharacterMilos)[2] = 1;
+ }
}
- if (getCharacterCurrentParams(kCharacterMilos)[3] < _gameTime) {
+
+ if (!skip && getCharacterCurrentParams(kCharacterMilos)[3] < _gameTime) {
getCharacterCurrentParams(kCharacterMilos)[3] = 0x7FFFFFFF;
- LABEL_7:
getCharacterCurrentParams(kCharacterMilos)[2] = 1;
}
+
if (getCharacterParams(kCharacterMilos, 8)[0]) {
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 1;
MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "609Cg", 38, 0, 0);
- return;
+ break;
}
+
if (getCharacterCurrentParams(kCharacterMilos)[0]) {
if (getCharacterCurrentParams(kCharacterMilos)[4] || (getCharacterCurrentParams(kCharacterMilos)[4] = _currentGameSessionTicks + 75,
_currentGameSessionTicks != -75)) {
if (getCharacterCurrentParams(kCharacterMilos)[4] >= _currentGameSessionTicks)
- return;
+ break;
getCharacterCurrentParams(kCharacterMilos)[4] = 0x7FFFFFFF;
}
@@ -1313,7 +1533,9 @@ void LogicManager::HAND_Milos_Unfriendly(HAND_PARAMS) {
} else {
getCharacterCurrentParams(kCharacterMilos)[4] = 0;
}
+
break;
+ }
case 8:
if (getCharacterCurrentParams(kCharacterMilos)[0]) {
setDoor(38, kCharacterMilos, 3, 0, 0);
@@ -1334,7 +1556,8 @@ void LogicManager::HAND_Milos_Unfriendly(HAND_PARAMS) {
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 6;
MilosCall(&LogicManager::CONS_Milos_DoDialog, "LIB012", 0, 0, 0);
}
- return;
+
+ break;
case 9:
setDoor(38, kCharacterMilos, 3, 0, 0);
if (_gameEvents[kEventMilosCompartmentVisitAugust] || _gameTime >= 2106000) {
@@ -1345,13 +1568,14 @@ void LogicManager::HAND_Milos_Unfriendly(HAND_PARAMS) {
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 11;
MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventMilosCompartmentVisitAugust, 0, 0);
}
- return;
+
+ break;
case 12:
getCharacter(kCharacterMilos).characterPosition.position = 3050;
getCharacter(kCharacterMilos).characterPosition.location = 1;
getCharacter(kCharacterMilos).characterPosition.car = kCarRedSleeping;
setDoor(38, kCharacterMilos, 3, 10, 9);
- return;
+ break;
case 17:
if (_gameEvents[kEventMilosCompartmentVisitAugust] || checkLoc(kCharacterCath, kCarRedSleeping) || !getCharacterCurrentParams(kCharacterMilos)[2] || _gameTime >= 2106000) {
if (getCharacterCurrentParams(kCharacterMilos)[1] || getCharacterCurrentParams(kCharacterMilos)[0]) {
@@ -1362,7 +1586,8 @@ void LogicManager::HAND_Milos_Unfriendly(HAND_PARAMS) {
} else {
CONS_Milos_OnRearPlat3(0, 0, 0, 0);
}
- return;
+
+ break;
case 18:
switch (getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8]) {
case 1:
@@ -1373,21 +1598,33 @@ void LogicManager::HAND_Milos_Unfriendly(HAND_PARAMS) {
MilosCall(&LogicManager::CONS_Milos_LookingForCath, 2223000, 0, 0, 0);
break;
case 2:
- if (!getCharacterParams(kCharacterMilos, 8)[1])
- goto LABEL_47;
+ if (!getCharacterParams(kCharacterMilos, 8)[1]) {
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 4;
+ MilosCall(&LogicManager::CONS_Milos_DoWalk, 4, 3050, 0, 0);
+ break;
+ }
+
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 3;
MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventMilosCorridorThanksD, 0, 0);
break;
case 3:
- playNIS(((getCharacter(kCharacterMilos).characterPosition.position < getCharacter(kCharacterCath).characterPosition.position) + kEventMilosCorridorThanks));
+ if (getCharacter(kCharacterMilos).characterPosition.position < getCharacter(kCharacterCath).characterPosition.position) {
+ playNIS(kEventMilosCorridorThanksD);
+ } else {
+ playNIS(kEventMilosCorridorThanks);
+ }
+
if (getCharacter(kCharacterMilos).characterPosition.car == 4 && nearX(kCharacterMilos, 3050, 500))
getCharacter(kCharacterMilos).characterPosition.position = 3550;
+
walk(kCharacterMilos, kCarRedSleeping, 3050);
- if (getCharacter(kCharacterMilos).direction == 2)
+
+ if (getCharacter(kCharacterMilos).direction == 2) {
bumpCathRx(getCharacter(kCharacterMilos).characterPosition.car, getCharacter(kCharacterMilos).characterPosition.position + 750);
- else
+ } else {
bumpCathFx(getCharacter(kCharacterMilos).characterPosition.car, getCharacter(kCharacterMilos).characterPosition.position - 750);
- LABEL_47:
+ }
+
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 4;
MilosCall(&LogicManager::CONS_Milos_DoWalk, 4, 3050, 0, 0);
break;
@@ -1409,6 +1646,7 @@ void LogicManager::HAND_Milos_Unfriendly(HAND_PARAMS) {
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 7;
MilosCall(&LogicManager::CONS_Milos_DoDialog, "Mil1118", 0, 0, 0);
}
+
break;
case 7:
setDoor(38, kCharacterMilos, 3, 10, 9);
@@ -1434,11 +1672,12 @@ void LogicManager::HAND_Milos_Unfriendly(HAND_PARAMS) {
MilosCall(&LogicManager::CONS_Milos_DoDialog, "MIL1117A", 0, 0, 0);
break;
default:
- return;
+ break;
}
- return;
+
+ break;
default:
- return;
+ break;
}
}
@@ -1455,28 +1694,34 @@ void LogicManager::CONS_Milos_Friendly(CONS_PARAMS) {
void LogicManager::HAND_Milos_Friendly(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameEvents[kEventMilosCompartmentVisitTyler] || _gameProgress[kProgressField54] || getCharacterParams(kCharacterMilos, 8)[3]) {
- goto LABEL_11;
- }
- if (!getCharacterCurrentParams(kCharacterMilos)[2]) {
- getCharacterCurrentParams(kCharacterMilos)[2] = _gameTime + 13500;
- if (_gameTime == -13500)
- goto LABEL_10;
- }
- if (getCharacterCurrentParams(kCharacterMilos)[2] < _gameTime) {
- getCharacterCurrentParams(kCharacterMilos)[2] = 0x7FFFFFFF;
- LABEL_10:
- send(kCharacterMilos, kCharacterVesna, 155913424, 0);
- getCharacterCurrentParams(kCharacterMilos)[2] = 0;
+ if (!_gameEvents[kEventMilosCompartmentVisitTyler] && !_gameProgress[kProgressField54] && !getCharacterParams(kCharacterMilos, 8)[3]) {
+ bool skip = false;
+
+ if (!getCharacterCurrentParams(kCharacterMilos)[2]) {
+ getCharacterCurrentParams(kCharacterMilos)[2] = _gameTime + 13500;
+ if (_gameTime == -13500) {
+ skip = true;
+ send(kCharacterMilos, kCharacterVesna, 155913424, 0);
+ getCharacterCurrentParams(kCharacterMilos)[2] = 0;
+ }
+ }
+
+ if (!skip && getCharacterCurrentParams(kCharacterMilos)[2] < _gameTime) {
+ getCharacterCurrentParams(kCharacterMilos)[2] = 0x7FFFFFFF;
+ send(kCharacterMilos, kCharacterVesna, 155913424, 0);
+ getCharacterCurrentParams(kCharacterMilos)[2] = 0;
+ }
}
- LABEL_11:
+
if (getCharacterCurrentParams(kCharacterMilos)[0]) {
if (getCharacterCurrentParams(kCharacterMilos)[3] || (getCharacterCurrentParams(kCharacterMilos)[3] = _currentGameSessionTicks + 75,
_currentGameSessionTicks != -75)) {
if (getCharacterCurrentParams(kCharacterMilos)[3] >= _currentGameSessionTicks)
- return;
+ break;
+
getCharacterCurrentParams(kCharacterMilos)[3] = 0x7FFFFFFF;
}
+
getCharacterCurrentParams(kCharacterMilos)[0] = 0;
getCharacterCurrentParams(kCharacterMilos)[1] = 1;
setDoor(38, kCharacterMilos, 1, 0, 0);
@@ -1484,6 +1729,7 @@ void LogicManager::HAND_Milos_Friendly(HAND_PARAMS) {
} else {
getCharacterCurrentParams(kCharacterMilos)[3] = 0;
}
+
break;
case 8:
case 9:
@@ -1506,20 +1752,23 @@ void LogicManager::HAND_Milos_Friendly(HAND_PARAMS) {
MilosCall(&LogicManager::CONS_Milos_DoDialog, "LIB013", 0, 0, 0);
}
}
- return;
+
+ break;
case 12:
setDoor(38, kCharacterMilos, 3, 10, 9);
if (!_gameEvents[kEventMilosCompartmentVisitTyler] && !_gameProgress[kProgressField54] && !getCharacterParams(kCharacterMilos, 8)[3]) {
send(kCharacterMilos, kCharacterVesna, 155913424, 0);
}
- return;
+
+ break;
case 17:
if (getCharacterCurrentParams(kCharacterMilos)[1] || getCharacterCurrentParams(kCharacterMilos)[0]) {
setDoor(38, kCharacterMilos, 3, 10, 9);
getCharacterCurrentParams(kCharacterMilos)[1] = 0;
getCharacterCurrentParams(kCharacterMilos)[0] = 0;
}
- return;
+
+ break;
case 18:
switch (getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8]) {
case 1:
@@ -1528,22 +1777,26 @@ void LogicManager::HAND_Milos_Friendly(HAND_PARAMS) {
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 3;
MilosCall(&LogicManager::CONS_Milos_DoDialog, "VES1015A", 0, 0, 0);
} else {
- if (_gameEvents[kEventMilosCompartmentVisitTyler] || getCharacterParams(kCharacterMilos, 8)[3])
- goto LABEL_40;
+ if (_gameEvents[kEventMilosCompartmentVisitTyler] || getCharacterParams(kCharacterMilos, 8)[3]) {
+ setDoor(38, kCharacterMilos, 1, 10, 9);
+ break;
+ }
+
forceJump(kCharacterVesna, &LogicManager::CONS_Vesna_InComp);
getCharacter(kCharacterCath).characterPosition.location = 1;
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 4;
MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventMilosCompartmentVisitTyler, 0, 0);
}
+
break;
case 3:
setDoor(38, kCharacterMilos, 1, 14, 0);
getCharacterCurrentParams(kCharacterMilos)[0] = 1;
- goto LABEL_40;
+ setDoor(38, kCharacterMilos, 1, 10, 9);
+ break;
case 4:
playNIS(kEventMilosCompartmentVisitTyler);
bumpCath(kCarRestaurant, 5, 255);
- LABEL_40:
setDoor(38, kCharacterMilos, 1, 10, 9);
break;
case 5:
@@ -1551,11 +1804,12 @@ void LogicManager::HAND_Milos_Friendly(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterMilos)[1] = 1;
break;
default:
- return;
+ break;
}
- return;
+
+ break;
default:
- return;
+ break;
}
}
@@ -1572,60 +1826,78 @@ void LogicManager::CONS_Milos_LookingForCath(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_LookingForCath(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacterParams(kCharacterMilos, 8)[1] = 0;
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 1;
- MilosCall(&LogicManager::CONS_Milos_DoWalkSearchingForCath, 4, 540, 0, 0);
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8]) {
- case 1:
- if (!getCharacterParams(kCharacterMilos, 8)[1])
- goto LABEL_23;
- goto LABEL_22;
- case 2:
- case 3:
- if (getCharacterParams(kCharacterMilos, 8)[1])
- goto LABEL_22;
- endGraphics(kCharacterMilos);
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 4;
- MilosCall(&LogicManager::CONS_Milos_DoWait, 450, 0, 0, 0);
- break;
- case 4:
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 5;
- MilosCall(&LogicManager::CONS_Milos_DoWalkSearchingForCath, 4, 540, 0, 0);
- return;
- case 5:
- if (getCharacterParams(kCharacterMilos, 8)[1]) {
- LABEL_22:
- getCharacter(kCharacterMilos).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
- fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterMilos)[0] >= _gameTime || getCharacterCurrentParams(kCharacterMilos)[1]) {
+ if (cathInCorridor(kCarGreenSleeping) || cathInCorridor(kCarRedSleeping)) {
+ if (checkLoc(kCharacterCath, kCarGreenSleeping)) {
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 2;
+ MilosCall(&LogicManager::CONS_Milos_DoWalkSearchingForCath, 3, 540, 0, 0);
} else {
- LABEL_23:
- endGraphics(kCharacterMilos);
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 3;
+ MilosCall(&LogicManager::CONS_Milos_DoWalkSearchingForCath, 4, 9460, 0, 0);
}
- break;
- default:
- return;
}
+ } else {
+ getCharacterCurrentParams(kCharacterMilos)[1] = 1;
+
+ getCharacter(kCharacterMilos).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
+ fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
}
- } else if (getCharacterCurrentParams(kCharacterMilos)[0] >= _gameTime || getCharacterCurrentParams(kCharacterMilos)[1]) {
- if (cathInCorridor(kCarGreenSleeping) || cathInCorridor(kCarRedSleeping)) {
- if (checkLoc(kCharacterCath, kCarGreenSleeping)) {
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 2;
- MilosCall(&LogicManager::CONS_Milos_DoWalkSearchingForCath, 3, 540, 0, 0);
+
+ break;
+ case 12:
+ getCharacterParams(kCharacterMilos, 8)[1] = 0;
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 1;
+ MilosCall(&LogicManager::CONS_Milos_DoWalkSearchingForCath, 4, 540, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8]) {
+ case 1:
+ if (getCharacterParams(kCharacterMilos, 8)[1]) {
+ getCharacter(kCharacterMilos).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
+ fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
} else {
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 3;
- MilosCall(&LogicManager::CONS_Milos_DoWalkSearchingForCath, 4, 9460, 0, 0);
+ endGraphics(kCharacterMilos);
+ }
+
+ break;
+ case 2:
+ case 3:
+ if (getCharacterParams(kCharacterMilos, 8)[1]) {
+ getCharacter(kCharacterMilos).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
+ fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
+ } else {
+ endGraphics(kCharacterMilos);
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 4;
+ MilosCall(&LogicManager::CONS_Milos_DoWait, 450, 0, 0, 0);
+ }
+
+ break;
+ case 4:
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 5;
+ MilosCall(&LogicManager::CONS_Milos_DoWalkSearchingForCath, 4, 540, 0, 0);
+ break;
+ case 5:
+ if (getCharacterParams(kCharacterMilos, 8)[1]) {
+ getCharacter(kCharacterMilos).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
+ fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
+ } else {
+ endGraphics(kCharacterMilos);
}
+
+ break;
+ default:
+ break;
}
- } else {
- getCharacterCurrentParams(kCharacterMilos)[1] = 1;
- getCharacter(kCharacterMilos).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
- fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -1643,18 +1915,13 @@ void LogicManager::CONS_Milos_DoWalkSearchingForCath(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_DoWalkSearchingForCath(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12 && walk(kCharacterMilos, getCharacterCurrentParams(kCharacterMilos)[0], getCharacterCurrentParams(kCharacterMilos)[1]))
- goto LABEL_13;
- } else {
+ switch (msg->action) {
+ case 0:
if (walk(kCharacterMilos, getCharacterCurrentParams(kCharacterMilos)[0], getCharacterCurrentParams(kCharacterMilos)[1])) {
- LABEL_13:
getCharacter(kCharacterMilos).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
- return;
- }
- if (nearChar(kCharacterMilos, kCharacterCath, 1000) && !onLowPlatform(kCharacterCath) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
+ } else if (nearChar(kCharacterMilos, kCharacterCath, 1000) && !onLowPlatform(kCharacterCath) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
if (getCharacter(kCharacterMilos).characterPosition.car == kCarGreenSleeping || getCharacter(kCharacterMilos).characterPosition.car == kCarRedSleeping) {
getCharacterParams(kCharacterMilos, 8)[1] = 1;
@@ -1663,6 +1930,18 @@ void LogicManager::HAND_Milos_DoWalkSearchingForCath(HAND_PARAMS) {
fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
}
}
+
+ break;
+ case 12:
+ if (walk(kCharacterMilos, getCharacterCurrentParams(kCharacterMilos)[0], getCharacterCurrentParams(kCharacterMilos)[1])) {
+ getCharacter(kCharacterMilos).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterMilos, _functionsMilos[getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall]]);
+ fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -1677,16 +1956,19 @@ void LogicManager::CONS_Milos_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_StartPart4(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterMilos);
- getCharacter(kCharacterMilos).characterPosition.position = 3050;
- getCharacter(kCharacterMilos).characterPosition.location = 1;
- getCharacter(kCharacterMilos).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterMilos).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Milos_Conspiring(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterMilos);
+ getCharacter(kCharacterMilos).characterPosition.position = 3050;
+ getCharacter(kCharacterMilos).characterPosition.location = 1;
+ getCharacter(kCharacterMilos).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterMilos).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -1701,24 +1983,42 @@ void LogicManager::CONS_Milos_Conspiring(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_Conspiring(HAND_PARAMS) {
- if (msg->action > 18) {
- if (msg->action > 123852928) {
- if (msg->action == 135600432) {
- getCharacterCurrentParams(kCharacterMilos)[1] = 1;
- } else if (msg->action == 221683008) {
- if (whoRunningDialog(kCharacterMilos))
- fadeDialog(kCharacterMilos);
- getCharacterCurrentParams(kCharacterMilos)[0] = 1;
- send(kCharacterMilos, kCharacterCond2, 123199584, 0);
+ switch (msg->action) {
+ case 0:
+ if (!getCharacterCurrentParams(kCharacterMilos)[0]) {
+ if (getCharacterCurrentParams(kCharacterMilos)[1]) {
+ CONS_Milos_InCharge(0, 0, 0, 0);
+ } else {
+ if (_gameTime > 2356200 && !getCharacterCurrentParams(kCharacterMilos)[2]) {
+ getCharacterCurrentParams(kCharacterMilos)[2] = 1;
+ playDialog(kCharacterMilos, "Mil4013", -1, 0);
+ if (nearChar(kCharacterMilos, kCharacterCath, 2000))
+ _gameProgress[kProgressField94] = 1;
+ }
+
+ if (_gameTime > 2360700 && !getCharacterCurrentParams(kCharacterMilos)[3]) {
+ getCharacterCurrentParams(kCharacterMilos)[3] = 1;
+ playDialog(kCharacterMilos, "Mil4014", -1, 0);
+ if (nearChar(kCharacterMilos, kCharacterCath, 2000))
+ _gameProgress[kProgressField94] = 1;
+ }
+
+ if (_gameTime > 2370600 && !getCharacterCurrentParams(kCharacterMilos)[4]) {
+ getCharacterCurrentParams(kCharacterMilos)[4] = 1;
+ playDialog(kCharacterMilos, "Mil4015", -1, 0);
+ if (nearChar(kCharacterMilos, kCharacterCath, 2000))
+ _gameProgress[kProgressField94] = 1;
+ }
+
+ if (_gameTime > 2407500 && !getCharacterCurrentParams(kCharacterMilos)[5]) {
+ getCharacterCurrentParams(kCharacterMilos)[5] = 1;
+ send(kCharacterMilos, kCharacterVesna, 55996766, 0);
+ }
}
- } else if (msg->action == 123852928) {
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 2;
- MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "611Dg", 38, 0, 0);
- } else if (msg->action == 122865568) {
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 1;
- MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "611Bg", 38, 0, 0);
}
- } else if (msg->action == 18) {
+
+ break;
+ case 18:
if (getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] == 1) {
getCharacter(kCharacterMilos).characterPosition.location = 0;
startCycOtis(kCharacterMilos, "611Cg");
@@ -1731,33 +2031,28 @@ void LogicManager::HAND_Milos_Conspiring(HAND_PARAMS) {
endGraphics(kCharacterMilos);
getCharacterCurrentParams(kCharacterMilos)[0] = 0;
}
- } else if (msg->action == 0 && !getCharacterCurrentParams(kCharacterMilos)[0]) {
- if (getCharacterCurrentParams(kCharacterMilos)[1]) {
- CONS_Milos_InCharge(0, 0, 0, 0);
- } else {
- if (_gameTime > 2356200 && !getCharacterCurrentParams(kCharacterMilos)[2]) {
- getCharacterCurrentParams(kCharacterMilos)[2] = 1;
- playDialog(kCharacterMilos, "Mil4013", -1, 0);
- if (nearChar(kCharacterMilos, kCharacterCath, 2000))
- _gameProgress[kProgressField94] = 1;
- }
- if (_gameTime > 2360700 && !getCharacterCurrentParams(kCharacterMilos)[3]) {
- getCharacterCurrentParams(kCharacterMilos)[3] = 1;
- playDialog(kCharacterMilos, "Mil4014", -1, 0);
- if (nearChar(kCharacterMilos, kCharacterCath, 2000))
- _gameProgress[kProgressField94] = 1;
- }
- if (_gameTime > 2370600 && !getCharacterCurrentParams(kCharacterMilos)[4]) {
- getCharacterCurrentParams(kCharacterMilos)[4] = 1;
- playDialog(kCharacterMilos, "Mil4015", -1, 0);
- if (nearChar(kCharacterMilos, kCharacterCath, 2000))
- _gameProgress[kProgressField94] = 1;
- }
- if (_gameTime > 2407500 && !getCharacterCurrentParams(kCharacterMilos)[5]) {
- getCharacterCurrentParams(kCharacterMilos)[5] = 1;
- send(kCharacterMilos, kCharacterVesna, 55996766, 0);
- }
- }
+
+ break;
+ case 122865568:
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 1;
+ MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "611Bg", 38, 0, 0);
+ break;
+ case 123852928:
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 2;
+ MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "611Dg", 38, 0, 0);
+ break;
+ case 135600432:
+ getCharacterCurrentParams(kCharacterMilos)[1] = 1;
+ break;
+ case 221683008:
+ if (whoRunningDialog(kCharacterMilos))
+ fadeDialog(kCharacterMilos);
+
+ getCharacterCurrentParams(kCharacterMilos)[0] = 1;
+ send(kCharacterMilos, kCharacterCond2, 123199584, 0);
+ break;
+ default:
+ break;
}
}
@@ -1772,10 +2067,12 @@ void LogicManager::CONS_Milos_InCharge(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_InCharge(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 1;
MilosCall(&LogicManager::CONS_Milos_CompLogic, 2410200, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8]) {
case 1:
send(kCharacterMilos, kCharacterIvo, 55996766, 0);
@@ -1790,7 +2087,13 @@ void LogicManager::HAND_Milos_InCharge(HAND_PARAMS) {
case 3:
CONS_Milos_LeaveComp4(0, 0, 0, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1805,10 +2108,12 @@ void LogicManager::CONS_Milos_LeaveComp4(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_LeaveComp4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 1;
MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "609CG", 38, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] == 1) {
getCharacter(kCharacterMilos).characterPosition.location = 0;
setDoor(38, kCharacterCath, 3, 10, 9);
@@ -1817,6 +2122,10 @@ void LogicManager::HAND_Milos_LeaveComp4(HAND_PARAMS) {
} else if (getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] == 2) {
CONS_Milos_EndPart4(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -1831,13 +2140,17 @@ void LogicManager::CONS_Milos_EndPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_EndPart4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterMilos);
setDoor(38, kCharacterCath, 3, 10, 9);
getCharacter(kCharacterMilos).characterPosition.location = 1;
getCharacter(kCharacterMilos).characterPosition.position = 540;
getCharacter(kCharacterMilos).characterPosition.car = kCarCoalTender;
getCharacter(kCharacterMilos).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -1852,16 +2165,18 @@ void LogicManager::CONS_Milos_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_StartPart5(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterMilos);
- getCharacter(kCharacterMilos).characterPosition.location = 1;
- getCharacter(kCharacterMilos).characterPosition.position = 540;
- getCharacter(kCharacterMilos).characterPosition.car = kCarCoalTender;
- getCharacter(kCharacterMilos).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Milos_RunningTrain(0, 0, 0, 0);
+ case 12:
+ endGraphics(kCharacterMilos);
+ getCharacter(kCharacterMilos).characterPosition.location = 1;
+ getCharacter(kCharacterMilos).characterPosition.position = 540;
+ getCharacter(kCharacterMilos).characterPosition.car = kCarCoalTender;
+ getCharacter(kCharacterMilos).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -1876,32 +2191,17 @@ void LogicManager::CONS_Milos_RunningTrain(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_RunningTrain(HAND_PARAMS) {
- if (msg->action > 18) {
- if (msg->action == 168646401) {
- if (_gameEvents[kEventLocomotiveMilosShovelingDay] || _gameEvents[kEventLocomotiveMilosShovelingNight]) {
- if (!_gameEvents[kEventLocomotiveMilosDay] && !_gameEvents[kEventLocomotiveMilosNight]) {
- if (_gameProgress[kProgressIsDayTime] && _gameTime < 2943000)
- _gameTime = 2943000;
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 2;
- MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventLocomotiveMilosDay, 0, 0);
- }
- } else {
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 1;
- MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventLocomotiveMilosShovelingDay, 0, 0);
- }
- } else if (msg->action == 169773228) {
- if (_gameProgress[14]) {
- fadeDialog(kCharacterMilos);
- if (_gameTime < 2949300)
- _gameTime = 2949300;
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 4;
- MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventLocomotiveRestartTrain, 0, 0);
- } else {
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 3;
- MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventLocomotiveAnnaStopsTrain, 0, 0);
- }
+ switch (msg->action) {
+ case 2:
+ if (_gameProgress[kProgressIsDayTime]) {
+ endGame(0, 0, 52, true);
+ } else {
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 6;
+ MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventTrainStopped, 0, 0);
}
- } else if (msg->action == 18) {
+
+ break;
+ case 18:
switch (getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8]) {
case 1:
playNIS(((_gameProgress[kProgressIsDayTime] == kProgressField0) + kEventLocomotiveMilosShovelingDay));
@@ -1910,8 +2210,10 @@ void LogicManager::HAND_Milos_RunningTrain(HAND_PARAMS) {
case 2:
if (dialogRunning("MUS050"))
fadeDialog("MUS050");
+
if (dialogRunning("ARRIVE"))
endDialog("ARRIVE");
+
_engine->getSoundManager()->endAmbient();
playNIS(((_gameProgress[kProgressIsDayTime] == kProgressField0) + kEventLocomotiveMilosDay));
claimNISLink(kCharacterMilos);
@@ -1919,7 +2221,7 @@ void LogicManager::HAND_Milos_RunningTrain(HAND_PARAMS) {
break;
case 3:
playNIS(kEventLocomotiveAnnaStopsTrain);
- endGame(3, 108, 51, 1);
+ endGame(3, 108, 51, true);
break;
case 4:
playNIS(kEventLocomotiveRestartTrain);
@@ -1936,18 +2238,42 @@ void LogicManager::HAND_Milos_RunningTrain(HAND_PARAMS) {
break;
case 6:
playNIS(kEventTrainStopped);
- endGame(0, 1, 51, 1);
+ endGame(0, 1, 51, true);
break;
default:
- return;
+ break;
+ }
+
+ break;
+ case 168646401:
+ if (_gameEvents[kEventLocomotiveMilosShovelingDay] || _gameEvents[kEventLocomotiveMilosShovelingNight]) {
+ if (!_gameEvents[kEventLocomotiveMilosDay] && !_gameEvents[kEventLocomotiveMilosNight]) {
+ if (_gameProgress[kProgressIsDayTime] && _gameTime < 2943000)
+ _gameTime = 2943000;
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 2;
+ MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventLocomotiveMilosDay, 0, 0);
+ }
+ } else {
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 1;
+ MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventLocomotiveMilosShovelingDay, 0, 0);
}
- } else if (msg->action == 2) {
+
+ break;
+ case 169773228:
if (_gameProgress[kProgressIsDayTime]) {
- endGame(0, 0, 52, 1);
+ fadeDialog(kCharacterMilos);
+ if (_gameTime < 2949300)
+ _gameTime = 2949300;
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 4;
+ MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventLocomotiveRestartTrain, 0, 0);
} else {
- getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 6;
- MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventTrainStopped, 0, 0);
+ getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 3;
+ MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventLocomotiveAnnaStopsTrain, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -1962,8 +2288,12 @@ void LogicManager::CONS_Milos_Dead(CONS_PARAMS) {
}
void LogicManager::HAND_Milos_Dead(HAND_PARAMS) {
- if (msg->action == 12)
- endGraphics(14);
+ switch (msg->action) {
+ case 12:
+ endGraphics(kCharacterMilos);
+ default:
+ break;
+ }
}
void (LogicManager::*LogicManager::_functionsMilos[])(HAND_PARAMS) = {
Commit: 7f1fe3eab386932573229fd0678aae4352233655
https://github.com/scummvm/scummvm/commit/7f1fe3eab386932573229fd0678aae4352233655
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Vesna logic
Changed paths:
engines/lastexpress/characters/vesna.cpp
diff --git a/engines/lastexpress/characters/vesna.cpp b/engines/lastexpress/characters/vesna.cpp
index b1af56b88b2..682d98b65fe 100644
--- a/engines/lastexpress/characters/vesna.cpp
+++ b/engines/lastexpress/characters/vesna.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_Vesna(int chapter) {
CONS_Vesna_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -69,19 +69,25 @@ void LogicManager::CONS_Vesna_DebugWalks(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_DebugWalks(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterVesna).characterPosition.position = 0;
- getCharacter(kCharacterVesna).characterPosition.location = 0;
- getCharacter(kCharacterVesna).characterPosition.car = kCarGreenSleeping;
- getCharacterCurrentParams(kCharacterVesna)[0] = 10000;
- }
- } else if (walk(kCharacterVesna, kCarGreenSleeping, getCharacterCurrentParams(kCharacterVesna)[0])) {
- if (getCharacterCurrentParams(kCharacterVesna)[0] == 10000) {
- getCharacterCurrentParams(kCharacterVesna)[0] = 0;
- } else {
- getCharacterCurrentParams(kCharacterVesna)[0] = 10000;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterVesna, kCarGreenSleeping, getCharacterCurrentParams(kCharacterVesna)[0])) {
+ if (getCharacterCurrentParams(kCharacterVesna)[0] == 10000) {
+ getCharacterCurrentParams(kCharacterVesna)[0] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterVesna)[0] = 10000;
+ }
}
+
+ break;
+ case 12:
+ getCharacter(kCharacterVesna).characterPosition.position = 0;
+ getCharacter(kCharacterVesna).characterPosition.location = 0;
+ getCharacter(kCharacterVesna).characterPosition.car = kCarGreenSleeping;
+ getCharacterCurrentParams(kCharacterVesna)[0] = 10000;
+ break;
+ default:
+ break;
}
}
@@ -98,12 +104,17 @@ void LogicManager::CONS_Vesna_DoDialog(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_DoDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterVesna).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterVesna, (char *)&getCharacterCurrentParams(kCharacterVesna)[0], -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -122,15 +133,20 @@ void LogicManager::CONS_Vesna_DoCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_DoCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterVesna, getCharacterCurrentParams(kCharacterVesna)[3]);
getCharacter(kCharacterVesna).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterVesna, (char *)&getCharacterCurrentParams(kCharacterVesna)[0]);
blockAtDoor(kCharacterVesna, getCharacterCurrentParams(kCharacterVesna)[3]);
+ break;
+ default:
+ break;
}
}
@@ -147,12 +163,17 @@ void LogicManager::CONS_Vesna_DoSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_DoSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
getCharacter(kCharacterVesna).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterVesna, (char *)&getCharacterCurrentParams(kCharacterVesna)[0]);
+ break;
+ default:
+ break;
}
}
@@ -178,6 +199,7 @@ void LogicManager::HAND_Vesna_DoWalk(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
}
+
break;
case 5:
if (rnd(2) == 0) {
@@ -208,17 +230,22 @@ void LogicManager::CONS_Vesna_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_DoWait(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterVesna)[1] || (getCharacterCurrentParams(kCharacterVesna)[1] = _gameTime + getCharacterCurrentParams(kCharacterVesna)[0],
_gameTime + getCharacterCurrentParams(kCharacterVesna)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterVesna)[1] >= _gameTime)
- return;
+ break;
+
getCharacterCurrentParams(kCharacterVesna)[1] = 0x7FFFFFFF;
}
getCharacter(kCharacterVesna).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -236,32 +263,36 @@ void LogicManager::CONS_Vesna_DoWalkBehind(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_DoWalkBehind(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action != 12) {
- if (msg->action == 123668192) {
- getCharacter(kCharacterVesna).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
- fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
- }
- return;
+ switch (msg->action) {
+ case 0:
+ getCharacterCurrentParams(kCharacterVesna)[2] = 0;
+
+ if (nearChar(kCharacterVesna, kCharacterMilos, 500) ||
+ (getCharacter(kCharacterVesna).direction == 1) &&
+ ((getCharacter(kCharacterVesna).characterPosition.car > getCharacter(kCharacterMilos).characterPosition.car) ||
+ getCharacter(kCharacterVesna).characterPosition.car == getCharacter(kCharacterMilos).characterPosition.car && getCharacter(kCharacterVesna).characterPosition.position > getCharacter(kCharacterMilos).characterPosition.position) ||
+ getCharacter(kCharacterVesna).direction == 2 && ((getCharacter(kCharacterVesna).characterPosition.car < getCharacter(kCharacterMilos).characterPosition.car) ||
+ getCharacter(kCharacterVesna).characterPosition.car == getCharacter(kCharacterMilos).characterPosition.car && getCharacter(kCharacterVesna).characterPosition.position < getCharacter(kCharacterMilos).characterPosition.position)) {
+
+ getCharacter(kCharacterVesna).waitedTicksUntilCycleRestart = 0;
+ getCharacterCurrentParams(kCharacterVesna)[2] = 1;
}
+ if (!getCharacterCurrentParams(kCharacterVesna)[2]) {
+ walk(kCharacterVesna, getCharacterCurrentParams(kCharacterVesna)[0], getCharacterCurrentParams(kCharacterVesna)[1]);
+ }
+
+ break;
+ case 12:
walk(kCharacterVesna, getCharacterCurrentParams(kCharacterVesna)[0], getCharacterCurrentParams(kCharacterVesna)[1]);
- return;
- }
- getCharacterCurrentParams(kCharacterVesna)[2] = 0;
- if (nearChar(kCharacterVesna, kCharacterMilos, 500) ||
- (getCharacter(kCharacterVesna).direction == 1) &&
- ((getCharacter(kCharacterVesna).characterPosition.car > getCharacter(kCharacterMilos).characterPosition.car) ||
- getCharacter(kCharacterVesna).characterPosition.car == getCharacter(kCharacterMilos).characterPosition.car && getCharacter(kCharacterVesna).characterPosition.position > getCharacter(kCharacterMilos).characterPosition.position) ||
- getCharacter(kCharacterVesna).direction == 2 && ((getCharacter(kCharacterVesna).characterPosition.car < getCharacter(kCharacterMilos).characterPosition.car) ||
- getCharacter(kCharacterVesna).characterPosition.car == getCharacter(kCharacterMilos).characterPosition.car && getCharacter(kCharacterVesna).characterPosition.position < getCharacter(kCharacterMilos).characterPosition.position)) {
-
- getCharacter(kCharacterVesna).waitedTicksUntilCycleRestart = 0;
- getCharacterCurrentParams(kCharacterVesna)[2] = 1;
- }
- if (!getCharacterCurrentParams(kCharacterVesna)[2]) {
- walk(kCharacterVesna, getCharacterCurrentParams(kCharacterVesna)[0], getCharacterCurrentParams(kCharacterVesna)[1]);
+ break;
+ case 123668192:
+ getCharacter(kCharacterVesna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
+ fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -276,10 +307,18 @@ void LogicManager::CONS_Vesna_WaitRCClear(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_WaitRCClear(HAND_PARAMS) {
- if ((msg->action == 0 && rcClear()) || (msg->action == 12 && rcClear())) {
- getCharacter(kCharacterVesna).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
- fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
+ switch (msg->action) {
+ case 0:
+ case 12:
+ if (rcClear()) {
+ getCharacter(kCharacterVesna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
+ fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -294,16 +333,22 @@ void LogicManager::CONS_Vesna_FinishSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_FinishSeqOtis(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacter(kCharacterVesna).direction != 4) {
getCharacter(kCharacterVesna).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
}
- } else if (msg->action == 3) {
+
+ break;
+ case 3:
getCharacter(kCharacterVesna).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -321,22 +366,25 @@ void LogicManager::CONS_Vesna_SaveGame(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_SaveGame(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- save(
- kCharacterVesna,
- getCharacterCurrentParams(kCharacterVesna)[0],
- getCharacterCurrentParams(kCharacterVesna)[1]
- );
+ switch (msg->action) {
+ case 0:
+ getCharacter(kCharacterVesna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
+ fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
+ break;
+ case 12:
+ save(
+ kCharacterVesna,
+ getCharacterCurrentParams(kCharacterVesna)[0],
+ getCharacterCurrentParams(kCharacterVesna)[1]
+ );
- getCharacter(kCharacterVesna).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
- fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
- }
- } else {
getCharacter(kCharacterVesna).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -351,48 +399,32 @@ void LogicManager::CONS_Vesna_HomeAlone(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_HomeAlone(HAND_PARAMS) {
- if (msg->action > 9) {
- if (msg->action > 17) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8]) {
- case 1:
- case 2:
- getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 3;
- VesnaCall(&LogicManager::CONS_Vesna_DoDialog, (char *)&getCharacterCurrentParams(kCharacterVesna)[3], 0, 0, 0);
- break;
- case 3:
- setDoor(38, kCharacterVesna, 3, 14, 0);
- getCharacterCurrentParams(kCharacterVesna)[2] = 1;
- break;
- case 4:
- getCharacterCurrentParams(kCharacterVesna)[2] = 0;
- getCharacterCurrentParams(kCharacterVesna)[1] = 1;
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterVesna)[2]) {
+ if (getCharacterCurrentParams(kCharacterVesna)[6] || (getCharacterCurrentParams(kCharacterVesna)[6] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterVesna)[6] >= _currentGameSessionTicks)
break;
- default:
- return;
- }
- } else if (msg->action == 55996766 || msg->action == 101687594) {
- getCharacter(kCharacterVesna).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
- fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
- }
- } else if (msg->action == 17) {
- if (getCharacterCurrentParams(kCharacterVesna)[1] || getCharacterCurrentParams(kCharacterVesna)[2]) {
- setDoor(38, kCharacterVesna, 1, 10, 9);
- getCharacterCurrentParams(kCharacterVesna)[1] = 0;
- getCharacterCurrentParams(kCharacterVesna)[2] = 0;
+
+ getCharacterCurrentParams(kCharacterVesna)[6] = 0x7FFFFFFF;
}
- } else if (msg->action == 12) {
- setDoor(38, kCharacterVesna, 3, 10, 9);
+
+ getCharacterCurrentParams(kCharacterVesna)[2] = 0;
+ getCharacterCurrentParams(kCharacterVesna)[1] = 1;
+ setDoor(38, kCharacterVesna, 1, 0, 0);
+ getCharacterCurrentParams(kCharacterVesna)[6] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterVesna)[6] = 0;
}
- return;
- }
- if (msg->action >= 8) {
+
+ break;
+ case 8:
+ case 9:
if (getCharacterCurrentParams(kCharacterVesna)[2]) {
setDoor(38, kCharacterVesna, 3, 0, 0);
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 4;
VesnaCall(&LogicManager::CONS_Vesna_DoDialog, getCathSorryDialog(), 0, 0, 0);
- return;
+ break;
}
getCharacterCurrentParams(kCharacterVesna)[0]++;
@@ -415,22 +447,47 @@ void LogicManager::HAND_Vesna_HomeAlone(HAND_PARAMS) {
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 2;
VesnaCall(&LogicManager::CONS_Vesna_DoDialog, "LIB012", 0, 0, 0);
}
- return;
- }
- if (msg->action == 0) {
- if (getCharacterCurrentParams(kCharacterVesna)[2]) {
- if (getCharacterCurrentParams(kCharacterVesna)[6] || (getCharacterCurrentParams(kCharacterVesna)[6] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterVesna)[6] >= _currentGameSessionTicks)
- return;
- getCharacterCurrentParams(kCharacterVesna)[6] = 0x7FFFFFFF;
- }
+
+ break;
+ case 12:
+ setDoor(38, kCharacterVesna, 3, 10, 9);
+ break;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterVesna)[1] || getCharacterCurrentParams(kCharacterVesna)[2]) {
+ setDoor(38, kCharacterVesna, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterVesna)[1] = 0;
+ getCharacterCurrentParams(kCharacterVesna)[2] = 0;
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8]) {
+ case 1:
+ case 2:
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 3;
+ VesnaCall(&LogicManager::CONS_Vesna_DoDialog, (char *)&getCharacterCurrentParams(kCharacterVesna)[3], 0, 0, 0);
+ break;
+ case 3:
+ setDoor(38, kCharacterVesna, 3, 14, 0);
+ getCharacterCurrentParams(kCharacterVesna)[2] = 1;
+ break;
+ case 4:
getCharacterCurrentParams(kCharacterVesna)[2] = 0;
getCharacterCurrentParams(kCharacterVesna)[1] = 1;
- setDoor(38, kCharacterVesna, 1, 0, 0);
- getCharacterCurrentParams(kCharacterVesna)[6] = 0;
- } else {
- getCharacterCurrentParams(kCharacterVesna)[6] = 0;
+ break;
+ default:
+ break;
}
+
+ break;
+ case 55996766:
+ case 101687594:
+ getCharacter(kCharacterVesna).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterVesna, _functionsVesna[getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall]]);
+ fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -445,16 +502,22 @@ void LogicManager::CONS_Vesna_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_Birth(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- autoMessage(kCharacterVesna, 124190740, 0);
- getCharacter(kCharacterVesna).characterPosition.position = 4689;
- getCharacter(kCharacterVesna).characterPosition.location = 1;
- getCharacter(kCharacterVesna).characterPosition.car = kCarRestaurant;
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterVesna)[0]) {
+ getCharacterCurrentParams(kCharacterVesna)[0] = 1;
+ CONS_Vesna_WithMilos(0, 0, 0, 0);
}
- } else if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterVesna)[0]) {
- getCharacterCurrentParams(kCharacterVesna)[0] = 1;
- CONS_Vesna_WithMilos(0, 0, 0, 0);
+
+ break;
+ case 12:
+ autoMessage(kCharacterVesna, 124190740, 0);
+ getCharacter(kCharacterVesna).characterPosition.position = 4689;
+ getCharacter(kCharacterVesna).characterPosition.location = 1;
+ getCharacter(kCharacterVesna).characterPosition.car = kCarRestaurant;
+ break;
+ default:
+ break;
}
}
@@ -469,18 +532,23 @@ void LogicManager::CONS_Vesna_WithMilos(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_WithMilos(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 18) {
- if (getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] == 1) {
- endGraphics(kCharacterVesna);
- CONS_Vesna_HomeTogether(0, 0, 0, 0);
- }
- } else if (msg->action == 204832737) {
- getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 1;
- VesnaCall(&LogicManager::CONS_Vesna_DoWalkBehind, 4, 3050, 0, 0);
- }
- } else {
+ switch (msg->action) {
+ case 0:
getCharacter(kCharacterVesna).characterPosition = getCharacter(kCharacterMilos).characterPosition;
+ break;
+ case 18:
+ if (getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] == 1) {
+ endGraphics(kCharacterVesna);
+ CONS_Vesna_HomeTogether(0, 0, 0, 0);
+ }
+
+ break;
+ case 204832737:
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 1;
+ VesnaCall(&LogicManager::CONS_Vesna_DoWalkBehind, 4, 3050, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -495,13 +563,18 @@ void LogicManager::CONS_Vesna_HomeTogether(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_HomeTogether(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterVesna).characterPosition.position = 3050;
getCharacter(kCharacterVesna).characterPosition.location = 1;
- getCharacter(kCharacterVesna).characterPosition.car = 4;
- } else if (msg->action == 190412928) {
+ getCharacter(kCharacterVesna).characterPosition.car = kCarRedSleeping;
+ break;
+ case 190412928:
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 1;
VesnaCall(&LogicManager::CONS_Vesna_HomeAlone, 0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -516,12 +589,16 @@ void LogicManager::CONS_Vesna_Asleep(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_Asleep(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterVesna).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterVesna).characterPosition.position = 3050;
getCharacter(kCharacterVesna).characterPosition.location = 1;
endGraphics(kCharacterVesna);
setDoor(38, kCharacterCath, 3, 10, 9);
+ break;
+ default:
+ break;
}
}
@@ -536,17 +613,20 @@ void LogicManager::CONS_Vesna_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_StartPart2(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterVesna);
- getCharacter(kCharacterVesna).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterVesna).characterPosition.position = 3050;
- getCharacter(kCharacterVesna).characterPosition.location = 1;
- getCharacter(kCharacterVesna).clothes = 0;
- getCharacter(kCharacterVesna).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Vesna_InPart2(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterVesna);
+ getCharacter(kCharacterVesna).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterVesna).characterPosition.position = 3050;
+ getCharacter(kCharacterVesna).characterPosition.location = 1;
+ getCharacter(kCharacterVesna).clothes = 0;
+ getCharacter(kCharacterVesna).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -561,14 +641,19 @@ void LogicManager::CONS_Vesna_InPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_InPart2(HAND_PARAMS) {
- if (msg->action != 18) {
- if (msg->action == 135024800) {
- getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 2;
- VesnaCall(&LogicManager::CONS_Vesna_CheckTrain, 0, 0, 0, 0);
- } else if (msg->action == 137165825) {
- getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 1;
- VesnaCall(&LogicManager::CONS_Vesna_HomeAlone, 0, 0, 0, 0);
- }
+ switch (msg->action) {
+ case 18:
+ break;
+ case 135024800:
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 2;
+ VesnaCall(&LogicManager::CONS_Vesna_CheckTrain, 0, 0, 0, 0);
+ break;
+ case 137165825:
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 1;
+ VesnaCall(&LogicManager::CONS_Vesna_HomeAlone, 0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -583,15 +668,19 @@ void LogicManager::CONS_Vesna_CheckTrain(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_CheckTrain(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 1;
VesnaCall(&LogicManager::CONS_Vesna_DoCorrOtis, "610BG", 38, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8]) {
case 1:
getCharacter(kCharacterVesna).characterPosition.location = 0;
+
if (getCharacter(kCharacterVesna).characterPosition.position < 2087)
getCharacter(kCharacterVesna).characterPosition.position = 2088;
+
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 2;
VesnaCall(&LogicManager::CONS_Vesna_DoWalk, 5, 850, 0, 0);
break;
@@ -607,8 +696,10 @@ void LogicManager::HAND_Vesna_CheckTrain(HAND_PARAMS) {
break;
case 4:
startSeqOtis(kCharacterVesna, "808UD");
+
if (inSalon(kCharacterCath))
advanceFrame(kCharacterVesna);
+
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 5;
VesnaCall(&LogicManager::CONS_Vesna_FinishSeqOtis, 0, 0, 0, 0);
break;
@@ -652,8 +743,12 @@ void LogicManager::HAND_Vesna_CheckTrain(HAND_PARAMS) {
fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -668,24 +763,27 @@ void LogicManager::CONS_Vesna_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_StartPart3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterVesna);
- getCharacter(kCharacterVesna).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterVesna).characterPosition.position = 3050;
- getCharacter(kCharacterVesna).characterPosition.location = 1;
- getCharacter(kCharacterVesna).clothes = 0;
- getCharacter(kCharacterVesna).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Vesna_InComp(0, 0, 0, 0);
- }
-}
-
-void LogicManager::CONS_Vesna_InComp(CONS_PARAMS) {
- CharacterCallParams *params = &getCharacter(kCharacterVesna).callParams[getCharacter(kCharacterVesna).currentCall];
- _engine->getMessageManager()->setMessageHandle(kCharacterVesna, &LogicManager::HAND_Vesna_InComp);
- getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall] = 20;
+ break;
+ case 12:
+ endGraphics(kCharacterVesna);
+ getCharacter(kCharacterVesna).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterVesna).characterPosition.position = 3050;
+ getCharacter(kCharacterVesna).characterPosition.location = 1;
+ getCharacter(kCharacterVesna).clothes = 0;
+ getCharacter(kCharacterVesna).inventoryItem = 0;
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_Vesna_InComp(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterVesna).callParams[getCharacter(kCharacterVesna).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterVesna, &LogicManager::HAND_Vesna_InComp);
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall] = 20;
params->clear();
@@ -693,59 +791,54 @@ void LogicManager::CONS_Vesna_InComp(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_InComp(HAND_PARAMS) {
- if (msg->action > 9) {
- if (msg->action > 17) {
- if (msg->action > 137165825) {
- if (msg->action == 155913424) {
- getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 6;
- VesnaCall(&LogicManager::CONS_Vesna_TakeAWalk, 0, 0, 0, 0);
- } else if (msg->action == 203663744) {
- setDoor(38, kCharacterVesna, 3, 10, 9);
- }
- } else if (msg->action == 137165825) {
- getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 5;
- VesnaCall(&LogicManager::CONS_Vesna_HomeAlone, 0, 0, 0, 0);
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8]) {
- case 1:
- case 2:
- getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 3;
- VesnaCall(&LogicManager::CONS_Vesna_DoDialog, (char *)&getCharacterCurrentParams(kCharacterVesna)[3], 0, 0, 0);
- break;
- case 3:
- setDoor(38, kCharacterVesna, 3, 14, 0);
- getCharacterCurrentParams(kCharacterVesna)[1] = 1;
- break;
- case 4:
- getCharacterCurrentParams(kCharacterVesna)[1] = 0;
- getCharacterCurrentParams(kCharacterVesna)[0] = 1;
+ switch (msg->action) {
+ case 0:
+ if (_gameProgress[kProgressField54] && getCharacterCurrentParams(kCharacterVesna)[6] != 0x7FFFFFFF && _gameTime) {
+ if (_gameTime > 2250000) {
+ getCharacterCurrentParams(kCharacterVesna)[6] = 0x7FFFFFFF;
+ CONS_Vesna_KillAnna(0, 0, 0, 0);
+ break;
+ }
+
+ if (!cathInCorridor(kCarRedSleeping) || !getCharacterCurrentParams(kCharacterVesna)[6]) {
+ getCharacterCurrentParams(kCharacterVesna)[6] = _gameTime;
+ if (!_gameTime) {
+ CONS_Vesna_KillAnna(0, 0, 0, 0);
break;
- default:
- return;
}
}
- } else if (msg->action == 17) {
- if (getCharacterCurrentParams(kCharacterVesna)[0] || getCharacterCurrentParams(kCharacterVesna)[1]) {
- setDoor(38, kCharacterVesna, 1, 10, 9);
- getCharacterCurrentParams(kCharacterVesna)[0] = 0;
- getCharacterCurrentParams(kCharacterVesna)[1] = 0;
+
+ if (getCharacterCurrentParams(kCharacterVesna)[6] < _gameTime) {
+ getCharacterCurrentParams(kCharacterVesna)[6] = 0x7FFFFFFF;
+ CONS_Vesna_KillAnna(0, 0, 0, 0);
+ break;
}
- } else if (msg->action == 12) {
- getCharacter(kCharacterVesna).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterVesna).characterPosition.position = 3050;
- getCharacter(kCharacterVesna).characterPosition.location = 1;
- getCharacter(kCharacterVesna).clothes = 0;
- getCharacter(kCharacterVesna).inventoryItem = 0;
- endGraphics(kCharacterVesna);
}
- return;
- }
- if (msg->action >= 8) {
+
+ if (getCharacterCurrentParams(kCharacterVesna)[1]) {
+ if (getCharacterCurrentParams(kCharacterVesna)[7] || (getCharacterCurrentParams(kCharacterVesna)[7] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterVesna)[7] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterVesna)[7] = 0x7FFFFFFF;
+ }
+
+ getCharacterCurrentParams(kCharacterVesna)[1] = 0;
+ getCharacterCurrentParams(kCharacterVesna)[0] = 1;
+ setDoor(38, kCharacterVesna, 1, 0, 0);
+ getCharacterCurrentParams(kCharacterVesna)[7] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterVesna)[7] = 0;
+ }
+
+ break;
+ case 8:
+ case 9:
if (getCharacterCurrentParams(kCharacterVesna)[1]) {
setDoor(38, kCharacterVesna, 3, 0, 0);
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 4;
VesnaCall(&LogicManager::CONS_Vesna_DoDialog, getCathSorryDialog(), 0, 0, 0);
- return;
+ break;
}
getCharacterCurrentParams(kCharacterVesna)[2]++;
@@ -768,39 +861,57 @@ void LogicManager::HAND_Vesna_InComp(HAND_PARAMS) {
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 2;
VesnaCall(&LogicManager::CONS_Vesna_DoDialog, "LIB012", 0, 0, 0);
}
- return;
- }
- if (msg->action)
- return;
-
- if (_gameProgress[kProgressField54] && getCharacterCurrentParams(kCharacterVesna)[6] != 0x7FFFFFFF && _gameTime) {
- if (_gameTime > 2250000)
- goto LABEL_24;
- if (!cathInCorridor(kCarRedSleeping) || !getCharacterCurrentParams(kCharacterVesna)[6]) {
- getCharacterCurrentParams(kCharacterVesna)[6] = _gameTime;
- if (!_gameTime)
- goto LABEL_25;
- }
- if (getCharacterCurrentParams(kCharacterVesna)[6] < _gameTime) {
- LABEL_24:
- getCharacterCurrentParams(kCharacterVesna)[6] = 0x7FFFFFFF;
- LABEL_25:
- CONS_Vesna_KillAnna(0, 0, 0, 0);
- return;
+
+ break;
+ case 12:
+ getCharacter(kCharacterVesna).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterVesna).characterPosition.position = 3050;
+ getCharacter(kCharacterVesna).characterPosition.location = 1;
+ getCharacter(kCharacterVesna).clothes = 0;
+ getCharacter(kCharacterVesna).inventoryItem = 0;
+ endGraphics(kCharacterVesna);
+ break;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterVesna)[0] || getCharacterCurrentParams(kCharacterVesna)[1]) {
+ setDoor(38, kCharacterVesna, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterVesna)[0] = 0;
+ getCharacterCurrentParams(kCharacterVesna)[1] = 0;
}
- }
- if (getCharacterCurrentParams(kCharacterVesna)[1]) {
- if (getCharacterCurrentParams(kCharacterVesna)[7] || (getCharacterCurrentParams(kCharacterVesna)[7] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterVesna)[7] >= _currentGameSessionTicks)
- return;
- getCharacterCurrentParams(kCharacterVesna)[7] = 0x7FFFFFFF;
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8]) {
+ case 1:
+ case 2:
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 3;
+ VesnaCall(&LogicManager::CONS_Vesna_DoDialog, (char *)&getCharacterCurrentParams(kCharacterVesna)[3], 0, 0, 0);
+ break;
+ case 3:
+ setDoor(38, kCharacterVesna, 3, 14, 0);
+ getCharacterCurrentParams(kCharacterVesna)[1] = 1;
+ break;
+ case 4:
+ getCharacterCurrentParams(kCharacterVesna)[1] = 0;
+ getCharacterCurrentParams(kCharacterVesna)[0] = 1;
+ break;
+ default:
+ break;
}
- getCharacterCurrentParams(kCharacterVesna)[1] = 0;
- getCharacterCurrentParams(kCharacterVesna)[0] = 1;
- setDoor(38, kCharacterVesna, 1, 0, 0);
- getCharacterCurrentParams(kCharacterVesna)[7] = 0;
- } else {
- getCharacterCurrentParams(kCharacterVesna)[7] = 0;
+
+ break;
+ case 137165825:
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 5;
+ VesnaCall(&LogicManager::CONS_Vesna_HomeAlone, 0, 0, 0, 0);
+ break;
+ case 155913424:
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 6;
+ VesnaCall(&LogicManager::CONS_Vesna_TakeAWalk, 0, 0, 0, 0);
+ break;
+ case 203663744:
+ setDoor(38, kCharacterVesna, 3, 10, 9);
+ break;
+ default:
+ break;
}
}
@@ -815,15 +926,19 @@ void LogicManager::CONS_Vesna_TakeAWalk(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_TakeAWalk(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 1;
VesnaCall(&LogicManager::CONS_Vesna_DoCorrOtis, "610Bg", 38, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8]) {
case 1:
getCharacter(kCharacterVesna).characterPosition.location = 0;
+
if (getCharacter(kCharacterVesna).characterPosition.position < 2087)
getCharacter(kCharacterVesna).characterPosition.position = 2088;
+
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 2;
VesnaCall(&LogicManager::CONS_Vesna_DoWalk, 5, 850, 0, 0);
break;
@@ -839,8 +954,10 @@ void LogicManager::HAND_Vesna_TakeAWalk(HAND_PARAMS) {
break;
case 4:
startSeqOtis(kCharacterVesna, "808UD");
+
if (inSalon(kCharacterCath))
advanceFrame(kCharacterVesna);
+
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 5;
VesnaCall(&LogicManager::CONS_Vesna_FinishSeqOtis, 0, 0, 0, 0);
break;
@@ -863,8 +980,10 @@ void LogicManager::HAND_Vesna_TakeAWalk(HAND_PARAMS) {
break;
case 8:
startSeqOtis(kCharacterVesna, "808DS");
+
if (inDiningRoom(kCharacterCath))
advanceFrame(kCharacterVesna);
+
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 9;
VesnaCall(&LogicManager::CONS_Vesna_FinishSeqOtis, 0, 0, 0, 0);
break;
@@ -886,8 +1005,12 @@ void LogicManager::HAND_Vesna_TakeAWalk(HAND_PARAMS) {
fedEx(kCharacterVesna, kCharacterVesna, 18, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -912,8 +1035,10 @@ void LogicManager::HAND_Vesna_KillAnna(HAND_PARAMS) {
switch (getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8]) {
case 1:
getCharacter(kCharacterVesna).characterPosition.location = 0;
+
if (getCharacter(kCharacterVesna).characterPosition.position < 2087)
getCharacter(kCharacterVesna).characterPosition.position = 2088;
+
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 2;
VesnaCall(&LogicManager::CONS_Vesna_DoWalk, kCarRestaurant, 850, 0, 0);
break;
@@ -929,8 +1054,10 @@ void LogicManager::HAND_Vesna_KillAnna(HAND_PARAMS) {
break;
case 4:
startSeqOtis(kCharacterVesna, "808UD");
+
if (inSalon(kCharacterCath))
advanceFrame(kCharacterVesna);
+
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 5;
VesnaCall(&LogicManager::CONS_Vesna_FinishSeqOtis, 0, 0, 0, 0);
break;
@@ -948,8 +1075,10 @@ void LogicManager::HAND_Vesna_KillAnna(HAND_PARAMS) {
break;
case 7:
startSeqOtis(kCharacterVesna, "808DS");
+
if (inDiningRoom(kCharacterCath))
advanceFrame(kCharacterVesna);
+
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 8;
VesnaCall(&LogicManager::CONS_Vesna_FinishSeqOtis, 0, 0, 0, 0);
break;
@@ -968,8 +1097,9 @@ void LogicManager::HAND_Vesna_KillAnna(HAND_PARAMS) {
CONS_Vesna_KilledAnna(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
break;
case 189299008:
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 6;
@@ -989,44 +1119,43 @@ void LogicManager::CONS_Vesna_KilledAnna(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_KilledAnna(HAND_PARAMS) {
- if (msg->action <= 12) {
- if (msg->action == 12) {
- getCharacter(kCharacterVesna).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterVesna).characterPosition.position = 3050;
- getCharacter(kCharacterVesna).characterPosition.location = 1;
- getCharacter(kCharacterVesna).clothes = 0;
- getCharacter(kCharacterVesna).inventoryItem = 0;
- } else if (msg->action >= 8 && msg->action <= 9) {
- setDoor(38, kCharacterVesna, 3, 0, 0);
- if (msg->action == 8) {
- getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 1;
- VesnaCall(&LogicManager::CONS_Vesna_DoDialog, "LIB012", 0, 0, 0);
- } else {
- getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 2;
- VesnaCall(&LogicManager::CONS_Vesna_DoDialog, "LIB013", 0, 0, 0);
- }
+ switch (msg->action) {
+ case 8:
+ case 9:
+ setDoor(38, kCharacterVesna, 3, 0, 0);
+ if (msg->action == 8) {
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 1;
+ VesnaCall(&LogicManager::CONS_Vesna_DoDialog, "LIB012", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 2;
+ VesnaCall(&LogicManager::CONS_Vesna_DoDialog, "LIB013", 0, 0, 0);
}
- return;
- }
- if (msg->action != 18) {
- if (msg->action != 203663744)
- return;
- LABEL_18:
- setDoor(38, kCharacterVesna, 3, 10, 9);
- return;
- }
- if (!getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8])
- return;
+ break;
+ case 12:
+ getCharacter(kCharacterVesna).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterVesna).characterPosition.position = 3050;
+ getCharacter(kCharacterVesna).characterPosition.location = 1;
+ getCharacter(kCharacterVesna).clothes = 0;
+ getCharacter(kCharacterVesna).inventoryItem = 0;
+ break;
+ case 18:
+ if (getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8]) {
+ if (getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] <= 2) {
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 3;
+ VesnaCall(&LogicManager::CONS_Vesna_DoDialog, "VES1015A", 0, 0, 0);
+ } else if (getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] == 3) {
+ setDoor(38, kCharacterVesna, 3, 10, 9);
+ }
+ }
- if (getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] <= 2) {
- getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 3;
- VesnaCall(&LogicManager::CONS_Vesna_DoDialog, "VES1015A", 0, 0, 0);
- return;
+ break;
+ case 203663744:
+ setDoor(38, kCharacterVesna, 3, 10, 9);
+ break;
+ default:
+ break;
}
-
- if (getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] == 3)
- goto LABEL_18;
}
void LogicManager::CONS_Vesna_StartPart4(CONS_PARAMS) {
@@ -1040,20 +1169,27 @@ void LogicManager::CONS_Vesna_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_StartPart4(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterVesna);
- getCharacter(kCharacterVesna).characterPosition.position = 3050;
- getCharacter(kCharacterVesna).characterPosition.location = 1;
- getCharacter(kCharacterVesna).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterVesna).inventoryItem = 0;
- setDoor(38, kCharacterVesna, 3, 10, 9);
- } else if (msg->action == 18 && getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] == 1) {
- CONS_Vesna_Exit(0, 0, 0, 0);
- }
- } else {
+ switch (msg->action) {
+ case 0:
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 1;
VesnaCall(&LogicManager::CONS_Vesna_HomeAlone, 0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterVesna);
+ getCharacter(kCharacterVesna).characterPosition.position = 3050;
+ getCharacter(kCharacterVesna).characterPosition.location = 1;
+ getCharacter(kCharacterVesna).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterVesna).inventoryItem = 0;
+ setDoor(38, kCharacterVesna, 3, 10, 9);
+ break;
+ case 18:
+ if (getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] == 1) {
+ CONS_Vesna_Exit(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -1068,50 +1204,62 @@ void LogicManager::CONS_Vesna_Exit(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_Exit(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- send(kCharacterVesna, kCharacterMilos, 135600432, 0);
- getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 1;
- VesnaCall(&LogicManager::CONS_Vesna_DoCorrOtis, "610BG", 38, 0, 0);
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterVesna).characterPosition.location = 0;
- if (getCharacter(kCharacterVesna).characterPosition.position < 2087)
- getCharacter(kCharacterVesna).characterPosition.position = 2088;
- getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 2;
- VesnaCall(&LogicManager::CONS_Vesna_DoWalk, 5, 850, 0, 0);
- break;
- case 2:
- getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 3;
- VesnaCall(&LogicManager::CONS_Vesna_WaitRCClear, 0, 0, 0, 0);
- break;
- case 3:
- getCharacter(kCharacterVesna).characterPosition.position = 1540;
- getCharacter(kCharacterVesna).characterPosition.location = 0;
- getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 4;
- VesnaCall(&LogicManager::CONS_Vesna_DoSeqOtis, "808US", 0, 0, 0);
- break;
- case 4:
- startSeqOtis(kCharacterVesna, "808UD");
- if (inSalon(kCharacterCath))
- advanceFrame(kCharacterVesna);
- getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 5;
- VesnaCall(&LogicManager::CONS_Vesna_FinishSeqOtis, 0, 0, 0, 0);
- break;
- case 5:
- endGraphics(kCharacterVesna);
- getCharacter(kCharacterVesna).characterPosition.position = 5900;
- getCharacter(kCharacterVesna).characterPosition.location = 1;
- endGraphics(kCharacterVesna);
- break;
- default:
- return;
- }
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 2428200 && !getCharacterCurrentParams(kCharacterVesna)[0]) {
+ getCharacterCurrentParams(kCharacterVesna)[0] = 1;
+ CONS_Vesna_Done(0, 0, 0, 0);
}
- } else if (_gameTime > 2428200 && !getCharacterCurrentParams(kCharacterVesna)[0]) {
- getCharacterCurrentParams(kCharacterVesna)[0] = 1;
- CONS_Vesna_Done(0, 0, 0, 0);
+
+ break;
+ case 12:
+ send(kCharacterVesna, kCharacterMilos, 135600432, 0);
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 1;
+ VesnaCall(&LogicManager::CONS_Vesna_DoCorrOtis, "610BG", 38, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterVesna).characterPosition.location = 0;
+
+ if (getCharacter(kCharacterVesna).characterPosition.position < 2087)
+ getCharacter(kCharacterVesna).characterPosition.position = 2088;
+
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 2;
+ VesnaCall(&LogicManager::CONS_Vesna_DoWalk, 5, 850, 0, 0);
+ break;
+ case 2:
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 3;
+ VesnaCall(&LogicManager::CONS_Vesna_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterVesna).characterPosition.position = 1540;
+ getCharacter(kCharacterVesna).characterPosition.location = 0;
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 4;
+ VesnaCall(&LogicManager::CONS_Vesna_DoSeqOtis, "808US", 0, 0, 0);
+ break;
+ case 4:
+ startSeqOtis(kCharacterVesna, "808UD");
+
+ if (inSalon(kCharacterCath))
+ advanceFrame(kCharacterVesna);
+
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 5;
+ VesnaCall(&LogicManager::CONS_Vesna_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 5:
+ endGraphics(kCharacterVesna);
+ getCharacter(kCharacterVesna).characterPosition.position = 5900;
+ getCharacter(kCharacterVesna).characterPosition.location = 1;
+ endGraphics(kCharacterVesna);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -1126,10 +1274,12 @@ void LogicManager::CONS_Vesna_Done(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_Done(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 1;
VesnaCall(&LogicManager::CONS_Vesna_WaitRCClear, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8]) {
case 1:
getCharacter(kCharacterVesna).characterPosition.car = kCarRestaurant;
@@ -1140,8 +1290,10 @@ void LogicManager::HAND_Vesna_Done(HAND_PARAMS) {
break;
case 2:
startSeqOtis(kCharacterVesna, "808DS");
+
if (inDiningRoom(kCharacterCath))
advanceFrame(kCharacterVesna);
+
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 3;
VesnaCall(&LogicManager::CONS_Vesna_FinishSeqOtis, 0, 0, 0, 0);
break;
@@ -1157,8 +1309,12 @@ void LogicManager::HAND_Vesna_Done(HAND_PARAMS) {
CONS_Vesna_EndPart4(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1173,13 +1329,17 @@ void LogicManager::CONS_Vesna_EndPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_EndPart4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterVesna);
setDoor(38, kCharacterCath, 3, 10, 9);
getCharacter(kCharacterVesna).characterPosition.location = 1;
getCharacter(kCharacterVesna).characterPosition.position = 3050;
getCharacter(kCharacterVesna).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterVesna).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -1194,15 +1354,18 @@ void LogicManager::CONS_Vesna_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_StartPart5(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterVesna);
- getCharacter(kCharacterVesna).characterPosition.location = 1;
- getCharacter(kCharacterVesna).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterVesna).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Vesna_Guarding(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterVesna);
+ getCharacter(kCharacterVesna).characterPosition.location = 1;
+ getCharacter(kCharacterVesna).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterVesna).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -1217,21 +1380,27 @@ void LogicManager::CONS_Vesna_Guarding(CONS_PARAMS) {
}
void LogicManager::HAND_Vesna_Guarding(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- if (getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] == 1) {
- playNIS(kEventCathVesnaRestaurantKilled);
- endGame(0, 1, 0, 1);
- }
- } else if (msg->action == 134427424) {
- setDoor(64, kCharacterCath, 0, 0, 1);
- CONS_Vesna_Climbing(0, 0, 0, 0);
- }
- } else if (msg->action == 12) {
- setDoor(64, kCharacterVesna, 0, 0, 1);
- } else if (msg->action == 9) {
+ switch (msg->action) {
+ case 9:
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 1;
VesnaCall(&LogicManager::CONS_Vesna_SaveGame, 2, kEventCathVesnaRestaurantKilled, 0, 0);
+ break;
+ case 12:
+ setDoor(64, kCharacterVesna, 0, 0, 1);
+ break;
+ case 18:
+ if (getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] == 1) {
+ playNIS(kEventCathVesnaRestaurantKilled);
+ endGame(0, 1, 0, true);
+ }
+
+ break;
+ case 134427424:
+ setDoor(64, kCharacterCath, 0, 0, 1);
+ CONS_Vesna_Climbing(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1248,27 +1417,45 @@ void LogicManager::CONS_Vesna_Climbing(CONS_PARAMS) {
void LogicManager::HAND_Vesna_Climbing(HAND_PARAMS) {
int fightOutcome;
- if (msg->action > 18) {
- if (msg->action == 167992577) {
- getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 3;
- VesnaCall(&LogicManager::CONS_Vesna_SaveGame, 2, kEventCathVesnaTrainTopFight, 0, 0);
- } else if (msg->action == 202884544) {
- if (getCharacterCurrentParams(kCharacterVesna)[0]) {
- getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 2;
- VesnaCall(&LogicManager::CONS_Vesna_SaveGame, 2, kEventCathVesnaTrainTopKilled, 0, 0);
- } else {
+ switch (msg->action) {
+ case 0:
+ {
+ bool skip = false;
+
+ if (!getCharacterCurrentParams(kCharacterVesna)[0]) {
+ if (getCharacterCurrentParams(kCharacterVesna)[2] || (getCharacterCurrentParams(kCharacterVesna)[2] = _currentGameSessionTicks + 120, _currentGameSessionTicks != -120)) {
+ if (getCharacterCurrentParams(kCharacterVesna)[2] >= _currentGameSessionTicks) {
+ skip = true;
+ }
+
+ if (!skip) {
+ getCharacterCurrentParams(kCharacterVesna)[2] = 0x7FFFFFFF;
+ }
+ }
+
+ if (!skip) {
playDialog(kCharacterVesna, "Ves5001", 16, 0);
getCharacterCurrentParams(kCharacterVesna)[0] = 1;
}
}
- return;
+
+ if (getCharacterCurrentParams(kCharacterVesna)[3] || (getCharacterCurrentParams(kCharacterVesna)[3] = _currentGameSessionTicks + 180, _currentGameSessionTicks != -180)) {
+ if (getCharacterCurrentParams(kCharacterVesna)[3] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterVesna)[3] = 0x7FFFFFFF;
+ }
+
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 1;
+ VesnaCall(&LogicManager::CONS_Vesna_SaveGame, 2, kEventCathVesnaTrainTopKilled, 0, 0);
+ break;
}
- if (msg->action == 18) {
+ case 18:
switch (getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8]) {
case 1:
case 2:
playNIS(kEventCathVesnaTrainTopKilled);
- endGame(0, 1, 0, 1);
+ endGame(0, 1, 0, true);
break;
case 3:
playNIS(kEventCathVesnaTrainTopFight);
@@ -1278,6 +1465,7 @@ void LogicManager::HAND_Vesna_Climbing(HAND_PARAMS) {
case 4:
fightOutcome = playFight(2005);
getCharacterCurrentParams(kCharacterVesna)[1] = fightOutcome;
+
if (fightOutcome) {
endGame(0, 0, 0, fightOutcome == 1);
} else {
@@ -1287,6 +1475,7 @@ void LogicManager::HAND_Vesna_Climbing(HAND_PARAMS) {
getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 5;
VesnaCall(&LogicManager::CONS_Vesna_SaveGame, 2, kEventCathVesnaTrainTopWin, 0, 0);
}
+
break;
case 5:
playNIS(kEventCathVesnaTrainTopWin);
@@ -1294,29 +1483,26 @@ void LogicManager::HAND_Vesna_Climbing(HAND_PARAMS) {
CONS_Vesna_Disappear(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
- return;
- }
- if (msg->action)
- return;
- if (!getCharacterCurrentParams(kCharacterVesna)[0]) {
- if (getCharacterCurrentParams(kCharacterVesna)[2] || (getCharacterCurrentParams(kCharacterVesna)[2] = _currentGameSessionTicks + 120, _currentGameSessionTicks != -120)) {
- if (getCharacterCurrentParams(kCharacterVesna)[2] >= _currentGameSessionTicks)
- goto LABEL_14;
- getCharacterCurrentParams(kCharacterVesna)[2] = 0x7FFFFFFF;
+
+ break;
+ case 167992577:
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 3;
+ VesnaCall(&LogicManager::CONS_Vesna_SaveGame, 2, kEventCathVesnaTrainTopFight, 0, 0);
+ break;
+ case 202884544:
+ if (getCharacterCurrentParams(kCharacterVesna)[0]) {
+ getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 2;
+ VesnaCall(&LogicManager::CONS_Vesna_SaveGame, 2, kEventCathVesnaTrainTopKilled, 0, 0);
+ } else {
+ playDialog(kCharacterVesna, "Ves5001", 16, 0);
+ getCharacterCurrentParams(kCharacterVesna)[0] = 1;
}
- playDialog(kCharacterVesna, "Ves5001", 16, 0);
- getCharacterCurrentParams(kCharacterVesna)[0] = 1;
- }
-LABEL_14:
- if (getCharacterCurrentParams(kCharacterVesna)[3] || (getCharacterCurrentParams(kCharacterVesna)[3] = _currentGameSessionTicks + 180, _currentGameSessionTicks != -180)) {
- if (getCharacterCurrentParams(kCharacterVesna)[3] >= _currentGameSessionTicks)
- return;
- getCharacterCurrentParams(kCharacterVesna)[3] = 0x7FFFFFFF;
+ break;
+ default:
+ break;
}
- getCharacter(kCharacterVesna).callbacks[getCharacter(kCharacterVesna).currentCall + 8] = 1;
- VesnaCall(&LogicManager::CONS_Vesna_SaveGame, 2, kEventCathVesnaTrainTopKilled, 0, 0);
}
void LogicManager::CONS_Vesna_Disappear(CONS_PARAMS) {
Commit: 5521c7ecb56aac156488021ce54a94061d91cd4e
https://github.com/scummvm/scummvm/commit/5521c7ecb56aac156488021ce54a94061d91cd4e
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Tatiana logic
Changed paths:
engines/lastexpress/characters/tatiana.cpp
diff --git a/engines/lastexpress/characters/tatiana.cpp b/engines/lastexpress/characters/tatiana.cpp
index 786005eb8cc..7652f8a8302 100644
--- a/engines/lastexpress/characters/tatiana.cpp
+++ b/engines/lastexpress/characters/tatiana.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_Tatiana(int chapter) {
CONS_Tatiana_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -69,24 +69,32 @@ void LogicManager::CONS_Tatiana_DebugWalks(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_DebugWalks(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 1) {
- getCharacter(kCharacterTatiana).clothes++;
- if (getCharacter(kCharacterTatiana).clothes > 3)
- getCharacter(kCharacterTatiana).clothes = 0;
- } else if (msg->action == 12) {
- getCharacter(kCharacterTatiana).characterPosition.position = 0;
- getCharacter(kCharacterTatiana).characterPosition.location = 0;
- getCharacter(kCharacterTatiana).characterPosition.car = kCarGreenSleeping;
- getCharacter(kCharacterTatiana).inventoryItem = 0x80;
- getCharacterCurrentParams(kCharacterTatiana)[0] = 10000;
- }
- } else if (walk(kCharacterTatiana, kCarGreenSleeping, getCharacterCurrentParams(kCharacterTatiana)[0])) {
- if (getCharacterCurrentParams(kCharacterTatiana)[0] == 10000) {
- getCharacterCurrentParams(kCharacterTatiana)[0] = 0;
- } else {
- getCharacterCurrentParams(kCharacterTatiana)[0] = 10000;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterTatiana, kCarGreenSleeping, getCharacterCurrentParams(kCharacterTatiana)[0])) {
+ if (getCharacterCurrentParams(kCharacterTatiana)[0] == 10000) {
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 10000;
+ }
}
+
+ break;
+ case 1:
+ getCharacter(kCharacterTatiana).clothes++;
+ if (getCharacter(kCharacterTatiana).clothes > 3)
+ getCharacter(kCharacterTatiana).clothes = 0;
+
+ break;
+ case 12:
+ getCharacter(kCharacterTatiana).characterPosition.position = 0;
+ getCharacter(kCharacterTatiana).characterPosition.location = 0;
+ getCharacter(kCharacterTatiana).characterPosition.car = kCarGreenSleeping;
+ getCharacter(kCharacterTatiana).inventoryItem = 0x80;
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 10000;
+ break;
+ default:
+ break;
}
}
@@ -103,12 +111,17 @@ void LogicManager::CONS_Tatiana_DoDialog(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_DoDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterTatiana).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterTatiana, (char *)&getCharacterCurrentParams(kCharacterTatiana)[0], -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -125,12 +138,17 @@ void LogicManager::CONS_Tatiana_DoSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_DoSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
getCharacter(kCharacterTatiana).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterTatiana, (char *)&getCharacterCurrentParams(kCharacterTatiana)[0]);
+ break;
+ default:
+ break;
}
}
@@ -150,15 +168,20 @@ void LogicManager::CONS_Tatiana_DoBlockSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_DoBlockSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseView(kCharacterTatiana, getCharacterCurrentParams(kCharacterTatiana)[3], getCharacterCurrentParams(kCharacterTatiana)[4]);
getCharacter(kCharacterTatiana).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterTatiana, (char *)&getCharacterCurrentParams(kCharacterTatiana)[0]);
blockView(kCharacterTatiana, getCharacterCurrentParams(kCharacterTatiana)[3], getCharacterCurrentParams(kCharacterTatiana)[4]);
+ break;
+ default:
+ break;
}
}
@@ -177,15 +200,20 @@ void LogicManager::CONS_Tatiana_DoCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_DoCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterTatiana, getCharacterCurrentParams(kCharacterTatiana)[3]);
getCharacter(kCharacterTatiana).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterTatiana, (char *)&getCharacterCurrentParams(kCharacterTatiana)[0]);
blockAtDoor(kCharacterTatiana, getCharacterCurrentParams(kCharacterTatiana)[3]);
+ break;
+ default:
+ break;
}
}
@@ -204,22 +232,29 @@ void LogicManager::CONS_Tatiana_DoEnterCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_DoEnterCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterTatiana, getCharacterCurrentParams(kCharacterTatiana)[3]);
getCharacter(kCharacterTatiana).characterPosition.position = 7500;
getCharacter(kCharacterTatiana).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterTatiana, (char *)&getCharacterCurrentParams(kCharacterTatiana)[0]);
blockAtDoor(kCharacterTatiana, getCharacterCurrentParams(kCharacterTatiana)[3]);
getCharacter(kCharacterTatiana).characterPosition.location = 1;
+
if (inComp(kCharacterCath, kCarRedSleeping, 7500) || inComp(kCharacterCath, kCarRedSleeping, 7850)) {
playNIS((kEventCathTurningNight - !isNight()));
playDialog(0, "BUMP", -1, 0);
bumpCathRDoor(33);
}
+
+ break;
+ default:
+ break;
}
}
@@ -255,10 +290,13 @@ void LogicManager::HAND_Tatiana_DoJoinedSeqOtis(HAND_PARAMS) {
fedEx(kCharacterTatiana, getCharacterCurrentParams(kCharacterTatiana)[3], getCharacterCurrentParams(kCharacterTatiana)[4], (char *)&getCharacterCurrentParams(kCharacterTatiana)[5]);
getCharacterCurrentParams(kCharacterTatiana)[8] = 1;
}
+
break;
case 12:
startSeqOtis(kCharacterTatiana, (char *)&getCharacterCurrentParams(kCharacterTatiana)[0]);
break;
+ default:
+ break;
}
}
@@ -273,16 +311,22 @@ void LogicManager::CONS_Tatiana_FinishSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_FinishSeqOtis(HAND_PARAMS) {
- if (msg->action == 0) {
- if (getCharacter(kCharacterTatiana).direction == 4)
- return;
- goto LABEL_5;
- }
- if (msg->action == 3) {
- LABEL_5:
+ switch (msg->action) {
+ case 0:
+ if (getCharacter(kCharacterTatiana).direction != 4) {
+ getCharacter(kCharacterTatiana).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
+ fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
+ }
+
+ break;
+ case 3:
getCharacter(kCharacterTatiana).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -299,17 +343,22 @@ void LogicManager::CONS_Tatiana_DoWaitRealTime(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_DoWaitRealTime(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterTatiana)[1] || (getCharacterCurrentParams(kCharacterTatiana)[1] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterTatiana)[0],
_currentGameSessionTicks + getCharacterCurrentParams(kCharacterTatiana)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterTatiana)[1] >= _currentGameSessionTicks)
- return;
+ break;
+
getCharacterCurrentParams(kCharacterTatiana)[1] = 0x7FFFFFFF;
}
getCharacter(kCharacterTatiana).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -326,11 +375,12 @@ void LogicManager::CONS_Tatiana_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_DoWait(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterTatiana)[1] || (getCharacterCurrentParams(kCharacterTatiana)[1] = _gameTime + getCharacterCurrentParams(kCharacterTatiana)[0],
_gameTime + getCharacterCurrentParams(kCharacterTatiana)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterTatiana)[1] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterTatiana)[1] = 0x7FFFFFFF;
}
@@ -338,6 +388,9 @@ void LogicManager::HAND_Tatiana_DoWait(HAND_PARAMS) {
getCharacter(kCharacterTatiana).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -352,16 +405,18 @@ void LogicManager::CONS_Tatiana_WaitRCClear(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_WaitRCClear(HAND_PARAMS) {
- if (msg->action == 0) {
- if (!rcClear())
- return;
- goto LABEL_7;
- }
- if (msg->action == 12 && rcClear()) {
- LABEL_7:
- getCharacter(kCharacterTatiana).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
- fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
+ switch (msg->action) {
+ case 0:
+ case 12:
+ if (rcClear()) {
+ getCharacter(kCharacterTatiana).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
+ fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -379,22 +434,25 @@ void LogicManager::CONS_Tatiana_SaveGame(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_SaveGame(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- save(
- kCharacterTatiana,
- getCharacterCurrentParams(kCharacterTatiana)[0],
- getCharacterCurrentParams(kCharacterTatiana)[1]
- );
+ switch (msg->action) {
+ case 0:
+ getCharacter(kCharacterTatiana).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
+ fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
+ break;
+ case 12:
+ save(
+ kCharacterTatiana,
+ getCharacterCurrentParams(kCharacterTatiana)[0],
+ getCharacterCurrentParams(kCharacterTatiana)[1]
+ );
- getCharacter(kCharacterTatiana).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
- fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
- }
- } else {
getCharacter(kCharacterTatiana).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -414,8 +472,13 @@ void LogicManager::CONS_Tatiana_DoWalk(CONS_PARAMS) {
void LogicManager::HAND_Tatiana_DoWalk(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (walk(kCharacterTatiana, getCharacterCurrentParams(kCharacterTatiana)[0], getCharacterCurrentParams(kCharacterTatiana)[1]))
- goto LABEL_14;
+ case 12:
+ if (walk(kCharacterTatiana, getCharacterCurrentParams(kCharacterTatiana)[0], getCharacterCurrentParams(kCharacterTatiana)[1])) {
+ getCharacter(kCharacterTatiana).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
+ fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
+ }
+
break;
case 5:
if (_gameEvents[kEventTatianaAskMatchSpeakRussian] || _gameEvents[kEventTatianaAskMatch] || _gameEvents[kEventVassiliSeizure]) {
@@ -432,16 +495,8 @@ void LogicManager::HAND_Tatiana_DoWalk(HAND_PARAMS) {
case 6:
playChrExcuseMe(kCharacterTatiana, kCharacterCath, 0);
break;
- case 12:
- if (walk(kCharacterTatiana, getCharacterCurrentParams(kCharacterTatiana)[0], getCharacterCurrentParams(kCharacterTatiana)[1])) {
- LABEL_14:
- getCharacter(kCharacterTatiana).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
- fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
- }
- break;
default:
- return;
+ break;
}
}
@@ -479,6 +534,7 @@ void LogicManager::HAND_Tatiana_EnterComp(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
}
+
break;
case 69239528:
if (_gameProgress[kProgressChapter] == 1) {
@@ -488,6 +544,9 @@ void LogicManager::HAND_Tatiana_EnterComp(HAND_PARAMS) {
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
TatianaCall(&LogicManager::CONS_Tatiana_DoEnterCorrOtis, "673Db", 33, 0, 0);
}
+
+ break;
+ default:
break;
}
}
@@ -512,6 +571,7 @@ void LogicManager::HAND_Tatiana_ExitComp(HAND_PARAMS) {
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
TatianaCall(&LogicManager::CONS_Tatiana_DoCorrOtis, "673Bb", 33, 0, 0);
}
+
break;
case 18:
if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] &&
@@ -527,6 +587,7 @@ void LogicManager::HAND_Tatiana_ExitComp(HAND_PARAMS) {
softBlockAtDoor(kCharacterTatiana, 33);
}
+
break;
case 69239528:
softReleaseAtDoor(kCharacterTatiana, 33);
@@ -536,6 +597,8 @@ void LogicManager::HAND_Tatiana_ExitComp(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
break;
+ default:
+ break;
}
}
@@ -562,12 +625,13 @@ void LogicManager::HAND_Tatiana_CompLogic(HAND_PARAMS) {
getCharacter(kCharacterTatiana).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
- return;
+ break;
}
+
if (getCharacterCurrentParams(kCharacterTatiana)[1]) {
if (getCharacterCurrentParams(kCharacterTatiana)[4] || (getCharacterCurrentParams(kCharacterTatiana)[4] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
if (getCharacterCurrentParams(kCharacterTatiana)[4] >= _currentGameSessionTicks)
- return;
+ break;
getCharacterCurrentParams(kCharacterTatiana)[4] = 0x7FFFFFFF;
}
@@ -580,12 +644,14 @@ void LogicManager::HAND_Tatiana_CompLogic(HAND_PARAMS) {
} else {
getCharacterCurrentParams(kCharacterTatiana)[4] = 0;
}
+
break;
case 8:
case 9:
if (getCharacterCurrentParams(kCharacterTatiana)[1]) {
setDoor(33, kCharacterTatiana, 1, 0, 0);
setDoor(49, kCharacterTatiana, 1, 0, 0);
+
if (msg->param.intParam == 49) {
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 4;
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, getCathWCDialog(), 0, 0, 0);
@@ -612,6 +678,7 @@ void LogicManager::HAND_Tatiana_CompLogic(HAND_PARAMS) {
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, "LIB013", 0, 0, 0);
}
}
+
break;
case 12:
setDoor(33, kCharacterTatiana, 1, 10, 9);
@@ -624,6 +691,7 @@ void LogicManager::HAND_Tatiana_CompLogic(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterTatiana)[2] = 0;
getCharacterCurrentParams(kCharacterTatiana)[1] = 0;
}
+
break;
case 18:
switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
@@ -649,11 +717,12 @@ void LogicManager::HAND_Tatiana_CompLogic(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterTatiana)[2] = 1;
break;
default:
- return;
+ break;
}
+
break;
default:
- return;
+ break;
}
}
@@ -668,19 +737,25 @@ void LogicManager::CONS_Tatiana_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_Birth(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- autoMessage(kCharacterTatiana, 191198209, 0);
- getCharacter(kCharacterTatiana).characterPosition.position = 5419;
- getCharacter(kCharacterTatiana).characterPosition.location = 1;
- getCharacter(kCharacterTatiana).characterPosition.car = kCarRestaurant;
- setDoor(33, kCharacterCath, 1, 10, 9);
- setDoor(49, kCharacterCath, 1, 10, 9);
- setDoor(41, kCharacterCath, 0, 255, 255);
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterTatiana)[0]) {
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
+ CONS_Tatiana_AtDinner(0, 0, 0, 0);
}
- } else if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterTatiana)[0]) {
- getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
- CONS_Tatiana_AtDinner(0, 0, 0, 0);
+
+ break;
+ case 12:
+ autoMessage(kCharacterTatiana, 191198209, 0);
+ getCharacter(kCharacterTatiana).characterPosition.position = 5419;
+ getCharacter(kCharacterTatiana).characterPosition.location = 1;
+ getCharacter(kCharacterTatiana).characterPosition.car = kCarRestaurant;
+ setDoor(33, kCharacterCath, 1, 10, 9);
+ setDoor(49, kCharacterCath, 1, 10, 9);
+ setDoor(41, kCharacterCath, 0, 255, 255);
+ break;
+ default:
+ break;
}
}
@@ -697,27 +772,33 @@ void LogicManager::CONS_Tatiana_DoSpecialSalonWalk(CONS_PARAMS) {
void LogicManager::HAND_Tatiana_DoSpecialSalonWalk(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (getCharacterCurrentParams(kCharacterTatiana)[0])
- goto LABEL_13;
- if (_gameTime > 1143000 && !getCharacterCurrentParams(kCharacterTatiana)[1]) {
- getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
- startSeqOtis(kCharacterTatiana, "806DS");
- getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
- }
- if (getCharacterCurrentParams(kCharacterTatiana)[0])
- goto LABEL_13;
- if (!getCharacterCurrentParams(kCharacterTatiana)[2]) {
- getCharacterCurrentParams(kCharacterTatiana)[2] = _gameTime + 4500;
- if (_gameTime == -4500)
- goto LABEL_12;
- }
- if (getCharacterCurrentParams(kCharacterTatiana)[2] < _gameTime) {
- getCharacterCurrentParams(kCharacterTatiana)[2] = 0x7FFFFFFF;
- LABEL_12:
- startSeqOtis(kCharacterTatiana, "806DS");
- getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
+ if (!getCharacterCurrentParams(kCharacterTatiana)[0]) {
+ if (_gameTime > 1143000 && !getCharacterCurrentParams(kCharacterTatiana)[1]) {
+ getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
+ startSeqOtis(kCharacterTatiana, "806DS");
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
+ }
+
+ if (!getCharacterCurrentParams(kCharacterTatiana)[0]) {
+ bool skip = false;
+
+ if (!getCharacterCurrentParams(kCharacterTatiana)[2]) {
+ getCharacterCurrentParams(kCharacterTatiana)[2] = _gameTime + 4500;
+ if (_gameTime == -4500) {
+ skip = true;
+ startSeqOtis(kCharacterTatiana, "806DS");
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
+ }
+ }
+
+ if (!skip && getCharacterCurrentParams(kCharacterTatiana)[2] < _gameTime) {
+ getCharacterCurrentParams(kCharacterTatiana)[2] = 0x7FFFFFFF;
+ startSeqOtis(kCharacterTatiana, "806DS");
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
+ }
+ }
}
- LABEL_13:
+
if (getCharacter(kCharacterTatiana).characterPosition.position <= 2330) {
send(kCharacterTatiana, kCharacterAlexei, 157159392, 0);
endGraphics(kCharacterTatiana);
@@ -726,6 +807,7 @@ void LogicManager::HAND_Tatiana_DoSpecialSalonWalk(HAND_PARAMS) {
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
}
+
break;
case 3:
send(kCharacterTatiana, kCharacterAlexei, 188784532, 0);
@@ -733,7 +815,7 @@ void LogicManager::HAND_Tatiana_DoSpecialSalonWalk(HAND_PARAMS) {
getCharacter(kCharacterTatiana).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
- return;
+ break;
case 12:
if (inSalon(kCharacterCath)) {
startSeqOtis(kCharacterTatiana, "806DS");
@@ -741,16 +823,18 @@ void LogicManager::HAND_Tatiana_DoSpecialSalonWalk(HAND_PARAMS) {
} else {
endGraphics(kCharacterTatiana);
}
- return;
+
+ break;
case 17:
if (!getCharacterCurrentParams(kCharacterTatiana)[0] && inSalon(kCharacterCath)) {
startSeqOtis(kCharacterTatiana, "806DS");
advanceFrame(kCharacterTatiana);
getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
}
- return;
+
+ break;
default:
- return;
+ break;
}
}
@@ -765,68 +849,61 @@ void LogicManager::CONS_Tatiana_AtDinner(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_AtDinner(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action > 122288808) {
- if (msg->action == 122358304) {
- startCycOtis(kCharacterTatiana, "BLANK");
- } else if (msg->action == 124973510) {
- CONS_Tatiana_ExitDining(0, 0, 0, 0);
+ switch (msg->action) {
+ case 0:
+ {
+ if (!whoRunningDialog(kCharacterTatiana) && getCharacterCurrentParams(kCharacterTatiana)[3] && getCharacterCurrentParams(kCharacterTatiana)[2] < 2 && !dialogRunning("TAT1066")) {
+ bool skip1 = false;
+
+ if (getCharacterCurrentParams(kCharacterTatiana)[4] || (getCharacterCurrentParams(kCharacterTatiana)[4] = _currentGameSessionTicks + 450, _currentGameSessionTicks != -450)) {
+ if (getCharacterCurrentParams(kCharacterTatiana)[4] >= _currentGameSessionTicks) {
+ skip1 = true;
+ }
+
+ if (!skip1) {
+ getCharacterCurrentParams(kCharacterTatiana)[4] = 0x7FFFFFFF;
+ }
}
- } else if (msg->action == 122288808) {
- startCycOtis(kCharacterTatiana, "014A");
- } else if (msg->action == 17) {
- getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
- if (!checkCathDir(kCarRestaurant, 67))
- getCharacterCurrentParams(kCharacterTatiana)[0] = 0;
- getCharacterCurrentParams(kCharacterTatiana)[3] = checkCathDir(kCarRestaurant, 69) || checkCathDir(kCarRestaurant, 70) || checkCathDir(kCarRestaurant, 71);
- }
- return;
- }
- if (msg->action == 12) {
- send(kCharacterTatiana, kCharacterTableE, 136455232, 0);
- startCycOtis(kCharacterTatiana, "014A");
- return;
- }
- if (msg->action == 0) {
- if (whoRunningDialog(kCharacterTatiana) || !getCharacterCurrentParams(kCharacterTatiana)[3] || getCharacterCurrentParams(kCharacterTatiana)[2] >= 2 || dialogRunning("TAT1066")) {
- goto tatiana_chapter1_handler_goto;
- }
- if (getCharacterCurrentParams(kCharacterTatiana)[4] || (getCharacterCurrentParams(kCharacterTatiana)[4] = _currentGameSessionTicks + 450, _currentGameSessionTicks != -450)) {
- if (getCharacterCurrentParams(kCharacterTatiana)[4] >= _currentGameSessionTicks)
- goto LABEL_23;
- getCharacterCurrentParams(kCharacterTatiana)[4] = 0x7FFFFFFF;
- }
-
- if (!getCharacterCurrentParams(kCharacterTatiana)[2]) {
- playDialog(kCharacterTatiana, "TAT1069A", -1, 0);
- } else {
- playDialog(kCharacterTatiana, "TAT1069B", -1, 0);
- }
-
- _gameProgress[kProgressField64] = 1;
- getCharacterCurrentParams(kCharacterTatiana)[2]++;
- getCharacterCurrentParams(kCharacterTatiana)[4] = 0;
- LABEL_23:
- if (checkCathDir(kCarRestaurant, 71)) {
- if (getCharacterCurrentParams(kCharacterTatiana)[5] || (getCharacterCurrentParams(kCharacterTatiana)[5] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterTatiana)[5] >= _currentGameSessionTicks)
- goto tatiana_chapter1_handler_goto;
- getCharacterCurrentParams(kCharacterTatiana)[5] = 0x7FFFFFFF;
+ if (!skip1) {
+ if (!getCharacterCurrentParams(kCharacterTatiana)[2]) {
+ playDialog(kCharacterTatiana, "TAT1069A", -1, 0);
+ } else {
+ playDialog(kCharacterTatiana, "TAT1069B", -1, 0);
+ }
+
+ _gameProgress[kProgressField64] = 1;
+ getCharacterCurrentParams(kCharacterTatiana)[2]++;
+ getCharacterCurrentParams(kCharacterTatiana)[4] = 0;
}
-
- if (!getCharacterCurrentParams(kCharacterTatiana)[2]) {
- playDialog(kCharacterTatiana, "TAT1069A", -1, 0);
- } else {
- playDialog(kCharacterTatiana, "TAT1069B", -1, 0);
+
+ bool skip2 = false;
+
+ if (checkCathDir(kCarRestaurant, 71)) {
+ if (getCharacterCurrentParams(kCharacterTatiana)[5] || (getCharacterCurrentParams(kCharacterTatiana)[5] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterTatiana)[5] >= _currentGameSessionTicks) {
+ skip2 = true;
+ }
+
+ if (!skip2) {
+ getCharacterCurrentParams(kCharacterTatiana)[5] = 0x7FFFFFFF;
+ }
+ }
+
+ if (!skip2) {
+ if (!getCharacterCurrentParams(kCharacterTatiana)[2]) {
+ playDialog(kCharacterTatiana, "TAT1069A", -1, 0);
+ } else {
+ playDialog(kCharacterTatiana, "TAT1069B", -1, 0);
+ }
+
+ _gameProgress[kProgressField64] = 1;
+ getCharacterCurrentParams(kCharacterTatiana)[2]++;
+ getCharacterCurrentParams(kCharacterTatiana)[5] = 0;
+ }
}
-
- _gameProgress[kProgressField64] = 1;
- getCharacterCurrentParams(kCharacterTatiana)[2]++;
- getCharacterCurrentParams(kCharacterTatiana)[5] = 0;
}
- tatiana_chapter1_handler_goto:
if (_gameTime > 1084500 && !getCharacterCurrentParams(kCharacterTatiana)[6]) {
getCharacterCurrentParams(kCharacterTatiana)[6] = 1;
send(kCharacterTatiana, kCharacterHeadWait, 257489762, 0);
@@ -835,7 +912,7 @@ void LogicManager::HAND_Tatiana_AtDinner(HAND_PARAMS) {
if (getCharacterCurrentParams(kCharacterTatiana)[0]) {
if (getCharacterCurrentParams(kCharacterTatiana)[7] || (getCharacterCurrentParams(kCharacterTatiana)[7] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
if (getCharacterCurrentParams(kCharacterTatiana)[7] >= _currentGameSessionTicks)
- return;
+ break;
getCharacterCurrentParams(kCharacterTatiana)[7] = 0x7FFFFFFF;
}
@@ -844,6 +921,32 @@ void LogicManager::HAND_Tatiana_AtDinner(HAND_PARAMS) {
} else {
getCharacterCurrentParams(kCharacterTatiana)[7] = 0;
}
+
+ break;
+ }
+ case 12:
+ send(kCharacterTatiana, kCharacterTableE, 136455232, 0);
+ startCycOtis(kCharacterTatiana, "014A");
+ break;
+ case 17:
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
+
+ if (!checkCathDir(kCarRestaurant, 67))
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 0;
+
+ getCharacterCurrentParams(kCharacterTatiana)[3] = (checkCathDir(kCarRestaurant, 69) || checkCathDir(kCarRestaurant, 70) || checkCathDir(kCarRestaurant, 71)) ? 1 : 0;
+ break;
+ case 122358304:
+ startCycOtis(kCharacterTatiana, "BLANK");
+ break;
+ case 124973510:
+ CONS_Tatiana_ExitDining(0, 0, 0, 0);
+ break;
+ case 122288808:
+ startCycOtis(kCharacterTatiana, "014A");
+ break;
+ default:
+ break;
}
}
@@ -858,10 +961,12 @@ void LogicManager::CONS_Tatiana_ExitDining(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_ExitDining(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
TatianaCall(&LogicManager::CONS_Tatiana_WaitRCClear, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
case 1:
getCharacter(kCharacterTatiana).characterPosition.location = 0;
@@ -881,8 +986,14 @@ void LogicManager::HAND_Tatiana_ExitDining(HAND_PARAMS) {
send(kCharacterTatiana, kCharacterAugust, 268620864, 0);
CONS_Tatiana_ReturnToComp(0, 0, 0, 0);
break;
+ default:
+ break;
}
- }
+
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Tatiana_ReturnToComp(CONS_PARAMS) {
@@ -896,11 +1007,13 @@ void LogicManager::CONS_Tatiana_ReturnToComp(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_ReturnToComp(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterTatiana).clothes = 1;
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 4, 8513, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
case 1:
getCharacter(kCharacterTatiana).clothes = 0;
@@ -908,11 +1021,13 @@ void LogicManager::HAND_Tatiana_ReturnToComp(HAND_PARAMS) {
startSeqOtis(kCharacterTatiana, "604Aa");
blockAtDoor(kCharacterTatiana, 32);
getCharacter(kCharacterTatiana).characterPosition.location = 1;
+
if (inSuite(kCharacterCath, kCarRedSleeping, 7850)) {
playNIS((kEventCathTurningNight - !isNight()));
playDialog(0, "BUMP", -1, 0);
bumpCathFDoor(32);
}
+
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
TatianaCall(&LogicManager::CONS_Tatiana_FinishSeqOtis, 0, 0, 0, 0);
break;
@@ -923,9 +1038,9 @@ void LogicManager::HAND_Tatiana_ReturnToComp(HAND_PARAMS) {
send(kCharacterTatiana, kCharacterAlexei, 135854208, 0);
setDoor(32, kCharacterCath, 1, 0, 0);
setDoor(33, kCharacterCath, 1, 0, 0);
- goto LABEL_10;
+
+ // fall through
case 3:
- LABEL_10:
if (whoRunningDialog(kCharacterTatiana)) {
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
TatianaCall(&LogicManager::CONS_Tatiana_DoWait, 75, 0, 0, 0);
@@ -933,6 +1048,7 @@ void LogicManager::HAND_Tatiana_ReturnToComp(HAND_PARAMS) {
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 4;
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, "TAT1071A", 0, 0, 0);
}
+
break;
case 4:
getCharacter(kCharacterTatiana).characterPosition.position = 7500;
@@ -949,10 +1065,15 @@ void LogicManager::HAND_Tatiana_ReturnToComp(HAND_PARAMS) {
setDoor(49, kCharacterCath, 1, 10, 9);
CONS_Tatiana_GetSomeAir(0, 0, 0, 0);
}
+
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -969,52 +1090,90 @@ void LogicManager::CONS_Tatiana_GetSomeAir(CONS_PARAMS) {
void LogicManager::HAND_Tatiana_GetSomeAir(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (getCharacterCurrentParams(kCharacterTatiana)[0] == 0x7FFFFFFF || _gameTime <= 1179000)
- goto LABEL_17;
- if (_gameTime > 1233000)
- goto LABEL_12;
+ if (getCharacterCurrentParams(kCharacterTatiana)[0] == 0x7FFFFFFF || _gameTime <= 1179000) {
+ if (!_gameEvents[kEventTatianaAskMatchSpeakRussian] && !_gameEvents[kEventTatianaAskMatch] && cathHasItem(kItemMatchBox) && onLowPlatform(kCharacterCath)) {
+ setDoor(25, kCharacterTatiana, 1, 0, 1);
+ setDoor(23, kCharacterTatiana, 1, 0, 1);
+ }
+
+ break;
+ }
+
+ if (_gameTime > 1233000) {
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 0x7FFFFFFF;
+ setDoor(25, kCharacterCath, 0, 255, 255);
+ setDoor(23, kCharacterCath, 0, 255, 255);
+ releaseView(kCharacterTatiana, kCarGreenSleeping, 70);
+ releaseView(kCharacterTatiana, kCarGreenSleeping, 71);
+
+ if (onLowPlatform(kCharacterCath)) {
+ playChrExcuseMe(kCharacterTatiana, kCharacterCath, 0);
+ if (checkCathDir(kCarGreenSleeping, 62))
+ bumpCath(kCarGreenSleeping, 72, 255);
+ }
+
+ getCharacter(kCharacterTatiana).inventoryItem = 0;
+ CONS_Tatiana_ReturnToCompAgain(0, 0, 0, 0);
+ break;
+ }
+
if (!_gameEvents[kEventTatianaAskMatchSpeakRussian] && !_gameEvents[kEventTatianaAskMatch] || onLowPlatform(kCharacterCath) || !getCharacterCurrentParams(kCharacterTatiana)[0]) {
getCharacterCurrentParams(kCharacterTatiana)[0] = _gameTime;
- if (!_gameTime)
- goto LABEL_13;
+ if (!_gameTime) {
+ setDoor(25, kCharacterCath, 0, 255, 255);
+ setDoor(23, kCharacterCath, 0, 255, 255);
+ releaseView(kCharacterTatiana, kCarGreenSleeping, 70);
+ releaseView(kCharacterTatiana, kCarGreenSleeping, 71);
+
+ if (onLowPlatform(kCharacterCath)) {
+ playChrExcuseMe(kCharacterTatiana, kCharacterCath, 0);
+ if (checkCathDir(kCarGreenSleeping, 62))
+ bumpCath(kCarGreenSleeping, 72, 255);
+ }
+
+ getCharacter(kCharacterTatiana).inventoryItem = 0;
+ CONS_Tatiana_ReturnToCompAgain(0, 0, 0, 0);
+ break;
+ }
}
+
if (getCharacterCurrentParams(kCharacterTatiana)[0] >= _gameTime) {
- LABEL_17:
if (!_gameEvents[kEventTatianaAskMatchSpeakRussian] && !_gameEvents[kEventTatianaAskMatch] && cathHasItem(kItemMatchBox) && onLowPlatform(kCharacterCath)) {
setDoor(25, kCharacterTatiana, 1, 0, 1);
setDoor(23, kCharacterTatiana, 1, 0, 1);
}
} else {
- LABEL_12:
getCharacterCurrentParams(kCharacterTatiana)[0] = 0x7FFFFFFF;
- LABEL_13:
setDoor(25, kCharacterCath, 0, 255, 255);
setDoor(23, kCharacterCath, 0, 255, 255);
releaseView(kCharacterTatiana, kCarGreenSleeping, 70);
releaseView(kCharacterTatiana, kCarGreenSleeping, 71);
+
if (onLowPlatform(kCharacterCath)) {
playChrExcuseMe(kCharacterTatiana, kCharacterCath, 0);
if (checkCathDir(kCarGreenSleeping, 62))
bumpCath(kCarGreenSleeping, 72, 255);
}
+
getCharacter(kCharacterTatiana).inventoryItem = 0;
CONS_Tatiana_ReturnToCompAgain(0, 0, 0, 0);
}
+
break;
case 1:
getCharacter(kCharacterTatiana).inventoryItem = 0;
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 4;
TatianaCall(&LogicManager::CONS_Tatiana_SaveGame, 2, kEventTatianaGivePoem, 0, 0);
- return;
+ break;
case 9:
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
TatianaCall(&LogicManager::CONS_Tatiana_SaveGame, 2, kEventTatianaAskMatchSpeakRussian, 0, 0);
- return;
+ break;
case 12:
send(kCharacterTatiana, kCharacterVassili, 122732000, 0);
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
TatianaCall(&LogicManager::CONS_Tatiana_ExitComp, 0, 0, 0, 0);
- return;
+ break;
case 18:
switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
case 1:
@@ -1045,11 +1204,12 @@ void LogicManager::HAND_Tatiana_GetSomeAir(HAND_PARAMS) {
cleanNIS();
break;
default:
- return;
+ break;
}
- return;
+
+ break;
default:
- return;
+ break;
}
}
@@ -1064,16 +1224,22 @@ void LogicManager::CONS_Tatiana_ReturnToCompAgain(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_ReturnToCompAgain(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 4, 7500, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1) {
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
TatianaCall(&LogicManager::CONS_Tatiana_EnterComp, 0, 0, 0, 0);
} else if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 2) {
CONS_Tatiana_Asleep(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -1088,7 +1254,8 @@ void LogicManager::CONS_Tatiana_Asleep(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_Asleep(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterTatiana).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterTatiana).characterPosition.position = 7500;
getCharacter(kCharacterTatiana).characterPosition.location = 1;
@@ -1100,6 +1267,9 @@ void LogicManager::HAND_Tatiana_Asleep(HAND_PARAMS) {
setDoor(33, kCharacterCath, 1, 10, 9);
setDoor(49, kCharacterCath, 1, 10, 9);
setDoor(41, kCharacterCath, 0, 255, 255);
+ break;
+ default:
+ break;
}
}
@@ -1114,19 +1284,22 @@ void LogicManager::CONS_Tatiana_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_StartPart2(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterTatiana);
- getCharacter(kCharacterTatiana).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterTatiana).characterPosition.position = 5420;
- getCharacter(kCharacterTatiana).characterPosition.location = 1;
- getCharacter(kCharacterTatiana).clothes = 2;
- setDoor(33, kCharacterCath, 1, 10, 9);
- setDoor(49, kCharacterCath, 1, 10, 9);
- setDoor(41, kCharacterCath, 0, 255, 255);
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Tatiana_EatingBreakfast(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterTatiana);
+ getCharacter(kCharacterTatiana).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterTatiana).characterPosition.position = 5420;
+ getCharacter(kCharacterTatiana).characterPosition.location = 1;
+ getCharacter(kCharacterTatiana).clothes = 2;
+ setDoor(33, kCharacterCath, 1, 10, 9);
+ setDoor(49, kCharacterCath, 1, 10, 9);
+ setDoor(41, kCharacterCath, 0, 255, 255);
+ break;
+ default:
+ break;
}
}
@@ -1141,27 +1314,35 @@ void LogicManager::CONS_Tatiana_EatingBreakfast(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_EatingBreakfast(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 17) {
- if (checkCathDir(kCarRestaurant, 64) || checkCathDir(kCarRestaurant, 65)) {
- getCharacter(kCharacterTatiana).inventoryItem = 0;
- CONS_Tatiana_BreakfastClick(0, 0, 0, 0);
- }
- } else if (msg->action == 290869168) {
- getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1800000 && getCharacterCurrentParams(kCharacterTatiana)[0] && rcClear()) {
+ getCharacter(kCharacterTatiana).inventoryItem = 0;
+ CONS_Tatiana_JoinAlexei(0, 0, 0, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 1:
+ getCharacter(kCharacterTatiana).inventoryItem = 0;
+ CONS_Tatiana_BreakfastClick(0, 0, 0, 0);
+ break;
+ case 12:
startCycOtis(kCharacterTatiana, "024A");
send(kCharacterTatiana, kCharacterTableF, 136455232, 0);
getCharacter(kCharacterTatiana).inventoryItem = 0x80;
- } else if (msg->action) {
- if (msg->action == 1) {
+ break;
+ case 17:
+ if (checkCathDir(kCarRestaurant, 64) || checkCathDir(kCarRestaurant, 65)) {
getCharacter(kCharacterTatiana).inventoryItem = 0;
CONS_Tatiana_BreakfastClick(0, 0, 0, 0);
}
- } else if (_gameTime > 1800000 && getCharacterCurrentParams(kCharacterTatiana)[0] && rcClear()) {
- getCharacter(kCharacterTatiana).inventoryItem = 0;
- CONS_Tatiana_JoinAlexei(0, 0, 0, 0);
+
+ break;
+ case 290869168:
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
+ break;
+ default:
+ break;
}
}
@@ -1176,7 +1357,8 @@ void LogicManager::CONS_Tatiana_BreakfastClick(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_BreakfastClick(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (_gameEvents[kEventTatianaGivePoem]) {
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
TatianaCall(&LogicManager::CONS_Tatiana_SaveGame, 2, kEventTatianaBreakfastAlexei, 0, 0);
@@ -1184,7 +1366,9 @@ void LogicManager::HAND_Tatiana_BreakfastClick(HAND_PARAMS) {
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
TatianaCall(&LogicManager::CONS_Tatiana_SaveGame, 2, kEventTatianaBreakfast, 0, 0);
}
- } else if (msg->action == 18) {
+
+ break;
+ case 18:
if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1) {
forceJump(kCharacterAlexei, &LogicManager::CONS_Alexei_AtBreakfast);
playNIS(kEventTatianaBreakfastAlexei);
@@ -1194,14 +1378,20 @@ void LogicManager::HAND_Tatiana_BreakfastClick(HAND_PARAMS) {
} else if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 2) {
forceJump(kCharacterAlexei, &LogicManager::CONS_Alexei_AtBreakfast);
playNIS(kEventTatianaBreakfast);
+
if (cathHasItem(kItemParchemin)) {
playNIS(kEventTatianaBreakfastGivePoem);
takeCathItem(kItemParchemin);
} else {
playNIS(kEventTatianaAlexei);
}
+
CONS_Tatiana_JoinAlexei(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -1216,27 +1406,34 @@ void LogicManager::CONS_Tatiana_JoinAlexei(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_JoinAlexei(HAND_PARAMS) {
- if (msg->action > 18) {
- if (msg->action == 123857088) {
- startCycOtis(kCharacterTatiana, "018G");
- getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
- TatianaCall(&LogicManager::CONS_Tatiana_DoWait, 1800, 0, 0, 0);
- } else if (msg->action == 156444784) {
- getCharacter(kCharacterTatiana).characterPosition.location = 1;
- startCycOtis(kCharacterTatiana, "BLANK");
- }
- } else if (msg->action == 18) {
+ switch (msg->action) {
+ case 8:
if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1)
CONS_Tatiana_LeaveBreakfast(0, 0, 0, 0);
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
getCharacter(kCharacterTatiana).inventoryItem = 0;
getCharacter(kCharacterTatiana).characterPosition.location = 0;
send(kCharacterTatiana, kCharacterTableF, 103798704, "024D");
- if (_gameEvents[kEventTatianaBreakfastAlexei] || (_gameEvents[kEventTatianaBreakfast], _gameEvents[kEventTatianaBreakfast])) {
+ if (_gameEvents[kEventTatianaBreakfastAlexei] || _gameEvents[kEventTatianaBreakfast]) {
send(kCharacterTatiana, kCharacterAlexei, 236053296, 69);
} else {
send(kCharacterTatiana, kCharacterAlexei, 236053296, 0);
}
+
+ break;
+ case 123857088:
+ startCycOtis(kCharacterTatiana, "018G");
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
+ TatianaCall(&LogicManager::CONS_Tatiana_DoWait, 1800, 0, 0, 0);
+ break;
+ case 156444784:
+ getCharacter(kCharacterTatiana).characterPosition.location = 1;
+ startCycOtis(kCharacterTatiana, "BLANK");
+ break;
+ default:
+ break;
}
}
@@ -1251,10 +1448,12 @@ void LogicManager::CONS_Tatiana_LeaveBreakfast(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_LeaveBreakfast(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
TatianaCall(&LogicManager::CONS_Tatiana_WaitRCClear, 0, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
case 1:
getCharacter(kCharacterTatiana).characterPosition.location = 0;
@@ -1266,15 +1465,23 @@ void LogicManager::HAND_Tatiana_LeaveBreakfast(HAND_PARAMS) {
releaseView(kCharacterTatiana, kCarRestaurant, 63);
send(kCharacterTatiana, kCharacterWaiter2, 302203328, 0);
startSeqOtis(kCharacterTatiana, "805DS");
+
if (inDiningRoom(kCharacterCath))
advanceFrame(kCharacterTatiana);
+
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
TatianaCall(&LogicManager::CONS_Tatiana_FinishSeqOtis, 0, 0, 0, 0);
break;
case 3:
CONS_Tatiana_ReturnComp(0, 0, 0, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1289,10 +1496,12 @@ void LogicManager::CONS_Tatiana_ReturnComp(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_ReturnComp(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 4, 7500, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1) {
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
TatianaCall(&LogicManager::CONS_Tatiana_EnterComp, 0, 0, 0, 0);
@@ -1300,6 +1509,10 @@ void LogicManager::HAND_Tatiana_ReturnComp(HAND_PARAMS) {
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
TatianaCall(&LogicManager::CONS_Tatiana_CompLogic, 15803100, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -1314,23 +1527,28 @@ void LogicManager::CONS_Tatiana_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_StartPart3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterTatiana);
- getCharacter(kCharacterTatiana).characterPosition.position = 1750;
- getCharacter(kCharacterTatiana).characterPosition.location = 1;
- getCharacter(kCharacterTatiana).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterTatiana).inventoryItem = 0;
- getCharacter(kCharacterTatiana).clothes = 2;
- setDoor(33, kCharacterCath, 1, 10, 9);
- setDoor(49, kCharacterCath, 1, 10, 9);
- _gameInventory[kItemFirebird].location = 2;
- if (_gameEvents[kEventTatianaBreakfastGivePoem] || _gameEvents[kEventTatianaGivePoem] && !_gameEvents[kEventTatianaBreakfastAlexei]) {
- _gameInventory[kItemParchemin].location = 2;
- }
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Tatiana_PlayChess(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterTatiana);
+ getCharacter(kCharacterTatiana).characterPosition.position = 1750;
+ getCharacter(kCharacterTatiana).characterPosition.location = 1;
+ getCharacter(kCharacterTatiana).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterTatiana).inventoryItem = 0;
+ getCharacter(kCharacterTatiana).clothes = 2;
+ setDoor(33, kCharacterCath, 1, 10, 9);
+ setDoor(49, kCharacterCath, 1, 10, 9);
+ _gameInventory[kItemFirebird].location = 2;
+
+ if (_gameEvents[kEventTatianaBreakfastGivePoem] || _gameEvents[kEventTatianaGivePoem] && !_gameEvents[kEventTatianaBreakfastAlexei]) {
+ _gameInventory[kItemParchemin].location = 2;
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -1345,76 +1563,21 @@ void LogicManager::CONS_Tatiana_PlayChess(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_PlayChess(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1) {
- send(kCharacterTatiana, kCharacterAlexei, 122288808, 0);
- CONS_Tatiana_ReturnComp3(0, 0, 0, 0);
- }
- } else if (msg->action == 101169422) {
- getCharacterCurrentParams(kCharacterTatiana)[3] = 1;
- }
- } else if (msg->action == 12) {
- send(kCharacterTatiana, kCharacterAlexei, 122358304, 0);
- send(kCharacterTatiana, kCharacterKronos, 157159392, 0);
- startCycOtis(kCharacterTatiana, "110C");
- playDialog(kCharacterTatiana, "Tat3160A", -1, 0);
- getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
- } else if (msg->action) {
- if (msg->action == 2) {
- getCharacterCurrentParams(kCharacterTatiana)[1] = 0;
- getCharacterCurrentParams(kCharacterTatiana)[2]++;
- switch (getCharacterCurrentParams(kCharacterTatiana)[2]) {
- case 1:
- getCharacterCurrentParams(kCharacterTatiana)[0] = 900;
- startCycOtis(kCharacterTatiana, "110A");
- Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat3160B");
- Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[8], 12, "110A");
- return;
- case 2:
- getCharacterCurrentParams(kCharacterTatiana)[0] = 9000;
- Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat3160C");
- Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[8], 12, "110C");
- return;
- case 3:
- getCharacterCurrentParams(kCharacterTatiana)[0] = 13500;
- startCycOtis(kCharacterTatiana, "110B");
- Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat3160D");
- Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[8], 12, "110D");
- break;
- case 4:
- getCharacterCurrentParams(kCharacterTatiana)[0] = 9000;
- startCycOtis(kCharacterTatiana, "110B");
- Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat3160E");
- Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[8], 12, "110D");
- break;
- case 5:
- getCharacterCurrentParams(kCharacterTatiana)[0] = 4500;
- startCycOtis(kCharacterTatiana, "110B");
- Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat3160G");
- Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[8], 12, "110D");
- break;
- case 6:
- getCharacterCurrentParams(kCharacterTatiana)[0] = 4500;
- startCycOtis(kCharacterTatiana, "110B");
- Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat3160F");
- break;
- default:
- getCharacterCurrentParams(kCharacterTatiana)[4] = 1;
- break;
- }
- }
- } else {
+ switch (msg->action) {
+ case 0:
if (!getCharacterCurrentParams(kCharacterTatiana)[1] && !getCharacterCurrentParams(kCharacterTatiana)[4]) {
getCharacterCurrentParams(kCharacterTatiana)[0] -= _gameTimeTicksDelta;
if (_gameTimeTicksDelta > getCharacterCurrentParams(kCharacterTatiana)[0]) {
startCycOtis(kCharacterTatiana, (char *)&getCharacterCurrentParams(kCharacterTatiana)[8]);
playDialog(kCharacterTatiana, (char *)&getCharacterCurrentParams(kCharacterTatiana)[5], -1, 0);
+
if (getCharacterCurrentParams(kCharacterTatiana)[2] == 4 && inSalon(kCharacterCath))
_gameProgress[kProgressField90] = 1;
+
getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
}
}
+
if (getCharacterCurrentParams(kCharacterTatiana)[3] && getCharacterCurrentParams(kCharacterTatiana)[4]) {
if (!getCharacterCurrentParams(kCharacterTatiana)[11] && (getCharacterCurrentParams(kCharacterTatiana)[11] = _gameTime + 6300, _gameTime == -6300) || getCharacterCurrentParams(kCharacterTatiana)[11] < _gameTime) {
if (rcClear()) {
@@ -1424,6 +1587,72 @@ void LogicManager::HAND_Tatiana_PlayChess(HAND_PARAMS) {
}
}
}
+
+ break;
+ case 2:
+ getCharacterCurrentParams(kCharacterTatiana)[1] = 0;
+ getCharacterCurrentParams(kCharacterTatiana)[2]++;
+
+ switch (getCharacterCurrentParams(kCharacterTatiana)[2]) {
+ case 1:
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 900;
+ startCycOtis(kCharacterTatiana, "110A");
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat3160B");
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[8], 12, "110A");
+ break;
+ case 2:
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 9000;
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat3160C");
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[8], 12, "110C");
+ break;
+ case 3:
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 13500;
+ startCycOtis(kCharacterTatiana, "110B");
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat3160D");
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[8], 12, "110D");
+ break;
+ case 4:
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 9000;
+ startCycOtis(kCharacterTatiana, "110B");
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat3160E");
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[8], 12, "110D");
+ break;
+ case 5:
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 4500;
+ startCycOtis(kCharacterTatiana, "110B");
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat3160G");
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[8], 12, "110D");
+ break;
+ case 6:
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 4500;
+ startCycOtis(kCharacterTatiana, "110B");
+ Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat3160F");
+ break;
+ default:
+ getCharacterCurrentParams(kCharacterTatiana)[4] = 1;
+ break;
+ }
+
+ break;
+ case 12:
+ send(kCharacterTatiana, kCharacterAlexei, 122358304, 0);
+ send(kCharacterTatiana, kCharacterKronos, 157159392, 0);
+ startCycOtis(kCharacterTatiana, "110C");
+ playDialog(kCharacterTatiana, "Tat3160A", -1, 0);
+ getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
+ break;
+ case 18:
+ if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1) {
+ send(kCharacterTatiana, kCharacterAlexei, 122288808, 0);
+ CONS_Tatiana_ReturnComp3(0, 0, 0, 0);
+ }
+
+ break;
+ case 101169422:
+ getCharacterCurrentParams(kCharacterTatiana)[3] = 1;
+ break;
+ default:
+ break;
}
}
@@ -1438,11 +1667,13 @@ void LogicManager::CONS_Tatiana_ReturnComp3(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_ReturnComp3(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterTatiana);
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
TatianaCall(&LogicManager::CONS_Tatiana_DoWait, 75, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
case 1:
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
@@ -1455,7 +1686,13 @@ void LogicManager::HAND_Tatiana_ReturnComp3(HAND_PARAMS) {
case 3:
CONS_Tatiana_BeforeConcert(0, 0, 0, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1470,15 +1707,19 @@ void LogicManager::CONS_Tatiana_BeforeConcert(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_BeforeConcert(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
TatianaCall(&LogicManager::CONS_Tatiana_CompLogic, 2097000, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
case 1:
_gameInventory[kItemFirebird].location = 1;
+
if (inSuite(kCharacterCath, kCarRedSleeping, 7850))
bumpCathRDoor(33);
+
setDoor(33, kCharacterCath, 1, 10, 9);
setDoor(49, kCharacterCath, 0, 10, 9);
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
@@ -1491,7 +1732,13 @@ void LogicManager::HAND_Tatiana_BeforeConcert(HAND_PARAMS) {
case 3:
CONS_Tatiana_Concert(0, 0, 0, 0);
break;
+ default:
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1506,41 +1753,49 @@ void LogicManager::CONS_Tatiana_Concert(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_Concert(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action != 18) {
- if (msg->action != 191668032)
- return;
- goto LABEL_21;
+ switch (msg->action) {
+ case 0:
+ if (!getCharacterCurrentParams(kCharacterTatiana)[0] && cathHasItem(kItemFirebird) && inSuite(kCharacterCath, kCarRedSleeping, 7850) && (_gameTime < 2133000 || _gameProgress[16])) {
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
+ TatianaCall(&LogicManager::CONS_Tatiana_TrapCath, 0, 0, 0, 0);
+ break;
}
- if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] != 1)
- return;
- getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
- LABEL_17:
+
if (_gameTime <= 2133000)
- return;
+ break;
if (getCharacter(kCharacterAugust).characterPosition.car < kCarRedSleeping && (getCharacter(kCharacterAugust).characterPosition.car != kCarGreenSleeping || getCharacter(kCharacterAugust).characterPosition.position <= 5790))
- return;
- LABEL_21:
+ break;
+
CONS_Tatiana_LeaveConcert(0, 0, 0, 0);
- return;
- }
- if (msg->action == 12) {
+ break;
+ case 12:
setDoor(33, kCharacterCath, 1, 10, 9);
setDoor(49, kCharacterCath, 0, 10, 9);
endGraphics(kCharacterTatiana);
getCharacter(kCharacterTatiana).characterPosition.car = kCarKronos;
getCharacter(kCharacterTatiana).characterPosition.position = 6000;
getCharacter(kCharacterTatiana).characterPosition.location = 1;
- return;
- }
- if (msg->action == 0) {
- if (!getCharacterCurrentParams(kCharacterTatiana)[0] && cathHasItem(kItemFirebird) && inSuite(kCharacterCath, kCarRedSleeping, 7850) && (_gameTime < 2133000 || _gameProgress[16])) {
- getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
- TatianaCall(&LogicManager::CONS_Tatiana_TrapCath, 0, 0, 0, 0);
- return;
- }
- goto LABEL_17;
+ break;
+ case 18:
+ if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] != 1)
+ break;
+
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
+
+ if (_gameTime <= 2133000)
+ break;
+
+ if (getCharacter(kCharacterAugust).characterPosition.car < kCarRedSleeping && (getCharacter(kCharacterAugust).characterPosition.car != kCarGreenSleeping || getCharacter(kCharacterAugust).characterPosition.position <= 5790))
+ break;
+
+ CONS_Tatiana_LeaveConcert(0, 0, 0, 0);
+ break;
+ case 191668032:
+ CONS_Tatiana_LeaveConcert(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1555,21 +1810,22 @@ void LogicManager::CONS_Tatiana_LeaveConcert(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_LeaveConcert(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterTatiana).characterPosition.car = kCarGreenSleeping;
getCharacter(kCharacterTatiana).characterPosition.position = 850;
getCharacter(kCharacterTatiana).characterPosition.location = 0;
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 4, 7500, 0, 0);
- return;
- }
- if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1) {
if (!inSuite(kCharacterCath, kCarRedSleeping, 7850) || inComp(kCharacterCath, kCarRedSleeping, 8200)) {
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
TatianaCall(&LogicManager::CONS_Tatiana_EnterComp, 0, 0, 0, 0);
- return;
+ break;
}
+
if (cathHasItem(kItemFirebird)) {
playNIS(kEventTatianaCompartmentStealEgg);
takeCathItem(kItemFirebird);
@@ -1577,11 +1833,15 @@ void LogicManager::HAND_Tatiana_LeaveConcert(HAND_PARAMS) {
} else {
playNIS(kEventTatianaCompartment);
}
+
bumpCathRDoor(33);
- } else if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] != 2) {
- return;
+ } else if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 2) {
+ CONS_Tatiana_AfterConcert(0, 0, 0, 0);
}
- CONS_Tatiana_AfterConcert(0, 0, 0, 0);
+
+ break;
+ default:
+ break;
}
}
@@ -1598,36 +1858,54 @@ void LogicManager::CONS_Tatiana_AfterConcert(CONS_PARAMS) {
void LogicManager::HAND_Tatiana_AfterConcert(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameInventory[kItemFirebird].location == 1 || _gameInventory[kItemFirebird].location == 2)
- goto LABEL_17;
- if (!getCharacterCurrentParams(kCharacterTatiana)[2])
- getCharacterCurrentParams(kCharacterTatiana)[2] = _gameTime + 900;
- if (getCharacterCurrentParams(kCharacterTatiana)[3] == 0x7FFFFFFF || getCharacterCurrentParams(kCharacterTatiana)[2] >= _gameTime)
- goto LABEL_17;
- if (_gameTime > 2227500)
- goto LABEL_14;
- if (!cathInCorridor(kCarRedSleeping) || !getCharacterCurrentParams(kCharacterTatiana)[3]) {
- getCharacterCurrentParams(kCharacterTatiana)[3] = _gameTime + 450;
- if (_gameTime == -450)
- goto LABEL_15;
- }
- if (getCharacterCurrentParams(kCharacterTatiana)[3] < _gameTime) {
- LABEL_14:
- getCharacterCurrentParams(kCharacterTatiana)[3] = 0x7FFFFFFF;
- LABEL_15:
- _gameProgress[23] = 1;
- if (inComp(kCharacterAnna, kCarRedSleeping, 4070)) {
- CONS_Tatiana_CryAnna(0, 0, 0, 0);
- return;
+ if (_gameInventory[kItemFirebird].location != 1 && _gameInventory[kItemFirebird].location != 2) {
+ if (!getCharacterCurrentParams(kCharacterTatiana)[2])
+ getCharacterCurrentParams(kCharacterTatiana)[2] = _gameTime + 900;
+
+ if (getCharacterCurrentParams(kCharacterTatiana)[3] != 0x7FFFFFFF && getCharacterCurrentParams(kCharacterTatiana)[2] < _gameTime) {
+ if (_gameTime > 2227500) {
+ getCharacterCurrentParams(kCharacterTatiana)[3] = 0x7FFFFFFF;
+ _gameProgress[kProgressField5C] = 1;
+
+ if (inComp(kCharacterAnna, kCarRedSleeping, 4070)) {
+ CONS_Tatiana_CryAnna(0, 0, 0, 0);
+ break;
+ }
+ } else {
+ bool skip = false;
+ if (!cathInCorridor(kCarRedSleeping) || !getCharacterCurrentParams(kCharacterTatiana)[3]) {
+ getCharacterCurrentParams(kCharacterTatiana)[3] = _gameTime + 450;
+ if (_gameTime == -450) {
+ skip = true;
+
+ _gameProgress[kProgressField5C] = 1;
+ if (inComp(kCharacterAnna, kCarRedSleeping, 4070)) {
+ CONS_Tatiana_CryAnna(0, 0, 0, 0);
+ break;
+ }
+ }
+ }
+
+ if (!skip && getCharacterCurrentParams(kCharacterTatiana)[3] < _gameTime) {
+ getCharacterCurrentParams(kCharacterTatiana)[3] = 0x7FFFFFFF;
+ _gameProgress[kProgressField5C] = 1;
+ if (inComp(kCharacterAnna, kCarRedSleeping, 4070)) {
+ CONS_Tatiana_CryAnna(0, 0, 0, 0);
+ break;
+ }
+ }
+ }
}
}
- LABEL_17:
+
if (getCharacterCurrentParams(kCharacterTatiana)[0]) {
if (getCharacterCurrentParams(kCharacterTatiana)[4] || (getCharacterCurrentParams(kCharacterTatiana)[4] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
if (getCharacterCurrentParams(kCharacterTatiana)[4] >= _currentGameSessionTicks)
- return;
+ break;
+
getCharacterCurrentParams(kCharacterTatiana)[4] = 0x7FFFFFFF;
}
+
getCharacterCurrentParams(kCharacterTatiana)[0] = 0;
getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
setDoor(33, kCharacterTatiana, 1, 0, 0);
@@ -1636,12 +1914,14 @@ void LogicManager::HAND_Tatiana_AfterConcert(HAND_PARAMS) {
} else {
getCharacterCurrentParams(kCharacterTatiana)[4] = 0;
}
+
break;
case 8:
case 9:
if (getCharacterCurrentParams(kCharacterTatiana)[0]) {
setDoor(33, kCharacterTatiana, 1, 0, 0);
setDoor(49, kCharacterTatiana, 1, 0, 0);
+
if (msg->param.intParam == 49) {
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 4;
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, getCathWCDialog(), 0, 0, 0);
@@ -1665,10 +1945,12 @@ void LogicManager::HAND_Tatiana_AfterConcert(HAND_PARAMS) {
} else {
playNIS(kEventTatianaCompartment);
}
+
bumpCathRDoor(33);
} else {
setDoor(33, kCharacterTatiana, 1, 0, 0);
setDoor(49, kCharacterTatiana, 1, 0, 0);
+
if (msg->action == 8) {
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, "LIB012", 0, 0, 0);
@@ -1677,13 +1959,14 @@ void LogicManager::HAND_Tatiana_AfterConcert(HAND_PARAMS) {
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, "LIB013", 0, 0, 0);
}
}
- return;
+
+ break;
case 12:
setDoor(33, kCharacterTatiana, 1, 10, 9);
setDoor(49, kCharacterTatiana, 1, 0, 9);
getCharacter(kCharacterTatiana).characterPosition.location = 1;
endGraphics(kCharacterTatiana);
- return;
+ break;
case 17:
if (getCharacterCurrentParams(kCharacterTatiana)[1] || getCharacterCurrentParams(kCharacterTatiana)[0]) {
getCharacterCurrentParams(kCharacterTatiana)[1] = 0;
@@ -1691,7 +1974,8 @@ void LogicManager::HAND_Tatiana_AfterConcert(HAND_PARAMS) {
setDoor(33, kCharacterTatiana, 1, 10, 9);
setDoor(49, kCharacterTatiana, 1, 0, 9);
}
- return;
+
+ break;
case 18:
switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
case 1:
@@ -1702,6 +1986,8 @@ void LogicManager::HAND_Tatiana_AfterConcert(HAND_PARAMS) {
} else {
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, "TAT1133A", 0, 0, 0);
}
+
+ break;
case 3:
setDoor(33, kCharacterTatiana, 1, 14, 0);
setDoor(49, kCharacterTatiana, 1, 14, 0);
@@ -1714,11 +2000,12 @@ void LogicManager::HAND_Tatiana_AfterConcert(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
break;
default:
- return;
+ break;
}
- return;
+
+ break;
default:
- return;
+ break;
}
}
@@ -1733,75 +2020,11 @@ void LogicManager::CONS_Tatiana_CryAnna(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_CryAnna(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterTatiana).characterPosition.location = 0;
- setDoor(33, kCharacterCath, 0, 10, 9);
- setDoor(49, kCharacterCath, 0, 10, 9);
- getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
- TatianaCall(&LogicManager::CONS_Tatiana_WalkSniffle, 4, 4070, 0, 0);
- break;
- case 2:
- startCycOtis(kCharacterTatiana, "673Gf");
- softBlockAtDoor(kCharacterTatiana, 37);
- getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
- TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, "Tat3164", 0, 0, 0);
- break;
- case 3:
- send(kCharacterTatiana, kCharacterAnna, 236241630, 0);
- break;
- case 4:
- getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 5;
- TatianaCall(&LogicManager::CONS_Tatiana_DoEnterCorrOtis, "673Db", 0x21, 0, 0);
- break;
- case 5:
- case 11:
- getCharacter(kCharacterTatiana).characterPosition.location = 1;
- endGraphics(kCharacterTatiana);
- CONS_Tatiana_Upset(0, 0, 0, 0);
- break;
- case 6:
- softReleaseAtDoor(kCharacterTatiana, 37);
- endGraphics(kCharacterTatiana);
- getCharacter(kCharacterTatiana).characterPosition.location = 1;
- getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 7;
- TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, "ANN3011", 0, 0, 0);
- break;
- case 7:
- getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 8;
- TatianaCall(&LogicManager::CONS_Tatiana_DoWait, 900, 0, 0, 0);
- break;
- case 8:
- getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 9;
- TatianaCall(&LogicManager::CONS_Tatiana_DoCorrOtis, "673Jf", 37, 0, 0);
- break;
- case 9:
- getCharacter(kCharacterTatiana).characterPosition.location = 0;
- getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 10;
- TatianaCall(&LogicManager::CONS_Tatiana_WalkSniffle, 4, 7500, 0, 0);
- break;
- case 10:
- send(kCharacterTatiana, kCharacterAnna, 236517970, 0);
- getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 11;
- TatianaCall(&LogicManager::CONS_Tatiana_DoEnterCorrOtis, "673Db", 33, 0, 0);
- break;
- default:
- return;
- }
- } else if (msg->action == 100906246) {
- getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 6;
- TatianaCall(&LogicManager::CONS_Tatiana_DoCorrOtis, "673Df", 37, 0, 0);
- }
- } else if (msg->action == 12) {
- getCharacter(kCharacterTatiana).clothes = 3;
- getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
- TatianaCall(&LogicManager::CONS_Tatiana_DoCorrOtis, "673Jb", 33, 0, 0);
- } else if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterTatiana)[0] || (getCharacterCurrentParams(kCharacterTatiana)[0] = _gameTime + 450, _gameTime != -450)) {
if (getCharacterCurrentParams(kCharacterTatiana)[0] >= _gameTime)
- return;
+ break;
getCharacterCurrentParams(kCharacterTatiana)[0] = 0x7FFFFFFF;
}
@@ -1809,6 +2032,76 @@ void LogicManager::HAND_Tatiana_CryAnna(HAND_PARAMS) {
softReleaseAtDoor(kCharacterTatiana, 37);
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 4;
TatianaCall(&LogicManager::CONS_Tatiana_WalkSniffle, 4, 7500, 0, 0);
+ break;
+ case 12:
+ getCharacter(kCharacterTatiana).clothes = 3;
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
+ TatianaCall(&LogicManager::CONS_Tatiana_DoCorrOtis, "673Jb", 33, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterTatiana).characterPosition.location = 0;
+ setDoor(33, kCharacterCath, 0, 10, 9);
+ setDoor(49, kCharacterCath, 0, 10, 9);
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
+ TatianaCall(&LogicManager::CONS_Tatiana_WalkSniffle, 4, 4070, 0, 0);
+ break;
+ case 2:
+ startCycOtis(kCharacterTatiana, "673Gf");
+ softBlockAtDoor(kCharacterTatiana, 37);
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
+ TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, "Tat3164", 0, 0, 0);
+ break;
+ case 3:
+ send(kCharacterTatiana, kCharacterAnna, 236241630, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 5;
+ TatianaCall(&LogicManager::CONS_Tatiana_DoEnterCorrOtis, "673Db", 0x21, 0, 0);
+ break;
+ case 5:
+ case 11:
+ getCharacter(kCharacterTatiana).characterPosition.location = 1;
+ endGraphics(kCharacterTatiana);
+ CONS_Tatiana_Upset(0, 0, 0, 0);
+ break;
+ case 6:
+ softReleaseAtDoor(kCharacterTatiana, 37);
+ endGraphics(kCharacterTatiana);
+ getCharacter(kCharacterTatiana).characterPosition.location = 1;
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 7;
+ TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, "ANN3011", 0, 0, 0);
+ break;
+ case 7:
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 8;
+ TatianaCall(&LogicManager::CONS_Tatiana_DoWait, 900, 0, 0, 0);
+ break;
+ case 8:
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 9;
+ TatianaCall(&LogicManager::CONS_Tatiana_DoCorrOtis, "673Jf", 37, 0, 0);
+ break;
+ case 9:
+ getCharacter(kCharacterTatiana).characterPosition.location = 0;
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 10;
+ TatianaCall(&LogicManager::CONS_Tatiana_WalkSniffle, 4, 7500, 0, 0);
+ break;
+ case 10:
+ send(kCharacterTatiana, kCharacterAnna, 236517970, 0);
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 11;
+ TatianaCall(&LogicManager::CONS_Tatiana_DoEnterCorrOtis, "673Db", 33, 0, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 100906246:
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 6;
+ TatianaCall(&LogicManager::CONS_Tatiana_DoCorrOtis, "673Df", 37, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1823,14 +2116,20 @@ void LogicManager::CONS_Tatiana_Upset(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_Upset(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- setDoor(33, kCharacterCath, 1, 10, 9);
- setDoor(49, kCharacterCath, 1, 10, 9);
+ switch (msg->action) {
+ case 0:
+ if (!getCharacterCurrentParams(kCharacterTatiana)[0] && nearChar(kCharacterTatiana, kCharacterCath, 1000)) {
+ playDialog(kCharacterTatiana, "Tat3164", -1, 0);
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
}
- } else if (!getCharacterCurrentParams(kCharacterTatiana)[0] && nearChar(kCharacterTatiana, kCharacterCath, 1000)) {
- playDialog(kCharacterTatiana, "Tat3164", -1, 0);
- getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
+
+ break;
+ case 12:
+ setDoor(33, kCharacterCath, 1, 10, 9);
+ setDoor(49, kCharacterCath, 1, 10, 9);
+ break;
+ default:
+ break;
}
}
@@ -1845,26 +2144,37 @@ void LogicManager::CONS_Tatiana_DoConcertWalk(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_DoConcertWalk(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 6) {
- if (_gameEvents[kEventTatianaAskMatchSpeakRussian] || _gameEvents[kEventTatianaAskMatch] || _gameEvents[kEventVassiliSeizure]) {
- if (rnd(2) == 0) {
- playDialog(kCharacterCath, "CAT1010A", -1, 0);
- } else{
- playDialog(kCharacterCath, "CAT1010", -1, 0);
- }
-
+ switch (msg->action) {
+ case 0:
+ if (checkLoc(kCharacterCath, kCarKronos) || getCharacter(kCharacterTatiana).characterPosition.car != getCharacter(kCharacterCath).characterPosition.car || walk(kCharacterTatiana, kCarKronos, 9270)) {
+ getCharacter(kCharacterTatiana).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
+ fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
+ }
+
+ break;
+ case 6:
+ if (_gameEvents[kEventTatianaAskMatchSpeakRussian] || _gameEvents[kEventTatianaAskMatch] || _gameEvents[kEventVassiliSeizure]) {
+ if (rnd(2) == 0) {
+ playDialog(kCharacterCath, "CAT1010A", -1, 0);
} else {
- playCathExcuseMe();
+ playDialog(kCharacterCath, "CAT1010", -1, 0);
}
- } else if (msg->action == 12 && walk(kCharacterTatiana, kCarKronos, 9270)) {
- LABEL_18:
+ } else {
+ playCathExcuseMe();
+ }
+
+ break;
+ case 12:
+ if (walk(kCharacterTatiana, kCarKronos, 9270)) {
getCharacter(kCharacterTatiana).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
}
- } else if (checkLoc(kCharacterCath, kCarKronos) || getCharacter(kCharacterTatiana).characterPosition.car != getCharacter(kCharacterCath).characterPosition.car || walk(kCharacterTatiana, kCarKronos, 9270)) {
- goto LABEL_18;
+
+ break;
+ default:
+ break;
}
}
@@ -1879,80 +2189,91 @@ void LogicManager::CONS_Tatiana_TrapCath(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_TrapCath(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
- TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, "Tat3161B", 0, 0, 0);
- break;
- case 2:
- send(kCharacterTatiana, kCharacterCond2, 168316032, 0);
- getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
- break;
- case 3:
- case 6:
- endGraphics(kCharacterTatiana);
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterTatiana)[0]) {
+ if (inSuite(kCharacterCath, kCarRedSleeping, 7850) && !_gameEvents[kEventVassiliCompartmentStealEgg] && (_gameTime <= 2133000 || _gameProgress[kProgressField40])) {
+ if (inComp(kCharacterCath, kCarRedSleeping, 7500)) {
+ send(kCharacterTatiana, kCharacterCond2, 235061888, 0);
+ endGraphics(kCharacterTatiana);
+ softReleaseAtDoor(kCharacterTatiana, 33);
+ getCharacter(kCharacterTatiana).characterPosition.location = 1;
+
+ if (cathHasItem(kItemFirebird)) {
+ playNIS(kEventTatianaCompartmentStealEgg);
+ takeCathItem(kItemFirebird);
+ _gameInventory[kItemFirebird].location = 2;
+ } else {
+ playNIS(kEventTatianaCompartment);
+ }
- getCharacter(kCharacterTatiana).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
- fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
- break;
- case 4:
- getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 5;
- TatianaCall(&LogicManager::CONS_Tatiana_ExitComp, 0, 0, 0, 0);
- break;
- case 5:
- getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 6;
- TatianaCall(&LogicManager::CONS_Tatiana_DoConcertWalk, 0, 0, 0, 0);
- break;
- default:
- return;
+ bumpCathRDoor(33);
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 4;
+ TatianaCall(&LogicManager::CONS_Tatiana_DoWait, 150, 0, 0, 0);
+ }
+ } else {
+ softReleaseAtDoor(kCharacterTatiana, 33);
+ if (_gameTime < 2133000 || _gameProgress[16]) {
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
+ TatianaCall(&LogicManager::CONS_Tatiana_DoConcertWalk, 0, 0, 0, 0);
+ } else {
+ endGraphics(kCharacterTatiana);
+
+ getCharacter(kCharacterTatiana).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
+ fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
+ }
}
- } else if (msg->action == 154071333) {
- setDoor(33, kCharacterCath, 1, 0, 0);
- setDoor(32, kCharacterCath, 1, 0, 0);
- getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
- TatianaCall(&LogicManager::CONS_Tatiana_SaveGame, 1, 0, 0, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
getCharacter(kCharacterTatiana).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterTatiana).characterPosition.position = 7500;
getCharacter(kCharacterTatiana).characterPosition.location = 0;
forceJump(kCharacterCond2, &LogicManager::CONS_Cond2_TatianaComeHere);
startCycOtis(kCharacterTatiana, "673Fb");
softBlockAtDoor(kCharacterTatiana, 33);
- } else if (msg->action == 0 && getCharacterCurrentParams(kCharacterTatiana)[0]) {
- if (inSuite(kCharacterCath, kCarRedSleeping, 7850) && !_gameEvents[kEventVassiliCompartmentStealEgg] && (_gameTime <= 2133000 || _gameProgress[kProgressField40])) {
- if (inComp(kCharacterCath, kCarRedSleeping, 7500)) {
- send(kCharacterTatiana, kCharacterCond2, 235061888, 0);
- endGraphics(kCharacterTatiana);
- softReleaseAtDoor(kCharacterTatiana, 33);
- getCharacter(kCharacterTatiana).characterPosition.location = 1;
- if (cathHasItem(kItemFirebird)) {
- playNIS(kEventTatianaCompartmentStealEgg);
- takeCathItem(kItemFirebird);
- _gameInventory[kItemFirebird].location = 2;
- } else {
- playNIS(kEventTatianaCompartment);
- }
- bumpCathRDoor(33);
- getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 4;
- TatianaCall(&LogicManager::CONS_Tatiana_DoWait, 150, 0, 0, 0);
- }
- } else {
- softReleaseAtDoor(kCharacterTatiana, 33);
- if (_gameTime < 2133000 || _gameProgress[16]) {
- getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
- TatianaCall(&LogicManager::CONS_Tatiana_DoConcertWalk, 0, 0, 0, 0);
- } else {
- endGraphics(kCharacterTatiana);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
+ TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, "Tat3161B", 0, 0, 0);
+ break;
+ case 2:
+ send(kCharacterTatiana, kCharacterCond2, 168316032, 0);
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
+ break;
+ case 3:
+ case 6:
+ endGraphics(kCharacterTatiana);
- getCharacter(kCharacterTatiana).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
- fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
- }
+ getCharacter(kCharacterTatiana).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
+ fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 5;
+ TatianaCall(&LogicManager::CONS_Tatiana_ExitComp, 0, 0, 0, 0);
+ break;
+ case 5:
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 6;
+ TatianaCall(&LogicManager::CONS_Tatiana_DoConcertWalk, 0, 0, 0, 0);
+ break;
+ default:
+ break;
}
+
+ break;
+ case 154071333:
+ setDoor(33, kCharacterCath, 1, 0, 0);
+ setDoor(32, kCharacterCath, 1, 0, 0);
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
+ TatianaCall(&LogicManager::CONS_Tatiana_SaveGame, 1, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1972,23 +2293,20 @@ void LogicManager::CONS_Tatiana_WalkSniffle(CONS_PARAMS) {
void LogicManager::HAND_Tatiana_WalkSniffle(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (walk(kCharacterTatiana, getCharacterCurrentParams(kCharacterTatiana)[0], getCharacterCurrentParams(kCharacterTatiana)[1]))
- goto LABEL_7;
- break;
- case 5:
- case 6:
- playDialog(0, "Tat3124", getVolume(kCharacterTatiana), 0);
- break;
case 12:
if (walk(kCharacterTatiana, getCharacterCurrentParams(kCharacterTatiana)[0], getCharacterCurrentParams(kCharacterTatiana)[1])) {
- LABEL_7:
getCharacter(kCharacterTatiana).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
}
+
break;
+ case 5:
+ case 6:
+ playDialog(kCharacterCath, "Tat3124", getVolume(kCharacterTatiana), 0);
+ break;
default:
- return;
+ break;
}
}
@@ -2003,20 +2321,23 @@ void LogicManager::CONS_Tatiana_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_StartPart4(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterTatiana);
- getCharacter(kCharacterTatiana).characterPosition.position = 7500;
- getCharacter(kCharacterTatiana).characterPosition.location = 1;
- getCharacter(kCharacterTatiana).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterTatiana).inventoryItem = 0;
- getCharacter(kCharacterTatiana).clothes = 2;
- getCharacter(kCharacterTatiana).callParams[8].parameters[0] = 0;
- setDoor(33, kCharacterCath, 1, 10, 9);
- setDoor(49, kCharacterCath, 1, 10, 9);
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Tatiana_InComp(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterTatiana);
+ getCharacter(kCharacterTatiana).characterPosition.position = 7500;
+ getCharacter(kCharacterTatiana).characterPosition.location = 1;
+ getCharacter(kCharacterTatiana).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterTatiana).inventoryItem = 0;
+ getCharacter(kCharacterTatiana).clothes = 2;
+ getCharacter(kCharacterTatiana).callParams[8].parameters[0] = 0;
+ setDoor(33, kCharacterCath, 1, 10, 9);
+ setDoor(49, kCharacterCath, 1, 10, 9);
+ break;
+ default:
+ break;
}
}
@@ -2031,11 +2352,19 @@ void LogicManager::CONS_Tatiana_InComp(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_InComp(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
TatianaCall(&LogicManager::CONS_Tatiana_CompLogic, 2362500, 0, 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1) {
- CONS_Tatiana_MeetAlexei(0, 0, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1) {
+ CONS_Tatiana_MeetAlexei(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -2050,24 +2379,32 @@ void LogicManager::CONS_Tatiana_MeetAlexei(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_MeetAlexei(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
TatianaCall(&LogicManager::CONS_Tatiana_DoCorrOtis, "673Bb", 33, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1) {
- setDoor(33, 0, 0, 10, 9);
+ setDoor(33, kCharacterCath, 0, 10, 9);
getCharacter(kCharacterTatiana).characterPosition.location = 0;
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 3, 540, 0, 0);
} else if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 2) {
if (onLowPlatform(kCharacterCath)) {
playChrExcuseMe(kCharacterTatiana, kCharacterCath, 0);
+
if (checkCathDir(kCarGreenSleeping, 62))
bumpCath(kCarGreenSleeping, 72, 255);
}
+
send(kCharacterTatiana, kCharacterAlexei, 123712592, 0);
CONS_Tatiana_WithAlexei(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -2093,25 +2430,32 @@ void LogicManager::HAND_Tatiana_WithAlexei(HAND_PARAMS) {
} else if (getCharacterCurrentParams(kCharacterTatiana)[3] == 7 && nearChar(kCharacterTatiana, kCharacterCath, 2000)) {
_gameProgress[kProgressField88] = 1;
}
+
getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
}
}
+
if (getCharacterCurrentParams(kCharacterTatiana)[8] == 0x7FFFFFFF || _gameTime <= 2394000)
- return;
- if (_gameTime > 2398500)
- goto LABEL_20;
- if (!onLowPlatform(kCharacterCath) && getCharacterCurrentParams(kCharacterTatiana)[8] ||
- (getCharacterCurrentParams(kCharacterTatiana)[8] = _gameTime, _gameTime)) {
- if (getCharacterCurrentParams(kCharacterTatiana)[8] >= _gameTime)
- return;
- LABEL_20:
+ break;
+
+ if (_gameTime > 2398500) {
getCharacterCurrentParams(kCharacterTatiana)[8] = 0x7FFFFFFF;
+ } else {
+ if (!onLowPlatform(kCharacterCath) && getCharacterCurrentParams(kCharacterTatiana)[8] ||
+ (getCharacterCurrentParams(kCharacterTatiana)[8] = _gameTime, _gameTime)) {
+ if (getCharacterCurrentParams(kCharacterTatiana)[8] >= _gameTime)
+ break;
+
+ getCharacterCurrentParams(kCharacterTatiana)[8] = 0x7FFFFFFF;
+ }
}
+
if (onLowPlatform(kCharacterCath)) {
playChrExcuseMe(kCharacterTatiana, kCharacterCath, 0);
if (checkCathDir(kCarGreenSleeping, 62))
bumpCath(kCarGreenSleeping, 72, 255);
}
+
send(kCharacterTatiana, kCharacterAlexei, 123536024, 0);
CONS_Tatiana_Thinking(0, 0, 0, 0);
break;
@@ -2151,12 +2495,13 @@ void LogicManager::HAND_Tatiana_WithAlexei(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterTatiana)[0] = 162000;
break;
}
- return;
+
+ break;
case 12:
startCycOtis(kCharacterTatiana, "306E");
getCharacterCurrentParams(kCharacterTatiana)[0] = 450;
Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat4165A");
- return;
+ break;
case 17:
if (onLowPlatform(kCharacterCath)) {
getCharacterCurrentParams(kCharacterTatiana)[2] = 1;
@@ -2168,19 +2513,22 @@ void LogicManager::HAND_Tatiana_WithAlexei(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterTatiana)[2] = 0;
getCharacterCurrentParams(kCharacterTatiana)[4] = 0;
}
+
if (checkCathDir(kCarGreenSleeping, 62) && !getCharacterCurrentParams(kCharacterTatiana)[4]) {
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
TatianaCall(&LogicManager::CONS_Tatiana_DoSeqOtis, "306D", 0, 0, 0);
}
- return;
+
+ break;
case 18:
if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1) {
startCycOtis(kCharacterTatiana, "306E");
getCharacterCurrentParams(kCharacterTatiana)[4] = 1;
}
- return;
+
+ break;
default:
- return;
+ break;
}
}
@@ -2195,10 +2543,12 @@ void LogicManager::CONS_Tatiana_Thinking(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_Thinking(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 4, 7500, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
case 1:
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
@@ -2218,10 +2568,15 @@ void LogicManager::HAND_Tatiana_Thinking(HAND_PARAMS) {
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 4;
TatianaCall(&LogicManager::CONS_Tatiana_CompLogic, 900, 0, 0, 0);
}
+
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -2237,91 +2592,16 @@ void LogicManager::CONS_Tatiana_SeekCath(CONS_PARAMS) {
void LogicManager::HAND_Tatiana_SeekCath(HAND_PARAMS) {
int rndNum;
-
- if (msg->action > 9) {
- switch (msg->action) {
- case 12:
- getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
- TatianaCall(&LogicManager::CONS_Tatiana_DoCorrOtis, "673Bb", 33, 0, 0);
- break;
- case 18:
- switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
- case 1:
- setDoor(33, 0, 0, 10, 9);
- getCharacter(kCharacterTatiana).characterPosition.location = 0;
- getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
- TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 3, 7500, 0, 0);
- break;
- case 2:
- case 7:
- startCycOtis(kCharacterTatiana, "673Fb");
- softBlockAtDoor(kCharacterTatiana, 2);
- break;
- case 3:
- getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 4;
- TatianaCall(&LogicManager::CONS_Tatiana_DoEnterCorrOtis, "673Db", 33, 0, 0);
- break;
- case 4:
- getCharacter(kCharacterTatiana).characterPosition.location = 1;
- endGraphics(kCharacterTatiana);
- CONS_Tatiana_Asleep4(0, 0, 0, 0);
- break;
- case 5:
- setDoor(9, 0, 0, 255, 255);
- playNIS(kEventTatianaTylerCompartment);
- playDialog(0, "LIB015", -1, 0);
- bumpCathTylerComp();
- break;
- case 6:
- getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 7;
- TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 3, 7500, 0, 0);
- break;
- default:
- return;
- }
- break;
- case 238790488:
- getCharacterCurrentParams(kCharacterTatiana)[0] = 0;
- setDoor(1, 0, checkDoor(1), 10, 9);
- softReleaseAtDoor(kCharacterTatiana, 2);
- endGraphics(kCharacterTatiana);
- getCharacter(kCharacterTatiana).characterPosition.car = 3;
- getCharacter(kCharacterTatiana).characterPosition.position = 9460;
- getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 6;
- TatianaCall(&LogicManager::CONS_Tatiana_DoWait, 1800, 0, 0, 0);
- break;
- }
- return;
- }
- if (msg->action == 9) {
- getCharacterCurrentParams(kCharacterTatiana)[0] = 0;
- setDoor(1, 0, 0, 10, 9);
- getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 5;
- TatianaCall(&LogicManager::CONS_Tatiana_SaveGame, 2, kEventTatianaTylerCompartment, 0, 0);
- return;
- }
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (!getCharacterCurrentParams(kCharacterTatiana)[0]) {
if (!_gameEvents[kEventTatianaTylerCompartment] && inComp(kCharacterCath, kCarGreenSleeping, 8200)) {
getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
_gameProgress[kProgressFieldE4] = 1;
setDoor(1, kCharacterTatiana, checkDoor(1), 0, 9);
}
- if (!getCharacterCurrentParams(kCharacterTatiana)[0])
- goto LABEL_23;
- }
- if (!inSuite(kCharacterCath, kCarGreenSleeping, 7850)) {
- setDoor(1, kCharacterCath, checkDoor(1), 10, 9);
- getCharacterCurrentParams(kCharacterTatiana)[0] = 0;
- }
- if (!getCharacterCurrentParams(kCharacterTatiana)[0] || whoRunningDialog(kCharacterTatiana))
- goto LABEL_23;
- rndNum = 5 * (3 * rnd(5) + 30);
- if (getCharacterCurrentParams(kCharacterTatiana)[1] || (getCharacterCurrentParams(kCharacterTatiana)[1] = _currentGameSessionTicks + rndNum,
- _currentGameSessionTicks + rndNum != 0)) {
- if (getCharacterCurrentParams(kCharacterTatiana)[1] >= _currentGameSessionTicks) {
- LABEL_23:
+ if (!getCharacterCurrentParams(kCharacterTatiana)[0]) {
if (_gameEvents[kEventTatianaTylerCompartment] || _gameTime > 2475000) {
if (getCharacterCurrentParams(kCharacterTatiana)[0]) {
setDoor(1, 0, checkDoor(1), 10, 9);
@@ -2331,13 +2611,111 @@ void LogicManager::HAND_Tatiana_SeekCath(HAND_PARAMS) {
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 4, 7500, 0, 0);
}
- return;
+
+ break;
}
- getCharacterCurrentParams(kCharacterTatiana)[1] = 0x7FFFFFFF;
}
- playDialog(kCharacterTatiana, "LIB012", 16, 0);
- getCharacterCurrentParams(kCharacterTatiana)[1] = 0;
- goto LABEL_23;
+
+ if (!inSuite(kCharacterCath, kCarGreenSleeping, 7850)) {
+ setDoor(1, kCharacterCath, checkDoor(1), 10, 9);
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 0;
+ }
+
+ if (getCharacterCurrentParams(kCharacterTatiana)[0] && !whoRunningDialog(kCharacterTatiana)) {
+ rndNum = 5 * (3 * rnd(5) + 30);
+ if (getCharacterCurrentParams(kCharacterTatiana)[1] || (getCharacterCurrentParams(kCharacterTatiana)[1] = _currentGameSessionTicks + rndNum,
+ _currentGameSessionTicks + rndNum != 0)) {
+ if (getCharacterCurrentParams(kCharacterTatiana)[1] >= _currentGameSessionTicks) {
+ if (_gameEvents[kEventTatianaTylerCompartment] || _gameTime > 2475000) {
+ if (getCharacterCurrentParams(kCharacterTatiana)[0]) {
+ setDoor(1, 0, checkDoor(1), 10, 9);
+ }
+ _gameProgress[kProgressFieldE4] = 0;
+ softReleaseAtDoor(kCharacterTatiana, 2);
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
+ TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 4, 7500, 0, 0);
+ }
+
+ break;
+ }
+
+ getCharacterCurrentParams(kCharacterTatiana)[1] = 0x7FFFFFFF;
+ }
+
+ playDialog(kCharacterTatiana, "LIB012", 16, 0);
+ getCharacterCurrentParams(kCharacterTatiana)[1] = 0;
+ }
+
+ if (_gameEvents[kEventTatianaTylerCompartment] || _gameTime > 2475000) {
+ if (getCharacterCurrentParams(kCharacterTatiana)[0]) {
+ setDoor(1, 0, checkDoor(1), 10, 9);
+ }
+ _gameProgress[kProgressFieldE4] = 0;
+ softReleaseAtDoor(kCharacterTatiana, 2);
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
+ TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 4, 7500, 0, 0);
+ }
+
+ break;
+ case 9:
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 0;
+ setDoor(1, kCharacterCath, 0, 10, 9);
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 5;
+ TatianaCall(&LogicManager::CONS_Tatiana_SaveGame, 2, kEventTatianaTylerCompartment, 0, 0);
+ break;
+ case 12:
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
+ TatianaCall(&LogicManager::CONS_Tatiana_DoCorrOtis, "673Bb", 33, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
+ case 1:
+ setDoor(33, 0, 0, 10, 9);
+ getCharacter(kCharacterTatiana).characterPosition.location = 0;
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
+ TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 3, 7500, 0, 0);
+ break;
+ case 2:
+ case 7:
+ startCycOtis(kCharacterTatiana, "673Fb");
+ softBlockAtDoor(kCharacterTatiana, 2);
+ break;
+ case 3:
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 4;
+ TatianaCall(&LogicManager::CONS_Tatiana_DoEnterCorrOtis, "673Db", 33, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterTatiana).characterPosition.location = 1;
+ endGraphics(kCharacterTatiana);
+ CONS_Tatiana_Asleep4(0, 0, 0, 0);
+ break;
+ case 5:
+ setDoor(9, kCharacterCath, 0, 255, 255);
+ playNIS(kEventTatianaTylerCompartment);
+ playDialog(0, "LIB015", -1, 0);
+ bumpCathTylerComp();
+ break;
+ case 6:
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 7;
+ TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 3, 7500, 0, 0);
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 238790488:
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 0;
+ setDoor(1, kCharacterCath, checkDoor(1), 10, 9);
+ softReleaseAtDoor(kCharacterTatiana, 2);
+ endGraphics(kCharacterTatiana);
+ getCharacter(kCharacterTatiana).characterPosition.car = 3;
+ getCharacter(kCharacterTatiana).characterPosition.position = 9460;
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 6;
+ TatianaCall(&LogicManager::CONS_Tatiana_DoWait, 1800, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -2352,14 +2730,19 @@ void LogicManager::CONS_Tatiana_Asleep4(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_Asleep4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterTatiana).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterTatiana).characterPosition.position = 7500;
getCharacter(kCharacterTatiana).characterPosition.location = 1;
setDoor(33, kCharacterCath, 1, 10, 9);
setDoor(49, kCharacterCath, 1, 10, 9);
- } else if (msg->action == 169360385) {
+ break;
+ case 169360385:
CONS_Tatiana_AlexeiDead(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -2380,12 +2763,15 @@ void LogicManager::HAND_Tatiana_AlexeiDead(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
CONS_Tatiana_Calm(0, 0, 0, 0);
}
+
break;
case 2:
- goto LABEL_10;
+ playDialog(kCharacterTatiana, "Tat4166", -1, 0);
+ break;
case 8:
if (!cathRunningDialog("LIB012"))
playDialog(0, "LIB012", -1, 0);
+
break;
case 9:
playDialog(0, "LIB014", -1, 0);
@@ -2400,22 +2786,25 @@ void LogicManager::HAND_Tatiana_AlexeiDead(HAND_PARAMS) {
setDoor(49, kCharacterCath, 0, 10, 9);
setDoor(48, kCharacterTatiana, 0, 10, 9);
setDoor(32, kCharacterTatiana, 0, 10, 9);
+
if (!whoRunningDialog(kCharacterTatiana))
- LABEL_10:
playDialog(kCharacterTatiana, "Tat4166", -1, 0);
+
break;
case 18:
if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1) {
if (dialogRunning("MUS013"))
fadeDialog("MUS013");
+
playNIS(kEventVassiliDeadAlexei);
send(kCharacterTatiana, kCharacterAbbot, 104060776, 0);
bumpCath(kCarRedSleeping, 38, 255);
CONS_Tatiana_Calm(0, 0, 0, 0);
}
+
break;
default:
- return;
+ break;
}
}
@@ -2430,9 +2819,13 @@ void LogicManager::CONS_Tatiana_Calm(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_Calm(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
setDoor(32, kCharacterCath, 1, 0, 0);
setDoor(48, kCharacterCath, 1, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -2447,17 +2840,20 @@ void LogicManager::CONS_Tatiana_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_StartPart5(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterTatiana);
- getCharacter(kCharacterTatiana).characterPosition.location = 1;
- getCharacter(kCharacterTatiana).characterPosition.position = 3969;
- getCharacter(kCharacterTatiana).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterTatiana).inventoryItem = 0;
- getCharacter(kCharacterTatiana).clothes = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Tatiana_Trapped(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterTatiana);
+ getCharacter(kCharacterTatiana).characterPosition.location = 1;
+ getCharacter(kCharacterTatiana).characterPosition.position = 3969;
+ getCharacter(kCharacterTatiana).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterTatiana).inventoryItem = 0;
+ getCharacter(kCharacterTatiana).clothes = 0;
+ break;
+ default:
+ break;
}
}
@@ -2472,8 +2868,13 @@ void LogicManager::CONS_Tatiana_Trapped(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_Trapped(HAND_PARAMS) {
- if (msg->action == 70549068)
+ switch (msg->action) {
+ case 70549068:
CONS_Tatiana_Autistic(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Tatiana_Autistic(CONS_PARAMS) {
@@ -2487,72 +2888,87 @@ void LogicManager::CONS_Tatiana_Autistic(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_Autistic(HAND_PARAMS) {
- if (msg->action > 12) {
- switch (msg->action) {
- case 18:
- if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1) {
- if (dialogRunning("MUS050"))
- fadeDialog("MUS050");
- if (whoRunningDialog(kCharacterTatiana))
- fadeDialog(kCharacterTatiana);
-
- playNIS((kEventTatianaVassiliTalkNight - !isNight()));
- cleanNIS();
- getCharacterCurrentParams(kCharacterTatiana)[0] = 4;
- getCharacterCurrentParams(kCharacterTatiana)[1] = 0;
- getCharacterCurrentParams(kCharacterTatiana)[2] = 0;
- }
- break;
- case 203078272:
- startCycOtis(kCharacterTatiana, "033E");
- break;
- case 236060709:
- getCharacter(kCharacterTatiana).inventoryItem = 0;
- CONS_Tatiana_Asleep5(0, 0, 0, 0);
- break;
- }
- } else if (msg->action == 12) {
- startCycOtis(kCharacterTatiana, "033A");
- getCharacter(kCharacterTatiana).inventoryItem = 0x80;
- } else if (msg->action) {
- if (msg->action == 1) {
- getCharacter(kCharacterTatiana).inventoryItem = 0;
- getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
- TatianaCall(&LogicManager::CONS_Tatiana_SaveGame, 2, kEventTatianaVassiliTalk, 0, 0);
- } else if (msg->action == 2) {
- ++getCharacterCurrentParams(kCharacterTatiana)[0];
- getCharacterCurrentParams(kCharacterTatiana)[1] = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
if (!getCharacterCurrentParams(kCharacterTatiana)[1]) {
switch (getCharacterCurrentParams(kCharacterTatiana)[0]) {
case 0:
playDialog(kCharacterTatiana, "Tat5167A", -1, 0);
- goto LABEL_17;
+ getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
+ break;
case 1:
playDialog(kCharacterTatiana, "Tat5167B", -1, 0);
- goto LABEL_17;
+ getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
+ break;
case 2:
playDialog(kCharacterTatiana, "Tat5167C", -1, 0);
- goto LABEL_17;
+ getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
+ break;
case 3:
playDialog(kCharacterTatiana, "Tat5167D", -1, 0);
- LABEL_17:
getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
break;
default:
break;
}
}
+
if (getCharacterCurrentParams(kCharacterTatiana)[0] > 3) {
if (getCharacterCurrentParams(kCharacterTatiana)[2] || (getCharacterCurrentParams(kCharacterTatiana)[2] = _currentGameSessionTicks + 225, _currentGameSessionTicks != -225)) {
if (getCharacterCurrentParams(kCharacterTatiana)[2] >= _currentGameSessionTicks)
- return;
+ break;
+
getCharacterCurrentParams(kCharacterTatiana)[2] = 0x7FFFFFFF;
}
+
getCharacterCurrentParams(kCharacterTatiana)[0] = 0;
getCharacterCurrentParams(kCharacterTatiana)[2] = 0;
}
+
+ break;
+ case 1:
+ getCharacter(kCharacterTatiana).inventoryItem = 0;
+ getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
+ TatianaCall(&LogicManager::CONS_Tatiana_SaveGame, 2, kEventTatianaVassiliTalk, 0, 0);
+ break;
+ case 2:
+ getCharacterCurrentParams(kCharacterTatiana)[0]++;
+ getCharacterCurrentParams(kCharacterTatiana)[1] = 0;
+ break;
+ case 12:
+ startCycOtis(kCharacterTatiana, "033A");
+ getCharacter(kCharacterTatiana).inventoryItem = 0x80;
+ break;
+ case 18:
+ if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1) {
+ if (dialogRunning("MUS050"))
+ fadeDialog("MUS050");
+
+ if (whoRunningDialog(kCharacterTatiana))
+ fadeDialog(kCharacterTatiana);
+
+ if (isNight()) {
+ playNIS(kEventTatianaVassiliTalkNight);
+ } else {
+ playNIS(kEventTatianaVassiliTalk);
+ }
+
+ cleanNIS();
+ getCharacterCurrentParams(kCharacterTatiana)[0] = 4;
+ getCharacterCurrentParams(kCharacterTatiana)[1] = 0;
+ getCharacterCurrentParams(kCharacterTatiana)[2] = 0;
+ }
+
+ break;
+ case 203078272:
+ startCycOtis(kCharacterTatiana, "033E");
+ break;
+ case 236060709:
+ getCharacter(kCharacterTatiana).inventoryItem = 0;
+ CONS_Tatiana_Asleep5(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -2567,15 +2983,21 @@ void LogicManager::CONS_Tatiana_Asleep5(CONS_PARAMS) {
}
void LogicManager::HAND_Tatiana_Asleep5(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterTatiana);
- if (!checkCathDir(kCarRestaurant, 72))
- return;
- goto LABEL_7;
+ if (checkCathDir(kCarRestaurant, 72))
+ bumpCath(kCarRestaurant, 86, 255);
+
+ break;
+ case 17:
+ if (checkCathDir(kCarRestaurant, 72))
+ bumpCath(kCarRestaurant, 86, 255);
+
+ break;
+ default:
+ break;
}
- if (msg->action == 17 && checkCathDir(kCarRestaurant, 72))
- LABEL_7:
- bumpCath(kCarRestaurant, 86, 255);
}
void (LogicManager::*LogicManager::_functionsTatiana[])(HAND_PARAMS) = {
Commit: e4752d4a34b58f8ed8ec6ce2fded9bb0c5f92905
https://github.com/scummvm/scummvm/commit/e4752d4a34b58f8ed8ec6ce2fded9bb0c5f92905
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up Rebecca logic
Changed paths:
engines/lastexpress/characters/rebecca.cpp
diff --git a/engines/lastexpress/characters/rebecca.cpp b/engines/lastexpress/characters/rebecca.cpp
index 01a746437e1..437675dc794 100644
--- a/engines/lastexpress/characters/rebecca.cpp
+++ b/engines/lastexpress/characters/rebecca.cpp
@@ -48,7 +48,7 @@ void LogicManager::CONS_Rebecca(int chapter) {
CONS_Rebecca_StartPart5(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
}
@@ -69,18 +69,24 @@ void LogicManager::CONS_Rebecca_DebugWalks(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_DebugWalks(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterRebecca).characterPosition.position = 0;
- getCharacter(kCharacterRebecca).characterPosition.location = 0;
- getCharacter(kCharacterRebecca).characterPosition.car = kCarGreenSleeping;
- getCharacterCurrentParams(kCharacterRebecca)[0] = 10000;
- }
- } else if (walk(kCharacterRebecca, kCarGreenSleeping, getCharacterCurrentParams(kCharacterRebecca)[0])) {
- if (getCharacterCurrentParams(kCharacterRebecca)[0]== 10000)
- getCharacterCurrentParams(kCharacterRebecca)[0]= 0;
- else
- getCharacterCurrentParams(kCharacterRebecca)[0] = 10000;
+ switch (msg->action) {
+ case 0:
+ if (walk(kCharacterRebecca, kCarGreenSleeping, getCharacterCurrentParams(kCharacterRebecca)[0])) {
+ if (getCharacterCurrentParams(kCharacterRebecca)[0] == 10000)
+ getCharacterCurrentParams(kCharacterRebecca)[0] = 0;
+ else
+ getCharacterCurrentParams(kCharacterRebecca)[0] = 10000;
+ }
+
+ break;
+ case 12:
+ getCharacter(kCharacterRebecca).characterPosition.position = 0;
+ getCharacter(kCharacterRebecca).characterPosition.location = 0;
+ getCharacter(kCharacterRebecca).characterPosition.car = kCarGreenSleeping;
+ getCharacterCurrentParams(kCharacterRebecca)[0] = 10000;
+ break;
+ default:
+ break;
}
}
@@ -97,16 +103,20 @@ void LogicManager::CONS_Rebecca_DoWait(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_DoWait(HAND_PARAMS) {
- if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (getCharacterCurrentParams(kCharacterRebecca)[1] || (getCharacterCurrentParams(kCharacterRebecca)[1] = _gameTime + getCharacterCurrentParams(kCharacterRebecca)[0], _gameTime + getCharacterCurrentParams(kCharacterRebecca)[0] != 0)) {
if (getCharacterCurrentParams(kCharacterRebecca)[1] >= _gameTime)
- return;
+ break;
+
getCharacterCurrentParams(kCharacterRebecca)[1] = 0x7FFFFFFF;
}
getCharacter(kCharacterRebecca).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
+ default:
+ break;
}
}
@@ -123,12 +133,17 @@ void LogicManager::CONS_Rebecca_DoDialog(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_DoDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterRebecca).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterRebecca, (char *)&getCharacterCurrentParams(kCharacterRebecca)[0], -1, 0);
+ break;
+ default:
+ break;
}
}
@@ -145,12 +160,17 @@ void LogicManager::CONS_Rebecca_DoCondDialog(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_DoCondDialog(HAND_PARAMS) {
- if (msg->action == 2) {
+ switch (msg->action) {
+ case 2:
getCharacter(kCharacterRebecca).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
playDialog(kCharacterRebecca, (char *)&getCharacterCurrentParams(kCharacterRebecca)[0], getVolume(kCharacterCond2), 0);
+ break;
+ default:
+ break;
}
}
@@ -186,10 +206,13 @@ void LogicManager::HAND_Rebecca_DoJoinedSeqOtis(HAND_PARAMS) {
fedEx(kCharacterRebecca, getCharacterCurrentParams(kCharacterRebecca)[3], getCharacterCurrentParams(kCharacterRebecca)[4], (char *)&getCharacterCurrentParams(kCharacterRebecca)[5]);
getCharacterCurrentParams(kCharacterRebecca)[8] = 1;
}
+
break;
case 12:
startSeqOtis(kCharacterRebecca, (char *)&getCharacterCurrentParams(kCharacterRebecca)[0]);
break;
+ default:
+ break;
}
}
@@ -206,12 +229,17 @@ void LogicManager::CONS_Rebecca_DoSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_DoSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
getCharacter(kCharacterRebecca).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterRebecca, (char *)&getCharacterCurrentParams(kCharacterRebecca)[0]);
+ break;
+ default:
+ break;
}
}
@@ -230,15 +258,20 @@ void LogicManager::CONS_Rebecca_DoCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_DoCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterRebecca, getCharacterCurrentParams(kCharacterRebecca)[3]);
getCharacter(kCharacterRebecca).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterRebecca, (char *)&getCharacterCurrentParams(kCharacterRebecca)[0]);
blockAtDoor(kCharacterRebecca, getCharacterCurrentParams(kCharacterRebecca)[3]);
+ break;
+ default:
+ break;
}
}
@@ -257,17 +290,20 @@ void LogicManager::CONS_Rebecca_DoEnterCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_DoEnterCorrOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseAtDoor(kCharacterRebecca, getCharacterCurrentParams(kCharacterRebecca)[3]);
getCharacter(kCharacterRebecca).characterPosition.position = 4840;
getCharacter(kCharacterRebecca).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterRebecca, (char *)&getCharacterCurrentParams(kCharacterRebecca)[0]);
blockAtDoor(kCharacterRebecca, getCharacterCurrentParams(kCharacterRebecca)[3]);
getCharacter(kCharacterRebecca).characterPosition.location = 1;
+
if (inComp(kCharacterCath, kCarRedSleeping, 4840) || inComp(kCharacterCath, kCarRedSleeping, 4455)) {
if (isNight()) {
playNIS(kEventCathTurningNight);
@@ -278,6 +314,10 @@ void LogicManager::HAND_Rebecca_DoEnterCorrOtis(HAND_PARAMS) {
playDialog(0, "BUMP", -1, 0);
bumpCathFDoor(36);
}
+
+ break;
+ default:
+ break;
}
}
@@ -296,16 +336,20 @@ void LogicManager::CONS_Rebecca_DoBriefCorrOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_DoBriefCorrOtis(HAND_PARAMS) {
- if (msg->action >= 3) {
- if (msg->action <= 4) {
- releaseAtDoor(kCharacterRebecca, getCharacterCurrentParams(kCharacterRebecca)[3]);
- getCharacter(kCharacterRebecca).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
- fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
- } else if (msg->action == 12) {
- startSeqOtis(kCharacterRebecca, (char *)&getCharacterCurrentParams(kCharacterRebecca)[0]);
- blockAtDoor(kCharacterRebecca, getCharacterCurrentParams(kCharacterRebecca)[3]);
- }
+ switch (msg->action) {
+ case 3:
+ case 4:
+ releaseAtDoor(kCharacterRebecca, getCharacterCurrentParams(kCharacterRebecca)[3]);
+ getCharacter(kCharacterRebecca).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
+ fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
+ break;
+ case 12:
+ startSeqOtis(kCharacterRebecca, (char *)&getCharacterCurrentParams(kCharacterRebecca)[0]);
+ blockAtDoor(kCharacterRebecca, getCharacterCurrentParams(kCharacterRebecca)[3]);
+ break;
+ default:
+ break;
}
}
@@ -320,16 +364,22 @@ void LogicManager::CONS_Rebecca_FinishSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_FinishSeqOtis(HAND_PARAMS) {
- if (msg->action == 0) {
- if (getCharacter(kCharacterRebecca).direction == 4)
- return;
- goto LABEL_5;
- }
- if (msg->action == 3) {
- LABEL_5:
+ switch (msg->action) {
+ case 0:
+ if (getCharacter(kCharacterRebecca).direction != 4) {
+ getCharacter(kCharacterRebecca).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
+ fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
+ }
+
+ break;
+ case 3:
getCharacter(kCharacterRebecca).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -344,16 +394,18 @@ void LogicManager::CONS_Rebecca_WaitRCClear(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_WaitRCClear(HAND_PARAMS) {
- if (msg->action == 0) {
- if (!rcClear())
- return;
- goto LABEL_7;
- }
- if (msg->action == 12 && rcClear()) {
- LABEL_7:
- getCharacter(kCharacterRebecca).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
- fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
+ switch (msg->action) {
+ case 0:
+ case 12:
+ if (rcClear()) {
+ getCharacter(kCharacterRebecca).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
+ fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -373,25 +425,22 @@ void LogicManager::CONS_Rebecca_DoWalk(CONS_PARAMS) {
void LogicManager::HAND_Rebecca_DoWalk(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (walk(kCharacterRebecca, getCharacterCurrentParams(kCharacterRebecca)[0], getCharacterCurrentParams(kCharacterRebecca)[1]))
- goto LABEL_8;
- break;
- case 5:
- playCathExcuseMe();
- break;
- case 6:
- playChrExcuseMe(kCharacterRebecca, kCharacterCath, 0);
- break;
case 12:
if (walk(kCharacterRebecca, getCharacterCurrentParams(kCharacterRebecca)[0], getCharacterCurrentParams(kCharacterRebecca)[1])) {
- LABEL_8:
getCharacter(kCharacterRebecca).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
}
+
+ break;
+ case 5:
+ playCathExcuseMe();
+ break;
+ case 6:
+ playChrExcuseMe(kCharacterRebecca, kCharacterCath, 0);
break;
default:
- return;
+ break;
}
}
@@ -411,14 +460,19 @@ void LogicManager::CONS_Rebecca_DoBlockSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_DoBlockSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
releaseView(kCharacterRebecca, getCharacterCurrentParams(kCharacterRebecca)[3], getCharacterCurrentParams(kCharacterRebecca)[4]);
getCharacter(kCharacterRebecca).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterRebecca, (char *)&getCharacterCurrentParams(kCharacterRebecca)[0]);
blockView(kCharacterRebecca, getCharacterCurrentParams(kCharacterRebecca)[3], getCharacterCurrentParams(kCharacterRebecca)[4]);
+ break;
+ default:
+ break;
}
}
@@ -438,13 +492,18 @@ void LogicManager::CONS_Rebecca_DoComplexSeqOtis(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_DoComplexSeqOtis(HAND_PARAMS) {
- if (msg->action == 3) {
+ switch (msg->action) {
+ case 3:
getCharacter(kCharacterRebecca).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
- } else if (msg->action == 12) {
+ break;
+ case 12:
startSeqOtis(kCharacterRebecca, (char *)&getCharacterCurrentParams(kCharacterRebecca)[0]);
startSeqOtis(getCharacterCurrentParams(kCharacterRebecca)[6], (char *)&getCharacterCurrentParams(kCharacterRebecca)[3]);
+ break;
+ default:
+ break;
}
}
@@ -459,19 +518,28 @@ void LogicManager::CONS_Rebecca_EnterComp(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_EnterComp(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
if (cathOutRebeccaWindow())
bumpCath(kCarRedSleeping, 49, 255);
+
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
RebeccaCall(&LogicManager::CONS_Rebecca_DoEnterCorrOtis, "624Ae", 36, 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 1) {
- setDoor(44, 0, 0, 255, 255);
- getCharacter(kCharacterRebecca).characterPosition.location = 1;
- endGraphics(kCharacterRebecca);
+ break;
+ case 18:
+ if (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 1) {
+ setDoor(44, kCharacterCath, 0, 255, 255);
+ getCharacter(kCharacterRebecca).characterPosition.location = 1;
+ endGraphics(kCharacterRebecca);
- getCharacter(kCharacterRebecca).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
- fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
+ getCharacter(kCharacterRebecca).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
+ fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -488,62 +556,76 @@ void LogicManager::CONS_Rebecca_GotoDinner(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_GotoDinner(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8]) {
- case 1:
- setDoor(36, 0, 0, 10, 9);
- setDoor(52, 0, 0, 10, 9);
- getCharacter(kCharacterRebecca).characterPosition.location = 0;
- send(kCharacterRebecca, kCharacterSophie, 125242096, 0);
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoWalk, 5, 850, 0, 0);
- break;
- case 2:
- endGraphics(kCharacterRebecca);
- break;
- case 3:
- getCharacter(kCharacterRebecca).characterPosition.position = 1540;
- getCharacter(kCharacterRebecca).characterPosition.location = 0;
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoSeqOtis, "810US", 0, 0, 0);
- break;
- case 4:
- startSeqOtis(kCharacterRebecca, "012B");
- if (inSalon(kCharacterCath))
- advanceFrame(kCharacterRebecca);
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 5;
- RebeccaCall(&LogicManager::CONS_Rebecca_FinishSeqOtis, 0, 0, 0, 0);
- break;
- case 5:
- startCycOtis(kCharacterRebecca, "012A");
- if (_gameProgress[kProgressChapter] == 3)
- playDialog(23, "REB3000", -1, 0);
- send(kCharacterRebecca, kCharacterHeadWait, 269479296, 0);
- getCharacterCurrentParams(kCharacterRebecca)[1] = 1;
- break;
- default:
- return;
- }
- } else if (msg->action == 157370960) {
- send(kCharacterRebecca, kCharacterTableD, 136455232, 0);
- getCharacter(kCharacterRebecca).characterPosition.location = 1;
-
- getCharacter(kCharacterRebecca).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
- fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
+ switch (msg->action) {
+ case 0:
+ if (!getCharacterCurrentParams(kCharacterRebecca)[1] && nearChar(kCharacterRebecca, kCharacterSophie, 750) && !whoOnScreen(kCharacterSophie)) {
+ send(kCharacterRebecca, kCharacterSophie, 123668192, 0);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
+ RebeccaCall(&LogicManager::CONS_Rebecca_WaitRCClear, 0, 0, 0, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
if (!getCharacterCurrentParams(kCharacterRebecca)[0]) {
RebeccaCall(&LogicManager::CONS_Rebecca_DoCorrOtis, "623Ee", 36, 0, 0);
} else {
RebeccaCall(&LogicManager::CONS_Rebecca_DoCorrOtis, "624Be", 36, 0, 0);
- }
- } else if (msg->action == 0 && !getCharacterCurrentParams(kCharacterRebecca)[1] && nearChar(kCharacterRebecca, kCharacterSophie, 750) && !whoOnScreen(kCharacterSophie)) {
- send(kCharacterRebecca, kCharacterSophie, 123668192, 0);
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
- RebeccaCall(&LogicManager::CONS_Rebecca_WaitRCClear, 0, 0, 0, 0);
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8]) {
+ case 1:
+ setDoor(36, kCharacterCath, 0, 10, 9);
+ setDoor(52, kCharacterCath, 0, 10, 9);
+ getCharacter(kCharacterRebecca).characterPosition.location = 0;
+ send(kCharacterRebecca, kCharacterSophie, 125242096, 0);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoWalk, 5, 850, 0, 0);
+ break;
+ case 2:
+ endGraphics(kCharacterRebecca);
+ break;
+ case 3:
+ getCharacter(kCharacterRebecca).characterPosition.position = 1540;
+ getCharacter(kCharacterRebecca).characterPosition.location = 0;
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoSeqOtis, "810US", 0, 0, 0);
+ break;
+ case 4:
+ startSeqOtis(kCharacterRebecca, "012B");
+
+ if (inSalon(kCharacterCath))
+ advanceFrame(kCharacterRebecca);
+
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 5;
+ RebeccaCall(&LogicManager::CONS_Rebecca_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 5:
+ startCycOtis(kCharacterRebecca, "012A");
+
+ if (_gameProgress[kProgressChapter] == 3)
+ playDialog(kCharacterRebecca, "REB3000", -1, 0);
+
+ send(kCharacterRebecca, kCharacterHeadWait, 269479296, 0);
+ getCharacterCurrentParams(kCharacterRebecca)[1] = 1;
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 157370960:
+ send(kCharacterRebecca, kCharacterTableD, 136455232, 0);
+ getCharacter(kCharacterRebecca).characterPosition.location = 1;
+
+ getCharacter(kCharacterRebecca).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
+ fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
+ break;
+ default:
+ break;
}
}
@@ -560,105 +642,128 @@ void LogicManager::CONS_Rebecca_GotoSalon(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_GotoSalon(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoCorrOtis, "624Be", 36, 0, 0);
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8]) {
- case 1:
- setDoor(36, 0, 0, 10, 9);
- setDoor(52, 0, 0, 10, 9);
- getCharacter(kCharacterRebecca).characterPosition.location = 0;
- send(kCharacterRebecca, kCharacterSophie, 125242096, 0);
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoWalk, 5, 850, 0, 0);
- break;
- case 2:
- endGraphics(kCharacterRebecca);
- break;
- case 3:
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
- RebeccaCall(&LogicManager::CONS_Rebecca_WaitRCClear, 0, 0, 0, 0);
- break;
- case 4:
- getCharacter(kCharacterRebecca).characterPosition.position = 1540;
- getCharacter(kCharacterRebecca).characterPosition.location = 0;
- if (_gameProgress[11] == 3)
- playDialog(kCharacterRebecca, "Reb3005", -1, 75);
- if (getCharacterCurrentParams(kCharacterRebecca)[0]) {
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 5;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoBlockSeqOtis, "118A", 5, 52, 0);
- } else {
- blockView(kCharacterRebecca, kCarRestaurant, 57);
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 6;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoComplexSeqOtis, "107A1", "107A2", 24, 0);
- }
- break;
- case 5:
- goto LABEL_19;
- case 6:
- releaseView(kCharacterRebecca, kCarRestaurant, 57);
- endGraphics(kCharacterSophie);
- LABEL_19:
- getCharacter(kCharacterRebecca).characterPosition.location = 1;
-
- getCharacter(kCharacterRebecca).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
- fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
- break;
- default:
- return;
- }
+ switch (msg->action) {
+ case 0:
+ if (nearChar(kCharacterRebecca, kCharacterSophie, 750) && !whoOnScreen(kCharacterSophie)) {
+ send(kCharacterRebecca, kCharacterSophie, 123668192, 0);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoWait, 0, 0, 0, 0);
}
- } else if (nearChar(kCharacterRebecca, kCharacterSophie, 0x2EE) && !whoOnScreen(kCharacterSophie)) {
- send(kCharacterRebecca, kCharacterSophie, 123668192, 0);
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoWait, 0, 0, 0, 0);
- }
-}
-
-void LogicManager::CONS_Rebecca_ReturnFromSalon(CONS_PARAMS) {
- CharacterCallParams *params = &getCharacter(kCharacterRebecca).callParams[getCharacter(kCharacterRebecca).currentCall];
- _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, &LogicManager::HAND_Rebecca_ReturnFromSalon);
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall] = 18;
-
- params->clear();
-
- fedEx(kCharacterRebecca, kCharacterRebecca, 12, 0);
-}
-void LogicManager::HAND_Rebecca_ReturnFromSalon(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterRebecca).characterPosition.car = 4;
- getCharacter(kCharacterRebecca).characterPosition.position = 9270;
- getCharacter(kCharacterRebecca).characterPosition.location = 0;
- send(kCharacterRebecca, kCharacterSophie, 136654208, 0);
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoWalk, 4, 4840, 0, 0);
- } else if (msg->action == 18) {
- if (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 1) {
- if (nearChar(kCharacterRebecca, kCharacterSophie, 750) || nearX(kCharacterSophie, 4840, 500)) {
- send(kCharacterRebecca, kCharacterSophie, 123668192, 0);
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
- RebeccaCall(&LogicManager::CONS_Rebecca_EnterComp, 0, 0, 0, 0);
- } else {
- startCycOtis(kCharacterRebecca, "623Ge");
- softBlockAtDoor(kCharacterRebecca, 36);
- }
- } else if (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 2 ||
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 3) {
- getCharacter(kCharacterRebecca).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
- fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
+ break;
+ case 12:
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoCorrOtis, "624Be", 36, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8]) {
+ case 1:
+ setDoor(36, kCharacterCath, 0, 10, 9);
+ setDoor(52, kCharacterCath, 0, 10, 9);
+ getCharacter(kCharacterRebecca).characterPosition.location = 0;
+ send(kCharacterRebecca, kCharacterSophie, 125242096, 0);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoWalk, 5, 850, 0, 0);
+ break;
+ case 2:
+ endGraphics(kCharacterRebecca);
+ break;
+ case 3:
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
+ RebeccaCall(&LogicManager::CONS_Rebecca_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 4:
+ getCharacter(kCharacterRebecca).characterPosition.position = 1540;
+ getCharacter(kCharacterRebecca).characterPosition.location = 0;
+
+ if (_gameProgress[kProgressChapter] == 3)
+ playDialog(kCharacterRebecca, "Reb3005", -1, 75);
+
+ if (getCharacterCurrentParams(kCharacterRebecca)[0]) {
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 5;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoBlockSeqOtis, "118A", 5, 52, 0);
+ } else {
+ blockView(kCharacterRebecca, kCarRestaurant, 57);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 6;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoComplexSeqOtis, "107A1", "107A2", 24, 0);
}
+
+ break;
+ case 5:
+ getCharacter(kCharacterRebecca).characterPosition.location = 1;
+
+ getCharacter(kCharacterRebecca).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
+ fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
+ break;
+ case 6:
+ releaseView(kCharacterRebecca, kCarRestaurant, 57);
+ endGraphics(kCharacterSophie);
+ getCharacter(kCharacterRebecca).characterPosition.location = 1;
+
+ getCharacter(kCharacterRebecca).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
+ fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
+ break;
+ default:
+ break;
}
- } else if (nearChar(kCharacterRebecca, kCharacterSophie, 750) || nearX(kCharacterSophie, 4840, 500)) {
- send(kCharacterRebecca, kCharacterSophie, 123668192, 0);
- softReleaseAtDoor(kCharacterRebecca, 36);
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
- RebeccaCall(&LogicManager::CONS_Rebecca_EnterComp, 0, 0, 0, 0);
+
+ break;
+ default:
+ break;
+ }
+}
+
+void LogicManager::CONS_Rebecca_ReturnFromSalon(CONS_PARAMS) {
+ CharacterCallParams *params = &getCharacter(kCharacterRebecca).callParams[getCharacter(kCharacterRebecca).currentCall];
+ _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, &LogicManager::HAND_Rebecca_ReturnFromSalon);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall] = 18;
+
+ params->clear();
+
+ fedEx(kCharacterRebecca, kCharacterRebecca, 12, 0);
+}
+
+void LogicManager::HAND_Rebecca_ReturnFromSalon(HAND_PARAMS) {
+ switch (msg->action) {
+ case 0:
+ if (nearChar(kCharacterRebecca, kCharacterSophie, 750) || nearX(kCharacterSophie, 4840, 500)) {
+ send(kCharacterRebecca, kCharacterSophie, 123668192, 0);
+ softReleaseAtDoor(kCharacterRebecca, 36);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
+ RebeccaCall(&LogicManager::CONS_Rebecca_EnterComp, 0, 0, 0, 0);
+ }
+
+ break;
+ case 12:
+ getCharacter(kCharacterRebecca).characterPosition.car = 4;
+ getCharacter(kCharacterRebecca).characterPosition.position = 9270;
+ getCharacter(kCharacterRebecca).characterPosition.location = 0;
+ send(kCharacterRebecca, kCharacterSophie, 136654208, 0);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoWalk, 4, 4840, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 1) {
+ if (nearChar(kCharacterRebecca, kCharacterSophie, 750) || nearX(kCharacterSophie, 4840, 500)) {
+ send(kCharacterRebecca, kCharacterSophie, 123668192, 0);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
+ RebeccaCall(&LogicManager::CONS_Rebecca_EnterComp, 0, 0, 0, 0);
+ } else {
+ startCycOtis(kCharacterRebecca, "623Ge");
+ softBlockAtDoor(kCharacterRebecca, 36);
+ }
+ } else if (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 2 ||
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 3) {
+ getCharacter(kCharacterRebecca).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
+ fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -673,58 +778,69 @@ void LogicManager::CONS_Rebecca_ReturnFromDinner(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_ReturnFromDinner(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
- RebeccaCall(&LogicManager::CONS_Rebecca_WaitRCClear, 0, 0, 0, 0);
- } else if (msg->action == 18) {
- switch (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterRebecca).characterPosition.location = 0;
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoJoinedSeqOtis, "012H", 36, 103798704, "010M");
- break;
- case 2:
- send(kCharacterRebecca, kCharacterWaiter1, 337548856, 0);
- startSeqOtis(kCharacterRebecca, "810DS");
- if (inDiningRoom(kCharacterCath))
- advanceFrame(kCharacterRebecca);
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
- RebeccaCall(&LogicManager::CONS_Rebecca_FinishSeqOtis, 0, 0, 0, 0);
- break;
- case 3:
- getCharacter(kCharacterRebecca).characterPosition.car = 4;
- getCharacter(kCharacterRebecca).characterPosition.position = 9270;
- getCharacter(kCharacterRebecca).characterPosition.location = 0;
- send(kCharacterRebecca, kCharacterSophie, 136654208, 0);
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoWalk, 4, 4840, 0, 0);
- break;
- case 4:
- if (nearChar(kCharacterRebecca, kCharacterSophie, 750) || nearX(kCharacterSophie, 4840, 500)) {
- send(kCharacterRebecca, kCharacterSophie, 123668192, 0);
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 5;
- RebeccaCall(&LogicManager::CONS_Rebecca_EnterComp, 0, 0, 0, 0);
- } else {
- startCycOtis(kCharacterRebecca, "623Ge");
- softBlockAtDoor(kCharacterRebecca, 36);
- }
- break;
- case 5:
- case 6:
- getCharacter(kCharacterRebecca).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
- fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
- break;
- default:
- return;
+ switch (msg->action) {
+ case 0:
+ if (nearChar(kCharacterRebecca, kCharacterSophie, 750) || nearX(kCharacterSophie, 4840, 500)) {
+ send(kCharacterRebecca, kCharacterSophie, 123668192, 0);
+ softReleaseAtDoor(kCharacterRebecca, 36);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 6;
+ RebeccaCall(&LogicManager::CONS_Rebecca_EnterComp, 0, 0, 0, 0);
+ }
+
+ break;
+ case 12:
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
+ RebeccaCall(&LogicManager::CONS_Rebecca_WaitRCClear, 0, 0, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterRebecca).characterPosition.location = 0;
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoJoinedSeqOtis, "012H", 36, 103798704, "010M");
+ break;
+ case 2:
+ send(kCharacterRebecca, kCharacterWaiter1, 337548856, 0);
+ startSeqOtis(kCharacterRebecca, "810DS");
+
+ if (inDiningRoom(kCharacterCath))
+ advanceFrame(kCharacterRebecca);
+
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
+ RebeccaCall(&LogicManager::CONS_Rebecca_FinishSeqOtis, 0, 0, 0, 0);
+ break;
+ case 3:
+ getCharacter(kCharacterRebecca).characterPosition.car = 4;
+ getCharacter(kCharacterRebecca).characterPosition.position = 9270;
+ getCharacter(kCharacterRebecca).characterPosition.location = 0;
+ send(kCharacterRebecca, kCharacterSophie, 136654208, 0);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoWalk, 4, 4840, 0, 0);
+ break;
+ case 4:
+ if (nearChar(kCharacterRebecca, kCharacterSophie, 750) || nearX(kCharacterSophie, 4840, 500)) {
+ send(kCharacterRebecca, kCharacterSophie, 123668192, 0);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 5;
+ RebeccaCall(&LogicManager::CONS_Rebecca_EnterComp, 0, 0, 0, 0);
+ } else {
+ startCycOtis(kCharacterRebecca, "623Ge");
+ softBlockAtDoor(kCharacterRebecca, 36);
}
+
+ break;
+ case 5:
+ case 6:
+ getCharacter(kCharacterRebecca).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
+ fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
+ break;
+ default:
+ break;
}
- } else if (nearChar(kCharacterRebecca, kCharacterSophie, 750) || nearX(kCharacterSophie, 4840, 500)) {
- send(kCharacterRebecca, kCharacterSophie, 123668192, 0);
- softReleaseAtDoor(kCharacterRebecca, 36);
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 6;
- RebeccaCall(&LogicManager::CONS_Rebecca_EnterComp, 0, 0, 0, 0);
+
+ break;
+ default:
+ break;
}
}
@@ -741,90 +857,129 @@ void LogicManager::CONS_Rebecca_CompLogic(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_CompLogic(HAND_PARAMS) {
- if (msg->action <= 9) {
- if (msg->action < 8) {
- if (msg->action)
- return;
- if (getCharacterCurrentParams(kCharacterRebecca)[0] < _gameTime && !getCharacterCurrentParams(kCharacterRebecca)[4]) {
- getCharacterCurrentParams(kCharacterRebecca)[4] = 1;
- setDoor(36, 0, 0, 10, 9);
- setDoor(52, 0, 0, 10, 9);
+ switch (msg->action) {
+ case 0: {
+ if (getCharacterCurrentParams(kCharacterRebecca)[0] < _gameTime && !getCharacterCurrentParams(kCharacterRebecca)[4]) {
+ getCharacterCurrentParams(kCharacterRebecca)[4] = 1;
+ setDoor(36, kCharacterCath, 0, 10, 9);
+ setDoor(52, kCharacterCath, 0, 10, 9);
- getCharacter(kCharacterRebecca).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
- fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
- return;
- }
- if (getCharacterCurrentParams(kCharacterRebecca)[1]) {
- if (getCharacterCurrentParams(kCharacterRebecca)[5] || (getCharacterCurrentParams(kCharacterRebecca)[5] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterRebecca)[5] >= _currentGameSessionTicks)
- goto LABEL_22;
+ getCharacter(kCharacterRebecca).currentCall--;
+ _engine->getMessageManager()->setMessageHandle(kCharacterRebecca, _functionsRebecca[getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall]]);
+ fedEx(kCharacterRebecca, kCharacterRebecca, 18, 0);
+ break;
+ }
+
+ bool skip = false;
+
+ if (getCharacterCurrentParams(kCharacterRebecca)[1]) {
+ if (getCharacterCurrentParams(kCharacterRebecca)[5] || (getCharacterCurrentParams(kCharacterRebecca)[5] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterRebecca)[5] >= _currentGameSessionTicks) {
+ skip = true;
+ }
+
+ if (!skip) {
getCharacterCurrentParams(kCharacterRebecca)[5] = 0x7FFFFFFF;
}
+ }
+
+ if (!skip) {
getCharacterCurrentParams(kCharacterRebecca)[1] = 0;
getCharacterCurrentParams(kCharacterRebecca)[2] = 1;
- setDoor(36, 23, 1, 0, 0);
- setDoor(52, 23, 1, 0, 0);
+ setDoor(36, kCharacterRebecca, 1, 0, 0);
+ setDoor(52, kCharacterRebecca, 1, 0, 0);
}
+ }
+
+ if (!skip) {
getCharacterCurrentParams(kCharacterRebecca)[5] = 0;
- LABEL_22:
- if (_gameProgress[kProgressChapter] == 1 && !getCharacterParams(kCharacterRebecca, 8)[2]) {
- if (getCharacterCurrentParams(kCharacterRebecca)[6] != 0x7FFFFFFF && _gameTime > 1174500) {
- if (_gameTime > 1183500)
- goto LABEL_32;
- if (!nearChar(kCharacterRebecca, kCharacterCath, 2000) || dialogRunning("CON1210") || !getCharacterCurrentParams(kCharacterRebecca)[6]) {
- getCharacterCurrentParams(kCharacterRebecca)[6] = _gameTime;
- if (!_gameTime)
- goto LABEL_33;
- }
- if (getCharacterCurrentParams(kCharacterRebecca)[6] < _gameTime) {
- LABEL_32:
- getCharacterCurrentParams(kCharacterRebecca)[6] = 0x7FFFFFFF;
- LABEL_33:
+ }
+
+ if (_gameProgress[kProgressChapter] == 1 && !getCharacterParams(kCharacterRebecca, 8)[2]) {
+ if (getCharacterCurrentParams(kCharacterRebecca)[6] != 0x7FFFFFFF && _gameTime > 1174500) {
+ if (_gameTime > 1183500) {
+ getCharacterCurrentParams(kCharacterRebecca)[6] = 0x7FFFFFFF;
+ getCharacterParams(kCharacterRebecca, 8)[2] = 1;
+ setDoor(36, kCharacterRebecca, 1, 0, 0);
+ setDoor(52, kCharacterRebecca, 1, 0, 0);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1205", 0, 0, 0);
+ break;
+ }
+
+ if (!nearChar(kCharacterRebecca, kCharacterCath, 2000) || dialogRunning("CON1210") || !getCharacterCurrentParams(kCharacterRebecca)[6]) {
+ getCharacterCurrentParams(kCharacterRebecca)[6] = _gameTime;
+ if (!_gameTime) {
getCharacterParams(kCharacterRebecca, 8)[2] = 1;
- setDoor(36, 23, 1, 0, 0);
- setDoor(52, 23, 1, 0, 0);
+ setDoor(36, kCharacterRebecca, 1, 0, 0);
+ setDoor(52, kCharacterRebecca, 1, 0, 0);
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1205", 0, 0, 0);
- return;
+ break;
}
}
- goto LABEL_67;
- }
- if (_gameProgress[kProgressChapter] == 3 && !getCharacterParams(kCharacterRebecca, 8)[3] && getCharacterCurrentParams(kCharacterRebecca)[7] != 0x7FFFFFFF && _gameTime > 2097000) {
- if (_gameTime > 2106000)
- goto LABEL_43;
- if (!nearChar(kCharacterRebecca, kCharacterCath, 1000) || !getCharacterCurrentParams(kCharacterRebecca)[7]) {
- getCharacterCurrentParams(kCharacterRebecca)[7] = _gameTime;
- if (!_gameTime)
- goto LABEL_44;
+
+ if (getCharacterCurrentParams(kCharacterRebecca)[6] < _gameTime) {
+ getCharacterCurrentParams(kCharacterRebecca)[6] = 0x7FFFFFFF;
+ getCharacterParams(kCharacterRebecca, 8)[2] = 1;
+ setDoor(36, kCharacterRebecca, 1, 0, 0);
+ setDoor(52, kCharacterRebecca, 1, 0, 0);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1205", 0, 0, 0);
+ break;
}
- if (getCharacterCurrentParams(kCharacterRebecca)[7] < _gameTime) {
- LABEL_43:
- getCharacterCurrentParams(kCharacterRebecca)[7] = 0x7FFFFFFF;
- LABEL_44:
+ }
+ } else if (_gameProgress[kProgressChapter] == 3 && !getCharacterParams(kCharacterRebecca, 8)[3] && getCharacterCurrentParams(kCharacterRebecca)[7] != 0x7FFFFFFF && _gameTime > 2097000) {
+ if (_gameTime > 2106000) {
+ getCharacterCurrentParams(kCharacterRebecca)[7] = 0x7FFFFFFF;
+ getCharacterParams(kCharacterRebecca, 8)[3] = 1;
+ setDoor(36, kCharacterRebecca, 1, 0, 0);
+ setDoor(52, kCharacterRebecca, 1, 0, 0);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB3010", 0, 0, 0);
+ break;
+ }
+
+ if (!nearChar(kCharacterRebecca, kCharacterCath, 1000) || !getCharacterCurrentParams(kCharacterRebecca)[7]) {
+ getCharacterCurrentParams(kCharacterRebecca)[7] = _gameTime;
+ if (!_gameTime) {
getCharacterParams(kCharacterRebecca, 8)[3] = 1;
- setDoor(36, 23, 1, 0, 0);
- setDoor(52, 23, 1, 0, 0);
+ setDoor(36, kCharacterRebecca, 1, 0, 0);
+ setDoor(52, kCharacterRebecca, 1, 0, 0);
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB3010", 0, 0, 0);
- return;
+ break;
}
}
- LABEL_67:
- if (getCharacterParams(kCharacterRebecca, 8)[1]) {
- if (nearChar(kCharacterRebecca, kCharacterCath, 1000)) {
- setDoor(36, 23, 1, 0, 0);
- setDoor(52, 23, 1, 0, 0);
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1040", 0, 0, 0);
- }
+
+ if (getCharacterCurrentParams(kCharacterRebecca)[7] < _gameTime) {
+ getCharacterCurrentParams(kCharacterRebecca)[7] = 0x7FFFFFFF;
+ getCharacterParams(kCharacterRebecca, 8)[3] = 1;
+ setDoor(36, kCharacterRebecca, 1, 0, 0);
+ setDoor(52, kCharacterRebecca, 1, 0, 0);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB3010", 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterParams(kCharacterRebecca, 8)[1]) {
+ if (nearChar(kCharacterRebecca, kCharacterCath, 1000)) {
+ setDoor(36, kCharacterRebecca, 1, 0, 0);
+ setDoor(52, kCharacterRebecca, 1, 0, 0);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1040", 0, 0, 0);
}
- return;
}
+
+ break;
+ }
+ case 8:
+ case 9:
if (!getCharacterCurrentParams(kCharacterRebecca)[1]) {
- setDoor(36, 23, 1, 0, 0);
- setDoor(52, 23, 1, 0, 0);
+ setDoor(36, kCharacterRebecca, 1, 0, 0);
+ setDoor(52, kCharacterRebecca, 1, 0, 0);
+
if (msg->action == 8) {
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "LIB012", 0, 0, 0);
@@ -832,26 +987,33 @@ void LogicManager::HAND_Rebecca_CompLogic(HAND_PARAMS) {
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 5;
RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "LIB013", 0, 0, 0);
}
- return;
+
+ break;
}
- setDoor(36, 23, 1, 0, 0);
- setDoor(52, 23, 1, 0, 0);
+
+ setDoor(36, kCharacterRebecca, 1, 0, 0);
+ setDoor(52, kCharacterRebecca, 1, 0, 0);
+
if (msg->param.intParam == 52) {
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 8;
RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, getCathWCDialog(), 0, 0, 0);
- return;
+ break;
}
+
if (!cathHasItem(kItemPassengerList)) {
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 11;
RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, getCathSorryDialog(), 0, 0, 0);
- return;
+ break;
}
+
if (rnd(2)) {
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 9;
RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, getCathSorryDialog(), 0, 0, 0);
- return;
+ break;
}
+
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 10;
+
if (getCharacterCurrentParams(kCharacterRebecca)[3]) {
RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "CAT1509", 0, 0, 0);
} else {
@@ -861,87 +1023,112 @@ void LogicManager::HAND_Rebecca_CompLogic(HAND_PARAMS) {
RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "CAT1508", 0, 0, 0);
}
}
-
- return;
- }
- if (msg->action > 17) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8]) {
- case 1:
- setDoor(36, 23, 1, 10, 9);
- setDoor(52, 23, 1, 10, 9);
- getCharacterParams(kCharacterRebecca, 8)[1] = 0;
- goto LABEL_67;
- case 2:
- setDoor(36, 23, 1, 10, 9);
- setDoor(52, 23, 1, 10, 9);
- goto LABEL_67;
- case 3:
- setDoor(36, 23, 1, 10, 9);
- setDoor(52, 23, 1, 10, 9);
- getCharacterParams(kCharacterRebecca, 8)[1] = 0;
- return;
- case 4:
- case 5:
- if (rnd(2)) {
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 6;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1039", 0, 0, 0);
- return;
+
+ break;
+ case 12:
+ setDoor(36, kCharacterRebecca, 1, 10, 9);
+ setDoor(52, kCharacterRebecca, 1, 10, 9);
+ break;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterRebecca)[2] || getCharacterCurrentParams(kCharacterRebecca)[1]) {
+ setDoor(36, kCharacterRebecca, 1, 10, 9);
+ setDoor(52, kCharacterRebecca, 1, 10, 9);
+ getCharacterCurrentParams(kCharacterRebecca)[2] = 0;
+ getCharacterCurrentParams(kCharacterRebecca)[1] = 0;
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8]) {
+ case 1:
+ setDoor(36, kCharacterRebecca, 1, 10, 9);
+ setDoor(52, kCharacterRebecca, 1, 10, 9);
+ getCharacterParams(kCharacterRebecca, 8)[1] = 0;
+ if (getCharacterParams(kCharacterRebecca, 8)[1]) {
+ if (nearChar(kCharacterRebecca, kCharacterCath, 1000)) {
+ setDoor(36, kCharacterRebecca, 1, 0, 0);
+ setDoor(52, kCharacterRebecca, 1, 0, 0);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1040", 0, 0, 0);
}
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 7;
+ }
- if (rnd(2) == 0) {
- RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "SOP1039A", 0, 0, 0);
- } else {
- RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "SOP1039", 0, 0, 0);
+ break;
+ case 2:
+ setDoor(36, kCharacterRebecca, 1, 10, 9);
+ setDoor(52, kCharacterRebecca, 1, 10, 9);
+ if (getCharacterParams(kCharacterRebecca, 8)[1]) {
+ if (nearChar(kCharacterRebecca, kCharacterCath, 1000)) {
+ setDoor(36, kCharacterRebecca, 1, 0, 0);
+ setDoor(52, kCharacterRebecca, 1, 0, 0);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1040", 0, 0, 0);
}
+ }
+
+ break;
+ case 3:
+ setDoor(36, kCharacterRebecca, 1, 10, 9);
+ setDoor(52, kCharacterRebecca, 1, 10, 9);
+ getCharacterParams(kCharacterRebecca, 8)[1] = 0;
+ break;
+ case 4:
+ case 5:
+ if (rnd(2)) {
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 6;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1039", 0, 0, 0);
break;
- case 6:
- getCharacterCurrentParams(kCharacterRebecca)[3] = 0;
- goto LABEL_78;
- case 7:
- getCharacterCurrentParams(kCharacterRebecca)[3] = 1;
- LABEL_78:
- setDoor(36, 23, 1, 14, 0);
- setDoor(52, 23, 1, 14, 0);
- getCharacterCurrentParams(kCharacterRebecca)[1] = 1;
- return;
- case 8:
- case 9:
- case 10:
- case 11:
- getCharacterCurrentParams(kCharacterRebecca)[1] = 0;
- getCharacterCurrentParams(kCharacterRebecca)[2] = 1;
- return;
- case 12:
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 13;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoCondDialog, "JAC1012B", 0, 0, 0);
- return;
- case 13:
- goto LABEL_60;
- default:
- return;
}
-
- return;
- }
- if (msg->action == 254915200) {
- setDoor(36, 23, 1, 0, 0);
- setDoor(52, 23, 1, 0, 0);
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 12;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1039A", 0, 0, 0);
- }
- } else if (msg->action == 17) {
- if (getCharacterCurrentParams(kCharacterRebecca)[2] || getCharacterCurrentParams(kCharacterRebecca)[1]) {
- setDoor(36, 23, 1, 10, 9);
- setDoor(52, 23, 1, 10, 9);
- getCharacterCurrentParams(kCharacterRebecca)[2] = 0;
+
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 7;
+
+ if (rnd(2) == 0) {
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "SOP1039A", 0, 0, 0);
+ } else {
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "SOP1039", 0, 0, 0);
+ }
+
+ break;
+ case 6:
+ getCharacterCurrentParams(kCharacterRebecca)[3] = 0;
+ setDoor(36, kCharacterRebecca, 1, 14, 0);
+ setDoor(52, kCharacterRebecca, 1, 14, 0);
+ getCharacterCurrentParams(kCharacterRebecca)[1] = 1;
+ break;
+ case 7:
+ getCharacterCurrentParams(kCharacterRebecca)[3] = 1;
+ setDoor(36, kCharacterRebecca, 1, 14, 0);
+ setDoor(52, kCharacterRebecca, 1, 14, 0);
+ getCharacterCurrentParams(kCharacterRebecca)[1] = 1;
+ break;
+ case 8:
+ case 9:
+ case 10:
+ case 11:
getCharacterCurrentParams(kCharacterRebecca)[1] = 0;
+ getCharacterCurrentParams(kCharacterRebecca)[2] = 1;
+ break;
+ case 12:
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 13;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoCondDialog, "JAC1012B", 0, 0, 0);
+ break;
+ case 13:
+ setDoor(36, kCharacterRebecca, 1, 10, 9);
+ setDoor(52, kCharacterRebecca, 1, 10, 9);
+ break;
+ default:
+ break;
}
- } else if (msg->action == 12) {
- LABEL_60:
- setDoor(36, 23, 1, 10, 9);
- setDoor(52, 23, 1, 10, 9);
+
+ break;
+ case 254915200:
+ setDoor(36, kCharacterRebecca, 1, 0, 0);
+ setDoor(52, kCharacterRebecca, 1, 0, 0);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 12;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1039A", 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -956,21 +1143,27 @@ void LogicManager::CONS_Rebecca_Birth(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_Birth(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- autoMessage(kCharacterRebecca, 224253538, 0);
- setDoor(36, 0, 0, 10, 9);
- setDoor(52, 0, 0, 10, 9);
- setDoor(44, 0, 0, 255, 255);
- setModel(110, 1);
- getCharacter(kCharacterRebecca).characterPosition.position = 2830;
- getCharacter(kCharacterRebecca).characterPosition.location = 1;
- getCharacter(kCharacterRebecca).characterPosition.car = kCarRestaurant;
- getCharacterParams(kCharacterRebecca, 8)[1] = 1;
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterRebecca)[0]) {
+ getCharacterCurrentParams(kCharacterRebecca)[0] = 1;
+ CONS_Rebecca_InSalon1A(0, 0, 0, 0);
}
- } else if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterRebecca)[0]) {
- getCharacterCurrentParams(kCharacterRebecca)[0] = 1;
- CONS_Rebecca_InSalon1A(0, 0, 0, 0);
+
+ break;
+ case 12:
+ autoMessage(kCharacterRebecca, 224253538, 0);
+ setDoor(36, kCharacterCath, 0, 10, 9);
+ setDoor(52, kCharacterCath, 0, 10, 9);
+ setDoor(44, kCharacterCath, 0, 255, 255);
+ setModel(110, 1);
+ getCharacter(kCharacterRebecca).characterPosition.position = 2830;
+ getCharacter(kCharacterRebecca).characterPosition.location = 1;
+ getCharacter(kCharacterRebecca).characterPosition.car = kCarRestaurant;
+ getCharacterParams(kCharacterRebecca, 8)[1] = 1;
+ break;
+ default:
+ break;
}
}
@@ -987,59 +1180,85 @@ void LogicManager::CONS_Rebecca_InSalon1A(CONS_PARAMS) {
void LogicManager::HAND_Rebecca_InSalon1A(HAND_PARAMS) {
switch (msg->action) {
case 0:
+ {
if (_gameTime > 1084500 && !getCharacterCurrentParams(kCharacterRebecca)[2]) {
getCharacterCurrentParams(kCharacterRebecca)[2] = 1;
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1015", 0, 0, 0);
- return;
- }
- if (getCharacterCurrentParams(kCharacterRebecca)[3] == 0x7FFFFFFF || !_gameTime)
- goto LABEL_27;
- if (_gameTime > 1080000)
- goto LABEL_13;
- if (!inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterRebecca)[3]) {
- getCharacterCurrentParams(kCharacterRebecca)[3] = _gameTime + 150;
- if (_gameTime == -150)
- goto LABEL_14;
- }
- if (getCharacterCurrentParams(kCharacterRebecca)[3] >= _gameTime) {
- LABEL_27:
+ break;
+ }
+
+ bool skip = false;
+
+ if (getCharacterCurrentParams(kCharacterRebecca)[3] == 0x7FFFFFFF || !_gameTime) {
+ skip = true;
+ }
+
+ if (!skip) {
+ if (_gameTime > 1080000) {
+ getCharacterCurrentParams(kCharacterRebecca)[3] = 0x7FFFFFFF;
+ if (inSalon(kCharacterCath))
+ _gameProgress[kProgressFieldB8] = 1;
+
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1012", 0, 0, 0);
+ break;
+ }
+
+ if (!inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterRebecca)[3]) {
+ getCharacterCurrentParams(kCharacterRebecca)[3] = _gameTime + 150;
+ if (_gameTime == -150) {
+ if (inSalon(kCharacterCath))
+ _gameProgress[kProgressFieldB8] = 1;
+
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1012", 0, 0, 0);
+ break;
+ }
+ }
+ }
+
+ if (skip || getCharacterCurrentParams(kCharacterRebecca)[3] >= _gameTime) {
if (getCharacterCurrentParams(kCharacterRebecca)[0]) {
if (!getCharacterCurrentParams(kCharacterRebecca)[4] && (getCharacterCurrentParams(kCharacterRebecca)[4] = _gameTime + 900, _gameTime == -900) || getCharacterCurrentParams(kCharacterRebecca)[4] < _gameTime) {
if (inSalon(kCharacterCath)) {
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 5;
RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1013", 0, 0, 0);
- return;
+ break;
}
}
}
- LABEL_34:
+
if (getCharacterCurrentParams(kCharacterRebecca)[1]) {
if (getCharacterCurrentParams(kCharacterRebecca)[5] || (getCharacterCurrentParams(kCharacterRebecca)[5] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
if (getCharacterCurrentParams(kCharacterRebecca)[5] >= _currentGameSessionTicks)
- return;
+ break;
+
getCharacterCurrentParams(kCharacterRebecca)[5] = 0x7FFFFFFF;
}
+
bumpCath(kCarRestaurant, 55, 255);
} else {
getCharacterCurrentParams(kCharacterRebecca)[5] = 0;
}
} else {
- LABEL_13:
getCharacterCurrentParams(kCharacterRebecca)[3] = 0x7FFFFFFF;
- LABEL_14:
+
if (inSalon(kCharacterCath))
- _gameProgress[46] = 1;
+ _gameProgress[kProgressFieldB8] = 1;
+
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1012", 0, 0, 0);
}
+
break;
+ }
case 12:
startCycOtis(kCharacterRebecca, "107B");
- return;
+ break;
case 17:
getCharacterCurrentParams(kCharacterRebecca)[1] = checkCathDir(kCarRestaurant, 57);
- return;
+ break;
case 18:
switch (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8]) {
case 1:
@@ -1055,17 +1274,55 @@ void LogicManager::HAND_Rebecca_InSalon1A(HAND_PARAMS) {
break;
case 4:
getCharacterCurrentParams(kCharacterRebecca)[0] = 1;
- goto LABEL_27;
+ if (getCharacterCurrentParams(kCharacterRebecca)[0]) {
+ if (!getCharacterCurrentParams(kCharacterRebecca)[4] && (getCharacterCurrentParams(kCharacterRebecca)[4] = _gameTime + 900, _gameTime == -900) || getCharacterCurrentParams(kCharacterRebecca)[4] < _gameTime) {
+ if (inSalon(kCharacterCath)) {
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 5;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1013", 0, 0, 0);
+ break;
+ }
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterRebecca)[1]) {
+ if (getCharacterCurrentParams(kCharacterRebecca)[5] || (getCharacterCurrentParams(kCharacterRebecca)[5] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
+ if (getCharacterCurrentParams(kCharacterRebecca)[5] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterRebecca)[5] = 0x7FFFFFFF;
+ }
+
+ bumpCath(kCarRestaurant, 55, 255);
+ } else {
+ getCharacterCurrentParams(kCharacterRebecca)[5] = 0;
+ }
+
+ break;
case 5:
_gameProgress[kProgressFieldB4] = 1;
getCharacterCurrentParams(kCharacterRebecca)[0] = 0;
- goto LABEL_34;
+
+ if (getCharacterCurrentParams(kCharacterRebecca)[1]) {
+ if (getCharacterCurrentParams(kCharacterRebecca)[5] || (getCharacterCurrentParams(kCharacterRebecca)[5] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
+ if (getCharacterCurrentParams(kCharacterRebecca)[5] >= _currentGameSessionTicks)
+ break;
+
+ getCharacterCurrentParams(kCharacterRebecca)[5] = 0x7FFFFFFF;
+ }
+
+ bumpCath(kCarRestaurant, 55, 255);
+ } else {
+ getCharacterCurrentParams(kCharacterRebecca)[5] = 0;
+ }
+
+ break;
default:
- return;
+ break;
}
- return;
+
+ break;
default:
- return;
+ break;
}
}
@@ -1080,62 +1337,74 @@ void LogicManager::CONS_Rebecca_InComp1(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_InComp1(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8]) {
- case 1:
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoCorrOtis, "623Ce", 36, 0, 0);
- break;
- case 2:
- setDoor(36, 0, 2, 0, 0);
- startCycOtis(kCharacterRebecca, "504");
- break;
- case 3:
- endGraphics(kCharacterRebecca);
- getCharacter(kCharacterRebecca).characterPosition.position = 4840;
- getCharacter(kCharacterRebecca).characterPosition.location = 1;
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
- RebeccaCall(&LogicManager::CONS_Rebecca_CompLogic, 1120500, 0, 0, 0);
- break;
- case 4:
- case 5:
- if (getCharacterParams(kCharacterRebecca, 8)[0])
- goto LABEL_21;
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 5;
- RebeccaCall(&LogicManager::CONS_Rebecca_CompLogic, _gameTime + 900, 0, 0, 0);
- break;
- case 6:
- endGraphics(kCharacterRebecca);
- getCharacter(kCharacterRebecca).characterPosition.position = 4840;
- getCharacter(kCharacterRebecca).characterPosition.location = 1;
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 7;
- RebeccaCall(&LogicManager::CONS_Rebecca_CompLogic, 1120500, 0, 0, 0);
- break;
- case 7:
- case 8:
- if (getCharacterParams(kCharacterRebecca, 8)[0]) {
- LABEL_21:
- CONS_Rebecca_GoDinner(0, 0, 0, 0);
- } else {
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 8;
- RebeccaCall(&LogicManager::CONS_Rebecca_CompLogic, _gameTime + 900, 0, 0, 0);
- }
- break;
- default:
- return;
- }
- } else if (msg->action == 285528346) {
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 6;
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1111500 && !getCharacterCurrentParams(kCharacterRebecca)[1]) {
+ getCharacterCurrentParams(kCharacterRebecca)[1] = 1;
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
RebeccaCall(&LogicManager::CONS_Rebecca_DoCorrOtis, "623De", 36, 0, 0);
}
- } else if (msg->action == 12) {
+
+ break;
+ case 12:
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
RebeccaCall(&LogicManager::CONS_Rebecca_DoWait, 900, 0, 0, 0);
- } else if (msg->action == 0 && _gameTime > 1111500 && !getCharacterCurrentParams(kCharacterRebecca)[1]) {
- getCharacterCurrentParams(kCharacterRebecca)[1] = 1;
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
+ break;
+ case 18:
+ switch (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8]) {
+ case 1:
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoCorrOtis, "623Ce", 36, 0, 0);
+ break;
+ case 2:
+ setDoor(36, kCharacterCath, 2, 0, 0);
+ startCycOtis(kCharacterRebecca, "504");
+ break;
+ case 3:
+ endGraphics(kCharacterRebecca);
+ getCharacter(kCharacterRebecca).characterPosition.position = 4840;
+ getCharacter(kCharacterRebecca).characterPosition.location = 1;
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
+ RebeccaCall(&LogicManager::CONS_Rebecca_CompLogic, 1120500, 0, 0, 0);
+ break;
+ case 4:
+ case 5:
+ if (getCharacterParams(kCharacterRebecca, 8)[0]) {
+ CONS_Rebecca_GoDinner(0, 0, 0, 0);
+ } else {
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 5;
+ RebeccaCall(&LogicManager::CONS_Rebecca_CompLogic, _gameTime + 900, 0, 0, 0);
+ }
+
+ break;
+ case 6:
+ endGraphics(kCharacterRebecca);
+ getCharacter(kCharacterRebecca).characterPosition.position = 4840;
+ getCharacter(kCharacterRebecca).characterPosition.location = 1;
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 7;
+ RebeccaCall(&LogicManager::CONS_Rebecca_CompLogic, 1120500, 0, 0, 0);
+ break;
+ case 7:
+ case 8:
+ if (getCharacterParams(kCharacterRebecca, 8)[0]) {
+ CONS_Rebecca_GoDinner(0, 0, 0, 0);
+ } else {
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 8;
+ RebeccaCall(&LogicManager::CONS_Rebecca_CompLogic, _gameTime + 900, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 285528346:
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 6;
RebeccaCall(&LogicManager::CONS_Rebecca_DoCorrOtis, "623De", 36, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1150,81 +1419,106 @@ void LogicManager::CONS_Rebecca_GoDinner(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_GoDinner(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8]) {
- case 1:
- startCycOtis(kCharacterRebecca, "012D");
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1199", 0, 0, 0);
- break;
- case 2:
- if (!inDiningRoom(kCharacterCath))
- goto LABEL_30;
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1199A", 0, 0, 0);
- break;
- case 3:
- _gameProgress[kProgressFieldBC] = 1;
- LABEL_30:
- if (!inDiningRoom(kCharacterAnna))
- goto LABEL_34;
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1199B", 0, 0, 0);
- break;
- case 4:
- LABEL_34:
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 5;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1199C", 0, 0, 0);
- break;
- case 6:
- CONS_Rebecca_AfterDinner(0, 0, 0, 0);
- break;
- case 8:
- send(kCharacterRebecca, kCharacterWaiter1, 136702400, 0);
- startCycOtis(kCharacterRebecca, "012G");
- getCharacterCurrentParams(kCharacterRebecca)[0] = 1;
- break;
- default:
- return;
- }
- } else if (msg->action == 123712592) {
- startCycOtis(kCharacterWaiter1, "BLANK");
- startCycOtis(kCharacterRebecca, "012E");
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 8;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1200", 0, 0, 0);
- }
- } else if (msg->action == 12) {
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
- RebeccaCall(&LogicManager::CONS_Rebecca_GotoDinner, 1, 0, 0, 0);
- } else if (msg->action == 0) {
+ switch (msg->action) {
+ case 0:
if (_gameTime > 1134000 && !getCharacterCurrentParams(kCharacterRebecca)[1]) {
getCharacterCurrentParams(kCharacterRebecca)[1] = 1;
send(kCharacterRebecca, kCharacterWaiter1, 223712416, 0);
}
+
if (getCharacterCurrentParams(kCharacterRebecca)[0]) {
if (_gameTime > 1165500 && !getCharacterCurrentParams(kCharacterRebecca)[2]) {
getCharacterCurrentParams(kCharacterRebecca)[2] = 1;
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 6;
RebeccaCall(&LogicManager::CONS_Rebecca_ReturnFromDinner, 0, 0, 0, 0);
- return;
+ break;
}
+
if (getCharacterCurrentParams(kCharacterRebecca)[3] != 0x7FFFFFFF && _gameTime) {
if (_gameTime <= 1161000) {
if (!inDiningRoom(kCharacterCath) || !getCharacterCurrentParams(kCharacterRebecca)[3]) {
getCharacterCurrentParams(kCharacterRebecca)[3] = _gameTime + 150;
- if (_gameTime == -150)
- goto LABEL_23;
+ if (_gameTime == -150) {
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 7;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1200A", 0, 0, 0);
+ break;
+ }
}
+
if (getCharacterCurrentParams(kCharacterRebecca)[3] >= _gameTime)
- return;
+ break;
}
+
getCharacterCurrentParams(kCharacterRebecca)[3] = 0x7FFFFFFF;
- LABEL_23:
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 7;
RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1200A", 0, 0, 0);
}
}
+
+ break;
+ case 12:
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
+ RebeccaCall(&LogicManager::CONS_Rebecca_GotoDinner, 1, 0, 0, 0);
+ break;
+ case 18:
+ switch (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8]) {
+ case 1:
+ startCycOtis(kCharacterRebecca, "012D");
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1199", 0, 0, 0);
+ break;
+ case 2:
+ if (!inDiningRoom(kCharacterCath)) {
+ if (!inDiningRoom(kCharacterAnna)) {
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 5;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1199C", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1199B", 0, 0, 0);
+ }
+ } else {
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1199A", 0, 0, 0);
+ }
+
+ break;
+ case 3:
+ _gameProgress[kProgressFieldBC] = 1;
+
+ if (!inDiningRoom(kCharacterAnna)) {
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 5;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1199C", 0, 0, 0);
+ } else {
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1199B", 0, 0, 0);
+ }
+
+ break;
+ case 4:
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 5;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1199C", 0, 0, 0);
+ break;
+ case 6:
+ CONS_Rebecca_AfterDinner(0, 0, 0, 0);
+ break;
+ case 8:
+ send(kCharacterRebecca, kCharacterWaiter1, 136702400, 0);
+ startCycOtis(kCharacterRebecca, "012G");
+ getCharacterCurrentParams(kCharacterRebecca)[0] = 1;
+ break;
+ default:
+ break;
+ }
+
+ break;
+ case 123712592:
+ startCycOtis(kCharacterWaiter1, "BLANK");
+ startCycOtis(kCharacterRebecca, "012E");
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 8;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1200", 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1239,16 +1533,22 @@ void LogicManager::CONS_Rebecca_AfterDinner(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_AfterDinner(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
RebeccaCall(&LogicManager::CONS_Rebecca_CompLogic, 1184400, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 1) {
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
RebeccaCall(&LogicManager::CONS_Rebecca_GotoSalon, 1, 0, 0, 0);
} else if (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 2) {
CONS_Rebecca_InSalon1B(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -1263,46 +1563,49 @@ void LogicManager::CONS_Rebecca_InSalon1B(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_InSalon1B(HAND_PARAMS) {
- if (msg->action <= 18) {
- switch (msg->action) {
- case 0:
- if (_gameTime > 1224000 && !getCharacterCurrentParams(kCharacterRebecca)[1]) {
- getCharacterCurrentParams(kCharacterRebecca)[1] = 1;
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoBlockSeqOtis, "118H", 5, 52, 0);
- return;
- }
- if (getCharacterCurrentParams(kCharacterRebecca)[0]) {
- if (getCharacterCurrentParams(kCharacterRebecca)[2] || (getCharacterCurrentParams(kCharacterRebecca)[2] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
- if (getCharacterCurrentParams(kCharacterRebecca)[2] >= _currentGameSessionTicks)
- return;
+ switch (msg->action) {
+ case 0:
+ if (_gameTime > 1224000 && !getCharacterCurrentParams(kCharacterRebecca)[1]) {
+ getCharacterCurrentParams(kCharacterRebecca)[1] = 1;
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoBlockSeqOtis, "118H", 5, 52, 0);
+ break;
+ }
- getCharacterCurrentParams(kCharacterRebecca)[2] = 0x7FFFFFFF;
- }
+ if (getCharacterCurrentParams(kCharacterRebecca)[0]) {
+ if (getCharacterCurrentParams(kCharacterRebecca)[2] || (getCharacterCurrentParams(kCharacterRebecca)[2] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
+ if (getCharacterCurrentParams(kCharacterRebecca)[2] >= _currentGameSessionTicks)
+ break;
- bumpCath(kCarRestaurant, 51, 255);
- }
- break;
- case 12:
- startCycOtis(kCharacterRebecca, "118D");
- break;
- case 17:
- getCharacterCurrentParams(kCharacterRebecca)[0] = 1;
- if (!checkCathDir(kCarRestaurant, 52))
- getCharacterCurrentParams(kCharacterRebecca)[0] = 0;
- getCharacterCurrentParams(kCharacterRebecca)[2] = 0;
- break;
- case 18:
- if (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 1) {
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
- RebeccaCall(&LogicManager::CONS_Rebecca_ReturnFromSalon, 0, 0, 0, 0);
- } else if (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 2) {
- CONS_Rebecca_Asleep(0, 0, 0, 0);
+ getCharacterCurrentParams(kCharacterRebecca)[2] = 0x7FFFFFFF;
}
- break;
- default:
- return;
+
+ bumpCath(kCarRestaurant, 51, 255);
+ }
+
+ break;
+ case 12:
+ startCycOtis(kCharacterRebecca, "118D");
+ break;
+ case 17:
+ getCharacterCurrentParams(kCharacterRebecca)[0] = 1;
+
+ if (!checkCathDir(kCarRestaurant, 52))
+ getCharacterCurrentParams(kCharacterRebecca)[0] = 0;
+
+ getCharacterCurrentParams(kCharacterRebecca)[2] = 0;
+ break;
+ case 18:
+ if (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 1) {
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
+ RebeccaCall(&LogicManager::CONS_Rebecca_ReturnFromSalon, 0, 0, 0, 0);
+ } else if (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 2) {
+ CONS_Rebecca_Asleep(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -1317,13 +1620,17 @@ void LogicManager::CONS_Rebecca_Asleep(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_Asleep(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterRebecca).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterRebecca).characterPosition.position = 4840;
getCharacter(kCharacterRebecca).characterPosition.location = 1;
- setDoor(36, 0, 1, 10, 9);
- setDoor(52, 0, 1, 10, 9);
+ setDoor(36, kCharacterCath, 1, 10, 9);
+ setDoor(52, kCharacterCath, 1, 10, 9);
endGraphics(kCharacterRebecca);
+ break;
+ default:
+ break;
}
}
@@ -1338,21 +1645,24 @@ void LogicManager::CONS_Rebecca_StartPart2(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_StartPart2(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterRebecca);
- getCharacter(kCharacterRebecca).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterRebecca).characterPosition.position = 4840;
- getCharacter(kCharacterRebecca).characterPosition.location = 1;
- getCharacter(kCharacterRebecca).clothes = 0;
- getCharacter(kCharacterRebecca).inventoryItem = 0;
- setDoor(36, 0, 1, 10, 9);
- setDoor(52, 0, 1, 10, 9);
- setModel(110, 2);
- getCharacterParams(kCharacterRebecca, 8)[1] = 1;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Rebecca_InComp2(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterRebecca);
+ getCharacter(kCharacterRebecca).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterRebecca).characterPosition.position = 4840;
+ getCharacter(kCharacterRebecca).characterPosition.location = 1;
+ getCharacter(kCharacterRebecca).clothes = 0;
+ getCharacter(kCharacterRebecca).inventoryItem = 0;
+ setDoor(36, kCharacterCath, 1, 10, 9);
+ setDoor(52, kCharacterCath, 1, 10, 9);
+ setModel(110, 2);
+ getCharacterParams(kCharacterRebecca, 8)[1] = 1;
+ break;
+ default:
+ break;
}
}
@@ -1367,16 +1677,22 @@ void LogicManager::CONS_Rebecca_InComp2(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_InComp2(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
RebeccaCall(&LogicManager::CONS_Rebecca_CompLogic, 1764000, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 1) {
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
RebeccaCall(&LogicManager::CONS_Rebecca_GotoSalon, 0, 0, 0, 0);
} else if (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 2) {
CONS_Rebecca_InSalon2(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -1391,61 +1707,83 @@ void LogicManager::CONS_Rebecca_InSalon2(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_InSalon2(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action > 125496184) {
- if (msg->action == 155465152) {
- startCycOtis(kCharacterRebecca, "BLANK");
- } else if (msg->action == 155980128) {
- getCharacterCurrentParams(kCharacterRebecca)[2] = 1;
- getCharacterCurrentParams(kCharacterRebecca)[0] = 1;
+ switch (msg->action) {
+ case 0:
+ if (!getCharacterCurrentParams(kCharacterRebecca)[0] && getCharacterCurrentParams(kCharacterRebecca)[3] != 0x7FFFFFFF && _gameTime) {
+ bool skip = false;
+
+ if (_gameTime > 15803100) {
+ getCharacterCurrentParams(kCharacterRebecca)[3] = 0x7FFFFFFF;
+ playDialog(kCharacterRebecca, "Reb2001", -1, 0);
+ _gameProgress[kProgressFieldB0] = 1;
+ getCharacterCurrentParams(kCharacterRebecca)[1] = 1;
+ skip = true;
+ }
+
+ if (!skip) {
+ if (!inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterRebecca)[3]) {
+ getCharacterCurrentParams(kCharacterRebecca)[3] = _gameTime + 450;
+ if (_gameTime == -450) {
+ skip = true;
+ playDialog(kCharacterRebecca, "Reb2001", -1, 0);
+ _gameProgress[kProgressFieldB0] = 1;
+ getCharacterCurrentParams(kCharacterRebecca)[1] = 1;
+ }
+ }
+
+ if (!skip && getCharacterCurrentParams(kCharacterRebecca)[3] < _gameTime) {
+ getCharacterCurrentParams(kCharacterRebecca)[3] = 0x7FFFFFFF;
+ playDialog(kCharacterRebecca, "Reb2001", -1, 0);
+ _gameProgress[kProgressFieldB0] = 1;
+ getCharacterCurrentParams(kCharacterRebecca)[1] = 1;
+ }
}
- } else if (msg->action == 125496184) {
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
- RebeccaCall(&LogicManager::CONS_Rebecca_ReturnFromSalon, 0, 0, 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 1) {
- CONS_Rebecca_OpenComp2(0, 0, 0, 0);
- }
- return;
- }
- if (msg->action == 12) {
- startCycOtis(kCharacterRebecca, "107B");
- return;
- }
- if (msg->action) {
- if (msg->action == 2)
- getCharacterCurrentParams(kCharacterRebecca)[1] = 0;
- return;
- }
- if (!getCharacterCurrentParams(kCharacterRebecca)[0] && getCharacterCurrentParams(kCharacterRebecca)[3] != 0x7FFFFFFF && _gameTime) {
- if (_gameTime > 15803100)
- goto LABEL_21;
- if (!inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterRebecca)[3]) {
- getCharacterCurrentParams(kCharacterRebecca)[3] = _gameTime + 450;
- if (_gameTime == -450)
- goto LABEL_22;
- }
- if (getCharacterCurrentParams(kCharacterRebecca)[3] < _gameTime) {
- LABEL_21:
- getCharacterCurrentParams(kCharacterRebecca)[3] = 0x7FFFFFFF;
- LABEL_22:
- playDialog(kCharacterRebecca, "Reb2001", -1, 0);
- _gameProgress[kProgressFieldB0] = 1;
- getCharacterCurrentParams(kCharacterRebecca)[1] = 1;
}
- }
- if (getCharacterCurrentParams(kCharacterRebecca)[2] && !getCharacterCurrentParams(kCharacterRebecca)[1] && getCharacterCurrentParams(kCharacterRebecca)[4] != 0x7FFFFFFF && _gameTime) {
- if (_gameTime <= 10881000) {
- if (!inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterRebecca)[4]) {
- getCharacterCurrentParams(kCharacterRebecca)[4] = _gameTime + 450;
- if (_gameTime == -450)
- goto LABEL_33;
+
+ if (getCharacterCurrentParams(kCharacterRebecca)[2] && !getCharacterCurrentParams(kCharacterRebecca)[1] && getCharacterCurrentParams(kCharacterRebecca)[4] != 0x7FFFFFFF && _gameTime) {
+ if (_gameTime <= 10881000) {
+ if (!inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterRebecca)[4]) {
+ getCharacterCurrentParams(kCharacterRebecca)[4] = _gameTime + 450;
+ if (_gameTime == -450) {
+ send(kCharacterRebecca, kCharacterAugust, 169358379, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterRebecca)[4] >= _gameTime)
+ break;
}
- if (getCharacterCurrentParams(kCharacterRebecca)[4] >= _gameTime)
- return;
+
+ getCharacterCurrentParams(kCharacterRebecca)[4] = 0x7FFFFFFF;
+ send(kCharacterRebecca, kCharacterAugust, 169358379, 0);
+ }
+
+ break;
+ case 2:
+ getCharacterCurrentParams(kCharacterRebecca)[1] = 0;
+ break;
+ case 12:
+ startCycOtis(kCharacterRebecca, "107B");
+ break;
+ case 18:
+ if (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 1) {
+ CONS_Rebecca_OpenComp2(0, 0, 0, 0);
}
- getCharacterCurrentParams(kCharacterRebecca)[4] = 0x7FFFFFFF;
- LABEL_33:
- send(kCharacterRebecca, kCharacterAugust, 169358379, 0);
+
+ break;
+ case 125496184:
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
+ RebeccaCall(&LogicManager::CONS_Rebecca_ReturnFromSalon, 0, 0, 0, 0);
+ break;
+ case 155465152:
+ startCycOtis(kCharacterRebecca, "BLANK");
+ break;
+ case 155980128:
+ getCharacterCurrentParams(kCharacterRebecca)[2] = 1;
+ getCharacterCurrentParams(kCharacterRebecca)[0] = 1;
+ break;
+ default:
+ break;
}
}
@@ -1460,17 +1798,23 @@ void LogicManager::CONS_Rebecca_OpenComp2(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_OpenComp2(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
RebeccaCall(&LogicManager::CONS_Rebecca_DoWait, 900, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 1) {
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
RebeccaCall(&LogicManager::CONS_Rebecca_DoCorrOtis, "623CE", 36, 0, 0);
} else if (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 2) {
- setDoor(36, 0, 2, 0, 0);
+ setDoor(36, kCharacterCath, 2, 0, 0);
startCycOtis(kCharacterRebecca, "504");
}
+
+ break;
+ default:
+ break;
}
}
@@ -1485,17 +1829,20 @@ void LogicManager::CONS_Rebecca_StartPart3(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_StartPart3(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterRebecca);
- getCharacter(kCharacterRebecca).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterRebecca).characterPosition.position = 4840;
- getCharacter(kCharacterRebecca).characterPosition.location = 1;
- getCharacter(kCharacterRebecca).clothes = 0;
- getCharacter(kCharacterRebecca).inventoryItem = 0;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Rebecca_InComp3a(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterRebecca);
+ getCharacter(kCharacterRebecca).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterRebecca).characterPosition.position = 4840;
+ getCharacter(kCharacterRebecca).characterPosition.location = 1;
+ getCharacter(kCharacterRebecca).clothes = 0;
+ getCharacter(kCharacterRebecca).inventoryItem = 0;
+ break;
+ default:
+ break;
}
}
@@ -1510,11 +1857,19 @@ void LogicManager::CONS_Rebecca_InComp3a(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_InComp3a(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
RebeccaCall(&LogicManager::CONS_Rebecca_CompLogic, 2016000, 0, 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 1) {
- CONS_Rebecca_GoLunch(0, 0, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 1) {
+ CONS_Rebecca_GoLunch(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -1529,44 +1884,65 @@ void LogicManager::CONS_Rebecca_GoLunch(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_GoLunch(HAND_PARAMS) {
- if (msg->action <= 12) {
- if (msg->action == 12) {
- getCharacter(kCharacterRebecca).characterPosition.location = 0;
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
- RebeccaCall(&LogicManager::CONS_Rebecca_GotoDinner, 1, 0, 0, 0);
- return;
- }
- if (msg->action) {
- if (msg->action == 2) {
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 5;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "Reb3004", 0, 0, 0);
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterRebecca)[1] == 0x7FFFFFFF || !_gameTime) {
+ if (getCharacterCurrentParams(kCharacterRebecca)[0] && _gameTime > 2052000 && !getCharacterCurrentParams(kCharacterRebecca)[2]) {
+ getCharacterCurrentParams(kCharacterRebecca)[2] = 1;
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
+ RebeccaCall(&LogicManager::CONS_Rebecca_ReturnFromDinner, 0, 0, 0, 0);
}
- return;
+
+ break;
}
- if (getCharacterCurrentParams(kCharacterRebecca)[1] == 0x7FFFFFFF || !_gameTime)
- goto LABEL_18;
+
if (_gameTime <= 1386000) {
if (!inDiningRoom(kCharacterCath) || !getCharacterCurrentParams(kCharacterRebecca)[1]) {
getCharacterCurrentParams(kCharacterRebecca)[1] = _gameTime;
- if (!_gameTime)
- goto LABEL_17;
+ if (!_gameTime) {
+ send(kCharacterRebecca, kCharacterWaiter1, 223712416, 0);
+
+ if (getCharacterCurrentParams(kCharacterRebecca)[0] && _gameTime > 2052000 && !getCharacterCurrentParams(kCharacterRebecca)[2]) {
+ getCharacterCurrentParams(kCharacterRebecca)[2] = 1;
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
+ RebeccaCall(&LogicManager::CONS_Rebecca_ReturnFromDinner, 0, 0, 0, 0);
+ }
+
+ break;
+ }
}
+
if (getCharacterCurrentParams(kCharacterRebecca)[1] >= _gameTime) {
- LABEL_18:
if (getCharacterCurrentParams(kCharacterRebecca)[0] && _gameTime > 2052000 && !getCharacterCurrentParams(kCharacterRebecca)[2]) {
getCharacterCurrentParams(kCharacterRebecca)[2] = 1;
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
RebeccaCall(&LogicManager::CONS_Rebecca_ReturnFromDinner, 0, 0, 0, 0);
}
- return;
+
+ break;
}
}
+
getCharacterCurrentParams(kCharacterRebecca)[1] = 0x7FFFFFFF;
- LABEL_17:
send(kCharacterRebecca, kCharacterWaiter1, 223712416, 0);
- goto LABEL_18;
- }
- if (msg->action == 18) {
+
+ if (getCharacterCurrentParams(kCharacterRebecca)[0] && _gameTime > 2052000 && !getCharacterCurrentParams(kCharacterRebecca)[2]) {
+ getCharacterCurrentParams(kCharacterRebecca)[2] = 1;
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
+ RebeccaCall(&LogicManager::CONS_Rebecca_ReturnFromDinner, 0, 0, 0, 0);
+ }
+
+ break;
+ case 2:
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 5;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "Reb3004", 0, 0, 0);
+ break;
+ case 12:
+ getCharacter(kCharacterRebecca).characterPosition.location = 0;
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
+ RebeccaCall(&LogicManager::CONS_Rebecca_GotoDinner, 1, 0, 0, 0);
+ break;
+ case 18:
switch (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8]) {
case 1:
startCycOtis(kCharacterRebecca, "012D");
@@ -1582,12 +1958,19 @@ void LogicManager::HAND_Rebecca_GoLunch(HAND_PARAMS) {
startCycOtis(kCharacterRebecca, "012G");
getCharacterCurrentParams(kCharacterRebecca)[0] = 1;
break;
+ default:
+ break;
}
- } else if (msg->action == 123712592) {
+
+ break;
+ case 123712592:
startCycOtis(kCharacterWaiter1, "BLANK");
playDialog(kCharacterRebecca, "Reb3003", -1, 0);
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
RebeccaCall(&LogicManager::CONS_Rebecca_DoSeqOtis, "012E", 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1602,11 +1985,19 @@ void LogicManager::CONS_Rebecca_InComp3b(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_InComp3b(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
RebeccaCall(&LogicManager::CONS_Rebecca_CompLogic, 2070000, 0, 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 1) {
- CONS_Rebecca_GoSalon(0, 0, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 1) {
+ CONS_Rebecca_GoSalon(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -1625,40 +2016,84 @@ void LogicManager::HAND_Rebecca_GoSalon(HAND_PARAMS) {
case 0:
if (!getCharacterCurrentParams(kCharacterRebecca)[1])
getCharacterCurrentParams(kCharacterRebecca)[1] = _gameTime + 1800;
- if (getCharacterCurrentParams(kCharacterRebecca)[3] == 0x7FFFFFFF || getCharacterCurrentParams(kCharacterRebecca)[1] >= _gameTime)
- goto LABEL_19;
- if (_gameTime > 2083500)
- goto LABEL_12;
- if (!inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterRebecca)[3]) {
- getCharacterCurrentParams(kCharacterRebecca)[3] = _gameTime + 300;
- if (_gameTime == -300)
- goto LABEL_13;
- }
- if (getCharacterCurrentParams(kCharacterRebecca)[3] < _gameTime) {
- LABEL_12:
- getCharacterCurrentParams(kCharacterRebecca)[3] = 0x7FFFFFFF;
- LABEL_13:
- playDialog(kCharacterRebecca, "Reb3007", -1, 0);
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoBlockSeqOtis, "118E", 5, 52, 0);
- return;
+
+ if (getCharacterCurrentParams(kCharacterRebecca)[3] != 0x7FFFFFFF && getCharacterCurrentParams(kCharacterRebecca)[1] < _gameTime) {
+ if (_gameTime > 2083500) {
+ getCharacterCurrentParams(kCharacterRebecca)[3] = 0x7FFFFFFF;
+ playDialog(kCharacterRebecca, "Reb3007", -1, 0);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoBlockSeqOtis, "118E", 5, 52, 0);
+ break;
+ }
+
+ if (!inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterRebecca)[3]) {
+ getCharacterCurrentParams(kCharacterRebecca)[3] = _gameTime + 300;
+ if (_gameTime == -300) {
+ playDialog(kCharacterRebecca, "Reb3007", -1, 0);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoBlockSeqOtis, "118E", 5, 52, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterRebecca)[3] < _gameTime) {
+ getCharacterCurrentParams(kCharacterRebecca)[3] = 0x7FFFFFFF;
+ playDialog(kCharacterRebecca, "Reb3007", -1, 0);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoBlockSeqOtis, "118E", 5, 52, 0);
+ break;
+ }
+ }
+
+ if (!getCharacterCurrentParams(kCharacterRebecca)[0]) {
+ if (_gameTime > 2097000 && !getCharacterCurrentParams(kCharacterRebecca)[5]) {
+ getCharacterCurrentParams(kCharacterRebecca)[5] = 1;
+ getCharacter(kCharacterRebecca).inventoryItem = 0;
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoBlockSeqOtis, "118H", 5, 52, 0);
+ }
+
+ break;
}
- LABEL_19:
- if (!getCharacterCurrentParams(kCharacterRebecca)[0])
- goto LABEL_32;
+
if (!getCharacterCurrentParams(kCharacterRebecca)[2])
getCharacterCurrentParams(kCharacterRebecca)[2] = _gameTime + 9000;
- if (getCharacterCurrentParams(kCharacterRebecca)[4] == 0x7FFFFFFF || getCharacterCurrentParams(kCharacterRebecca)[2] >= _gameTime)
- goto LABEL_32;
- if (_gameTime > 2092500)
- goto LABEL_29;
+
+ if (getCharacterCurrentParams(kCharacterRebecca)[4] == 0x7FFFFFFF || getCharacterCurrentParams(kCharacterRebecca)[2] >= _gameTime) {
+ if (_gameTime > 2097000 && !getCharacterCurrentParams(kCharacterRebecca)[5]) {
+ getCharacterCurrentParams(kCharacterRebecca)[5] = 1;
+ getCharacter(kCharacterRebecca).inventoryItem = 0;
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoBlockSeqOtis, "118H", 5, 52, 0);
+ }
+
+ break;
+ }
+
+ if (_gameTime > 2092500) {
+ getCharacterCurrentParams(kCharacterRebecca)[4] = 0x7FFFFFFF;
+ getCharacter(kCharacterRebecca).inventoryItem = 0;
+ playDialog(kCharacterRebecca, "Reb3008", -1, 60);
+ blockView(kCharacterRebecca, kCarRestaurant, 52);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoComplexSeqOtis, "118G1", "118G2", 24, 0);
+ break;
+ }
+
if (!inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterRebecca)[4]) {
getCharacterCurrentParams(kCharacterRebecca)[4] = _gameTime + 300;
- if (_gameTime == -300)
- goto LABEL_30;
+
+ if (_gameTime == -300) {
+ getCharacter(kCharacterRebecca).inventoryItem = 0;
+ playDialog(kCharacterRebecca, "Reb3008", -1, 60);
+ blockView(kCharacterRebecca, kCarRestaurant, 52);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoComplexSeqOtis, "118G1", "118G2", 24, 0);
+ break;
+ }
}
+
if (getCharacterCurrentParams(kCharacterRebecca)[4] >= _gameTime) {
- LABEL_32:
if (_gameTime > 2097000 && !getCharacterCurrentParams(kCharacterRebecca)[5]) {
getCharacterCurrentParams(kCharacterRebecca)[5] = 1;
getCharacter(kCharacterRebecca).inventoryItem = 0;
@@ -1666,25 +2101,24 @@ void LogicManager::HAND_Rebecca_GoSalon(HAND_PARAMS) {
RebeccaCall(&LogicManager::CONS_Rebecca_DoBlockSeqOtis, "118H", 5, 52, 0);
}
} else {
- LABEL_29:
getCharacterCurrentParams(kCharacterRebecca)[4] = 0x7FFFFFFF;
- LABEL_30:
getCharacter(kCharacterRebecca).inventoryItem = 0;
playDialog(kCharacterRebecca, "Reb3008", -1, 60);
blockView(kCharacterRebecca, kCarRestaurant, 52);
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
RebeccaCall(&LogicManager::CONS_Rebecca_DoComplexSeqOtis, "118G1", "118G2", 24, 0);
}
+
break;
case 1:
getCharacter(kCharacterRebecca).inventoryItem = 0;
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 6;
RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "SOP3008", 0, 0, 0);
- return;
+ break;
case 12:
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
RebeccaCall(&LogicManager::CONS_Rebecca_GotoSalon, 1, 0, 0, 0);
- return;
+ break;
case 18:
switch (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8]) {
case 1:
@@ -1694,12 +2128,85 @@ void LogicManager::HAND_Rebecca_GoSalon(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterRebecca)[0] = 1;
getCharacter(kCharacterRebecca).inventoryItem = 0x80;
startCycOtis(kCharacterRebecca, "118F");
- goto LABEL_19;
+
+ if (!getCharacterCurrentParams(kCharacterRebecca)[0]) {
+ if (_gameTime > 2097000 && !getCharacterCurrentParams(kCharacterRebecca)[5]) {
+ getCharacterCurrentParams(kCharacterRebecca)[5] = 1;
+ getCharacter(kCharacterRebecca).inventoryItem = 0;
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoBlockSeqOtis, "118H", 5, 52, 0);
+ }
+
+ break;
+ }
+
+ if (!getCharacterCurrentParams(kCharacterRebecca)[2])
+ getCharacterCurrentParams(kCharacterRebecca)[2] = _gameTime + 9000;
+
+ if (getCharacterCurrentParams(kCharacterRebecca)[4] == 0x7FFFFFFF || getCharacterCurrentParams(kCharacterRebecca)[2] >= _gameTime) {
+ if (_gameTime > 2097000 && !getCharacterCurrentParams(kCharacterRebecca)[5]) {
+ getCharacterCurrentParams(kCharacterRebecca)[5] = 1;
+ getCharacter(kCharacterRebecca).inventoryItem = 0;
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoBlockSeqOtis, "118H", 5, 52, 0);
+ }
+
+ break;
+ }
+
+ if (_gameTime > 2092500) {
+ getCharacterCurrentParams(kCharacterRebecca)[4] = 0x7FFFFFFF;
+ getCharacter(kCharacterRebecca).inventoryItem = 0;
+ playDialog(kCharacterRebecca, "Reb3008", -1, 60);
+ blockView(kCharacterRebecca, kCarRestaurant, 52);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoComplexSeqOtis, "118G1", "118G2", 24, 0);
+ break;
+ }
+
+ if (!inSalon(kCharacterCath) || !getCharacterCurrentParams(kCharacterRebecca)[4]) {
+ getCharacterCurrentParams(kCharacterRebecca)[4] = _gameTime + 300;
+
+ if (_gameTime == -300) {
+ getCharacter(kCharacterRebecca).inventoryItem = 0;
+ playDialog(kCharacterRebecca, "Reb3008", -1, 60);
+ blockView(kCharacterRebecca, kCarRestaurant, 52);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoComplexSeqOtis, "118G1", "118G2", 24, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterRebecca)[4] >= _gameTime) {
+ if (_gameTime > 2097000 && !getCharacterCurrentParams(kCharacterRebecca)[5]) {
+ getCharacterCurrentParams(kCharacterRebecca)[5] = 1;
+ getCharacter(kCharacterRebecca).inventoryItem = 0;
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoBlockSeqOtis, "118H", 5, 52, 0);
+ }
+ } else {
+ getCharacterCurrentParams(kCharacterRebecca)[4] = 0x7FFFFFFF;
+ getCharacter(kCharacterRebecca).inventoryItem = 0;
+ playDialog(kCharacterRebecca, "Reb3008", -1, 60);
+ blockView(kCharacterRebecca, kCarRestaurant, 52);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoComplexSeqOtis, "118G1", "118G2", 24, 0);
+ }
+
+ break;
case 3:
endGraphics(kCharacterSophie);
releaseView(kCharacterRebecca, kCarRestaurant, 52);
startCycOtis(kCharacterRebecca, "118D");
- goto LABEL_32;
+
+ if (_gameTime > 2097000 && !getCharacterCurrentParams(kCharacterRebecca)[5]) {
+ getCharacterCurrentParams(kCharacterRebecca)[5] = 1;
+ getCharacter(kCharacterRebecca).inventoryItem = 0;
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoBlockSeqOtis, "118H", 5, 52, 0);
+ }
+
+ break;
case 4:
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 5;
RebeccaCall(&LogicManager::CONS_Rebecca_ReturnFromSalon, 0, 0, 0, 0);
@@ -1708,11 +2215,12 @@ void LogicManager::HAND_Rebecca_GoSalon(HAND_PARAMS) {
CONS_Rebecca_ClosedComp(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
- return;
+
+ break;
default:
- return;
+ break;
}
}
@@ -1727,11 +2235,19 @@ void LogicManager::CONS_Rebecca_ClosedComp(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_ClosedComp(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
RebeccaCall(&LogicManager::CONS_Rebecca_CompLogic, 2110500, 0, 0, 0);
- } else if (msg->action == 18 && getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 1) {
- CONS_Rebecca_GoConcert(0, 0, 0, 0);
+ break;
+ case 18:
+ if (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 1) {
+ CONS_Rebecca_GoConcert(0, 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -1746,13 +2262,15 @@ void LogicManager::CONS_Rebecca_GoConcert(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_GoConcert(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterRebecca).characterPosition.location = 0;
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
RebeccaCall(&LogicManager::CONS_Rebecca_DoBriefCorrOtis, "624Be", 36, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 1) {
- setDoor(36, 0, 0, 10, 9);
+ setDoor(36, kCharacterCath, 0, 10, 9);
send(kCharacterRebecca, kCharacterSophie, 259921280, 0);
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
RebeccaCall(&LogicManager::CONS_Rebecca_DoWalk, 2, 9270, 0, 0);
@@ -1760,6 +2278,10 @@ void LogicManager::HAND_Rebecca_GoConcert(HAND_PARAMS) {
send(kCharacterRebecca, kCharacterSophie, 123668192, 0);
CONS_Rebecca_Concert(0, 0, 0, 0);
}
+
+ break;
+ default:
+ break;
}
}
@@ -1774,15 +2296,20 @@ void LogicManager::CONS_Rebecca_Concert(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_Concert(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
endGraphics(kCharacterRebecca);
- setDoor(36, 0, 0, 10, 9);
- setDoor(52, 0, 0, 10, 9);
+ setDoor(36, kCharacterCath, 0, 10, 9);
+ setDoor(52, kCharacterCath, 0, 10, 9);
getCharacter(kCharacterRebecca).characterPosition.car = kCarKronos;
getCharacter(kCharacterRebecca).characterPosition.position = 6000;
getCharacter(kCharacterRebecca).characterPosition.location = 1;
- } else if (msg->action == 191668032) {
+ break;
+ case 191668032:
CONS_Rebecca_LeaveConcert(0, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1797,11 +2324,13 @@ void LogicManager::CONS_Rebecca_LeaveConcert(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_LeaveConcert(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterRebecca).characterPosition.position = 9270;
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
RebeccaCall(&LogicManager::CONS_Rebecca_DoWalk, 3, 2740, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
switch (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8]) {
case 1:
send(kCharacterRebecca, kCharacterSophie, 292775040, 0);
@@ -1822,8 +2351,12 @@ void LogicManager::HAND_Rebecca_LeaveConcert(HAND_PARAMS) {
CONS_Rebecca_SiestaTime(0, 0, 0, 0);
break;
default:
- return;
+ break;
}
+
+ break;
+ default:
+ break;
}
}
@@ -1838,10 +2371,14 @@ void LogicManager::CONS_Rebecca_SiestaTime(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_SiestaTime(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacterParams(kCharacterRebecca, 8)[1] = 1;
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
RebeccaCall(&LogicManager::CONS_Rebecca_CompLogic, 15803100, 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -1856,20 +2393,23 @@ void LogicManager::CONS_Rebecca_StartPart4(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_StartPart4(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterRebecca);
- getCharacter(kCharacterRebecca).characterPosition.car = kCarRedSleeping;
- getCharacter(kCharacterRebecca).characterPosition.position = 4840;
- getCharacter(kCharacterRebecca).characterPosition.location = 1;
- getCharacter(kCharacterRebecca).clothes = 0;
- getCharacter(kCharacterRebecca).inventoryItem = 0;
- setModel(110, 3);
- getCharacterParams(kCharacterRebecca, 8)[0] = 0;
- getCharacterParams(kCharacterRebecca, 8)[1] = 1;
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Rebecca_InComp4(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterRebecca);
+ getCharacter(kCharacterRebecca).characterPosition.car = kCarRedSleeping;
+ getCharacter(kCharacterRebecca).characterPosition.position = 4840;
+ getCharacter(kCharacterRebecca).characterPosition.location = 1;
+ getCharacter(kCharacterRebecca).clothes = 0;
+ getCharacter(kCharacterRebecca).inventoryItem = 0;
+ setModel(110, 3);
+ getCharacterParams(kCharacterRebecca, 8)[0] = 0;
+ getCharacterParams(kCharacterRebecca, 8)[1] = 1;
+ break;
+ default:
+ break;
}
}
@@ -1884,10 +2424,12 @@ void LogicManager::CONS_Rebecca_InComp4(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_InComp4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
RebeccaCall(&LogicManager::CONS_Rebecca_CompLogic, 2385000, 0, 0, 0);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 1 || getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 2) {
if (getCharacterParams(kCharacterRebecca, 8)[0]) {
CONS_Rebecca_GoDinner4(0, 0, 0, 0);
@@ -1896,6 +2438,10 @@ void LogicManager::HAND_Rebecca_InComp4(HAND_PARAMS) {
RebeccaCall(&LogicManager::CONS_Rebecca_CompLogic, _gameTime + 900, 0, 0, 0);
}
}
+
+ break;
+ default:
+ break;
}
}
@@ -1910,88 +2456,114 @@ void LogicManager::CONS_Rebecca_GoDinner4(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_GoDinner4(HAND_PARAMS) {
- if (msg->action > 12) {
- if (msg->action == 18) {
- switch (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8]) {
- case 1:
- startCycOtis(kCharacterRebecca, "012D");
- getCharacter(kCharacterRebecca).characterPosition.location = 1;
- break;
- case 2:
- goto LABEL_36;
- case 3:
- CONS_Rebecca_Asleep4(0, 0, 0, 0);
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterRebecca)[2] != 0x7FFFFFFF && _gameTime) {
+ bool skip = false;
+
+ if (_gameTime > 2412000) {
+ getCharacterCurrentParams(kCharacterRebecca)[2] = 0x7FFFFFFF;
+ send(kCharacterRebecca, kCharacterWaiter1, 223712416, 0);
+ skip = true;
+ }
+
+ if (!skip) {
+ if (!inDiningRoom(kCharacterCath) || !getCharacterCurrentParams(kCharacterRebecca)[2]) {
+ getCharacterCurrentParams(kCharacterRebecca)[2] = _gameTime;
+ if (!_gameTime) {
+ skip = true;
+ send(kCharacterRebecca, kCharacterWaiter1, 223712416, 0);
+ }
+ }
+
+ if (!skip && getCharacterCurrentParams(kCharacterRebecca)[2] < _gameTime) {
+ getCharacterCurrentParams(kCharacterRebecca)[2] = 0x7FFFFFFF;
+ send(kCharacterRebecca, kCharacterWaiter1, 223712416, 0);
+ }
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterRebecca)[0] && getCharacterCurrentParams(kCharacterRebecca)[3] != 0x7FFFFFFF && _gameTime) {
+ if (_gameTime > 2430000) {
+ getCharacterCurrentParams(kCharacterRebecca)[3] = 0x7FFFFFFF;
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "Reb4004", 0, 0, 0);
break;
- case 4:
- send(kCharacterRebecca, kCharacterWaiter1, 136702400, 0);
- startCycOtis(kCharacterRebecca, "012G");
- getCharacterCurrentParams(kCharacterRebecca)[1] = 1;
+ }
+
+ if (!inDiningRoom(kCharacterCath) || !getCharacterCurrentParams(kCharacterRebecca)[3]) {
+ getCharacterCurrentParams(kCharacterRebecca)[3] = _gameTime + 150;
+ if (_gameTime == -150) {
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "Reb4004", 0, 0, 0);
+ break;
+ }
+ }
+
+ if (getCharacterCurrentParams(kCharacterRebecca)[3] < _gameTime) {
+ getCharacterCurrentParams(kCharacterRebecca)[3] = 0x7FFFFFFF;
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "Reb4004", 0, 0, 0);
break;
- default:
- return;
}
- } else if (msg->action == 123712592) {
- startCycOtis(kCharacterWaiter1, "BLANK");
- playDialog(kCharacterRebecca, "Reb4003", -1, 0);
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoSeqOtis, "012E", 0, 0, 0);
}
- return;
- }
- if (msg->action == 12) {
+
+ if (getCharacterCurrentParams(kCharacterRebecca)[1] && _gameTime > 2443500 && !getCharacterCurrentParams(kCharacterRebecca)[4]) {
+ getCharacterCurrentParams(kCharacterRebecca)[4] = 1;
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
+ RebeccaCall(&LogicManager::CONS_Rebecca_ReturnFromDinner, 0, 0, 0, 0);
+ }
+
+ break;
+ case 2:
+ if (inDiningRoom(kCharacterCath)) {
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 5;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "Reb4004", 0, 0, 0);
+ } else {
+ getCharacterCurrentParams(kCharacterRebecca)[0] = 1;
+ }
+
+ break;
+ case 12:
getCharacter(kCharacterRebecca).characterPosition.location = 0;
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
RebeccaCall(&LogicManager::CONS_Rebecca_GotoDinner, 1, 0, 0, 0);
- return;
- }
- if (msg->action) {
- if (msg->action == 2) {
- if (inDiningRoom(kCharacterCath)) {
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 5;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "Reb4004", 0, 0, 0);
- } else {
- getCharacterCurrentParams(kCharacterRebecca)[0] = 1;
+ break;
+ case 18:
+ switch (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8]) {
+ case 1:
+ startCycOtis(kCharacterRebecca, "012D");
+ getCharacter(kCharacterRebecca).characterPosition.location = 1;
+ break;
+ case 2:
+ if (getCharacterCurrentParams(kCharacterRebecca)[1] && _gameTime > 2443500 && !getCharacterCurrentParams(kCharacterRebecca)[4]) {
+ getCharacterCurrentParams(kCharacterRebecca)[4] = 1;
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
+ RebeccaCall(&LogicManager::CONS_Rebecca_ReturnFromDinner, 0, 0, 0, 0);
}
+
+ break;
+ case 3:
+ CONS_Rebecca_Asleep4(0, 0, 0, 0);
+ break;
+ case 4:
+ send(kCharacterRebecca, kCharacterWaiter1, 136702400, 0);
+ startCycOtis(kCharacterRebecca, "012G");
+ getCharacterCurrentParams(kCharacterRebecca)[1] = 1;
+ break;
+ default:
+ break;
}
- return;
- }
- if (getCharacterCurrentParams(kCharacterRebecca)[2] != 0x7FFFFFFF && _gameTime) {
- if (_gameTime > 2412000)
- goto LABEL_16;
- if (!inDiningRoom(kCharacterCath) || !getCharacterCurrentParams(kCharacterRebecca)[2]) {
- getCharacterCurrentParams(kCharacterRebecca)[2] = _gameTime;
- if (!_gameTime)
- goto LABEL_17;
- }
- if (getCharacterCurrentParams(kCharacterRebecca)[2] < _gameTime) {
- LABEL_16:
- getCharacterCurrentParams(kCharacterRebecca)[2] = 0x7FFFFFFF;
- LABEL_17:
- send(kCharacterRebecca, kCharacterWaiter1, 223712416, 0);
- }
- }
- if (getCharacterCurrentParams(kCharacterRebecca)[0] && getCharacterCurrentParams(kCharacterRebecca)[3] != 0x7FFFFFFF && _gameTime) {
- if (_gameTime > 2430000)
- goto LABEL_26;
- if (!inDiningRoom(kCharacterCath) || !getCharacterCurrentParams(kCharacterRebecca)[3]) {
- getCharacterCurrentParams(kCharacterRebecca)[3] = _gameTime + 150;
- if (_gameTime == -150)
- goto LABEL_27;
- }
- if (getCharacterCurrentParams(kCharacterRebecca)[3] < _gameTime) {
- LABEL_26:
- getCharacterCurrentParams(kCharacterRebecca)[3] = 0x7FFFFFFF;
- LABEL_27:
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "Reb4004", 0, 0, 0);
- return;
- }
- }
-LABEL_36:
- if (getCharacterCurrentParams(kCharacterRebecca)[1] && _gameTime > 2443500 && !getCharacterCurrentParams(kCharacterRebecca)[4]) {
- getCharacterCurrentParams(kCharacterRebecca)[4] = 1;
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
- RebeccaCall(&LogicManager::CONS_Rebecca_ReturnFromDinner, 0, 0, 0, 0);
+
+ break;
+ case 123712592:
+ startCycOtis(kCharacterWaiter1, "BLANK");
+ playDialog(kCharacterRebecca, "Reb4003", -1, 0);
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoSeqOtis, "012E", 0, 0, 0);
+ break;
+ default:
+ break;
}
}
@@ -2006,19 +2578,29 @@ void LogicManager::CONS_Rebecca_Asleep4(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_Asleep4(HAND_PARAMS) {
- if (msg->action == 12) {
+ switch (msg->action) {
+ case 12:
getCharacter(kCharacterRebecca).characterPosition.car = 4;
getCharacter(kCharacterRebecca).characterPosition.position = 4840;
getCharacter(kCharacterRebecca).characterPosition.location = 1;
- setDoor(36, 0, 1, 10, 9);
- setDoor(52, 0, 1, 10, 9);
+ setDoor(36, kCharacterCath, 1, 10, 9);
+ setDoor(52, kCharacterCath, 1, 10, 9);
endGraphics(kCharacterRebecca);
- } else if (msg->action == 18) {
+ break;
+ case 18:
if (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] == 1)
getCharacterCurrentParams(kCharacterRebecca)[0] = 1;
- } else if (msg->action == 205034665 && !getCharacterCurrentParams(kCharacterRebecca)[0] && _gameTime < 2511000) {
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "Reb6969", 0, 0, 0);
+
+ break;
+ case 205034665:
+ if (!getCharacterCurrentParams(kCharacterRebecca)[0] && _gameTime < 2511000) {
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "Reb6969", 0, 0, 0);
+ }
+
+ break;
+ default:
+ break;
}
}
@@ -2033,17 +2615,20 @@ void LogicManager::CONS_Rebecca_StartPart5(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_StartPart5(HAND_PARAMS) {
- if (msg->action) {
- if (msg->action == 12) {
- endGraphics(kCharacterRebecca);
- getCharacter(kCharacterRebecca).characterPosition.car = kCarRestaurant;
- getCharacter(kCharacterRebecca).characterPosition.position = 3969;
- getCharacter(kCharacterRebecca).characterPosition.location = 1;
- getCharacter(kCharacterRebecca).inventoryItem = 0;
- setModel(110, 4);
- }
- } else {
+ switch (msg->action) {
+ case 0:
CONS_Rebecca_Prisoner(0, 0, 0, 0);
+ break;
+ case 12:
+ endGraphics(kCharacterRebecca);
+ getCharacter(kCharacterRebecca).characterPosition.car = kCarRestaurant;
+ getCharacter(kCharacterRebecca).characterPosition.position = 3969;
+ getCharacter(kCharacterRebecca).characterPosition.location = 1;
+ getCharacter(kCharacterRebecca).inventoryItem = 0;
+ setModel(110, 4);
+ break;
+ default:
+ break;
}
}
@@ -2058,8 +2643,13 @@ void LogicManager::CONS_Rebecca_Prisoner(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_Prisoner(HAND_PARAMS) {
- if (msg->action == 70549068)
+ switch (msg->action) {
+ case 70549068:
CONS_Rebecca_Hiding(0, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
}
void LogicManager::CONS_Rebecca_Hiding(CONS_PARAMS) {
@@ -2073,56 +2663,34 @@ void LogicManager::CONS_Rebecca_Hiding(CONS_PARAMS) {
}
void LogicManager::HAND_Rebecca_Hiding(HAND_PARAMS) {
- if (msg->action > 9) {
- if (msg->action > 17) {
- switch (msg->action) {
- case 18:
- switch (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8]) {
- case 1:
- endGraphics(kCharacterRebecca);
- getCharacter(kCharacterRebecca).characterPosition.location = 1;
- getCharacter(kCharacterRebecca).characterPosition.position = 4840;
- setDoor(36, 23, 1, 10, 9);
- break;
- case 3:
- case 4:
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 5;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "Reb5001", 0, 0, 0);
- break;
- case 5:
- getCharacterCurrentParams(kCharacterRebecca)[0] = 1;
- setDoor(36, 23, 1, 14, 0);
+ switch (msg->action) {
+ case 0:
+ if (getCharacterCurrentParams(kCharacterRebecca)[0]) {
+ if (getCharacterCurrentParams(kCharacterRebecca)[2] || (getCharacterCurrentParams(kCharacterRebecca)[2] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
+ if (getCharacterCurrentParams(kCharacterRebecca)[2] >= _currentGameSessionTicks)
break;
- default:
- return;
- }
- break;
- case 135800432:
- CONS_Rebecca_Disappear(0, 0, 0, 0);
- break;
- case 155604840:
- setDoor(36, 23, 1, 10, 9);
- break;
- }
- } else if (msg->action == 17) {
- if (getCharacterCurrentParams(kCharacterRebecca)[1] || getCharacterCurrentParams(kCharacterRebecca)[0]) {
- getCharacterCurrentParams(kCharacterRebecca)[1] = 0;
- getCharacterCurrentParams(kCharacterRebecca)[0] = 0;
- setDoor(36, 23, 1, 10, 9);
+
+ getCharacterCurrentParams(kCharacterRebecca)[2] = 0x7FFFFFFF;
}
- } else if (msg->action == 12) {
- getCharacter(kCharacterRebecca).characterPosition.car = 4;
- getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
- RebeccaCall(&LogicManager::CONS_Rebecca_DoCorrOtis, "624AE", 0x24, 0, 0);
+
+ getCharacterCurrentParams(kCharacterRebecca)[0] = 0;
+ getCharacterCurrentParams(kCharacterRebecca)[1] = 1;
+ setDoor(36, kCharacterRebecca, 1, 0, 0);
+ getCharacterCurrentParams(kCharacterRebecca)[2] = 0;
+ } else {
+ getCharacterCurrentParams(kCharacterRebecca)[2] = 0;
}
- } else if (msg->action >= 8) {
+
+ break;
+ case 8:
+ case 9:
if (getCharacterCurrentParams(kCharacterRebecca)[0]) {
- setDoor(36, 23, 1, 0, 0);
+ setDoor(36, kCharacterRebecca, 1, 0, 0);
getCharacterCurrentParams(kCharacterRebecca)[1] = 1;
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 2;
RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, getCathJustChecking(), 0, 0, 0);
} else {
- setDoor(36, 23, 1, 0, 0);
+ setDoor(36, kCharacterRebecca, 1, 0, 0);
if (msg->action == 8) {
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 3;
RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "LIB012", 0, 0, 0);
@@ -2131,20 +2699,51 @@ void LogicManager::HAND_Rebecca_Hiding(HAND_PARAMS) {
RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "LIB013", 0, 0, 0);
}
}
- } else if (msg->action == 0) {
- if (getCharacterCurrentParams(kCharacterRebecca)[0]) {
- if (getCharacterCurrentParams(kCharacterRebecca)[2] || (getCharacterCurrentParams(kCharacterRebecca)[2] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterRebecca)[2] >= _currentGameSessionTicks)
- return;
- getCharacterCurrentParams(kCharacterRebecca)[2] = 0x7FFFFFFF;
- }
+
+ break;
+ case 12:
+ getCharacter(kCharacterRebecca).characterPosition.car = 4;
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 1;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoCorrOtis, "624AE", 36, 0, 0);
+ break;
+ case 17:
+ if (getCharacterCurrentParams(kCharacterRebecca)[1] || getCharacterCurrentParams(kCharacterRebecca)[0]) {
+ getCharacterCurrentParams(kCharacterRebecca)[1] = 0;
getCharacterCurrentParams(kCharacterRebecca)[0] = 0;
- getCharacterCurrentParams(kCharacterRebecca)[1] = 1;
- setDoor(36, 23, 1, 0, 0);
- getCharacterCurrentParams(kCharacterRebecca)[2] = 0;
- } else {
- getCharacterCurrentParams(kCharacterRebecca)[2] = 0;
+ setDoor(36, kCharacterRebecca, 1, 10, 9);
+ }
+
+ break;
+ case 18:
+ switch (getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8]) {
+ case 1:
+ endGraphics(kCharacterRebecca);
+ getCharacter(kCharacterRebecca).characterPosition.location = 1;
+ getCharacter(kCharacterRebecca).characterPosition.position = 4840;
+ setDoor(36, kCharacterRebecca, 1, 10, 9);
+ break;
+ case 3:
+ case 4:
+ getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 5;
+ RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "Reb5001", 0, 0, 0);
+ break;
+ case 5:
+ getCharacterCurrentParams(kCharacterRebecca)[0] = 1;
+ setDoor(36, kCharacterRebecca, 1, 14, 0);
+ break;
+ default:
+ break;
}
+
+ break;
+ case 135800432:
+ CONS_Rebecca_Disappear(0, 0, 0, 0);
+ break;
+ case 155604840:
+ setDoor(36, kCharacterRebecca, 1, 10, 9);
+ break;
+ default:
+ break;
}
}
Commit: 3d071e9a93921ef95a8692208e6c7ebeb97d3e74
https://github.com/scummvm/scummvm/commit/3d071e9a93921ef95a8692208e6c7ebeb97d3e74
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Add myself to credits
Changed paths:
engines/lastexpress/credits.pl
diff --git a/engines/lastexpress/credits.pl b/engines/lastexpress/credits.pl
index 095bd098b21..7be2f436454 100644
--- a/engines/lastexpress/credits.pl
+++ b/engines/lastexpress/credits.pl
@@ -1,4 +1,5 @@
begin_section("Lastexpress");
+ add_person("Andrea Boscarino", "Bosca", "Engine rewrite");
add_person("Matthew Hoops", "clone2727", "(retired)");
add_person("Jordi Vilalta Prat", "jvprat", "");
add_person("Julien Templier", "littleboy", "");
Commit: 51fde2f649be0b2b37fb4ade19fe29f3ec34d625
https://github.com/scummvm/scummvm/commit/51fde2f649be0b2b37fb4ade19fe29f3ec34d625
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Clean up sprites.h/.cpp
Changed paths:
engines/lastexpress/data/sprites.cpp
engines/lastexpress/data/sprites.h
diff --git a/engines/lastexpress/data/sprites.cpp b/engines/lastexpress/data/sprites.cpp
index 5373efdad45..3909de96771 100644
--- a/engines/lastexpress/data/sprites.cpp
+++ b/engines/lastexpress/data/sprites.cpp
@@ -29,20 +29,20 @@ SpriteManager::SpriteManager(LastExpressEngine *engine) {
}
void SpriteManager::drawCycle() {
- if (g_flag_drawSequences) {
+ if (_drawSequencesFlag) {
Extent extent = Extent(0, 480, 0, 0, 0, 0);
- Sprite *queue = g_frameQueue;
+ Sprite *queue = _frameQueue;
int oldLeft = 640;
int oldRight = 0;
- if (g_flag_coordinates_set) {
- if (g_eraseRect.right >= g_eraseRect.left &&
- g_eraseRect.right < 640 &&
- g_eraseRect.top <= g_eraseRect.bottom &&
- g_eraseRect.bottom < 480) {
+ if (_coordinatesAreSet) {
+ if (_eraseRect.right >= _eraseRect.left &&
+ _eraseRect.right < 640 &&
+ _eraseRect.top <= _eraseRect.bottom &&
+ _eraseRect.bottom < 480) {
- memcpy(&extent, &g_eraseRect, sizeof(extent));
+ memcpy(&extent, &_eraseRect, sizeof(extent));
oldRight = extent.right;
oldLeft = extent.left;
@@ -51,10 +51,10 @@ void SpriteManager::drawCycle() {
_engine->getGraphicsManager()->copy(
_engine->getGraphicsManager()->_screenBuffer,
(PixMap *)_engine->getGraphicsManager()->_screenSurface.getPixels(),
- g_eraseRect.left,
- g_eraseRect.top,
- g_eraseRect.right - g_eraseRect.left + 1,
- g_eraseRect.bottom - g_eraseRect.top + 1);
+ _eraseRect.left,
+ _eraseRect.top,
+ _eraseRect.right - _eraseRect.left + 1,
+ _eraseRect.bottom - _eraseRect.top + 1);
_engine->getGraphicsManager()->unlockSurface();
}
}
@@ -67,7 +67,7 @@ void SpriteManager::drawCycle() {
_engine->getGraphicsManager()->eraseSprite(queue->eraseMask);
}
- for (Sprite *i = g_frameQueue; i; i = i->nextSprite) {
+ for (Sprite *i = _frameQueue; i; i = i->nextSprite) {
if (i->rect.left < oldLeft)
oldLeft = i->rect.left;
@@ -143,12 +143,12 @@ void SpriteManager::drawCycle() {
if (oldLeft != 640)
_engine->getGraphicsManager()->burstBox(oldLeft, extent.top, oldRight - oldLeft + 1, extent.bottom - extent.top + 1);
- g_flag_drawSequences = false;
+ _drawSequencesFlag = false;
}
}
void SpriteManager::drawCycleSimple(PixMap *pixels) {
- for (Sprite *i = g_frameQueue; i; i = i->nextSprite) {
+ for (Sprite *i = _frameQueue; i; i = i->nextSprite) {
if (i->compType != 2 && i->compType != 3) {
switch (i->compBits) {
case 3:
@@ -172,42 +172,42 @@ void SpriteManager::drawCycleSimple(PixMap *pixels) {
void SpriteManager::queueErase(Sprite *sprite) {
if (sprite && sprite->compType != 3) {
- g_flag_coordinates_set = true;
+ _coordinatesAreSet = true;
- if (g_eraseRect.left > sprite->rect.left)
- g_eraseRect.left = sprite->rect.left;
+ if (_eraseRect.left > sprite->rect.left)
+ _eraseRect.left = sprite->rect.left;
- if (g_eraseRect.top > sprite->rect.top)
- g_eraseRect.top = sprite->rect.top;
+ if (_eraseRect.top > sprite->rect.top)
+ _eraseRect.top = sprite->rect.top;
- if (g_eraseRect.right < sprite->rect.right)
- g_eraseRect.right = sprite->rect.right;
+ if (_eraseRect.right < sprite->rect.right)
+ _eraseRect.right = sprite->rect.right;
- if (g_eraseRect.bottom < sprite->rect.bottom)
- g_eraseRect.bottom = sprite->rect.bottom;
+ if (_eraseRect.bottom < sprite->rect.bottom)
+ _eraseRect.bottom = sprite->rect.bottom;
}
}
void SpriteManager::resetEraseQueue() {
- g_eraseRect.left = 640;
- g_eraseRect.top = 480;
- g_flag_coordinates_set = false;
- g_eraseRect.right = 0;
- g_eraseRect.bottom = 0;
+ _eraseRect.left = 640;
+ _eraseRect.top = 480;
+ _coordinatesAreSet = false;
+ _eraseRect.right = 0;
+ _eraseRect.bottom = 0;
}
void SpriteManager::killSpriteQueue() {
- g_flag_drawSequences = true;
- g_frameQueue = nullptr;
+ _drawSequencesFlag = true;
+ _frameQueue = nullptr;
}
void SpriteManager::touchSpriteQueue() {
- g_flag_drawSequences = true;
+ _drawSequencesFlag = true;
}
void SpriteManager::drawSprite(Sprite *sprite) {
if (sprite) {
- Sprite *queue = g_frameQueue;
+ Sprite *queue = _frameQueue;
while (queue) {
if (queue == sprite)
@@ -216,15 +216,15 @@ void SpriteManager::drawSprite(Sprite *sprite) {
queue = queue->nextSprite;
}
- g_flag_drawSequences = true;
+ _drawSequencesFlag = true;
- if (g_frameQueue) {
+ if (_frameQueue) {
bool insertedInQueue = false;
- if (sprite->hotspotPriority <= g_frameQueue->hotspotPriority) {
- queue = g_frameQueue;
+ if (sprite->hotspotPriority <= _frameQueue->hotspotPriority) {
+ queue = _frameQueue;
- for (Sprite *i = g_frameQueue->nextSprite; !insertedInQueue && i; i = i->nextSprite) {
+ for (Sprite *i = _frameQueue->nextSprite; !insertedInQueue && i; i = i->nextSprite) {
if (sprite->hotspotPriority > i->hotspotPriority) {
queue->nextSprite = sprite;
sprite->nextSprite = i;
@@ -240,18 +240,18 @@ void SpriteManager::drawSprite(Sprite *sprite) {
}
} else {
- sprite->nextSprite = g_frameQueue;
- g_frameQueue = sprite;
+ sprite->nextSprite = _frameQueue;
+ _frameQueue = sprite;
}
} else {
- g_frameQueue = sprite;
+ _frameQueue = sprite;
sprite->nextSprite = nullptr;
}
}
}
void SpriteManager::removeSprite(Sprite *sprite) {
- Sprite *queue = g_frameQueue;
+ Sprite *queue = _frameQueue;
Sprite *spriteToRemove = nullptr;
if (sprite) {
@@ -264,10 +264,10 @@ void SpriteManager::removeSprite(Sprite *sprite) {
if (spriteToRemove) {
spriteToRemove->nextSprite = queue->nextSprite;
} else {
- g_frameQueue = queue->nextSprite;
+ _frameQueue = queue->nextSprite;
}
- g_flag_drawSequences = true;
+ _drawSequencesFlag = true;
}
}
}
diff --git a/engines/lastexpress/data/sprites.h b/engines/lastexpress/data/sprites.h
index dfb200fe976..151b774f7d7 100644
--- a/engines/lastexpress/data/sprites.h
+++ b/engines/lastexpress/data/sprites.h
@@ -78,10 +78,10 @@ public:
private:
LastExpressEngine *_engine = nullptr;
- bool g_flag_drawSequences = false;
- Sprite *g_frameQueue = nullptr;
- bool g_flag_coordinates_set = false;
- Extent g_eraseRect = Extent(640, 480, 0, 0, 0, 0);
+ bool _drawSequencesFlag = false;
+ Sprite *_frameQueue = nullptr;
+ bool _coordinatesAreSet = false;
+ Extent _eraseRect = Extent(640, 480, 0, 0, 0, 0);
};
} // End of namespace LastExpress
Commit: d53d6f851d1463d451f019fc96fac557792b00c8
https://github.com/scummvm/scummvm/commit/d53d6f851d1463d451f019fc96fac557792b00c8
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: More clean-up
Changed paths:
engines/lastexpress/characters/abbot.cpp
engines/lastexpress/characters/alexei.cpp
engines/lastexpress/characters/anna.cpp
engines/lastexpress/characters/august.cpp
engines/lastexpress/characters/clerk.cpp
engines/lastexpress/characters/cond1.cpp
engines/lastexpress/characters/cond2.cpp
engines/lastexpress/characters/cook.cpp
engines/lastexpress/characters/demo/demo_anna.cpp
engines/lastexpress/characters/demo/demo_francois.cpp
engines/lastexpress/characters/demo/demo_madame.cpp
engines/lastexpress/characters/demo/demo_master.cpp
engines/lastexpress/characters/demo/demo_tatiana.cpp
engines/lastexpress/characters/demo/demo_vesna.cpp
engines/lastexpress/characters/francois.cpp
engines/lastexpress/characters/headwait.cpp
engines/lastexpress/characters/ivo.cpp
engines/lastexpress/characters/kahina.cpp
engines/lastexpress/characters/kronos.cpp
engines/lastexpress/characters/madame.cpp
engines/lastexpress/characters/mahmud.cpp
engines/lastexpress/characters/master.cpp
engines/lastexpress/characters/max.cpp
engines/lastexpress/characters/milos.cpp
engines/lastexpress/characters/monsieur.cpp
engines/lastexpress/characters/police.cpp
engines/lastexpress/characters/rebecca.cpp
engines/lastexpress/characters/tablec.cpp
engines/lastexpress/characters/tatiana.cpp
engines/lastexpress/characters/trainm.cpp
engines/lastexpress/characters/vassili.cpp
engines/lastexpress/characters/vesna.cpp
engines/lastexpress/characters/waiter1.cpp
engines/lastexpress/characters/yasmin.cpp
engines/lastexpress/data/archive.cpp
engines/lastexpress/data/cvcrfile.h
engines/lastexpress/data/gold_archive.cpp
engines/lastexpress/debug.cpp
engines/lastexpress/fight/fight.cpp
engines/lastexpress/game/action.cpp
engines/lastexpress/game/beetle.cpp
engines/lastexpress/game/logic.cpp
engines/lastexpress/game/logic.h
engines/lastexpress/game/navigation.cpp
engines/lastexpress/game/otis.cpp
engines/lastexpress/game/savegame.cpp
engines/lastexpress/game/vcr.cpp
engines/lastexpress/graphics.cpp
engines/lastexpress/lastexpress.cpp
engines/lastexpress/lastexpress.h
engines/lastexpress/memory.cpp
engines/lastexpress/menu/menu.cpp
engines/lastexpress/shared.h
engines/lastexpress/sound/sound.cpp
diff --git a/engines/lastexpress/characters/abbot.cpp b/engines/lastexpress/characters/abbot.cpp
index 473f1b79939..066aca1e789 100644
--- a/engines/lastexpress/characters/abbot.cpp
+++ b/engines/lastexpress/characters/abbot.cpp
@@ -316,17 +316,17 @@ void LogicManager::HAND_Abbot_DoWaitReal(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (getCharacterCurrentParams(kCharacterAbbot)[1]) {
- if (getCharacterCurrentParams(kCharacterAbbot)[1] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAbbot)[1] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAbbot)[1] = 0x7FFFFFFF;
} else {
- getCharacterCurrentParams(kCharacterAbbot)[1] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterAbbot)[0];
+ getCharacterCurrentParams(kCharacterAbbot)[1] = _realTime + getCharacterCurrentParams(kCharacterAbbot)[0];
- if (_currentGameSessionTicks + getCharacterCurrentParams(kCharacterAbbot)[0] == 0)
+ if (_realTime + getCharacterCurrentParams(kCharacterAbbot)[0] == 0)
break;
- if (getCharacterCurrentParams(kCharacterAbbot)[1] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAbbot)[1] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAbbot)[1] = 0x7FFFFFFF;
@@ -437,7 +437,7 @@ void LogicManager::HAND_Abbot_DoWalk(HAND_PARAMS) {
break;
}
- if (_gameEvents[kEventAbbotIntroduction]) {
+ if (_doneNIS[kEventAbbotIntroduction]) {
playDialog(kCharacterCath, "CAT1013", -1, 0);
} else {
playCathExcuseMe();
@@ -859,7 +859,7 @@ void LogicManager::HAND_Abbot_EatingLunch(HAND_PARAMS) {
case 12:
startCycOtis(kCharacterAbbot, "029E");
- if (!_gameEvents[kEventAbbotIntroduction])
+ if (!_doneNIS[kEventAbbotIntroduction])
getCharacter(kCharacterAbbot).inventoryItem = kItemInvalid;
break;
@@ -1802,7 +1802,7 @@ void LogicManager::HAND_Abbot_DoWalkSearchingForCath(HAND_PARAMS) {
getCharacter(kCharacterAbbot).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAbbot, _functionsAbbot[getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall]]);
fedEx(kCharacterAbbot, kCharacterAbbot, 18, 0);
- } else if (!_gameEvents[kEventAbbotInvitationDrink] && nearChar(kCharacterAbbot, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
+ } else if (!_doneNIS[kEventAbbotInvitationDrink] && nearChar(kCharacterAbbot, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
if (getCharacter(kCharacterAbbot).characterPosition.car == kCarGreenSleeping || getCharacter(kCharacterAbbot).characterPosition.car == kCarRedSleeping) {
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, kEventAbbotInvitationDrink, 0, 0);
@@ -1973,8 +1973,8 @@ void LogicManager::HAND_Abbot_InComp(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterAbbot)[2]) {
- if (getCharacterCurrentParams(kCharacterAbbot)[5] || (getCharacterCurrentParams(kCharacterAbbot)[5] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterAbbot)[5] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAbbot)[5] || (getCharacterCurrentParams(kCharacterAbbot)[5] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[5] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAbbot)[5] = 0x7FFFFFFF;
@@ -2042,8 +2042,8 @@ void LogicManager::HAND_Abbot_InComp(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterAbbot)[2]) {
- if (getCharacterCurrentParams(kCharacterAbbot)[5] || (getCharacterCurrentParams(kCharacterAbbot)[5] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterAbbot)[5] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAbbot)[5] || (getCharacterCurrentParams(kCharacterAbbot)[5] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[5] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAbbot)[5] = 0x7FFFFFFF;
@@ -2310,7 +2310,7 @@ void LogicManager::HAND_Abbot_AfterBomb(HAND_PARAMS) {
startCycOtis(13, "126B");
break;
case 4:
- if (!_gameEvents[kEventAbbotDrinkDefuse] && getCharacterParams(kCharacterAbbot, 8)[0])
+ if (!_doneNIS[kEventAbbotDrinkDefuse] && getCharacterParams(kCharacterAbbot, 8)[0])
getCharacter(kCharacterAbbot).inventoryItem = kItemInvalid;
startCycOtis(kCharacterAbbot, "126B");
@@ -2371,8 +2371,8 @@ void LogicManager::CONS_Abbot_CatchCath(CONS_PARAMS) {
void LogicManager::HAND_Abbot_CatchCath(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (getCharacterCurrentParams(kCharacterAbbot)[0] || (getCharacterCurrentParams(kCharacterAbbot)[0] = _currentGameSessionTicks + 150, _currentGameSessionTicks != -150)) {
- if (getCharacterCurrentParams(kCharacterAbbot)[0] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAbbot)[0] || (getCharacterCurrentParams(kCharacterAbbot)[0] = _realTime + 150, _realTime != -150)) {
+ if (getCharacterCurrentParams(kCharacterAbbot)[0] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAbbot)[0] = 0x7FFFFFFF;
@@ -2545,10 +2545,10 @@ void LogicManager::HAND_Abbot_RunningTrain(HAND_PARAMS) {
break;
case 168646401:
- if (!_gameEvents[kEventLocomotiveAbbotGetSomeRest]) {
+ if (!_doneNIS[kEventLocomotiveAbbotGetSomeRest]) {
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 1;
AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, kEventLocomotiveAbbotGetSomeRest, 0, 0);
- } else if (!_gameEvents[kEventLocomotiveAbbotShoveling]) {
+ } else if (!_doneNIS[kEventLocomotiveAbbotShoveling]) {
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
AbbotCall(&LogicManager::CONS_Abbot_SaveGame, 2, kEventLocomotiveAbbotShoveling, 0, 0);
} else {
diff --git a/engines/lastexpress/characters/alexei.cpp b/engines/lastexpress/characters/alexei.cpp
index 8f45bd11f1d..2765c5577ce 100644
--- a/engines/lastexpress/characters/alexei.cpp
+++ b/engines/lastexpress/characters/alexei.cpp
@@ -380,7 +380,7 @@ void LogicManager::HAND_Alexei_DoWalk(HAND_PARAMS) {
break;
}
- if (_gameEvents[kEventAlexeiSalonVassili] || _gameEvents[kEventTatianaAskMatchSpeakRussian] && cathHasItem(kItemPassengerList)) {
+ if (_doneNIS[kEventAlexeiSalonVassili] || _doneNIS[kEventTatianaAskMatchSpeakRussian] && cathHasItem(kItemPassengerList)) {
if (rnd(2) == 0) {
playDialog(kCharacterCath, "CAT1012A", -1, 0);
} else {
@@ -621,8 +621,8 @@ void LogicManager::HAND_Alexei_CompLogic(HAND_PARAMS) {
fedEx(kCharacterAlexei, kCharacterAlexei, 18, 0);
} else {
if (getCharacterCurrentParams(kCharacterAlexei)[4]) {
- if (getCharacterCurrentParams(kCharacterAlexei)[8] || (getCharacterCurrentParams(kCharacterAlexei)[8] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterAlexei)[8] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAlexei)[8] || (getCharacterCurrentParams(kCharacterAlexei)[8] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[8] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAlexei)[8] = 0x7FFFFFFF;
@@ -804,8 +804,8 @@ void LogicManager::HAND_Alexei_AtDinner(HAND_PARAMS) {
AlexeiCall(&LogicManager::CONS_Alexei_DoJoinedSeqOtis, "005D", 34, 103798704, "005E");
} else {
if (getCharacterCurrentParams(kCharacterAlexei)[0]) {
- if (getCharacterCurrentParams(kCharacterAlexei)[2] || (getCharacterCurrentParams(kCharacterAlexei)[2] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
- if (getCharacterCurrentParams(kCharacterAlexei)[2] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAlexei)[2] || (getCharacterCurrentParams(kCharacterAlexei)[2] = _realTime + 90, _realTime != -90)) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[2] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAlexei)[2] = 0x7FFFFFFF;
@@ -838,7 +838,7 @@ void LogicManager::HAND_Alexei_AtDinner(HAND_PARAMS) {
releaseView(kCharacterAlexei, kCarRestaurant, 63);
CONS_Alexei_ReturnComp(0, 0, 0, 0);
} else if (getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] == 2) {
- if (_gameProgress[kProgressJacket] == 2)
+ if (_globals[kProgressJacket] == 2)
playNIS(kEventAlexeiDiner);
else
playNIS(kEventAlexeiDinerOriginalJacket);
@@ -847,7 +847,7 @@ void LogicManager::HAND_Alexei_AtDinner(HAND_PARAMS) {
getCharacter(kCharacterAlexei).characterPosition.position = 3650;
getCharacter(kCharacterAlexei).characterPosition.location = 0;
endGraphics(kCharacterAlexei);
- _gameInventory[kItem17].location = 1;
+ _items[kItem17].floating = 1;
bumpCath(kCarRestaurant, 63, 255);
CONS_Alexei_ReturnComp(0, 0, 0, 0);
}
@@ -1026,7 +1026,7 @@ void LogicManager::HAND_Alexei_Sitting(HAND_PARAMS) {
startCycOtis(kCharacterAlexei, "103B");
getCharacterCurrentParams(kCharacterAlexei)[0] = 225 * (4 * rnd(3) + 4);
- if (!_gameEvents[kEventAlexeiSalonPoem])
+ if (!_doneNIS[kEventAlexeiSalonPoem])
getCharacter(kCharacterAlexei).inventoryItem = 10;
break;
@@ -1111,7 +1111,7 @@ void LogicManager::HAND_Alexei_StandingAtWindow(HAND_PARAMS) {
case 12:
getCharacterCurrentParams(kCharacterAlexei)[0] = 225 * (4 * rnd(4) + 8);
startCycOtis(kCharacterAlexei, "103E");
- if (!_gameEvents[kEventAlexeiSalonPoem])
+ if (!_doneNIS[kEventAlexeiSalonPoem])
getCharacter(kCharacterAlexei).inventoryItem = 10;
break;
@@ -1159,7 +1159,7 @@ void LogicManager::CONS_Alexei_WaitingForTat(CONS_PARAMS) {
void LogicManager::HAND_Alexei_WaitingForTat(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (!inDiningRoom(kCharacterTatiana) || _gameEvents[kEventAlexeiSalonPoem]) {
+ if (!inDiningRoom(kCharacterTatiana) || _doneNIS[kEventAlexeiSalonPoem]) {
getCharacter(kCharacterAlexei).inventoryItem = 0;
} else {
getCharacter(kCharacterAlexei).inventoryItem = 10;
@@ -1223,7 +1223,7 @@ void LogicManager::HAND_Alexei_Upset(HAND_PARAMS) {
AlexeiCall(&LogicManager::CONS_Alexei_SaveGame, 2, kEventAlexeiSalonCath, 0, 0);
break;
case 12:
- if (_gameEvents[kEventAlexeiSalonVassili])
+ if (_doneNIS[kEventAlexeiSalonVassili])
getCharacter(kCharacterAlexei).inventoryItem = 0x80;
break;
@@ -1468,7 +1468,7 @@ void LogicManager::HAND_Alexei_AtBreakfast(HAND_PARAMS) {
startCycOtis(kCharacterAlexei, "018E");
if (inDiningRoom(kCharacterCath))
- _gameProgress[kProgressField68] = 1;
+ _globals[kProgressField68] = 1;
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 2;
AlexeiCall(&LogicManager::CONS_Alexei_DoDialog, "TAT2116", 0, 0, 0);
@@ -1789,9 +1789,9 @@ void LogicManager::HAND_Alexei_GoSalon3(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (!getCharacterCurrentParams(kCharacterAlexei)[2] && !getCharacterCurrentParams(kCharacterAlexei)[1]) {
- if (getCharacterCurrentParams(kCharacterAlexei)[3] || (getCharacterCurrentParams(kCharacterAlexei)[3] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterAlexei)[0],
- _currentGameSessionTicks + getCharacterCurrentParams(kCharacterAlexei)[0] != 0)) {
- if (getCharacterCurrentParams(kCharacterAlexei)[3] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAlexei)[3] || (getCharacterCurrentParams(kCharacterAlexei)[3] = _realTime + getCharacterCurrentParams(kCharacterAlexei)[0],
+ _realTime + getCharacterCurrentParams(kCharacterAlexei)[0] != 0)) {
+ if (getCharacterCurrentParams(kCharacterAlexei)[3] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAlexei)[3] = 0x7FFFFFFF;
diff --git a/engines/lastexpress/characters/anna.cpp b/engines/lastexpress/characters/anna.cpp
index 0fb0e6e80d6..b9af64ca4b5 100644
--- a/engines/lastexpress/characters/anna.cpp
+++ b/engines/lastexpress/characters/anna.cpp
@@ -372,7 +372,7 @@ void LogicManager::HAND_Anna_DoWalk(HAND_PARAMS) {
break;
case 5:
- if (_gameEvents[kEventAugustPresentAnna] || _gameEvents[kEventAugustPresentAnnaFirstIntroduction] || _gameProgress[kProgressChapter] >= 2) {
+ if (_doneNIS[kEventAugustPresentAnna] || _doneNIS[kEventAugustPresentAnnaFirstIntroduction] || _globals[kProgressChapter] >= 2) {
playDialog(kCharacterCath, "CAT1001", -1, 0);
} else {
playCathExcuseMe();
@@ -439,8 +439,8 @@ void LogicManager::HAND_Anna_PracticeMusic(HAND_PARAMS) {
bool skip = false; // Horrible way to unroll a goto...
if (!getCharacterCurrentParams(kCharacterAnna)[6]) {
- getCharacterCurrentParams(kCharacterAnna)[6] = _currentGameSessionTicks + 75;
- if (_currentGameSessionTicks == -75) {
+ getCharacterCurrentParams(kCharacterAnna)[6] = _realTime + 75;
+ if (_realTime == -75) {
skip = true;
send(kCharacterAnna, kCharacterAnna, 2, 0);
getCharacterCurrentParams(kCharacterAnna)[5] = 0;
@@ -448,7 +448,7 @@ void LogicManager::HAND_Anna_PracticeMusic(HAND_PARAMS) {
}
}
- if (!skip && getCharacterCurrentParams(kCharacterAnna)[6] < _currentGameSessionTicks) {
+ if (!skip && getCharacterCurrentParams(kCharacterAnna)[6] < _realTime) {
getCharacterCurrentParams(kCharacterAnna)[6] = 0x7FFFFFFF;
send(kCharacterAnna, kCharacterAnna, 2, 0);
getCharacterCurrentParams(kCharacterAnna)[5] = 0;
@@ -457,8 +457,8 @@ void LogicManager::HAND_Anna_PracticeMusic(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterAnna)[3]) {
- if (getCharacterCurrentParams(kCharacterAnna)[7] || (getCharacterCurrentParams(kCharacterAnna)[7] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterAnna)[7] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAnna)[7] || (getCharacterCurrentParams(kCharacterAnna)[7] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[7] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAnna)[7] = 0x7FFFFFFF;
@@ -682,9 +682,9 @@ void LogicManager::HAND_Anna_DoWaitReal(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (getCharacterCurrentParams(kCharacterAnna)[1] ||
- (getCharacterCurrentParams(kCharacterAnna)[1] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterAnna)[0],
- _currentGameSessionTicks + getCharacterCurrentParams(kCharacterAnna)[0] != 0)) {
- if (getCharacterCurrentParams(kCharacterAnna)[1] >= _currentGameSessionTicks)
+ (getCharacterCurrentParams(kCharacterAnna)[1] = _realTime + getCharacterCurrentParams(kCharacterAnna)[0],
+ _realTime + getCharacterCurrentParams(kCharacterAnna)[0] != 0)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[1] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAnna)[1] = 0x7FFFFFFF;
@@ -728,8 +728,8 @@ void LogicManager::HAND_Anna_CompLogic(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterAnna)[4]) {
- if (getCharacterCurrentParams(kCharacterAnna)[7] || (getCharacterCurrentParams(kCharacterAnna)[7] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterAnna)[7] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAnna)[7] || (getCharacterCurrentParams(kCharacterAnna)[7] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[7] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAnna)[7] = 0x7FFFFFFF;
@@ -925,7 +925,7 @@ void LogicManager::HAND_Anna_DoWalkP1(HAND_PARAMS) {
break;
case 5:
- if (_gameEvents[kEventAugustPresentAnna] || _gameEvents[kEventAugustPresentAnnaFirstIntroduction] || _gameProgress[kProgressChapter] >= 2) {
+ if (_doneNIS[kEventAugustPresentAnna] || _doneNIS[kEventAugustPresentAnnaFirstIntroduction] || _globals[kProgressChapter] >= 2) {
playDialog(kCharacterCath, "CAT1001", -1, 0);
} else {
playCathExcuseMe();
@@ -937,11 +937,11 @@ void LogicManager::HAND_Anna_DoWalkP1(HAND_PARAMS) {
break;
case 12:
getCharacter(kCharacterAnna).inventoryItem = 0;
- if (_gameProgress[kProgressJacket] == 2 && !_gameEvents[kEventGotALight] && !_gameEvents[kEventGotALightD] && !_gameEvents[kEventAugustPresentAnna] && !_gameEvents[kEventAugustPresentAnnaFirstIntroduction]) {
+ if (_globals[kProgressJacket] == 2 && !_doneNIS[kEventGotALight] && !_doneNIS[kEventGotALightD] && !_doneNIS[kEventAugustPresentAnna] && !_doneNIS[kEventAugustPresentAnnaFirstIntroduction]) {
getCharacterCurrentParams(kCharacterAnna)[2] = 128;
}
- if (_gameProgress[kProgressJacket] == 2 && !getCharacterCurrentParams(kCharacterAnna)[2] && !_gameEvents[kEventAnnaGiveScarfAsk] && !_gameEvents[kEventAnnaGiveScarfDinerAsk] && !_gameEvents[kEventAnnaGiveScarfSalonAsk]) {
+ if (_globals[kProgressJacket] == 2 && !getCharacterCurrentParams(kCharacterAnna)[2] && !_doneNIS[kEventAnnaGiveScarfAsk] && !_doneNIS[kEventAnnaGiveScarfDinerAsk] && !_doneNIS[kEventAnnaGiveScarfSalonAsk]) {
getCharacterCurrentParams(kCharacterAnna)[2] = 8;
}
@@ -954,9 +954,9 @@ void LogicManager::HAND_Anna_DoWalkP1(HAND_PARAMS) {
break;
case 18:
if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
- if (_gameEvents[kEventAnnaGiveScarf] || _gameEvents[kEventAnnaGiveScarfDiner] || _gameEvents[kEventAnnaGiveScarfSalon] || _gameEvents[kEventAnnaGiveScarfMonogram] || _gameEvents[kEventAnnaGiveScarfDinerMonogram] || _gameEvents[kEventAnnaGiveScarfSalonMonogram]) {
+ if (_doneNIS[kEventAnnaGiveScarf] || _doneNIS[kEventAnnaGiveScarfDiner] || _doneNIS[kEventAnnaGiveScarfSalon] || _doneNIS[kEventAnnaGiveScarfMonogram] || _doneNIS[kEventAnnaGiveScarfDinerMonogram] || _doneNIS[kEventAnnaGiveScarfSalonMonogram]) {
playNIS(kEventAnnaGiveScarfAsk);
- } else if (_gameEvents[kEventAugustPresentAnna] || _gameEvents[kEventAugustPresentAnnaFirstIntroduction]) {
+ } else if (_doneNIS[kEventAugustPresentAnna] || _doneNIS[kEventAugustPresentAnnaFirstIntroduction]) {
playNIS(kEventAnnaGiveScarfMonogram);
} else {
playNIS(kEventAnnaGiveScarf);
@@ -979,7 +979,7 @@ void LogicManager::HAND_Anna_DoWalkP1(HAND_PARAMS) {
int32 tmp = getCharacterCurrentParams(kCharacterAnna)[2] & 0xFFFFFF7F;
getCharacterCurrentParams(kCharacterAnna)[2] = tmp;
- if (_gameProgress[kProgressJacket] == 2 && !_gameEvents[kEventAnnaGiveScarfAsk] && !_gameEvents[kEventAnnaGiveScarfDinerAsk] && !_gameEvents[kEventAnnaGiveScarfSalonAsk])
+ if (_globals[kProgressJacket] == 2 && !_doneNIS[kEventAnnaGiveScarfAsk] && !_doneNIS[kEventAnnaGiveScarfDinerAsk] && !_doneNIS[kEventAnnaGiveScarfSalonAsk])
getCharacterCurrentParams(kCharacterAnna)[2] = tmp | 8;
if (getCharacter(kCharacterAnna).direction != 1) {
@@ -1022,8 +1022,8 @@ void LogicManager::HAND_Anna_DiningLogic(HAND_PARAMS) {
if (getCharacterCurrentParams(kCharacterAnna)[5] || (getCharacterCurrentParams(kCharacterAnna)[5] = _gameTime + 900, _gameTime != -900)) {
if (getCharacterCurrentParams(kCharacterAnna)[5] >= _gameTime) {
if (getCharacterCurrentParams(kCharacterAnna)[2]) {
- if (getCharacterCurrentParams(kCharacterAnna)[6] || (getCharacterCurrentParams(kCharacterAnna)[6] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
- if (getCharacterCurrentParams(kCharacterAnna)[6] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAnna)[6] || (getCharacterCurrentParams(kCharacterAnna)[6] = _realTime + 90, _realTime != -90)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[6] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAnna)[6] = 0x7FFFFFFF;
@@ -1045,8 +1045,8 @@ void LogicManager::HAND_Anna_DiningLogic(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterAnna)[2]) {
- if (getCharacterCurrentParams(kCharacterAnna)[6] || (getCharacterCurrentParams(kCharacterAnna)[6] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
- if (getCharacterCurrentParams(kCharacterAnna)[6] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAnna)[6] || (getCharacterCurrentParams(kCharacterAnna)[6] = _realTime + 90, _realTime != -90)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[6] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAnna)[6] = 0x7FFFFFFF;
@@ -1069,11 +1069,11 @@ void LogicManager::HAND_Anna_DiningLogic(HAND_PARAMS) {
break;
case 12:
- if (_gameProgress[kProgressJacket] == 2 && !_gameEvents[kEventDinerMindJoin] && !_gameEvents[kEventAugustPresentAnna] && !_gameEvents[kEventAugustPresentAnnaFirstIntroduction]) {
+ if (_globals[kProgressJacket] == 2 && !_doneNIS[kEventDinerMindJoin] && !_doneNIS[kEventAugustPresentAnna] && !_doneNIS[kEventAugustPresentAnnaFirstIntroduction]) {
getCharacterCurrentParams(kCharacterAnna)[1] |= 0x80;
}
- if (_gameProgress[kProgressJacket] == 2 && !getCharacterCurrentParams(kCharacterAnna)[1] && !_gameEvents[kEventAnnaGiveScarfAsk] && !_gameEvents[kEventAnnaGiveScarfDinerAsk] && !_gameEvents[kEventAnnaGiveScarfSalonAsk]) {
+ if (_globals[kProgressJacket] == 2 && !getCharacterCurrentParams(kCharacterAnna)[1] && !_doneNIS[kEventAnnaGiveScarfAsk] && !_doneNIS[kEventAnnaGiveScarfDinerAsk] && !_doneNIS[kEventAnnaGiveScarfSalonAsk]) {
getCharacterCurrentParams(kCharacterAnna)[1] = 8;
}
@@ -1084,10 +1084,10 @@ void LogicManager::HAND_Anna_DiningLogic(HAND_PARAMS) {
break;
case 18:
if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
- if (_gameEvents[kEventAnnaGiveScarf] || _gameEvents[kEventAnnaGiveScarfDiner] || _gameEvents[kEventAnnaGiveScarfSalon] || _gameEvents[kEventAnnaGiveScarfMonogram] || _gameEvents[kEventAnnaGiveScarfDinerMonogram] || _gameEvents[kEventAnnaGiveScarfSalonMonogram]) {
+ if (_doneNIS[kEventAnnaGiveScarf] || _doneNIS[kEventAnnaGiveScarfDiner] || _doneNIS[kEventAnnaGiveScarfSalon] || _doneNIS[kEventAnnaGiveScarfMonogram] || _doneNIS[kEventAnnaGiveScarfDinerMonogram] || _doneNIS[kEventAnnaGiveScarfSalonMonogram]) {
playNIS(kEventAnnaGiveScarfDinerAsk);
} else {
- if (_gameEvents[kEventAugustPresentAnna] || _gameEvents[kEventAugustPresentAnnaFirstIntroduction])
+ if (_doneNIS[kEventAugustPresentAnna] || _doneNIS[kEventAugustPresentAnnaFirstIntroduction])
playNIS(kEventAnnaGiveScarfDinerMonogram);
else
playNIS(kEventAnnaGiveScarfDiner);
@@ -1104,7 +1104,7 @@ void LogicManager::HAND_Anna_DiningLogic(HAND_PARAMS) {
int32 tmp = getCharacterCurrentParams(kCharacterAnna)[1] & 0xFFFFFF7F;
getCharacterCurrentParams(kCharacterAnna)[1] = tmp;
- if (_gameProgress[kProgressJacket] == 2 && !_gameEvents[kEventAnnaGiveScarfAsk] && !_gameEvents[kEventAnnaGiveScarfDinerAsk] && !_gameEvents[kEventAnnaGiveScarfSalonAsk]) {
+ if (_globals[kProgressJacket] == 2 && !_doneNIS[kEventAnnaGiveScarfAsk] && !_doneNIS[kEventAnnaGiveScarfDinerAsk] && !_doneNIS[kEventAnnaGiveScarfSalonAsk]) {
getCharacterCurrentParams(kCharacterAnna)[1] = tmp | 8;
}
@@ -1378,7 +1378,7 @@ void LogicManager::HAND_Anna_EatingDinner(HAND_PARAMS) {
switch (msg->action) {
case 12:
startCycOtis(kCharacterAnna, "001J");
- _gameProgress[kProgressField28] = 1;
+ _globals[kProgressField28] = 1;
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_DiningLogic, 0, 0, 0, 0);
@@ -1480,7 +1480,7 @@ void LogicManager::HAND_Anna_FreshenUp(HAND_PARAMS) {
case 18:
if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1 ||
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
- if (_gameProgress[kProgressField14] == 29) {
+ if (_globals[kProgressField14] == 29) {
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = _gameTime + 900;
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
AnnaCall(&LogicManager::CONS_Anna_CompLogic, getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8], "NONE", 0, 0);
@@ -1560,8 +1560,8 @@ void LogicManager::HAND_Anna_WaitAugust(HAND_PARAMS) {
if (getCharacterCurrentParams(kCharacterAnna)[2] || (getCharacterCurrentParams(kCharacterAnna)[2] = _gameTime + 900, _gameTime != -900)) {
if (getCharacterCurrentParams(kCharacterAnna)[2] >= _gameTime) {
if (getCharacterCurrentParams(kCharacterAnna)[0]) {
- if (getCharacterCurrentParams(kCharacterAnna)[3] || (getCharacterCurrentParams(kCharacterAnna)[3] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
- if (getCharacterCurrentParams(kCharacterAnna)[3] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAnna)[3] || (getCharacterCurrentParams(kCharacterAnna)[3] = _realTime + 90, _realTime != -90)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[3] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAnna)[3] = 0x7FFFFFFF;
@@ -1584,8 +1584,8 @@ void LogicManager::HAND_Anna_WaitAugust(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterAnna)[0]) {
- if (getCharacterCurrentParams(kCharacterAnna)[3] || (getCharacterCurrentParams(kCharacterAnna)[3] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
- if (getCharacterCurrentParams(kCharacterAnna)[3] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAnna)[3] || (getCharacterCurrentParams(kCharacterAnna)[3] = _realTime + 90, _realTime != -90)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[3] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAnna)[3] = 0x7FFFFFFF;
@@ -1610,10 +1610,10 @@ void LogicManager::HAND_Anna_WaitAugust(HAND_PARAMS) {
case 12:
getCharacter(kCharacterAnna).inventoryItem = 0;
- if (_gameProgress[kProgressJacket] == 2 && !_gameEvents[kEventAnnaConversationGoodNight] && !_gameEvents[kEventAnnaIntroductionRejected])
+ if (_globals[kProgressJacket] == 2 && !_doneNIS[kEventAnnaConversationGoodNight] && !_doneNIS[kEventAnnaIntroductionRejected])
getCharacter(kCharacterAnna).inventoryItem = 0x80;
- if (_gameProgress[kProgressJacket] == 2 && !getCharacter(kCharacterAnna).inventoryItem && !_gameEvents[kEventAnnaGiveScarfAsk] && !_gameEvents[kEventAnnaGiveScarfDinerAsk] && !_gameEvents[kEventAnnaGiveScarfSalonAsk]) {
+ if (_globals[kProgressJacket] == 2 && !getCharacter(kCharacterAnna).inventoryItem && !_doneNIS[kEventAnnaGiveScarfAsk] && !_doneNIS[kEventAnnaGiveScarfDinerAsk] && !_doneNIS[kEventAnnaGiveScarfSalonAsk]) {
getCharacter(kCharacterAnna).inventoryItem = 8;
}
@@ -1624,15 +1624,15 @@ void LogicManager::HAND_Anna_WaitAugust(HAND_PARAMS) {
break;
case 18:
if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
- if (_gameEvents[kEventAnnaGiveScarf] ||
- _gameEvents[kEventAnnaGiveScarfDiner] ||
- _gameEvents[kEventAnnaGiveScarfSalon] ||
- _gameEvents[kEventAnnaGiveScarfMonogram] ||
- _gameEvents[kEventAnnaGiveScarfDinerMonogram] ||
- _gameEvents[kEventAnnaGiveScarfSalonMonogram]) {
+ if (_doneNIS[kEventAnnaGiveScarf] ||
+ _doneNIS[kEventAnnaGiveScarfDiner] ||
+ _doneNIS[kEventAnnaGiveScarfSalon] ||
+ _doneNIS[kEventAnnaGiveScarfMonogram] ||
+ _doneNIS[kEventAnnaGiveScarfDinerMonogram] ||
+ _doneNIS[kEventAnnaGiveScarfSalonMonogram]) {
playNIS(kEventAnnaGiveScarfSalonAsk);
} else {
- if (_gameEvents[kEventAugustPresentAnna] || _gameEvents[kEventAugustPresentAnnaFirstIntroduction]) {
+ if (_doneNIS[kEventAugustPresentAnna] || _doneNIS[kEventAugustPresentAnnaFirstIntroduction]) {
playNIS(kEventAnnaGiveScarfSalonMonogram);
} else {
playNIS(kEventAnnaGiveScarfSalon);
@@ -1644,17 +1644,17 @@ void LogicManager::HAND_Anna_WaitAugust(HAND_PARAMS) {
getCharacter(kCharacterAnna).inventoryItem &= ~8;
bumpCath(kCarRestaurant, 51, 255);
} else if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 2) {
- if (_gameEvents[kEventAugustPresentAnna] || _gameEvents[kEventAugustPresentAnnaFirstIntroduction]) {
+ if (_doneNIS[kEventAugustPresentAnna] || _doneNIS[kEventAugustPresentAnnaFirstIntroduction]) {
playNIS(kEventAnnaConversationGoodNight);
} else {
playNIS(kEventAnnaIntroductionRejected);
}
getCharacter(kCharacterAnna).inventoryItem &= ~0x80;
- if (_gameProgress[kProgressJacket] == 2 &&
- !_gameEvents[kEventAnnaGiveScarfAsk] &&
- !_gameEvents[kEventAnnaGiveScarfDinerAsk] &&
- !_gameEvents[kEventAnnaGiveScarfSalonAsk]) {
+ if (_globals[kProgressJacket] == 2 &&
+ !_doneNIS[kEventAnnaGiveScarfAsk] &&
+ !_doneNIS[kEventAnnaGiveScarfDinerAsk] &&
+ !_doneNIS[kEventAnnaGiveScarfSalonAsk]) {
getCharacter(kCharacterAnna).inventoryItem |= kItemScarf;
}
@@ -1729,8 +1729,8 @@ void LogicManager::HAND_Anna_FlirtAugust(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterAnna)[0]) {
- if (getCharacterCurrentParams(kCharacterAnna)[4] || (getCharacterCurrentParams(kCharacterAnna)[4] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
- if (getCharacterCurrentParams(kCharacterAnna)[4] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAnna)[4] || (getCharacterCurrentParams(kCharacterAnna)[4] = _realTime + 90, _realTime != -90)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[4] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAnna)[4] = 0x7FFFFFFF;
@@ -1978,8 +1978,8 @@ void LogicManager::HAND_Anna_WakeNight(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (getCharacterCurrentParams(kCharacterAnna)[0]) {
- if (getCharacterCurrentParams(kCharacterAnna)[2] || (getCharacterCurrentParams(kCharacterAnna)[2] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterAnna)[2] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAnna)[2] || (getCharacterCurrentParams(kCharacterAnna)[2] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[2] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAnna)[2] = 0x7FFFFFFF;
@@ -2171,7 +2171,7 @@ void LogicManager::HAND_Anna_DoWalk1019(HAND_PARAMS) {
if (msg->action == 12) {
getCharacter(kCharacterAnna).inventoryItem = 0;
- if (!_gameEvents[kEventAnnaGoodNight] && !_gameEvents[kEventAnnaGoodNightInverse])
+ if (!_doneNIS[kEventAnnaGoodNight] && !_doneNIS[kEventAnnaGoodNightInverse])
getCharacter(kCharacterAnna).inventoryItem = 0x80;
}
@@ -2597,7 +2597,7 @@ void LogicManager::HAND_Anna_GoLunch(HAND_PARAMS) {
AnnaCall(&LogicManager::CONS_Anna_DoSeqOtis, "801VS", 0, 0, 0);
break;
case 4:
- if (!_gameEvents[kEventAugustLunch]) {
+ if (!_doneNIS[kEventAugustLunch]) {
playDialog(kCharacterAnna, "Ann3136A", -1, 30);
} else {
playDialog(kCharacterAnna, "Ann3136", -1, 30);
@@ -2907,7 +2907,7 @@ void LogicManager::HAND_Anna_AfterLunch(HAND_PARAMS) {
break;
case 101169422:
- if (_gameEvents[kEventKronosVisit]) {
+ if (_doneNIS[kEventKronosVisit]) {
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
AnnaCall(&LogicManager::CONS_Anna_DoBlockSeqOtis, "112J", 5, 0x39, 0);
} else {
@@ -2994,7 +2994,7 @@ void LogicManager::HAND_Anna_Dressing(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressField48] != 0 && getCharacterCurrentParams(kCharacterAnna)[4] != 0x7FFFFFFF && _gameTime != 0) {
+ if (_globals[kProgressField48] != 0 && getCharacterCurrentParams(kCharacterAnna)[4] != 0x7FFFFFFF && _gameTime != 0) {
if (_gameTime > 2065500) {
getCharacterCurrentParams(kCharacterAnna)[4] = 0x7FFFFFFF;
CONS_Anna_GiveMaxToCond2(0, 0, 0, 0);
@@ -3054,8 +3054,8 @@ void LogicManager::HAND_Anna_Dressing(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterAnna)[0]) {
- if (getCharacterCurrentParams(kCharacterAnna)[6] || (getCharacterCurrentParams(kCharacterAnna)[6] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterAnna)[6] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAnna)[6] || (getCharacterCurrentParams(kCharacterAnna)[6] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[6] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAnna)[6] = 0x7FFFFFFF;
@@ -3215,8 +3215,8 @@ void LogicManager::HAND_Anna_GiveMaxToCond2(HAND_PARAMS) {
if (getCharacterCurrentParams(kCharacterAnna)[5] || (getCharacterCurrentParams(kCharacterAnna)[5] = _gameTime + 9000, _gameTime != -9000)) {
if (getCharacterCurrentParams(kCharacterAnna)[5] >= _gameTime) {
if (getCharacterCurrentParams(kCharacterAnna)[0]) {
- if (getCharacterCurrentParams(kCharacterAnna)[6] || (getCharacterCurrentParams(kCharacterAnna)[6] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterAnna)[6] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAnna)[6] || (getCharacterCurrentParams(kCharacterAnna)[6] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[6] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAnna)[6] = 0x7FFFFFFF;
@@ -3251,8 +3251,8 @@ void LogicManager::HAND_Anna_GiveMaxToCond2(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterAnna)[0]) {
- if (getCharacterCurrentParams(kCharacterAnna)[6] || (getCharacterCurrentParams(kCharacterAnna)[6] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterAnna)[6] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAnna)[6] || (getCharacterCurrentParams(kCharacterAnna)[6] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[6] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAnna)[6] = 0x7FFFFFFF;
@@ -3621,8 +3621,8 @@ void LogicManager::HAND_Anna_AfterConcert(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterAnna)[0]) {
- if (getCharacterCurrentParams(kCharacterAnna)[4] || (getCharacterCurrentParams(kCharacterAnna)[4] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterAnna)[4] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAnna)[4] || (getCharacterCurrentParams(kCharacterAnna)[4] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[4] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAnna)[4] = 0x7FFFFFFF;
@@ -3818,7 +3818,7 @@ void LogicManager::CONS_Anna_GoBagg(CONS_PARAMS) {
void LogicManager::HAND_Anna_GoBagg(HAND_PARAMS) {
switch (msg->action) {
case 12:
- _gameTimeTicksDelta = 3;
+ _timeSpeed = 3;
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_SaveGame, 1, 0, 0, 0);
break;
@@ -3889,7 +3889,7 @@ void LogicManager::HAND_Anna_InBagg(HAND_PARAMS) {
break;
case 12:
getCharacter(kCharacterAnna).characterPosition.car = kCarBaggage;
- _gameProgress[kProgressField54] = 1;
+ _globals[kProgressField54] = 1;
break;
case 235856512:
getCharacterCurrentParams(kCharacterAnna)[0] = 1;
@@ -3970,7 +3970,7 @@ void LogicManager::HAND_Anna_BaggageFight(HAND_PARAMS) {
case 3:
playNIS(kEventAnnaBagagePart2);
bumpCath(kCarBaggage, 96, 255);
- _gameProgress[kProgressField54] = 0;
+ _globals[kProgressField54] = 0;
forceJump(kCharacterVesna, &LogicManager::CONS_Vesna_InComp);
_gameTime = 2266200;
CONS_Anna_PrepareVienna(0, 0, 0, 0);
@@ -4054,11 +4054,11 @@ void LogicManager::HAND_Anna_Reading(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (checkCathDir(kCarRedSleeping, 46)) {
- if (getCharacterCurrentParams(kCharacterAnna)[3] || (getCharacterCurrentParams(kCharacterAnna)[3] = _currentGameSessionTicks + 30, _currentGameSessionTicks != -30)) {
- if (getCharacterCurrentParams(kCharacterAnna)[3] >= _currentGameSessionTicks) {
+ if (getCharacterCurrentParams(kCharacterAnna)[3] || (getCharacterCurrentParams(kCharacterAnna)[3] = _realTime + 30, _realTime != -30)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[3] >= _realTime) {
if (getCharacterCurrentParams(kCharacterAnna)[0]) {
- if (getCharacterCurrentParams(kCharacterAnna)[4] || (getCharacterCurrentParams(kCharacterAnna)[4] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterAnna)[4] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAnna)[4] || (getCharacterCurrentParams(kCharacterAnna)[4] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[4] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAnna)[4] = 0x7FFFFFFF;
@@ -4085,8 +4085,8 @@ void LogicManager::HAND_Anna_Reading(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterAnna)[3] = 0;
if (getCharacterCurrentParams(kCharacterAnna)[0]) {
- if (getCharacterCurrentParams(kCharacterAnna)[4] || (getCharacterCurrentParams(kCharacterAnna)[4] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterAnna)[4] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAnna)[4] || (getCharacterCurrentParams(kCharacterAnna)[4] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[4] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAnna)[4] = 0x7FFFFFFF;
@@ -4387,7 +4387,7 @@ void LogicManager::HAND_Anna_EnterCompCathFollowsAnna(HAND_PARAMS) {
break;
case 17:
- if (!_gameEvents[kEventAnnaTiredKiss] && nearChar(kCharacterCath, kCharacterAnna, 2000) && whoOnScreen(kCharacterAnna) &&
+ if (!_doneNIS[kEventAnnaTiredKiss] && nearChar(kCharacterCath, kCharacterAnna, 2000) && whoOnScreen(kCharacterAnna) &&
getCharacter(kCharacterAnna).characterPosition.position < getCharacter(kCharacterCath).characterPosition.position) {
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventAnnaTiredKiss, 0, 0);
@@ -4422,7 +4422,7 @@ void LogicManager::CONS_Anna_DoWalkCathFollowsAnna(CONS_PARAMS) {
void LogicManager::HAND_Anna_DoWalkCathFollowsAnna(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameEvents[kEventAnnaTired] || whoFacingCath(kCharacterAnna)) {
+ if (_doneNIS[kEventAnnaTired] || whoFacingCath(kCharacterAnna)) {
getCharacter(kCharacterAnna).inventoryItem = 0;
} else {
getCharacter(kCharacterAnna).inventoryItem = 0x80;
@@ -4447,7 +4447,7 @@ void LogicManager::HAND_Anna_DoWalkCathFollowsAnna(HAND_PARAMS) {
getCharacter(kCharacterAnna).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAnna, _functionsAnna[getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall]]);
fedEx(kCharacterAnna, kCharacterAnna, 18, 0);
- } else if (!_gameEvents[kEventAnnaTired]) {
+ } else if (!_doneNIS[kEventAnnaTired]) {
getCharacter(kCharacterAnna).inventoryItem = 0x80;
}
@@ -4509,7 +4509,7 @@ void LogicManager::HAND_Anna_LetDownHair(HAND_PARAMS) {
break;
case 12:
setDoor(37, kCharacterAnna, 0, 10, 9);
- _gameTimeTicksDelta = 1;
+ _timeSpeed = 1;
getCharacterCurrentParams(kCharacterAnna)[0] = _gameTime + 4500;
getCharacterCurrentParams(kCharacterAnna)[1] = _gameTime + 9000;
break;
@@ -4583,13 +4583,13 @@ void LogicManager::HAND_Anna_TiedUp(HAND_PARAMS) {
switch (msg->action) {
case 18:
if (getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] == 1) {
- if (_gameProgress[kProgressFieldC]) {
- if (_gameEvents[kEventAnnaKissTrainHijacked]) {
+ if (_globals[kProgressFieldC]) {
+ if (_doneNIS[kEventAnnaKissTrainHijacked]) {
playNIS(kEventAnnaBaggageTies2);
} else {
playNIS(kEventAnnaBaggageTies);
}
- } else if (_gameEvents[kEventAnnaKissTrainHijacked]) {
+ } else if (_doneNIS[kEventAnnaKissTrainHijacked]) {
playNIS(kEventAnnaBaggageTies3);
} else {
playNIS(kEventAnnaBaggageTies4);
@@ -4644,7 +4644,7 @@ void LogicManager::HAND_Anna_ReadyToScore(HAND_PARAMS) {
case 0:
if (_gameTime > 3645000 && !getCharacterCurrentParams(kCharacterAnna)[1]) {
getCharacterCurrentParams(kCharacterAnna)[1] = 1;
- _gameTimeTicksDelta = 0;
+ _timeSpeed = 0;
}
break;
@@ -4678,7 +4678,7 @@ void LogicManager::HAND_Anna_ReadyToScore(HAND_PARAMS) {
setDoor(106, kCharacterCath, 0, 10, 9);
playNIS(kEventAnnaDialogGoToJerusalem);
_gameTime = 4914000;
- _gameTimeTicksDelta = 0;
+ _timeSpeed = 0;
send(kCharacterAnna, kCharacterTatiana, 236060709, 0);
bumpCath(kCarBaggage, 97, 1);
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 3;
@@ -4725,7 +4725,7 @@ void LogicManager::HAND_Anna_Kidnapped(HAND_PARAMS) {
_gameTime = 4920300;
- if (_gameInventory[kItemFirebird].location == 4) {
+ if (_items[kItemFirebird].floating == 4) {
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventKronosHostageAnna, 0, 0);
} else {
@@ -4771,7 +4771,7 @@ void LogicManager::HAND_Anna_Waiting(HAND_PARAMS) {
case 17:
if (inDiningRoom(kCharacterCath) && cathHasItem(kItemFirebird)) {
CONS_Anna_FinalSequence(0, 0, 0, 0);
- } else if (inSalon(kCharacterCath) && !_gameEvents[kEventKahinaPunch]) {
+ } else if (inSalon(kCharacterCath) && !_doneNIS[kEventKahinaPunch]) {
_gameTime = 4923000;
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventKahinaPunch, 0, 0);
@@ -4817,8 +4817,8 @@ void LogicManager::CONS_Anna_FinalSequence(CONS_PARAMS) {
void LogicManager::HAND_Anna_FinalSequence(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (getCharacterCurrentParams(kCharacterAnna)[0] || (getCharacterCurrentParams(kCharacterAnna)[0] = _currentGameSessionTicks + 450, _currentGameSessionTicks != -450)) {
- if (getCharacterCurrentParams(kCharacterAnna)[0] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAnna)[0] || (getCharacterCurrentParams(kCharacterAnna)[0] = _realTime + 450, _realTime != -450)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[0] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAnna)[0] = 0x7FFFFFFF;
@@ -4852,7 +4852,7 @@ void LogicManager::HAND_Anna_FinalSequence(HAND_PARAMS) {
endGame(0, 1, 0, true);
break;
case 3:
- _gameProgress[kProgressIsEggOpen] = 1;
+ _globals[kProgressIsEggOpen] = 1;
if (whoRunningDialog(kCharacterAnna))
fadeDialog(kCharacterAnna);
@@ -4887,8 +4887,8 @@ void LogicManager::CONS_Anna_OpenFirebird(CONS_PARAMS) {
void LogicManager::HAND_Anna_OpenFirebird(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (getCharacterCurrentParams(kCharacterAnna)[0] || (getCharacterCurrentParams(kCharacterAnna)[0] = _currentGameSessionTicks + 180, _currentGameSessionTicks != -180)) {
- if (getCharacterCurrentParams(kCharacterAnna)[0] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAnna)[0] || (getCharacterCurrentParams(kCharacterAnna)[0] = _realTime + 180, _realTime != -180)) {
+ if (getCharacterCurrentParams(kCharacterAnna)[0] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAnna)[0] = 0x7FFFFFFF;
@@ -4903,7 +4903,7 @@ void LogicManager::HAND_Anna_OpenFirebird(HAND_PARAMS) {
playNIS(kEventKronosGiveFirebird);
if (cathHasItem(kItemWhistle)) {
endGame(0, 1, 53, true);
- } else if (_gameInventory[kItemWhistle].location == 1) {
+ } else if (_items[kItemWhistle].floating == 1) {
endGame(3, 208, 0, true);
} else {
endGame(3, 42, 54, true);
@@ -4915,13 +4915,13 @@ void LogicManager::HAND_Anna_OpenFirebird(HAND_PARAMS) {
break;
case 224309120:
- _gameProgress[kProgressIsEggOpen] = 0;
+ _globals[kProgressIsEggOpen] = 0;
_gameTime = 4941000;
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 1;
AnnaCall(&LogicManager::CONS_Anna_SaveGame, 2, kEventKronosGiveFirebird, 0, 0);
break;
case 270751616:
- _gameProgress[kProgressIsEggOpen] = 0;
+ _globals[kProgressIsEggOpen] = 0;
killGracePeriod();
_gameTime = 4941000;
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 2;
diff --git a/engines/lastexpress/characters/august.cpp b/engines/lastexpress/characters/august.cpp
index 0bebad61cf6..4b6ac078116 100644
--- a/engines/lastexpress/characters/august.cpp
+++ b/engines/lastexpress/characters/august.cpp
@@ -583,7 +583,7 @@ void LogicManager::HAND_August_DoWalk(HAND_PARAMS) {
break;
case 5:
- if (_gameProgress[kProgressEventMetAugust]) {
+ if (_globals[kProgressEventMetAugust]) {
if (rnd(2) == 0) {
playDialog(kCharacterCath, "CAT1002A", -1, 0);
} else {
@@ -756,7 +756,7 @@ void LogicManager::HAND_August_EnterComp(HAND_PARAMS) {
break;
case 12:
getCharacter(kCharacterAugust).inventoryItem = 0;
- switch (_gameProgress[kProgressChapter]) {
+ switch (_globals[kProgressChapter]) {
case 1:
Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterAugust)[2], 12, "626");
break;
@@ -845,7 +845,7 @@ void LogicManager::CONS_August_ExitComp(CONS_PARAMS) {
void LogicManager::HAND_August_ExitComp(HAND_PARAMS) {
switch (msg->action) {
case 12:
- switch (_gameProgress[kProgressChapter]) {
+ switch (_globals[kProgressChapter]) {
case 1:
Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterAugust)[1], 12, "626");
break;
@@ -884,7 +884,7 @@ void LogicManager::HAND_August_ExitComp(HAND_PARAMS) {
Common::strcat_s((char *)&getCharacterCurrentParams(kCharacterAugust)[4], 12, "Pc");
startCycOtis(kCharacterAugust, (char *)&getCharacterCurrentParams(kCharacterAugust)[4]);
softBlockAtDoor(kCharacterAugust, 3);
- if (_gameProgress[kProgressChapter] == 3 && _gameTime < 1998000) {
+ if (_globals[kProgressChapter] == 3 && _gameTime < 1998000) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
AugustCall(&LogicManager::CONS_August_DoDialog, "AUG2094", 0, 0, 0);
} else {
@@ -939,16 +939,16 @@ void LogicManager::HAND_August_CompLogic(HAND_PARAMS) {
if (getCharacterCurrentParams(kCharacterAugust)[1]) {
if (getCharacterCurrentParams(kCharacterAugust)[7] ||
- (getCharacterCurrentParams(kCharacterAugust)[7] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterAugust)[7] >= _currentGameSessionTicks) {
- if (_gameProgress[kProgressChapter] == 1) {
+ (getCharacterCurrentParams(kCharacterAugust)[7] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterAugust)[7] >= _realTime) {
+ if (_globals[kProgressChapter] == 1) {
if (getCharacterCurrentParams(kCharacterAugust)[5] != 0) {
if (getCharacterCurrentParams(kCharacterAugust)[8] ||
(getCharacterCurrentParams(kCharacterAugust)[8] = _gameTime + 6300, _gameTime != -6300)) {
if (getCharacterCurrentParams(kCharacterAugust)[8] >= _gameTime) {
- if (!getCharacterCurrentParams(kCharacterAugust)[3] && !_gameProgress[kProgressEventMetAugust] && !getCharacterCurrentParams(kCharacterAugust)[5] && getCharacterCurrentParams(kCharacterAugust)[0] - 4500 > _gameTime && !_gameProgress[kProgressField14]) {
- _gameProgress[kProgressField14] = 2;
+ if (!getCharacterCurrentParams(kCharacterAugust)[3] && !_globals[kProgressEventMetAugust] && !getCharacterCurrentParams(kCharacterAugust)[5] && getCharacterCurrentParams(kCharacterAugust)[0] - 4500 > _gameTime && !_globals[kProgressField14]) {
+ _globals[kProgressField14] = 2;
getCharacter(kCharacterAugust).characterPosition.location = 0;
getCharacter(kCharacterAugust).characterPosition.position = 8200;
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
@@ -965,8 +965,8 @@ void LogicManager::HAND_August_CompLogic(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterAugust)[8] = 0;
}
- if (!getCharacterCurrentParams(kCharacterAugust)[3] && !_gameProgress[kProgressEventMetAugust] && !getCharacterCurrentParams(kCharacterAugust)[5] && getCharacterCurrentParams(kCharacterAugust)[0] - 4500 > _gameTime && !_gameProgress[kProgressField14]) {
- _gameProgress[kProgressField14] = 2;
+ if (!getCharacterCurrentParams(kCharacterAugust)[3] && !_globals[kProgressEventMetAugust] && !getCharacterCurrentParams(kCharacterAugust)[5] && getCharacterCurrentParams(kCharacterAugust)[0] - 4500 > _gameTime && !_globals[kProgressField14]) {
+ _globals[kProgressField14] = 2;
getCharacter(kCharacterAugust).characterPosition.location = 0;
getCharacter(kCharacterAugust).characterPosition.position = 8200;
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
@@ -983,7 +983,7 @@ void LogicManager::HAND_August_CompLogic(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterAugust)[1] = 0;
getCharacterCurrentParams(kCharacterAugust)[2] = 1;
- if (_gameProgress[kProgressEventMetAugust] || _gameProgress[kProgressJacket] != 2) {
+ if (_globals[kProgressEventMetAugust] || _globals[kProgressJacket] != 2) {
setDoor(3, kCharacterAugust, 1, 0, 0);
} else {
setDoor(3, kCharacterAugust, 1, 0, 9);
@@ -992,14 +992,14 @@ void LogicManager::HAND_August_CompLogic(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterAugust)[7] = 0;
- if (_gameProgress[kProgressChapter] == 1) {
+ if (_globals[kProgressChapter] == 1) {
if (getCharacterCurrentParams(kCharacterAugust)[5] != 0) {
if (getCharacterCurrentParams(kCharacterAugust)[8] ||
(getCharacterCurrentParams(kCharacterAugust)[8] = _gameTime + 6300, _gameTime != -6300)) {
if (getCharacterCurrentParams(kCharacterAugust)[8] >= _gameTime) {
- if (!getCharacterCurrentParams(kCharacterAugust)[3] && !_gameProgress[kProgressEventMetAugust] && !getCharacterCurrentParams(kCharacterAugust)[5] && getCharacterCurrentParams(kCharacterAugust)[0] - 4500 > _gameTime && !_gameProgress[kProgressField14]) {
- _gameProgress[kProgressField14] = 2;
+ if (!getCharacterCurrentParams(kCharacterAugust)[3] && !_globals[kProgressEventMetAugust] && !getCharacterCurrentParams(kCharacterAugust)[5] && getCharacterCurrentParams(kCharacterAugust)[0] - 4500 > _gameTime && !_globals[kProgressField14]) {
+ _globals[kProgressField14] = 2;
getCharacter(kCharacterAugust).characterPosition.location = 0;
getCharacter(kCharacterAugust).characterPosition.position = 8200;
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
@@ -1016,8 +1016,8 @@ void LogicManager::HAND_August_CompLogic(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterAugust)[8] = 0;
}
- if (!getCharacterCurrentParams(kCharacterAugust)[3] && !_gameProgress[kProgressEventMetAugust] && !getCharacterCurrentParams(kCharacterAugust)[5] && getCharacterCurrentParams(kCharacterAugust)[0] - 4500 > _gameTime && !_gameProgress[kProgressField14]) {
- _gameProgress[kProgressField14] = 2;
+ if (!getCharacterCurrentParams(kCharacterAugust)[3] && !_globals[kProgressEventMetAugust] && !getCharacterCurrentParams(kCharacterAugust)[5] && getCharacterCurrentParams(kCharacterAugust)[0] - 4500 > _gameTime && !_globals[kProgressField14]) {
+ _globals[kProgressField14] = 2;
getCharacter(kCharacterAugust).characterPosition.location = 0;
getCharacter(kCharacterAugust).characterPosition.position = 8200;
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
@@ -1028,7 +1028,7 @@ void LogicManager::HAND_August_CompLogic(HAND_PARAMS) {
break;
case 8:
case 9:
- if (msg->action == 9 && _gameProgress[kProgressChapter] == 1 && !_gameProgress[kProgressEventMetAugust] && _gameProgress[kProgressJacket] == 2) {
+ if (msg->action == 9 && _globals[kProgressChapter] == 1 && !_globals[kProgressEventMetAugust] && _globals[kProgressJacket] == 2) {
setDoor(9, kCharacterCath, 0, 255, 255);
getCharacter(kCharacterCath).characterPosition.location = 1;
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 6;
@@ -1093,8 +1093,8 @@ void LogicManager::HAND_August_CompLogic(HAND_PARAMS) {
AugustCall(&LogicManager::CONS_August_EnterComp, 0, 0, 0, 0);
break;
case 5:
- if (_gameProgress[kProgressField14] == 2)
- _gameProgress[kProgressField14] = 0;
+ if (_globals[kProgressField14] == 2)
+ _globals[kProgressField14] = 0;
getCharacterCurrentParams(kCharacterAugust)[5] = 1;
getCharacterCurrentParams(kCharacterAugust)[1] = 0;
getCharacterCurrentParams(kCharacterAugust)[2] = 0;
@@ -1108,7 +1108,7 @@ void LogicManager::HAND_August_CompLogic(HAND_PARAMS) {
else
playNIS(kEventMeetAugustHisCompartment);
- _gameProgress[kProgressEventMetAugust] = 1;
+ _globals[kProgressEventMetAugust] = 1;
setDoor(3, 2, 1, 0, 0);
getCharacterCurrentParams(kCharacterAugust)[1] = 0;
getCharacterCurrentParams(kCharacterAugust)[2] = 1;
@@ -1129,7 +1129,7 @@ void LogicManager::HAND_August_CompLogic(HAND_PARAMS) {
break;
case 2:
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 10;
- if (!_gameProgress[kProgressEventMetAugust]) {
+ if (!_globals[kProgressEventMetAugust]) {
AugustCall(&LogicManager::CONS_August_DoDialog, "AUG1128G", 0, 0, 0);
} else {
AugustCall(&LogicManager::CONS_August_DoDialog, "AUG1128E", 0, 0, 0);
@@ -1138,7 +1138,7 @@ void LogicManager::HAND_August_CompLogic(HAND_PARAMS) {
break;
case 3:
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 11;
- if (!_gameProgress[kProgressEventMetAugust]) {
+ if (!_globals[kProgressEventMetAugust]) {
AugustCall(&LogicManager::CONS_August_DoDialog, "AUG1128H", 0, 0, 0);
} else {
AugustCall(&LogicManager::CONS_August_DoDialog, "AUG1128F", 0, 0, 0);
@@ -1146,7 +1146,7 @@ void LogicManager::HAND_August_CompLogic(HAND_PARAMS) {
break;
default:
- if (_gameProgress[kProgressEventMetAugust] || _gameProgress[kProgressJacket] != 2) {
+ if (_globals[kProgressEventMetAugust] || _globals[kProgressJacket] != 2) {
setDoor(3, kCharacterAugust, 1, 14, 0);
} else {
setDoor(3, kCharacterAugust, 1, 14, 9);
@@ -1160,7 +1160,7 @@ void LogicManager::HAND_August_CompLogic(HAND_PARAMS) {
case 9:
case 10:
case 11:
- if (_gameProgress[kProgressEventMetAugust] || _gameProgress[kProgressJacket] != 2) {
+ if (_globals[kProgressEventMetAugust] || _globals[kProgressJacket] != 2) {
setDoor(3, kCharacterAugust, 1, 14, 0);
} else {
setDoor(3, kCharacterAugust, 1, 14, 9);
@@ -1170,7 +1170,7 @@ void LogicManager::HAND_August_CompLogic(HAND_PARAMS) {
break;
case 12:
case 13:
- if (_gameProgress[kProgressEventMetAugust] || _gameProgress[kProgressJacket] != 2) {
+ if (_globals[kProgressEventMetAugust] || _globals[kProgressJacket] != 2) {
setDoor(3, kCharacterAugust, 1, 0, 0);
} else {
setDoor(3, kCharacterAugust, 1, 0, 9);
@@ -1254,7 +1254,7 @@ void LogicManager::HAND_August_Birth(HAND_PARAMS) {
getCharacter(kCharacterAugust).characterPosition.location = 1;
getCharacter(kCharacterAugust).characterPosition.car = kCarRestaurant;
getCharacter(kCharacterAugust).clothes = 0;
- _gameProgress[kProgressEventMetAugust] = 0;
+ _globals[kProgressEventMetAugust] = 0;
break;
default:
break;
@@ -1276,7 +1276,7 @@ void LogicManager::CONS_August_KnockTyler(CONS_PARAMS) {
void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressField14] == 29 || _gameProgress[kProgressField14] == 3) {
+ if (_globals[kProgressField14] == 29 || _globals[kProgressField14] == 3) {
if (getCharacterCurrentParams(kCharacterAugust)[2]) {
getCharacter(kCharacterAugust).characterPosition.location = 0;
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
@@ -1295,8 +1295,8 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
if (!getCharacterCurrentParams(kCharacterAugust)[1]) {
if (!getCharacterCurrentParams(kCharacterAugust)[10] &&
- (getCharacterCurrentParams(kCharacterAugust)[10] = _currentGameSessionTicks + 75, _currentGameSessionTicks == -75) ||
- getCharacterCurrentParams(kCharacterAugust)[10] < _currentGameSessionTicks) {
+ (getCharacterCurrentParams(kCharacterAugust)[10] = _realTime + 75, _realTime == -75) ||
+ getCharacterCurrentParams(kCharacterAugust)[10] < _realTime) {
if (!getCharacterCurrentParams(kCharacterAugust)[4]) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 8;
AugustCall(&LogicManager::CONS_August_DoDialog, "AUG1002B", 0, 0, 0);
@@ -1304,10 +1304,10 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
}
if (!getCharacterCurrentParams(kCharacterAugust)[11]) {
- getCharacterCurrentParams(kCharacterAugust)[11] = _currentGameSessionTicks + 75;
- if (_currentGameSessionTicks == -75) {
+ getCharacterCurrentParams(kCharacterAugust)[11] = _realTime + 75;
+ if (_realTime == -75) {
softReleaseAtDoor(kCharacterAugust, 1);
- if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
+ if (_globals[kProgressEventCorpseMovedFromFloor]) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 9;
AugustCall(&LogicManager::CONS_August_DoCorrOtis, "626Da", 1, 0, 0);
} else if (checkLoc(kCharacterCath, kCarGreenSleeping)) {
@@ -1324,10 +1324,10 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
}
}
- if (getCharacterCurrentParams(kCharacterAugust)[11] < _currentGameSessionTicks) {
+ if (getCharacterCurrentParams(kCharacterAugust)[11] < _realTime) {
getCharacterCurrentParams(kCharacterAugust)[11] = 0x7FFFFFFF;
softReleaseAtDoor(kCharacterAugust, 1);
- if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
+ if (_globals[kProgressEventCorpseMovedFromFloor]) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 9;
AugustCall(&LogicManager::CONS_August_DoCorrOtis, "626Da", 1, 0, 0);
} else if (checkLoc(kCharacterCath, kCarGreenSleeping)) {
@@ -1354,10 +1354,10 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
break;
}
- if (!getCharacterCurrentParams(kCharacterAugust)[8] && (getCharacterCurrentParams(kCharacterAugust)[8] = _currentGameSessionTicks + 45, _currentGameSessionTicks == -45) || getCharacterCurrentParams(kCharacterAugust)[8] < _currentGameSessionTicks) {
+ if (!getCharacterCurrentParams(kCharacterAugust)[8] && (getCharacterCurrentParams(kCharacterAugust)[8] = _realTime + 45, _realTime == -45) || getCharacterCurrentParams(kCharacterAugust)[8] < _realTime) {
if (checkDoor(1) == 1) {
- if (getCharacterCurrentParams(kCharacterAugust)[9] || (getCharacterCurrentParams(kCharacterAugust)[9] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterAugust)[9] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAugust)[9] || (getCharacterCurrentParams(kCharacterAugust)[9] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterAugust)[9] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAugust)[9] = 0x7FFFFFFF;
@@ -1392,7 +1392,7 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
setDoor(1, kCharacterAugust, checkDoor(1), getCharacterCurrentParams(kCharacterAugust)[3] == 0 ? 14 : 0, 9);
getCharacterCurrentParams(kCharacterAugust)[9] = 0;
- } else if (!_gameProgress[kProgressEventCorpseMovedFromFloor] || _gameProgress[kProgressJacket] == 1) {
+ } else if (!_globals[kProgressEventCorpseMovedFromFloor] || _globals[kProgressJacket] == 1) {
setDoor(9, 0, 0, 255, 255);
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustFindCorpse, 0, 0);
@@ -1420,7 +1420,7 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
break;
case 9:
- if (!_gameProgress[kProgressEventCorpseMovedFromFloor] || _gameProgress[kProgressJacket] == 1) {
+ if (!_globals[kProgressEventCorpseMovedFromFloor] || _globals[kProgressJacket] == 1) {
setDoor(9, kCharacterCath, 0, 255, 255);
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 13;
AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustFindCorpse, 0, 0);
@@ -1474,12 +1474,12 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
playDialog(0, "LIB014", -1, 0);
playNIS(kEventAugustFindCorpse);
- if (_gameEvents[kEventDinerAugustOriginalJacket]) {
- endGame(3, 4, _gameProgress[kProgressEventFoundCorpse] == kProgressField0 ? 56 : 50, true);
- } else if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
+ if (_doneNIS[kEventDinerAugustOriginalJacket]) {
+ endGame(3, 4, _globals[kProgressEventFoundCorpse] == kProgressField0 ? 56 : 50, true);
+ } else if (_globals[kProgressEventCorpseMovedFromFloor]) {
endGame(0, 1, 55, true);
} else {
- endGame(0, 1, _gameProgress[kProgressEventFoundCorpse] == kProgressField0 ? 56 : 50, true);
+ endGame(0, 1, _globals[kProgressEventFoundCorpse] == kProgressField0 ? 56 : 50, true);
}
break;
@@ -1490,7 +1490,7 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
getCharacter(kCharacterAugust).characterPosition.location = 1;
playNIS(getCharacterCurrentParams(kCharacterAugust)[6]);
playDialog(0, "LIB015", -1, 0);
- _gameProgress[kProgressEventMetAugust] = 1;
+ _globals[kProgressEventMetAugust] = 1;
getCharacter(kCharacterAugust).characterPosition.location = 0;
bumpCathTylerComp();
@@ -1510,10 +1510,10 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
case 8:
getCharacterCurrentParams(kCharacterAugust)[4] = 1;
if (!getCharacterCurrentParams(kCharacterAugust)[11]) {
- getCharacterCurrentParams(kCharacterAugust)[11] = _currentGameSessionTicks + 75;
- if (_currentGameSessionTicks == -75) {
+ getCharacterCurrentParams(kCharacterAugust)[11] = _realTime + 75;
+ if (_realTime == -75) {
softReleaseAtDoor(kCharacterAugust, 1);
- if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
+ if (_globals[kProgressEventCorpseMovedFromFloor]) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 9;
AugustCall(&LogicManager::CONS_August_DoCorrOtis, "626Da", 1, 0, 0);
} else if (checkLoc(kCharacterCath, kCarGreenSleeping)) {
@@ -1530,10 +1530,10 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
}
}
- if (getCharacterCurrentParams(kCharacterAugust)[11] < _currentGameSessionTicks) {
+ if (getCharacterCurrentParams(kCharacterAugust)[11] < _realTime) {
getCharacterCurrentParams(kCharacterAugust)[11] = 0x7FFFFFFF;
softReleaseAtDoor(kCharacterAugust, 1);
- if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
+ if (_globals[kProgressEventCorpseMovedFromFloor]) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 9;
AugustCall(&LogicManager::CONS_August_DoCorrOtis, "626Da", 1, 0, 0);
} else if (checkLoc(kCharacterCath, kCarGreenSleeping)) {
@@ -1577,10 +1577,10 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
break;
case 11:
playNIS(kEventAugustFindCorpse);
- if (_gameEvents[kEventDinerAugustOriginalJacket]) {
- endGame(3, 4, _gameProgress[kProgressEventFoundCorpse] == kProgressField0 ? 56 : 50, true);
+ if (_doneNIS[kEventDinerAugustOriginalJacket]) {
+ endGame(3, 4, _globals[kProgressEventFoundCorpse] == kProgressField0 ? 56 : 50, true);
} else {
- endGame(0, 1, _gameProgress[kProgressEventFoundCorpse] == kProgressField0 ? 56 : 50, true);
+ endGame(0, 1, _globals[kProgressEventFoundCorpse] == kProgressField0 ? 56 : 50, true);
}
break;
@@ -1600,12 +1600,12 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
playNIS(kEventAugustFindCorpse);
- if (_gameEvents[kEventDinerAugustOriginalJacket]) {
- endGame(3, 4, _gameProgress[kProgressEventFoundCorpse] == kProgressField0 ? 56 : 50, true);
- } else if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
+ if (_doneNIS[kEventDinerAugustOriginalJacket]) {
+ endGame(3, 4, _globals[kProgressEventFoundCorpse] == kProgressField0 ? 56 : 50, true);
+ } else if (_globals[kProgressEventCorpseMovedFromFloor]) {
endGame(0, 1, 55, true);
} else {
- endGame(0, 1, _gameProgress[kProgressEventFoundCorpse] == kProgressField0 ? 56 : 50, true);
+ endGame(0, 1, _globals[kProgressEventFoundCorpse] == kProgressField0 ? 56 : 50, true);
}
break;
@@ -1621,7 +1621,7 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
setDoor(1, kCharacterCath, 0, 10, 9);
setDoor(9, kCharacterCath, 0, 255, 255);
playNIS(getCharacterCurrentParams(kCharacterAugust)[6]);
- _gameProgress[kProgressEventMetAugust] = 1;
+ _globals[kProgressEventMetAugust] = 1;
getCharacter(kCharacterAugust).characterPosition.location = 0;
bumpCathTylerComp();
@@ -1673,7 +1673,7 @@ void LogicManager::HAND_August_DoNIS1006(HAND_PARAMS) {
else
playNIS(kEventDinerAugust);
- _gameProgress[kProgressEventMetAugust] = 1;
+ _globals[kProgressEventMetAugust] = 1;
bumpCath(kCarRestaurant, 61, 255);
getCharacter(kCharacterAugust).currentCall--;
@@ -1700,7 +1700,7 @@ void LogicManager::CONS_August_WaitTyler(CONS_PARAMS) {
void LogicManager::HAND_August_WaitTyler(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (!getCharacterCurrentParams(kCharacterAugust)[0] && _gameProgress[kProgressEventFoundCorpse]) {
+ if (!getCharacterCurrentParams(kCharacterAugust)[0] && _globals[kProgressEventFoundCorpse]) {
send(kCharacterAugust, kCharacterHeadWait, 239072064, 0);
getCharacterCurrentParams(kCharacterAugust)[0] = 1;
}
@@ -1725,7 +1725,7 @@ void LogicManager::HAND_August_WaitTyler(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterAugust)[1] = 0;
getCharacter(kCharacterAugust).inventoryItem = 0;
send(kCharacterAugust, kCharacterHeadWait, 191604416, 0);
- if (_gameProgress[kProgressJacket] == 2) {
+ if (_globals[kProgressJacket] == 2) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
AugustCall(&LogicManager::CONS_August_DoNIS1006, 0, 0, 0, 0);
} else {
@@ -1738,7 +1738,7 @@ void LogicManager::HAND_August_WaitTyler(HAND_PARAMS) {
send(kCharacterAugust, kCharacterTableD, 136455232, 0);
startCycOtis(kCharacterAugust, "010B");
- if (!_gameProgress[kProgressEventMetAugust])
+ if (!_globals[kProgressEventMetAugust])
getCharacterCurrentParams(kCharacterAugust)[1] = 128;
getCharacter(kCharacterAugust).inventoryItem = getCharacterCurrentParams(kCharacterAugust)[1];
@@ -1781,7 +1781,7 @@ void LogicManager::HAND_August_WaitTyler(HAND_PARAMS) {
AugustCall(&LogicManager::CONS_August_FinishSeqOtis, 0, 0, 0, 0);
break;
case 6:
- _gameProgress[kProgressField14] = 2;
+ _globals[kProgressField14] = 2;
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 7;
AugustCall(&LogicManager::CONS_August_DoWalk, 3, 8200, 0, 0);
break;
@@ -1821,11 +1821,11 @@ void LogicManager::CONS_August_SeekTyler(CONS_PARAMS) {
void LogicManager::HAND_August_SeekTyler(HAND_PARAMS) {
switch (msg->action) {
case 12:
- if (_gameProgress[kProgressEventMetAugust] || _gameProgress[kProgressField14]) {
+ if (_globals[kProgressEventMetAugust] || _globals[kProgressField14]) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 5;
AugustCall(&LogicManager::CONS_August_DoWalk, 3, 6470, 0, 0);
} else {
- _gameProgress[kProgressField14] = 2;
+ _globals[kProgressField14] = 2;
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
AugustCall(&LogicManager::CONS_August_DoWalk, 3, 8200, 0, 0);
}
@@ -1846,8 +1846,8 @@ void LogicManager::HAND_August_SeekTyler(HAND_PARAMS) {
AugustCall(&LogicManager::CONS_August_EnterComp, 0, 0, 0, 0);
break;
case 4:
- if (_gameProgress[kProgressField14] == 2)
- _gameProgress[kProgressField14] = 0;
+ if (_globals[kProgressField14] == 2)
+ _globals[kProgressField14] = 0;
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 7;
AugustCall(&LogicManager::CONS_August_CompLogic, _gameTime + 900, 0, 0, 0);
@@ -1945,7 +1945,7 @@ void LogicManager::HAND_August_OrderDinner(HAND_PARAMS) {
AugustCall(&LogicManager::CONS_August_DoNIS1006, 0, 0, 0, 0);
break;
case 12:
- if (!_gameProgress[kProgressEventMetAugust] && _gameProgress[kProgressJacket] == 2)
+ if (!_globals[kProgressEventMetAugust] && _globals[kProgressJacket] == 2)
getCharacterCurrentParams(kCharacterAugust)[0] = 128;
startCycOtis(kCharacterAugust, "010B");
@@ -2001,13 +2001,13 @@ void LogicManager::CONS_August_EatingDinner(CONS_PARAMS) {
void LogicManager::HAND_August_EatingDinner(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressField28] && !getCharacterCurrentParams(kCharacterAugust)[1] && getCharacterCurrentParams(kCharacterAugust)[2] != 0x7FFFFFFF && _gameTime) {
+ if (_globals[kProgressField28] && !getCharacterCurrentParams(kCharacterAugust)[1] && getCharacterCurrentParams(kCharacterAugust)[2] != 0x7FFFFFFF && _gameTime) {
if (_gameTime <= 1134000) {
if (!inDiningRoom(kCharacterCath) || dialogRunning("MRB1076") || dialogRunning("MRB1078") || dialogRunning("MRB1078A") || !getCharacterCurrentParams(kCharacterAugust)[2]) {
getCharacterCurrentParams(kCharacterAugust)[2] = _gameTime + 225;
if (_gameTime == -225) {
getCharacter(kCharacterAugust).inventoryItem = 0;
- _gameProgress[kProgressField28] = 0;
+ _globals[kProgressField28] = 0;
CONS_August_GreetAnna(0, 0, 0, 0);
break;
}
@@ -2019,7 +2019,7 @@ void LogicManager::HAND_August_EatingDinner(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterAugust)[2] = 0x7FFFFFFF;
getCharacter(kCharacterAugust).inventoryItem = 0;
- _gameProgress[kProgressField28] = 0;
+ _globals[kProgressField28] = 0;
CONS_August_GreetAnna(0, 0, 0, 0);
}
@@ -2031,7 +2031,7 @@ void LogicManager::HAND_August_EatingDinner(HAND_PARAMS) {
AugustCall(&LogicManager::CONS_August_DoNIS1006, 0, 0, 0, 0);
break;
case 12:
- if (!_gameProgress[kProgressEventMetAugust] && _gameProgress[kProgressJacket] == 2)
+ if (!_globals[kProgressEventMetAugust] && _globals[kProgressJacket] == 2)
getCharacterCurrentParams(kCharacterAugust)[0] = 128;
getCharacter(kCharacterAugust).inventoryItem = getCharacterCurrentParams(kCharacterAugust)[0];
@@ -2067,8 +2067,8 @@ void LogicManager::CONS_August_GreetAnna(CONS_PARAMS) {
void LogicManager::HAND_August_GreetAnna(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (getCharacterCurrentParams(kCharacterAugust)[2] || (getCharacterCurrentParams(kCharacterAugust)[2] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterAugust)[2] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAugust)[2] || (getCharacterCurrentParams(kCharacterAugust)[2] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterAugust)[2] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAugust)[2] = 0x7FFFFFFF;
@@ -2093,7 +2093,7 @@ void LogicManager::HAND_August_GreetAnna(HAND_PARAMS) {
} else if (getCharacterCurrentParams(kCharacterAugust)[1]) {
getCharacterCurrentParams(kCharacterAugust)[1] = 0;
- if (_gameProgress[kProgressEventMetAugust])
+ if (_globals[kProgressEventMetAugust])
getCharacter(kCharacterAugust).inventoryItem = 0;
playDialog(kCharacterAugust, "AUG1003A", -1, 0);
@@ -2129,12 +2129,12 @@ void LogicManager::HAND_August_GreetAnna(HAND_PARAMS) {
playDialog(kCharacterAugust, "AUG1003", -1, 0);
if (inDiningRoom(kCharacterCath))
- _gameProgress[kProgressField60] = 1;
+ _globals[kProgressField60] = 1;
getCharacterCurrentParams(kCharacterAugust)[1] = 1;
break;
case 4:
- if (_gameProgress[kProgressEventMetAugust]) {
+ if (_globals[kProgressEventMetAugust]) {
playNIS(kEventAugustPresentAnna);
send(kCharacterAugust, kCharacterAnna, 201437056, 0);
startSeqOtis(kCharacterAugust, "803GS");
@@ -2212,7 +2212,7 @@ void LogicManager::HAND_August_ReturnFromDinner(HAND_PARAMS) {
break;
case 3:
case 4:
- if (_gameProgress[kProgressField14] == 29) {
+ if (_globals[kProgressField14] == 29) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 4;
AugustCall(&LogicManager::CONS_August_CompLogic, _gameTime + 900, 0, 0, 0);
} else {
@@ -2301,8 +2301,8 @@ void LogicManager::HAND_August_GoSalon(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterAugust)[2]) {
- if (getCharacterCurrentParams(kCharacterAugust)[7] || (getCharacterCurrentParams(kCharacterAugust)[7] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
- if (getCharacterCurrentParams(kCharacterAugust)[7] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterAugust)[7] || (getCharacterCurrentParams(kCharacterAugust)[7] = _realTime + 90, _realTime != -90)) {
+ if (getCharacterCurrentParams(kCharacterAugust)[7] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAugust)[7] = 0x7FFFFFFF;
@@ -2394,7 +2394,7 @@ void LogicManager::CONS_August_BackFromSalon(CONS_PARAMS) {
void LogicManager::HAND_August_BackFromSalon(HAND_PARAMS) {
switch (msg->action) {
case 12:
- if (_gameProgress[kProgressEventMetAugust]) {
+ if (_globals[kProgressEventMetAugust]) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 1;
AugustCall(&LogicManager::CONS_August_CompLogic, _gameTime + 9000, 0, 0, 0);
} else {
@@ -2428,7 +2428,7 @@ void LogicManager::CONS_August_Asleep(CONS_PARAMS) {
void LogicManager::HAND_August_Asleep(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (!whoRunningDialog(kCharacterAugust) && _gameProgress[kProgressField18] != 4) {
+ if (!whoRunningDialog(kCharacterAugust) && _globals[kProgressField18] != 4) {
playDialog(kCharacterAugust, "AUG1057", -1, 0);
}
@@ -2508,7 +2508,7 @@ void LogicManager::HAND_August_AtBreakfast(HAND_PARAMS) {
AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustGoodMorning, 0, 0);
break;
case 12:
- if (!_gameEvents[kEventAugustGoodMorning])
+ if (!_doneNIS[kEventAugustGoodMorning])
getCharacter(kCharacterAugust).inventoryItem = 0x80;
send(kCharacterAugust, kCharacterTableA, 136455232, 0);
@@ -2541,7 +2541,7 @@ void LogicManager::HAND_August_AtBreakfast(HAND_PARAMS) {
CONS_August_OpenComp(0, 0, 0, 0);
break;
case 6:
- if (!_gameEvents[kEventAugustGoodMorning])
+ if (!_doneNIS[kEventAugustGoodMorning])
getCharacter(kCharacterAugust).inventoryItem = 0x80;
send(kCharacterAugust, kCharacterWaiter1, 219522616, 0);
startCycOtis(kCharacterAugust, "016B");
@@ -2815,7 +2815,7 @@ void LogicManager::HAND_August_DoWalkP3A(HAND_PARAMS) {
getCharacter(kCharacterAugust).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
- } else if (!_gameEvents[kEventAugustMerchandise] && nearChar(kCharacterAugust, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
+ } else if (!_doneNIS[kEventAugustMerchandise] && nearChar(kCharacterAugust, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
if (getCharacter(kCharacterAugust).characterPosition.car == kCarGreenSleeping || getCharacter(kCharacterAugust).characterPosition.car == kCarRedSleeping) {
playNIS(kEventAugustMerchandise);
if (getCharacter(kCharacterAugust).direction == 1)
@@ -2840,7 +2840,7 @@ void LogicManager::HAND_August_DoWalkP3A(HAND_PARAMS) {
break;
case 5:
- if (_gameProgress[kProgressEventMetAugust]) {
+ if (_globals[kProgressEventMetAugust]) {
if (rnd(2) == 0) {
playDialog(kCharacterCath, "CAT1002A", -1, 0);
} else {
@@ -2859,7 +2859,7 @@ void LogicManager::HAND_August_DoWalkP3A(HAND_PARAMS) {
getCharacter(kCharacterAugust).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterAugust, _functionsAugust[getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall]]);
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
- } else if (_gameEvents[kEventAugustMerchandise] && !_gameEvents[kEventAugustTalkGold] && !_gameEvents[kEventAugustTalkGoldDay]) {
+ } else if (_doneNIS[kEventAugustMerchandise] && !_doneNIS[kEventAugustTalkGold] && !_doneNIS[kEventAugustTalkGoldDay]) {
getCharacterCurrentParams(kCharacterAugust)[2] = 128;
}
@@ -2906,7 +2906,7 @@ void LogicManager::HAND_August_DoWalkP3B(HAND_PARAMS) {
getCharacter(kCharacterAugust).inventoryItem = 0;
playDialog(0, "CAT1002", -1, 0);
- if (_gameEvents[kEventAugustBringBriefcase]) {
+ if (_doneNIS[kEventAugustBringBriefcase]) {
playDialog(kCharacterAugust, "AUG3103", -1, 15);
} else {
playDialog(kCharacterAugust, "AUG3100", -1, 15);
@@ -2925,7 +2925,7 @@ void LogicManager::HAND_August_DoWalkP3B(HAND_PARAMS) {
fedEx(kCharacterAugust, kCharacterAugust, 18, 0);
} else if (getCharacterCurrentParams(kCharacterAugust)[2]) {
getCharacterCurrentParams(kCharacterAugust)[3] = 128;
- if (!_gameEvents[kEventAugustBringBriefcase])
+ if (!_doneNIS[kEventAugustBringBriefcase])
getCharacterCurrentParams(kCharacterAugust)[3] = 147;
}
@@ -2999,7 +2999,7 @@ void LogicManager::HAND_August_GoLunch(HAND_PARAMS) {
case 5:
getCharacter(kCharacterAugust).characterPosition.location = 1;
startCycOtis(kCharacterAugust, "010B2");
- if (!_gameEvents[kEventAugustLunch])
+ if (!_doneNIS[kEventAugustLunch])
getCharacter(kCharacterAugust).inventoryItem = 0x80;
break;
@@ -3047,7 +3047,7 @@ void LogicManager::HAND_August_ReturnLunch(HAND_PARAMS) {
case 18:
switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
case 1:
- if (_gameEvents[kEventAugustMerchandise]) {
+ if (_doneNIS[kEventAugustMerchandise]) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 4;
AugustCall(&LogicManager::CONS_August_DoWalkP3A, 3, 6470, 0, 0);
} else {
@@ -3247,7 +3247,7 @@ void LogicManager::HAND_August_Dressing(HAND_PARAMS) {
break;
case 8:
case 9:
- if (!_gameEvents[kEventAugustTalkCompartmentDoorBlueRedingote] && !_gameEvents[kEventAugustTalkCompartmentDoor] && !_gameEvents[kEventAugustBringEgg] && !_gameEvents[kEventAugustBringBriefcase]) {
+ if (!_doneNIS[kEventAugustTalkCompartmentDoorBlueRedingote] && !_doneNIS[kEventAugustTalkCompartmentDoor] && !_doneNIS[kEventAugustBringEgg] && !_doneNIS[kEventAugustBringBriefcase]) {
if (msg->action == 8)
playDialog(0, "LIB012", -1, 0);
@@ -3407,8 +3407,8 @@ void LogicManager::HAND_August_AfterConcert(HAND_PARAMS) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 3;
AugustCall(&LogicManager::CONS_August_SaveGame, 2, kEventAugustBringBriefcase, 0, 0);
- } else if (!cathHasItem(kItemFirebird) || _gameEvents[kEventAugustBringEgg]) {
- if (_gameEvents[kEventAugustTalkCompartmentDoorBlueRedingote] || _gameEvents[kEventAugustBringEgg] || _gameEvents[kEventAugustBringBriefcase]) {
+ } else if (!cathHasItem(kItemFirebird) || _doneNIS[kEventAugustBringEgg]) {
+ if (_doneNIS[kEventAugustTalkCompartmentDoorBlueRedingote] || _doneNIS[kEventAugustBringEgg] || _doneNIS[kEventAugustBringBriefcase]) {
setDoor(3, kCharacterAugust, 1, 0, 0);
if (msg->action == 8) {
@@ -3530,7 +3530,7 @@ void LogicManager::CONS_August_InSalon3(CONS_PARAMS) {
void LogicManager::HAND_August_InSalon3(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (!getCharacterCurrentParams(kCharacterAugust)[3] || getCharacterCurrentParams(kCharacterAugust)[1] || _gameProgress[kProgressField44]) {
+ if (!getCharacterCurrentParams(kCharacterAugust)[3] || getCharacterCurrentParams(kCharacterAugust)[1] || _globals[kProgressField44]) {
getCharacter(kCharacterAugust).inventoryItem = 0;
} else {
getCharacter(kCharacterAugust).inventoryItem = 0x80;
@@ -3606,7 +3606,7 @@ void LogicManager::HAND_August_InSalon3(HAND_PARAMS) {
case 122288808:
startCycOtis(kCharacterAugust, "122B");
getCharacterCurrentParams(kCharacterAugust)[1] = 0;
- if (_gameEvents[kEventAugustTalkCigar])
+ if (_doneNIS[kEventAugustTalkCigar])
getCharacterCurrentParams(kCharacterAugust)[0] = 9000;
break;
@@ -4045,8 +4045,8 @@ void LogicManager::HAND_August_Drinking(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterAugust)[4] ||
- (getCharacterCurrentParams(kCharacterAugust)[4] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterAugust)[0], _currentGameSessionTicks + getCharacterCurrentParams(kCharacterAugust)[0] != 0)) {
- if (getCharacterCurrentParams(kCharacterAugust)[4] >= _currentGameSessionTicks)
+ (getCharacterCurrentParams(kCharacterAugust)[4] = _realTime + getCharacterCurrentParams(kCharacterAugust)[0], _realTime + getCharacterCurrentParams(kCharacterAugust)[0] != 0)) {
+ if (getCharacterCurrentParams(kCharacterAugust)[4] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAugust)[4] = 0x7FFFFFFF;
@@ -4243,8 +4243,8 @@ void LogicManager::HAND_August_Hiding(HAND_PARAMS) {
case 0:
if (getCharacterCurrentParams(kCharacterAugust)[0]) {
if (getCharacterCurrentParams(kCharacterAugust)[3] ||
- (getCharacterCurrentParams(kCharacterAugust)[3] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterAugust)[3] >= _currentGameSessionTicks)
+ (getCharacterCurrentParams(kCharacterAugust)[3] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterAugust)[3] >= _realTime)
break;
getCharacterCurrentParams(kCharacterAugust)[3] = 0x7FFFFFFF;
@@ -4368,7 +4368,7 @@ void LogicManager::HAND_August_CutLoose(HAND_PARAMS) {
break;
case 18:
if (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] == 1) {
- if (_gameProgress[kProgressFieldC])
+ if (_globals[kProgressFieldC])
playNIS(kEventAugustUnhookCarsBetrayal);
else
playNIS(kEventAugustUnhookCars);
diff --git a/engines/lastexpress/characters/clerk.cpp b/engines/lastexpress/characters/clerk.cpp
index 10dd70d94f6..936b25abcc9 100644
--- a/engines/lastexpress/characters/clerk.cpp
+++ b/engines/lastexpress/characters/clerk.cpp
@@ -266,8 +266,8 @@ void LogicManager::HAND_Clerk_DoHaremKnock(HAND_PARAMS) {
break;
}
- _gameProgress[kProgressFieldDC] = 1;
- _gameProgress[kProgressFieldE0] = 1;
+ _globals[kProgressFieldDC] = 1;
+ _globals[kProgressFieldE0] = 1;
} else {
if (getCharacterCurrentParams(kCharacterClerk)[5] && getCharacterCurrentParams(kCharacterClerk)[6]) {
getCharacterParams(kCharacterClerk, 8)[5]++;
@@ -296,7 +296,7 @@ void LogicManager::HAND_Clerk_DoHaremKnock(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterClerk)[7] = 1;
}
- _gameProgress[kProgressFieldE0] = 1;
+ _globals[kProgressFieldE0] = 1;
} else {
if (getCharacterCurrentParams(kCharacterClerk)[5]) {
@@ -319,7 +319,7 @@ void LogicManager::HAND_Clerk_DoHaremKnock(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterClerk)[7] = 1;
}
- _gameProgress[kProgressFieldDC] = 1;
+ _globals[kProgressFieldDC] = 1;
} else {
if (getCharacterCurrentParams(kCharacterClerk)[6]) {
getCharacterParams(kCharacterClerk, 8)[3]++;
@@ -374,7 +374,7 @@ void LogicManager::HAND_Clerk_Processing(HAND_PARAMS) {
if (!getCharacterCurrentParams(kCharacterClerk)[4]) {
getCharacterCurrentParams(kCharacterClerk)[3]--;
- if (!getCharacterCurrentParams(kCharacterClerk)[3] && _gameProgress[kProgressJacket] == 2) {
+ if (!getCharacterCurrentParams(kCharacterClerk)[3] && _globals[kProgressJacket] == 2) {
if (isNight()) {
playNIS(kEventCathSmokeNight);
} else {
@@ -411,7 +411,7 @@ void LogicManager::HAND_Clerk_Processing(HAND_PARAMS) {
if (getCharacterParams(kCharacterClerk, 8)[7] && !whoRunningDialog(kCharacterTableF)) {
setDoor(
getCharacterParams(kCharacterClerk, 8)[7],
- _gameObjects[getCharacterParams(kCharacterClerk, 8)[7]].character,
+ _doors[getCharacterParams(kCharacterClerk, 8)[7]].who,
3,
10,
9
@@ -433,7 +433,7 @@ void LogicManager::HAND_Clerk_Processing(HAND_PARAMS) {
if (getCharacterParams(kCharacterClerk, 8)[7] && !whoRunningDialog(kCharacterTableF)) {
setDoor(
getCharacterParams(kCharacterClerk, 8)[7],
- _gameObjects[getCharacterParams(kCharacterClerk, 8)[7]].character,
+ _doors[getCharacterParams(kCharacterClerk, 8)[7]].who,
3,
10,
9
@@ -459,7 +459,7 @@ void LogicManager::HAND_Clerk_Processing(HAND_PARAMS) {
if (getCharacterParams(kCharacterClerk, 8)[7] && !whoRunningDialog(kCharacterTableF)) {
setDoor(
getCharacterParams(kCharacterClerk, 8)[7],
- _gameObjects[getCharacterParams(kCharacterClerk, 8)[7]].character,
+ _doors[getCharacterParams(kCharacterClerk, 8)[7]].who,
3,
10,
9);
@@ -490,7 +490,7 @@ void LogicManager::HAND_Clerk_Processing(HAND_PARAMS) {
break;
case 12:
getCharacterCurrentParams(kCharacterClerk)[2] = 1;
- if (_gameProgress[kProgressChapter] < 5) {
+ if (_globals[kProgressChapter] < 5) {
setDoor(5, kCharacterClerk, 3, 10, 9);
setDoor(6, kCharacterClerk, 3, 10, 9);
setDoor(7, kCharacterClerk, 3, 10, 9);
@@ -518,7 +518,7 @@ void LogicManager::HAND_Clerk_Processing(HAND_PARAMS) {
switch (getCharacter(kCharacterCath).characterPosition.car) {
case 1:
case 6:
- if (_gameProgress[kProgressIsDayTime]) {
+ if (_globals[kProgressIsDayTime]) {
startCycOtis(kCharacterClerk, "B1WNM");
} else if (isNight()) {
startCycOtis(kCharacterClerk, "B1WNN");
@@ -529,7 +529,7 @@ void LogicManager::HAND_Clerk_Processing(HAND_PARAMS) {
break;
case 3:
case 4:
- if (_gameProgress[kProgressIsDayTime]) {
+ if (_globals[kProgressIsDayTime]) {
startCycOtis(kCharacterClerk, "S1WNM");
} else if (isNight()) {
startCycOtis(kCharacterClerk, "S1WNN");
@@ -539,7 +539,7 @@ void LogicManager::HAND_Clerk_Processing(HAND_PARAMS) {
break;
case 5:
- if (_gameProgress[kProgressIsDayTime]) {
+ if (_globals[kProgressIsDayTime]) {
startCycOtis(kCharacterClerk, "RCWNM");
} else if (isNight()) {
startCycOtis(kCharacterClerk, "RCWNN");
@@ -562,7 +562,7 @@ void LogicManager::HAND_Clerk_Processing(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterClerk)[4] = 0;
}
- if (_gameProgress[kProgressJacket] != 1) {
+ if (_globals[kProgressJacket] != 1) {
if (getCharacterCurrentParams(kCharacterClerk)[7] && !inComp(kCharacterCath, getCharacterCurrentParams(kCharacterClerk)[8], getCharacterCurrentParams(kCharacterClerk)[9]) && !inComp(kCharacterCath, getCharacterCurrentParams(kCharacterClerk)[8], getCharacterCurrentParams(kCharacterClerk)[10])) {
if (dialogRunning((char *)&getCharacterCurrentParams(kCharacterClerk)[11]))
fadeDialog((char *)&getCharacterCurrentParams(kCharacterClerk)[11]);
diff --git a/engines/lastexpress/characters/cond1.cpp b/engines/lastexpress/characters/cond1.cpp
index 678e16b773a..30b0beed67d 100644
--- a/engines/lastexpress/characters/cond1.cpp
+++ b/engines/lastexpress/characters/cond1.cpp
@@ -106,7 +106,7 @@ void LogicManager::CONS_Cond1_DoSeqOtis(CONS_PARAMS) {
void LogicManager::HAND_Cond1_DoSeqOtis(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressJacket] == 1 &&
+ if (_globals[kProgressJacket] == 1 &&
nearChar(kCharacterCond1, kCharacterCath, 1000) &&
!inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
@@ -152,7 +152,7 @@ void LogicManager::CONS_Cond1_DoCorrOtis(CONS_PARAMS) {
void LogicManager::HAND_Cond1_DoCorrOtis(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressJacket] == 1 &&
+ if (_globals[kProgressJacket] == 1 &&
nearChar(kCharacterCond1, kCharacterCath, 1000) &&
!inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
@@ -200,7 +200,7 @@ void LogicManager::CONS_Cond1_DoBriefCorrOtis(CONS_PARAMS) {
void LogicManager::HAND_Cond1_DoBriefCorrOtis(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressJacket] == 1 &&
+ if (_globals[kProgressJacket] == 1 &&
nearChar(kCharacterCond1, kCharacterCath, 1000) &&
!inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
@@ -251,7 +251,7 @@ void LogicManager::CONS_Cond1_DoEnterCorrOtis(CONS_PARAMS) {
void LogicManager::HAND_Cond1_DoEnterCorrOtis(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressJacket] == 1 &&
+ if (_globals[kProgressJacket] == 1 &&
nearChar(kCharacterCond1, kCharacterCath, 1000) &&
!inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
@@ -311,7 +311,7 @@ void LogicManager::HAND_Cond1_FinishSeqOtis(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (getCharacter(kCharacterCond1).direction == 4) {
- if (_gameProgress[kProgressJacket] == 1 &&
+ if (_globals[kProgressJacket] == 1 &&
nearChar(kCharacterCond1, kCharacterCath, 1000) &&
!inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
@@ -357,7 +357,7 @@ void LogicManager::CONS_Cond1_DoDialog(CONS_PARAMS) {
void LogicManager::HAND_Cond1_DoDialog(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressJacket] == 1 &&
+ if (_globals[kProgressJacket] == 1 &&
nearChar(kCharacterCond1, kCharacterCath, 1000) &&
!inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
@@ -401,7 +401,7 @@ void LogicManager::CONS_Cond1_DoDialogFullVol(CONS_PARAMS) {
void LogicManager::HAND_Cond1_DoDialogFullVol(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressJacket] == 1 &&
+ if (_globals[kProgressJacket] == 1 &&
nearChar(kCharacterCond1, kCharacterCath, 1000) &&
!inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
@@ -500,13 +500,13 @@ void LogicManager::HAND_Cond1_DoWalk(HAND_PARAMS) {
break;
}
- if (_gameProgress[kProgressJacket] == 1) {
+ if (_globals[kProgressJacket] == 1) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
- } else if ((getCharacterParams(kCharacterCond1, 8)[5] || getCharacterParams(kCharacterCond1, 8)[6]) && !_gameEvents[kEventKronosConversation] && _gameProgress[kProgressJacket] == 2) {
+ } else if ((getCharacterParams(kCharacterCond1, 8)[5] || getCharacterParams(kCharacterCond1, 8)[6]) && !_doneNIS[kEventKronosConversation] && _globals[kProgressJacket] == 2) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 2;
Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensKronosInvitation, 0, 0);
- } else if (getCharacterParams(kCharacterCond1, 8)[9] && _gameProgress[kProgressJacket] == 2 && !_gameProgress[kProgressEventMetAugust]) {
+ } else if (getCharacterParams(kCharacterCond1, 8)[9] && _globals[kProgressJacket] == 2 && !_globals[kProgressEventMetAugust]) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensAugustWaiting, 0, 0);
} else {
@@ -530,8 +530,8 @@ void LogicManager::HAND_Cond1_DoWalk(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterCond1)[2] = 0;
getCharacter(kCharacterCond1).inventoryItem = kItemNone;
- if (_gameProgress[kProgressEventFoundCorpse] || _gameEvents[kEventMertensAskTylerCompartment] || _gameEvents[kEventMertensAskTylerCompartmentD]) {
- if (getCharacterParams(kCharacterCond1, 8)[3] && _gameProgress[kProgressJacket] == 2 && !_gameEvents[kEventMertensDontMakeBed] && !_gameProgress[kProgressEventCorpseThrown]) {
+ if (_globals[kProgressEventFoundCorpse] || _doneNIS[kEventMertensAskTylerCompartment] || _doneNIS[kEventMertensAskTylerCompartmentD]) {
+ if (getCharacterParams(kCharacterCond1, 8)[3] && _globals[kProgressJacket] == 2 && !_doneNIS[kEventMertensDontMakeBed] && !_globals[kProgressEventCorpseThrown]) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensDontMakeBed, 0, 0);
}
@@ -548,7 +548,7 @@ void LogicManager::HAND_Cond1_DoWalk(HAND_PARAMS) {
playChrExcuseMe(kCharacterCond1, kCharacterCath, 0);
break;
case 12:
- if (!_gameProgress[kProgressEventFoundCorpse] && !_gameEvents[kEventMertensAskTylerCompartment] && !_gameEvents[kEventMertensAskTylerCompartmentD] || getCharacterParams(kCharacterCond1, 8)[3] && _gameProgress[kProgressJacket] == 2 && !_gameEvents[kEventMertensDontMakeBed] && !_gameProgress[kProgressEventCorpseThrown]) {
+ if (!_globals[kProgressEventFoundCorpse] && !_doneNIS[kEventMertensAskTylerCompartment] && !_doneNIS[kEventMertensAskTylerCompartmentD] || getCharacterParams(kCharacterCond1, 8)[3] && _globals[kProgressJacket] == 2 && !_doneNIS[kEventMertensDontMakeBed] && !_globals[kProgressEventCorpseThrown]) {
getCharacterCurrentParams(kCharacterCond1)[2] = 1;
}
@@ -564,7 +564,7 @@ void LogicManager::HAND_Cond1_DoWalk(HAND_PARAMS) {
case 1:
playNIS(kEventMertensBloodJacket);
endGame(0, 1, 55, true);
- break;
+ return;
case 2:
if (getCharacter(kCharacterCond1).characterPosition.position < getCharacter(kCharacterCath).characterPosition.position) {
playNIS(kEventMertensKronosInvitation);
@@ -572,7 +572,7 @@ void LogicManager::HAND_Cond1_DoWalk(HAND_PARAMS) {
playNIS(kEventMertensKronosInvitationClosedWindows);
}
- _gameProgress[kProgressEventMertensChronosInvitation] = 1;
+ _globals[kProgressEventMertensChronosInvitation] = 1;
getCharacterParams(kCharacterCond1, 8)[6] = 0;
getCharacterParams(kCharacterCond1, 8)[5] = 0;
@@ -599,7 +599,7 @@ void LogicManager::HAND_Cond1_DoWalk(HAND_PARAMS) {
break;
case 3:
playNIS(kEventMertensAugustWaiting);
- _gameProgress[kProgressEventMertensAugustWaiting] = 1;
+ _globals[kProgressEventMertensAugustWaiting] = 1;
getCharacterParams(kCharacterCond1, 8)[9] = 0;
if (getCharacterCurrentParams(kCharacterCond1)[0] == 3 && getCharacterCurrentParams(kCharacterCond1)[1] == 8200) {
@@ -641,7 +641,7 @@ void LogicManager::HAND_Cond1_DoWalk(HAND_PARAMS) {
else
bumpCathRx(getCharacter(kCharacterCond1).characterPosition.car, getCharacter(kCharacterCond1).characterPosition.position + 750);
- break;
+ return;
case 6:
playNIS(kEventMertensDontMakeBed);
@@ -651,9 +651,9 @@ void LogicManager::HAND_Cond1_DoWalk(HAND_PARAMS) {
bumpCathRx(getCharacter(kCharacterCond1).characterPosition.car, getCharacter(kCharacterCond1).characterPosition.position + 750);
getCharacterParams(kCharacterCond1, 8)[3] = 0;
- break;
+ return;
default:
- break;
+ return;
}
if (walk(kCharacterCond1, getCharacterCurrentParams(kCharacterCond1)[0], getCharacterCurrentParams(kCharacterCond1)[1])) {
@@ -684,7 +684,7 @@ void LogicManager::CONS_Cond1_DoWait(CONS_PARAMS) {
void LogicManager::HAND_Cond1_DoWait(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressJacket] == 1 &&
+ if (_globals[kProgressJacket] == 1 &&
nearChar(kCharacterCond1, kCharacterCath, 1000) &&
!inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
@@ -735,7 +735,7 @@ void LogicManager::HAND_Cond1_StandAsideDialog(HAND_PARAMS) {
if (!whoRunningDialog(kCharacterCond1)) {
if (isNight()) {
if (!isFemale(getCharacterCurrentParams(kCharacterCond1)[0])) {
- if (getCharacterCurrentParams(kCharacterCond1)[0] || _gameProgress[kProgressField18] != 2) {
+ if (getCharacterCurrentParams(kCharacterCond1)[0] || _globals[kProgressField18] != 2) {
playDialog(kCharacterCond1, "CON1112F", -1, 0);
} else {
switch (rnd(3)) {
@@ -804,7 +804,7 @@ void LogicManager::CONS_Cond1_Passing(CONS_PARAMS) {
void LogicManager::HAND_Cond1_Passing(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressJacket] == 1 &&
+ if (_globals[kProgressJacket] == 1 &&
nearChar(kCharacterCond1, kCharacterCath, 1000) &&
!inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
@@ -813,8 +813,8 @@ void LogicManager::HAND_Cond1_Passing(HAND_PARAMS) {
}
if (!getCharacterCurrentParams(kCharacterCond1)[1] && !getCharacterCurrentParams(kCharacterCond1)[2]) {
if (!getCharacterCurrentParams(kCharacterCond1)[3]) {
- getCharacterCurrentParams(kCharacterCond1)[3] = _currentGameSessionTicks + 75;
- if (_currentGameSessionTicks + 75 == 0) {
+ getCharacterCurrentParams(kCharacterCond1)[3] = _realTime + 75;
+ if (_realTime + 75 == 0) {
getCharacter(kCharacterCond1).inventoryItem = kItemNone;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
Cond1Call(&LogicManager::CONS_Cond1_SitDownFast, 0, 0, 0, 0);
@@ -822,7 +822,7 @@ void LogicManager::HAND_Cond1_Passing(HAND_PARAMS) {
}
}
- if (getCharacterCurrentParams(kCharacterCond1)[3] < _currentGameSessionTicks) {
+ if (getCharacterCurrentParams(kCharacterCond1)[3] < _realTime) {
getCharacterCurrentParams(kCharacterCond1)[3] = 0x7FFFFFFF;
getCharacter(kCharacterCond1).inventoryItem = kItemNone;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
@@ -832,8 +832,8 @@ void LogicManager::HAND_Cond1_Passing(HAND_PARAMS) {
}
if (!getCharacterCurrentParams(kCharacterCond1)[4]) {
- getCharacterCurrentParams(kCharacterCond1)[4] = _currentGameSessionTicks + 225;
- if (_currentGameSessionTicks + 225 == 0) {
+ getCharacterCurrentParams(kCharacterCond1)[4] = _realTime + 225;
+ if (_realTime + 225 == 0) {
getCharacter(kCharacterCond1).inventoryItem = kItemNone;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
Cond1Call(&LogicManager::CONS_Cond1_SitDownFast, 0, 0, 0, 0);
@@ -841,8 +841,8 @@ void LogicManager::HAND_Cond1_Passing(HAND_PARAMS) {
}
}
- if (getCharacterCurrentParams(kCharacterCond1)[4] >= _currentGameSessionTicks) {
- getCharacter(kCharacterCond1).inventoryItem = _gameProgress[kProgressChapter] == 1 && !getCharacterParams(kCharacterCond1, 8)[16] && !_gameProgress[kProgressEventFoundCorpse] && !_gameEvents[kEventMertensAskTylerCompartment] && !_gameEvents[kEventMertensAskTylerCompartmentD];
+ if (getCharacterCurrentParams(kCharacterCond1)[4] >= _realTime) {
+ getCharacter(kCharacterCond1).inventoryItem = _globals[kProgressChapter] == 1 && !getCharacterParams(kCharacterCond1, 8)[16] && !_globals[kProgressEventFoundCorpse] && !_doneNIS[kEventMertensAskTylerCompartment] && !_doneNIS[kEventMertensAskTylerCompartmentD];
} else {
getCharacterCurrentParams(kCharacterCond1)[4] = 0x7FFFFFFF;
getCharacter(kCharacterCond1).inventoryItem = kItemNone;
@@ -871,7 +871,7 @@ void LogicManager::HAND_Cond1_Passing(HAND_PARAMS) {
break;
}
- if (_gameProgress[kProgressChapter] == 3 && !getCharacterCurrentParams(kCharacterCond1)[0] && _gameTime < 2173500 && (_gameTime > 2106000 || getCharacterCurrentParams(kCharacterCond1)[1] && _gameTime > 2079000)) {
+ if (_globals[kProgressChapter] == 3 && !getCharacterCurrentParams(kCharacterCond1)[0] && _gameTime < 2173500 && (_gameTime > 2106000 || getCharacterCurrentParams(kCharacterCond1)[1] && _gameTime > 2079000)) {
if (getCharacterCurrentParams(kCharacterCond1)[1] == 2) {
playDialog(kCharacterCond1, "CON3052", -1, 0);
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
@@ -886,7 +886,7 @@ void LogicManager::HAND_Cond1_Passing(HAND_PARAMS) {
break;
}
if (!getCharacterCurrentParams(kCharacterCond1)[1]) {
- if (_gameProgress[kProgressField40])
+ if (_globals[kProgressField40])
playDialog(kCharacterCond1, "CON3054", -1, 0);
else
playDialog(kCharacterCond1, "CON3053", -1, 0);
@@ -913,7 +913,7 @@ void LogicManager::HAND_Cond1_Passing(HAND_PARAMS) {
}
return;
case 17:
- if (checkCathDir(kCarGreenSleeping, 23) && getCharacterParams(kCharacterCond1, 8)[6] && !_gameEvents[kProgressFieldCC]) {
+ if (checkCathDir(kCarGreenSleeping, 23) && getCharacterParams(kCharacterCond1, 8)[6] && !_doneNIS[kProgressFieldCC]) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensKronosInvitation, 0, 0);
} else {
@@ -994,7 +994,7 @@ void LogicManager::CONS_Cond1_Listen(CONS_PARAMS) {
void LogicManager::HAND_Cond1_Listen(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressJacket] == 1 &&
+ if (_globals[kProgressJacket] == 1 &&
nearChar(kCharacterCond1, kCharacterCath, 1000) &&
!inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
@@ -1522,16 +1522,16 @@ void LogicManager::HAND_Cond1_MakeBed(HAND_PARAMS) {
break;
case 12:
getCharacterCurrentParams(kCharacterCond1)[2] = 1;
- getCharacterCurrentParams(kCharacterCond1)[3] = _gameObjects[getCharacterCurrentParams(kCharacterCond1)[0]].character;
- getCharacterCurrentParams(kCharacterCond1)[4] = _gameObjects[getCharacterCurrentParams(kCharacterCond1)[0]].door;
- getCharacterCurrentParams(kCharacterCond1)[5] = _gameObjects[getCharacterCurrentParams(kCharacterCond1)[0]].cursor;
- getCharacterCurrentParams(kCharacterCond1)[6] = _gameObjects[getCharacterCurrentParams(kCharacterCond1)[0]].cursor2;
+ getCharacterCurrentParams(kCharacterCond1)[3] = _doors[getCharacterCurrentParams(kCharacterCond1)[0]].who;
+ getCharacterCurrentParams(kCharacterCond1)[4] = _doors[getCharacterCurrentParams(kCharacterCond1)[0]].status;
+ getCharacterCurrentParams(kCharacterCond1)[5] = _doors[getCharacterCurrentParams(kCharacterCond1)[0]].windowCursor;
+ getCharacterCurrentParams(kCharacterCond1)[6] = _doors[getCharacterCurrentParams(kCharacterCond1)[0]].handleCursor;
if (getCharacterCurrentParams(kCharacterCond1)[1]) {
- getCharacterCurrentParams(kCharacterCond1)[7] = _gameObjects[getCharacterCurrentParams(kCharacterCond1)[1]].character;
- getCharacterCurrentParams(kCharacterCond1)[8] = _gameObjects[getCharacterCurrentParams(kCharacterCond1)[1]].door;
- getCharacterCurrentParams(kCharacterCond1)[9] = _gameObjects[getCharacterCurrentParams(kCharacterCond1)[1]].cursor;
- getCharacterCurrentParams(kCharacterCond1)[10] = _gameObjects[getCharacterCurrentParams(kCharacterCond1)[1]].cursor2;
+ getCharacterCurrentParams(kCharacterCond1)[7] = _doors[getCharacterCurrentParams(kCharacterCond1)[1]].who;
+ getCharacterCurrentParams(kCharacterCond1)[8] = _doors[getCharacterCurrentParams(kCharacterCond1)[1]].status;
+ getCharacterCurrentParams(kCharacterCond1)[9] = _doors[getCharacterCurrentParams(kCharacterCond1)[1]].windowCursor;
+ getCharacterCurrentParams(kCharacterCond1)[10] = _doors[getCharacterCurrentParams(kCharacterCond1)[1]].handleCursor;
setDoor(getCharacterCurrentParams(kCharacterCond1)[1], kCharacterCond1, 1, 10, 9);
}
@@ -1727,8 +1727,8 @@ void LogicManager::HAND_Cond1_MakeBedAugust(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (!getCharacterCurrentParams(kCharacterCond1)[0]) {
- if (getCharacterCurrentParams(kCharacterCond1)[1] || (getCharacterCurrentParams(kCharacterCond1)[1] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterCond1)[1] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterCond1)[1] || (getCharacterCurrentParams(kCharacterCond1)[1] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterCond1)[1] >= _realTime)
break;
getCharacterCurrentParams(kCharacterCond1)[1] = 0x7FFFFFFF;
@@ -1831,8 +1831,8 @@ void LogicManager::HAND_Cond1_MakeBedAlexei(HAND_PARAMS) {
case 0:
if (!getCharacterCurrentParams(kCharacterCond1)[0]) {
if (getCharacterCurrentParams(kCharacterCond1)[1] ||
- (getCharacterCurrentParams(kCharacterCond1)[1] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterCond1)[1] >= _currentGameSessionTicks)
+ (getCharacterCurrentParams(kCharacterCond1)[1] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterCond1)[1] >= _realTime)
break;
getCharacterCurrentParams(kCharacterCond1)[1] = 0x7FFFFFFF;
@@ -1863,10 +1863,10 @@ void LogicManager::HAND_Cond1_MakeBedAlexei(HAND_PARAMS) {
getCharacter(kCharacterCond1).characterPosition.location = 1;
endGraphics(kCharacterCond1);
- if (_gameProgress[kProgressChapter] == 1 &&
+ if (_globals[kProgressChapter] == 1 &&
getCharacterParams(kCharacterCond1, 8)[3] &&
- _gameProgress[kProgressField14] != 29) {
- _gameProgress[kProgressField14] = 3;
+ _globals[kProgressField14] != 29) {
+ _globals[kProgressField14] = 3;
}
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
@@ -1888,10 +1888,10 @@ void LogicManager::HAND_Cond1_MakeBedAlexei(HAND_PARAMS) {
getCharacter(kCharacterCond1).characterPosition.location = 1;
endGraphics(kCharacterCond1);
- if (_gameProgress[kProgressChapter] == 1 &&
+ if (_globals[kProgressChapter] == 1 &&
getCharacterParams(kCharacterCond1, 8)[3] &&
- _gameProgress[kProgressField14] != 29) {
- _gameProgress[kProgressField14] = 3;
+ _globals[kProgressField14] != 29) {
+ _globals[kProgressField14] = 3;
}
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
@@ -1946,9 +1946,9 @@ void LogicManager::CONS_Cond1_SubMakeBed(CONS_PARAMS) {
void LogicManager::HAND_Cond1_SubMakeBed(HAND_PARAMS) {
switch (msg->action) {
case 12:
- if (!_gameProgress[kProgressEventCorpseThrown] &&
+ if (!_globals[kProgressEventCorpseThrown] &&
getCharacterCurrentParams(kCharacterCond1)[0] &&
- _gameProgress[kProgressChapter] == 1 && _gameProgress[kProgressJacket] == 2) {
+ _globals[kProgressChapter] == 1 && _globals[kProgressJacket] == 2) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 1, 0, 0, 0);
} else {
@@ -1975,10 +1975,10 @@ void LogicManager::HAND_Cond1_SubMakeBed(HAND_PARAMS) {
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
break;
case 3:
- if (_gameProgress[kProgressJacket] == 1) {
+ if (_globals[kProgressJacket] == 1) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
- } else if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
+ } else if (_globals[kProgressEventCorpseMovedFromFloor]) {
blockAtDoor(kCharacterCond1, 1);
startSeqOtis(kCharacterCond1, "601Ra");
bumpCath(kCarGreenSleeping, 16, 255);
@@ -1996,7 +1996,7 @@ void LogicManager::HAND_Cond1_SubMakeBed(HAND_PARAMS) {
break;
case 5:
playNIS(kEventMertensCorpseFloor);
- endGame(0, 1, _gameProgress[kProgressEventFoundCorpse] == kProgressField0 ? 56 : 50, true);
+ endGame(0, 1, _globals[kProgressEventFoundCorpse] == kProgressField0 ? 56 : 50, true);
break;
case 6:
releaseAtDoor(kCharacterCond1, 1);
@@ -2006,7 +2006,7 @@ void LogicManager::HAND_Cond1_SubMakeBed(HAND_PARAMS) {
Cond1Call(&LogicManager::CONS_Cond1_MakeBed, 1, 17, 0, 0);
break;
case 7:
- if (_gameProgress[kProgressEventCorpseThrown] || _gameProgress[kProgressChapter] != 1) {
+ if (_globals[kProgressEventCorpseThrown] || _globals[kProgressChapter] != 1) {
if (nearChar(kCharacterCond1, kCharacterCath, 1000) && !whoOutside(kCharacterCath))
playDialog(kCharacterCond1, "CON1061", -1, 0);
@@ -2060,7 +2060,7 @@ void LogicManager::HAND_Cond1_EnterTyler(HAND_PARAMS) {
case 0:
case 10:
if (msg->action == 0) {
- if (_gameProgress[kProgressField14] == 29) {
+ if (_globals[kProgressField14] == 29) {
getCharacter(kCharacterCond1).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
@@ -2068,8 +2068,8 @@ void LogicManager::HAND_Cond1_EnterTyler(HAND_PARAMS) {
}
if (!getCharacterCurrentParams(kCharacterCond1)[1]) {
- getCharacterCurrentParams(kCharacterCond1)[1] = _currentGameSessionTicks + 150;
- if (_currentGameSessionTicks == -150) {
+ getCharacterCurrentParams(kCharacterCond1)[1] = _realTime + 150;
+ if (_realTime == -150) {
setDoor(1, kCharacterCath, checkDoor(1), 0, 0);
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 10;
Cond1Call(&LogicManager::CONS_Cond1_DoDialogFullVol, "CON1018A", 0, 0, 0);
@@ -2077,7 +2077,7 @@ void LogicManager::HAND_Cond1_EnterTyler(HAND_PARAMS) {
}
}
- if (getCharacterCurrentParams(kCharacterCond1)[1] < _currentGameSessionTicks) {
+ if (getCharacterCurrentParams(kCharacterCond1)[1] < _realTime) {
getCharacterCurrentParams(kCharacterCond1)[1] = 0x7FFFFFFF;
setDoor(1, kCharacterCath, checkDoor(1), 0, 0);
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 10;
@@ -2089,16 +2089,16 @@ void LogicManager::HAND_Cond1_EnterTyler(HAND_PARAMS) {
}
if (!getCharacterCurrentParams(kCharacterCond1)[2]) {
- getCharacterCurrentParams(kCharacterCond1)[2] = _currentGameSessionTicks + 300;
- if (_currentGameSessionTicks == -300) {
+ getCharacterCurrentParams(kCharacterCond1)[2] = _realTime + 300;
+ if (_realTime == -300) {
if (checkDoor(1) == 1) {
setDoor(1, kCharacterCath, checkDoor(1), 0, 0);
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 11;
Cond1Call(&LogicManager::CONS_Cond1_DoDialogFullVol, "CON1018B", 0, 0, 0);
} else {
playDialog(0, "LIB014", -1, 0);
- if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
- if (_gameProgress[kProgressJacket] == 1) {
+ if (_globals[kProgressEventCorpseMovedFromFloor]) {
+ if (_globals[kProgressJacket] == 1) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 13;
Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
} else if (getCharacterCurrentParams(kCharacterCond1)[0]) {
@@ -2152,9 +2152,9 @@ void LogicManager::HAND_Cond1_EnterTyler(HAND_PARAMS) {
}
}
- if (getCharacterCurrentParams(kCharacterCond1)[2] >= _currentGameSessionTicks) {
- if (getCharacterCurrentParams(kCharacterCond1)[3] || (getCharacterCurrentParams(kCharacterCond1)[3] = _currentGameSessionTicks + 375, _currentGameSessionTicks != -375)) {
- if (getCharacterCurrentParams(kCharacterCond1)[3] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterCond1)[2] >= _realTime) {
+ if (getCharacterCurrentParams(kCharacterCond1)[3] || (getCharacterCurrentParams(kCharacterCond1)[3] = _realTime + 375, _realTime != -375)) {
+ if (getCharacterCurrentParams(kCharacterCond1)[3] >= _realTime)
break;
getCharacterCurrentParams(kCharacterCond1)[3] = 0x7FFFFFFF;
@@ -2162,8 +2162,8 @@ void LogicManager::HAND_Cond1_EnterTyler(HAND_PARAMS) {
playDialog(0, "LIB033", -1, 0);
- if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
- if (_gameProgress[kProgressJacket] == 1) {
+ if (_globals[kProgressEventCorpseMovedFromFloor]) {
+ if (_globals[kProgressJacket] == 1) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 18;
Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
} else if (getCharacterCurrentParams(kCharacterCond1)[0]) {
@@ -2222,8 +2222,8 @@ void LogicManager::HAND_Cond1_EnterTyler(HAND_PARAMS) {
Cond1Call(&LogicManager::CONS_Cond1_DoDialogFullVol, "CON1018B", 0, 0, 0);
} else {
playDialog(0, "LIB014", -1, 0);
- if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
- if (_gameProgress[kProgressJacket] == 1) {
+ if (_globals[kProgressEventCorpseMovedFromFloor]) {
+ if (_globals[kProgressJacket] == 1) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 13;
Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
} else if (getCharacterCurrentParams(kCharacterCond1)[0]) {
@@ -2310,8 +2310,8 @@ void LogicManager::HAND_Cond1_EnterTyler(HAND_PARAMS) {
playDialog(0, "LIB032", -1, 0);
}
- if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
- if (_gameProgress[kProgressJacket] == 1) {
+ if (_globals[kProgressEventCorpseMovedFromFloor]) {
+ if (_globals[kProgressJacket] == 1) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 27;
Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
} else if (getCharacterCurrentParams(kCharacterCond1)[0]) {
@@ -2378,7 +2378,7 @@ void LogicManager::HAND_Cond1_EnterTyler(HAND_PARAMS) {
case 18:
switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
case 1:
- if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
+ if (_globals[kProgressEventCorpseMovedFromFloor]) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 4;
Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "601Ra", 1, 0, 0);
} else if (checkLoc(kCharacterCath, 3)) {
@@ -2400,7 +2400,7 @@ void LogicManager::HAND_Cond1_EnterTyler(HAND_PARAMS) {
case 17:
case 26:
playNIS(kEventMertensCorpseFloor);
- endGame(0, 1, _gameProgress[kProgressEventFoundCorpse] == 0 ? 56 : 50, true);
+ endGame(0, 1, _globals[kProgressEventFoundCorpse] == 0 ? 56 : 50, true);
return;
case 4:
setDoor(1, kCharacterCath, 1, 0, 0);
@@ -2413,7 +2413,7 @@ void LogicManager::HAND_Cond1_EnterTyler(HAND_PARAMS) {
break;
}
- if (_gameProgress[kProgressEventCorpseThrown] || _gameProgress[kProgressChapter] != 1) {
+ if (_globals[kProgressEventCorpseThrown] || _globals[kProgressChapter] != 1) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
Cond1Call(&LogicManager::CONS_Cond1_MakeBed, 1, 17, 0, 0);
} else {
@@ -2454,8 +2454,8 @@ void LogicManager::HAND_Cond1_EnterTyler(HAND_PARAMS) {
endGame(0, 1, 55, 1);
}
- if (getCharacterCurrentParams(kCharacterCond1)[3] || (getCharacterCurrentParams(kCharacterCond1)[3] = _currentGameSessionTicks + 375, _currentGameSessionTicks != -375)) {
- if (getCharacterCurrentParams(kCharacterCond1)[3] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterCond1)[3] || (getCharacterCurrentParams(kCharacterCond1)[3] = _realTime + 375, _realTime != -375)) {
+ if (getCharacterCurrentParams(kCharacterCond1)[3] >= _realTime)
break;
getCharacterCurrentParams(kCharacterCond1)[3] = 0x7FFFFFFF;
@@ -2463,8 +2463,8 @@ void LogicManager::HAND_Cond1_EnterTyler(HAND_PARAMS) {
playDialog(0, "LIB033", -1, 0);
- if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
- if (_gameProgress[kProgressJacket] == 1) {
+ if (_globals[kProgressEventCorpseMovedFromFloor]) {
+ if (_globals[kProgressJacket] == 1) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 18;
Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
} else if (getCharacterCurrentParams(kCharacterCond1)[0]) {
@@ -2526,7 +2526,7 @@ void LogicManager::HAND_Cond1_EnterTyler(HAND_PARAMS) {
break;
case 15:
playNIS(kEventMertensAugustWaitingCompartment);
- _gameProgress[kProgressEventMertensAugustWaiting] = 1;
+ _globals[kProgressEventMertensAugustWaiting] = 1;
playDialog(0, "LIB015", -1, 0);
bumpCathTylerComp();
@@ -2536,7 +2536,7 @@ void LogicManager::HAND_Cond1_EnterTyler(HAND_PARAMS) {
break;
case 16:
playNIS(kEventMertensKronosInvitationCompartment);
- _gameProgress[kProgressEventMertensChronosInvitation] = 1;
+ _globals[kProgressEventMertensChronosInvitation] = 1;
playDialog(0, "LIB015", -1, 0);
bumpCathTylerComp();
@@ -2551,7 +2551,7 @@ void LogicManager::HAND_Cond1_EnterTyler(HAND_PARAMS) {
break;
case 20:
playNIS(kEventMertensAugustWaitingCompartment);
- _gameProgress[kProgressEventMertensAugustWaiting] = 1;
+ _globals[kProgressEventMertensAugustWaiting] = 1;
playDialog(0, "LIB015", -1, 0);
bumpCathTylerComp();
@@ -2561,7 +2561,7 @@ void LogicManager::HAND_Cond1_EnterTyler(HAND_PARAMS) {
break;
case 21:
playNIS(kEventMertensKronosInvitationCompartment);
- _gameProgress[kProgressEventMertensChronosInvitation] = 1;
+ _globals[kProgressEventMertensChronosInvitation] = 1;
playDialog(0, "LIB015", -1, 0);
bumpCathTylerComp();
@@ -2570,7 +2570,7 @@ void LogicManager::HAND_Cond1_EnterTyler(HAND_PARAMS) {
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
break;
case 23:
- _gameProgress[kProgressEventMertensAugustWaiting] = 1;
+ _globals[kProgressEventMertensAugustWaiting] = 1;
setDoor(1, kCharacterCath, checkDoor(1), 10, 9);
getCharacter(kCharacterCond1).currentCall--;
@@ -2578,7 +2578,7 @@ void LogicManager::HAND_Cond1_EnterTyler(HAND_PARAMS) {
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
break;
case 24:
- _gameProgress[kProgressEventMertensChronosInvitation] = 1;
+ _globals[kProgressEventMertensChronosInvitation] = 1;
setDoor(1, kCharacterCath, checkDoor(1), 10, 9);
getCharacter(kCharacterCond1).currentCall--;
@@ -2594,7 +2594,7 @@ void LogicManager::HAND_Cond1_EnterTyler(HAND_PARAMS) {
break;
case 29:
playNIS(kEventMertensAugustWaitingCompartment);
- _gameProgress[kProgressEventMertensAugustWaiting] = 1;
+ _globals[kProgressEventMertensAugustWaiting] = 1;
playDialog(0, "LIB015", -1, 0);
bumpCathTylerComp();
@@ -2604,7 +2604,7 @@ void LogicManager::HAND_Cond1_EnterTyler(HAND_PARAMS) {
break;
case 30:
playNIS(kEventMertensKronosInvitationCompartment);
- _gameProgress[kProgressEventMertensChronosInvitation] = 1;
+ _globals[kProgressEventMertensChronosInvitation] = 1;
playDialog(0, "LIB015", -1, 0);
bumpCathTylerComp();
@@ -2740,8 +2740,9 @@ void LogicManager::HAND_Cond1_VisitCond2Double(HAND_PARAMS) {
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
break;
default:
- return;
+ break;
}
+
break;
case 155853632:
getCharacterCurrentParams(kCharacterCond1)[7] = 1;
@@ -2784,14 +2785,14 @@ void LogicManager::HAND_Cond1_CathBuzzing(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterCond1)[0] == 1) {
- if (_gameProgress[kProgressField14]) {
+ if (_globals[kProgressField14]) {
getCharacter(kCharacterCond1).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
break;
}
- _gameProgress[kProgressField14] = 3;
+ _globals[kProgressField14] = 3;
}
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
@@ -2805,7 +2806,7 @@ void LogicManager::HAND_Cond1_CathBuzzing(HAND_PARAMS) {
return;
case 2:
if (getCharacterCurrentParams(kCharacterCond1)[0] == 1) {
- if (_gameProgress[kProgressChapter] == 4)
+ if (_globals[kProgressChapter] == 4)
send(kCharacterCond1, kCharacterTatiana, 238790488, 0);
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
Cond1Call(&LogicManager::CONS_Cond1_EnterTyler, 3, 0, 0, 0);
@@ -2825,8 +2826,8 @@ void LogicManager::HAND_Cond1_CathBuzzing(HAND_PARAMS) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
Cond1Call(&LogicManager::CONS_Cond1_DoCorrOtis, "601Mc", 3, 0, 0);
} else {
- if (_gameProgress[kProgressField14] == 3)
- _gameProgress[kProgressField14] = 0;
+ if (_globals[kProgressField14] == 3)
+ _globals[kProgressField14] = 0;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
@@ -2834,8 +2835,8 @@ void LogicManager::HAND_Cond1_CathBuzzing(HAND_PARAMS) {
break;
case 3:
- if (_gameProgress[kProgressField14] == 3)
- _gameProgress[kProgressField14] = 0;
+ if (_globals[kProgressField14] == 3)
+ _globals[kProgressField14] = 0;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
@@ -2852,8 +2853,8 @@ void LogicManager::HAND_Cond1_CathBuzzing(HAND_PARAMS) {
}
softReleaseAtDoor(kCharacterCond1, 2);
- if (_gameProgress[kProgressField14] == 3)
- _gameProgress[kProgressField14] = 0;
+ if (_globals[kProgressField14] == 3)
+ _globals[kProgressField14] = 0;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
@@ -2870,8 +2871,8 @@ void LogicManager::HAND_Cond1_CathBuzzing(HAND_PARAMS) {
}
softReleaseAtDoor(kCharacterCond1, 3);
- if (_gameProgress[kProgressField14] == 3)
- _gameProgress[kProgressField14] = 0;
+ if (_globals[kProgressField14] == 3)
+ _globals[kProgressField14] = 0;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 8;
Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
@@ -3204,12 +3205,12 @@ void LogicManager::CONS_Cond1_DeliverAugustMessage(CONS_PARAMS) {
void LogicManager::HAND_Cond1_DeliverAugustMessage(HAND_PARAMS) {
switch (msg->action) {
case 12:
- if (_gameProgress[kProgressField14] == 29) {
+ if (_globals[kProgressField14] == 29) {
getCharacter(kCharacterCond1).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
} else {
- _gameProgress[kProgressField14] = 3;
+ _globals[kProgressField14] = 3;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
Cond1Call(&LogicManager::CONS_Cond1_GetUp, 0, 0, 0, 0);
}
@@ -3223,11 +3224,11 @@ void LogicManager::HAND_Cond1_DeliverAugustMessage(HAND_PARAMS) {
break;
case 2:
if (!getCharacterParams(kCharacterCond1, 8)[9] ||
- _gameProgress[kProgressEventMetAugust]) {
+ _globals[kProgressEventMetAugust]) {
getCharacterParams(kCharacterCond1, 8)[9] = 0;
- if (_gameProgress[kProgressField14] == 3)
- _gameProgress[kProgressField14] = 0;
+ if (_globals[kProgressField14] == 3)
+ _globals[kProgressField14] = 0;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
@@ -3248,10 +3249,10 @@ void LogicManager::HAND_Cond1_DeliverAugustMessage(HAND_PARAMS) {
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
break;
case 5:
- if (_gameProgress[kProgressField14] == 3)
- _gameProgress[kProgressField14] = 0;
+ if (_globals[kProgressField14] == 3)
+ _globals[kProgressField14] = 0;
- if (_gameProgress[kProgressEventMertensAugustWaiting])
+ if (_globals[kProgressEventMertensAugustWaiting])
getCharacterParams(kCharacterCond1, 8)[9] = 0;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
@@ -3285,12 +3286,12 @@ void LogicManager::CONS_Cond1_DeliverKronosMessage(CONS_PARAMS) {
void LogicManager::HAND_Cond1_DeliverKronosMessage(HAND_PARAMS) {
switch (msg->action) {
case 12:
- if (_gameProgress[kProgressField14] == 29) {
+ if (_globals[kProgressField14] == 29) {
getCharacter(kCharacterCond1).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond1, _functionsCond1[getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall]]);
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
} else {
- _gameProgress[kProgressField14] = 3;
+ _globals[kProgressField14] = 3;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
Cond1Call(&LogicManager::CONS_Cond1_GetUp, 0, 0, 0, 0);
}
@@ -3307,8 +3308,8 @@ void LogicManager::HAND_Cond1_DeliverKronosMessage(HAND_PARAMS) {
getCharacterParams(kCharacterCond1, 8)[5] = 0;
getCharacterParams(kCharacterCond1, 8)[6] = 0;
- if (_gameProgress[kProgressField14] == 3)
- _gameProgress[kProgressField14] = 0;
+ if (_globals[kProgressField14] == 3)
+ _globals[kProgressField14] = 0;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
@@ -3327,8 +3328,8 @@ void LogicManager::HAND_Cond1_DeliverKronosMessage(HAND_PARAMS) {
getCharacterParams(kCharacterCond1, 8)[5] = 0;
getCharacterParams(kCharacterCond1, 8)[6] = 0;
- if (_gameProgress[kProgressField14] == 3)
- _gameProgress[kProgressField14] = 0;
+ if (_globals[kProgressField14] == 3)
+ _globals[kProgressField14] = 0;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
@@ -3347,8 +3348,8 @@ void LogicManager::HAND_Cond1_DeliverKronosMessage(HAND_PARAMS) {
} else {
getCharacterParams(kCharacterCond1, 8)[5] = 0;
getCharacterParams(kCharacterCond1, 8)[6] = 0;
- if (_gameProgress[kProgressField14] == 3)
- _gameProgress[kProgressField14] = 0;
+ if (_globals[kProgressField14] == 3)
+ _globals[kProgressField14] = 0;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 5;
Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
}
@@ -3365,10 +3366,10 @@ void LogicManager::HAND_Cond1_DeliverKronosMessage(HAND_PARAMS) {
fedEx(kCharacterCond1, kCharacterCond1, 18, 0);
break;
case 7:
- if (_gameProgress[kProgressField14] == 3)
- _gameProgress[kProgressField14] = 0;
+ if (_globals[kProgressField14] == 3)
+ _globals[kProgressField14] = 0;
- if (!_gameProgress[kProgressEventMertensChronosInvitation])
+ if (!_globals[kProgressEventMertensChronosInvitation])
getCharacterParams(kCharacterCond1, 8)[6] = 1;
getCharacterParams(kCharacterCond1, 8)[5] = 0;
@@ -3472,7 +3473,7 @@ void LogicManager::CONS_Cond1_MakeBedTyler(CONS_PARAMS) {
void LogicManager::HAND_Cond1_MakeBedTyler(HAND_PARAMS) {
switch (msg->action) {
case 12:
- if (getCharacterParams(kCharacterCond1, 8)[3] && _gameProgress[kProgressField14] != 29) {
+ if (getCharacterParams(kCharacterCond1, 8)[3] && _globals[kProgressField14] != 29) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 8200, 0, 0);
} else {
@@ -3557,8 +3558,8 @@ void LogicManager::HAND_Cond1_MakeAllBeds(HAND_PARAMS) {
Cond1Call(&LogicManager::CONS_Cond1_MakeBedTyler, 0, 0, 0, 0);
break;
case 8:
- if (_gameProgress[kProgressField14] == 3)
- _gameProgress[kProgressField14] = 0;
+ if (_globals[kProgressField14] == 3)
+ _globals[kProgressField14] = 0;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 9;
Cond1Call(&LogicManager::CONS_Cond1_DoWalk, 3, 2000, 0, 0);
@@ -3699,9 +3700,9 @@ void LogicManager::HAND_Cond1_Sitting(HAND_PARAMS) {
}
if (getCharacterParams(kCharacterCond1, 8)[16] ||
- _gameProgress[kProgressEventFoundCorpse] ||
- _gameEvents[kEventMertensAskTylerCompartment] ||
- _gameEvents[kEventMertensAskTylerCompartmentD]) {
+ _globals[kProgressEventFoundCorpse] ||
+ _doneNIS[kEventMertensAskTylerCompartment] ||
+ _doneNIS[kEventMertensAskTylerCompartmentD]) {
getCharacter(kCharacterCond1).inventoryItem = kItemNone;
} else {
getCharacter(kCharacterCond1).inventoryItem = 0x80;
@@ -3774,7 +3775,7 @@ void LogicManager::HAND_Cond1_Sitting(HAND_PARAMS) {
break;
}
- if (_gameProgress[kProgressField14] != 29) {
+ if (_globals[kProgressField14] != 29) {
if (getCharacterParams(kCharacterCond1, 8)[13]) {
getCharacter(kCharacterCond1).inventoryItem = kItemNone;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 10;
@@ -3843,7 +3844,7 @@ void LogicManager::HAND_Cond1_Sitting(HAND_PARAMS) {
if (getCharacterCurrentParams(kCharacterCond1)[0] || !getCharacterParams(kCharacterCond1, 8)[4]) {
if (getCharacterParams(kCharacterCond1, 8)[0] &&
- !whoRunningDialog(kCharacterCond1) && _gameProgress[kProgressField18] != 4) {
+ !whoRunningDialog(kCharacterCond1) && _globals[kProgressField18] != 4) {
playDialog(kCharacterCond1, "CON1505", -1, 0);
}
@@ -3877,12 +3878,12 @@ void LogicManager::HAND_Cond1_Sitting(HAND_PARAMS) {
break;
case 17:
if (!getCharacterParams(kCharacterCond1, 8)[16]) {
- if (checkCathDir(kCarGreenSleeping, 23) && getCharacterParams(kCharacterCond1, 8)[6] && !_gameEvents[kEventKronosConversation]) {
+ if (checkCathDir(kCarGreenSleeping, 23) && getCharacterParams(kCharacterCond1, 8)[6] && !_doneNIS[kEventKronosConversation]) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensKronosInvitation, 0, 0);
- } else if (!checkCathDir(kCarGreenSleeping, 23) || _gameProgress[kProgressEventMertensChronosInvitation] || _gameEvents[kEventMertensLastCar] || _gameEvents[kEventMertensLastCarOriginalJacket]) {
+ } else if (!checkCathDir(kCarGreenSleeping, 23) || _globals[kProgressEventMertensChronosInvitation] || _doneNIS[kEventMertensLastCar] || _doneNIS[kEventMertensLastCarOriginalJacket]) {
if (!checkCathDir(kCarGreenSleeping, 1) && !checkCathDir(kCarGreenSleeping, 23) || getCharacterParams(kCharacterCond1, 8)[0] || getCharacterParams(kCharacterCond1, 8)[16]) {
- if (cathInCorridor(kCarGreenSleeping) && getCharacter(kCharacterCond1).characterPosition.position < getCharacter(kCharacterCath).characterPosition.position && (_gameProgress[1] == 1 || getCharacterParams(kCharacterCond1, 8)[6])) {
+ if (cathInCorridor(kCarGreenSleeping) && getCharacter(kCharacterCond1).characterPosition.position < getCharacter(kCharacterCath).characterPosition.position && (_globals[1] == 1 || getCharacterParams(kCharacterCond1, 8)[6])) {
getCharacter(kCharacterCond1).inventoryItem = kItemNone;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
@@ -3908,7 +3909,7 @@ void LogicManager::HAND_Cond1_Sitting(HAND_PARAMS) {
switch (getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8]) {
case 1:
playNIS(kEventMertensKronosInvitation);
- _gameProgress[kProgressEventMertensChronosInvitation] = 1;
+ _globals[kProgressEventMertensChronosInvitation] = 1;
getCharacterParams(kCharacterCond1, 8)[5] = 0;
getCharacterParams(kCharacterCond1, 8)[6] = 0;
startSeqOtis(kCharacterCond1, "601A");
@@ -3922,7 +3923,7 @@ void LogicManager::HAND_Cond1_Sitting(HAND_PARAMS) {
case 4:
startCycOtis(kCharacterCond1, "601B");
if (!checkCathDir(kCarGreenSleeping, 1) && !checkCathDir(kCarGreenSleeping, 23) || getCharacterParams(kCharacterCond1, 8)[0] || getCharacterParams(kCharacterCond1, 8)[16]) {
- if (cathInCorridor(kCarGreenSleeping) && getCharacter(kCharacterCond1).characterPosition.position < getCharacter(kCharacterCath).characterPosition.position && (_gameProgress[1] == 1 || getCharacterParams(kCharacterCond1, 8)[6])) {
+ if (cathInCorridor(kCarGreenSleeping) && getCharacter(kCharacterCond1).characterPosition.position < getCharacter(kCharacterCath).characterPosition.position && (_globals[1] == 1 || getCharacterParams(kCharacterCond1, 8)[6])) {
getCharacter(kCharacterCond1).inventoryItem = kItemNone;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
@@ -3940,7 +3941,7 @@ void LogicManager::HAND_Cond1_Sitting(HAND_PARAMS) {
break;
case 3:
- playNIS((kEventMertensLastCarOriginalJacket - (_gameProgress[kProgressJacket] == 2)));
+ playNIS((kEventMertensLastCarOriginalJacket - (_globals[kProgressJacket] == 2)));
startSeqOtis(kCharacterCond1, "601A");
bumpCath(kCarGreenSleeping, 6, 255);
takeItem(kItem7);
@@ -3951,7 +3952,7 @@ void LogicManager::HAND_Cond1_Sitting(HAND_PARAMS) {
break;
case 5:
case 6:
- if (cathInCorridor(kCarGreenSleeping) && getCharacter(kCharacterCond1).characterPosition.position < getCharacter(kCharacterCath).characterPosition.position && (_gameProgress[1] == 1 || getCharacterParams(kCharacterCond1, 8)[6])) {
+ if (cathInCorridor(kCarGreenSleeping) && getCharacter(kCharacterCond1).characterPosition.position < getCharacter(kCharacterCath).characterPosition.position && (_globals[1] == 1 || getCharacterParams(kCharacterCond1, 8)[6])) {
getCharacter(kCharacterCond1).inventoryItem = kItemNone;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
@@ -3990,7 +3991,7 @@ void LogicManager::HAND_Cond1_Sitting(HAND_PARAMS) {
// fall through
}
case 9:
- if (_gameProgress[kProgressField14] != 29) {
+ if (_globals[kProgressField14] != 29) {
if (getCharacterParams(kCharacterCond1, 8)[13]) {
getCharacter(kCharacterCond1).inventoryItem = kItemNone;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 10;
@@ -4059,7 +4060,7 @@ void LogicManager::HAND_Cond1_Sitting(HAND_PARAMS) {
if (getCharacterCurrentParams(kCharacterCond1)[0] || !getCharacterParams(kCharacterCond1, 8)[4]) {
if (getCharacterParams(kCharacterCond1, 8)[0] &&
- !whoRunningDialog(kCharacterCond1) && _gameProgress[kProgressField18] != 4) {
+ !whoRunningDialog(kCharacterCond1) && _globals[kProgressField18] != 4) {
playDialog(kCharacterCond1, "CON1505", -1, 0);
}
@@ -4148,7 +4149,7 @@ void LogicManager::HAND_Cond1_Sitting(HAND_PARAMS) {
case 18:
if (getCharacterCurrentParams(kCharacterCond1)[0] || !getCharacterParams(kCharacterCond1, 8)[4]) {
if (getCharacterParams(kCharacterCond1, 8)[0] &&
- !whoRunningDialog(kCharacterCond1) && _gameProgress[kProgressField18] != 4) {
+ !whoRunningDialog(kCharacterCond1) && _globals[kProgressField18] != 4) {
playDialog(kCharacterCond1, "CON1505", -1, 0);
}
} else {
@@ -4161,7 +4162,7 @@ void LogicManager::HAND_Cond1_Sitting(HAND_PARAMS) {
case 19:
getCharacterCurrentParams(kCharacterCond1)[0] = 1;
if (getCharacterParams(kCharacterCond1, 8)[0] &&
- !whoRunningDialog(kCharacterCond1) && _gameProgress[kProgressField18] != 4) {
+ !whoRunningDialog(kCharacterCond1) && _globals[kProgressField18] != 4) {
playDialog(kCharacterCond1, "CON1505", -1, 0);
}
@@ -4169,7 +4170,7 @@ void LogicManager::HAND_Cond1_Sitting(HAND_PARAMS) {
case 21:
playNIS(kEventMertensAskTylerCompartmentD);
startSeqOtis(kCharacterCond1, "601A");
- _gameInventory[kItem7].location = 0;
+ _items[kItem7].floating = 0;
bumpCath(kCarGreenSleeping, 25, 255);
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 22;
Cond1Call(&LogicManager::CONS_Cond1_FinishSeqOtis, 0, 0, 0, 0);
@@ -4456,7 +4457,7 @@ void LogicManager::HAND_Cond1_OnDuty(HAND_PARAMS) {
break;
}
- if (getCharacterParams(kCharacterCond1, 8)[19] && (_gameEvents[kEventKronosVisit] || _gameTime > 2052000) && _gameTime < 2133000 && cathInCorridor(kCarGreenSleeping)) {
+ if (getCharacterParams(kCharacterCond1, 8)[19] && (_doneNIS[kEventKronosVisit] || _gameTime > 2052000) && _gameTime < 2133000 && cathInCorridor(kCarGreenSleeping)) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
break;
@@ -4552,7 +4553,7 @@ void LogicManager::HAND_Cond1_OnDuty(HAND_PARAMS) {
// fall through
case 5:
- if (getCharacterParams(kCharacterCond1, 8)[19] && (_gameEvents[kEventKronosVisit] || _gameTime > 2052000) && _gameTime < 2133000 && cathInCorridor(kCarGreenSleeping)) {
+ if (getCharacterParams(kCharacterCond1, 8)[19] && (_doneNIS[kEventKronosVisit] || _gameTime > 2052000) && _gameTime < 2133000 && cathInCorridor(kCarGreenSleeping)) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 6;
Cond1Call(&LogicManager::CONS_Cond1_BathroomTrip, 0, 0, 0, 0);
break;
@@ -5138,8 +5139,8 @@ void LogicManager::HAND_Cond1_HideOut(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (getCharacterCurrentParams(kCharacterCond1)[0]) {
- if (getCharacterCurrentParams(kCharacterCond1)[3] || (getCharacterCurrentParams(kCharacterCond1)[3] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterCond1)[3] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterCond1)[3] || (getCharacterCurrentParams(kCharacterCond1)[3] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterCond1)[3] >= _realTime)
break;
getCharacterCurrentParams(kCharacterCond1)[3] = 0x7FFFFFFF;
diff --git a/engines/lastexpress/characters/cond2.cpp b/engines/lastexpress/characters/cond2.cpp
index 61629dcab8e..4764d5f4f9f 100644
--- a/engines/lastexpress/characters/cond2.cpp
+++ b/engines/lastexpress/characters/cond2.cpp
@@ -113,7 +113,7 @@ void LogicManager::CONS_Cond2_DoSeqOtis(CONS_PARAMS) {
void LogicManager::HAND_Cond2_DoSeqOtis(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
+ if (_globals[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
}
@@ -156,7 +156,7 @@ void LogicManager::CONS_Cond2_DoCorrOtis(CONS_PARAMS) {
void LogicManager::HAND_Cond2_DoCorrOtis(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
+ if (_globals[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
}
@@ -202,7 +202,7 @@ void LogicManager::HAND_Cond2_FinishSeqOtis(HAND_PARAMS) {
getCharacter(kCharacterCond2).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterCond2, _functionsCond2[getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall]]);
fedEx(kCharacterCond2, kCharacterCond2, 18, 0);
- } else if (_gameProgress[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
+ } else if (_globals[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
}
@@ -244,7 +244,7 @@ void LogicManager::CONS_Cond2_DoEnterCorrOtis(CONS_PARAMS) {
void LogicManager::HAND_Cond2_DoEnterCorrOtis(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
+ if (_globals[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
}
@@ -301,7 +301,7 @@ void LogicManager::CONS_Cond2_DoDialog(CONS_PARAMS) {
void LogicManager::HAND_Cond2_DoDialog(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
+ if (_globals[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
}
@@ -342,7 +342,7 @@ void LogicManager::CONS_Cond2_DoDialogFullVol(CONS_PARAMS) {
void LogicManager::HAND_Cond2_DoDialogFullVol(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
+ if (_globals[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
}
@@ -426,7 +426,7 @@ void LogicManager::HAND_Cond2_DoWalk(HAND_PARAMS) {
getCharacter(kCharacterCond2).inventoryItem = 0;
}
- if (_gameProgress[kProgressJacket] != 1 || !nearChar(kCharacterCond2, kCharacterCath, 1000) || inComp(kCharacterCath) || whoOutside(kCharacterCath)) {
+ if (_globals[kProgressJacket] != 1 || !nearChar(kCharacterCond2, kCharacterCath, 1000) || inComp(kCharacterCath) || whoOutside(kCharacterCath)) {
if (walk(kCharacterCond2, getCharacterCurrentParams(kCharacterCond2)[0], getCharacterCurrentParams(kCharacterCond2)[1])) {
getCharacter(kCharacterCond2).inventoryItem = 0;
@@ -463,7 +463,7 @@ void LogicManager::HAND_Cond2_DoWalk(HAND_PARAMS) {
break;
case 12:
- if (!_gameProgress[kProgressEventFoundCorpse] && !_gameEvents[kEventCoudertAskTylerCompartment])
+ if (!_globals[kProgressEventFoundCorpse] && !_doneNIS[kEventCoudertAskTylerCompartment])
getCharacterCurrentParams(kCharacterCond2)[2] = 128;
if (walk(kCharacterCond2, getCharacterCurrentParams(kCharacterCond2)[0], getCharacterCurrentParams(kCharacterCond2)[1])) {
@@ -507,7 +507,7 @@ void LogicManager::CONS_Cond2_DoWait(CONS_PARAMS) {
void LogicManager::HAND_Cond2_DoWait(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
+ if (_globals[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
break;
@@ -552,15 +552,15 @@ void LogicManager::CONS_Cond2_DoWaitReal(CONS_PARAMS) {
void LogicManager::HAND_Cond2_DoWaitReal(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
+ if (_globals[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
break;
}
if (getCharacterCurrentParams(kCharacterCond2)[1] ||
- (getCharacterCurrentParams(kCharacterCond2)[1] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterCond2)[0], _currentGameSessionTicks + getCharacterCurrentParams(kCharacterCond2)[0] != 0)) {
- if (getCharacterCurrentParams(kCharacterCond2)[1] >= _currentGameSessionTicks)
+ (getCharacterCurrentParams(kCharacterCond2)[1] = _realTime + getCharacterCurrentParams(kCharacterCond2)[0], _realTime + getCharacterCurrentParams(kCharacterCond2)[0] != 0)) {
+ if (getCharacterCurrentParams(kCharacterCond2)[1] >= _realTime)
break;
getCharacterCurrentParams(kCharacterCond2)[1] = 0x7FFFFFFF;
@@ -604,7 +604,7 @@ void LogicManager::HAND_Cond2_StandAsideDialog(HAND_PARAMS) {
playDialog(kCharacterCond2, "JAC1112F", -1, 0);
else
playDialog(kCharacterCond2, "JAC1112C", -1, 0);
- } else if (getCharacterCurrentParams(kCharacterCond2)[0] || _gameProgress[kProgressField18] != 2) {
+ } else if (getCharacterCurrentParams(kCharacterCond2)[0] || _globals[kProgressField18] != 2) {
playDialog(kCharacterCond2, "JAC1112D", -1, 0);
} else {
switch (rnd(4)) {
@@ -659,7 +659,7 @@ void LogicManager::CONS_Cond2_Passing(CONS_PARAMS) {
void LogicManager::HAND_Cond2_Passing(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
+ if (_globals[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 3;
Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
break;
@@ -667,8 +667,8 @@ void LogicManager::HAND_Cond2_Passing(HAND_PARAMS) {
if (!getCharacterCurrentParams(kCharacterCond2)[1] && !getCharacterCurrentParams(kCharacterCond2)[2]) {
if (!getCharacterCurrentParams(kCharacterCond2)[3]) {
- getCharacterCurrentParams(kCharacterCond2)[3] = _currentGameSessionTicks + 75;
- if (_currentGameSessionTicks == -75) {
+ getCharacterCurrentParams(kCharacterCond2)[3] = _realTime + 75;
+ if (_realTime == -75) {
getCharacter(kCharacterCond2).inventoryItem = 0;
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
Cond2Call(&LogicManager::CONS_Cond2_SitDownFast, 1, 0, 0, 0);
@@ -676,7 +676,7 @@ void LogicManager::HAND_Cond2_Passing(HAND_PARAMS) {
}
}
- if (getCharacterCurrentParams(kCharacterCond2)[3] < _currentGameSessionTicks) {
+ if (getCharacterCurrentParams(kCharacterCond2)[3] < _realTime) {
getCharacterCurrentParams(kCharacterCond2)[3] = 0x7FFFFFFF;
getCharacter(kCharacterCond2).inventoryItem = 0;
@@ -687,8 +687,8 @@ void LogicManager::HAND_Cond2_Passing(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterCond2)[4] ||
- (getCharacterCurrentParams(kCharacterCond2)[4] = _currentGameSessionTicks + 225, _currentGameSessionTicks != -225)) {
- if (getCharacterCurrentParams(kCharacterCond2)[4] >= _currentGameSessionTicks) {
+ (getCharacterCurrentParams(kCharacterCond2)[4] = _realTime + 225, _realTime != -225)) {
+ if (getCharacterCurrentParams(kCharacterCond2)[4] >= _realTime) {
break;
}
@@ -740,7 +740,7 @@ void LogicManager::HAND_Cond2_Passing(HAND_PARAMS) {
Cond2Call(&LogicManager::CONS_Cond2_GetUpListen, 1, 0, 0, 0);
break;
case 2:
- if (_gameProgress[kProgressChapter] == 1 && !_gameProgress[kProgressEventFoundCorpse] && !_gameEvents[kEventCoudertAskTylerCompartment]) {
+ if (_globals[kProgressChapter] == 1 && !_globals[kProgressEventFoundCorpse] && !_doneNIS[kEventCoudertAskTylerCompartment]) {
getCharacter(kCharacterCond2).inventoryItem = 0x80;
}
@@ -757,8 +757,8 @@ void LogicManager::HAND_Cond2_Passing(HAND_PARAMS) {
if (!getCharacterCurrentParams(kCharacterCond2)[1] && !getCharacterCurrentParams(kCharacterCond2)[2]) {
if (!getCharacterCurrentParams(kCharacterCond2)[3]) {
- getCharacterCurrentParams(kCharacterCond2)[3] = _currentGameSessionTicks + 75;
- if (_currentGameSessionTicks == -75) {
+ getCharacterCurrentParams(kCharacterCond2)[3] = _realTime + 75;
+ if (_realTime == -75) {
getCharacter(kCharacterCond2).inventoryItem = 0;
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
Cond2Call(&LogicManager::CONS_Cond2_SitDownFast, 1, 0, 0, 0);
@@ -766,7 +766,7 @@ void LogicManager::HAND_Cond2_Passing(HAND_PARAMS) {
}
}
- if (getCharacterCurrentParams(kCharacterCond2)[3] < _currentGameSessionTicks) {
+ if (getCharacterCurrentParams(kCharacterCond2)[3] < _realTime) {
getCharacterCurrentParams(kCharacterCond2)[3] = 0x7FFFFFFF;
getCharacter(kCharacterCond2).inventoryItem = 0;
@@ -777,8 +777,8 @@ void LogicManager::HAND_Cond2_Passing(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterCond2)[4] ||
- (getCharacterCurrentParams(kCharacterCond2)[4] = _currentGameSessionTicks + 225, _currentGameSessionTicks != -225)) {
- if (getCharacterCurrentParams(kCharacterCond2)[4] >= _currentGameSessionTicks) {
+ (getCharacterCurrentParams(kCharacterCond2)[4] = _realTime + 225, _realTime != -225)) {
+ if (getCharacterCurrentParams(kCharacterCond2)[4] >= _realTime) {
break;
}
@@ -829,7 +829,7 @@ void LogicManager::CONS_Cond2_Listen(CONS_PARAMS) {
void LogicManager::HAND_Cond2_Listen(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
+ if (_globals[kProgressJacket] == 1 && nearChar(kCharacterCond2, kCharacterCath, 1000) && !inComp(kCharacterCath) && !whoOutside(kCharacterCath)) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 4;
Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, 123, 0, 0);
}
@@ -923,7 +923,7 @@ void LogicManager::HAND_Cond2_TatianaLockUnlockMyComp(HAND_PARAMS) {
case 2:
if (getCharacter(kCharacterCond2).callParams[getCharacter(kCharacterCond2).currentCall].parameters[0]) {
playDialog(kCharacterCond2, "Tat3163", -1, 0);
- } else if (_gameProgress[kProgressChapter] == 3 && _gameTime < 1449000) {
+ } else if (_globals[kProgressChapter] == 3 && _gameTime < 1449000) {
playDialog(kCharacterCond2, "Tat3161A", -1, 0);
} else {
playDialog(kCharacterCond2, "Tat3162A", -1, 0);
@@ -1269,16 +1269,16 @@ void LogicManager::HAND_Cond2_MakeBed(HAND_PARAMS) {
break;
case 12:
- getCharacterCurrentParams(kCharacterCond2)[2] = _gameObjects[getCharacterCurrentParams(kCharacterCond2)[0]].character;
- getCharacterCurrentParams(kCharacterCond2)[3] = _gameObjects[getCharacterCurrentParams(kCharacterCond2)[0]].door;
- getCharacterCurrentParams(kCharacterCond2)[4] = _gameObjects[getCharacterCurrentParams(kCharacterCond2)[0]].cursor;
- getCharacterCurrentParams(kCharacterCond2)[5] = _gameObjects[getCharacterCurrentParams(kCharacterCond2)[0]].cursor2;
+ getCharacterCurrentParams(kCharacterCond2)[2] = _doors[getCharacterCurrentParams(kCharacterCond2)[0]].who;
+ getCharacterCurrentParams(kCharacterCond2)[3] = _doors[getCharacterCurrentParams(kCharacterCond2)[0]].status;
+ getCharacterCurrentParams(kCharacterCond2)[4] = _doors[getCharacterCurrentParams(kCharacterCond2)[0]].windowCursor;
+ getCharacterCurrentParams(kCharacterCond2)[5] = _doors[getCharacterCurrentParams(kCharacterCond2)[0]].handleCursor;
if (getCharacterCurrentParams(kCharacterCond2)[1]) {
- getCharacterCurrentParams(kCharacterCond2)[6] = _gameObjects[getCharacterCurrentParams(kCharacterCond2)[1]].character;
- getCharacterCurrentParams(kCharacterCond2)[7] = _gameObjects[getCharacterCurrentParams(kCharacterCond2)[1]].door;
- getCharacterCurrentParams(kCharacterCond2)[8] = _gameObjects[getCharacterCurrentParams(kCharacterCond2)[1]].cursor;
- getCharacterCurrentParams(kCharacterCond2)[9] = _gameObjects[getCharacterCurrentParams(kCharacterCond2)[1]].cursor2;
+ getCharacterCurrentParams(kCharacterCond2)[6] = _doors[getCharacterCurrentParams(kCharacterCond2)[1]].who;
+ getCharacterCurrentParams(kCharacterCond2)[7] = _doors[getCharacterCurrentParams(kCharacterCond2)[1]].status;
+ getCharacterCurrentParams(kCharacterCond2)[8] = _doors[getCharacterCurrentParams(kCharacterCond2)[1]].windowCursor;
+ getCharacterCurrentParams(kCharacterCond2)[9] = _doors[getCharacterCurrentParams(kCharacterCond2)[1]].handleCursor;
setDoor(getCharacterCurrentParams(kCharacterCond2)[1], 4, 1, 10, 9);
}
@@ -1333,8 +1333,8 @@ void LogicManager::HAND_Cond2_MakeBedIvo(HAND_PARAMS) {
case 0:
if (!getCharacterCurrentParams(kCharacterCond2)[0]) {
if (getCharacterCurrentParams(kCharacterCond2)[1] ||
- (getCharacterCurrentParams(kCharacterCond2)[1] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterCond2)[1] >= _currentGameSessionTicks)
+ (getCharacterCurrentParams(kCharacterCond2)[1] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterCond2)[1] >= _realTime)
break;
getCharacterCurrentParams(kCharacterCond2)[1] = 0x7FFFFFFF;
@@ -1437,8 +1437,8 @@ void LogicManager::HAND_Cond2_MakeBedMilos(HAND_PARAMS) {
case 0:
if (!getCharacterCurrentParams(kCharacterCond2)[0]) {
if (getCharacterCurrentParams(kCharacterCond2)[1] ||
- (getCharacterCurrentParams(kCharacterCond2)[1] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterCond2)[1] >= _currentGameSessionTicks)
+ (getCharacterCurrentParams(kCharacterCond2)[1] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterCond2)[1] >= _realTime)
break;
getCharacterCurrentParams(kCharacterCond2)[1] = 0x7FFFFFFF;
@@ -1713,8 +1713,8 @@ void LogicManager::HAND_Cond2_MakeBedMadame(HAND_PARAMS) {
case 0:
if (!getCharacterCurrentParams(kCharacterCond2)[0]) {
if (getCharacterCurrentParams(kCharacterCond2)[1] ||
- (getCharacterCurrentParams(kCharacterCond2)[1] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterCond2)[1] >= _currentGameSessionTicks)
+ (getCharacterCurrentParams(kCharacterCond2)[1] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterCond2)[1] >= _realTime)
break;
getCharacterCurrentParams(kCharacterCond2)[1] = 0x7FFFFFFF;
@@ -1815,8 +1815,8 @@ void LogicManager::HAND_Cond2_MakeBedMonsieur(HAND_PARAMS) {
case 0:
if (!getCharacterCurrentParams(kCharacterCond2)[0]) {
if (getCharacterCurrentParams(kCharacterCond2)[1] ||
- (getCharacterCurrentParams(kCharacterCond2)[1] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterCond2)[1] >= _currentGameSessionTicks)
+ (getCharacterCurrentParams(kCharacterCond2)[1] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterCond2)[1] >= _realTime)
break;
getCharacterCurrentParams(kCharacterCond2)[1] = 0x7FFFFFFF;
@@ -2782,7 +2782,7 @@ void LogicManager::HAND_Cond2_Sitting(HAND_PARAMS) {
getCharacterParams(kCharacterCond2, 8)[18] = 0;
}
- if (_gameProgress[kProgressEventFoundCorpse] || _gameEvents[kEventCoudertAskTylerCompartment]) {
+ if (_globals[kProgressEventFoundCorpse] || _doneNIS[kEventCoudertAskTylerCompartment]) {
getCharacter(kCharacterCond2).inventoryItem = 0;
} else {
getCharacter(kCharacterCond2).inventoryItem = 0x80;
@@ -2844,7 +2844,7 @@ void LogicManager::HAND_Cond2_Sitting(HAND_PARAMS) {
}
}
- if (_gameTime > 1107000 && !getCharacterCurrentParams(kCharacterCond2)[0] && !_gameEvents[84]) {
+ if (_gameTime > 1107000 && !getCharacterCurrentParams(kCharacterCond2)[0] && !_doneNIS[84]) {
getCharacter(kCharacterCond2).inventoryItem = 0;
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 10;
Cond2Call(&LogicManager::CONS_Cond2_MakeAllBeds, 0, 0, 0, 0);
@@ -2912,7 +2912,7 @@ void LogicManager::HAND_Cond2_Sitting(HAND_PARAMS) {
if (!getCharacterParams(kCharacterCond2, 8)[16] &&
!getCharacterParams(kCharacterCond2, 8)[0] &&
(checkCathDir(kCarRedSleeping, 1) || checkCathDir(kCarRedSleeping, 23))) {
- if (_gameProgress[kProgressJacket] == 1) {
+ if (_globals[kProgressJacket] == 1) {
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 1;
Cond2Call(&LogicManager::CONS_Cond2_SaveGame, 2, kEventCoudertBloodJacket, 0, 0);
} else {
@@ -2992,7 +2992,7 @@ void LogicManager::HAND_Cond2_Sitting(HAND_PARAMS) {
}
}
- if (_gameTime > 1107000 && !getCharacterCurrentParams(kCharacterCond2)[0] && !_gameEvents[84]) {
+ if (_gameTime > 1107000 && !getCharacterCurrentParams(kCharacterCond2)[0] && !_doneNIS[84]) {
getCharacter(kCharacterCond2).inventoryItem = 0;
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 10;
Cond2Call(&LogicManager::CONS_Cond2_MakeAllBeds, 0, 0, 0, 0);
@@ -4198,7 +4198,7 @@ void LogicManager::CONS_Cond2_TatianaComeHere(CONS_PARAMS) {
void LogicManager::HAND_Cond2_TatianaComeHere(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameTime > 2133000 && !_gameProgress[kProgressField40]) {
+ if (_gameTime > 2133000 && !_globals[kProgressField40]) {
softReleaseAtDoor(kCharacterCond2, 33);
setDoor(32, kCharacterCath, 0, 10, 9);
setDoor(33, kCharacterCath, 1, 10, 9);
@@ -5010,8 +5010,8 @@ void LogicManager::HAND_Cond2_InCompH(HAND_PARAMS) {
case 0:
if (getCharacterCurrentParams(kCharacterCond2)[0]) {
if (getCharacterCurrentParams(kCharacterCond2)[3] ||
- (getCharacterCurrentParams(kCharacterCond2)[3] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterCond2)[3] >= _currentGameSessionTicks)
+ (getCharacterCurrentParams(kCharacterCond2)[3] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterCond2)[3] >= _realTime)
break;
getCharacterCurrentParams(kCharacterCond2)[3] = 0x7FFFFFFF;
diff --git a/engines/lastexpress/characters/cook.cpp b/engines/lastexpress/characters/cook.cpp
index 661a8bedf11..9494c91944c 100644
--- a/engines/lastexpress/characters/cook.cpp
+++ b/engines/lastexpress/characters/cook.cpp
@@ -128,10 +128,10 @@ void LogicManager::HAND_Cook_UptrainVersion(HAND_PARAMS) {
startCycOtis(kCharacterCook, "308A");
blockView(kCharacterCook, kCarRestaurant, 75);
blockView(kCharacterCook, kCarRestaurant, 78);
- if (_gameProgress[kProgressChapter] == 1) {
+ if (_globals[kProgressChapter] == 1) {
getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] = 1;
CookCall(&LogicManager::CONS_Cook_DoDialog, "KIT1010", 0, 0, 0);
- } else if (_gameProgress[kProgressChapter] == 3) {
+ } else if (_globals[kProgressChapter] == 3) {
getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] = 2;
CookCall(&LogicManager::CONS_Cook_DoDialog, "KIT1012", 0, 0, 0);
} else {
@@ -218,10 +218,10 @@ void LogicManager::HAND_Cook_DowntrainVersion(HAND_PARAMS) {
blockView(kCharacterCook, kCarRestaurant, 75);
blockView(kCharacterCook, kCarRestaurant, 78);
- if (_gameProgress[kProgressChapter] == 1) {
+ if (_globals[kProgressChapter] == 1) {
getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] = 1;
CookCall(&LogicManager::CONS_Cook_DoDialog, "KIT1010", 0, 0, 0);
- } else if (_gameProgress[kProgressChapter] == 3) {
+ } else if (_globals[kProgressChapter] == 3) {
getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] = 2;
CookCall(&LogicManager::CONS_Cook_DoDialog, "KIT1012", 0, 0, 0);
} else {
@@ -314,7 +314,7 @@ void LogicManager::HAND_Cook_Birth(HAND_PARAMS) {
getCharacter(kCharacterCook).characterPosition.car = kCarRestaurant;
getCharacter(kCharacterCook).characterPosition.position = 5900;
getCharacter(kCharacterCook).characterPosition.location = 0;
- _gameProgress[kProgressField4C] = 0;
+ _globals[kProgressField4C] = 0;
break;
default:
break;
@@ -377,7 +377,7 @@ void LogicManager::HAND_Cook_InKitchenDinner(HAND_PARAMS) {
CONS_Cook_LockUp(0, 0, 0, 0);
break;
case 224849280:
- _gameProgress[kProgressField4C] = 1;
+ _globals[kProgressField4C] = 1;
getCharacterCurrentParams(kCharacterCook)[0] = 1;
break;
default:
@@ -433,7 +433,7 @@ void LogicManager::HAND_Cook_StartPart2(HAND_PARAMS) {
getCharacter(kCharacterCook).characterPosition.position = 5900;
getCharacter(kCharacterCook).characterPosition.location = 0;
getCharacter(kCharacterCook).inventoryItem = kItemNone;
- _gameProgress[kProgressField4C] = 1;
+ _globals[kProgressField4C] = 1;
break;
default:
break;
@@ -508,7 +508,7 @@ void LogicManager::HAND_Cook_StartPart3(HAND_PARAMS) {
endGraphics(kCharacterCook);
getCharacter(kCharacterCook).characterPosition.car = kCarRestaurant;
getCharacter(kCharacterCook).characterPosition.position = 5900;
- _gameProgress[kProgressField4C] = 0;
+ _globals[kProgressField4C] = 0;
break;
default:
break;
@@ -581,7 +581,7 @@ void LogicManager::HAND_Cook_InKitchenLunch(HAND_PARAMS) {
break;
case 236976550:
- _gameProgress[kProgressField4C] = 1;
+ _globals[kProgressField4C] = 1;
break;
default:
break;
@@ -609,7 +609,7 @@ void LogicManager::HAND_Cook_StartPart4(HAND_PARAMS) {
getCharacter(kCharacterCook).characterPosition.position = 5900;
getCharacter(kCharacterCook).characterPosition.location = 0;
getCharacter(kCharacterCook).inventoryItem = kItemNone;
- _gameProgress[kProgressField4C] = 1;
+ _globals[kProgressField4C] = 1;
break;
default:
break;
diff --git a/engines/lastexpress/characters/demo/demo_anna.cpp b/engines/lastexpress/characters/demo/demo_anna.cpp
index 69432afbd13..7ce9ee1d3f4 100644
--- a/engines/lastexpress/characters/demo/demo_anna.cpp
+++ b/engines/lastexpress/characters/demo/demo_anna.cpp
@@ -298,7 +298,7 @@ void LogicManager::HAND_DemoAnna_GoBagg(HAND_PARAMS) {
DemoAnnaCall(&LogicManager::CONS_DemoAnna_FinishSeqOtis, 0, 0, 0, 0);
break;
case 5:
- _gameProgress[kProgressField4C] = 1;
+ _globals[kProgressField4C] = 1;
endGraphics(kCharacterAnna);
CONS_DemoAnna_InBagg(0, 0, 0, 0);
break;
@@ -338,7 +338,7 @@ void LogicManager::HAND_DemoAnna_InBagg(HAND_PARAMS) {
break;
case 12:
getCharacter(kCharacterAnna).characterPosition.car = kCarBaggage;
- _gameProgress[kProgressField54] = 1;
+ _globals[kProgressField54] = 1;
break;
case 235856512:
getCharacterCurrentParams(kCharacterAnna)[0] = 1;
@@ -420,7 +420,7 @@ void LogicManager::HAND_DemoAnna_BaggageFight(HAND_PARAMS) {
break;
case 3:
playNIS(kEventAnnaBagagePart2);
- _gameProgress[kProgressField54] = 0;
+ _globals[kProgressField54] = 0;
forceJump(kCharacterVesna, &LogicManager::CONS_DemoVesna_InComp);
winGame();
break;
diff --git a/engines/lastexpress/characters/demo/demo_francois.cpp b/engines/lastexpress/characters/demo/demo_francois.cpp
index 16639e99f08..9da3e21132f 100644
--- a/engines/lastexpress/characters/demo/demo_francois.cpp
+++ b/engines/lastexpress/characters/demo/demo_francois.cpp
@@ -131,7 +131,7 @@ void LogicManager::HAND_DemoFrancois_Birth(HAND_PARAMS) {
case 0:
if (whoRunningDialog(kCharacterFrancois)) {
if (whoOnScreen(kCharacterFrancois) && whoFacingCath(kCharacterFrancois)) {
- if (nearChar(kCharacterFrancois, kCharacterCath, 2500) && !_gameEvents[kEventFrancoisWhistleD])
+ if (nearChar(kCharacterFrancois, kCharacterCath, 2500) && !_doneNIS[kEventFrancoisWhistleD])
getCharacter(kCharacterFrancois).inventoryItem = 0x80;
} else {
getCharacter(kCharacterFrancois).inventoryItem = 0;
@@ -163,11 +163,11 @@ void LogicManager::HAND_DemoFrancois_Birth(HAND_PARAMS) {
return;
}
- if (getCharacterCurrentParams(kCharacterFrancois)[5] || (getCharacterCurrentParams(kCharacterFrancois)[5] = getCharacterCurrentParams(kCharacterFrancois)[2] + _currentGameSessionTicks,
+ if (getCharacterCurrentParams(kCharacterFrancois)[5] || (getCharacterCurrentParams(kCharacterFrancois)[5] = getCharacterCurrentParams(kCharacterFrancois)[2] + _realTime,
getCharacterCurrentParams(kCharacterFrancois)[5] != 0)) {
- if (_currentGameSessionTicks <= getCharacterCurrentParams(kCharacterFrancois)[5]) {
+ if (_realTime <= getCharacterCurrentParams(kCharacterFrancois)[5]) {
if (whoOnScreen(kCharacterFrancois) && whoFacingCath(kCharacterFrancois)) {
- if (nearChar(kCharacterFrancois, kCharacterCath, 2500) && !_gameEvents[kEventFrancoisWhistleD])
+ if (nearChar(kCharacterFrancois, kCharacterCath, 2500) && !_doneNIS[kEventFrancoisWhistleD])
getCharacter(kCharacterFrancois).inventoryItem = 0x80;
} else {
getCharacter(kCharacterFrancois).inventoryItem = 0;
@@ -212,7 +212,7 @@ void LogicManager::HAND_DemoFrancois_Birth(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterFrancois)[2] = 15 * rnd(7);
if (whoOnScreen(kCharacterFrancois) && whoFacingCath(kCharacterFrancois)) {
- if (nearChar(kCharacterFrancois, kCharacterCath, 2500) && !_gameEvents[kEventFrancoisWhistleD])
+ if (nearChar(kCharacterFrancois, kCharacterCath, 2500) && !_doneNIS[kEventFrancoisWhistleD])
getCharacter(kCharacterFrancois).inventoryItem = 0x80;
} else {
getCharacter(kCharacterFrancois).inventoryItem = 0;
diff --git a/engines/lastexpress/characters/demo/demo_madame.cpp b/engines/lastexpress/characters/demo/demo_madame.cpp
index 43f27e8dd45..9f382cd9060 100644
--- a/engines/lastexpress/characters/demo/demo_madame.cpp
+++ b/engines/lastexpress/characters/demo/demo_madame.cpp
@@ -100,10 +100,10 @@ void LogicManager::HAND_DemoMadame_Birth(HAND_PARAMS) {
case 0:
if (getCharacterCurrentParams(kCharacterMadame)[2]) {
if (getCharacterCurrentParams(kCharacterMadame)[3] ||
- (getCharacterCurrentParams(kCharacterMadame)[3] = _currentGameSessionTicks + 75,
- _currentGameSessionTicks != -75)) {
+ (getCharacterCurrentParams(kCharacterMadame)[3] = _realTime + 75,
+ _realTime != -75)) {
- if (_currentGameSessionTicks <= getCharacterCurrentParams(kCharacterMadame)[3])
+ if (_realTime <= getCharacterCurrentParams(kCharacterMadame)[3])
return;
getCharacterCurrentParams(kCharacterMadame)[3] = 0x7FFFFFFF;
diff --git a/engines/lastexpress/characters/demo/demo_master.cpp b/engines/lastexpress/characters/demo/demo_master.cpp
index 04b7edab460..ebd7deac4b7 100644
--- a/engines/lastexpress/characters/demo/demo_master.cpp
+++ b/engines/lastexpress/characters/demo/demo_master.cpp
@@ -121,14 +121,14 @@ void LogicManager::HAND_DemoMaster_Birth(HAND_PARAMS) {
bool playSndFx = false;
bool doBumpCath = false;
- if (_gameProgress[kProgressIsTrainRunning]) {
+ if (_globals[kProgressIsTrainRunning]) {
if (!getCharacterCurrentParams(kCharacterMaster)[3]) {
- getCharacterCurrentParams(kCharacterMaster)[3] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[0];
+ getCharacterCurrentParams(kCharacterMaster)[3] = _realTime + getCharacterCurrentParams(kCharacterMaster)[0];
if (!getCharacterCurrentParams(kCharacterMaster)[3])
playSndFx = true;
}
- if (!playSndFx && _currentGameSessionTicks > getCharacterCurrentParams(kCharacterMaster)[3]) {
+ if (!playSndFx && _realTime > getCharacterCurrentParams(kCharacterMaster)[3]) {
getCharacterCurrentParams(kCharacterMaster)[3] = 0x7FFFFFFF;
playSndFx = true;
}
diff --git a/engines/lastexpress/characters/demo/demo_tatiana.cpp b/engines/lastexpress/characters/demo/demo_tatiana.cpp
index 2144167f3f0..1134a3b643b 100644
--- a/engines/lastexpress/characters/demo/demo_tatiana.cpp
+++ b/engines/lastexpress/characters/demo/demo_tatiana.cpp
@@ -66,8 +66,8 @@ void LogicManager::HAND_DemoTatiana_Birth(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (!getCharacterCurrentParams(kCharacterTatiana)[1] && !getCharacterCurrentParams(kCharacterTatiana)[3]) {
- getCharacterCurrentParams(kCharacterTatiana)[0] -= _gameTimeTicksDelta;
- if (getCharacterCurrentParams(kCharacterTatiana)[0] < _gameTimeTicksDelta) {
+ getCharacterCurrentParams(kCharacterTatiana)[0] -= _timeSpeed;
+ if (getCharacterCurrentParams(kCharacterTatiana)[0] < _timeSpeed) {
startCycOtis(kCharacterTatiana, (char *)&getCharacterCurrentParams(kCharacterTatiana)[7]);
playDialog(kCharacterTatiana, (char *)&getCharacterCurrentParams(kCharacterTatiana)[4], -1, 0);
getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
diff --git a/engines/lastexpress/characters/demo/demo_vesna.cpp b/engines/lastexpress/characters/demo/demo_vesna.cpp
index d28aad51642..641d8bbbd25 100644
--- a/engines/lastexpress/characters/demo/demo_vesna.cpp
+++ b/engines/lastexpress/characters/demo/demo_vesna.cpp
@@ -211,7 +211,7 @@ void LogicManager::CONS_DemoVesna_InComp(CONS_PARAMS) {
void LogicManager::HAND_DemoVesna_InComp(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressField54] && getCharacterCurrentParams(kCharacterVesna)[0] != 0x7FFFFFFF && _gameTime) {
+ if (_globals[kProgressField54] && getCharacterCurrentParams(kCharacterVesna)[0] != 0x7FFFFFFF && _gameTime) {
if (_gameTime <= 2259000) {
if (!cathInCorridor(kCarRedSleeping) || !getCharacterCurrentParams(kCharacterVesna)[0]) {
getCharacterCurrentParams(kCharacterVesna)[0] = _gameTime;
diff --git a/engines/lastexpress/characters/francois.cpp b/engines/lastexpress/characters/francois.cpp
index 11dab04b1ba..9093fa97e41 100644
--- a/engines/lastexpress/characters/francois.cpp
+++ b/engines/lastexpress/characters/francois.cpp
@@ -322,11 +322,11 @@ void LogicManager::HAND_Francois_DoWalk(HAND_PARAMS) {
} else {
if (!nearChar(kCharacterFrancois, kCharacterCath, 2000) ||
!cathHasItem(kItemFirebird) ||
- _gameEvents[kEventFrancoisShowEgg] ||
- _gameEvents[kEventFrancoisShowEggD] ||
- _gameEvents[kEventFrancoisShowEggNight] ||
- _gameEvents[kEventFrancoisShowEggNightD]) {
- getCharacter(kCharacterFrancois).inventoryItem = nearChar(kCharacterFrancois, kCharacterCath, 2000) && _gameInventory[kItemBeetle].location == 1 && !_gameEvents[kEventFrancoisShowBeetle] && !_gameEvents[kEventFrancoisShowBeetleD];
+ _doneNIS[kEventFrancoisShowEgg] ||
+ _doneNIS[kEventFrancoisShowEggD] ||
+ _doneNIS[kEventFrancoisShowEggNight] ||
+ _doneNIS[kEventFrancoisShowEggNightD]) {
+ getCharacter(kCharacterFrancois).inventoryItem = nearChar(kCharacterFrancois, kCharacterCath, 2000) && _items[kItemBeetle].floating == 1 && !_doneNIS[kEventFrancoisShowBeetle] && !_doneNIS[kEventFrancoisShowBeetleD];
} else {
getCharacter(kCharacterFrancois).inventoryItem = kItemFirebird;
}
@@ -390,7 +390,7 @@ void LogicManager::HAND_Francois_DoWalk(HAND_PARAMS) {
giveCathItem(kItemWhistle);
takeCathItem(kItemMatchBox);
- _gameInventory[kItemBeetle].location = 2;
+ _items[kItemBeetle].floating = 2;
if (getCharacter(kCharacterFrancois).direction == 1) {
bumpCathFx(getCharacter(kCharacterFrancois).characterPosition.car, getCharacter(kCharacterFrancois).characterPosition.position - 750);
@@ -528,13 +528,13 @@ void LogicManager::HAND_Francois_Rampage(HAND_PARAMS) {
bool skip = false; // Horrible way to unroll a goto...
if (!getCharacterCurrentParams(kCharacterFrancois)[8]) {
- getCharacterCurrentParams(kCharacterFrancois)[8] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterFrancois)[5];
- if (_currentGameSessionTicks + getCharacterCurrentParams(kCharacterFrancois)[5] == 0) {
+ getCharacterCurrentParams(kCharacterFrancois)[8] = _realTime + getCharacterCurrentParams(kCharacterFrancois)[5];
+ if (_realTime + getCharacterCurrentParams(kCharacterFrancois)[5] == 0) {
skip = true;
}
}
- if (skip || getCharacterCurrentParams(kCharacterFrancois)[8] < _currentGameSessionTicks) {
+ if (skip || getCharacterCurrentParams(kCharacterFrancois)[8] < _realTime) {
if (!skip) {
getCharacterCurrentParams(kCharacterFrancois)[8] = 0x7FFFFFFF;
}
@@ -577,7 +577,7 @@ void LogicManager::HAND_Francois_Rampage(HAND_PARAMS) {
if (getCharacterCurrentParams(kCharacterFrancois)[2] == 540) {
getCharacterCurrentParams(kCharacterFrancois)[1] = 4;
- if (_gameProgress[kProgressChapter] != 1)
+ if (_globals[kProgressChapter] != 1)
getCharacterCurrentParams(kCharacterFrancois)[1] = 3;
getCharacterCurrentParams(kCharacterFrancois)[2] = 9460;
@@ -592,7 +592,7 @@ void LogicManager::HAND_Francois_Rampage(HAND_PARAMS) {
}
if (!nearX(kCharacterFrancois, 2000, 500) || getCharacter(kCharacterFrancois).direction != 2) {
- if (_gameProgress[kProgressChapter] == 1) {
+ if (_globals[kProgressChapter] == 1) {
if (checkLoc(kCharacterFrancois, kCarRedSleeping) &&
(whoOnScreen(kCharacterFrancois) || getCharacterCurrentParams(kCharacterFrancois)[0] < _gameTime || getCharacterCurrentParams(kCharacterFrancois)[3]) &&
!getCharacterCurrentParams(kCharacterFrancois)[4] && getCharacter(kCharacterFrancois).characterPosition.position < getCharacter(kCharacterMadame).characterPosition.position) {
@@ -631,7 +631,7 @@ void LogicManager::HAND_Francois_Rampage(HAND_PARAMS) {
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 3;
FrancoisCall(&LogicManager::CONS_Francois_DoSeqOtis, "605A", 0, 0, 0);
} else {
- if (_gameProgress[kProgressChapter] == 1) {
+ if (_globals[kProgressChapter] == 1) {
if (checkLoc(kCharacterFrancois, kCarRedSleeping) &&
(whoOnScreen(kCharacterFrancois) || getCharacterCurrentParams(kCharacterFrancois)[0] < _gameTime || getCharacterCurrentParams(kCharacterFrancois)[3]) &&
!getCharacterCurrentParams(kCharacterFrancois)[4] && getCharacter(kCharacterFrancois).characterPosition.position < getCharacter(kCharacterMadame).characterPosition.position) {
@@ -669,7 +669,7 @@ void LogicManager::HAND_Francois_Rampage(HAND_PARAMS) {
FrancoisCall(&LogicManager::CONS_Francois_SaveGame, 2, kEventFrancoisWhistle, 0, 0);
break;
case 5:
- if (_gameProgress[kProgressJacket] == 2 && !_gameEvents[kEventFrancoisWhistle] && !_gameEvents[kEventFrancoisWhistleD] && !_gameEvents[kEventFrancoisWhistleNight] && !_gameEvents[kEventFrancoisWhistleNightD]) {
+ if (_globals[kProgressJacket] == 2 && !_doneNIS[kEventFrancoisWhistle] && !_doneNIS[kEventFrancoisWhistleD] && !_doneNIS[kEventFrancoisWhistleNight] && !_doneNIS[kEventFrancoisWhistleNightD]) {
getCharacter(kCharacterFrancois).inventoryItem = 0x80;
}
@@ -700,7 +700,7 @@ void LogicManager::HAND_Francois_Rampage(HAND_PARAMS) {
getCharacter(kCharacterFrancois).characterPosition.position = 2088;
walk(kCharacterFrancois, getCharacterCurrentParams(kCharacterFrancois)[1], getCharacterCurrentParams(kCharacterFrancois)[2]);
- if (_gameProgress[kProgressChapter] == 1) {
+ if (_globals[kProgressChapter] == 1) {
if (checkLoc(kCharacterFrancois, kCarRedSleeping) &&
(whoOnScreen(kCharacterFrancois) || getCharacterCurrentParams(kCharacterFrancois)[0] < _gameTime || getCharacterCurrentParams(kCharacterFrancois)[3]) &&
!getCharacterCurrentParams(kCharacterFrancois)[4] && getCharacter(kCharacterFrancois).characterPosition.position < getCharacter(kCharacterMadame).characterPosition.position) {
@@ -735,7 +735,7 @@ void LogicManager::HAND_Francois_Rampage(HAND_PARAMS) {
fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
break;
case 6:
- if (_gameProgress[kProgressJacket] == 2) {
+ if (_globals[kProgressJacket] == 2) {
if (!isNight()) {
if (getCharacter(kCharacterFrancois).characterPosition.position <= getCharacter(kCharacterCath).characterPosition.position) {
playNIS(kEventFrancoisWhistleD);
@@ -888,7 +888,7 @@ void LogicManager::HAND_Francois_HaremVisit(HAND_PARAMS) {
FrancoisCall(&LogicManager::CONS_Francois_DoWalk, 4, 4840, 0, 0);
break;
case 7:
- if (cathHasItem(kItemWhistle) || _gameInventory[kItemWhistle].location == 3) {
+ if (cathHasItem(kItemWhistle) || _items[kItemWhistle].floating == 3) {
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 10;
FrancoisCall(&LogicManager::CONS_Francois_DoWalk, 4, 5790, 0, 0);
break;
@@ -967,7 +967,7 @@ void LogicManager::HAND_Francois_ChaseBeetle(HAND_PARAMS) {
FrancoisCall(&LogicManager::CONS_Francois_DoWalk, 4, getCharacterCurrentParams(kCharacterFrancois)[1], 0, 0);
break;
case 2:
- if (_gameInventory[kItemBeetle].location == 3) {
+ if (_items[kItemBeetle].floating == 3) {
startCycOtis(kCharacterFrancois, (char *)&getCharacterCurrentParams(kCharacterFrancois)[5]);
softBlockAtDoor(kCharacterFrancois, getCharacterCurrentParams(kCharacterFrancois)[0]);
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 3;
@@ -1371,8 +1371,8 @@ void LogicManager::CONS_Francois_WithMama(CONS_PARAMS) {
void LogicManager::HAND_Francois_WithMama(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if ((_gameEvents[kEventFrancoisShowBeetle] || _gameEvents[kEventFrancoisShowBeetleD]) &&
- !_gameEvents[kEventFrancoisTradeWhistle] && !_gameEvents[kEventFrancoisTradeWhistleD]) {
+ if ((_doneNIS[kEventFrancoisShowBeetle] || _doneNIS[kEventFrancoisShowBeetleD]) &&
+ !_doneNIS[kEventFrancoisTradeWhistle] && !_doneNIS[kEventFrancoisTradeWhistleD]) {
getCharacterParams(kCharacterFrancois, 8)[0] = 1;
}
@@ -1396,7 +1396,7 @@ void LogicManager::HAND_Francois_WithMama(HAND_PARAMS) {
break;
}
- if (!cathHasItem(kItemWhistle) && _gameInventory[kItemWhistle].location != 3) {
+ if (!cathHasItem(kItemWhistle) && _items[kItemWhistle].floating != 3) {
if (_gameTime > 1768500 && !getCharacterCurrentParams(kCharacterFrancois)[2]) {
getCharacterCurrentParams(kCharacterFrancois)[2] = 1;
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 4;
@@ -1412,7 +1412,7 @@ void LogicManager::HAND_Francois_WithMama(HAND_PARAMS) {
}
}
- if (_gameInventory[kItemBeetle].location != 3) {
+ if (_items[kItemBeetle].floating != 3) {
cathHasItem(kItemWhistle);
break;
}
@@ -1477,7 +1477,7 @@ void LogicManager::HAND_Francois_WithMama(HAND_PARAMS) {
// fall through
case 3:
- if (!cathHasItem(kItemWhistle) && _gameInventory[kItemWhistle].location != 3) {
+ if (!cathHasItem(kItemWhistle) && _items[kItemWhistle].floating != 3) {
if (_gameTime > 1768500 && !getCharacterCurrentParams(kCharacterFrancois)[2]) {
getCharacterCurrentParams(kCharacterFrancois)[2] = 1;
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 4;
@@ -1493,7 +1493,7 @@ void LogicManager::HAND_Francois_WithMama(HAND_PARAMS) {
}
}
- if (_gameInventory[kItemBeetle].location != 3) {
+ if (_items[kItemBeetle].floating != 3) {
cathHasItem(kItemWhistle);
break;
}
@@ -1547,7 +1547,7 @@ void LogicManager::HAND_Francois_WithMama(HAND_PARAMS) {
// fall through
case 5:
- if (_gameInventory[kItemBeetle].location != 3) {
+ if (_items[kItemBeetle].floating != 3) {
cathHasItem(kItemWhistle);
break;
}
@@ -1580,7 +1580,7 @@ void LogicManager::HAND_Francois_WithMama(HAND_PARAMS) {
// fall through
case 6:
if (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] == 6) {
- _gameProgress[kProgressField9C] = 1;
+ _globals[kProgressField9C] = 1;
}
if (_gameTime > 1782000 && !getCharacterCurrentParams(kCharacterFrancois)[5]) {
@@ -1650,7 +1650,7 @@ void LogicManager::CONS_Francois_InPart3(CONS_PARAMS) {
void LogicManager::HAND_Francois_InPart3(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if ((_gameEvents[kEventFrancoisShowBeetle] || _gameEvents[kEventFrancoisShowBeetleD]) && !_gameEvents[kEventFrancoisTradeWhistle] && !_gameEvents[kEventFrancoisTradeWhistleD]) {
+ if ((_doneNIS[kEventFrancoisShowBeetle] || _doneNIS[kEventFrancoisShowBeetleD]) && !_doneNIS[kEventFrancoisTradeWhistle] && !_doneNIS[kEventFrancoisTradeWhistleD]) {
getCharacterParams(kCharacterFrancois, 8)[0] = 1;
}
@@ -1710,7 +1710,7 @@ void LogicManager::HAND_Francois_InPart3(HAND_PARAMS) {
break;
}
- if (!cathHasItem(kItemWhistle) && _gameInventory[kItemWhistle].location != 3) {
+ if (!cathHasItem(kItemWhistle) && _items[kItemWhistle].floating != 3) {
if (_gameTime > 2011500 && !getCharacterCurrentParams(kCharacterFrancois)[9]) {
getCharacterCurrentParams(kCharacterFrancois)[9] = 1;
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 10;
@@ -1726,7 +1726,7 @@ void LogicManager::HAND_Francois_InPart3(HAND_PARAMS) {
}
}
- if (_gameInventory[kItemBeetle].location == 3) {
+ if (_items[kItemBeetle].floating == 3) {
if (getCharacterCurrentParams(kCharacterFrancois)[11] != 0x7FFFFFFF && _gameTime) {
if (_gameTime > 15803100) {
getCharacterCurrentParams(kCharacterFrancois)[11] = 0x7FFFFFFF;
@@ -1847,7 +1847,7 @@ void LogicManager::HAND_Francois_InPart3(HAND_PARAMS) {
// fall through
case 9:
- if (!cathHasItem(kItemWhistle) && _gameInventory[kItemWhistle].location != 3) {
+ if (!cathHasItem(kItemWhistle) && _items[kItemWhistle].floating != 3) {
if (_gameTime > 2011500 && !getCharacterCurrentParams(kCharacterFrancois)[9]) {
getCharacterCurrentParams(kCharacterFrancois)[9] = 1;
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 10;
@@ -1863,7 +1863,7 @@ void LogicManager::HAND_Francois_InPart3(HAND_PARAMS) {
}
}
- if (_gameInventory[kItemBeetle].location == 3) {
+ if (_items[kItemBeetle].floating == 3) {
if (getCharacterCurrentParams(kCharacterFrancois)[11] != 0x7FFFFFFF && _gameTime) {
if (_gameTime > 15803100) {
getCharacterCurrentParams(kCharacterFrancois)[11] = 0x7FFFFFFF;
@@ -1924,7 +1924,7 @@ void LogicManager::HAND_Francois_InPart3(HAND_PARAMS) {
// fall through
case 11:
- if (_gameInventory[kItemBeetle].location == 3) {
+ if (_items[kItemBeetle].floating == 3) {
if (getCharacterCurrentParams(kCharacterFrancois)[11] != 0x7FFFFFFF && _gameTime) {
if (_gameTime > 15803100) {
getCharacterCurrentParams(kCharacterFrancois)[11] = 0x7FFFFFFF;
@@ -1977,7 +1977,7 @@ void LogicManager::HAND_Francois_InPart3(HAND_PARAMS) {
break;
case 12:
if (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] == 12) {
- _gameProgress[kProgressField9C] = 1;
+ _globals[kProgressField9C] = 1;
}
if (_gameTime > 2040300 && !getCharacterCurrentParams(kCharacterFrancois)[12]) {
@@ -2115,7 +2115,7 @@ void LogicManager::CONS_Francois_Prisoner(CONS_PARAMS) {
void LogicManager::HAND_Francois_Prisoner(HAND_PARAMS) {
switch (msg->action) {
case 70549068:
- if (!cathHasItem(kItemWhistle) && _gameInventory[kItemWhistle].location != 3)
+ if (!cathHasItem(kItemWhistle) && _items[kItemWhistle].floating != 3)
dropItem(kItemWhistle, 1);
CONS_Francois_Hiding(0, 0, 0, 0);
diff --git a/engines/lastexpress/characters/headwait.cpp b/engines/lastexpress/characters/headwait.cpp
index ca0fae90f9b..d0d95386004 100644
--- a/engines/lastexpress/characters/headwait.cpp
+++ b/engines/lastexpress/characters/headwait.cpp
@@ -300,7 +300,7 @@ void LogicManager::HAND_HeadWait_RebeccaHereWeAre(HAND_PARAMS) {
case 18:
switch (getCharacter(kCharacterHeadWait).callbacks[getCharacter(kCharacterHeadWait).currentCall + 8]) {
case 1:
- switch (_gameProgress[kProgressChapter]) {
+ switch (_globals[kProgressChapter]) {
case 1:
playDialog(kCharacterHeadWait, "REB1198", -1, 30);
break;
@@ -1509,8 +1509,8 @@ void LogicManager::HAND_HeadWait_Hiding(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterHeadWait)[0]) {
- if (getCharacterCurrentParams(kCharacterHeadWait)[5] || (getCharacterCurrentParams(kCharacterHeadWait)[5] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterHeadWait)[5] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterHeadWait)[5] || (getCharacterCurrentParams(kCharacterHeadWait)[5] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterHeadWait)[5] >= _realTime)
break;
getCharacterCurrentParams(kCharacterHeadWait)[5] = 0x7FFFFFFF;
@@ -1562,8 +1562,8 @@ void LogicManager::HAND_HeadWait_Hiding(HAND_PARAMS) {
setDoor(38, kCharacterHeadWait, 1, 10, 9);
if (getCharacterCurrentParams(kCharacterHeadWait)[0]) {
- if (getCharacterCurrentParams(kCharacterHeadWait)[5] || (getCharacterCurrentParams(kCharacterHeadWait)[5] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterHeadWait)[5] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterHeadWait)[5] || (getCharacterCurrentParams(kCharacterHeadWait)[5] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterHeadWait)[5] >= _realTime)
break;
getCharacterCurrentParams(kCharacterHeadWait)[5] = 0x7FFFFFFF;
diff --git a/engines/lastexpress/characters/ivo.cpp b/engines/lastexpress/characters/ivo.cpp
index 62a3479caed..7aa23c6bdcd 100644
--- a/engines/lastexpress/characters/ivo.cpp
+++ b/engines/lastexpress/characters/ivo.cpp
@@ -197,9 +197,9 @@ void LogicManager::CONS_Ivo_DoWaitReal(CONS_PARAMS) {
void LogicManager::HAND_Ivo_DoWaitReal(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (getCharacterCurrentParams(kCharacterIvo)[1] || (getCharacterCurrentParams(kCharacterIvo)[1] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterIvo)[0],
- _currentGameSessionTicks + getCharacterCurrentParams(kCharacterIvo)[0] != 0)) {
- if (getCharacterCurrentParams(kCharacterIvo)[1] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterIvo)[1] || (getCharacterCurrentParams(kCharacterIvo)[1] = _realTime + getCharacterCurrentParams(kCharacterIvo)[0],
+ _realTime + getCharacterCurrentParams(kCharacterIvo)[0] != 0)) {
+ if (getCharacterCurrentParams(kCharacterIvo)[1] >= _realTime)
break;
getCharacterCurrentParams(kCharacterIvo)[1] = 0x7FFFFFFF;
diff --git a/engines/lastexpress/characters/kahina.cpp b/engines/lastexpress/characters/kahina.cpp
index 55e984d6e9a..60404cd7b40 100644
--- a/engines/lastexpress/characters/kahina.cpp
+++ b/engines/lastexpress/characters/kahina.cpp
@@ -208,9 +208,9 @@ void LogicManager::CONS_Kahina_DoWaitReal(CONS_PARAMS) {
void LogicManager::HAND_Kahina_DoWaitReal(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (getCharacterCurrentParams(kCharacterKahina)[1] || (getCharacterCurrentParams(kCharacterKahina)[1] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterKahina)[0],
- _currentGameSessionTicks + getCharacterCurrentParams(kCharacterKahina)[0] != 0)) {
- if (getCharacterCurrentParams(kCharacterKahina)[1] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterKahina)[1] || (getCharacterCurrentParams(kCharacterKahina)[1] = _realTime + getCharacterCurrentParams(kCharacterKahina)[0],
+ _realTime + getCharacterCurrentParams(kCharacterKahina)[0] != 0)) {
+ if (getCharacterCurrentParams(kCharacterKahina)[1] >= _realTime)
break;
getCharacterCurrentParams(kCharacterKahina)[1] = 0x7FFFFFFF;
@@ -405,7 +405,7 @@ void LogicManager::HAND_Kahina_DoWalk(HAND_PARAMS) {
break;
case 5:
- if (_gameEvents[kEventKronosConversation] || _gameEvents[kEventKronosConversationFirebird]) {
+ if (_doneNIS[kEventKronosConversation] || _doneNIS[kEventKronosConversationFirebird]) {
if (rnd(2) == 0) {
playDialog(kCharacterCath, "CAT1019A", -1, 0);
} else {
@@ -499,12 +499,12 @@ void LogicManager::CONS_Kahina_InSeclusion(CONS_PARAMS) {
void LogicManager::HAND_Kahina_InSeclusion(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameTime > 1107000 && !getCharacterCurrentParams(kCharacterKahina)[0] && _gameProgress[kProgressJacket]) {
+ if (_gameTime > 1107000 && !getCharacterCurrentParams(kCharacterKahina)[0] && _globals[kProgressJacket]) {
send(kCharacterKahina, kCharacterCond1, 238732837, 0);
getCharacterCurrentParams(kCharacterKahina)[0] = 1;
}
- if (_gameProgress[kProgressEventMertensChronosInvitation])
+ if (_globals[kProgressEventMertensChronosInvitation])
CONS_Kahina_AwaitingCath(0, 0, 0, 0);
break;
@@ -537,7 +537,7 @@ void LogicManager::HAND_Kahina_AwaitingCath(HAND_PARAMS) {
if (msg->action == 8)
playDialog(0, "LIB012", -1, 0);
- if (!_gameEvents[kEventKronosGoingToInvitation]) {
+ if (!_doneNIS[kEventKronosGoingToInvitation]) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 1;
KahinaCall(&LogicManager::CONS_Kahina_SaveGame, 2, kEventKronosGoingToInvitation, 0, 0);
break;
@@ -583,7 +583,7 @@ void LogicManager::CONS_Kahina_CathDone(CONS_PARAMS) {
void LogicManager::HAND_Kahina_CathDone(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (!_gameProgress[kProgressField14] && _gameTime < 1201500 && getCharacterCurrentParams(kCharacterKahina)[1] != 0x7FFFFFFF && getCharacterCurrentParams(kCharacterKahina)[0] < _gameTime) {
+ if (!_globals[kProgressField14] && _gameTime < 1201500 && getCharacterCurrentParams(kCharacterKahina)[1] != 0x7FFFFFFF && getCharacterCurrentParams(kCharacterKahina)[0] < _gameTime) {
if (_gameTime <= 1197000) {
if (!cathInCorridor(kCarGreenSleeping) || !getCharacterCurrentParams(kCharacterKahina)[1]) {
getCharacterCurrentParams(kCharacterKahina)[1] = _gameTime;
@@ -682,7 +682,7 @@ void LogicManager::HAND_Kahina_SearchTrain(HAND_PARAMS) {
break;
case 12:
- _gameProgress[kProgressField14] = 19;
+ _globals[kProgressField14] = 19;
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 1;
KahinaCall(&LogicManager::CONS_Kahina_DoWalk, 3, 8200, 0, 0);
break;
@@ -691,8 +691,8 @@ void LogicManager::HAND_Kahina_SearchTrain(HAND_PARAMS) {
case 1:
if (!whoOnScreen(kCharacterKahina)) {
if (inComp(kCharacterCath, kCarGreenSleeping, 8200) || cathOutHisWindow() || nearChar(kCharacterKahina, kCharacterCath, 2000)) {
- if (_gameProgress[kProgressField14] == 19)
- _gameProgress[kProgressField14] = 0;
+ if (_globals[kProgressField14] == 19)
+ _globals[kProgressField14] = 0;
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 8;
KahinaCall(&LogicManager::CONS_Kahina_DoWalk, 3, 9460, 0, 0);
@@ -717,8 +717,8 @@ void LogicManager::HAND_Kahina_SearchTrain(HAND_PARAMS) {
break;
case 4:
if (inComp(kCharacterCath, kCarGreenSleeping, 8200) || cathOutHisWindow() || nearChar(kCharacterKahina, kCharacterCath, 2000)) {
- if (_gameProgress[kProgressField14] == 19)
- _gameProgress[kProgressField14] = 0;
+ if (_globals[kProgressField14] == 19)
+ _globals[kProgressField14] = 0;
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 8;
KahinaCall(&LogicManager::CONS_Kahina_DoWalk, 3, 9460, 0, 0);
@@ -745,8 +745,8 @@ void LogicManager::HAND_Kahina_SearchTrain(HAND_PARAMS) {
case 7:
getCharacter(kCharacterKahina).characterPosition.location = 0;
- if (_gameProgress[kProgressField14] == 19)
- _gameProgress[kProgressField14] = 0;
+ if (_globals[kProgressField14] == 19)
+ _globals[kProgressField14] = 0;
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 8;
KahinaCall(&LogicManager::CONS_Kahina_DoWalk, 3, 9460, 0, 0);
@@ -879,8 +879,8 @@ void LogicManager::HAND_Kahina_InSeclusionPart2(HAND_PARAMS) {
}
}
- if (!_gameEvents[kEventKahinaAskSpeakFirebird] || _gameEvents[kEventKronosConversationFirebird] || !checkLoc(kCharacterCath, kCarKronos)) {
- if (_gameTime > 1845000 && _gameEvents[kEventKronosConversationFirebird] && inOuterSanctum(kCharacterCath)) {
+ if (!_doneNIS[kEventKahinaAskSpeakFirebird] || _doneNIS[kEventKronosConversationFirebird] || !checkLoc(kCharacterCath, kCarKronos)) {
+ if (_gameTime > 1845000 && _doneNIS[kEventKronosConversationFirebird] && inOuterSanctum(kCharacterCath)) {
setDoor(75, kCharacterCath, 1, 10, 9);
bumpCath(kCarKronos, 87, 255);
}
@@ -904,7 +904,7 @@ void LogicManager::HAND_Kahina_InSeclusionPart2(HAND_PARAMS) {
break;
}
- if (_gameTime > 1845000 && _gameEvents[kEventKronosConversationFirebird] && inOuterSanctum(kCharacterCath)) {
+ if (_gameTime > 1845000 && _doneNIS[kEventKronosConversationFirebird] && inOuterSanctum(kCharacterCath)) {
setDoor(75, kCharacterCath, 1, 10, 9);
bumpCath(kCarKronos, 87, 255);
}
@@ -912,8 +912,8 @@ void LogicManager::HAND_Kahina_InSeclusionPart2(HAND_PARAMS) {
break;
case 8:
case 9:
- if (!_gameEvents[kEventKronosConversationFirebird]) {
- if (_gameEvents[kEventKahinaAskSpeakFirebird]) {
+ if (!_doneNIS[kEventKronosConversationFirebird]) {
+ if (_doneNIS[kEventKahinaAskSpeakFirebird]) {
if (whoRunningDialog(kCharacterKahina))
fadeDialog(kCharacterKahina);
@@ -922,7 +922,7 @@ void LogicManager::HAND_Kahina_InSeclusionPart2(HAND_PARAMS) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 4;
KahinaCall(&LogicManager::CONS_Kahina_SaveGame, 2, kEventKronosConversationFirebird, 0, 0);
- } else if (_gameEvents[kEventMilosCompartmentVisitAugust] || _gameEvents[kEventTatianaGivePoem] || _gameEvents[kEventTatianaBreakfastGivePoem]) {
+ } else if (_doneNIS[kEventMilosCompartmentVisitAugust] || _doneNIS[kEventTatianaGivePoem] || _doneNIS[kEventTatianaBreakfastGivePoem]) {
if (msg->action == 8)
playDialog(0, "LIB012", -1, 0);
@@ -969,7 +969,7 @@ void LogicManager::HAND_Kahina_InSeclusionPart2(HAND_PARAMS) {
KahinaCall(&LogicManager::CONS_Kahina_DoDialog, "KRO3005", 0, 0, 0);
break;
case 3:
- if (_gameTime > 1845000 && _gameEvents[kEventKronosConversationFirebird] && inOuterSanctum(kCharacterCath)) {
+ if (_gameTime > 1845000 && _doneNIS[kEventKronosConversationFirebird] && inOuterSanctum(kCharacterCath)) {
setDoor(75, kCharacterCath, 1, 10, 9);
bumpCath(kCarKronos, 87, 255);
}
@@ -1052,7 +1052,7 @@ void LogicManager::CONS_Kahina_DoWalk1033(CONS_PARAMS) {
void LogicManager::HAND_Kahina_DoWalk1033(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameEvents[kEventAnnaBaggageArgument])
+ if (_doneNIS[kEventAnnaBaggageArgument])
forceJump(kCharacterKahina, &LogicManager::CONS_Kahina_Finished);
if (walk(kCharacterKahina, getCharacterCurrentParams(kCharacterKahina)[0], getCharacterCurrentParams(kCharacterKahina)[1])) {
@@ -1063,7 +1063,7 @@ void LogicManager::HAND_Kahina_DoWalk1033(HAND_PARAMS) {
break;
case 5:
- if (_gameEvents[kEventKronosConversation] || _gameEvents[kEventKronosConversationFirebird]) {
+ if (_doneNIS[kEventKronosConversation] || _doneNIS[kEventKronosConversationFirebird]) {
if (rnd(2) == 0) {
playDialog(kCharacterCath, "CAT1019A", -1, 0);
} else {
@@ -1103,7 +1103,7 @@ void LogicManager::CONS_Kahina_BeforeConcert(CONS_PARAMS) {
void LogicManager::HAND_Kahina_BeforeConcert(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameEvents[kEventKronosVisit])
+ if (_doneNIS[kEventKronosVisit])
setDoor(75, kCharacterCath, 3, 10, 9);
if (inInnerSanctum(kCharacterCath)) {
@@ -1114,7 +1114,7 @@ void LogicManager::HAND_Kahina_BeforeConcert(HAND_PARAMS) {
if (_gameTime > 2079000 && !getCharacterCurrentParams(kCharacterKahina)[1]) {
getCharacterCurrentParams(kCharacterKahina)[1] = 1;
- if (_gameEvents[kEventKahinaAskSpeakFirebird] && !_gameEvents[kEventKronosConversationFirebird] && checkLoc(kCharacterCath, kCarKronos)) {
+ if (_doneNIS[kEventKahinaAskSpeakFirebird] && !_doneNIS[kEventKronosConversationFirebird] && checkLoc(kCharacterCath, kCarKronos)) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 2;
KahinaCall(&LogicManager::CONS_Kahina_SaveGame, 2, kEventKronosConversationFirebird, 0, 0);
} else {
@@ -1146,7 +1146,7 @@ void LogicManager::HAND_Kahina_BeforeConcert(HAND_PARAMS) {
}
}
- if (_gameEvents[kEventKahinaAskSpeakFirebird] && !_gameEvents[kEventKronosConversationFirebird] && checkLoc(kCharacterCath, kCarKronos)) {
+ if (_doneNIS[kEventKahinaAskSpeakFirebird] && !_doneNIS[kEventKronosConversationFirebird] && checkLoc(kCharacterCath, kCarKronos)) {
if (getCharacterCurrentParams(kCharacterKahina)[3] || (getCharacterCurrentParams(kCharacterKahina)[3] = _gameTime + 900,
_gameTime != -900)) {
if (getCharacterCurrentParams(kCharacterKahina)[3] >= _gameTime)
@@ -1162,14 +1162,14 @@ void LogicManager::HAND_Kahina_BeforeConcert(HAND_PARAMS) {
break;
case 8:
case 9:
- if (!_gameEvents[kEventKronosConversationFirebird]) {
- if (_gameEvents[kEventKahinaAskSpeakFirebird]) {
+ if (!_doneNIS[kEventKronosConversationFirebird]) {
+ if (_doneNIS[kEventKahinaAskSpeakFirebird]) {
if (msg->action == 8)
playDialog(0, "LIB012", -1, 0);
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 6;
KahinaCall(&LogicManager::CONS_Kahina_SaveGame, 2, kEventKronosConversationFirebird, 0, 0);
- } else if (_gameEvents[kEventMilosCompartmentVisitAugust] || _gameEvents[kEventTatianaGivePoem] || _gameEvents[kEventTatianaBreakfastGivePoem]) {
+ } else if (_doneNIS[kEventMilosCompartmentVisitAugust] || _doneNIS[kEventTatianaGivePoem] || _doneNIS[kEventTatianaBreakfastGivePoem]) {
if (msg->action == 8)
playDialog(0, "LIB012", -1, 0);
@@ -1199,7 +1199,7 @@ void LogicManager::HAND_Kahina_BeforeConcert(HAND_PARAMS) {
break;
case 12:
- if (_gameEvents[kEventKronosConversationFirebird]) {
+ if (_doneNIS[kEventKronosConversationFirebird]) {
setDoor(75, kCharacterCath, 3, 10, 9);
} else {
setDoor(75, kCharacterKahina, 1, 10, 9);
@@ -1214,7 +1214,7 @@ void LogicManager::HAND_Kahina_BeforeConcert(HAND_PARAMS) {
if (_gameTime > 2079000 && !getCharacterCurrentParams(kCharacterKahina)[1]) {
getCharacterCurrentParams(kCharacterKahina)[1] = 1;
- if (_gameEvents[kEventKahinaAskSpeakFirebird] && !_gameEvents[kEventKronosConversationFirebird] && checkLoc(kCharacterCath, kCarKronos)) {
+ if (_doneNIS[kEventKahinaAskSpeakFirebird] && !_doneNIS[kEventKronosConversationFirebird] && checkLoc(kCharacterCath, kCarKronos)) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 2;
KahinaCall(&LogicManager::CONS_Kahina_SaveGame, 2, kEventKronosConversationFirebird, 0, 0);
} else {
@@ -1246,7 +1246,7 @@ void LogicManager::HAND_Kahina_BeforeConcert(HAND_PARAMS) {
}
}
- if (_gameEvents[kEventKahinaAskSpeakFirebird] && !_gameEvents[kEventKronosConversationFirebird] && checkLoc(kCharacterCath, kCarKronos)) {
+ if (_doneNIS[kEventKahinaAskSpeakFirebird] && !_doneNIS[kEventKronosConversationFirebird] && checkLoc(kCharacterCath, kCarKronos)) {
if (getCharacterCurrentParams(kCharacterKahina)[3] || (getCharacterCurrentParams(kCharacterKahina)[3] = _gameTime + 900,
_gameTime != -900)) {
if (getCharacterCurrentParams(kCharacterKahina)[3] >= _gameTime)
@@ -1358,11 +1358,11 @@ void LogicManager::HAND_Kahina_Concert(HAND_PARAMS) {
}
if (!getCharacterCurrentParams(kCharacterKahina)[1]) {
- if (!_gameProgress[kProgressField44] && _gameTime > 2214000) {
- if (_gameInventory[kProgressField48].location == 3 || _gameInventory[kProgressField48].location == 7) {
+ if (!_globals[kProgressField44] && _gameTime > 2214000) {
+ if (_items[kProgressField48].floating == 3 || _items[kProgressField48].floating == 7) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 3;
KahinaCall(&LogicManager::CONS_Kahina_SearchCath, 0, 0, 0, 0);
- } else if (_gameInventory[kProgressField48].location == 2 || _gameInventory[kProgressField48].location == 1) {
+ } else if (_items[kProgressField48].floating == 2 || _items[kProgressField48].floating == 1) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 4;
KahinaCall(&LogicManager::CONS_Kahina_SearchTatiana, 0, 0, 0, 0);
}
@@ -1375,11 +1375,11 @@ void LogicManager::HAND_Kahina_Concert(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterKahina)[3] = _gameTime + 4500;
if (getCharacterCurrentParams(kCharacterKahina)[5] == 0x7FFFFFFF || !_gameTime) {
- if (!_gameProgress[kProgressField44] && _gameTime > 2214000) {
- if (_gameInventory[kProgressField48].location == 3 || _gameInventory[kProgressField48].location == 7) {
+ if (!_globals[kProgressField44] && _gameTime > 2214000) {
+ if (_items[kProgressField48].floating == 3 || _items[kProgressField48].floating == 7) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 3;
KahinaCall(&LogicManager::CONS_Kahina_SearchCath, 0, 0, 0, 0);
- } else if (_gameInventory[kProgressField48].location == 2 || _gameInventory[kProgressField48].location == 1) {
+ } else if (_items[kProgressField48].floating == 2 || _items[kProgressField48].floating == 1) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 4;
KahinaCall(&LogicManager::CONS_Kahina_SearchTatiana, 0, 0, 0, 0);
}
@@ -1396,11 +1396,11 @@ void LogicManager::HAND_Kahina_Concert(HAND_PARAMS) {
playDialog(0, "LIB015", getVolume(kCharacterKahina), 15);
startCycOtis(kCharacterKahina, "202a");
getCharacterCurrentParams(kCharacterKahina)[1] = 0;
- if (!_gameProgress[kProgressField44] && _gameTime > 2214000) {
- if (_gameInventory[kProgressField48].location == 3 || _gameInventory[kProgressField48].location == 7) {
+ if (!_globals[kProgressField44] && _gameTime > 2214000) {
+ if (_items[kProgressField48].floating == 3 || _items[kProgressField48].floating == 7) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 3;
KahinaCall(&LogicManager::CONS_Kahina_SearchCath, 0, 0, 0, 0);
- } else if (_gameInventory[kProgressField48].location == 2 || _gameInventory[kProgressField48].location == 1) {
+ } else if (_items[kProgressField48].floating == 2 || _items[kProgressField48].floating == 1) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 4;
KahinaCall(&LogicManager::CONS_Kahina_SearchTatiana, 0, 0, 0, 0);
}
@@ -1411,11 +1411,11 @@ void LogicManager::HAND_Kahina_Concert(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterKahina)[5] >= _gameTime) {
- if (!_gameProgress[kProgressField44] && _gameTime > 2214000) {
- if (_gameInventory[kProgressField48].location == 3 || _gameInventory[kProgressField48].location == 7) {
+ if (!_globals[kProgressField44] && _gameTime > 2214000) {
+ if (_items[kProgressField48].floating == 3 || _items[kProgressField48].floating == 7) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 3;
KahinaCall(&LogicManager::CONS_Kahina_SearchCath, 0, 0, 0, 0);
- } else if (_gameInventory[kProgressField48].location == 2 || _gameInventory[kProgressField48].location == 1) {
+ } else if (_items[kProgressField48].floating == 2 || _items[kProgressField48].floating == 1) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 4;
KahinaCall(&LogicManager::CONS_Kahina_SearchTatiana, 0, 0, 0, 0);
}
@@ -1431,11 +1431,11 @@ void LogicManager::HAND_Kahina_Concert(HAND_PARAMS) {
startCycOtis(kCharacterKahina, "202a");
getCharacterCurrentParams(kCharacterKahina)[1] = 0;
- if (!_gameProgress[kProgressField44] && _gameTime > 2214000) {
- if (_gameInventory[kProgressField48].location == 3 || _gameInventory[kProgressField48].location == 7) {
+ if (!_globals[kProgressField44] && _gameTime > 2214000) {
+ if (_items[kProgressField48].floating == 3 || _items[kProgressField48].floating == 7) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 3;
KahinaCall(&LogicManager::CONS_Kahina_SearchCath, 0, 0, 0, 0);
- } else if (_gameInventory[kProgressField48].location == 2 || _gameInventory[kProgressField48].location == 1) {
+ } else if (_items[kProgressField48].floating == 2 || _items[kProgressField48].floating == 1) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 4;
KahinaCall(&LogicManager::CONS_Kahina_SearchTatiana, 0, 0, 0, 0);
}
@@ -1459,11 +1459,11 @@ void LogicManager::HAND_Kahina_Concert(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterKahina)[0] = 0;
getCharacterCurrentParams(kCharacterKahina)[1] = 1;
if (!getCharacterCurrentParams(kCharacterKahina)[1]) {
- if (!_gameProgress[kProgressField44] && _gameTime > 2214000) {
- if (_gameInventory[kProgressField48].location == 3 || _gameInventory[kProgressField48].location == 7) {
+ if (!_globals[kProgressField44] && _gameTime > 2214000) {
+ if (_items[kProgressField48].floating == 3 || _items[kProgressField48].floating == 7) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 3;
KahinaCall(&LogicManager::CONS_Kahina_SearchCath, 0, 0, 0, 0);
- } else if (_gameInventory[kProgressField48].location == 2 || _gameInventory[kProgressField48].location == 1) {
+ } else if (_items[kProgressField48].floating == 2 || _items[kProgressField48].floating == 1) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 4;
KahinaCall(&LogicManager::CONS_Kahina_SearchTatiana, 0, 0, 0, 0);
}
@@ -1476,11 +1476,11 @@ void LogicManager::HAND_Kahina_Concert(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterKahina)[3] = _gameTime + 4500;
if (getCharacterCurrentParams(kCharacterKahina)[5] == 0x7FFFFFFF || !_gameTime) {
- if (!_gameProgress[kProgressField44] && _gameTime > 2214000) {
- if (_gameInventory[kProgressField48].location == 3 || _gameInventory[kProgressField48].location == 7) {
+ if (!_globals[kProgressField44] && _gameTime > 2214000) {
+ if (_items[kProgressField48].floating == 3 || _items[kProgressField48].floating == 7) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 3;
KahinaCall(&LogicManager::CONS_Kahina_SearchCath, 0, 0, 0, 0);
- } else if (_gameInventory[kProgressField48].location == 2 || _gameInventory[kProgressField48].location == 1) {
+ } else if (_items[kProgressField48].floating == 2 || _items[kProgressField48].floating == 1) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 4;
KahinaCall(&LogicManager::CONS_Kahina_SearchTatiana, 0, 0, 0, 0);
}
@@ -1497,11 +1497,11 @@ void LogicManager::HAND_Kahina_Concert(HAND_PARAMS) {
playDialog(0, "LIB015", getVolume(kCharacterKahina), 15);
startCycOtis(kCharacterKahina, "202a");
getCharacterCurrentParams(kCharacterKahina)[1] = 0;
- if (!_gameProgress[kProgressField44] && _gameTime > 2214000) {
- if (_gameInventory[kProgressField48].location == 3 || _gameInventory[kProgressField48].location == 7) {
+ if (!_globals[kProgressField44] && _gameTime > 2214000) {
+ if (_items[kProgressField48].floating == 3 || _items[kProgressField48].floating == 7) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 3;
KahinaCall(&LogicManager::CONS_Kahina_SearchCath, 0, 0, 0, 0);
- } else if (_gameInventory[kProgressField48].location == 2 || _gameInventory[kProgressField48].location == 1) {
+ } else if (_items[kProgressField48].floating == 2 || _items[kProgressField48].floating == 1) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 4;
KahinaCall(&LogicManager::CONS_Kahina_SearchTatiana, 0, 0, 0, 0);
}
@@ -1512,11 +1512,11 @@ void LogicManager::HAND_Kahina_Concert(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterKahina)[5] >= _gameTime) {
- if (!_gameProgress[kProgressField44] && _gameTime > 2214000) {
- if (_gameInventory[kProgressField48].location == 3 || _gameInventory[kProgressField48].location == 7) {
+ if (!_globals[kProgressField44] && _gameTime > 2214000) {
+ if (_items[kProgressField48].floating == 3 || _items[kProgressField48].floating == 7) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 3;
KahinaCall(&LogicManager::CONS_Kahina_SearchCath, 0, 0, 0, 0);
- } else if (_gameInventory[kProgressField48].location == 2 || _gameInventory[kProgressField48].location == 1) {
+ } else if (_items[kProgressField48].floating == 2 || _items[kProgressField48].floating == 1) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 4;
KahinaCall(&LogicManager::CONS_Kahina_SearchTatiana, 0, 0, 0, 0);
}
@@ -1532,11 +1532,11 @@ void LogicManager::HAND_Kahina_Concert(HAND_PARAMS) {
startCycOtis(kCharacterKahina, "202a");
getCharacterCurrentParams(kCharacterKahina)[1] = 0;
- if (!_gameProgress[kProgressField44] && _gameTime > 2214000) {
- if (_gameInventory[kProgressField48].location == 3 || _gameInventory[kProgressField48].location == 7) {
+ if (!_globals[kProgressField44] && _gameTime > 2214000) {
+ if (_items[kProgressField48].floating == 3 || _items[kProgressField48].floating == 7) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 3;
KahinaCall(&LogicManager::CONS_Kahina_SearchCath, 0, 0, 0, 0);
- } else if (_gameInventory[kProgressField48].location == 2 || _gameInventory[kProgressField48].location == 1) {
+ } else if (_items[kProgressField48].floating == 2 || _items[kProgressField48].floating == 1) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 4;
KahinaCall(&LogicManager::CONS_Kahina_SearchTatiana, 0, 0, 0, 0);
}
@@ -1554,7 +1554,7 @@ void LogicManager::HAND_Kahina_Concert(HAND_PARAMS) {
break;
case 134611040:
- if (_gameEvents[kEventConcertLeaveWithBriefcase])
+ if (_doneNIS[kEventConcertLeaveWithBriefcase])
CONS_Kahina_SeekCath(0, 0, 0, 0);
break;
@@ -1584,10 +1584,10 @@ void LogicManager::HAND_Kahina_Finished(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (getCharacterCurrentParams(kCharacterKahina)[0]) {
- if (getCharacterParams(kCharacterKahina, 8)[2] || (_gameInventory[kItemFirebird].location == 3) || _gameInventory[kItemFirebird].location == 7) {
+ if (getCharacterParams(kCharacterKahina, 8)[2] || (_items[kItemFirebird].floating == 3) || _items[kItemFirebird].floating == 7) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 1;
KahinaCall(&LogicManager::CONS_Kahina_SearchCath, 0, 0, 0, 0);
- } else if (_gameInventory[kItemFirebird].location == 2 || _gameInventory[kItemFirebird].location == 1) {
+ } else if (_items[kItemFirebird].floating == 2 || _items[kItemFirebird].floating == 1) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 2;
KahinaCall(&LogicManager::CONS_Kahina_SearchTatiana, 0, 0, 0, 0);
}
@@ -1735,7 +1735,7 @@ void LogicManager::HAND_Kahina_SeekCath(HAND_PARAMS) {
bumpCathRx(getCharacter(kCharacterKahina).characterPosition.car, getCharacter(kCharacterKahina).characterPosition.position + 750);
send(kCharacterKahina, kCharacterKronos, 235599361, 0);
playDialog(kCharacterKahina, "MUS016", 16, 0);
- _gameProgress[kProgressField44] = 1;
+ _globals[kProgressField44] = 1;
getCharacterCurrentParams(kCharacterKahina)[0] = 1;
getCharacterCurrentParams(kCharacterKahina)[1] = 2;
getCharacterCurrentParams(kCharacterKahina)[2] = 9270;
@@ -1760,7 +1760,7 @@ void LogicManager::HAND_Kahina_SeekCath(HAND_PARAMS) {
if (whoRunningDialog(kCharacterKahina))
fadeDialog(kCharacterKahina);
- _gameProgress[kProgressField44] = 0;
+ _globals[kProgressField44] = 0;
CONS_Kahina_Finished(0, 0, 0, 0);
break;
case 137503360:
@@ -1769,7 +1769,7 @@ void LogicManager::HAND_Kahina_SeekCath(HAND_PARAMS) {
if (whoRunningDialog(kCharacterKahina))
fadeDialog(kCharacterKahina);
- _gameProgress[kProgressField44] = 0;
+ _globals[kProgressField44] = 0;
CONS_Kahina_Finished(0, 0, 0, 0);
break;
default:
@@ -1812,18 +1812,18 @@ void LogicManager::HAND_Kahina_SearchCath(HAND_PARAMS) {
break;
case 12:
- if (!_gameEvents[kEventAnnaBaggageArgument]) {
+ if (!_doneNIS[kEventAnnaBaggageArgument]) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 1;
KahinaCall(&LogicManager::CONS_Kahina_DoWalk1033, 3, 8200, 0, 0);
break;
}
- if (_gameInventory[kItemFirebird].location == 3) {
- _gameProgress[kProgressField7C] = 1;
+ if (_items[kItemFirebird].floating == 3) {
+ _globals[kProgressField7C] = 1;
} else {
- if (_gameInventory[kItemFirebird].location != 7) {
+ if (_items[kItemFirebird].floating != 7) {
dropItem(kItemBriefcase, 2);
- _gameProgress[kProgressField78] = 1;
+ _globals[kProgressField78] = 1;
getCharacterParams(kCharacterKahina, 8)[2] = 0;
getCharacter(kCharacterKahina).currentCall--;
@@ -1832,14 +1832,14 @@ void LogicManager::HAND_Kahina_SearchCath(HAND_PARAMS) {
break;
}
- _gameProgress[kProgressField80] = 1;
+ _globals[kProgressField80] = 1;
}
takeItem(kItemFirebird);
- _gameInventory[kItemFirebird].location = 5;
+ _items[kItemFirebird].floating = 5;
send(kCharacterKahina, kCharacterKronos, 138085344, 0);
dropItem(kItemBriefcase, 2);
- _gameProgress[kProgressField78] = 1;
+ _globals[kProgressField78] = 1;
getCharacterParams(kCharacterKahina, 8)[2] = 0;
getCharacter(kCharacterKahina).currentCall--;
@@ -1912,17 +1912,17 @@ void LogicManager::HAND_Kahina_SearchCath(HAND_PARAMS) {
setDoor(1, kCharacterCath, 0, 10, 9);
setDoor(17, kCharacterCath, 0, 10, 9);
- if (_gameInventory[kItemFirebird].location == 3) {
- _gameProgress[kProgressField7C] = 1;
+ if (_items[kItemFirebird].floating == 3) {
+ _globals[kProgressField7C] = 1;
takeItem(kItemFirebird);
- _gameInventory[kItemFirebird].location = 5;
+ _items[kItemFirebird].floating = 5;
send(kCharacterKahina, kCharacterKronos, 138085344, 0);
dropItem(kItemBriefcase, 2);
- _gameProgress[kProgressFieldC0] = _gameTime;
- _gameProgress[kProgressField78] = 1;
+ _globals[kProgressFieldC0] = _gameTime;
+ _globals[kProgressField78] = 1;
getCharacterParams(kCharacterKahina, 8)[2] = 0;
- if (_gameInventory[kItemFirebird].location != 18) {
+ if (_items[kItemFirebird].floating != 18) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 10;
KahinaCall(&LogicManager::CONS_Kahina_DoCorrOtis, "616Ba", 1, 0, 0);
}
@@ -1930,17 +1930,17 @@ void LogicManager::HAND_Kahina_SearchCath(HAND_PARAMS) {
break;
}
- if (_gameInventory[kItemFirebird].location == 7) {
- _gameProgress[kProgressField80] = 1;
+ if (_items[kItemFirebird].floating == 7) {
+ _globals[kProgressField80] = 1;
takeItem(kItemFirebird);
- _gameInventory[kItemFirebird].location = 5;
+ _items[kItemFirebird].floating = 5;
send(kCharacterKahina, kCharacterKronos, 138085344, 0);
dropItem(kItemBriefcase, 2);
- _gameProgress[kProgressFieldC0] = _gameTime;
- _gameProgress[kProgressField78] = 1;
+ _globals[kProgressFieldC0] = _gameTime;
+ _globals[kProgressField78] = 1;
getCharacterParams(kCharacterKahina, 8)[2] = 0;
- if (_gameInventory[kItemFirebird].location != 18) {
+ if (_items[kItemFirebird].floating != 18) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 10;
KahinaCall(&LogicManager::CONS_Kahina_DoCorrOtis, "616Ba", 1, 0, 0);
}
@@ -1950,11 +1950,11 @@ void LogicManager::HAND_Kahina_SearchCath(HAND_PARAMS) {
if (getCharacterParams(kCharacterKahina, 8)[2]) {
dropItem(kItemBriefcase, 2);
- _gameProgress[kProgressField78] = 1;
+ _globals[kProgressField78] = 1;
getCharacterParams(kCharacterKahina, 8)[2] = 0;
}
- if (_gameInventory[kItemFirebird].location != 18) {
+ if (_items[kItemFirebird].floating != 18) {
getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] = 10;
KahinaCall(&LogicManager::CONS_Kahina_DoCorrOtis, "616Ba", 1, 0, 0);
}
@@ -1992,12 +1992,12 @@ void LogicManager::CONS_Kahina_SearchTatiana(CONS_PARAMS) {
void LogicManager::HAND_Kahina_SearchTatiana(HAND_PARAMS) {
switch (msg->action) {
case 12:
- if (_gameEvents[kEventAnnaBaggageArgument]) {
+ if (_doneNIS[kEventAnnaBaggageArgument]) {
takeItem(kItemFirebird);
- _gameInventory[kItemFirebird].location = 5;
+ _items[kItemFirebird].floating = 5;
send(kCharacterKahina, kCharacterKronos, 138085344, 0);
dropItem(kItemBriefcase, 2);
- _gameProgress[kProgressField78] = 1;
+ _globals[kProgressField78] = 1;
getCharacter(kCharacterKahina).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterKahina, _functionsKahina[getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall]]);
@@ -2059,9 +2059,9 @@ void LogicManager::HAND_Kahina_SearchTatiana(HAND_PARAMS) {
setDoor(32, kCharacterCath, checkDoor(32), 10, 9);
setDoor(48, kCharacterCath, checkDoor(48), 10, 9);
- if (_gameInventory[kItemFirebird].location == 1 || _gameInventory[kItemFirebird].location == 2) {
+ if (_items[kItemFirebird].floating == 1 || _items[kItemFirebird].floating == 2) {
takeItem(kItemFirebird);
- _gameInventory[kItemFirebird].location = 5;
+ _items[kItemFirebird].floating = 5;
send(kCharacterKahina, kCharacterKronos, 138085344, 0);
getCharacterParams(kCharacterKahina, 8)[2] = 1;
}
@@ -2122,7 +2122,7 @@ void LogicManager::HAND_Kahina_KillCathAnywhere(HAND_PARAMS) {
break;
case 12:
- _gameTimeTicksDelta = 0;
+ _timeSpeed = 0;
break;
case 18:
if (getCharacter(kCharacterKahina).callbacks[getCharacter(kCharacterKahina).currentCall + 8] == 1) {
diff --git a/engines/lastexpress/characters/kronos.cpp b/engines/lastexpress/characters/kronos.cpp
index befefe724ca..db229992b47 100644
--- a/engines/lastexpress/characters/kronos.cpp
+++ b/engines/lastexpress/characters/kronos.cpp
@@ -224,9 +224,9 @@ void LogicManager::CONS_Kronos_DoWaitReal(CONS_PARAMS) {
void LogicManager::HAND_Kronos_DoWaitReal(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (getCharacterCurrentParams(kCharacterKronos)[1] || (getCharacterCurrentParams(kCharacterKronos)[1] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterKronos)[0],
- _currentGameSessionTicks + getCharacterCurrentParams(kCharacterKronos)[0] != 0)) {
- if (getCharacterCurrentParams(kCharacterKronos)[1] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterKronos)[1] || (getCharacterCurrentParams(kCharacterKronos)[1] = _realTime + getCharacterCurrentParams(kCharacterKronos)[0],
+ _realTime + getCharacterCurrentParams(kCharacterKronos)[0] != 0)) {
+ if (getCharacterCurrentParams(kCharacterKronos)[1] >= _realTime)
break;
getCharacterCurrentParams(kCharacterKronos)[1] = 0x7FFFFFFF;
@@ -291,9 +291,9 @@ void LogicManager::HAND_Kronos_AwaitingCath(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterKronos)[0] && checkLoc(kCharacterCath, kCarKronos)) {
- if (getCharacterCurrentParams(kCharacterKronos)[2] || (getCharacterCurrentParams(kCharacterKronos)[2] = _currentGameSessionTicks + 150,
- _currentGameSessionTicks != -150)) {
- if (getCharacterCurrentParams(kCharacterKronos)[2] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterKronos)[2] || (getCharacterCurrentParams(kCharacterKronos)[2] = _realTime + 150,
+ _realTime != -150)) {
+ if (getCharacterCurrentParams(kCharacterKronos)[2] >= _realTime)
break;
getCharacterCurrentParams(kCharacterKronos)[2] = 0x7FFFFFFF;
@@ -507,14 +507,14 @@ void LogicManager::HAND_Kronos_WBWait(HAND_PARAMS) {
case 0:
if (getCharacterCurrentParams(kCharacterKronos)[0] && !inSalon(kCharacterMonsieur)) {
if (!getCharacterCurrentParams(kCharacterKronos)[1]) {
- getCharacterCurrentParams(kCharacterKronos)[1] = _currentGameSessionTicks + 75;
- if (_currentGameSessionTicks == -75) {
+ getCharacterCurrentParams(kCharacterKronos)[1] = _realTime + 75;
+ if (_realTime == -75) {
CONS_Kronos_VisitSalon(0, 0, 0, 0);
break;
}
}
- if (getCharacterCurrentParams(kCharacterKronos)[1] < _currentGameSessionTicks) {
+ if (getCharacterCurrentParams(kCharacterKronos)[1] < _realTime) {
getCharacterCurrentParams(kCharacterKronos)[1] = 0x7FFFFFFF;
CONS_Kronos_VisitSalon(0, 0, 0, 0);
break;
@@ -715,7 +715,7 @@ void LogicManager::HAND_Kronos_StartConcert(HAND_PARAMS) {
setDoor(75, kCharacterCath, 1, 0, 0);
break;
case 17:
- if (checkLoc(kCharacterCath, kCarKronos) && !inInnerSanctum(kCharacterCath) && !cathHasItem(kItemFirebird) && !_gameEvents[kEventConcertStart]) {
+ if (checkLoc(kCharacterCath, kCarKronos) && !inInnerSanctum(kCharacterCath) && !cathHasItem(kItemFirebird) && !_doneNIS[kEventConcertStart]) {
startCycOtis(kCharacterKronos, "201a");
getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] = 2;
KronosCall(&LogicManager::CONS_Kronos_SaveGame, 2, kEventConcertStart, 0, 0);
@@ -824,9 +824,9 @@ void LogicManager::HAND_Kronos_Concert(HAND_PARAMS) {
if (!getCharacterCurrentParams(kCharacterKronos)[0])
getCharacterCurrentParams(kCharacterKronos)[1] = getCharacterCurrentParams(kCharacterKronos)[2];
- getCharacterCurrentParams(kCharacterKronos)[1] -= _gameTimeTicksDelta;
+ getCharacterCurrentParams(kCharacterKronos)[1] -= _timeSpeed;
- if (_gameTimeTicksDelta > getCharacterCurrentParams(kCharacterKronos)[1]) {
+ if (_timeSpeed > getCharacterCurrentParams(kCharacterKronos)[1]) {
send(kCharacterKronos, kCharacterKahina, 92186062, 0);
getCharacterCurrentParams(kCharacterKronos)[3]++;
@@ -889,7 +889,7 @@ void LogicManager::HAND_Kronos_Concert(HAND_PARAMS) {
break;
case 12:
_gameTime = 2115000;
- _gameTimeTicksDelta = 3;
+ _timeSpeed = 3;
if (checkCathDir(kCarKronos, 88) || checkCathDir(kCarKronos, 84) || checkCathDir(kCarKronos, 85) || checkCathDir(kCarKronos, 86) || checkCathDir(kCarKronos, 83)) {
getCharacterCurrentParams(kCharacterKronos)[0] = 1;
@@ -901,7 +901,7 @@ void LogicManager::HAND_Kronos_Concert(HAND_PARAMS) {
setDoor(75, kCharacterCath, 0, 10, 9);
setDoor(76, kCharacterKronos, 0, 10, 9);
- _gameProgress[kProgressField40] = 1;
+ _globals[kProgressField40] = 1;
startCycOtis(kCharacterKronos, "201a");
getCharacterCurrentParams(kCharacterKronos)[2] = 2700;
getCharacterCurrentParams(kCharacterKronos)[1] = 2700;
@@ -969,11 +969,11 @@ void LogicManager::HAND_Kronos_AfterConcert(HAND_PARAMS) {
break;
case 12:
- _gameProgress[kProgressField40] = 0;
+ _globals[kProgressField40] = 0;
setDoor(75, kCharacterCath, 3, 0, 0);
send(kCharacterKronos, kCharacterRebecca, 191668032, 0);
- if (_gameEvents[kEventConcertLeaveWithBriefcase])
+ if (_doneNIS[kEventConcertLeaveWithBriefcase])
break;
CONS_Kronos_AwaitingCath3(0, 0, 0, 0);
@@ -1013,7 +1013,7 @@ void LogicManager::HAND_Kronos_AwaitingCath3(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (inInnerSanctum(kCharacterCath)) {
- if (_gameProgress[kProgressField44]) {
+ if (_globals[kProgressField44]) {
getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] = 5;
KronosCall(&LogicManager::CONS_Kronos_SaveGame, 2, kEventKahinaPunchBaggageCarEntrance, 0, 0);
} else {
@@ -1032,18 +1032,18 @@ void LogicManager::HAND_Kronos_AwaitingCath3(HAND_PARAMS) {
playDialog(0, "LIB013", -1, 0);
}
- if (_gameEvents[kEventConcertLeaveWithBriefcase])
+ if (_doneNIS[kEventConcertLeaveWithBriefcase])
fedEx(kCharacterKronos, kCharacterKahina, 137503360, 0);
if (cathHasItem(kItemBriefcase)) {
getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] = 1;
KronosCall(&LogicManager::CONS_Kronos_SaveGame, 2, kEventKronosReturnBriefcase, 0, 0);
- } else if (cathHasItem(kItemFirebird) && _gameEvents[kEventConcertLeaveWithBriefcase]) {
+ } else if (cathHasItem(kItemFirebird) && _doneNIS[kEventConcertLeaveWithBriefcase]) {
getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] = 2;
KronosCall(&LogicManager::CONS_Kronos_SaveGame, 2, kEventKronosBringEggCeiling, 0, 0);
} else if (cathHasItem(kItemFirebird)) {
getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] = 3;
KronosCall(&LogicManager::CONS_Kronos_SaveGame, 2, kEventKronosBringEggCeiling, 0, 0);
- } else if (_gameEvents[kEventConcertLeaveWithBriefcase]) {
+ } else if (_doneNIS[kEventConcertLeaveWithBriefcase]) {
getCharacter(kCharacterKronos).callbacks[getCharacter(kCharacterKronos).currentCall + 8] = 4;
KronosCall(&LogicManager::CONS_Kronos_SaveGame, 2, kEventKronosBringNothing, 0, 0);
}
@@ -1065,12 +1065,12 @@ void LogicManager::HAND_Kronos_AwaitingCath3(HAND_PARAMS) {
playNIS(kEventKronosBringEggCeiling);
bumpCath(kCarKronos, 87, 255);
takeCathItem(kItemFirebird);
- _gameInventory[kItemFirebird].location = 5;
+ _items[kItemFirebird].floating = 5;
CONS_Kronos_Finished(0, 0, 0, 0);
break;
case 3:
takeCathItem(kItemFirebird);
- _gameInventory[kItemFirebird].location = 5;
+ _items[kItemFirebird].floating = 5;
playNIS(kEventKronosBringEgg);
bumpCath(kCarKronos, 87, 255);
giveCathItem(kItemBriefcase);
diff --git a/engines/lastexpress/characters/madame.cpp b/engines/lastexpress/characters/madame.cpp
index 706d5ef6a3c..b9cf33a4342 100644
--- a/engines/lastexpress/characters/madame.cpp
+++ b/engines/lastexpress/characters/madame.cpp
@@ -334,10 +334,10 @@ void LogicManager::HAND_Madame_ComplainCond2(HAND_PARAMS) {
startCycOtis(kCharacterMadame, "606L");
playDialog(kCharacterMadame, (char *)&getCharacterCurrentParams(kCharacterMadame)[0], -1, 0);
if (whoOnScreen(kCharacterMadame) || nearChar(kCharacterMadame, kCharacterCath, 2000)) {
- if (_gameProgress[kProgressChapter] == 1) {
- _gameProgress[kProgressFieldA8] = 1;
- } else if (_gameProgress[kProgressChapter] == 3) {
- _gameProgress[kProgressFieldA4] = 1;
+ if (_globals[kProgressChapter] == 1) {
+ _globals[kProgressFieldA8] = 1;
+ } else if (_globals[kProgressChapter] == 3) {
+ _globals[kProgressFieldA4] = 1;
}
}
@@ -595,7 +595,7 @@ void LogicManager::HAND_Madame_OpenComp1(HAND_PARAMS) {
playDialog(kCharacterMadame, "MME1035A", -1, 0);
if (whoOnScreen(kCharacterMadame) || nearChar(kCharacterMadame, kCharacterCath, 2000))
- _gameProgress[kProgressFieldAC] = 1;
+ _globals[kProgressFieldAC] = 1;
getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 2;
MadameCall(&LogicManager::CONS_Madame_DoCorrOtis, "606Ed", 35, 0, 0);
@@ -624,7 +624,7 @@ void LogicManager::HAND_Madame_ClosedComp1(HAND_PARAMS) {
setDoor(51, kCharacterCath, 1, 0, 0);
if (nearChar(kCharacterMadame, kCharacterCath, 2000))
- _gameProgress[kProgressFieldA0] = 1;
+ _globals[kProgressFieldA0] = 1;
getCharacterCurrentParams(kCharacterMadame)[4] = 1;
getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 1;
@@ -639,7 +639,7 @@ void LogicManager::HAND_Madame_ClosedComp1(HAND_PARAMS) {
setDoor(51, kCharacterCath, 1, 0, 0);
if (nearChar(kCharacterMadame, kCharacterCath, 2000))
- _gameProgress[kProgressFieldA0] = 1;
+ _globals[kProgressFieldA0] = 1;
getCharacterCurrentParams(kCharacterMadame)[4] = 1;
getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 1;
@@ -654,7 +654,7 @@ void LogicManager::HAND_Madame_ClosedComp1(HAND_PARAMS) {
setDoor(51, kCharacterCath, 1, 0, 0);
if (nearChar(kCharacterMadame, kCharacterCath, 2000))
- _gameProgress[kProgressFieldA0] = 1;
+ _globals[kProgressFieldA0] = 1;
getCharacterCurrentParams(kCharacterMadame)[4] = 1;
getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 1;
@@ -663,7 +663,7 @@ void LogicManager::HAND_Madame_ClosedComp1(HAND_PARAMS) {
}
}
- if (_gameProgress[kProgressField24] && getCharacterCurrentParams(kCharacterMadame)[6] != 0x7FFFFFFF && _gameTime) {
+ if (_globals[kProgressField24] && getCharacterCurrentParams(kCharacterMadame)[6] != 0x7FFFFFFF && _gameTime) {
if (_gameTime > 1093500) {
getCharacterCurrentParams(kCharacterMadame)[6] = 0x7FFFFFFF;
getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 2;
@@ -695,9 +695,9 @@ void LogicManager::HAND_Madame_ClosedComp1(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterMadame)[3]) {
- if (getCharacterCurrentParams(kCharacterMadame)[8] || (getCharacterCurrentParams(kCharacterMadame)[8] = _currentGameSessionTicks + 75,
- _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterMadame)[8] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterMadame)[8] || (getCharacterCurrentParams(kCharacterMadame)[8] = _realTime + 75,
+ _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterMadame)[8] >= _realTime)
break;
getCharacterCurrentParams(kCharacterMadame)[8] = 0x7FFFFFFF;
@@ -768,7 +768,7 @@ void LogicManager::HAND_Madame_ClosedComp1(HAND_PARAMS) {
setDoor(35, kCharacterMadame, 1, 10, 9);
setDoor(51, kCharacterMadame, 1, 10, 9);
- if (_gameProgress[kProgressField24] && getCharacterCurrentParams(kCharacterMadame)[6] != 0x7FFFFFFF && _gameTime) {
+ if (_globals[kProgressField24] && getCharacterCurrentParams(kCharacterMadame)[6] != 0x7FFFFFFF && _gameTime) {
if (_gameTime > 1093500) {
getCharacterCurrentParams(kCharacterMadame)[6] = 0x7FFFFFFF;
getCharacter(kCharacterMadame).callbacks[getCharacter(kCharacterMadame).currentCall + 8] = 2;
@@ -800,9 +800,9 @@ void LogicManager::HAND_Madame_ClosedComp1(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterMadame)[3]) {
- if (getCharacterCurrentParams(kCharacterMadame)[8] || (getCharacterCurrentParams(kCharacterMadame)[8] = _currentGameSessionTicks + 75,
- _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterMadame)[8] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterMadame)[8] || (getCharacterCurrentParams(kCharacterMadame)[8] = _realTime + 75,
+ _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterMadame)[8] >= _realTime)
break;
getCharacterCurrentParams(kCharacterMadame)[8] = 0x7FFFFFFF;
@@ -927,9 +927,9 @@ void LogicManager::HAND_Madame_InComp(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterMadame)[1]) {
- if (getCharacterCurrentParams(kCharacterMadame)[4] || (getCharacterCurrentParams(kCharacterMadame)[4] = _currentGameSessionTicks + 75,
- _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterMadame)[4] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterMadame)[4] || (getCharacterCurrentParams(kCharacterMadame)[4] = _realTime + 75,
+ _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterMadame)[4] >= _realTime)
break;
getCharacterCurrentParams(kCharacterMadame)[4] = 0x7FFFFFFF;
@@ -1019,9 +1019,9 @@ void LogicManager::HAND_Madame_InComp(HAND_PARAMS) {
setDoor(51, kCharacterMadame, 1, 10, 9);
if (getCharacterCurrentParams(kCharacterMadame)[1]) {
- if (getCharacterCurrentParams(kCharacterMadame)[4] || (getCharacterCurrentParams(kCharacterMadame)[4] = _currentGameSessionTicks + 75,
- _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterMadame)[4] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterMadame)[4] || (getCharacterCurrentParams(kCharacterMadame)[4] = _realTime + 75,
+ _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterMadame)[4] >= _realTime)
break;
getCharacterCurrentParams(kCharacterMadame)[4] = 0x7FFFFFFF;
@@ -1468,9 +1468,9 @@ void LogicManager::HAND_Madame_ClosedComp4(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterMadame)[1]) {
- if (getCharacterCurrentParams(kCharacterMadame)[4] || (getCharacterCurrentParams(kCharacterMadame)[4] = _currentGameSessionTicks + 75,
- _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterMadame)[4] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterMadame)[4] || (getCharacterCurrentParams(kCharacterMadame)[4] = _realTime + 75,
+ _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterMadame)[4] >= _realTime)
break;
getCharacterCurrentParams(kCharacterMadame)[4] = 0x7FFFFFFF;
@@ -1665,9 +1665,9 @@ void LogicManager::HAND_Madame_Hiding(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (getCharacterCurrentParams(kCharacterMadame)[0]) {
- if (getCharacterCurrentParams(kCharacterMadame)[2] || (getCharacterCurrentParams(kCharacterMadame)[2] = _currentGameSessionTicks + 75,
- _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterMadame)[2] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterMadame)[2] || (getCharacterCurrentParams(kCharacterMadame)[2] = _realTime + 75,
+ _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterMadame)[2] >= _realTime)
break;
getCharacterCurrentParams(kCharacterMadame)[2] = 0x7FFFFFFF;
diff --git a/engines/lastexpress/characters/mahmud.cpp b/engines/lastexpress/characters/mahmud.cpp
index 501a6768b90..853db86124f 100644
--- a/engines/lastexpress/characters/mahmud.cpp
+++ b/engines/lastexpress/characters/mahmud.cpp
@@ -169,8 +169,8 @@ void LogicManager::HAND_Mahmud_DoBumpCorrOtis(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (getCharacterCurrentParams(kCharacterMahmud)[6] ||
- (getCharacterCurrentParams(kCharacterMahmud)[6] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMahmud)[4], _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMahmud)[4] != 0)) {
- if (getCharacterCurrentParams(kCharacterMahmud)[6] >= _currentGameSessionTicks)
+ (getCharacterCurrentParams(kCharacterMahmud)[6] = _realTime + getCharacterCurrentParams(kCharacterMahmud)[4], _realTime + getCharacterCurrentParams(kCharacterMahmud)[4] != 0)) {
+ if (getCharacterCurrentParams(kCharacterMahmud)[6] >= _realTime)
break;
getCharacterCurrentParams(kCharacterMahmud)[6] = 0x7FFFFFFF;
@@ -456,7 +456,7 @@ void LogicManager::HAND_Mahmud_CathKnockingHarem(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterMahmud)[2] = 0;
} else {
playDialog(kCharacterClerk, "LIB050", 16, 0);
- if (_gameProgress[kProgressChapter] == 1)
+ if (_globals[kProgressChapter] == 1)
endGame(0, 0, 57, true);
else
endGame(0, 0, 63, true);
@@ -489,7 +489,7 @@ void LogicManager::HAND_Mahmud_CathKnockingHarem(HAND_PARAMS) {
playDialog(kCharacterMahmud, "MAH1170A", -1, 45);
}
- _gameProgress[kProgressFieldC4] = 1;
+ _globals[kProgressFieldC4] = 1;
getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 1;
MahmudCall(&LogicManager::CONS_Mahmud_DoBumpCorrOtis, "614Dd", 4, 30, *getCharacterCurrentParams(kCharacterMahmud));
break;
@@ -800,7 +800,7 @@ void LogicManager::HAND_Mahmud_Vigilant(HAND_PARAMS) {
getCharacterParams(kCharacterMahmud, 8)[0] = 0;
}
- if (!getCharacterCurrentParams(kCharacterMahmud)[1] && _gameProgress[kProgressChapter] == 1) {
+ if (!getCharacterCurrentParams(kCharacterMahmud)[1] && _globals[kProgressChapter] == 1) {
if (_gameTime > 1098000 && !getCharacterCurrentParams(kCharacterMahmud)[5]) {
getCharacterCurrentParams(kCharacterMahmud)[5] = 1;
getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 1;
@@ -817,8 +817,8 @@ void LogicManager::HAND_Mahmud_Vigilant(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterMahmud)[4]) {
- if (getCharacterCurrentParams(kCharacterMahmud)[7] || (getCharacterCurrentParams(kCharacterMahmud)[7] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterMahmud)[7] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterMahmud)[7] || (getCharacterCurrentParams(kCharacterMahmud)[7] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterMahmud)[7] >= _realTime)
break;
getCharacterCurrentParams(kCharacterMahmud)[7] = 0x7FFFFFFF;
@@ -837,7 +837,7 @@ void LogicManager::HAND_Mahmud_Vigilant(HAND_PARAMS) {
case 9:
if (getCharacterCurrentParams(kCharacterMahmud)[4]) {
setDoor(4, kCharacterMahmud, 3, 0, 0);
- if (_gameProgress[kProgressJacket] == 1 || _gameEvents[kEventMahmudWrongDoor] || _gameEvents[kEventMahmudWrongDoorOriginalJacket] || _gameEvents[kEventMahmudWrongDoorDay]) {
+ if (_globals[kProgressJacket] == 1 || _doneNIS[kEventMahmudWrongDoor] || _doneNIS[kEventMahmudWrongDoorOriginalJacket] || _doneNIS[kEventMahmudWrongDoorDay]) {
if (cathHasItem(kItemPassengerList)) {
getCharacter(kCharacterMahmud).callbacks[getCharacter(kCharacterMahmud).currentCall + 8] = 6;
@@ -913,8 +913,8 @@ void LogicManager::HAND_Mahmud_Vigilant(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterMahmud)[4]) {
- if (getCharacterCurrentParams(kCharacterMahmud)[7] || (getCharacterCurrentParams(kCharacterMahmud)[7] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterMahmud)[7] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterMahmud)[7] || (getCharacterCurrentParams(kCharacterMahmud)[7] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterMahmud)[7] >= _realTime)
break;
getCharacterCurrentParams(kCharacterMahmud)[7] = 0x7FFFFFFF;
@@ -935,10 +935,10 @@ void LogicManager::HAND_Mahmud_Vigilant(HAND_PARAMS) {
MahmudCall(&LogicManager::CONS_Mahmud_DoDialog, "MAH1175", 0, 0, 0);
break;
case 5:
- if (_gameProgress[kProgressJacket] == 1 ||
- _gameEvents[kEventMahmudWrongDoor] ||
- _gameEvents[kEventMahmudWrongDoorOriginalJacket] ||
- _gameEvents[kEventMahmudWrongDoorDay]) {
+ if (_globals[kProgressJacket] == 1 ||
+ _doneNIS[kEventMahmudWrongDoor] ||
+ _doneNIS[kEventMahmudWrongDoorOriginalJacket] ||
+ _doneNIS[kEventMahmudWrongDoorDay]) {
setDoor(4, kCharacterMahmud, 1, 14, 0);
} else {
setDoor(4, kCharacterMahmud, 1, 10, 9);
@@ -956,7 +956,7 @@ void LogicManager::HAND_Mahmud_Vigilant(HAND_PARAMS) {
MahmudCall(&LogicManager::CONS_Mahmud_SaveGame, 2, kEventMahmudWrongDoor, 0, 0);
break;
case 10:
- if (_gameProgress[kProgressJacket] == 2) {
+ if (_globals[kProgressJacket] == 2) {
if (isNight()) {
playNIS(kEventMahmudWrongDoor);
} else {
diff --git a/engines/lastexpress/characters/master.cpp b/engines/lastexpress/characters/master.cpp
index a8138eb4680..d16de500b78 100644
--- a/engines/lastexpress/characters/master.cpp
+++ b/engines/lastexpress/characters/master.cpp
@@ -155,7 +155,7 @@ void LogicManager::HAND_Master_Arrive(HAND_PARAMS) {
playDialog(kCharacterMaster, "ARRIVE", 8, 0);
_engine->getSoundManager()->endAmbient();
- _gameProgress[kProgressIsTrainRunning] = 0;
+ _globals[kProgressIsTrainRunning] = 0;
getCharacterParams(kCharacterMaster, 8)[1] = 1;
getCharacterParams(kCharacterMaster, 8)[3] = getCharacterCurrentParams(kCharacterMaster)[3];
@@ -226,7 +226,7 @@ void LogicManager::HAND_Master_Depart(HAND_PARAMS) {
setDoor(26, kCharacterCath, 1, 0, 9);
setDoor(27, kCharacterCath, 1, 0, 9);
- _gameProgress[kProgressIsTrainRunning] = 1;
+ _globals[kProgressIsTrainRunning] = 1;
getCharacterParams(kCharacterMaster, 8)[2] = 1;
@@ -400,24 +400,24 @@ void LogicManager::HAND_Master_FirstDream(HAND_PARAMS) {
playDialog(kCharacterCath, "MUS008", 16, 0);
- _inventorySelectedItemIdx = 0;
+ _activeItem = 0;
fadeToBlack();
while (dialogRunning("MUS008"))
_engine->getSoundManager()->soundThread();
- _gameProgress[kProgressField84] = 1;
+ _globals[kProgressField84] = 1;
bumpCath(kCarLocomotive, 75, 255);
restoreIcons();
_gameTime = 1492200;
- _gameProgress[kProgressField18] = 4;
- _gameTimeTicksDelta = 0;
+ _globals[kProgressField18] = 4;
+ _timeSpeed = 0;
setDoor(63, kCharacterMaster, 0, 0, 9);
send(kCharacterMaster, kCharacterClerk, 191350523, 0);
- _gameProgress[kProgressIsTrainRunning] = 0;
+ _globals[kProgressIsTrainRunning] = 0;
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 1;
MasterCall(&LogicManager::CONS_Master_SaveGame, 1, 0, 0, 0);
@@ -435,12 +435,12 @@ void LogicManager::HAND_Master_FirstDream(HAND_PARAMS) {
playNIS(kEventCathDream);
- _gameTimeTicksDelta = 3;
- _gameProgress[kProgressField18] = 1;
+ _timeSpeed = 3;
+ _globals[kProgressField18] = 1;
setDoor(63, kCharacterCath, 0, 10, 9);
- _gameProgress[kProgressField84] = 0;
+ _globals[kProgressField84] = 0;
bumpCathTylerComp();
@@ -497,15 +497,15 @@ void LogicManager::CONS_Master_StartPart1(CONS_PARAMS) {
void LogicManager::HAND_Master_StartPart1(HAND_PARAMS) {
switch (msg->action) {
case 12:
- _gameProgress[kProgressChapter] = 1;
+ _globals[kProgressChapter] = 1;
_engine->getSoundManager()->startAmbient();
_gameTime = 1061100;
- _gameTimeTicksDelta = 0;
- _gameProgress[kProgressIsTrainRunning] = 1;
- _gameProgress[kProgressPortrait] = 32;
- _gameProgress[kProgressField18] = 1;
+ _timeSpeed = 0;
+ _globals[kProgressIsTrainRunning] = 1;
+ _globals[kProgressPortrait] = 32;
+ _globals[kProgressField18] = 1;
giveCathItem(kItemTelegram);
giveCathItem(kItemArticle);
@@ -522,7 +522,7 @@ void LogicManager::HAND_Master_StartPart1(HAND_PARAMS) {
dropItem(kItem22, 1);
dropItem(kItemPaper, 1);
- _gameProgress[kProgressField7C] = 1;
+ _globals[kProgressField7C] = 1;
setDoor(1, kCharacterCath, 0, 10, 9);
setDoor(9, kCharacterCath, 0, 255, 255);
@@ -583,16 +583,16 @@ void LogicManager::CONS_Master_MovingNight(CONS_PARAMS) {
void LogicManager::HAND_Master_MovingNight(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressIsTrainRunning] && _gameTime < 1458000) {
+ if (_globals[kProgressIsTrainRunning] && _gameTime < 1458000) {
bool skip = false;
if (!getCharacterCurrentParams(kCharacterMaster)[5]) {
- getCharacterCurrentParams(kCharacterMaster)[5] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[1];
+ getCharacterCurrentParams(kCharacterMaster)[5] = _realTime + getCharacterCurrentParams(kCharacterMaster)[1];
if (getCharacterCurrentParams(kCharacterMaster)[5] == 0) {
skip = true;
}
}
- if (skip || getCharacterCurrentParams(kCharacterMaster)[5] < _currentGameSessionTicks) {
+ if (skip || getCharacterCurrentParams(kCharacterMaster)[5] < _realTime) {
if (!skip) {
getCharacterCurrentParams(kCharacterMaster)[5] = 0x7FFFFFFF;
}
@@ -652,7 +652,7 @@ void LogicManager::HAND_Master_MovingNight(HAND_PARAMS) {
if (_gameTime > 1170000 && !getCharacterCurrentParams(kCharacterMaster)[9]) {
getCharacterCurrentParams(kCharacterMaster)[9] = 1;
- _gameProgress[kProgressField18] = 2;
+ _globals[kProgressField18] = 2;
}
if (!getCharacterCurrentParams(kCharacterMaster)[0]) {
@@ -686,7 +686,7 @@ void LogicManager::HAND_Master_MovingNight(HAND_PARAMS) {
if (_gameTime > 1260000 && !getCharacterCurrentParams(kCharacterMaster)[14]) {
getCharacterCurrentParams(kCharacterMaster)[14] = 1;
- _gameTimeTicksDelta = 1;
+ _timeSpeed = 1;
}
if (_gameTime > 1303200 && !getCharacterCurrentParams(kCharacterMaster)[15]) {
getCharacterCurrentParams(kCharacterMaster)[15] = 1;
@@ -829,7 +829,7 @@ void LogicManager::HAND_Master_MovingNight(HAND_PARAMS) {
_engine->getSoundManager()->startAmbient();
getCharacterParams(kCharacterMaster, 8)[2] = 0;
if (getCharacterCurrentParams(kCharacterMaster)[3]) {
- if (_gameProgress[kProgressField24])
+ if (_globals[kProgressField24])
send(kCharacterMaster, kCharacterTrainM, 168187490, 0);
else
send(kCharacterMaster, kCharacterCond1, 224122407, 0);
@@ -840,7 +840,7 @@ void LogicManager::HAND_Master_MovingNight(HAND_PARAMS) {
break;
case 190346110:
- _gameProgress[kProgressField18] = 3;
+ _globals[kProgressField18] = 3;
if (_gameTime >= 1494000) {
CONS_Master_SecondSleep(0, 0, 0, 0);
} else {
@@ -859,7 +859,7 @@ void LogicManager::HAND_Master_MovingNight(HAND_PARAMS) {
case 17:
if (!getCharacterCurrentParams(kCharacterMaster)[2] && checkCathDir(kCarGreenSleeping, 1)) {
_gameTime = 1062000;
- _gameTimeTicksDelta = 3;
+ _timeSpeed = 3;
getCharacterCurrentParams(kCharacterMaster)[2] = 1;
}
break;
@@ -899,7 +899,7 @@ void LogicManager::HAND_Master_MovingNight(HAND_PARAMS) {
if (_gameTime > 1170000 && !getCharacterCurrentParams(kCharacterMaster)[9]) {
getCharacterCurrentParams(kCharacterMaster)[9] = 1;
- _gameProgress[kProgressField18] = 2;
+ _globals[kProgressField18] = 2;
}
if (!getCharacterCurrentParams(kCharacterMaster)[0]) {
@@ -933,7 +933,7 @@ void LogicManager::HAND_Master_MovingNight(HAND_PARAMS) {
if (_gameTime > 1260000 && !getCharacterCurrentParams(kCharacterMaster)[14]) {
getCharacterCurrentParams(kCharacterMaster)[14] = 1;
- _gameTimeTicksDelta = 1;
+ _timeSpeed = 1;
}
if (_gameTime > 1303200 && !getCharacterCurrentParams(kCharacterMaster)[15]) {
getCharacterCurrentParams(kCharacterMaster)[15] = 1;
@@ -1056,7 +1056,7 @@ void LogicManager::HAND_Master_MovingNight(HAND_PARAMS) {
case 8:
if (_gameTime > 1260000 && !getCharacterCurrentParams(kCharacterMaster)[14]) {
getCharacterCurrentParams(kCharacterMaster)[14] = 1;
- _gameTimeTicksDelta = 1;
+ _timeSpeed = 1;
}
if (_gameTime > 1303200 && !getCharacterCurrentParams(kCharacterMaster)[15]) {
@@ -1145,7 +1145,7 @@ void LogicManager::HAND_Master_MovingNight(HAND_PARAMS) {
// fall through
case 17:
if (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] == 17) {
- _gameProgress[kProgressField18] = 1;
+ _globals[kProgressField18] = 1;
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 18;
MasterCall(&LogicManager::CONS_Master_Arrive, "Strasbou", 7, 0, 0);
}
@@ -1162,7 +1162,7 @@ void LogicManager::HAND_Master_MovingNight(HAND_PARAMS) {
// fall through
case 19:
if (getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] == 19) {
- _gameTimeTicksDelta = 1;
+ _timeSpeed = 1;
}
if (_gameTime > 1539000 && !getCharacterCurrentParams(kCharacterMaster)[25]) {
@@ -1224,7 +1224,7 @@ void LogicManager::HAND_Master_SecondSleep(HAND_PARAMS) {
playDialog(kCharacterCath, "MUS008", 16, 0);
- _inventorySelectedItemIdx = 0;
+ _activeItem = 0;
fadeToBlack();
while (dialogRunning("MUS008")) {
@@ -1251,13 +1251,13 @@ void LogicManager::CONS_Master_StartPart2(CONS_PARAMS) {
void LogicManager::HAND_Master_StartPart2(HAND_PARAMS) {
switch (msg->action) {
case 12:
- if (_gameProgress[kProgressChapter] != 2) {
- _gameProgress[kProgressChapter] = 2;
+ if (_globals[kProgressChapter] != 2) {
+ _globals[kProgressChapter] = 2;
makeAllJump(2);
}
_gameTime = 1750500;
- _gameTimeTicksDelta = 5;
+ _timeSpeed = 5;
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 1;
@@ -1292,18 +1292,18 @@ void LogicManager::CONS_Master_InitPart2(CONS_PARAMS) {
void LogicManager::HAND_Master_InitPart2(HAND_PARAMS) {
switch (msg->action) {
case 12:
- _gameProgress[kProgressIsTrainRunning] = 1;
+ _globals[kProgressIsTrainRunning] = 1;
setDoor(26, kCharacterCath, 1, 0, 9);
setDoor(27, kCharacterCath, 1, 0, 9);
- _gameProgress[kProgressField18] = 1;
+ _globals[kProgressField18] = 1;
giveCathItem(kItemGreenJacket);
- _gameInventory[kItemCorpse].location = 0;
- _gameInventory[kItemCorpse].isPresent = 0;
- _gameProgress[kProgressJacket] = 2;
- _gameProgress[kProgressPortrait] = 34;
- _gameProgress[kProgressEventCorpseMovedFromFloor] = 1;
- _gameProgress[kProgressEventFoundCorpse] = 1;
+ _items[kItemCorpse].floating = 0;
+ _items[kItemCorpse].haveIt = 0;
+ _globals[kProgressJacket] = 2;
+ _globals[kProgressPortrait] = 34;
+ _globals[kProgressEventCorpseMovedFromFloor] = 1;
+ _globals[kProgressEventFoundCorpse] = 1;
dropItem(kItemBeetle, 3);
dropItem(kItem3, 1);
@@ -1362,11 +1362,11 @@ void LogicManager::CONS_Master_MovingDay(CONS_PARAMS) {
void LogicManager::HAND_Master_MovingDay(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressIsTrainRunning]) {
+ if (_globals[kProgressIsTrainRunning]) {
if (getCharacterCurrentParams(kCharacterMaster)[1] ||
- (getCharacterCurrentParams(kCharacterMaster)[1] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[0],
- _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[0] != 0)) {
- if (getCharacterCurrentParams(kCharacterMaster)[1] >= _currentGameSessionTicks)
+ (getCharacterCurrentParams(kCharacterMaster)[1] = _realTime + getCharacterCurrentParams(kCharacterMaster)[0],
+ _realTime + getCharacterCurrentParams(kCharacterMaster)[0] != 0)) {
+ if (getCharacterCurrentParams(kCharacterMaster)[1] >= _realTime)
break;
getCharacterCurrentParams(kCharacterMaster)[1] = 0x7FFFFFFF;
@@ -1421,13 +1421,13 @@ void LogicManager::CONS_Master_StartPart3(CONS_PARAMS) {
void LogicManager::HAND_Master_StartPart3(HAND_PARAMS) {
switch (msg->action) {
case 12:
- if (_gameProgress[kProgressChapter] != 3) {
- _gameProgress[kProgressChapter] = 3;
+ if (_globals[kProgressChapter] != 3) {
+ _globals[kProgressChapter] = 3;
makeAllJump(3);
}
_gameTime = 1944000;
- _gameTimeTicksDelta = 5;
+ _timeSpeed = 5;
CONS_Master_InitPart3(0, 0, 0, 0);
break;
@@ -1456,7 +1456,7 @@ void LogicManager::HAND_Master_InitPart3(HAND_PARAMS) {
send(kCharacterMaster, kCharacterTableE, 103798704, 0);
send(kCharacterMaster, kCharacterTableF, 103798704, 0);
- _gameProgress[kProgressIsTrainRunning] = 1;
+ _globals[kProgressIsTrainRunning] = 1;
setDoor(26, kCharacterCath, 1, 0, 9);
setDoor(27, kCharacterCath, 1, 0, 9);
@@ -1504,17 +1504,17 @@ void LogicManager::HAND_Master_MovingAfternoon(HAND_PARAMS) {
switch (msg->action) {
case 0:
{
- if (_gameProgress[kProgressIsTrainRunning]) {
+ if (_globals[kProgressIsTrainRunning]) {
bool skip1 = false;
if (!getCharacterCurrentParams(kCharacterMaster)[3]) {
- getCharacterCurrentParams(kCharacterMaster)[3] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[0];
+ getCharacterCurrentParams(kCharacterMaster)[3] = _realTime + getCharacterCurrentParams(kCharacterMaster)[0];
if (getCharacterCurrentParams(kCharacterMaster)[3] == 0) {
skip1 = true;
}
}
- if (skip1 || getCharacterCurrentParams(kCharacterMaster)[3] < _currentGameSessionTicks) {
+ if (skip1 || getCharacterCurrentParams(kCharacterMaster)[3] < _realTime) {
if (!skip1) {
getCharacterCurrentParams(kCharacterMaster)[3] = 0x7FFFFFFF;
}
@@ -1547,13 +1547,13 @@ void LogicManager::HAND_Master_MovingAfternoon(HAND_PARAMS) {
bool skip2 = false;
if (!getCharacterCurrentParams(kCharacterMaster)[4]) {
- getCharacterCurrentParams(kCharacterMaster)[4] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[1];
+ getCharacterCurrentParams(kCharacterMaster)[4] = _realTime + getCharacterCurrentParams(kCharacterMaster)[1];
if (getCharacterCurrentParams(kCharacterMaster)[4] == 0) {
skip2 = true;
}
}
- if (skip2 || getCharacterCurrentParams(kCharacterMaster)[4] < _currentGameSessionTicks) {
+ if (skip2 || getCharacterCurrentParams(kCharacterMaster)[4] < _realTime) {
if (!skip2) {
getCharacterCurrentParams(kCharacterMaster)[4] = 0x7FFFFFFF;
}
@@ -1630,7 +1630,7 @@ void LogicManager::HAND_Master_MovingAfternoon(HAND_PARAMS) {
if (_gameTime > 2187000 && !getCharacterCurrentParams(kCharacterMaster)[13]) {
getCharacterCurrentParams(kCharacterMaster)[13] = 1;
- _gameTimeTicksDelta = 5;
+ _timeSpeed = 5;
}
if (_gameTime > 2268000 && !getCharacterCurrentParams(kCharacterMaster)[14]) {
@@ -1766,7 +1766,7 @@ void LogicManager::HAND_Master_MovingAfternoon(HAND_PARAMS) {
case 8:
if (_gameTime > 2187000 && !getCharacterCurrentParams(kCharacterMaster)[13]) {
getCharacterCurrentParams(kCharacterMaster)[13] = 1;
- _gameTimeTicksDelta = 5;
+ _timeSpeed = 5;
}
if (_gameTime > 2268000 && !getCharacterCurrentParams(kCharacterMaster)[14]) {
@@ -1803,8 +1803,8 @@ void LogicManager::HAND_Master_EndVienna(HAND_PARAMS) {
switch (msg->action) {
case 12:
getCharacter(kCharacterCath).characterPosition.car = kCarLocomotive;
- if (_gameEvents[kEventAugustBringBriefcase]) {
- if (_gameInventory[kItemFirebird].location == 5) {
+ 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]) {
@@ -1825,10 +1825,10 @@ void LogicManager::HAND_Master_EndVienna(HAND_PARAMS) {
case 1:
playNIS(kEventViennaAugustUnloadGuns);
- if (_gameEvents[kEventConcertLeaveWithBriefcase]) {
+ if (_doneNIS[kEventConcertLeaveWithBriefcase]) {
endGame(1, 2187000, 0, true);
} else {
- if (!_gameEvents[kEventCathJumpDownCeiling]) {
+ if (!_doneNIS[kEventCathJumpDownCeiling]) {
endGame(1, 2155500, 0, true);
} else {
endGame(2, 253, 0, true);
@@ -1839,20 +1839,20 @@ void LogicManager::HAND_Master_EndVienna(HAND_PARAMS) {
case 2:
playNIS(kEventViennaKronosFirebird);
- if (_gameEvents[kEventKronosBringEggCeiling]) {
+ if (_doneNIS[kEventKronosBringEggCeiling]) {
endGame(3, 58, 60, true);
- } else if (_gameEvents[kEventKronosBringEgg]) {
+ } else if (_doneNIS[kEventKronosBringEgg]) {
endGame(1, 2155500, 60, true);
} else {
- if (_gameProgress[kProgressFieldC0]) {
- if (_gameEvents[kEventKronosReturnBriefcase]) {
+ if (_globals[kProgressFieldC0]) {
+ if (_doneNIS[kEventKronosReturnBriefcase]) {
endGame(1, 61, 61, true);
return;
} else {
endGame(1, 2155500, 59, true);
}
} else {
- if (_gameEvents[kEventKronosReturnBriefcase]) {
+ if (_doneNIS[kEventKronosReturnBriefcase]) {
endGame(2, 61, 59, true);
return;
} else {
@@ -1893,13 +1893,13 @@ void LogicManager::CONS_Master_StartPart4(CONS_PARAMS) {
void LogicManager::HAND_Master_StartPart4(HAND_PARAMS) {
switch (msg->action) {
case 12:
- if (_gameProgress[kProgressChapter] != 4) {
- _gameProgress[kProgressChapter] = 4;
+ if (_globals[kProgressChapter] != 4) {
+ _globals[kProgressChapter] = 4;
makeAllJump(4);
}
_gameTime = 2353500;
- _gameTimeTicksDelta = 5;
+ _timeSpeed = 5;
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 1;
@@ -1937,7 +1937,7 @@ void LogicManager::HAND_Master_InitPart4(HAND_PARAMS) {
_engine->getSoundManager()->endAmbient();
_engine->getSoundManager()->startAmbient();
- _gameProgress[kProgressIsTrainRunning] = 1;
+ _globals[kProgressIsTrainRunning] = 1;
setDoor(26, kCharacterCath, 1, 0, 9);
setDoor(27, kCharacterCath, 1, 0, 9);
@@ -1953,7 +1953,7 @@ void LogicManager::HAND_Master_InitPart4(HAND_PARAMS) {
takeItem(kItem3);
dropItem(kItemBomb, 1);
- if (_gameInventory[kItemBeetle].location == 3)
+ if (_items[kItemBeetle].floating == 3)
takeItem(kItemBeetle);
setModel(25, 2);
@@ -1997,10 +1997,10 @@ void LogicManager::HAND_Master_MovingSecondNight(HAND_PARAMS) {
case 0:
{
bool skip = false;
- if (_gameProgress[kProgressIsTrainRunning]) {
+ if (_globals[kProgressIsTrainRunning]) {
if (getCharacterCurrentParams(kCharacterMaster)[5] ||
- (getCharacterCurrentParams(kCharacterMaster)[5] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[3], _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[3] != 0)) {
- if (getCharacterCurrentParams(kCharacterMaster)[5] >= _currentGameSessionTicks) {
+ (getCharacterCurrentParams(kCharacterMaster)[5] = _realTime + getCharacterCurrentParams(kCharacterMaster)[3], _realTime + getCharacterCurrentParams(kCharacterMaster)[3] != 0)) {
+ if (getCharacterCurrentParams(kCharacterMaster)[5] >= _realTime) {
skip = true;
}
@@ -2036,8 +2036,8 @@ void LogicManager::HAND_Master_MovingSecondNight(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterMaster)[6] ||
- (getCharacterCurrentParams(kCharacterMaster)[6] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[4], _currentGameSessionTicks + getCharacterCurrentParams(kCharacterMaster)[4] != 0)) {
- if (getCharacterCurrentParams(kCharacterMaster)[6] >= _currentGameSessionTicks) {
+ (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;
@@ -2054,7 +2054,7 @@ void LogicManager::HAND_Master_MovingSecondNight(HAND_PARAMS) {
if (getModel(1) == 1 && _gameTime > 2403000 && !getCharacterCurrentParams(kCharacterMaster)[9]) {
getCharacterCurrentParams(kCharacterMaster)[9] = 1;
- _gameProgress[kProgressField18] = 2;
+ _globals[kProgressField18] = 2;
}
if (!getCharacterCurrentParams(kCharacterMaster)[0]) {
@@ -2075,14 +2075,14 @@ void LogicManager::HAND_Master_MovingSecondNight(HAND_PARAMS) {
if (_gameTime > 2470500 && !getCharacterCurrentParams(kCharacterMaster)[12]) {
getCharacterCurrentParams(kCharacterMaster)[12] = 1;
- if (_gameProgress[kProgressField18] == 2)
- _gameTimeTicksDelta = 1;
+ if (_globals[kProgressField18] == 2)
+ _timeSpeed = 1;
}
if (_gameTime > 2506500 && !getCharacterCurrentParams(kCharacterMaster)[13]) {
getCharacterCurrentParams(kCharacterMaster)[13] = 1;
- if (_gameProgress[kProgressField18] == 2)
- _gameProgress[kProgressField18] = 1;
+ if (_globals[kProgressField18] == 2)
+ _globals[kProgressField18] = 1;
}
if (_gameTime > 2520000 && !getCharacterCurrentParams(kCharacterMaster)[14]) {
@@ -2128,7 +2128,7 @@ void LogicManager::HAND_Master_MovingSecondNight(HAND_PARAMS) {
if (getModel(1) == 1 && _gameTime > 2403000 && !getCharacterCurrentParams(kCharacterMaster)[9]) {
getCharacterCurrentParams(kCharacterMaster)[9] = 1;
- _gameProgress[kProgressField18] = 2;
+ _globals[kProgressField18] = 2;
}
if (!getCharacterCurrentParams(kCharacterMaster)[0]) {
@@ -2149,14 +2149,14 @@ void LogicManager::HAND_Master_MovingSecondNight(HAND_PARAMS) {
if (_gameTime > 2470500 && !getCharacterCurrentParams(kCharacterMaster)[12]) {
getCharacterCurrentParams(kCharacterMaster)[12] = 1;
- if (_gameProgress[kProgressField18] == 2)
- _gameTimeTicksDelta = 1;
+ if (_globals[kProgressField18] == 2)
+ _timeSpeed = 1;
}
if (_gameTime > 2506500 && !getCharacterCurrentParams(kCharacterMaster)[13]) {
getCharacterCurrentParams(kCharacterMaster)[13] = 1;
- if (_gameProgress[kProgressField18] == 2)
- _gameProgress[kProgressField18] = 1;
+ if (_globals[kProgressField18] == 2)
+ _globals[kProgressField18] = 1;
}
if (_gameTime > 2520000 && !getCharacterCurrentParams(kCharacterMaster)[14]) {
@@ -2246,20 +2246,20 @@ void LogicManager::HAND_Master_MovingSecondNight(HAND_PARAMS) {
case 2:
if (getModel(1) == 1 && _gameTime > 2403000 && !getCharacterCurrentParams(kCharacterMaster)[9]) {
getCharacterCurrentParams(kCharacterMaster)[9] = 1;
- _gameProgress[kProgressField18] = 2;
+ _globals[kProgressField18] = 2;
}
if (getCharacterCurrentParams(kCharacterMaster)[0]) {
if (_gameTime > 2470500 && !getCharacterCurrentParams(kCharacterMaster)[12]) {
getCharacterCurrentParams(kCharacterMaster)[12] = 1;
- if (_gameProgress[kProgressField18] == 2)
- _gameTimeTicksDelta = 1;
+ if (_globals[kProgressField18] == 2)
+ _timeSpeed = 1;
}
if (_gameTime > 2506500 && !getCharacterCurrentParams(kCharacterMaster)[13]) {
getCharacterCurrentParams(kCharacterMaster)[13] = 1;
- if (_gameProgress[kProgressField18] == 2)
- _gameProgress[kProgressField18] = 1;
+ if (_globals[kProgressField18] == 2)
+ _globals[kProgressField18] = 1;
}
if (_gameTime > 2520000 && !getCharacterCurrentParams(kCharacterMaster)[14]) {
@@ -2293,14 +2293,14 @@ void LogicManager::HAND_Master_MovingSecondNight(HAND_PARAMS) {
case 4:
if (_gameTime > 2470500 && !getCharacterCurrentParams(kCharacterMaster)[12]) {
getCharacterCurrentParams(kCharacterMaster)[12] = 1;
- if (_gameProgress[kProgressField18] == 2)
- _gameTimeTicksDelta = 1;
+ if (_globals[kProgressField18] == 2)
+ _timeSpeed = 1;
}
if (_gameTime > 2506500 && !getCharacterCurrentParams(kCharacterMaster)[13]) {
getCharacterCurrentParams(kCharacterMaster)[13] = 1;
- if (_gameProgress[kProgressField18] == 2)
- _gameProgress[kProgressField18] = 1;
+ if (_globals[kProgressField18] == 2)
+ _globals[kProgressField18] = 1;
}
if (_gameTime > 2520000 && !getCharacterCurrentParams(kCharacterMaster)[14]) {
@@ -2323,10 +2323,10 @@ void LogicManager::HAND_Master_MovingSecondNight(HAND_PARAMS) {
_engine->getSoundManager()->endAmbient();
playNIS(kEventTylerCastleDream);
_engine->getSoundManager()->startAmbient();
- _gameProgress[kProgressField18] = 1;
+ _globals[kProgressField18] = 1;
bumpCathTylerComp();
send(kCharacterMaster, kCharacterTatiana, 169360385, 0);
- _gameTimeTicksDelta = 1;
+ _timeSpeed = 1;
_gameTime = 2511900;
dropItem(kItem2, 1);
takeItem(kItem22);
@@ -2355,7 +2355,7 @@ void LogicManager::HAND_Master_MovingSecondNight(HAND_PARAMS) {
send(kCharacterMaster, kCharacterAnna, 191001984, 0);
send(kCharacterMaster, kCharacterCond2, 191001984, 0);
takeItem(kItem2);
- _gameInventory[kItem2].location = 0;
+ _items[kItem2].floating = 0;
getCharacterCurrentParams(kCharacterMaster)[1] = 1;
bumpCath(kCarRedSleeping, 2, 255);
break;
@@ -2376,7 +2376,7 @@ void LogicManager::HAND_Master_MovingSecondNight(HAND_PARAMS) {
send(kCharacterMaster, kCharacterTatiana, 169360385, 0);
send(kCharacterMaster, kCharacterCond2, 201431954, 0);
send(kCharacterMaster, kCharacterTrainM, 201431954, 0);
- _gameTimeTicksDelta = 1;
+ _timeSpeed = 1;
_gameTime = 2511900;
dropItem(kItem2, 1);
getCharacter(kCharacterMaster).characterPosition.car = 4;
@@ -2396,7 +2396,7 @@ void LogicManager::HAND_Master_MovingSecondNight(HAND_PARAMS) {
startSeqOtis(kCharacterMaster, "BOMB");
break;
case 190346110:
- _gameProgress[kProgressField18] = 3;
+ _globals[kProgressField18] = 3;
getCharacterCurrentParams(kCharacterMaster)[0] = 1;
if (getCharacterParams(kCharacterMaster, 8)[1] || getCharacterParams(kCharacterMaster, 8)[2]) {
endDialog(kCharacterMaster);
@@ -2406,7 +2406,7 @@ void LogicManager::HAND_Master_MovingSecondNight(HAND_PARAMS) {
fadeToBlack();
playDialog(0, "MUS008", 16, 0);
- _inventorySelectedItemIdx = 0;
+ _activeItem = 0;
fadeToBlack();
while (dialogRunning("MUS008"))
@@ -2462,7 +2462,7 @@ void LogicManager::HAND_Master_MovingSecondNight(HAND_PARAMS) {
endGraphics(kCharacterMaster);
takeCathItem(kItemTelegram);
- _gameTimeTicksDelta = 5;
+ _timeSpeed = 5;
getCharacter(kCharacterMaster).callbacks[getCharacter(kCharacterMaster).currentCall + 8] = 10;
MasterCall(&LogicManager::CONS_Master_SaveGame, 2, kEventDefuseBomb, 0, 0);
break;
@@ -2495,13 +2495,13 @@ void LogicManager::CONS_Master_StartPart5(CONS_PARAMS) {
void LogicManager::HAND_Master_StartPart5(HAND_PARAMS) {
switch (msg->action) {
case 12:
- if (_gameProgress[kProgressChapter] != 5) {
- _gameProgress[kProgressChapter] = 5;
+ if (_globals[kProgressChapter] != 5) {
+ _globals[kProgressChapter] = 5;
makeAllJump(5);
}
_gameTime = 2844000;
- _gameTimeTicksDelta = 2;
+ _timeSpeed = 2;
CONS_Master_InitPart5(0, 0, 0, 0);
break;
@@ -2530,7 +2530,7 @@ void LogicManager::HAND_Master_InitPart5(HAND_PARAMS) {
endGraphics(kCharacterTableE);
endGraphics(kCharacterTableF);
- _gameProgress[kProgressIsTrainRunning] = 1;
+ _globals[kProgressIsTrainRunning] = 1;
setDoor(26, kCharacterCath, 1, 0, 9);
setDoor(27, kCharacterCath, 1, 0, 9);
@@ -2565,10 +2565,10 @@ void LogicManager::HAND_Master_InitPart5(HAND_PARAMS) {
setDoor(26, kCharacterCath, 0, 10, 9);
setDoor(27, kCharacterCath, 0, 10, 9);
- _gameProgress[kProgressField18] = 1;
- _inventorySelectedItemIdx = 0;
- _gameProgress[kProgressField84] = 1;
- _gameProgress[kProgressPortrait] = 36;
+ _globals[kProgressField18] = 1;
+ _activeItem = 0;
+ _globals[kProgressField84] = 1;
+ _globals[kProgressPortrait] = 36;
takeCathItem(kItemKey);
takeCathItem(kItemBomb);
@@ -2630,7 +2630,7 @@ void LogicManager::HAND_Master_MovingPart5(HAND_PARAMS) {
case 0:
if (_gameTime > 2907000 && !getCharacterCurrentParams(kCharacterMaster)[1]) {
getCharacterCurrentParams(kCharacterMaster)[1] = 1;
- if (!_gameProgress[kProgressIsDayTime]) {
+ if (!_globals[kProgressIsDayTime]) {
playDialog(kCharacterMaster, "ARRIVE", 8, 0);
_engine->getSoundManager()->endAmbient();
}
@@ -2638,7 +2638,7 @@ void LogicManager::HAND_Master_MovingPart5(HAND_PARAMS) {
if (_gameTime > 2943000 && !getCharacterCurrentParams(kCharacterMaster)[2]) {
getCharacterCurrentParams(kCharacterMaster)[2] = 1;
- if (!_gameEvents[kEventLocomotiveMilosDay] && !_gameEvents[kEventLocomotiveMilosNight]) {
+ if (!_doneNIS[kEventLocomotiveMilosDay] && !_doneNIS[kEventLocomotiveMilosNight]) {
playDialog(kCharacterMaster, "ARRIVE", 8, 0);
_engine->getSoundManager()->endAmbient();
}
@@ -2665,7 +2665,7 @@ void LogicManager::HAND_Master_MovingPart5(HAND_PARAMS) {
break;
case 135800432:
- _gameProgress[kProgressIsDayTime] = 1;
+ _globals[kProgressIsDayTime] = 1;
_gameTime = 2916000;
if (whoRunningDialog(kCharacterMaster))
diff --git a/engines/lastexpress/characters/max.cpp b/engines/lastexpress/characters/max.cpp
index 122c00f8286..4cdba076646 100644
--- a/engines/lastexpress/characters/max.cpp
+++ b/engines/lastexpress/characters/max.cpp
@@ -447,9 +447,9 @@ void LogicManager::HAND_Max_Escaped(HAND_PARAMS) {
if (!whoOnScreen(kCharacterMax) || !getCharacterCurrentParams(kCharacterMax)[1]) {
getCharacterCurrentParams(kCharacterMax)[1] = _gameTime;
if (!_gameTime) {
- if (_gameProgress[kProgressChapter] == 3) {
+ if (_globals[kProgressChapter] == 3) {
CONS_Max_LetMeIn3(0, 0, 0, 0);
- } else if (_gameProgress[kProgressChapter] == 4) {
+ } else if (_globals[kProgressChapter] == 4) {
CONS_Max_LetMeIn4(0, 0, 0, 0);
}
}
@@ -460,9 +460,9 @@ void LogicManager::HAND_Max_Escaped(HAND_PARAMS) {
}
getCharacterCurrentParams(kCharacterMax)[1] = 0x7FFFFFFF;
- if (_gameProgress[kProgressChapter] == 3) {
+ if (_globals[kProgressChapter] == 3) {
CONS_Max_LetMeIn3(0, 0, 0, 0);
- } else if (_gameProgress[kProgressChapter] == 4) {
+ } else if (_globals[kProgressChapter] == 4) {
CONS_Max_LetMeIn4(0, 0, 0, 0);
}
}
@@ -640,8 +640,8 @@ void LogicManager::HAND_Max_InCageMad(HAND_PARAMS) {
playDialog(kCharacterMax, "Max1122", -1, 0);
break;
case 9:
- if (_gameEvents[kEventCathMaxCage]) {
- if (!_gameEvents[kEventCathMaxFree]) {
+ if (_doneNIS[kEventCathMaxCage]) {
+ if (!_doneNIS[kEventCathMaxFree]) {
getCharacter(kCharacterMax).callbacks[getCharacter(kCharacterMax).currentCall + 8] = 2;
MaxCall(&LogicManager::CONS_Max_SaveGame, 2, kEventCathMaxFree, 0, 0);
}
diff --git a/engines/lastexpress/characters/milos.cpp b/engines/lastexpress/characters/milos.cpp
index 7ab065a304d..69f2775b6de 100644
--- a/engines/lastexpress/characters/milos.cpp
+++ b/engines/lastexpress/characters/milos.cpp
@@ -360,7 +360,7 @@ void LogicManager::HAND_Milos_DoWalk(HAND_PARAMS) {
break;
case 5:
case 6:
- if (_gameEvents[kEventMilosTylerCompartmentDefeat]) {
+ if (_doneNIS[kEventMilosTylerCompartmentDefeat]) {
switch (rnd(3)) {
case 0:
playDialog(kCharacterCath, "CAT1014", -1, 0);
@@ -415,8 +415,8 @@ void LogicManager::HAND_Milos_CompLogic(HAND_PARAMS) {
}
if (!skip1 && !getCharacterCurrentParams(kCharacterMilos)[7]) {
- getCharacterCurrentParams(kCharacterMilos)[7] = _currentGameSessionTicks + 75;
- if (_currentGameSessionTicks == -75) {
+ getCharacterCurrentParams(kCharacterMilos)[7] = _realTime + 75;
+ if (_realTime == -75) {
getCharacterCurrentParams(kCharacterMilos)[1] = 0;
getCharacterCurrentParams(kCharacterMilos)[2] = 1;
setDoor(38, kCharacterMilos, 1, 0, 0);
@@ -425,7 +425,7 @@ void LogicManager::HAND_Milos_CompLogic(HAND_PARAMS) {
}
}
- if (!skip1 && getCharacterCurrentParams(kCharacterMilos)[7] < _currentGameSessionTicks) {
+ if (!skip1 && getCharacterCurrentParams(kCharacterMilos)[7] < _realTime) {
getCharacterCurrentParams(kCharacterMilos)[7] = 0x7FFFFFFF;
getCharacterCurrentParams(kCharacterMilos)[1] = 0;
getCharacterCurrentParams(kCharacterMilos)[2] = 1;
@@ -433,7 +433,7 @@ void LogicManager::HAND_Milos_CompLogic(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterMilos)[7] = 0;
}
- if (_gameProgress[kProgressChapter] == 1 && !getCharacterCurrentParams(kCharacterMilos)[4]) {
+ if (_globals[kProgressChapter] == 1 && !getCharacterCurrentParams(kCharacterMilos)[4]) {
bool skip2 = false;
if (getCharacterCurrentParams(kCharacterMilos)[5]) {
@@ -453,9 +453,9 @@ void LogicManager::HAND_Milos_CompLogic(HAND_PARAMS) {
}
}
- if (!_gameProgress[kProgressFieldCC]) {
- if (getCharacterParams(kCharacterMilos, 8)[2] && !_gameProgress[kProgressField14] && !getCharacterCurrentParams(kCharacterMilos)[5]) {
- _gameProgress[kProgressField14] = 14;
+ if (!_globals[kProgressFieldCC]) {
+ if (getCharacterParams(kCharacterMilos, 8)[2] && !_globals[kProgressField14] && !getCharacterCurrentParams(kCharacterMilos)[5]) {
+ _globals[kProgressField14] = 14;
send(kCharacterMilos, kCharacterVesna, 190412928, 0);
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 1;
MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "609Cg", 38, 0, 0);
@@ -473,7 +473,7 @@ void LogicManager::HAND_Milos_CompLogic(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterMilos)[9] = _gameTime + 150;
if (_gameTime == -150) {
if (nearChar(kCharacterCath, kCharacterMilos, 2000))
- _gameProgress[kProgressField98] = 1;
+ _globals[kProgressField98] = 1;
setDoor(38, kCharacterMilos, 3, 0, 0);
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 6;
@@ -488,7 +488,7 @@ void LogicManager::HAND_Milos_CompLogic(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterMilos)[9] = 0x7FFFFFFF;
if (nearChar(kCharacterCath, kCharacterMilos, 2000))
- _gameProgress[kProgressField98] = 1;
+ _globals[kProgressField98] = 1;
setDoor(38, kCharacterMilos, 3, 0, 0);
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 6;
@@ -550,8 +550,8 @@ void LogicManager::HAND_Milos_CompLogic(HAND_PARAMS) {
MilosCall(&LogicManager::CONS_Milos_KnockTyler, 0, 0, 0, 0);
break;
case 3:
- if (_gameProgress[kProgressField14] == 14)
- _gameProgress[kProgressField14] = 0;
+ if (_globals[kProgressField14] == 14)
+ _globals[kProgressField14] = 0;
getCharacterCurrentParams(kCharacterMilos)[5] = 1;
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 4;
@@ -702,7 +702,7 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressField14] == 29 || _gameProgress[kProgressField14] == 3) {
+ if (_globals[kProgressField14] == 29 || _globals[kProgressField14] == 3) {
if (getCharacterCurrentParams(kCharacterMilos)[1]) {
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 1;
MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "609Ca", 1, 0, 0);
@@ -715,10 +715,10 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
}
} else if (getCharacterCurrentParams(kCharacterMilos)[0]) {
- if (!getCharacterCurrentParams(kCharacterMilos)[8] && (getCharacterCurrentParams(kCharacterMilos)[8] = _currentGameSessionTicks + 45, _currentGameSessionTicks == -45) || getCharacterCurrentParams(kCharacterMilos)[8] < _currentGameSessionTicks) {
+ if (!getCharacterCurrentParams(kCharacterMilos)[8] && (getCharacterCurrentParams(kCharacterMilos)[8] = _realTime + 45, _realTime == -45) || getCharacterCurrentParams(kCharacterMilos)[8] < _realTime) {
if (checkDoor(1) == 1) {
- if (getCharacterCurrentParams(kCharacterMilos)[9] || (getCharacterCurrentParams(kCharacterMilos)[9] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterMilos)[9] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterMilos)[9] || (getCharacterCurrentParams(kCharacterMilos)[9] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterMilos)[9] >= _realTime)
break;
getCharacterCurrentParams(kCharacterMilos)[9] = 0x7FFFFFFF;
}
@@ -759,7 +759,7 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterMilos)[9] = 0;
break;
}
- } else if (!_gameProgress[kProgressEventCorpseMovedFromFloor] || _gameProgress[kProgressJacket] == 1) {
+ } else if (!_globals[kProgressEventCorpseMovedFromFloor] || _globals[kProgressJacket] == 1) {
setDoor(9, kCharacterCath, 0, 255, 255);
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 2;
MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventMilosCorpseFloor, 0, 0);
@@ -773,15 +773,15 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventMilosTylerCompartmentVisit, 0, 0);
}
}
- } else if (!getCharacterCurrentParams(kCharacterMilos)[10] && (getCharacterCurrentParams(kCharacterMilos)[10] = _currentGameSessionTicks + 75, _currentGameSessionTicks == -75) || getCharacterCurrentParams(kCharacterMilos)[10] < _currentGameSessionTicks) {
+ } else if (!getCharacterCurrentParams(kCharacterMilos)[10] && (getCharacterCurrentParams(kCharacterMilos)[10] = _realTime + 75, _realTime == -75) || getCharacterCurrentParams(kCharacterMilos)[10] < _realTime) {
if (!getCharacterCurrentParams(kCharacterMilos)[3]) {
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 12;
MilosCall(&LogicManager::CONS_Milos_DoDialog, "MIL1030C", 0, 0, 0);
break;
}
- if (getCharacterCurrentParams(kCharacterMilos)[11] || (getCharacterCurrentParams(kCharacterMilos)[11] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterMilos)[11] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterMilos)[11] || (getCharacterCurrentParams(kCharacterMilos)[11] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterMilos)[11] >= _realTime)
break;
getCharacterCurrentParams(kCharacterMilos)[11] = 0x7FFFFFFF;
@@ -789,7 +789,7 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
softReleaseAtDoor(kCharacterMilos, 1);
- if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
+ if (_globals[kProgressEventCorpseMovedFromFloor]) {
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 13;
MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "609Ba", 1, 0, 0);
} else if (checkLoc(kCharacterCath, kCarGreenSleeping)) {
@@ -817,7 +817,7 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
break;
case 9:
- if (!_gameProgress[kProgressEventCorpseMovedFromFloor] || _gameProgress[kProgressJacket] == 1) {
+ if (!_globals[kProgressEventCorpseMovedFromFloor] || _globals[kProgressJacket] == 1) {
setDoor(9, kCharacterCath, 0, 255, 255);
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 16;
MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventMilosCorpseFloor, 0, 0);
@@ -870,7 +870,7 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
case 2:
playDialog(0, "LIB014", -1, 0);
playNIS(kEventMilosCorpseFloor);
- endGame(0, 1, _gameProgress[kProgressEventCorpseMovedFromFloor] == kProgressField0 ? 57 : 55, 1);
+ endGame(0, 1, _globals[kProgressEventCorpseMovedFromFloor] == kProgressField0 ? 57 : 55, 1);
break;
case 3:
setDoor(1, kCharacterCath, 0, 10, 9);
@@ -890,7 +890,7 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
}
_gameTime += 1800;
- _gameProgress[kProgressFieldCC] = 1;
+ _globals[kProgressFieldCC] = 1;
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 5;
MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventMilosTylerCompartmentDefeat, 0, 0);
break;
@@ -926,15 +926,15 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
case 12:
getCharacterCurrentParams(kCharacterMilos)[3] = 1;
- if (getCharacterCurrentParams(kCharacterMilos)[11] || (getCharacterCurrentParams(kCharacterMilos)[11] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterMilos)[11] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterMilos)[11] || (getCharacterCurrentParams(kCharacterMilos)[11] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterMilos)[11] >= _realTime)
break;
getCharacterCurrentParams(kCharacterMilos)[11] = 0x7FFFFFFF;
}
softReleaseAtDoor(kCharacterMilos, 1);
- if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
+ if (_globals[kProgressEventCorpseMovedFromFloor]) {
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 13;
MilosCall(&LogicManager::CONS_Milos_DoCorrOtis, "609Ba", 1, 0, 0);
} else if (checkLoc(kCharacterCath, kCarGreenSleeping)) {
@@ -971,7 +971,7 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
}
playNIS(kEventMilosCorpseFloor);
- endGame(0, 1, _gameProgress[kProgressEventCorpseMovedFromFloor] == 0 ? 57 : 55, true);
+ endGame(0, 1, _globals[kProgressEventCorpseMovedFromFloor] == 0 ? 57 : 55, true);
break;
case 17:
if (checkDoor(1) != 1) {
@@ -993,7 +993,7 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
endGame(0, 0, 0, fightOutcome == 1);
} else {
_gameTime += 1800;
- _gameProgress[kProgressFieldCC] = 1;
+ _globals[kProgressFieldCC] = 1;
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 19;
MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventMilosTylerCompartmentDefeat, 0, 0);
}
@@ -1044,13 +1044,13 @@ void LogicManager::HAND_Milos_AtDinner(HAND_PARAMS) {
}
if (checkCathDir(kCarRestaurant, 61) && !getCharacterCurrentParams(kCharacterMilos)[0]) {
- if (getCharacterCurrentParams(kCharacterMilos)[3] || (getCharacterCurrentParams(kCharacterMilos)[3] = _currentGameSessionTicks + 45,
- _currentGameSessionTicks != -45)) {
- if (getCharacterCurrentParams(kCharacterMilos)[3] >= _currentGameSessionTicks) {
+ if (getCharacterCurrentParams(kCharacterMilos)[3] || (getCharacterCurrentParams(kCharacterMilos)[3] = _realTime + 45,
+ _realTime != -45)) {
+ if (getCharacterCurrentParams(kCharacterMilos)[3] >= _realTime) {
if (checkCathDir(kCarRestaurant, 70) && !getCharacterCurrentParams(kCharacterMilos)[1]) {
- if (getCharacterCurrentParams(kCharacterMilos)[4] || (getCharacterCurrentParams(kCharacterMilos)[4] = _currentGameSessionTicks + 45,
- _currentGameSessionTicks != -45)) {
- if (getCharacterCurrentParams(kCharacterMilos)[4] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterMilos)[4] || (getCharacterCurrentParams(kCharacterMilos)[4] = _realTime + 45,
+ _realTime != -45)) {
+ if (getCharacterCurrentParams(kCharacterMilos)[4] >= _realTime)
break;
getCharacterCurrentParams(kCharacterMilos)[4] = 0x7FFFFFFF;
@@ -1071,9 +1071,9 @@ void LogicManager::HAND_Milos_AtDinner(HAND_PARAMS) {
}
if (checkCathDir(kCarRestaurant, 70) && !getCharacterCurrentParams(kCharacterMilos)[1]) {
- if (getCharacterCurrentParams(kCharacterMilos)[4] || (getCharacterCurrentParams(kCharacterMilos)[4] = _currentGameSessionTicks + 45,
- _currentGameSessionTicks != -45)) {
- if (getCharacterCurrentParams(kCharacterMilos)[4] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterMilos)[4] || (getCharacterCurrentParams(kCharacterMilos)[4] = _realTime + 45,
+ _realTime != -45)) {
+ if (getCharacterCurrentParams(kCharacterMilos)[4] >= _realTime)
break;
getCharacterCurrentParams(kCharacterMilos)[4] = 0x7FFFFFFF;
@@ -1101,9 +1101,9 @@ void LogicManager::HAND_Milos_AtDinner(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterMilos)[0] = 1;
if (checkCathDir(kCarRestaurant, 70) && !getCharacterCurrentParams(kCharacterMilos)[1]) {
- if (getCharacterCurrentParams(kCharacterMilos)[4] || (getCharacterCurrentParams(kCharacterMilos)[4] = _currentGameSessionTicks + 45,
- _currentGameSessionTicks != -45)) {
- if (getCharacterCurrentParams(kCharacterMilos)[4] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterMilos)[4] || (getCharacterCurrentParams(kCharacterMilos)[4] = _realTime + 45,
+ _realTime != -45)) {
+ if (getCharacterCurrentParams(kCharacterMilos)[4] >= _realTime)
break;
getCharacterCurrentParams(kCharacterMilos)[4] = 0x7FFFFFFF;
@@ -1358,7 +1358,7 @@ void LogicManager::HAND_Milos_InPart2(HAND_PARAMS) {
setDoor(38, kCharacterMilos, 3, 10, 9);
break;
case 17:
- if (!_gameEvents[kEventMilosCompartmentVisitAugust] && !checkLoc(kCharacterCath, kCarRedSleeping) && getCharacterCurrentParams(kCharacterMilos)[0]) {
+ if (!_doneNIS[kEventMilosCompartmentVisitAugust] && !checkLoc(kCharacterCath, kCarRedSleeping) && getCharacterCurrentParams(kCharacterMilos)[0]) {
CONS_Milos_OnRearPlat(0, 0, 0, 0);
}
@@ -1402,7 +1402,7 @@ void LogicManager::CONS_Milos_StartPart3(CONS_PARAMS) {
void LogicManager::HAND_Milos_StartPart3(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameEvents[kEventMilosCompartmentVisitAugust]) {
+ if (_doneNIS[kEventMilosCompartmentVisitAugust]) {
CONS_Milos_Unfriendly(0, 0, 0, 0);
} else {
CONS_Milos_OnRearPlat3(0, 0, 0, 0);
@@ -1518,9 +1518,9 @@ void LogicManager::HAND_Milos_Unfriendly(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterMilos)[0]) {
- if (getCharacterCurrentParams(kCharacterMilos)[4] || (getCharacterCurrentParams(kCharacterMilos)[4] = _currentGameSessionTicks + 75,
- _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterMilos)[4] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterMilos)[4] || (getCharacterCurrentParams(kCharacterMilos)[4] = _realTime + 75,
+ _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterMilos)[4] >= _realTime)
break;
getCharacterCurrentParams(kCharacterMilos)[4] = 0x7FFFFFFF;
@@ -1560,7 +1560,7 @@ void LogicManager::HAND_Milos_Unfriendly(HAND_PARAMS) {
break;
case 9:
setDoor(38, kCharacterMilos, 3, 0, 0);
- if (_gameEvents[kEventMilosCompartmentVisitAugust] || _gameTime >= 2106000) {
+ if (_doneNIS[kEventMilosCompartmentVisitAugust] || _gameTime >= 2106000) {
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 12;
MilosCall(&LogicManager::CONS_Milos_DoDialog, "LIB013", 0, 0, 0);
} else {
@@ -1577,7 +1577,7 @@ void LogicManager::HAND_Milos_Unfriendly(HAND_PARAMS) {
setDoor(38, kCharacterMilos, 3, 10, 9);
break;
case 17:
- if (_gameEvents[kEventMilosCompartmentVisitAugust] || checkLoc(kCharacterCath, kCarRedSleeping) || !getCharacterCurrentParams(kCharacterMilos)[2] || _gameTime >= 2106000) {
+ if (_doneNIS[kEventMilosCompartmentVisitAugust] || checkLoc(kCharacterCath, kCarRedSleeping) || !getCharacterCurrentParams(kCharacterMilos)[2] || _gameTime >= 2106000) {
if (getCharacterCurrentParams(kCharacterMilos)[1] || getCharacterCurrentParams(kCharacterMilos)[0]) {
setDoor(38, kCharacterMilos, 3, 10, 9);
getCharacterCurrentParams(kCharacterMilos)[1] = 0;
@@ -1639,7 +1639,7 @@ void LogicManager::HAND_Milos_Unfriendly(HAND_PARAMS) {
CONS_Milos_Friendly(0, 0, 0, 0);
break;
case 6:
- if (_gameEvents[kEventMilosCompartmentVisitAugust] || _gameTime >= 2106000) {
+ if (_doneNIS[kEventMilosCompartmentVisitAugust] || _gameTime >= 2106000) {
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 8;
MilosCall(&LogicManager::CONS_Milos_DoDialog, "Mil1117A", 0, 0, 0);
} else {
@@ -1694,7 +1694,7 @@ void LogicManager::CONS_Milos_Friendly(CONS_PARAMS) {
void LogicManager::HAND_Milos_Friendly(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (!_gameEvents[kEventMilosCompartmentVisitTyler] && !_gameProgress[kProgressField54] && !getCharacterParams(kCharacterMilos, 8)[3]) {
+ if (!_doneNIS[kEventMilosCompartmentVisitTyler] && !_globals[kProgressField54] && !getCharacterParams(kCharacterMilos, 8)[3]) {
bool skip = false;
if (!getCharacterCurrentParams(kCharacterMilos)[2]) {
@@ -1714,9 +1714,9 @@ void LogicManager::HAND_Milos_Friendly(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterMilos)[0]) {
- if (getCharacterCurrentParams(kCharacterMilos)[3] || (getCharacterCurrentParams(kCharacterMilos)[3] = _currentGameSessionTicks + 75,
- _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterMilos)[3] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterMilos)[3] || (getCharacterCurrentParams(kCharacterMilos)[3] = _realTime + 75,
+ _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterMilos)[3] >= _realTime)
break;
getCharacterCurrentParams(kCharacterMilos)[3] = 0x7FFFFFFF;
@@ -1756,7 +1756,7 @@ void LogicManager::HAND_Milos_Friendly(HAND_PARAMS) {
break;
case 12:
setDoor(38, kCharacterMilos, 3, 10, 9);
- if (!_gameEvents[kEventMilosCompartmentVisitTyler] && !_gameProgress[kProgressField54] && !getCharacterParams(kCharacterMilos, 8)[3]) {
+ if (!_doneNIS[kEventMilosCompartmentVisitTyler] && !_globals[kProgressField54] && !getCharacterParams(kCharacterMilos, 8)[3]) {
send(kCharacterMilos, kCharacterVesna, 155913424, 0);
}
@@ -1777,7 +1777,7 @@ void LogicManager::HAND_Milos_Friendly(HAND_PARAMS) {
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 3;
MilosCall(&LogicManager::CONS_Milos_DoDialog, "VES1015A", 0, 0, 0);
} else {
- if (_gameEvents[kEventMilosCompartmentVisitTyler] || getCharacterParams(kCharacterMilos, 8)[3]) {
+ if (_doneNIS[kEventMilosCompartmentVisitTyler] || getCharacterParams(kCharacterMilos, 8)[3]) {
setDoor(38, kCharacterMilos, 1, 10, 9);
break;
}
@@ -1993,21 +1993,21 @@ void LogicManager::HAND_Milos_Conspiring(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterMilos)[2] = 1;
playDialog(kCharacterMilos, "Mil4013", -1, 0);
if (nearChar(kCharacterMilos, kCharacterCath, 2000))
- _gameProgress[kProgressField94] = 1;
+ _globals[kProgressField94] = 1;
}
if (_gameTime > 2360700 && !getCharacterCurrentParams(kCharacterMilos)[3]) {
getCharacterCurrentParams(kCharacterMilos)[3] = 1;
playDialog(kCharacterMilos, "Mil4014", -1, 0);
if (nearChar(kCharacterMilos, kCharacterCath, 2000))
- _gameProgress[kProgressField94] = 1;
+ _globals[kProgressField94] = 1;
}
if (_gameTime > 2370600 && !getCharacterCurrentParams(kCharacterMilos)[4]) {
getCharacterCurrentParams(kCharacterMilos)[4] = 1;
playDialog(kCharacterMilos, "Mil4015", -1, 0);
if (nearChar(kCharacterMilos, kCharacterCath, 2000))
- _gameProgress[kProgressField94] = 1;
+ _globals[kProgressField94] = 1;
}
if (_gameTime > 2407500 && !getCharacterCurrentParams(kCharacterMilos)[5]) {
@@ -2193,7 +2193,7 @@ void LogicManager::CONS_Milos_RunningTrain(CONS_PARAMS) {
void LogicManager::HAND_Milos_RunningTrain(HAND_PARAMS) {
switch (msg->action) {
case 2:
- if (_gameProgress[kProgressIsDayTime]) {
+ if (_globals[kProgressIsDayTime]) {
endGame(0, 0, 52, true);
} else {
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 6;
@@ -2204,7 +2204,7 @@ void LogicManager::HAND_Milos_RunningTrain(HAND_PARAMS) {
case 18:
switch (getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8]) {
case 1:
- playNIS(((_gameProgress[kProgressIsDayTime] == kProgressField0) + kEventLocomotiveMilosShovelingDay));
+ playNIS(((_globals[kProgressIsDayTime] == kProgressField0) + kEventLocomotiveMilosShovelingDay));
cleanNIS();
break;
case 2:
@@ -2215,7 +2215,7 @@ void LogicManager::HAND_Milos_RunningTrain(HAND_PARAMS) {
endDialog("ARRIVE");
_engine->getSoundManager()->endAmbient();
- playNIS(((_gameProgress[kProgressIsDayTime] == kProgressField0) + kEventLocomotiveMilosDay));
+ playNIS(((_globals[kProgressIsDayTime] == kProgressField0) + kEventLocomotiveMilosDay));
claimNISLink(kCharacterMilos);
bumpCath(kCarCoalTender, 1, 255);
break;
@@ -2246,9 +2246,9 @@ void LogicManager::HAND_Milos_RunningTrain(HAND_PARAMS) {
break;
case 168646401:
- if (_gameEvents[kEventLocomotiveMilosShovelingDay] || _gameEvents[kEventLocomotiveMilosShovelingNight]) {
- if (!_gameEvents[kEventLocomotiveMilosDay] && !_gameEvents[kEventLocomotiveMilosNight]) {
- if (_gameProgress[kProgressIsDayTime] && _gameTime < 2943000)
+ if (_doneNIS[kEventLocomotiveMilosShovelingDay] || _doneNIS[kEventLocomotiveMilosShovelingNight]) {
+ if (!_doneNIS[kEventLocomotiveMilosDay] && !_doneNIS[kEventLocomotiveMilosNight]) {
+ if (_globals[kProgressIsDayTime] && _gameTime < 2943000)
_gameTime = 2943000;
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 2;
MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventLocomotiveMilosDay, 0, 0);
@@ -2260,7 +2260,7 @@ void LogicManager::HAND_Milos_RunningTrain(HAND_PARAMS) {
break;
case 169773228:
- if (_gameProgress[kProgressIsDayTime]) {
+ if (_globals[kProgressIsDayTime]) {
fadeDialog(kCharacterMilos);
if (_gameTime < 2949300)
_gameTime = 2949300;
diff --git a/engines/lastexpress/characters/monsieur.cpp b/engines/lastexpress/characters/monsieur.cpp
index fbafb29faf4..53dbe4f235a 100644
--- a/engines/lastexpress/characters/monsieur.cpp
+++ b/engines/lastexpress/characters/monsieur.cpp
@@ -403,7 +403,7 @@ void LogicManager::HAND_Monsieur_GoDining(HAND_PARAMS) {
break;
case 12:
if (getCharacterCurrentParams(kCharacterMonsieur)[0]) {
- if (_gameProgress[kProgressChapter] == 4) {
+ if (_globals[kProgressChapter] == 4) {
setDoor(34, kCharacterCath, 0, 10, 9);
getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 1;
MonsieurCall(&LogicManager::CONS_Monsieur_DoCorrOtis, "607Hc", 34, 0, 0);
@@ -445,9 +445,9 @@ void LogicManager::HAND_Monsieur_GoDining(HAND_PARAMS) {
MonsieurCall(&LogicManager::CONS_Monsieur_DoSeqOtis, "812US", 0, 0, 0);
break;
case 6:
- if (_gameProgress[kProgressChapter] == 1) {
+ if (_globals[kProgressChapter] == 1) {
playDialog(kCharacterMonsieur, "MRB1075", -1, 60);
- } else if (_gameProgress[kProgressChapter] == 3) {
+ } else if (_globals[kProgressChapter] == 3) {
playDialog(kCharacterMonsieur, "MRB3101", -1, 0);
}
@@ -773,8 +773,8 @@ void LogicManager::HAND_Monsieur_InSalon(HAND_PARAMS) {
fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
} else {
if (getCharacterCurrentParams(kCharacterMonsieur)[4]) {
- if (getCharacterCurrentParams(kCharacterMonsieur)[6] || (getCharacterCurrentParams(kCharacterMonsieur)[6] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
- if (getCharacterCurrentParams(kCharacterMonsieur)[6] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterMonsieur)[6] || (getCharacterCurrentParams(kCharacterMonsieur)[6] = _realTime + 90, _realTime != -90)) {
+ if (getCharacterCurrentParams(kCharacterMonsieur)[6] >= _realTime)
break;
getCharacterCurrentParams(kCharacterMonsieur)[6] = 0x7FFFFFFF;
@@ -823,8 +823,8 @@ void LogicManager::HAND_Monsieur_CompLogic(HAND_PARAMS) {
fedEx(kCharacterMonsieur, kCharacterMonsieur, 18, 0);
} else {
if (getCharacterCurrentParams(kCharacterMonsieur)[1]) {
- if (getCharacterCurrentParams(kCharacterMonsieur)[4] || (getCharacterCurrentParams(kCharacterMonsieur)[4] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterMonsieur)[4] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterMonsieur)[4] || (getCharacterCurrentParams(kCharacterMonsieur)[4] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterMonsieur)[4] >= _realTime)
break;
getCharacterCurrentParams(kCharacterMonsieur)[4] = 0x7FFFFFFF;
@@ -1604,7 +1604,7 @@ void LogicManager::HAND_Monsieur_ReturnComp4(HAND_PARAMS) {
case 0:
if (_gameTime <= 2470500 || getCharacterCurrentParams(kCharacterMonsieur)[0]) {
if (_gameTime > 2457000) {
- if (_gameEvents[kEventAugustDrink]) {
+ if (_doneNIS[kEventAugustDrink]) {
send(kCharacterMonsieur, kCharacterAbbot, 159003408, 0);
getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 1;
MonsieurCall(&LogicManager::CONS_Monsieur_GoSalon, 0, "102A", 0, 0);
@@ -1637,7 +1637,7 @@ void LogicManager::HAND_Monsieur_ReturnComp4(HAND_PARAMS) {
case 8:
if (_gameTime >= 2470500) {
CONS_Monsieur_Asleep4(0, 0, 0, 0);
- } else if (_gameEvents[kEventAugustDrink]) {
+ } else if (_doneNIS[kEventAugustDrink]) {
getCharacter(kCharacterMonsieur).callbacks[getCharacter(kCharacterMonsieur).currentCall + 8] = 5;
MonsieurCall(&LogicManager::CONS_Monsieur_GoSalon, 0, "102A", 0, 0);
} else {
diff --git a/engines/lastexpress/characters/police.cpp b/engines/lastexpress/characters/police.cpp
index 9121e62f8ac..144ec32df32 100644
--- a/engines/lastexpress/characters/police.cpp
+++ b/engines/lastexpress/characters/police.cpp
@@ -569,8 +569,8 @@ void LogicManager::HAND_Police_TrappedCath(HAND_PARAMS) {
case 0:
{
if (!getCharacterCurrentParams(kCharacterPolice)[4] &&
- (getCharacterCurrentParams(kCharacterPolice)[4] = _currentGameSessionTicks + 75, _currentGameSessionTicks == -75) ||
- getCharacterCurrentParams(kCharacterPolice)[4] < _currentGameSessionTicks) {
+ (getCharacterCurrentParams(kCharacterPolice)[4] = _realTime + 75, _realTime == -75) ||
+ getCharacterCurrentParams(kCharacterPolice)[4] < _realTime) {
if (!cathOutHisWindow() && checkDoor(getCharacterCurrentParams(kCharacterPolice)[2]) != 1) {
getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 2;
PoliceCall(&LogicManager::CONS_Police_SaveGame, 2, kEventGendarmesArrestation, 0, 0);
@@ -581,20 +581,20 @@ void LogicManager::HAND_Police_TrappedCath(HAND_PARAMS) {
bool skip = false; // Horrible way to unroll a goto...
if (!getCharacterCurrentParams(kCharacterPolice)[5]) {
- getCharacterCurrentParams(kCharacterPolice)[5] = _currentGameSessionTicks + 150;
- if (_currentGameSessionTicks == -150) {
+ getCharacterCurrentParams(kCharacterPolice)[5] = _realTime + 150;
+ if (_realTime == -150) {
skip = true;
playDialog(kCharacterPolice, "POL1046A", 16, 0);
}
}
- if (!skip && getCharacterCurrentParams(kCharacterPolice)[5] < _currentGameSessionTicks) {
+ if (!skip && getCharacterCurrentParams(kCharacterPolice)[5] < _realTime) {
getCharacterCurrentParams(kCharacterPolice)[5] = 0x7FFFFFFF;
playDialog(kCharacterPolice, "POL1046A", 16, 0);
}
- if (getCharacterCurrentParams(kCharacterPolice)[6] || (getCharacterCurrentParams(kCharacterPolice)[6] = _currentGameSessionTicks + 300, _currentGameSessionTicks != -300)) {
- if (getCharacterCurrentParams(kCharacterPolice)[6] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterPolice)[6] || (getCharacterCurrentParams(kCharacterPolice)[6] = _realTime + 300, _realTime != -300)) {
+ if (getCharacterCurrentParams(kCharacterPolice)[6] >= _realTime)
break;
getCharacterCurrentParams(kCharacterPolice)[6] = 0x7FFFFFFF;
@@ -610,7 +610,7 @@ void LogicManager::HAND_Police_TrappedCath(HAND_PARAMS) {
if (cathOutHisWindow())
bumpCath(kCarGreenSleeping, 49, 255);
playDialog(kCharacterPolice, "LIB017", 16, 0);
- if (_gameProgress[kProgressJacket] == 1) {
+ if (_globals[kProgressJacket] == 1) {
getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 3;
PoliceCall(&LogicManager::CONS_Police_SaveGame, 2, kEventMertensBloodJacket, 0, 0);
} else {
@@ -715,7 +715,7 @@ void LogicManager::HAND_Police_SearchTrain(HAND_PARAMS) {
getCharacter(kCharacterPolice).characterPosition.car = kCarGreenSleeping;
getCharacter(kCharacterPolice).characterPosition.location = 0;
getCharacter(kCharacterPolice).characterPosition.position = 540;
- _gameProgress[kProgressField14] = 29;
+ _globals[kProgressField14] = 29;
getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 1;
PoliceCall(&LogicManager::CONS_Police_DoWalk, 3, 5540, 0, 0);
break;
@@ -755,7 +755,7 @@ void LogicManager::HAND_Police_SearchTrain(HAND_PARAMS) {
break;
case 9:
if (getCharacter(kCharacterCath).characterPosition.car == 3) {
- _gameProgress[kProgressField14] = 0;
+ _globals[kProgressField14] = 0;
endGraphics(kCharacterPolice);
send(kCharacterPolice, kCharacterTrainM, 168710784, 0);
CONS_Police_SearchDone(0, 0, 0, 0);
@@ -822,7 +822,7 @@ void LogicManager::HAND_Police_SearchTrain(HAND_PARAMS) {
PoliceCall(&LogicManager::CONS_Police_DoWalk, 4, 9460, 0, 0);
break;
case 24:
- _gameProgress[kProgressField14] = 0;
+ _globals[kProgressField14] = 0;
endGraphics(kCharacterPolice);
send(kCharacterPolice, kCharacterTrainM, 168710784, 0);
CONS_Police_SearchDone(0, 0, 0, 0);
diff --git a/engines/lastexpress/characters/rebecca.cpp b/engines/lastexpress/characters/rebecca.cpp
index 437675dc794..4d6b7ff801c 100644
--- a/engines/lastexpress/characters/rebecca.cpp
+++ b/engines/lastexpress/characters/rebecca.cpp
@@ -605,7 +605,7 @@ void LogicManager::HAND_Rebecca_GotoDinner(HAND_PARAMS) {
case 5:
startCycOtis(kCharacterRebecca, "012A");
- if (_gameProgress[kProgressChapter] == 3)
+ if (_globals[kProgressChapter] == 3)
playDialog(kCharacterRebecca, "REB3000", -1, 0);
send(kCharacterRebecca, kCharacterHeadWait, 269479296, 0);
@@ -676,7 +676,7 @@ void LogicManager::HAND_Rebecca_GotoSalon(HAND_PARAMS) {
getCharacter(kCharacterRebecca).characterPosition.position = 1540;
getCharacter(kCharacterRebecca).characterPosition.location = 0;
- if (_gameProgress[kProgressChapter] == 3)
+ if (_globals[kProgressChapter] == 3)
playDialog(kCharacterRebecca, "Reb3005", -1, 75);
if (getCharacterCurrentParams(kCharacterRebecca)[0]) {
@@ -873,8 +873,8 @@ void LogicManager::HAND_Rebecca_CompLogic(HAND_PARAMS) {
bool skip = false;
if (getCharacterCurrentParams(kCharacterRebecca)[1]) {
- if (getCharacterCurrentParams(kCharacterRebecca)[5] || (getCharacterCurrentParams(kCharacterRebecca)[5] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterRebecca)[5] >= _currentGameSessionTicks) {
+ if (getCharacterCurrentParams(kCharacterRebecca)[5] || (getCharacterCurrentParams(kCharacterRebecca)[5] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterRebecca)[5] >= _realTime) {
skip = true;
}
@@ -895,7 +895,7 @@ void LogicManager::HAND_Rebecca_CompLogic(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterRebecca)[5] = 0;
}
- if (_gameProgress[kProgressChapter] == 1 && !getCharacterParams(kCharacterRebecca, 8)[2]) {
+ if (_globals[kProgressChapter] == 1 && !getCharacterParams(kCharacterRebecca, 8)[2]) {
if (getCharacterCurrentParams(kCharacterRebecca)[6] != 0x7FFFFFFF && _gameTime > 1174500) {
if (_gameTime > 1183500) {
getCharacterCurrentParams(kCharacterRebecca)[6] = 0x7FFFFFFF;
@@ -929,7 +929,7 @@ void LogicManager::HAND_Rebecca_CompLogic(HAND_PARAMS) {
break;
}
}
- } else if (_gameProgress[kProgressChapter] == 3 && !getCharacterParams(kCharacterRebecca, 8)[3] && getCharacterCurrentParams(kCharacterRebecca)[7] != 0x7FFFFFFF && _gameTime > 2097000) {
+ } else if (_globals[kProgressChapter] == 3 && !getCharacterParams(kCharacterRebecca, 8)[3] && getCharacterCurrentParams(kCharacterRebecca)[7] != 0x7FFFFFFF && _gameTime > 2097000) {
if (_gameTime > 2106000) {
getCharacterCurrentParams(kCharacterRebecca)[7] = 0x7FFFFFFF;
getCharacterParams(kCharacterRebecca, 8)[3] = 1;
@@ -1198,7 +1198,7 @@ void LogicManager::HAND_Rebecca_InSalon1A(HAND_PARAMS) {
if (_gameTime > 1080000) {
getCharacterCurrentParams(kCharacterRebecca)[3] = 0x7FFFFFFF;
if (inSalon(kCharacterCath))
- _gameProgress[kProgressFieldB8] = 1;
+ _globals[kProgressFieldB8] = 1;
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1012", 0, 0, 0);
@@ -1209,7 +1209,7 @@ void LogicManager::HAND_Rebecca_InSalon1A(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterRebecca)[3] = _gameTime + 150;
if (_gameTime == -150) {
if (inSalon(kCharacterCath))
- _gameProgress[kProgressFieldB8] = 1;
+ _globals[kProgressFieldB8] = 1;
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1012", 0, 0, 0);
@@ -1230,8 +1230,8 @@ void LogicManager::HAND_Rebecca_InSalon1A(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterRebecca)[1]) {
- if (getCharacterCurrentParams(kCharacterRebecca)[5] || (getCharacterCurrentParams(kCharacterRebecca)[5] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
- if (getCharacterCurrentParams(kCharacterRebecca)[5] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterRebecca)[5] || (getCharacterCurrentParams(kCharacterRebecca)[5] = _realTime + 90, _realTime != -90)) {
+ if (getCharacterCurrentParams(kCharacterRebecca)[5] >= _realTime)
break;
getCharacterCurrentParams(kCharacterRebecca)[5] = 0x7FFFFFFF;
@@ -1245,7 +1245,7 @@ void LogicManager::HAND_Rebecca_InSalon1A(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterRebecca)[3] = 0x7FFFFFFF;
if (inSalon(kCharacterCath))
- _gameProgress[kProgressFieldB8] = 1;
+ _globals[kProgressFieldB8] = 1;
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 4;
RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1012", 0, 0, 0);
@@ -1285,8 +1285,8 @@ void LogicManager::HAND_Rebecca_InSalon1A(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterRebecca)[1]) {
- if (getCharacterCurrentParams(kCharacterRebecca)[5] || (getCharacterCurrentParams(kCharacterRebecca)[5] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
- if (getCharacterCurrentParams(kCharacterRebecca)[5] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterRebecca)[5] || (getCharacterCurrentParams(kCharacterRebecca)[5] = _realTime + 90, _realTime != -90)) {
+ if (getCharacterCurrentParams(kCharacterRebecca)[5] >= _realTime)
break;
getCharacterCurrentParams(kCharacterRebecca)[5] = 0x7FFFFFFF;
@@ -1299,12 +1299,12 @@ void LogicManager::HAND_Rebecca_InSalon1A(HAND_PARAMS) {
break;
case 5:
- _gameProgress[kProgressFieldB4] = 1;
+ _globals[kProgressFieldB4] = 1;
getCharacterCurrentParams(kCharacterRebecca)[0] = 0;
if (getCharacterCurrentParams(kCharacterRebecca)[1]) {
- if (getCharacterCurrentParams(kCharacterRebecca)[5] || (getCharacterCurrentParams(kCharacterRebecca)[5] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
- if (getCharacterCurrentParams(kCharacterRebecca)[5] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterRebecca)[5] || (getCharacterCurrentParams(kCharacterRebecca)[5] = _realTime + 90, _realTime != -90)) {
+ if (getCharacterCurrentParams(kCharacterRebecca)[5] >= _realTime)
break;
getCharacterCurrentParams(kCharacterRebecca)[5] = 0x7FFFFFFF;
@@ -1483,7 +1483,7 @@ void LogicManager::HAND_Rebecca_GoDinner(HAND_PARAMS) {
break;
case 3:
- _gameProgress[kProgressFieldBC] = 1;
+ _globals[kProgressFieldBC] = 1;
if (!inDiningRoom(kCharacterAnna)) {
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 5;
@@ -1573,8 +1573,8 @@ void LogicManager::HAND_Rebecca_InSalon1B(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterRebecca)[0]) {
- if (getCharacterCurrentParams(kCharacterRebecca)[2] || (getCharacterCurrentParams(kCharacterRebecca)[2] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
- if (getCharacterCurrentParams(kCharacterRebecca)[2] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterRebecca)[2] || (getCharacterCurrentParams(kCharacterRebecca)[2] = _realTime + 90, _realTime != -90)) {
+ if (getCharacterCurrentParams(kCharacterRebecca)[2] >= _realTime)
break;
getCharacterCurrentParams(kCharacterRebecca)[2] = 0x7FFFFFFF;
@@ -1715,7 +1715,7 @@ void LogicManager::HAND_Rebecca_InSalon2(HAND_PARAMS) {
if (_gameTime > 15803100) {
getCharacterCurrentParams(kCharacterRebecca)[3] = 0x7FFFFFFF;
playDialog(kCharacterRebecca, "Reb2001", -1, 0);
- _gameProgress[kProgressFieldB0] = 1;
+ _globals[kProgressFieldB0] = 1;
getCharacterCurrentParams(kCharacterRebecca)[1] = 1;
skip = true;
}
@@ -1726,7 +1726,7 @@ void LogicManager::HAND_Rebecca_InSalon2(HAND_PARAMS) {
if (_gameTime == -450) {
skip = true;
playDialog(kCharacterRebecca, "Reb2001", -1, 0);
- _gameProgress[kProgressFieldB0] = 1;
+ _globals[kProgressFieldB0] = 1;
getCharacterCurrentParams(kCharacterRebecca)[1] = 1;
}
}
@@ -1734,7 +1734,7 @@ void LogicManager::HAND_Rebecca_InSalon2(HAND_PARAMS) {
if (!skip && getCharacterCurrentParams(kCharacterRebecca)[3] < _gameTime) {
getCharacterCurrentParams(kCharacterRebecca)[3] = 0x7FFFFFFF;
playDialog(kCharacterRebecca, "Reb2001", -1, 0);
- _gameProgress[kProgressFieldB0] = 1;
+ _globals[kProgressFieldB0] = 1;
getCharacterCurrentParams(kCharacterRebecca)[1] = 1;
}
}
@@ -2666,8 +2666,8 @@ void LogicManager::HAND_Rebecca_Hiding(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (getCharacterCurrentParams(kCharacterRebecca)[0]) {
- if (getCharacterCurrentParams(kCharacterRebecca)[2] || (getCharacterCurrentParams(kCharacterRebecca)[2] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterRebecca)[2] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterRebecca)[2] || (getCharacterCurrentParams(kCharacterRebecca)[2] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterRebecca)[2] >= _realTime)
break;
getCharacterCurrentParams(kCharacterRebecca)[2] = 0x7FFFFFFF;
diff --git a/engines/lastexpress/characters/tablec.cpp b/engines/lastexpress/characters/tablec.cpp
index 5eccf09ac28..3019da301ad 100644
--- a/engines/lastexpress/characters/tablec.cpp
+++ b/engines/lastexpress/characters/tablec.cpp
@@ -173,17 +173,17 @@ void LogicManager::HAND_TableC_Idling(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterTableC);
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressChapter] == 1) {
+ if (_globals[kProgressChapter] == 1) {
if (_gameTime > 1165500 && !getCharacterCurrentParams(kCharacterTableC)[0]) {
getCharacterCurrentParams(kCharacterTableC)[0] = 1;
fadeDialog(kCharacterTableC);
}
- } else if (_gameProgress[kProgressChapter] == 3) {
+ } else if (_globals[kProgressChapter] == 3) {
if (_gameTime > 2052000 && !getCharacterCurrentParams(kCharacterTableC)[1]) {
getCharacterCurrentParams(kCharacterTableC)[1] = 1;
fadeDialog(kCharacterTableC);
}
- } else if (_gameProgress[kProgressChapter] == 4 && _gameTime > 2488500 && !getCharacterCurrentParams(kCharacterTableC)[2]) {
+ } else if (_globals[kProgressChapter] == 4 && _gameTime > 2488500 && !getCharacterCurrentParams(kCharacterTableC)[2]) {
getCharacterCurrentParams(kCharacterTableC)[2] = 1;
fadeDialog(kCharacterTableC);
}
diff --git a/engines/lastexpress/characters/tatiana.cpp b/engines/lastexpress/characters/tatiana.cpp
index 7652f8a8302..9c69c10b0f0 100644
--- a/engines/lastexpress/characters/tatiana.cpp
+++ b/engines/lastexpress/characters/tatiana.cpp
@@ -345,9 +345,9 @@ void LogicManager::CONS_Tatiana_DoWaitRealTime(CONS_PARAMS) {
void LogicManager::HAND_Tatiana_DoWaitRealTime(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (getCharacterCurrentParams(kCharacterTatiana)[1] || (getCharacterCurrentParams(kCharacterTatiana)[1] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterTatiana)[0],
- _currentGameSessionTicks + getCharacterCurrentParams(kCharacterTatiana)[0] != 0)) {
- if (getCharacterCurrentParams(kCharacterTatiana)[1] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterTatiana)[1] || (getCharacterCurrentParams(kCharacterTatiana)[1] = _realTime + getCharacterCurrentParams(kCharacterTatiana)[0],
+ _realTime + getCharacterCurrentParams(kCharacterTatiana)[0] != 0)) {
+ if (getCharacterCurrentParams(kCharacterTatiana)[1] >= _realTime)
break;
getCharacterCurrentParams(kCharacterTatiana)[1] = 0x7FFFFFFF;
@@ -481,7 +481,7 @@ void LogicManager::HAND_Tatiana_DoWalk(HAND_PARAMS) {
break;
case 5:
- if (_gameEvents[kEventTatianaAskMatchSpeakRussian] || _gameEvents[kEventTatianaAskMatch] || _gameEvents[kEventVassiliSeizure]) {
+ if (_doneNIS[kEventTatianaAskMatchSpeakRussian] || _doneNIS[kEventTatianaAskMatch] || _doneNIS[kEventVassiliSeizure]) {
if (rnd(2) == 0) {
playDialog(kCharacterCath, "CAT1010A", -1, 0);
} else {
@@ -515,7 +515,7 @@ void LogicManager::HAND_Tatiana_EnterComp(HAND_PARAMS) {
case 12:
send(kCharacterTatiana, kCharacterCond2, 326348944, 0);
- if (_gameProgress[kProgressChapter] != 1) {
+ if (_globals[kProgressChapter] != 1) {
startCycOtis(kCharacterTatiana, "673Fb");
} else {
startCycOtis(kCharacterTatiana, "603Fb");
@@ -537,7 +537,7 @@ void LogicManager::HAND_Tatiana_EnterComp(HAND_PARAMS) {
break;
case 69239528:
- if (_gameProgress[kProgressChapter] == 1) {
+ if (_globals[kProgressChapter] == 1) {
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
TatianaCall(&LogicManager::CONS_Tatiana_DoEnterCorrOtis, "603Db", 33, 0, 0);
} else {
@@ -564,7 +564,7 @@ void LogicManager::CONS_Tatiana_ExitComp(CONS_PARAMS) {
void LogicManager::HAND_Tatiana_ExitComp(HAND_PARAMS) {
switch (msg->action) {
case 12:
- if (_gameProgress[kProgressChapter] == 1) {
+ if (_globals[kProgressChapter] == 1) {
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
TatianaCall(&LogicManager::CONS_Tatiana_DoCorrOtis, "603Bb", 33, 0, 0);
} else {
@@ -579,7 +579,7 @@ void LogicManager::HAND_Tatiana_ExitComp(HAND_PARAMS) {
getCharacter(kCharacterTatiana).characterPosition.location = 0;
send(kCharacterTatiana, kCharacterCond2, 292048641, 0);
- if (_gameProgress[kProgressChapter] != 1) {
+ if (_globals[kProgressChapter] != 1) {
startCycOtis(kCharacterTatiana, "673Fb");
} else {
startCycOtis(kCharacterTatiana, "603Fb");
@@ -629,8 +629,8 @@ void LogicManager::HAND_Tatiana_CompLogic(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterTatiana)[1]) {
- if (getCharacterCurrentParams(kCharacterTatiana)[4] || (getCharacterCurrentParams(kCharacterTatiana)[4] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterTatiana)[4] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterTatiana)[4] || (getCharacterCurrentParams(kCharacterTatiana)[4] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterTatiana)[4] >= _realTime)
break;
getCharacterCurrentParams(kCharacterTatiana)[4] = 0x7FFFFFFF;
@@ -855,8 +855,8 @@ void LogicManager::HAND_Tatiana_AtDinner(HAND_PARAMS) {
if (!whoRunningDialog(kCharacterTatiana) && getCharacterCurrentParams(kCharacterTatiana)[3] && getCharacterCurrentParams(kCharacterTatiana)[2] < 2 && !dialogRunning("TAT1066")) {
bool skip1 = false;
- if (getCharacterCurrentParams(kCharacterTatiana)[4] || (getCharacterCurrentParams(kCharacterTatiana)[4] = _currentGameSessionTicks + 450, _currentGameSessionTicks != -450)) {
- if (getCharacterCurrentParams(kCharacterTatiana)[4] >= _currentGameSessionTicks) {
+ if (getCharacterCurrentParams(kCharacterTatiana)[4] || (getCharacterCurrentParams(kCharacterTatiana)[4] = _realTime + 450, _realTime != -450)) {
+ if (getCharacterCurrentParams(kCharacterTatiana)[4] >= _realTime) {
skip1 = true;
}
@@ -872,7 +872,7 @@ void LogicManager::HAND_Tatiana_AtDinner(HAND_PARAMS) {
playDialog(kCharacterTatiana, "TAT1069B", -1, 0);
}
- _gameProgress[kProgressField64] = 1;
+ _globals[kProgressField64] = 1;
getCharacterCurrentParams(kCharacterTatiana)[2]++;
getCharacterCurrentParams(kCharacterTatiana)[4] = 0;
}
@@ -880,8 +880,8 @@ void LogicManager::HAND_Tatiana_AtDinner(HAND_PARAMS) {
bool skip2 = false;
if (checkCathDir(kCarRestaurant, 71)) {
- if (getCharacterCurrentParams(kCharacterTatiana)[5] || (getCharacterCurrentParams(kCharacterTatiana)[5] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterTatiana)[5] >= _currentGameSessionTicks) {
+ if (getCharacterCurrentParams(kCharacterTatiana)[5] || (getCharacterCurrentParams(kCharacterTatiana)[5] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterTatiana)[5] >= _realTime) {
skip2 = true;
}
@@ -897,7 +897,7 @@ void LogicManager::HAND_Tatiana_AtDinner(HAND_PARAMS) {
playDialog(kCharacterTatiana, "TAT1069B", -1, 0);
}
- _gameProgress[kProgressField64] = 1;
+ _globals[kProgressField64] = 1;
getCharacterCurrentParams(kCharacterTatiana)[2]++;
getCharacterCurrentParams(kCharacterTatiana)[5] = 0;
}
@@ -910,8 +910,8 @@ void LogicManager::HAND_Tatiana_AtDinner(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterTatiana)[0]) {
- if (getCharacterCurrentParams(kCharacterTatiana)[7] || (getCharacterCurrentParams(kCharacterTatiana)[7] = _currentGameSessionTicks + 90, _currentGameSessionTicks != -90)) {
- if (getCharacterCurrentParams(kCharacterTatiana)[7] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterTatiana)[7] || (getCharacterCurrentParams(kCharacterTatiana)[7] = _realTime + 90, _realTime != -90)) {
+ if (getCharacterCurrentParams(kCharacterTatiana)[7] >= _realTime)
break;
getCharacterCurrentParams(kCharacterTatiana)[7] = 0x7FFFFFFF;
@@ -1058,7 +1058,7 @@ void LogicManager::HAND_Tatiana_ReturnToComp(HAND_PARAMS) {
break;
case 5:
case 6:
- if (_gameProgress[kProgressField14] == 29) {
+ if (_globals[kProgressField14] == 29) {
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 6;
TatianaCall(&LogicManager::CONS_Tatiana_CompLogic, _gameTime + 900, 0, 0, 0);
} else {
@@ -1091,7 +1091,7 @@ void LogicManager::HAND_Tatiana_GetSomeAir(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (getCharacterCurrentParams(kCharacterTatiana)[0] == 0x7FFFFFFF || _gameTime <= 1179000) {
- if (!_gameEvents[kEventTatianaAskMatchSpeakRussian] && !_gameEvents[kEventTatianaAskMatch] && cathHasItem(kItemMatchBox) && onLowPlatform(kCharacterCath)) {
+ if (!_doneNIS[kEventTatianaAskMatchSpeakRussian] && !_doneNIS[kEventTatianaAskMatch] && cathHasItem(kItemMatchBox) && onLowPlatform(kCharacterCath)) {
setDoor(25, kCharacterTatiana, 1, 0, 1);
setDoor(23, kCharacterTatiana, 1, 0, 1);
}
@@ -1117,7 +1117,7 @@ void LogicManager::HAND_Tatiana_GetSomeAir(HAND_PARAMS) {
break;
}
- if (!_gameEvents[kEventTatianaAskMatchSpeakRussian] && !_gameEvents[kEventTatianaAskMatch] || onLowPlatform(kCharacterCath) || !getCharacterCurrentParams(kCharacterTatiana)[0]) {
+ if (!_doneNIS[kEventTatianaAskMatchSpeakRussian] && !_doneNIS[kEventTatianaAskMatch] || onLowPlatform(kCharacterCath) || !getCharacterCurrentParams(kCharacterTatiana)[0]) {
getCharacterCurrentParams(kCharacterTatiana)[0] = _gameTime;
if (!_gameTime) {
setDoor(25, kCharacterCath, 0, 255, 255);
@@ -1138,7 +1138,7 @@ void LogicManager::HAND_Tatiana_GetSomeAir(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterTatiana)[0] >= _gameTime) {
- if (!_gameEvents[kEventTatianaAskMatchSpeakRussian] && !_gameEvents[kEventTatianaAskMatch] && cathHasItem(kItemMatchBox) && onLowPlatform(kCharacterCath)) {
+ if (!_doneNIS[kEventTatianaAskMatchSpeakRussian] && !_doneNIS[kEventTatianaAskMatch] && cathHasItem(kItemMatchBox) && onLowPlatform(kCharacterCath)) {
setDoor(25, kCharacterTatiana, 1, 0, 1);
setDoor(23, kCharacterTatiana, 1, 0, 1);
}
@@ -1192,7 +1192,7 @@ void LogicManager::HAND_Tatiana_GetSomeAir(HAND_PARAMS) {
blockView(kCharacterTatiana, kCarGreenSleeping, 71);
break;
case 3:
- playNIS(((_gameEvents[kEventAlexeiSalonVassili] == 0) + kEventTatianaAskMatchSpeakRussian));
+ playNIS(((_doneNIS[kEventAlexeiSalonVassili] == 0) + kEventTatianaAskMatchSpeakRussian));
bumpCath(kCarGreenSleeping, 62, 255);
getCharacter(kCharacterTatiana).inventoryItem = 10;
setDoor(25, kCharacterCath, 0, 255, 255);
@@ -1359,7 +1359,7 @@ void LogicManager::CONS_Tatiana_BreakfastClick(CONS_PARAMS) {
void LogicManager::HAND_Tatiana_BreakfastClick(HAND_PARAMS) {
switch (msg->action) {
case 12:
- if (_gameEvents[kEventTatianaGivePoem]) {
+ if (_doneNIS[kEventTatianaGivePoem]) {
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
TatianaCall(&LogicManager::CONS_Tatiana_SaveGame, 2, kEventTatianaBreakfastAlexei, 0, 0);
} else {
@@ -1416,7 +1416,7 @@ void LogicManager::HAND_Tatiana_JoinAlexei(HAND_PARAMS) {
getCharacter(kCharacterTatiana).inventoryItem = 0;
getCharacter(kCharacterTatiana).characterPosition.location = 0;
send(kCharacterTatiana, kCharacterTableF, 103798704, "024D");
- if (_gameEvents[kEventTatianaBreakfastAlexei] || _gameEvents[kEventTatianaBreakfast]) {
+ if (_doneNIS[kEventTatianaBreakfastAlexei] || _doneNIS[kEventTatianaBreakfast]) {
send(kCharacterTatiana, kCharacterAlexei, 236053296, 69);
} else {
send(kCharacterTatiana, kCharacterAlexei, 236053296, 0);
@@ -1540,10 +1540,10 @@ void LogicManager::HAND_Tatiana_StartPart3(HAND_PARAMS) {
getCharacter(kCharacterTatiana).clothes = 2;
setDoor(33, kCharacterCath, 1, 10, 9);
setDoor(49, kCharacterCath, 1, 10, 9);
- _gameInventory[kItemFirebird].location = 2;
+ _items[kItemFirebird].floating = 2;
- if (_gameEvents[kEventTatianaBreakfastGivePoem] || _gameEvents[kEventTatianaGivePoem] && !_gameEvents[kEventTatianaBreakfastAlexei]) {
- _gameInventory[kItemParchemin].location = 2;
+ if (_doneNIS[kEventTatianaBreakfastGivePoem] || _doneNIS[kEventTatianaGivePoem] && !_doneNIS[kEventTatianaBreakfastAlexei]) {
+ _items[kItemParchemin].floating = 2;
}
break;
@@ -1566,13 +1566,13 @@ void LogicManager::HAND_Tatiana_PlayChess(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (!getCharacterCurrentParams(kCharacterTatiana)[1] && !getCharacterCurrentParams(kCharacterTatiana)[4]) {
- getCharacterCurrentParams(kCharacterTatiana)[0] -= _gameTimeTicksDelta;
- if (_gameTimeTicksDelta > getCharacterCurrentParams(kCharacterTatiana)[0]) {
+ getCharacterCurrentParams(kCharacterTatiana)[0] -= _timeSpeed;
+ if (_timeSpeed > getCharacterCurrentParams(kCharacterTatiana)[0]) {
startCycOtis(kCharacterTatiana, (char *)&getCharacterCurrentParams(kCharacterTatiana)[8]);
playDialog(kCharacterTatiana, (char *)&getCharacterCurrentParams(kCharacterTatiana)[5], -1, 0);
if (getCharacterCurrentParams(kCharacterTatiana)[2] == 4 && inSalon(kCharacterCath))
- _gameProgress[kProgressField90] = 1;
+ _globals[kProgressField90] = 1;
getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
}
@@ -1715,7 +1715,7 @@ void LogicManager::HAND_Tatiana_BeforeConcert(HAND_PARAMS) {
case 18:
switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
case 1:
- _gameInventory[kItemFirebird].location = 1;
+ _items[kItemFirebird].floating = 1;
if (inSuite(kCharacterCath, kCarRedSleeping, 7850))
bumpCathRDoor(33);
@@ -1755,7 +1755,7 @@ void LogicManager::CONS_Tatiana_Concert(CONS_PARAMS) {
void LogicManager::HAND_Tatiana_Concert(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (!getCharacterCurrentParams(kCharacterTatiana)[0] && cathHasItem(kItemFirebird) && inSuite(kCharacterCath, kCarRedSleeping, 7850) && (_gameTime < 2133000 || _gameProgress[16])) {
+ if (!getCharacterCurrentParams(kCharacterTatiana)[0] && cathHasItem(kItemFirebird) && inSuite(kCharacterCath, kCarRedSleeping, 7850) && (_gameTime < 2133000 || _globals[16])) {
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
TatianaCall(&LogicManager::CONS_Tatiana_TrapCath, 0, 0, 0, 0);
break;
@@ -1829,7 +1829,7 @@ void LogicManager::HAND_Tatiana_LeaveConcert(HAND_PARAMS) {
if (cathHasItem(kItemFirebird)) {
playNIS(kEventTatianaCompartmentStealEgg);
takeCathItem(kItemFirebird);
- _gameInventory[kItemFirebird].location = 2;
+ _items[kItemFirebird].floating = 2;
} else {
playNIS(kEventTatianaCompartment);
}
@@ -1858,14 +1858,14 @@ void LogicManager::CONS_Tatiana_AfterConcert(CONS_PARAMS) {
void LogicManager::HAND_Tatiana_AfterConcert(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameInventory[kItemFirebird].location != 1 && _gameInventory[kItemFirebird].location != 2) {
+ if (_items[kItemFirebird].floating != 1 && _items[kItemFirebird].floating != 2) {
if (!getCharacterCurrentParams(kCharacterTatiana)[2])
getCharacterCurrentParams(kCharacterTatiana)[2] = _gameTime + 900;
if (getCharacterCurrentParams(kCharacterTatiana)[3] != 0x7FFFFFFF && getCharacterCurrentParams(kCharacterTatiana)[2] < _gameTime) {
if (_gameTime > 2227500) {
getCharacterCurrentParams(kCharacterTatiana)[3] = 0x7FFFFFFF;
- _gameProgress[kProgressField5C] = 1;
+ _globals[kProgressField5C] = 1;
if (inComp(kCharacterAnna, kCarRedSleeping, 4070)) {
CONS_Tatiana_CryAnna(0, 0, 0, 0);
@@ -1878,7 +1878,7 @@ void LogicManager::HAND_Tatiana_AfterConcert(HAND_PARAMS) {
if (_gameTime == -450) {
skip = true;
- _gameProgress[kProgressField5C] = 1;
+ _globals[kProgressField5C] = 1;
if (inComp(kCharacterAnna, kCarRedSleeping, 4070)) {
CONS_Tatiana_CryAnna(0, 0, 0, 0);
break;
@@ -1888,7 +1888,7 @@ void LogicManager::HAND_Tatiana_AfterConcert(HAND_PARAMS) {
if (!skip && getCharacterCurrentParams(kCharacterTatiana)[3] < _gameTime) {
getCharacterCurrentParams(kCharacterTatiana)[3] = 0x7FFFFFFF;
- _gameProgress[kProgressField5C] = 1;
+ _globals[kProgressField5C] = 1;
if (inComp(kCharacterAnna, kCarRedSleeping, 4070)) {
CONS_Tatiana_CryAnna(0, 0, 0, 0);
break;
@@ -1899,8 +1899,8 @@ void LogicManager::HAND_Tatiana_AfterConcert(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterTatiana)[0]) {
- if (getCharacterCurrentParams(kCharacterTatiana)[4] || (getCharacterCurrentParams(kCharacterTatiana)[4] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterTatiana)[4] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterTatiana)[4] || (getCharacterCurrentParams(kCharacterTatiana)[4] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterTatiana)[4] >= _realTime)
break;
getCharacterCurrentParams(kCharacterTatiana)[4] = 0x7FFFFFFF;
@@ -1941,7 +1941,7 @@ void LogicManager::HAND_Tatiana_AfterConcert(HAND_PARAMS) {
if (cathHasItem(kItemFirebird)) {
playNIS(kEventTatianaCompartmentStealEgg);
takeCathItem(kItemFirebird);
- _gameInventory[kItemFirebird].location = 2;
+ _items[kItemFirebird].floating = 2;
} else {
playNIS(kEventTatianaCompartment);
}
@@ -2154,7 +2154,7 @@ void LogicManager::HAND_Tatiana_DoConcertWalk(HAND_PARAMS) {
break;
case 6:
- if (_gameEvents[kEventTatianaAskMatchSpeakRussian] || _gameEvents[kEventTatianaAskMatch] || _gameEvents[kEventVassiliSeizure]) {
+ if (_doneNIS[kEventTatianaAskMatchSpeakRussian] || _doneNIS[kEventTatianaAskMatch] || _doneNIS[kEventVassiliSeizure]) {
if (rnd(2) == 0) {
playDialog(kCharacterCath, "CAT1010A", -1, 0);
} else {
@@ -2192,7 +2192,7 @@ void LogicManager::HAND_Tatiana_TrapCath(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (getCharacterCurrentParams(kCharacterTatiana)[0]) {
- if (inSuite(kCharacterCath, kCarRedSleeping, 7850) && !_gameEvents[kEventVassiliCompartmentStealEgg] && (_gameTime <= 2133000 || _gameProgress[kProgressField40])) {
+ if (inSuite(kCharacterCath, kCarRedSleeping, 7850) && !_doneNIS[kEventVassiliCompartmentStealEgg] && (_gameTime <= 2133000 || _globals[kProgressField40])) {
if (inComp(kCharacterCath, kCarRedSleeping, 7500)) {
send(kCharacterTatiana, kCharacterCond2, 235061888, 0);
endGraphics(kCharacterTatiana);
@@ -2202,7 +2202,7 @@ void LogicManager::HAND_Tatiana_TrapCath(HAND_PARAMS) {
if (cathHasItem(kItemFirebird)) {
playNIS(kEventTatianaCompartmentStealEgg);
takeCathItem(kItemFirebird);
- _gameInventory[kItemFirebird].location = 2;
+ _items[kItemFirebird].floating = 2;
} else {
playNIS(kEventTatianaCompartment);
}
@@ -2213,7 +2213,7 @@ void LogicManager::HAND_Tatiana_TrapCath(HAND_PARAMS) {
}
} else {
softReleaseAtDoor(kCharacterTatiana, 33);
- if (_gameTime < 2133000 || _gameProgress[16]) {
+ if (_gameTime < 2133000 || _globals[16]) {
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
TatianaCall(&LogicManager::CONS_Tatiana_DoConcertWalk, 0, 0, 0, 0);
} else {
@@ -2422,13 +2422,13 @@ void LogicManager::HAND_Tatiana_WithAlexei(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (!getCharacterCurrentParams(kCharacterTatiana)[1] && !getCharacterCurrentParams(kCharacterTatiana)[2]) {
- getCharacterCurrentParams(kCharacterTatiana)[0] -= _gameTimeTicksDelta;
- if (_gameTimeTicksDelta > getCharacterCurrentParams(kCharacterTatiana)[0]) {
+ getCharacterCurrentParams(kCharacterTatiana)[0] -= _timeSpeed;
+ if (_timeSpeed > getCharacterCurrentParams(kCharacterTatiana)[0]) {
playDialog(kCharacterTatiana, (char *)&getCharacterCurrentParams(kCharacterTatiana)[5], -1, 0);
if (getCharacterCurrentParams(kCharacterTatiana)[3] == 4 && nearChar(kCharacterTatiana, kCharacterCath, 2000)) {
- _gameProgress[kProgressField8C] = 1;
+ _globals[kProgressField8C] = 1;
} else if (getCharacterCurrentParams(kCharacterTatiana)[3] == 7 && nearChar(kCharacterTatiana, kCharacterCath, 2000)) {
- _gameProgress[kProgressField88] = 1;
+ _globals[kProgressField88] = 1;
}
getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
@@ -2595,18 +2595,18 @@ void LogicManager::HAND_Tatiana_SeekCath(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (!getCharacterCurrentParams(kCharacterTatiana)[0]) {
- if (!_gameEvents[kEventTatianaTylerCompartment] && inComp(kCharacterCath, kCarGreenSleeping, 8200)) {
+ if (!_doneNIS[kEventTatianaTylerCompartment] && inComp(kCharacterCath, kCarGreenSleeping, 8200)) {
getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
- _gameProgress[kProgressFieldE4] = 1;
+ _globals[kProgressFieldE4] = 1;
setDoor(1, kCharacterTatiana, checkDoor(1), 0, 9);
}
if (!getCharacterCurrentParams(kCharacterTatiana)[0]) {
- if (_gameEvents[kEventTatianaTylerCompartment] || _gameTime > 2475000) {
+ if (_doneNIS[kEventTatianaTylerCompartment] || _gameTime > 2475000) {
if (getCharacterCurrentParams(kCharacterTatiana)[0]) {
setDoor(1, 0, checkDoor(1), 10, 9);
}
- _gameProgress[kProgressFieldE4] = 0;
+ _globals[kProgressFieldE4] = 0;
softReleaseAtDoor(kCharacterTatiana, 2);
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 4, 7500, 0, 0);
@@ -2623,14 +2623,14 @@ void LogicManager::HAND_Tatiana_SeekCath(HAND_PARAMS) {
if (getCharacterCurrentParams(kCharacterTatiana)[0] && !whoRunningDialog(kCharacterTatiana)) {
rndNum = 5 * (3 * rnd(5) + 30);
- if (getCharacterCurrentParams(kCharacterTatiana)[1] || (getCharacterCurrentParams(kCharacterTatiana)[1] = _currentGameSessionTicks + rndNum,
- _currentGameSessionTicks + rndNum != 0)) {
- if (getCharacterCurrentParams(kCharacterTatiana)[1] >= _currentGameSessionTicks) {
- if (_gameEvents[kEventTatianaTylerCompartment] || _gameTime > 2475000) {
+ if (getCharacterCurrentParams(kCharacterTatiana)[1] || (getCharacterCurrentParams(kCharacterTatiana)[1] = _realTime + rndNum,
+ _realTime + rndNum != 0)) {
+ if (getCharacterCurrentParams(kCharacterTatiana)[1] >= _realTime) {
+ if (_doneNIS[kEventTatianaTylerCompartment] || _gameTime > 2475000) {
if (getCharacterCurrentParams(kCharacterTatiana)[0]) {
setDoor(1, 0, checkDoor(1), 10, 9);
}
- _gameProgress[kProgressFieldE4] = 0;
+ _globals[kProgressFieldE4] = 0;
softReleaseAtDoor(kCharacterTatiana, 2);
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 4, 7500, 0, 0);
@@ -2646,11 +2646,11 @@ void LogicManager::HAND_Tatiana_SeekCath(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterTatiana)[1] = 0;
}
- if (_gameEvents[kEventTatianaTylerCompartment] || _gameTime > 2475000) {
+ if (_doneNIS[kEventTatianaTylerCompartment] || _gameTime > 2475000) {
if (getCharacterCurrentParams(kCharacterTatiana)[0]) {
setDoor(1, 0, checkDoor(1), 10, 9);
}
- _gameProgress[kProgressFieldE4] = 0;
+ _globals[kProgressFieldE4] = 0;
softReleaseAtDoor(kCharacterTatiana, 2);
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 4, 7500, 0, 0);
@@ -2914,8 +2914,8 @@ void LogicManager::HAND_Tatiana_Autistic(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterTatiana)[0] > 3) {
- if (getCharacterCurrentParams(kCharacterTatiana)[2] || (getCharacterCurrentParams(kCharacterTatiana)[2] = _currentGameSessionTicks + 225, _currentGameSessionTicks != -225)) {
- if (getCharacterCurrentParams(kCharacterTatiana)[2] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterTatiana)[2] || (getCharacterCurrentParams(kCharacterTatiana)[2] = _realTime + 225, _realTime != -225)) {
+ if (getCharacterCurrentParams(kCharacterTatiana)[2] >= _realTime)
break;
getCharacterCurrentParams(kCharacterTatiana)[2] = 0x7FFFFFFF;
diff --git a/engines/lastexpress/characters/trainm.cpp b/engines/lastexpress/characters/trainm.cpp
index e700e9060c9..3c052395108 100644
--- a/engines/lastexpress/characters/trainm.cpp
+++ b/engines/lastexpress/characters/trainm.cpp
@@ -447,8 +447,8 @@ void LogicManager::HAND_TrainM_DoAnnounceWalk(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterTrainM)[5]) {
- if (getCharacterCurrentParams(kCharacterTrainM)[7] || (getCharacterCurrentParams(kCharacterTrainM)[7] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterTrainM)[7] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterTrainM)[7] || (getCharacterCurrentParams(kCharacterTrainM)[7] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterTrainM)[7] >= _realTime)
break;
getCharacterCurrentParams(kCharacterTrainM)[7] = 0x7FFFFFFF;
@@ -658,11 +658,11 @@ void LogicManager::HAND_TrainM_KickCathOut(HAND_PARAMS) {
break;
case 18:
if (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] == 1) {
- if (_gameEvents[kEventVergesSuitcase] || _gameEvents[kEventVergesSuitcaseNight] || _gameEvents[kEventVergesSuitcaseOtherEntry] || _gameEvents[kEventVergesSuitcaseNightOtherEntry]) {
+ if (_doneNIS[kEventVergesSuitcase] || _doneNIS[kEventVergesSuitcaseNight] || _doneNIS[kEventVergesSuitcaseOtherEntry] || _doneNIS[kEventVergesSuitcaseNightOtherEntry]) {
getCharacterCurrentParams(kCharacterTrainM)[1] = 1;
}
- if (isNight() && _gameProgress[kProgressChapter] != 1)
+ if (isNight() && _globals[kProgressChapter] != 1)
getCharacterCurrentParams(kCharacterTrainM)[1] = 1;
if (getCharacterCurrentParams(kCharacterTrainM)[0]) {
@@ -757,7 +757,7 @@ void LogicManager::HAND_TrainM_DoCond(HAND_PARAMS) {
case 0:
if (getCharacterCurrentParams(kCharacterTrainM)[4] && getCharacterCurrentParams(kCharacterTrainM)[5]) {
send(kCharacterTrainM, getCharacterCurrentParams(kCharacterTrainM)[0], 125499160, 0);
- if (!checkCathDir(3, 2) && !checkCathDir(4, 2))
+ if (!checkCathDir(kCarGreenSleeping, 2) && !checkCathDir(kCarRedSleeping, 2))
getCharacter(kCharacterTrainM).characterPosition.position = 2088;
getCharacter(kCharacterTrainM).currentCall--;
@@ -805,7 +805,7 @@ void LogicManager::HAND_TrainM_DoCondDoubl(HAND_PARAMS) {
case 0:
if (getCharacterCurrentParams(kCharacterTrainM)[8] >= 2 && getCharacterCurrentParams(kCharacterTrainM)[7]) {
send(kCharacterTrainM, getCharacterCurrentParams(kCharacterTrainM)[0], 125499160, 0);
- if (!checkCathDir(kCarGreenSleeping, 2) && !checkCathDir(4, 2))
+ if (!checkCathDir(kCarGreenSleeping, 2) && !checkCathDir(kCarRedSleeping, 2))
getCharacter(kCharacterTrainM).characterPosition.position = 2088;
getCharacter(kCharacterTrainM).currentCall--;
@@ -1105,7 +1105,7 @@ void LogicManager::HAND_TrainM_DoHWMessage(HAND_PARAMS) {
TrainMCall(&LogicManager::CONS_TrainM_DoWalk, 3, 2000, 0, 0);
break;
case 2:
- if (_gameEvents[kEventMertensAskTylerCompartment] || _gameEvents[kEventMertensAskTylerCompartmentD] || _gameEvents[kEventMertensAugustWaiting]) {
+ if (_doneNIS[kEventMertensAskTylerCompartment] || _doneNIS[kEventMertensAskTylerCompartmentD] || _doneNIS[kEventMertensAugustWaiting]) {
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 3;
TrainMCall(&LogicManager::CONS_TrainM_DoCondDoubl, 3, "TRA1200", "TRA1201", 0);
} else {
@@ -1225,12 +1225,12 @@ void LogicManager::HAND_TrainM_BoardPolice(HAND_PARAMS) {
case 1:
takeItem(kCharacterTrainM);
if (inOuterSanctum(kCharacterCath)) {
- if (_gameEvents[kProgressFieldCC]) {
- _gameProgress[kProgressField3C] = 1;
+ if (_doneNIS[kProgressFieldCC]) {
+ _globals[kProgressField3C] = 1;
getCharacter(kCharacterTrainM).characterPosition.car = kCarGreenSleeping;
getCharacter(kCharacterTrainM).characterPosition.position = 540;
getCharacter(kCharacterTrainM).characterPosition.location = 0;
- _gameTimeTicksDelta = 3;
+ _timeSpeed = 3;
send(kCharacterTrainM, kCharacterMaster, 169629818, 0);
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 3;
TrainMCall(&LogicManager::CONS_TrainM_DoPoliceDoneDialog, 0, 0, 0, 0);
@@ -1276,8 +1276,8 @@ void LogicManager::HAND_TrainM_BoardPolice(HAND_PARAMS) {
}
send(kCharacterTrainM, kCharacterPolice, 169499649, 0);
- _gameProgress[kProgressField3C] = 1;
- _gameTimeTicksDelta = 1;
+ _globals[kProgressField3C] = 1;
+ _timeSpeed = 1;
if (getCharacter(kCharacterTrainM).characterPosition.car == kCarRedSleeping) {
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 6;
TrainMCall(&LogicManager::CONS_TrainM_DoAnnounceWalk, 3, 540, "TRA1005", 0);
@@ -1288,12 +1288,12 @@ void LogicManager::HAND_TrainM_BoardPolice(HAND_PARAMS) {
break;
case 2:
- if (_gameEvents[kProgressFieldCC]) {
- _gameProgress[kProgressField3C] = 1;
+ if (_doneNIS[kProgressFieldCC]) {
+ _globals[kProgressField3C] = 1;
getCharacter(kCharacterTrainM).characterPosition.car = kCarGreenSleeping;
getCharacter(kCharacterTrainM).characterPosition.position = 540;
getCharacter(kCharacterTrainM).characterPosition.location = 0;
- _gameTimeTicksDelta = 3;
+ _timeSpeed = 3;
send(kCharacterTrainM, kCharacterMaster, 169629818, 0);
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 3;
TrainMCall(&LogicManager::CONS_TrainM_DoPoliceDoneDialog, 0, 0, 0, 0);
@@ -1354,7 +1354,7 @@ void LogicManager::HAND_TrainM_BoardPolice(HAND_PARAMS) {
getCharacter(kCharacterTrainM).characterPosition.position = 8200;
getCharacter(kCharacterTrainM).characterPosition.location = 0;
- _gameTimeTicksDelta = 3;
+ _timeSpeed = 3;
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 8;
TrainMCall(&LogicManager::CONS_TrainM_SaveGame, 1, 0, 0, 0);
@@ -1962,7 +1962,7 @@ void LogicManager::HAND_TrainM_DoDogProblem(HAND_PARAMS) {
TrainMCall(&LogicManager::CONS_TrainM_WalkBackToOffice, 0, 0, 0, 0);
break;
case 4:
- _gameProgress[kItemFirebird] = 1;
+ _globals[kProgressField48] = 1;
getCharacterParams(kCharacterTrainM, 8)[3] = 0;
getCharacter(kCharacterTrainM).currentCall--;
@@ -2110,7 +2110,7 @@ void LogicManager::HAND_TrainM_OnRearPlatform(HAND_PARAMS) {
getCharacter(kCharacterTrainM).characterPosition.location = 1;
getCharacter(kCharacterTrainM).characterPosition.position = 5799;
- if (!_gameProgress[kProgressField3C]) {
+ if (!_globals[kProgressField3C]) {
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 5;
TrainMCall(&LogicManager::CONS_TrainM_DoDialog, "Abb3035", 0, 0, 0);
} else {
diff --git a/engines/lastexpress/characters/vassili.cpp b/engines/lastexpress/characters/vassili.cpp
index 1246d0978a8..cfa32e2ddf0 100644
--- a/engines/lastexpress/characters/vassili.cpp
+++ b/engines/lastexpress/characters/vassili.cpp
@@ -239,10 +239,10 @@ void LogicManager::HAND_Vassili_InBed(HAND_PARAMS) {
case 0:
if (inComp(kCharacterCath, kCarRedSleeping, 8200)) {
if (getCharacterCurrentParams(kCharacterVassili)[2] ||
- ((getCharacterCurrentParams(kCharacterVassili)[2] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterVassili)[0]),
- _currentGameSessionTicks + getCharacterCurrentParams(kCharacterVassili)[0] != 0)) {
+ ((getCharacterCurrentParams(kCharacterVassili)[2] = _realTime + getCharacterCurrentParams(kCharacterVassili)[0]),
+ _realTime + getCharacterCurrentParams(kCharacterVassili)[0] != 0)) {
- if (getCharacterCurrentParams(kCharacterVassili)[2] < _currentGameSessionTicks) {
+ if (getCharacterCurrentParams(kCharacterVassili)[2] < _realTime) {
getCharacterCurrentParams(kCharacterVassili)[2] = 0x7FFFFFFF;
getCharacter(kCharacterVassili).callbacks[getCharacter(kCharacterVassili).currentCall + 8] = 1;
VassiliCall(&LogicManager::CONS_Vassili_DoSeqOtis, "303B", 0, 0, 0);
@@ -447,9 +447,9 @@ void LogicManager::CONS_Vassili_CathArrives(CONS_PARAMS) {
void LogicManager::HAND_Vassili_CathArrives(HAND_PARAMS) {
switch (msg->action) {
case 12:
- if (_gameProgress[kProgressEventCorpseMovedFromFloor]) {
- if (_gameProgress[kProgressEventCorpseThrown]) {
- if (_gameProgress[kProgressJacket] == 1) {
+ if (_globals[kProgressEventCorpseMovedFromFloor]) {
+ if (_globals[kProgressEventCorpseThrown]) {
+ if (_globals[kProgressJacket] == 1) {
playNIS(kEventMertensBloodJacket);
endGame(0, 0, 0, true);
} else {
@@ -474,7 +474,7 @@ void LogicManager::HAND_Vassili_CathArrives(HAND_PARAMS) {
playNIS(kEventVassiliSeizure);
setDoor(32, kCharacterCath, 0, 10, 9);
setDoor(1, kCharacterCath, 0, 10, 9);
- _gameProgress[kProgressField18] = 2;
+ _globals[kProgressField18] = 2;
send(kCharacterVassili, kCharacterAnna, 191477936, 0);
send(kCharacterVassili, kCharacterTrainM, 191477936, 0);
send(kCharacterVassili, kCharacterCond2, 191477936, 0);
@@ -553,9 +553,9 @@ void LogicManager::HAND_Vassili_InPart2(HAND_PARAMS) {
case 0:
if (inComp(kCharacterCath, kCarRedSleeping, 8200)) {
if (getCharacterCurrentParams(kCharacterVassili)[2] ||
- (getCharacterCurrentParams(kCharacterVassili)[2] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterVassili)[0],
- _currentGameSessionTicks + getCharacterCurrentParams(kCharacterVassili)[0] != 0)) {
- if (getCharacterCurrentParams(kCharacterVassili)[2] >= _currentGameSessionTicks)
+ (getCharacterCurrentParams(kCharacterVassili)[2] = _realTime + getCharacterCurrentParams(kCharacterVassili)[0],
+ _realTime + getCharacterCurrentParams(kCharacterVassili)[0] != 0)) {
+ if (getCharacterCurrentParams(kCharacterVassili)[2] >= _realTime)
return;
getCharacterCurrentParams(kCharacterVassili)[2] = 0x7FFFFFFF;
}
@@ -629,10 +629,10 @@ void LogicManager::HAND_Vassili_Asleep(HAND_PARAMS) {
case 0:
if (inComp(kCharacterCath, kCarRedSleeping, 8200)) {
if (getCharacterCurrentParams(kCharacterVassili)[2] ||
- (getCharacterCurrentParams(kCharacterVassili)[2] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterVassili)[0],
- _currentGameSessionTicks + getCharacterCurrentParams(kCharacterVassili)[0] != 0)) {
+ (getCharacterCurrentParams(kCharacterVassili)[2] = _realTime + getCharacterCurrentParams(kCharacterVassili)[0],
+ _realTime + getCharacterCurrentParams(kCharacterVassili)[0] != 0)) {
- if (getCharacterCurrentParams(kCharacterVassili)[2] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterVassili)[2] >= _realTime)
break;
getCharacterCurrentParams(kCharacterVassili)[2] = 0x7FFFFFFF;
@@ -656,7 +656,7 @@ void LogicManager::HAND_Vassili_Asleep(HAND_PARAMS) {
startCycOtis(kCharacterVassili, "303A");
break;
case 17:
- if (inComp(kCharacterCath, kCarRedSleeping, 7850) && cathHasItem(kItemFirebird) && !_gameEvents[kEventVassiliCompartmentStealEgg]) {
+ if (inComp(kCharacterCath, kCarRedSleeping, 7850) && cathHasItem(kItemFirebird) && !_doneNIS[kEventVassiliCompartmentStealEgg]) {
setDoor(48, kCharacterVassili, 0, 0, 9);
} else {
setDoor(48, kCharacterCath, 0, 0, 9);
@@ -724,9 +724,9 @@ void LogicManager::HAND_Vassili_InPart4(HAND_PARAMS) {
case 0:
if (inComp(kCharacterCath, kCarRedSleeping, 8200)) {
if (getCharacterCurrentParams(kCharacterVassili)[2] ||
- (getCharacterCurrentParams(kCharacterVassili)[2] = _currentGameSessionTicks + getCharacterCurrentParams(kCharacterVassili)[0],
- _currentGameSessionTicks + getCharacterCurrentParams(kCharacterVassili)[0] != 0)) {
- if (getCharacterCurrentParams(kCharacterVassili)[2] >= _currentGameSessionTicks)
+ (getCharacterCurrentParams(kCharacterVassili)[2] = _realTime + getCharacterCurrentParams(kCharacterVassili)[0],
+ _realTime + getCharacterCurrentParams(kCharacterVassili)[0] != 0)) {
+ if (getCharacterCurrentParams(kCharacterVassili)[2] >= _realTime)
break;
getCharacterCurrentParams(kCharacterVassili)[2] = 0x7FFFFFFF;
diff --git a/engines/lastexpress/characters/vesna.cpp b/engines/lastexpress/characters/vesna.cpp
index 682d98b65fe..5d34eb8772c 100644
--- a/engines/lastexpress/characters/vesna.cpp
+++ b/engines/lastexpress/characters/vesna.cpp
@@ -402,8 +402,8 @@ void LogicManager::HAND_Vesna_HomeAlone(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (getCharacterCurrentParams(kCharacterVesna)[2]) {
- if (getCharacterCurrentParams(kCharacterVesna)[6] || (getCharacterCurrentParams(kCharacterVesna)[6] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterVesna)[6] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterVesna)[6] || (getCharacterCurrentParams(kCharacterVesna)[6] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterVesna)[6] >= _realTime)
break;
getCharacterCurrentParams(kCharacterVesna)[6] = 0x7FFFFFFF;
@@ -793,7 +793,7 @@ void LogicManager::CONS_Vesna_InComp(CONS_PARAMS) {
void LogicManager::HAND_Vesna_InComp(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (_gameProgress[kProgressField54] && getCharacterCurrentParams(kCharacterVesna)[6] != 0x7FFFFFFF && _gameTime) {
+ if (_globals[kProgressField54] && getCharacterCurrentParams(kCharacterVesna)[6] != 0x7FFFFFFF && _gameTime) {
if (_gameTime > 2250000) {
getCharacterCurrentParams(kCharacterVesna)[6] = 0x7FFFFFFF;
CONS_Vesna_KillAnna(0, 0, 0, 0);
@@ -816,8 +816,8 @@ void LogicManager::HAND_Vesna_InComp(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterVesna)[1]) {
- if (getCharacterCurrentParams(kCharacterVesna)[7] || (getCharacterCurrentParams(kCharacterVesna)[7] = _currentGameSessionTicks + 75, _currentGameSessionTicks != -75)) {
- if (getCharacterCurrentParams(kCharacterVesna)[7] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterVesna)[7] || (getCharacterCurrentParams(kCharacterVesna)[7] = _realTime + 75, _realTime != -75)) {
+ if (getCharacterCurrentParams(kCharacterVesna)[7] >= _realTime)
break;
getCharacterCurrentParams(kCharacterVesna)[7] = 0x7FFFFFFF;
@@ -1423,8 +1423,8 @@ void LogicManager::HAND_Vesna_Climbing(HAND_PARAMS) {
bool skip = false;
if (!getCharacterCurrentParams(kCharacterVesna)[0]) {
- if (getCharacterCurrentParams(kCharacterVesna)[2] || (getCharacterCurrentParams(kCharacterVesna)[2] = _currentGameSessionTicks + 120, _currentGameSessionTicks != -120)) {
- if (getCharacterCurrentParams(kCharacterVesna)[2] >= _currentGameSessionTicks) {
+ if (getCharacterCurrentParams(kCharacterVesna)[2] || (getCharacterCurrentParams(kCharacterVesna)[2] = _realTime + 120, _realTime != -120)) {
+ if (getCharacterCurrentParams(kCharacterVesna)[2] >= _realTime) {
skip = true;
}
@@ -1439,8 +1439,8 @@ void LogicManager::HAND_Vesna_Climbing(HAND_PARAMS) {
}
}
- if (getCharacterCurrentParams(kCharacterVesna)[3] || (getCharacterCurrentParams(kCharacterVesna)[3] = _currentGameSessionTicks + 180, _currentGameSessionTicks != -180)) {
- if (getCharacterCurrentParams(kCharacterVesna)[3] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterVesna)[3] || (getCharacterCurrentParams(kCharacterVesna)[3] = _realTime + 180, _realTime != -180)) {
+ if (getCharacterCurrentParams(kCharacterVesna)[3] >= _realTime)
break;
getCharacterCurrentParams(kCharacterVesna)[3] = 0x7FFFFFFF;
diff --git a/engines/lastexpress/characters/waiter1.cpp b/engines/lastexpress/characters/waiter1.cpp
index 089a1eaf116..abbe74961c3 100644
--- a/engines/lastexpress/characters/waiter1.cpp
+++ b/engines/lastexpress/characters/waiter1.cpp
@@ -389,7 +389,7 @@ void LogicManager::HAND_Waiter1_AbbotCheckMe(HAND_PARAMS) {
startCycOtis(kCharacterWaiter1, "029D");
getCharacter(kCharacterWaiter1).callbacks[getCharacter(kCharacterWaiter1).currentCall + 8] = 2;
- if (_gameProgress[kProgressChapter] != 3) {
+ if (_globals[kProgressChapter] != 3) {
Waiter1Call(&LogicManager::CONS_Waiter1_DoDialog, "Abb4001", 0, 0, 0);
} else {
Waiter1Call(&LogicManager::CONS_Waiter1_DoDialog, "Abb3016", 0, 0, 0);
diff --git a/engines/lastexpress/characters/yasmin.cpp b/engines/lastexpress/characters/yasmin.cpp
index 989737e6df5..80d5a0cfea4 100644
--- a/engines/lastexpress/characters/yasmin.cpp
+++ b/engines/lastexpress/characters/yasmin.cpp
@@ -817,8 +817,8 @@ void LogicManager::HAND_Yasmin_Hiding(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (!whoRunningDialog(kCharacterYasmin)) {
- if (getCharacterCurrentParams(kCharacterYasmin)[0] || (getCharacterCurrentParams(kCharacterYasmin)[0] = _currentGameSessionTicks + 450, _currentGameSessionTicks != -450)) {
- if (getCharacterCurrentParams(kCharacterYasmin)[0] >= _currentGameSessionTicks)
+ if (getCharacterCurrentParams(kCharacterYasmin)[0] || (getCharacterCurrentParams(kCharacterYasmin)[0] = _realTime + 450, _realTime != -450)) {
+ if (getCharacterCurrentParams(kCharacterYasmin)[0] >= _realTime)
return;
getCharacterCurrentParams(kCharacterYasmin)[0] = 0x7FFFFFFF;
diff --git a/engines/lastexpress/data/archive.cpp b/engines/lastexpress/data/archive.cpp
index 7d318e8b0fb..f45f6831bb1 100644
--- a/engines/lastexpress/data/archive.cpp
+++ b/engines/lastexpress/data/archive.cpp
@@ -320,7 +320,7 @@ int ArchiveManager::loadBG(const char *filename) {
if (_engine->getLogicManager()->_doubleClickFlag &&
(_engine->mouseHasLeftClicked() || _engine->mouseHasRightClicked()) &&
- _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_trainNodeIndex].car != 128) {
+ _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_activeNode].property != kNodeAutoWalk) {
return -1;
}
@@ -348,7 +348,7 @@ int ArchiveManager::loadBG(const char *filename) {
keepGoing = _engine->getGraphicsManager()->decomp16(_engine->getGraphicsManager()->_backgroundCompBuffer, 0x4000);
keepGoing &= (!_engine->getLogicManager()->_doubleClickFlag ||
(!_engine->mouseHasLeftClicked() && !_engine->mouseHasRightClicked()) ||
- _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_trainNodeIndex].car == 0x80);
+ _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_activeNode].property == kNodeAutoWalk);
} while (keepGoing);
_engine->getGraphicsManager()->modifyPalette(bgSurface, 640 * 480);
@@ -356,7 +356,7 @@ int ArchiveManager::loadBG(const char *filename) {
if (_engine->getLogicManager()->_doubleClickFlag &&
(_engine->mouseHasLeftClicked() || _engine->mouseHasRightClicked()) &&
- _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_trainNodeIndex].car != 128) {
+ _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_activeNode].property != kNodeAutoWalk) {
return -1;
} else {
for (int32 i = _engine->getGraphicsManager()->_renderBox1.y - 1 + _engine->getGraphicsManager()->_renderBox1.height; i >= _engine->getGraphicsManager()->_renderBox1.y; i--) {
@@ -385,7 +385,7 @@ int ArchiveManager::loadBG(const char *filename) {
if (_engine->getLogicManager()->_doubleClickFlag &&
(_engine->mouseHasLeftClicked() || _engine->mouseHasRightClicked()) &&
- _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_trainNodeIndex].car != 128) {
+ _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_activeNode].property != kNodeAutoWalk) {
return -1;
} else {
diff --git a/engines/lastexpress/data/cvcrfile.h b/engines/lastexpress/data/cvcrfile.h
index 324545ffb3f..3e841da13a7 100644
--- a/engines/lastexpress/data/cvcrfile.h
+++ b/engines/lastexpress/data/cvcrfile.h
@@ -37,22 +37,22 @@ namespace LastExpress {
#define CVCRMODE_RWB 2
struct SVCRFileHeader {
- int32 signature;
- int32 numSavePoints;
- int32 offset;
- int32 savePointsOffset;
- int32 skipSoundLoading;
- int32 gammaLevel;
+ int32 magicNumber;
+ int32 numVCRGames;
+ int32 nextWritePos;
+ int32 realWritePos;
+ int32 lastIsTemporary;
+ int32 brightness;
int32 volume;
int32 saveVersion;
};
struct SVCRSavePointHeader {
- int32 signature;
- int32 saveType;
- int32 gameTime;
- int32 headerSize;
- int32 chapter;
+ int32 magicNumber;
+ int32 type;
+ int32 time;
+ int32 size;
+ int32 partNumber;
int32 latestGameEvent;
int32 emptyField1;
int32 emptyField2;
diff --git a/engines/lastexpress/data/gold_archive.cpp b/engines/lastexpress/data/gold_archive.cpp
index 0f74f8e5180..8ccb94b41fa 100644
--- a/engines/lastexpress/data/gold_archive.cpp
+++ b/engines/lastexpress/data/gold_archive.cpp
@@ -171,7 +171,7 @@ int GoldArchiveManager::loadBG(const char *filename) {
if (_engine->getLogicManager()->_doubleClickFlag &&
(_engine->mouseHasLeftClicked() || _engine->mouseHasRightClicked()) &&
- _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_trainNodeIndex].car != 128) {
+ _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_activeNode].property != kNodeAutoWalk) {
return -1;
}
@@ -217,7 +217,7 @@ int GoldArchiveManager::loadBG(const char *filename) {
if (_engine->getLogicManager()->_doubleClickFlag &&
(_engine->mouseHasLeftClicked() || _engine->mouseHasRightClicked()) &&
- _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_trainNodeIndex].car != 128) {
+ _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_activeNode].property != kNodeAutoWalk) {
return -1;
} else {
for (int32 i = _engine->getGraphicsManager()->_renderBox1.y - 1 + _engine->getGraphicsManager()->_renderBox1.height; i >= _engine->getGraphicsManager()->_renderBox1.y; i--) {
@@ -246,7 +246,7 @@ int GoldArchiveManager::loadBG(const char *filename) {
if (_engine->getLogicManager()->_doubleClickFlag &&
(_engine->mouseHasLeftClicked() || _engine->mouseHasRightClicked()) &&
- _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_trainNodeIndex].car != 128) {
+ _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_activeNode].property != kNodeAutoWalk) {
return -1;
} else {
diff --git a/engines/lastexpress/debug.cpp b/engines/lastexpress/debug.cpp
index 3048b0f9c3a..156b67d9167 100644
--- a/engines/lastexpress/debug.cpp
+++ b/engines/lastexpress/debug.cpp
@@ -49,6 +49,10 @@ typedef struct ImGuiState {
int _currentTab = 0;
int _selectedCharacter = -1;
bool _forceReturnToListView = false;
+ float _rightPanelWidth = 0.0f;
+ float _bottomPanelHeight = 0.0f;
+ float _rightTopPanelHeight = 0.0f;
+ int _ticksToAdvance = 0;
} ImGuiState;
ImGuiState *_state = nullptr;
@@ -70,14 +74,12 @@ void onImGuiRender() {
ImGui::GetIO().ConfigFlags &= ~(ImGuiConfigFlags_NoMouseCursorChange | ImGuiConfigFlags_NoMouse);
- // Create a single debug window
- ImGui::SetNextWindowSize(ImVec2(1400, 900), ImGuiCond_FirstUseEver);
+ ImGui::SetNextWindowSize(ImVec2(1400, 1000), ImGuiCond_FirstUseEver);
ImGui::SetNextWindowPos(ImVec2(30, 30), ImGuiCond_FirstUseEver);
- // Static variables to track layout sizes
- static float rightPanelWidth = 300.0f;
- static float bottomPanelHeight = 280.0f;
- static float rightTopPanelHeight = 200.0f;
+ _state->_rightPanelWidth = 300.0f;
+ _state->_bottomPanelHeight = 280.0f;
+ _state->_rightTopPanelHeight = 200.0f;
// Disable the debugger when the NIS engine is running...
if (_state->_engine->getNISManager()->getNISFlag() & kNisFlagPlaying)
@@ -88,28 +90,26 @@ void onImGuiRender() {
return;
if (ImGui::Begin("Last Express Debugger")) {
- // Get available content area
ImVec2 windowSize = ImGui::GetContentRegionAvail();
- // Right panel splitter
+ // Right panel splitter...
{
- ImGui::SameLine(windowSize.x - rightPanelWidth - 8);
+ ImGui::SameLine(windowSize.x - _state->_rightPanelWidth - 8);
ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.5f, 0.5f, 0.5f, 0.3f));
ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 0.0f);
- ImGui::Button("##vsplitter", ImVec2(8, windowSize.y - bottomPanelHeight));
+ ImGui::Button("##vsplitter", ImVec2(8, windowSize.y - _state->_bottomPanelHeight));
ImGui::PopStyleVar();
ImGui::PopStyleColor();
if (ImGui::IsItemActive())
- rightPanelWidth += ImGui::GetIO().MouseDelta.x * -1.0f;
+ _state->_rightPanelWidth += ImGui::GetIO().MouseDelta.x * -1.0f;
- // Clamp to reasonable values
- rightPanelWidth = CLIP<float>(rightPanelWidth, 150.0f, windowSize.x * 0.7f);
+ _state->_rightPanelWidth = CLIP<float>(_state->_rightPanelWidth, 150.0f, windowSize.x * 0.7f);
}
- // Bottom panel splitter
+ // Bottom panel splitter...
{
- float splitterY = windowSize.y - bottomPanelHeight - 8;
+ float splitterY = windowSize.y - _state->_bottomPanelHeight - 8;
ImGui::SetCursorPosY(splitterY);
ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.5f, 0.5f, 0.5f, 0.3f));
ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 0.0f);
@@ -118,40 +118,36 @@ void onImGuiRender() {
ImGui::PopStyleColor();
if (ImGui::IsItemActive())
- bottomPanelHeight += ImGui::GetIO().MouseDelta.y * -1.0f;
+ _state->_bottomPanelHeight += ImGui::GetIO().MouseDelta.y * -1.0f;
- // Clamp to reasonable values
- bottomPanelHeight = CLIP<float>(bottomPanelHeight, 150.0f, windowSize.y * 0.7f);
+ _state->_bottomPanelHeight = CLIP<float>(_state->_bottomPanelHeight, 150.0f, windowSize.y * 0.7f);
}
- // Right panel splitter (between top and bottom sections)
+ // Right panel splitter (between top and bottom sections)...
{
- ImGui::SetCursorPos(ImVec2(windowSize.x - rightPanelWidth, rightTopPanelHeight));
+ ImGui::SetCursorPos(ImVec2(windowSize.x - _state->_rightPanelWidth, _state->_rightTopPanelHeight));
ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.5f, 0.5f, 0.5f, 0.3f));
ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 0.0f);
- ImGui::Button("##rightsplitter", ImVec2(rightPanelWidth, 8));
+ ImGui::Button("##rightsplitter", ImVec2(_state->_rightPanelWidth, 8));
ImGui::PopStyleVar();
ImGui::PopStyleColor();
if (ImGui::IsItemActive())
- rightTopPanelHeight += ImGui::GetIO().MouseDelta.y;
+ _state->_rightTopPanelHeight += ImGui::GetIO().MouseDelta.y;
- // Clamp to reasonable values
- rightTopPanelHeight = CLIP<float>(rightTopPanelHeight, 100.0f, windowSize.y - bottomPanelHeight - 100.0f);
+ _state->_rightTopPanelHeight = CLIP<float>(_state->_rightTopPanelHeight, 100.0f, windowSize.y - _state->_bottomPanelHeight - 100.0f);
}
- // Main area dimensions (left of right panel, above bottom panel)
- float mainAreaWidth = windowSize.x - rightPanelWidth - 8;
- float mainAreaHeight = windowSize.y - bottomPanelHeight - 8;
+ float mainAreaWidth = windowSize.x - _state->_rightPanelWidth - 8;
+ float mainAreaHeight = windowSize.y - _state->_bottomPanelHeight - 8;
// Top-left: Character Debugger
ImGui::SetCursorPos(ImVec2(0, 16));
ImGui::BeginChild("CharacterDebugger", ImVec2(mainAreaWidth, mainAreaHeight), true);
{
- // Tab bar and all character debugger content
ImGuiTabItemFlags flags = 0;
- // Tab bar for different views
+ // Tab bar for different views...
if (ImGui::BeginTabBar("CharacterViews")) {
if (_state->_forceReturnToListView) {
_state->_forceReturnToListView = false;
@@ -176,14 +172,14 @@ void onImGuiRender() {
ImGui::EndTabBar();
}
- // Filter for character names
+ // Update the character filter...
_state->_filter.Draw("Filter Characters", 180);
ImGui::SameLine();
if (ImGui::Button("Clear")) {
_state->_filter.Clear();
}
- // Show corresponding view based on selected tab
+ // Show corresponding view based on selected tab...
switch (_state->_currentTab) {
case 0: // List View
_state->_engine->getLogicManager()->renderCharacterList(_state->_selectedCharacter);
@@ -201,15 +197,15 @@ void onImGuiRender() {
// Top-right panels
// Top-right is Clock
ImGui::SetCursorPos(ImVec2(mainAreaWidth + 8, 16));
- ImGui::BeginChild("Clock", ImVec2(rightPanelWidth, rightTopPanelHeight), true);
+ ImGui::BeginChild("Clock", ImVec2(_state->_rightPanelWidth, _state->_rightTopPanelHeight), true);
{
_state->_engine->getClock()->showCurrentTime();
}
ImGui::EndChild();
// Bottom-right is Where's Cath?
- ImGui::SetCursorPos(ImVec2(mainAreaWidth + 8, rightTopPanelHeight + 8));
- ImGui::BeginChild("CathInfo", ImVec2(rightPanelWidth, mainAreaHeight - rightTopPanelHeight - 8), true);
+ ImGui::SetCursorPos(ImVec2(mainAreaWidth + 8, _state->_rightTopPanelHeight + 8));
+ ImGui::BeginChild("CathInfo", ImVec2(_state->_rightPanelWidth, mainAreaHeight - _state->_rightTopPanelHeight - 8), true);
{
ImGui::Text("Where's Cath?");
ImGui::Separator();
@@ -218,8 +214,8 @@ void onImGuiRender() {
ImGui::EndChild();
// Bottom-right is Where's Cath?
- ImGui::SetCursorPos(ImVec2(mainAreaWidth + 8, rightTopPanelHeight * 2 - 16));
- ImGui::BeginChild("EngineInfo", ImVec2(rightPanelWidth, mainAreaHeight - (rightTopPanelHeight * 2 - 16)), true);
+ ImGui::SetCursorPos(ImVec2(mainAreaWidth + 8, _state->_rightTopPanelHeight * 2 - 16));
+ ImGui::BeginChild("EngineInfo", ImVec2(_state->_rightPanelWidth, mainAreaHeight - (_state->_rightTopPanelHeight * 2 - 16)), true);
{
ImGui::Text("Engine Info");
ImGui::Separator();
@@ -228,11 +224,10 @@ void onImGuiRender() {
ImGui::EndChild();
- // Bottom panel: Train Map (full width)
- ImGui::SetCursorPos(ImVec2(0, windowSize.y - bottomPanelHeight));
- ImGui::BeginChild("TrainMap", ImVec2(windowSize.x, bottomPanelHeight), true);
+ // Bottom panel: Train Map
+ ImGui::SetCursorPos(ImVec2(0, windowSize.y - _state->_bottomPanelHeight));
+ ImGui::BeginChild("TrainMap", ImVec2(windowSize.x, _state->_bottomPanelHeight), true);
{
- // Draw train map without the window decorations
_state->_engine->getLogicManager()->showTrainMapWindow();
}
ImGui::EndChild();
@@ -246,7 +241,7 @@ void onImGuiCleanup() {
}
void Clock::showCurrentTime() {
- int timeSource = (int)_engine->getLogicManager()->getGameTime();
+ int timeSource = _engine->getMenu()->isShowingMenu() ? _engine->getClock()->getTimeShowing() : (int)_engine->getLogicManager()->getGameTime();
int hours = timeSource % 1296000 / 54000;
int minutes = timeSource % 54000 / 900 % 60 % 60;
@@ -272,7 +267,7 @@ void Clock::showCurrentTime() {
char dayText[32];
int dayOffset = timeSource / 1296000;
- Common::sprintf_s(dayText, "July %d, 1914", 24 + dayOffset); // Calculate date based on days since start
+ Common::sprintf_s(dayText, "July %d, 1914", 24 + dayOffset); // The game starts in July 24, 1914...
drawList->AddText(
ImGui::GetFont(),
@@ -284,28 +279,55 @@ void Clock::showCurrentTime() {
ImGui::Text("Game time: %d", _engine->getLogicManager()->getGameTime());
- ImGui::Text("Game time ticks: %d", _engine->getLogicManager()->getGameTimeTicks());
- ImGui::Text("Game time ticks delta: %d", _engine->getLogicManager()->getGameTimeTicksDelta());
+ ImGui::Text("Real time: %d", _engine->getLogicManager()->getRealTime());
+ ImGui::Text("Time speed: %d", _engine->getLogicManager()->getTimeSpeed());
ImGui::Text("Grace timer: %d", _engine->_gracePeriodTimer);
ImGui::Separator();
}
+Common::String LogicManager::translateNodeProperty(int property) {
+ Common::StringArray properties = {
+ "No Property",
+ "Has Door",
+ "Has Item",
+ "Has 2 Items",
+ "Has Door Item",
+ "Has 3 Items",
+ "Model Pad",
+ "Soft Point",
+ "Soft Point Item",
+ "Auto Walk",
+ "Sleeping On Bed",
+ "Beetle Area",
+ "Pulling Emergency Stop",
+ "Rebecca's Diary",
+ "Stops Fast Walk"
+ };
+
+ if (property >= 0 && property <= 9) {
+ return properties[property];
+ } else if (property >= 128 && property <= 133) {
+ return properties[property - 128 + 9];
+ } else {
+ return "Unknown property " + Common::String(property);
+ }
+}
+
void LogicManager::showCurrentTrainNode() {
- ImGui::Text("Flags: %u", _trainData[_trainNodeIndex].car);
- ImGui::Text("Direction: %u", _trainData[_trainNodeIndex].cathDir);
+ ImGui::Text("Node property: %s", translateNodeProperty(_trainData[_activeNode].property).c_str());
+ ImGui::Text("Direction: %u", _trainData[_activeNode].cathDir);
ImGui::Text("Node position:");
- ImGui::BulletText("Car %u", _trainData[_trainNodeIndex].nodePosition.car);
- ImGui::BulletText("Location %u", _trainData[_trainNodeIndex].nodePosition.location);
- ImGui::BulletText("Position %u", _trainData[_trainNodeIndex].nodePosition.position);
+ ImGui::BulletText("Car %u", _trainData[_activeNode].nodePosition.car);
+ ImGui::BulletText("Location %u", _trainData[_activeNode].nodePosition.location);
+ ImGui::BulletText("Position %u", _trainData[_activeNode].nodePosition.position);
- ImGui::Text("Parameters: %u %u %u", _trainData[_trainNodeIndex].parameter1, _trainData[_trainNodeIndex].parameter2, _trainData[_trainNodeIndex].parameter3);
- ImGui::Text("Scene filename: %s", _trainData[_trainNodeIndex].sceneFilename);
+ ImGui::Text("Parameters: %u %u %u", _trainData[_activeNode].parameter1, _trainData[_activeNode].parameter2, _trainData[_activeNode].parameter3);
+ ImGui::Text("Scene filename: %s", _trainData[_activeNode].sceneFilename);
}
void LogicManager::showCharacterDebugger() {
ImGuiTabItemFlags flags = 0;
- // Tab bar for different views
if (ImGui::BeginTabBar("CharacterViews")) {
if (_state->_forceReturnToListView) {
_state->_forceReturnToListView = false;
@@ -330,51 +352,43 @@ void LogicManager::showCharacterDebugger() {
ImGui::EndTabBar();
}
- // Filter for character names
_state->_filter.Draw("Filter Characters", 180);
ImGui::SameLine();
if (ImGui::Button("Clear")) {
_state->_filter.Clear();
}
- // Show corresponding view based on selected tab
switch (_state->_currentTab) {
case 0: // List View
renderCharacterList(_state->_selectedCharacter);
break;
- case 1: // Grid View
- renderCharacterGrid(false, _state->_selectedCharacter); // Show all characters
+ case 1: // Grid View
+ renderCharacterGrid(false, _state->_selectedCharacter);
break;
- case 2: // Pinned Characters
- renderCharacterGrid(true, _state->_selectedCharacter); // Show only pinned characters
+ case 2: // Pinned Characters
+ renderCharacterGrid(true, _state->_selectedCharacter);
break;
}
}
-// List view with details panel
void LogicManager::renderCharacterList(int &selectedCharacter) {
- // Left panel: Character list
ImGui::BeginChild("CharacterList", ImVec2(200, 0), true);
for (int i = 0; i < 40; i++) {
- // Get character and skip if it doesn't match filter
Character *character = &getCharacter(i);
if (!character)
continue;
- // Format display string and filter
char buffer[64];
Common::sprintf_s(buffer, "%s (%d)", getCharacterName(i), i);
if (!_state->_filter.PassFilter(buffer))
continue;
- // Check if character is pinned
bool isPinned = isCharacterPinned(i);
if (isPinned) {
- ImGui::PushStyleColor(ImGuiCol_Text, IM_COL32(255, 220, 0, 255)); // Yellow for pinned
+ ImGui::PushStyleColor(ImGuiCol_Text, IM_COL32(255, 220, 0, 255)); // Yellow for pinned...
}
- // Make the character selectable
if (ImGui::Selectable(buffer, selectedCharacter == i)) {
selectedCharacter = i;
}
@@ -383,7 +397,6 @@ void LogicManager::renderCharacterList(int &selectedCharacter) {
ImGui::PopStyleColor();
}
- // Right-click menu for pinning/unpinning
if (ImGui::BeginPopupContextItem()) {
if (ImGui::MenuItem(isPinned ? "Unpin Character" : "Pin Character")) {
toggleCharacterPin(i);
@@ -416,17 +429,16 @@ Common::StringArray LogicManager::getCharacterFunctionNames(int character) {
}
void LogicManager::showTrainMapWindow() {
- // Colors for different cars
- ImVec4 restaurantColor = ImVec4(0.95f, 0.6f, 0.6f, 1.0f); // Pink/red for restaurant
- ImVec4 loungeColor = ImVec4(0.8f, 0.6f, 0.8f, 1.0f); // Violet for lounge
- ImVec4 redSleepingColor = ImVec4(0.95f, 0.7f, 0.7f, 1.0f); // Light red for red sleeping car
- ImVec4 greenSleepingColor = ImVec4(0.7f, 0.95f, 0.7f, 1.0f); // Light green for green sleeping car
- ImVec4 vestibuleColor = ImVec4(0.8f, 0.7f, 0.6f, 1.0f); // Brown for vestibule
- ImVec4 kronosColor = ImVec4(0.95f, 0.9f, 0.6f, 1.0f); // Yellow for Kronos car
- ImVec4 characterColor = ImVec4(1.0f, 0.8f, 0.0f, 1.0f); // Yellow for characters
- ImVec4 cathColor = ImVec4(1.0f, 0.0f, 0.0f, 1.0f); // Red for Cath
- ImVec4 voidColor = ImVec4(0.2f, 0.2f, 0.3f, 1.0f); // Dark blue/purple for void
- ImVec4 corridorColor = ImVec4(0.4f, 0.4f, 0.4f, 0.5f); // Gray for corridors
+ ImVec4 restaurantColor = ImVec4(0.95f, 0.6f, 0.6f, 1.0f); // Pink/red
+ ImVec4 loungeColor = ImVec4(0.8f, 0.6f, 0.8f, 1.0f); // Violet
+ ImVec4 redSleepingColor = ImVec4(0.95f, 0.7f, 0.7f, 1.0f); // Light red
+ ImVec4 greenSleepingColor = ImVec4(0.7f, 0.95f, 0.7f, 1.0f); // Light green
+ ImVec4 vestibuleColor = ImVec4(0.8f, 0.7f, 0.6f, 1.0f); // Brown
+ ImVec4 kronosColor = ImVec4(0.95f, 0.9f, 0.6f, 1.0f); // Yellow
+ ImVec4 characterColor = ImVec4(1.0f, 0.8f, 0.0f, 1.0f); // Yellow
+ ImVec4 cathColor = ImVec4(1.0f, 0.0f, 0.0f, 1.0f); // Red
+ ImVec4 voidColor = ImVec4(0.2f, 0.2f, 0.3f, 1.0f); // Dark blue/purple
+ ImVec4 corridorColor = ImVec4(0.4f, 0.4f, 0.4f, 0.5f); // Gray
Common::HashMap<int, int> compartmentsPositions;
compartmentsPositions[2740] = 7;
@@ -440,24 +452,25 @@ void LogicManager::showTrainMapWindow() {
// Train layout
struct CarInfo {
- int id; // Car ID number
- const char *name; // Car name
- ImVec4 color; // Car color
- float width; // Relative width (1.0 = standard)
- int compartments; // Number of compartments
- bool isSleeper; // Is it a sleeping car?
+ int id;
+ const char *name;
+ ImVec4 color;
+ float width;
+ int compartments;
+ bool isSleeper;
};
CarInfo cars[] = {
- {kCarRestaurant, "Restaurant Car", restaurantColor, 1.6f, 6, false},
- {kCarRedSleeping, "Red Sleeping Car", redSleepingColor, 1.2f, 8, true},
- {kCarGreenSleeping, "Green Sleeping Car", greenSleepingColor, 1.2f, 8, true},
- {kCarVestibule, "Vestibule", vestibuleColor, 0.3f, 1, false},
- {kCarKronos, "Kronos Car", kronosColor, 1.0f, 3, false}};
+ { kCarRestaurant, "Restaurant Car", restaurantColor, 1.6f, 6, false},
+ { kCarRedSleeping, "Red Sleeping Car", redSleepingColor, 1.2f, 8, true },
+ { kCarGreenSleeping, "Green Sleeping Car", greenSleepingColor, 1.2f, 8, true },
+ { kCarVestibule, "Vestibule", vestibuleColor, 0.3f, 1, false},
+ { kCarKronos, "Kronos Car", kronosColor, 1.0f, 3, false}
+ };
const int carCount = sizeof(cars) / sizeof(cars[0]);
- // Calculate total relative width to scale properly
+ // Calculate total relative width to scale properly...
float totalRelativeWidth = 0;
for (int i = 0; i < carCount; i++) {
totalRelativeWidth += cars[i].width;
@@ -468,19 +481,21 @@ void LogicManager::showTrainMapWindow() {
const float carHeight = 140;
const float corridorHeight = 50;
- // Character position mapping
+ // Character position mapping...
struct CharPos {
int car;
int compartment;
bool inCorridor;
- int charIndex; // Store the character index
+ int charIndex;
int position;
};
+
Common::Array<CharPos> charPositions;
- Common::Array<CharPos> voidCharPositions; // For characters in the void (car 0)
+ Common::Array<CharPos> voidCharPositions;
- // Collect character positions
+ // Collect character positions...
for (int i = 0; i < 40; i++) {
+ // These are basically invisible entities, not real characters...
if (i == kCharacterClerk || i == kCharacterMaster || i == kCharacterMitchell)
continue;
@@ -502,14 +517,14 @@ void LogicManager::showTrainMapWindow() {
}
}
- // Draw train cars
- float carX = 10; // Starting position
+ // Draw train cars...
+ float carX = 10; // Starting position!
for (int c = 0; c < carCount; c++) {
CarInfo &car = cars[c];
float carWidth = unitWidth * car.width;
- // Draw car outline
+ // Draw car outline...
ImDrawList *drawList = ImGui::GetWindowDrawList();
ImVec2 carMin;
carMin.x = ImGui::GetWindowPos().x + carX;
@@ -518,34 +533,35 @@ void LogicManager::showTrainMapWindow() {
carMax.x = carMin.x + carWidth;
carMax.y = carMin.y + carHeight;
- // Draw car body
+ // Draw car body...
drawList->AddRectFilled(
carMin,
carMax,
ImGui::ColorConvertFloat4ToU32(car.color),
5.0f);
- // Corridor position - default is center for non-sleeper cars
+ // Corridor position - default is center for non-sleeper cars...
float corridorY = carMin.y + (carHeight - corridorHeight) / 2;
- // For sleeper cars, special layout
+ // For sleeper cars, special layout...
if (car.isSleeper) {
- // Sleeping car with 8 compartments with specific positioning
- // Position 8600 (left) to 2000 (right) for compartments
+ // Sleeping car with 8 compartments;
+ // position 8600 (left) to 2000 (right) mark the start and
+ // the end (empirical values ;-) )...
- // Calculate the actual start and end points for compartments
+ // Calculate the actual start and end points for compartments...
float leftmostPos = 8600.0f;
float rightmostPos = 2000.0f;
- // Calculate what percentage of the car width the compartments occupy
+ // Calculate what percentage of the car width the compartments occupy...
float leftEdgeRatio = 1.0f - (leftmostPos / 10000.0f);
float rightEdgeRatio = 1.0f - (rightmostPos / 10000.0f);
- // Calculate the actual pixel positions
+ // Calculate the actual pixel positions...
float compartmentLeftEdge = carMin.x + (carWidth * leftEdgeRatio);
float compartmentRightEdge = carMin.x + (carWidth * rightEdgeRatio);
- // Draw corridor at the bottom (full width of car)
+ // Draw corridor at the bottom (full width of car)...
corridorY = carMin.y + carHeight - corridorHeight;
drawList->AddRectFilled(
ImVec2(carMin.x, corridorY),
@@ -554,6 +570,8 @@ void LogicManager::showTrainMapWindow() {
0.0f);
// Draw corridor-colored areas on both sides of the compartments
+ // (where the compartements rooms end and the door to the next one is nearby)
+
// Left side (beyond compartments)
drawList->AddRectFilled(
ImVec2(carMin.x, carMin.y),
@@ -568,14 +586,14 @@ void LogicManager::showTrainMapWindow() {
ImGui::ColorConvertFloat4ToU32(corridorColor),
0.0f);
- // Calculate width of each compartment
+ // Calculate width of each compartment...
float compartmentWidth = (compartmentRightEdge - compartmentLeftEdge) / 8;
- // Draw the 8 compartments between the calculated edges
+ // Draw the 8 compartments between the calculated edges...
for (int i = 0; i <= 8; i++) {
float x = compartmentLeftEdge + (i * compartmentWidth);
- // Draw compartment divisions
+ // Draw compartment vertical walls...
drawList->AddLine(
ImVec2(x, carMin.y),
ImVec2(x, corridorY),
@@ -586,66 +604,70 @@ void LogicManager::showTrainMapWindow() {
// Restaurant car with two sections: lounge and restaurant
// Position 0-3749 = lounge (right side), 3750-10000 = restaurant (left side)
- // Calculate boundaries
+ // Calculate bounds...
float loungeRatio = 3750.0f / 10000.0f;
float loungeWidth = carWidth * loungeRatio;
float restaurantWidth = carWidth - loungeWidth;
- // Draw lounge section (right side)
+ // Draw lounge section (right side)...
drawList->AddRectFilled(
ImVec2(carMin.x + restaurantWidth, carMin.y),
ImVec2(carMax.x, carMax.y),
ImGui::ColorConvertFloat4ToU32(loungeColor),
- 0.0f);
+ 0.0f
+ );
- // Dividing line between lounge and restaurant
+ // Dividing wall between lounge and restaurant...
drawList->AddLine(
ImVec2(carMin.x + restaurantWidth, carMin.y),
ImVec2(carMin.x + restaurantWidth, carMax.y),
IM_COL32(0, 0, 0, 255),
- 2.0f);
+ 2.0f
+ );
- // Center corridor for the entire car
+ // Center corridor for the entire car...
corridorY = carMin.y + (carHeight - corridorHeight) / 2;
- // Draw corridor through both sections
+ // Draw corridor through both sections...
drawList->AddRectFilled(
ImVec2(carMin.x, corridorY),
ImVec2(carMax.x, corridorY + corridorHeight),
ImGui::ColorConvertFloat4ToU32(corridorColor),
0.0f);
- // Draw restaurant tables (in the restaurant section only)
+ // Draw restaurant tables...
float tableWidth = restaurantWidth / 3;
for (int i = 0; i < 3; i++) {
- // Draw table divisions
float tableX = carMin.x + i * tableWidth;
drawList->AddLine(
ImVec2(tableX, carMin.y),
ImVec2(tableX, corridorY),
IM_COL32(0, 0, 0, 255),
- 1.0f);
+ 1.0f
+ );
drawList->AddLine(
ImVec2(tableX, corridorY + corridorHeight),
ImVec2(tableX, carMax.y),
IM_COL32(0, 0, 0, 255),
- 1.0f);
+ 1.0f
+ );
- // Draw tables as white rectangles
drawList->AddRectFilled(
ImVec2(tableX + 5, carMin.y + 5),
ImVec2(tableX + tableWidth - 5, corridorY - 5),
IM_COL32(255, 255, 255, 255),
- 3.0f);
+ 3.0f
+ );
drawList->AddRectFilled(
ImVec2(tableX + 5, corridorY + corridorHeight + 5),
ImVec2(tableX + tableWidth - 5, carMax.y - 5),
IM_COL32(255, 255, 255, 255),
- 3.0f);
+ 3.0f
+ );
}
} else if (car.id == kCarKronos) {
// Kronos car with 3 sections
@@ -656,25 +678,28 @@ void LogicManager::showTrainMapWindow() {
ImVec2(carMin.x, corridorY),
ImVec2(carMax.x, corridorY + corridorHeight),
ImGui::ColorConvertFloat4ToU32(corridorColor),
- 0.0f);
+ 0.0f
+ );
for (int i = 0; i < 2; i++) {
drawList->AddLine(
ImVec2(carMin.x + (i + 1) * sectionWidth, carMin.y),
ImVec2(carMin.x + (i + 1) * sectionWidth, carMax.y),
IM_COL32(0, 0, 0, 255),
- 1.0f);
+ 1.0f
+ );
}
} else {
- // Default corridor for other cars
+ // Default corridor for other cars...
drawList->AddRectFilled(
ImVec2(carMin.x, corridorY),
ImVec2(carMax.x, corridorY + corridorHeight),
ImGui::ColorConvertFloat4ToU32(corridorColor),
- 0.0f);
+ 0.0f
+ );
}
- // Draw car name and ID
+ // Draw car name and ID...
char carName[32];
Common::sprintf_s(carName, "%s (%d)", car.name, car.id);
ImVec2 textSize = ImGui::CalcTextSize(carName);
@@ -683,39 +708,37 @@ void LogicManager::showTrainMapWindow() {
IM_COL32(255, 255, 255, 255),
carName);
- // Draw characters in this car
+ // Draw characters in this car...
for (int i = 0; i < charPositions.size(); i++) {
if (charPositions[i].car == car.id) {
- // Determine character position
float charX, charY;
- // If in corridor, position based on position value (0-10000)
if (charPositions[i].inCorridor) {
// Calculate position along the car based on the 0-10000 range
- // where 0 = rightmost edge and 10000 = leftmost edge
+ // where 0 = rightmost edge and 10000 = leftmost edge...
float positionRatio = (float)charPositions[i].position / 10000.0f;
- // Flip the ratio since 0 is right and 10000 is left
+ // Flip the ratio since 0 is right and 10000 is left...
positionRatio = 1.0f - positionRatio;
- // Set horizontal position based on the ratio
+ // Set horizontal position based on the ratio...
charX = carMin.x + (carWidth * positionRatio);
- // Set vertical position in the corridor
+ // Set vertical position in the corridor...
charY = corridorY + corridorHeight / 2;
+ // Let's see the player marker a little better, shall we? :-)
if (charPositions[i].charIndex == kCharacterCath) {
charY -= 10;
} else {
charY += 10;
}
} else {
- // For characters not in corridor, position in compartment
+ // For characters not in corridor...
int compartment = charPositions[i].compartment;
- // Position adapts to car type
if (car.isSleeper) {
- // Calculate compartment positions based on 8600-2000 range
+ // Calculate compartment positions based on the 8600-2000 range...
float leftmostPos = 8600.0f;
float rightmostPos = 2000.0f;
float leftEdgeRatio = 1.0f - (leftmostPos / 10000.0f);
@@ -724,33 +747,31 @@ void LogicManager::showTrainMapWindow() {
float compartmentRightEdge = carMin.x + (carWidth * rightEdgeRatio);
float compartmentWidth = (compartmentRightEdge - compartmentLeftEdge) / 8;
- // Ensure compartment is in valid range for this car type
- compartment = compartment % 8;
+ compartment = compartment % 8; // All 16 compartments are consecutive, so we mod by 8
// Calculate character position based on compartment
charX = compartmentLeftEdge + (compartment * compartmentWidth) + (compartmentWidth / 2);
charY = carMin.y + (corridorY - carMin.y) / 2;
} else if (car.id == kCarRestaurant) {
- // Restaurant car with lounge (0-3749) and restaurant (3750-10000) sections
+ // Restaurant car with lounge (0-3749) and restaurant (3750-10000) sections...
float loungeRatio = 3750.0f / 10000.0f;
float loungeWidth = carWidth * loungeRatio;
float restaurantWidth = carWidth - loungeWidth;
- // Center corridor for restaurant car
+ // Center corridor for restaurant car...
float restCorridorY = carMin.y + (carHeight - corridorHeight) / 2;
- // Check if character is in lounge or restaurant section based on position
+ // Check if character is in lounge or restaurant section based on position...
bool inLounge = (charPositions[i].position < 3750);
if (inLounge) {
- // Lounge area (right side of car)
+ // Lounge area (right side of car)...
charX = carMin.x + restaurantWidth + (loungeWidth / 2);
charY = restCorridorY + (compartment % 2 == 0 ? -restCorridorY / 2 : corridorHeight + restCorridorY / 2);
} else {
- // Restaurant area (left side of car)
+ // Restaurant area (left side of car)...
float tableWidth = restaurantWidth / 3;
- // Ensure compartment is in valid range for this car type
compartment = compartment % 6;
if (compartment < 3) { // Top side
@@ -762,29 +783,26 @@ void LogicManager::showTrainMapWindow() {
}
}
} else if (car.id == kCarKronos) {
- // Kronos car layout (3 sections)
float sectionWidth = carWidth / 3;
- // Ensure compartment is in valid range for this car type
compartment = compartment % 3;
charX = carMin.x + compartment * sectionWidth + sectionWidth / 2;
charY = carMin.y + carHeight / 2;
} else {
- // Default positioning for vestibule car
+ // Vestibule car or whatever else...
charX = carMin.x + carWidth / 2;
charY = carMin.y + carHeight / 2;
}
}
- // Draw character marker (circle)
+ // Draw character marker...
drawList->AddCircleFilled(
ImVec2(charX, charY),
8.0f,
ImGui::ColorConvertFloat4ToU32(charPositions[i].charIndex == kCharacterCath ? cathColor : characterColor),
12);
- // Character ID
char charId[8];
Common::sprintf_s(charId, "%d", charPositions[i].charIndex);
drawList->AddText(
@@ -792,7 +810,7 @@ void LogicManager::showTrainMapWindow() {
charPositions[i].charIndex == kCharacterCath ? IM_COL32(255, 255, 255, 255) : IM_COL32(0, 0, 0, 255),
charId);
- // Tooltip for character when hovered
+ // Tooltip!
ImGui::SetCursorScreenPos(ImVec2(charX - 8, charY - 8));
ImGui::InvisibleButton(charId, ImVec2(16, 16));
if (ImGui::IsItemHovered()) {
@@ -807,15 +825,15 @@ void LogicManager::showTrainMapWindow() {
}
}
- // Move to next car
+ // Move to next car...
carX += carWidth + 5;
}
- // Draw "The Void" section at the bottom
+ // Draw "The Void" section at the bottom...
if (voidCharPositions.size() > 0) {
ImDrawList *drawList = ImGui::GetWindowDrawList();
- // Draw void area
+ // Area...
ImVec2 voidMin;
voidMin.x = ImGui::GetWindowPos().x + 10;
voidMin.y = ImGui::GetWindowPos().y + 205; // Below the train cars
@@ -823,14 +841,15 @@ void LogicManager::showTrainMapWindow() {
voidMax.x = ImGui::GetWindowPos().x + ImGui::GetContentRegionAvail().x - 10;
voidMax.y = voidMin.y + 60;
- // Draw void rectangle
+ // Rectangle...
drawList->AddRectFilled(
voidMin,
voidMax,
ImGui::ColorConvertFloat4ToU32(voidColor),
- 5.0f);
+ 5.0f
+ );
- // Draw void label
+ // Label...
const char *voidLabel = "THE VOID (id: 0)";
ImVec2 textSize = ImGui::CalcTextSize(voidLabel);
drawList->AddText(
@@ -838,20 +857,18 @@ void LogicManager::showTrainMapWindow() {
IM_COL32(255, 255, 255, 255),
voidLabel);
- // Draw characters in the void
+ // Character markers...
float charSpacing = (voidMax.x - voidMin.x - 20) / (voidCharPositions.size() + 1);
for (int i = 0; i < voidCharPositions.size(); i++) {
float charX = voidMin.x + 10 + charSpacing * (i + 1);
float charY = voidMin.y + 35;
- // Draw character marker (circle)
drawList->AddCircleFilled(
ImVec2(charX, charY),
8.0f,
ImGui::ColorConvertFloat4ToU32(characterColor),
12);
- // Character ID
char charId[16];
Common::sprintf_s(charId, "%d", voidCharPositions[i].charIndex);
drawList->AddText(
@@ -859,7 +876,7 @@ void LogicManager::showTrainMapWindow() {
IM_COL32(0, 0, 0, 255),
charId);
- // Tooltip for character when hovered
+ // Tooltip! :-)
ImGui::SetCursorScreenPos(ImVec2(charX - 8, charY - 8));
ImGui::InvisibleButton(charId, ImVec2(16, 16));
if (ImGui::IsItemHovered()) {
@@ -872,36 +889,29 @@ void LogicManager::showTrainMapWindow() {
}
}
}
-
}
-// Grid view showing multiple characters at once
void LogicManager::renderCharacterGrid(bool onlyPinned, int &selectedCharacter) {
- // Number of characters to display per row
const int charsPerRow = 3;
int displayed = 0;
- // Calculate fixed width for each card (subtract some padding)
float windowWidth = ImGui::GetContentRegionAvail().x + ImGui::GetCursorScreenPos().x - ImGui::GetWindowPos().x;
float cardWidth = (windowWidth / charsPerRow) - 8;
for (int i = 0; i < 40; i++) {
- // Get character
+ // Get (and filter) character...
Character *character = &getCharacter(i);
if (!character)
continue;
- // Skip if filtering by pin status
if (onlyPinned && !isCharacterPinned(i))
continue;
- // Skip if doesn't match text filter
char buffer[64];
Common::sprintf_s(buffer, "%s (%d)", getCharacterName(i), i);
if (!_state->_filter.PassFilter(buffer))
continue;
- // Start a new row if needed
if (displayed > 0 && displayed % charsPerRow == 0) {
ImGui::NewLine();
} else if (displayed > 0) {
@@ -910,11 +920,10 @@ void LogicManager::renderCharacterGrid(bool onlyPinned, int &selectedCharacter)
displayed++;
- // Create a card for the character with fixed width
+ // Create a card for the character...
ImGui::PushID(i);
ImGui::BeginChild(ImGui::GetID((void *)(intptr_t)i), ImVec2(cardWidth, 180), true);
- // Character name with pin status
if (isCharacterPinned(i)) {
ImGui::TextColored(ImVec4(1.0f, 0.85f, 0.0f, 1.0f), "%s (%d)", getCharacterName(i), i);
ImGui::SameLine(ImGui::GetWindowWidth() - 50);
@@ -944,7 +953,6 @@ void LogicManager::renderCharacterGrid(bool onlyPinned, int &selectedCharacter)
ImGui::Separator();
- // Key information
ImGui::Text("Position: Car %u, Loc %u, Pos %u",
character->characterPosition.car,
character->characterPosition.location,
@@ -955,10 +963,8 @@ void LogicManager::renderCharacterGrid(bool onlyPinned, int &selectedCharacter)
ImGui::Text("Direction: %d", character->direction);
ImGui::Text("Current Frame: Seq1 %d / Seq2 %d", character->currentFrameSeq1, character->currentFrameSeq2);
- // Link to details view
if (ImGui::Button("View Details")) {
- // Switch to list view and select this character
- _state->_selectedCharacter = i; // Store the selected character index
+ _state->_selectedCharacter = i;
_state->_forceReturnToListView = true;
}
@@ -972,12 +978,9 @@ void LogicManager::renderCharacterGrid(bool onlyPinned, int &selectedCharacter)
}
}
-// Detailed view for a single character
void LogicManager::renderCharacterDetails(Character *character, int index) {
- // Title and header
ImGui::Text("%s (Character ID: %d)", getCharacterName(index), index);
- // Pin/unpin button
ImGui::SameLine(ImGui::GetWindowWidth() - 100);
if (ImGui::Button(isCharacterPinned(index) ? "Unpin Character" : "Pin Character")) {
toggleCharacterPin(index);
@@ -985,7 +988,6 @@ void LogicManager::renderCharacterDetails(Character *character, int index) {
ImGui::Separator();
- // Always visible basic info section
ImGui::Text("Position: Car %u, Location %u, Position %u",
character->characterPosition.car,
character->characterPosition.location,
@@ -1002,9 +1004,8 @@ void LogicManager::renderCharacterDetails(Character *character, int index) {
ImGui::Text("Current logic function: %s (%d)", funcCurrName.c_str(), character->callbacks[character->currentCall]);
}
- // Group related data in collapsing sections
if (ImGui::CollapsingHeader("Logic call stack", ImGuiTreeNodeFlags_DefaultOpen)) {
- // Start with the current call
+ // Start with the current call...
int currentDepth = character->currentCall;
if (currentDepth < 0 || character->callbacks[currentDepth] == 0) {
@@ -1012,31 +1013,27 @@ void LogicManager::renderCharacterDetails(Character *character, int index) {
} else {
ImGui::Text("Call stack depth: %d", currentDepth + 1);
- // Display the call stack with proper indentation
+ // Display the call stack...
for (int i = currentDepth; i >= 0; i--) {
- // Get the function number at this stack level
int functionId = character->callbacks[i];
- // Calculate indent amount - ensure it's never zero (use 0.1f as minimum)
float indentAmount = (currentDepth - i) * 20.0f;
indentAmount = indentAmount > 0.0f ? indentAmount : 0.1f;
- // Apply indent
ImGui::Indent(indentAmount);
- // Display function with a bullet point
+
ImGui::BulletText("Level %d: %s (#%d)",
currentDepth - i,
funcNames[functionId - 1].c_str(),
functionId);
- // Remove indent
ImGui::Unindent(indentAmount);
}
}
}
- // Group related data in collapsing sections
+
if (ImGui::CollapsingHeader("Animation State", ImGuiTreeNodeFlags_DefaultOpen)) {
ImGui::Text("Sequence: %s", character->sequenceName);
ImGui::Text("Sequence 2: %s", character->sequenceName2);
@@ -1060,8 +1057,8 @@ void LogicManager::renderCharacterDetails(Character *character, int index) {
ImGui::Text("Clothes: %d", character->clothes);
ImGui::Text("Attached Conductor: %d", character->attachedConductor);
ImGui::Text("Process Entity: %d", character->doProcessEntity);
- ImGui::Text("Car2: %d", character->car2);
- ImGui::Text("Position2: %d", character->position2);
+ ImGui::Text("Previous Car: %d", character->car2);
+ ImGui::Text("Previous Position: %d", character->position2);
ImGui::Text("Field_4A9: %d", character->field_4A9);
ImGui::Text("Field_4AA: %d", character->field_4AA);
}
@@ -1071,7 +1068,7 @@ void LogicManager::renderCharacterDetails(Character *character, int index) {
char label[32];
Common::sprintf_s(label, "Call %d", call);
- // Skip calls with all zero parameters
+ // Skip calls with all zero parameters...
bool hasNonZeroParams = false;
for (int param = 0; param < 32; param++) {
if (character->callParams[call].parameters[param] != 0) {
@@ -1091,6 +1088,7 @@ void LogicManager::renderCharacterDetails(Character *character, int index) {
character->callParams[call].parameters[param]);
}
}
+
ImGui::TreePop();
}
}
@@ -1116,6 +1114,7 @@ const char *LogicManager::getCharacterName(int index) const {
if (index < 0 || index >= 40) {
return "Unknown";
}
+
return _characterNames[index];
}
@@ -1134,9 +1133,30 @@ void LogicManager::toggleCharacterPin(int index) {
void LastExpressEngine::showEngineInfo() {
ImGui::Text("Mouse status:");
- ImGui::BulletText("Is drawn: %s", _state->_engine->getGraphicsManager()->canDrawMouse() ? "yes" : "no");
- ImGui::BulletText("Has left clicked: %s", _state->_engine->mouseHasLeftClicked() ? "yes" : "no");
- ImGui::BulletText("Has right clicked: %s", _state->_engine->mouseHasRightClicked() ? "yes" : "no");
+ ImGui::BulletText("Is drawn: %s", getGraphicsManager()->canDrawMouse() ? "yes" : "no");
+ ImGui::BulletText("Has left clicked: %s", mouseHasLeftClicked() ? "yes" : "no");
+ ImGui::BulletText("Has right clicked: %s", mouseHasRightClicked() ? "yes" : "no");
+ ImGui::BulletText("Fast walk active: %s", getLogicManager()->_doubleClickFlag ? "yes" : "no");
+
+ if (!getMenu()->isShowingMenu()) {
+ ImGui::Separator();
+
+ ImGui::Text("Utilities (careful!):");
+ ImGui::Checkbox("Lock grace period", &_lockGracePeriod);
+
+ ImGui::NewLine();
+
+ ImGui::Text("Advance time by:");
+
+ ImGui::InputInt("ticks", &_state->_ticksToAdvance, 100, 1000);
+ ImGui::SameLine();
+ bool shouldAdvance = ImGui::Button("Go");
+ if (shouldAdvance) {
+ getLogicManager()->_gameTime += _state->_ticksToAdvance;
+ getLogicManager()->_realTime += _state->_ticksToAdvance;
+ _state->_ticksToAdvance = 0;
+ }
+ }
}
#endif
diff --git a/engines/lastexpress/fight/fight.cpp b/engines/lastexpress/fight/fight.cpp
index a225275a2cd..84929b1faac 100644
--- a/engines/lastexpress/fight/fight.cpp
+++ b/engines/lastexpress/fight/fight.cpp
@@ -83,7 +83,7 @@ int LastExpressEngine::doFight(int fightId) {
tbm = &getGraphicsManager()->_renderBox2;
}
- getLogicManager()->_trainNodeIndex = fightNode;
+ getLogicManager()->_activeNode = fightNode;
(_characters->characters[kCharacterCath]).characterPosition = getLogicManager()->_trainData[fightNode].nodePosition;
getSoundManager()->_scanAnySoundLoopingSection = true;
@@ -230,12 +230,13 @@ void CFight::timer(Event *event, bool isProcessing) {
_engine->setEventTickInternal(false);
if (_engine->_gracePeriodTimer) {
- if ((_engine->getLogicManager()->_gameProgress[kProgressJacket] < 2 ? 225 : 450) == _engine->_gracePeriodTimer || _engine->_gracePeriodTimer == 900) {
+ if ((_engine->getLogicManager()->_globals[kProgressJacket] < 2 ? 225 : 450) == _engine->_gracePeriodTimer || _engine->_gracePeriodTimer == 900) {
_eggIconBrightness = 0;
_eggIconBrightnessStep = 1;
}
- _engine->_gracePeriodTimer--;
+ if (!_engine->_lockGracePeriod) // Gets set to true only by the debugger only...
+ _engine->_gracePeriodTimer--;
if (_engine->_gracePeriodTimer <= 500 ||
!(_engine->_gracePeriodTimer % 5)) {
@@ -279,7 +280,7 @@ void CFight::timer(Event *event, bool isProcessing) {
Link *link = nullptr;
uint8 location = 0;
- for (Link *i = _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_trainNodeIndex].link; i; i = i->next) {
+ for (Link *i = _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_activeNode].link; i; i = i->next) {
if (_engine->getLogicManager()->pointIn(_engine->_cursorX, _engine->_cursorY, i) && location <= i->location) {
location = i->location;
link = i;
@@ -344,7 +345,7 @@ void CFight::mouse(Event *event) {
uint8 location = 0;
Link *link = nullptr;
- for (Link *i = _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_trainNodeIndex].link; i; i = i->next) {
+ for (Link *i = _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_activeNode].link; i; i = i->next) {
if (_engine->getLogicManager()->pointIn(_engine->_cursorX, _engine->_cursorY, i) && location <= i->location) {
location = i->location;
link = i;
diff --git a/engines/lastexpress/game/action.cpp b/engines/lastexpress/game/action.cpp
index 82b21acbb92..d539ac7d2a3 100644
--- a/engines/lastexpress/game/action.cpp
+++ b/engines/lastexpress/game/action.cpp
@@ -30,98 +30,98 @@ int LogicManager::findCursor(Link *link) {
return link->cursor;
switch (link->action) {
- case 1:
- if (!_lastSavedNodeIndex && (_gameEvents[kEventKronosBringFirebird] || _gameProgress[kEventAugustBringEgg])) {
+ case kActionInventory:
+ if (!_nodeReturn2 && (_doneNIS[kEventKronosBringFirebird] || _globals[kEventAugustBringEgg])) {
result = kCursorNormal;
} else {
result = kCursorBackward;
}
break;
- case 5:
+ case kActionKnock:
if (link->param1 >= 128) {
result = kCursorNormal;
} else {
- result = _gameObjects[link->param1].cursor;
+ result = _doors[link->param1].windowCursor;
}
break;
- case 6:
- case 31:
+ case kActionCompartment:
+ case kActionExitCompartment:
if (link->param1 >= 128) {
result = kCursorNormal;
- } else if (_inventorySelectedItemIdx != kItemKey || (_gameObjects[link->param1].character) || _gameObjects[link->param1].door != 1 || !_gameObjects[link->param1].cursor2 || inComp(kCharacterCath) || preventEnterComp(link->param1)) {
- result = _gameObjects[link->param1].cursor2;
+ } else if (_activeItem != kItemKey || (_doors[link->param1].who) || _doors[link->param1].status != 1 || !_doors[link->param1].handleCursor || inComp(kCharacterCath) || preventEnterComp(link->param1)) {
+ result = _doors[link->param1].handleCursor;
} else {
- result = _gameInventory[kItemKey].cursor;
+ result = _items[kItemKey].mnum;
}
break;
- case 12:
+ case kActionKnockInside:
if (link->param1 >= 128) {
result = kCursorNormal;
} else {
- if (_gameObjects[link->param1].character)
- result = _gameObjects[link->param1].cursor;
+ if (_doors[link->param1].who)
+ result = _doors[link->param1].windowCursor;
else
result = kCursorNormal;
}
break;
- case 13:
+ case kActionTakeItem:
if (link->param1 >= 32) {
result = kCursorNormal;
- } else if ((!_inventorySelectedItemIdx || _gameInventory[_inventorySelectedItemIdx].manualSelect) && (link->param1 != 21 || _gameProgress[kProgressEventCorpseMovedFromFloor] == 1)) {
+ } else if ((!_activeItem || _items[_activeItem].inPocket) && (link->param1 != 21 || _globals[kProgressEventCorpseMovedFromFloor] == 1)) {
result = kCursorHand;
} else {
result = kCursorNormal;
}
break;
- case 14:
+ case kActionDropItem:
if (link->param1 >= 32) {
result = kCursorNormal;
- } else if (link->param1 != _inventorySelectedItemIdx || link->param1 == 20 && !_gameProgress[kProgressIsTrainRunning] && link->param2 == 4 || link->param1 == 18 && link->param2 == 1 && _gameProgress[kProgressField5C]) {
+ } else if (link->param1 != _activeItem || link->param1 == 20 && !_globals[kProgressIsTrainRunning] && link->param2 == 4 || link->param1 == 18 && link->param2 == 1 && _globals[kProgressField5C]) {
result = kCursorNormal;
} else {
- result = _gameInventory[_inventorySelectedItemIdx].cursor;
+ result = _items[_activeItem].mnum;
}
break;
- case 15:
+ case kActionLinkOnGlobal:
if (link->param1 >= 128) {
result = kCursorNormal;
- } else if (_gameProgress[link->param1] == link->param2) {
+ } else if (_globals[link->param1] == link->param2) {
result = link->param3;
} else {
result = kCursorNormal;
}
break;
- case 16:
- if (_inventorySelectedItemIdx == kItemKey && !_gameObjects[kItemMatchBox].door || _gameObjects[kItemMatchBox].door == 1 && cathHasItem(kItemKey) && (_inventorySelectedItemIdx == kItemBriefcase || _inventorySelectedItemIdx == kItemFirebird)) {
- result = _gameInventory[kItemKey].cursor;
+ case kActionRattle:
+ if (_activeItem == kItemKey && !_doors[kItemMatchBox].status || _doors[kItemMatchBox].status == 1 && cathHasItem(kItemKey) && (_activeItem == kItemBriefcase || _activeItem == kItemFirebird)) {
+ result = _items[kItemKey].mnum;
} else {
if (link->param1 >= 128) {
result = 0;
- } else if (_inventorySelectedItemIdx != kItemKey ||
- _gameObjects[link->param1].character ||
- _gameObjects[link->param1].door != 1 ||
- !_gameObjects[link->param1].cursor2 ||
+ } else if (_activeItem != kItemKey ||
+ _doors[link->param1].who ||
+ _doors[link->param1].status != 1 ||
+ !_doors[link->param1].handleCursor ||
inComp(kCharacterCath) || preventEnterComp(link->param1)) {
- result = _gameObjects[link->param1].cursor2;
+ result = _doors[link->param1].handleCursor;
} else {
- result = _gameInventory[kItemKey].cursor;
+ result = _items[kItemKey].mnum;
}
}
break;
- case 18:
- if (_gameProgress[kProgressJacket] == 2) {
- if ((_gameEvents[kEventCathLookOutsideWindowDay] || _gameEvents[kEventCathLookOutsideWindowNight] || getModel(1) == 1) &&
- _gameProgress[kProgressIsTrainRunning] &&
- (link->param1 != 45 || !inComp(kCharacterRebecca, kCarRedSleeping, 4840) && _gameObjects[kObjectOutsideBetweenCompartments].door == 2) &&
- _inventorySelectedItemIdx != kItemBriefcase && _inventorySelectedItemIdx != kItemFirebird) {
+ case kActionLeanOutWindow:
+ if (_globals[kProgressJacket] == 2) {
+ if ((_doneNIS[kEventCathLookOutsideWindowDay] || _doneNIS[kEventCathLookOutsideWindowNight] || getModel(1) == 1) &&
+ _globals[kProgressIsTrainRunning] &&
+ (link->param1 != 45 || !inComp(kCharacterRebecca, kCarRedSleeping, 4840) && _doors[kObjectOutsideBetweenCompartments].status == 2) &&
+ _activeItem != kItemBriefcase && _activeItem != kItemFirebird) {
result = kCursorForward;
} else {
result = getModel(1) == 1 ? kCursorNormal : kCursorMagnifier;
@@ -131,19 +131,19 @@ int LogicManager::findCursor(Link *link) {
}
break;
- case 19:
- result = _gameProgress[kProgressFieldC8] == 0 ? kCursorNormal : kCursorLeft;
+ case kActionAlmostFall:
+ result = _globals[kProgressFieldC8] == 0 ? kCursorNormal : kCursorLeft;
break;
- case 21:
- if (_gameProgress[kProgressIsTrainRunning] && _inventorySelectedItemIdx != kItemBriefcase && _inventorySelectedItemIdx != kItemFirebird &&
- (_gameProgress[kProgressChapter] == 2 || _gameProgress[kProgressChapter] == 3 || _gameProgress[kProgressChapter] == 5)) {
+ case kActionClimbLadder:
+ if (_globals[kProgressIsTrainRunning] && _activeItem != kItemBriefcase && _activeItem != kItemFirebird &&
+ (_globals[kProgressChapter] == 2 || _globals[kProgressChapter] == 3 || _globals[kProgressChapter] == 5)) {
result = kCursorUp;
} else {
result = kCursorNormal;
}
break;
- case 23:
+ case kActionKronosSanctum:
if (link->param1 == 1) {
result = checkDoor(73) == 0 ? kCursorHand : kCursorNormal;
} else {
@@ -151,9 +151,9 @@ int LogicManager::findCursor(Link *link) {
}
break;
- case 24:
+ case kActionEscapeBaggage:
if (link->param1 == 2) {
- if (!_gameEvents[kEventCathStruggleWithBonds2] || _gameEvents[kEventCathBurnRope])
+ if (!_doneNIS[kEventCathStruggleWithBonds2] || _doneNIS[kEventCathBurnRope])
result = kCursorNormal;
else
result = kCursorHand;
@@ -162,11 +162,11 @@ int LogicManager::findCursor(Link *link) {
}
break;
- case 30:
+ case kActionCatchBeetle:
if (_engine->_beetle) {
if (_engine->_beetle->onTable()) {
- if (_inventorySelectedItemIdx == kItemMatchBox && cathHasItem(kItemMatch))
- result = _gameInventory[kItemMatchBox].cursor;
+ if (_activeItem == kItemMatchBox && cathHasItem(kItemMatch))
+ result = _items[kItemMatchBox].mnum;
else
result = kCursorHandPointer;
} else {
@@ -177,10 +177,10 @@ int LogicManager::findCursor(Link *link) {
}
break;
- case 33:
+ case kActionFirebirdPuzzle:
if (link->param1 == 3) {
- if (_inventorySelectedItemIdx == kItemWhistle)
- result = _gameInventory[kItemWhistle].cursor;
+ if (_activeItem == kItemWhistle)
+ result = _items[kItemWhistle].mnum;
else
result = kCursorNormal;
} else {
@@ -188,14 +188,14 @@ int LogicManager::findCursor(Link *link) {
}
break;
- case 35:
- result = _gameProgress[kProgressChapter] == 1 ? kCursorHand : kCursorNormal;
+ case kActionOpenBed:
+ result = _globals[kProgressChapter] == 1 ? kCursorHand : kCursorNormal;
break;
- case 37:
+ case kActionHintDialog:
result = getHintDialog(link->param1) == 0 ? kCursorNormal : kCursorHandPointer;
break;
- case 40:
- if (_gameProgress[kProgressField18] == 2 && !_gameProgress[kProgressFieldE4] && (_gameTime > 1404000 || _gameProgress[kProgressEventMetAugust] && _gameProgress[kProgressFieldCC] && (!_gameProgress[kProgressField24] || _gameProgress[kProgressField3C]))) {
+ case kActionBed:
+ if (_globals[kProgressField18] == 2 && !_globals[kProgressFieldE4] && (_gameTime > 1404000 || _globals[kProgressEventMetAugust] && _globals[kProgressFieldCC] && (!_globals[kProgressField24] || _globals[kProgressField3C]))) {
result = kCursorSleep;
} else {
result = kCursorNormal;
@@ -211,41 +211,41 @@ int LogicManager::findCursor(Link *link) {
}
bool LogicManager::nodeHasItem(int item) {
- switch (_trainData[_trainNodeIndex].car) {
- case kCarKronos:
- if (_trainData[_trainNodeIndex].parameter1 != item) {
+ switch (_trainData[_activeNode].property) {
+ case kNodeHasItem:
+ if (_trainData[_activeNode].parameter1 != item) {
return false;
} else {
return true;
}
break;
- case kCarGreenSleeping:
- if (_trainData[_trainNodeIndex].parameter1 != item && _trainData[_trainNodeIndex].parameter2 != item) {
+ case kNodeHas2Items:
+ if (_trainData[_activeNode].parameter1 != item && _trainData[_activeNode].parameter2 != item) {
return false;
} else {
return true;
}
break;
- case kCarRedSleeping:
- if (_trainData[_trainNodeIndex].parameter2 != item) {
+ case kNodeHasDoorItem:
+ if (_trainData[_activeNode].parameter2 != item) {
return false;
} else {
return true;
}
break;
- case kCarRestaurant:
- if (_trainData[_trainNodeIndex].parameter1 != item && _trainData[_trainNodeIndex].parameter2 != item && _trainData[_trainNodeIndex].parameter3 != item) {
+ case kNodeHas3Items:
+ if (_trainData[_activeNode].parameter1 != item && _trainData[_activeNode].parameter2 != item && _trainData[_activeNode].parameter3 != item) {
return false;
} else {
return true;
}
break;
- case kCarLocomotive:
- if (_trainData[_trainNodeIndex].parameter2 != item) {
+ case kNodeSoftPointItem:
+ if (_trainData[_activeNode].parameter2 != item) {
return false;
} else {
return true;
@@ -268,13 +268,13 @@ void LogicManager::doPreFunction(int *sceneOut) {
if (!*sceneOut || *sceneOut > 2500)
*sceneOut = 1;
- switch (_trainData[*sceneOut].car) {
- case kCarBaggageRear:
+ switch (_trainData[*sceneOut].property) {
+ case kNodeHasDoor:
if (_trainData[*sceneOut].parameter1 < 128) {
- if (_gameObjects[_trainData[*sceneOut].parameter1].door) {
+ if (_doors[_trainData[*sceneOut].parameter1].status) {
link = _trainData[*sceneOut].link;
for (bool found = false; link && !found; link = link->next) {
- if (_gameObjects[_trainData[*sceneOut].parameter1].door == link->location) {
+ if (_doors[_trainData[*sceneOut].parameter1].status == link->location) {
tmp.copyFrom(link);
doAction(&tmp);
@@ -290,12 +290,12 @@ void LogicManager::doPreFunction(int *sceneOut) {
}
break;
- case kCarKronos:
+ case kNodeHasItem:
if (_trainData[*sceneOut].parameter1 < 32) {
- if (_gameInventory[_trainData[*sceneOut].parameter1].location) {
+ if (_items[_trainData[*sceneOut].parameter1].floating) {
link = _trainData[*sceneOut].link;
for (bool found = false; link && !found; link = link->next) {
- if (_gameInventory[_trainData[*sceneOut].parameter1].location == link->location) {
+ if (_items[_trainData[*sceneOut].parameter1].floating == link->location) {
tmp.copyFrom(link);
doAction(&tmp);
@@ -311,19 +311,19 @@ void LogicManager::doPreFunction(int *sceneOut) {
}
break;
- case kCarGreenSleeping:
+ case kNodeHas2Items:
if (_trainData[*sceneOut].parameter1 < 32) {
if (_trainData[*sceneOut].parameter2 < 32) {
- int locFlag = (_gameInventory[_trainData[*sceneOut].parameter1].location != 0) ? 1 : 0;
+ int locFlag = (_items[_trainData[*sceneOut].parameter1].floating != 0) ? 1 : 0;
- if (_gameInventory[_trainData[*sceneOut].parameter2].location)
+ if (_items[_trainData[*sceneOut].parameter2].floating)
locFlag |= 2;
if (locFlag != 0) {
link = _trainData[*sceneOut].link;
for (bool found = false; link && !found; link = link->next) {
if (link->location == locFlag) {
- if (_gameInventory[_trainData[*sceneOut].parameter1].location == link->param1 && _gameInventory[_trainData[*sceneOut].parameter2].location == link->param2) {
+ if (_items[_trainData[*sceneOut].parameter1].floating == link->param1 && _items[_trainData[*sceneOut].parameter2].floating == link->param2) {
tmp.copyFrom(link);
doAction(&tmp);
@@ -341,19 +341,19 @@ void LogicManager::doPreFunction(int *sceneOut) {
}
break;
- case kCarRedSleeping:
+ case kNodeHasDoorItem:
if (_trainData[*sceneOut].parameter1 < 128) {
if (_trainData[*sceneOut].parameter2 < 32) {
- int locFlag = (_gameObjects[_trainData[*sceneOut].parameter1].door == 2) ? 1 : 0;
+ int locFlag = (_doors[_trainData[*sceneOut].parameter1].status == 2) ? 1 : 0;
- if (_gameInventory[_trainData[*sceneOut].parameter2].location)
+ if (_items[_trainData[*sceneOut].parameter2].floating)
locFlag |= 2;
if (locFlag != 0) {
link = _trainData[*sceneOut].link;
for (bool found = false; link && !found; link = link->next) {
if (link->location == locFlag) {
- if (_gameObjects[_trainData[*sceneOut].parameter1].door == link->param1 && _gameInventory[_trainData[*sceneOut].parameter2].location == link->param2) {
+ if (_doors[_trainData[*sceneOut].parameter1].status == link->param1 && _items[_trainData[*sceneOut].parameter2].floating == link->param2) {
tmp.copyFrom(link);
doAction(&tmp);
@@ -371,22 +371,22 @@ void LogicManager::doPreFunction(int *sceneOut) {
}
break;
- case kCarRestaurant:
+ case kNodeHas3Items:
if (_trainData[*sceneOut].parameter1 < 32 && _trainData[*sceneOut].parameter2 < 32) {
if (_trainData[*sceneOut].parameter3 < 32) {
- int locFlag = (_gameInventory[_trainData[*sceneOut].parameter1].location != 0) ? 1 : 0;
+ int locFlag = (_items[_trainData[*sceneOut].parameter1].floating != 0) ? 1 : 0;
- if (_gameInventory[_trainData[*sceneOut].parameter2].location)
+ if (_items[_trainData[*sceneOut].parameter2].floating)
locFlag |= 2;
- if (_gameInventory[_trainData[*sceneOut].parameter3].location)
+ if (_items[_trainData[*sceneOut].parameter3].floating)
locFlag |= 4;
if (locFlag != 0) {
link = _trainData[*sceneOut].link;
for (bool found = false; link && !found; link = link->next) {
if (link->location == locFlag) {
- if (_gameInventory[_trainData[*sceneOut].parameter1].location == link->param1 && _gameInventory[_trainData[*sceneOut].parameter2].location == link->param2 && _gameInventory[_trainData[*sceneOut].parameter3].location == link->param3) {
+ if (_items[_trainData[*sceneOut].parameter1].floating == link->param1 && _items[_trainData[*sceneOut].parameter2].floating == link->param2 && _items[_trainData[*sceneOut].parameter3].floating == link->param3) {
tmp.copyFrom(link);
doAction(&tmp);
@@ -404,13 +404,13 @@ void LogicManager::doPreFunction(int *sceneOut) {
}
break;
- case kCarBaggage:
+ case kNodeModelPad:
if (_trainData[*sceneOut].parameter1 < 128) {
link = _trainData[*sceneOut].link;
bool found = false;
if (link) {
while (!found) {
- if (_gameObjects[_trainData[*sceneOut].parameter1].model == link->location) {
+ if (_doors[_trainData[*sceneOut].parameter1].model == link->location) {
tmp.copyFrom(link);
doAction(&tmp);
@@ -453,11 +453,11 @@ void LogicManager::doPreFunction(int *sceneOut) {
}
break;
- case kCarCoalTender:
+ case kNodeSoftPoint:
if (_trainData[*sceneOut].parameter1 < 16 &&
- (_softBlockedEntitiesBits[_trainData[*sceneOut].parameter1] || _blockedEntitiesBits[_trainData[*sceneOut].parameter1])) {
- if ((!_engine->getOtisManager()->fDirection(_trainNodeIndex) || !_engine->getOtisManager()->fDirection(*sceneOut) || _trainData[_trainNodeIndex].nodePosition.position >= _trainData[*sceneOut].nodePosition.position) &&
- (!_engine->getOtisManager()->rDirection(_trainNodeIndex) || !_engine->getOtisManager()->rDirection(*sceneOut) || _trainData[_trainNodeIndex].nodePosition.position <= _trainData[*sceneOut].nodePosition.position)) {
+ (_softBlockedX[_trainData[*sceneOut].parameter1] || _blockedX[_trainData[*sceneOut].parameter1])) {
+ if ((!_engine->getOtisManager()->fDirection(_activeNode) || !_engine->getOtisManager()->fDirection(*sceneOut) || _trainData[_activeNode].nodePosition.position >= _trainData[*sceneOut].nodePosition.position) &&
+ (!_engine->getOtisManager()->rDirection(_activeNode) || !_engine->getOtisManager()->rDirection(*sceneOut) || _trainData[_activeNode].nodePosition.position <= _trainData[*sceneOut].nodePosition.position)) {
next = _trainData[*sceneOut].link->next;
scene = next->scene;
*sceneOut = (int)scene;
@@ -466,8 +466,8 @@ void LogicManager::doPreFunction(int *sceneOut) {
break;
}
- if (whoseBit(_softBlockedEntitiesBits[_trainData[*sceneOut].parameter1]) != 30 &&
- whoseBit(_blockedEntitiesBits[_trainData[*sceneOut].parameter1]) != 30) {
+ if (whoseBit(_softBlockedX[_trainData[*sceneOut].parameter1]) != 30 &&
+ whoseBit(_blockedX[_trainData[*sceneOut].parameter1]) != 30) {
playDialog(kCharacterCath, "CAT1126A", -1, 0);
}
@@ -477,17 +477,17 @@ void LogicManager::doPreFunction(int *sceneOut) {
}
break;
- case kCarLocomotive:
+ case kNodeSoftPointItem:
if (_trainData[*sceneOut].parameter1 < (_engine->isDemo() ? 16 : 32)) {
- if (_softBlockedEntitiesBits[_trainData[*sceneOut].parameter1] || _blockedEntitiesBits[_trainData[*sceneOut].parameter1]) {
- if (_engine->getOtisManager()->fDirection(_trainNodeIndex) &&
+ if (_softBlockedX[_trainData[*sceneOut].parameter1] || _blockedX[_trainData[*sceneOut].parameter1]) {
+ if (_engine->getOtisManager()->fDirection(_activeNode) &&
_engine->getOtisManager()->fDirection(*sceneOut) &&
- _trainData[_trainNodeIndex].nodePosition.position < _trainData[*sceneOut].nodePosition.position ||
- _engine->getOtisManager()->rDirection(_trainNodeIndex) &&
+ _trainData[_activeNode].nodePosition.position < _trainData[*sceneOut].nodePosition.position ||
+ _engine->getOtisManager()->rDirection(_activeNode) &&
_engine->getOtisManager()->rDirection(*sceneOut) &&
- _trainData[_trainNodeIndex].nodePosition.position > _trainData[*sceneOut].nodePosition.position) {
+ _trainData[_activeNode].nodePosition.position > _trainData[*sceneOut].nodePosition.position) {
- if (whoseBit(_softBlockedEntitiesBits[_trainData[*sceneOut].parameter1]) != 30 && whoseBit(_blockedEntitiesBits[_trainData[*sceneOut].parameter1]) != 30) {
+ if (whoseBit(_softBlockedX[_trainData[*sceneOut].parameter1]) != 30 && whoseBit(_blockedX[_trainData[*sceneOut].parameter1]) != 30) {
playDialog(kCharacterCath, "CAT1126A", -1, 0);
}
@@ -501,10 +501,10 @@ void LogicManager::doPreFunction(int *sceneOut) {
doPreFunction(sceneOut);
} else {
if (_trainData[*sceneOut].parameter2 < 32) {
- if (_gameInventory[_trainData[*sceneOut].parameter2].location) {
+ if (_items[_trainData[*sceneOut].parameter2].floating) {
link = _trainData[*sceneOut].link;
for (bool found = false; link && !found; link = link->next) {
- if (_gameInventory[_trainData[*sceneOut].parameter2].location == link->location) {
+ if (_items[_trainData[*sceneOut].parameter2].floating == link->location) {
tmp.copyFrom(link);
doAction(&tmp);
@@ -527,12 +527,12 @@ void LogicManager::doPreFunction(int *sceneOut) {
}
if (whoRunningDialog(kCharacterTableE)) {
- if (_trainData[*sceneOut].car != 132 || _trainData[*sceneOut].parameter1)
+ if (_trainData[*sceneOut].property != kNodeRebeccaDiary || _trainData[*sceneOut].parameter1)
fadeDialog(kCharacterTableE);
}
if (!_engine->isDemo() && _engine->_beetle) {
- if (_trainData[*sceneOut].car != 130)
+ if (_trainData[*sceneOut].property != kNodeBeetle)
_engine->endBeetle();
}
}
@@ -540,13 +540,13 @@ void LogicManager::doPreFunction(int *sceneOut) {
void LogicManager::doPostFunction() {
Link tmp;
- switch (_trainData[_trainNodeIndex].car) {
- case 128:
+ switch (_trainData[_activeNode].property) {
+ case kNodeAutoWalk:
{
- int32 delta = _trainData[_trainNodeIndex].parameter1 + 10;
- _gameTime += delta * _gameTimeTicksDelta;
- _currentGameSessionTicks += delta;
- int32 delayedTicks = _engine->getSoundFrameCounter() + 4 * _trainData[_trainNodeIndex].parameter1;
+ int32 delta = _trainData[_activeNode].parameter1 + 10;
+ _gameTime += delta * _timeSpeed;
+ _realTime += delta;
+ int32 delayedTicks = _engine->getSoundFrameCounter() + 4 * _trainData[_activeNode].parameter1;
if (!_engine->mouseHasRightClicked() && delayedTicks > _engine->getSoundFrameCounter()) {
do {
@@ -557,17 +557,17 @@ void LogicManager::doPostFunction() {
} while (delayedTicks > _engine->getSoundFrameCounter());
}
- tmp.copyFrom(_trainData[_trainNodeIndex].link);
+ tmp.copyFrom(_trainData[_activeNode].link);
doAction(&tmp);
- if (_engine->mouseHasRightClicked() && _trainData[tmp.scene].car == 128) {
+ if (_engine->mouseHasRightClicked() && _trainData[tmp.scene].property == kNodeAutoWalk) {
do {
tmp.copyFrom(_trainData[tmp.scene].link);
doAction(&tmp);
- } while (_trainData[tmp.scene].car == 128);
+ } while (_trainData[tmp.scene].property == kNodeAutoWalk);
}
- if (getCharacter(kCharacterCath).characterPosition.car == 9 &&
+ if (getCharacter(kCharacterCath).characterPosition.car == kCarVestibule &&
(getCharacter(kCharacterCath).characterPosition.position == 4 ||
getCharacter(kCharacterCath).characterPosition.position == 3)) {
@@ -578,11 +578,11 @@ void LogicManager::doPostFunction() {
for (int j = 1; j < 40; j++) {
if (getCharacter(kCharacterCath).characterPosition.position == 4) {
- if (getCharacter(j).characterPosition.car == 4 && getCharacter(j).characterPosition.position > 9270 || getCharacter(j).characterPosition.car == 5 && getCharacter(j).characterPosition.position < 1540) {
+ if (getCharacter(j).characterPosition.car == kCarRedSleeping && getCharacter(j).characterPosition.position > 9270 || getCharacter(j).characterPosition.car == kCarRestaurant && getCharacter(j).characterPosition.position < 1540) {
charactersRndArray[characterIdx] = j;
characterIdx++;
}
- } else if (getCharacter(j).characterPosition.car == 3 && getCharacter(j).characterPosition.position > 9270 || getCharacter(j).characterPosition.car == 4 && getCharacter(j).characterPosition.position < 850) {
+ } else if (getCharacter(j).characterPosition.car == kCarGreenSleeping && getCharacter(j).characterPosition.position > 9270 || getCharacter(j).characterPosition.car == kCarRedSleeping && getCharacter(j).characterPosition.position < 850) {
charactersRndArray[characterIdx] = j;
characterIdx++;
}
@@ -602,23 +602,23 @@ void LogicManager::doPostFunction() {
return;
}
- case 129:
+ case kNodeSleepingOnBed:
if (_engine->isDemo())
break;
- if (_gameProgress[kProgressField18] == 2)
+ if (_globals[kProgressField18] == 2)
send(kCharacterCath, kCharacterMaster, 190346110, 0);
return;
- case 130:
+ case kNodeBeetle:
if (_engine->isDemo())
break;
_engine->doBeetle();
return;
- case 131:
+ case kNodePullingStop:
{
- if (_gameTime < 2418300 && _gameProgress[kProgressField18] != 4) {
+ if (_gameTime < 2418300 && _globals[kProgressField18] != 4) {
Slot *slot = _engine->getSoundManager()->_soundCache;
if (slot) {
do {
@@ -634,9 +634,9 @@ void LogicManager::doPostFunction() {
playDialog(kCharacterClerk, "LIB050", 16, 0);
- if (_gameProgress[kProgressChapter] == 1) {
+ if (_globals[kProgressChapter] == 1) {
endGame(0, 0, 62, true);
- } else if (_gameProgress[kProgressChapter] == 4) {
+ } else if (_globals[kProgressChapter] == 4) {
endGame(0, 0, 64, true);
} else {
endGame(0, 0, 63, true);
@@ -645,9 +645,9 @@ void LogicManager::doPostFunction() {
return;
}
- case 132:
+ case kNodeRebeccaDiary:
if (!whoRunningDialog(kCharacterTableE)) {
- switch (_trainData[_trainNodeIndex].parameter1) {
+ switch (_trainData[_activeNode].parameter1) {
case 1:
if (dialogRunning("TXT1001"))
endDialog("TXT1001");
@@ -747,7 +747,7 @@ void LogicManager::doPostFunction() {
}
return;
- case 133:
+ case kNodeExitFastWalk:
if (_doubleClickFlag) {
_doubleClickFlag = false;
_engine->getGraphicsManager()->setMouseDrawable(true);
@@ -769,27 +769,27 @@ void LogicManager::doAction(Link *link) {
switch (link->action) {
case kActionInventory:
{
- if (_useLastSavedNodeIndex) {
+ if (_closeUp) {
int bumpScene = 0;
- if (_lastSavedNodeIndex) {
- bumpScene = _lastSavedNodeIndex;
- _lastSavedNodeIndex = 0;
+ if (_nodeReturn2) {
+ bumpScene = _nodeReturn2;
+ _nodeReturn2 = 0;
bumpCathNode(bumpScene);
} else {
- _useLastSavedNodeIndex = 0;
+ _closeUp = 0;
- if (_positions[100 * _trainData[_lastNodeIndex].nodePosition.car + _trainData[_lastNodeIndex].cathDir]) {
- bumpCathNode(getSmartBumpNode(_lastNodeIndex));
+ if (_blockedViews[100 * _trainData[_nodeReturn].nodePosition.car + _trainData[_nodeReturn].cathDir]) {
+ bumpCathNode(getSmartBumpNode(_nodeReturn));
} else {
- bumpCathNode(_lastNodeIndex);
+ bumpCathNode(_nodeReturn);
}
}
- if (_inventorySelectedItemIdx && (!_gameInventory[_inventorySelectedItemIdx].isSelectable || (bumpScene == 0 && findLargeItem()))) {
- _inventorySelectedItemIdx = findLargeItem();
+ if (_activeItem && (!_items[_activeItem].useable || (bumpScene == 0 && findLargeItem()))) {
+ _activeItem = findLargeItem();
- if (_inventorySelectedItemIdx) {
- _engine->getGraphicsManager()->drawItem(_gameInventory[_inventorySelectedItemIdx].cursor, 44, 0);
+ if (_activeItem) {
+ _engine->getGraphicsManager()->drawItem(_items[_activeItem].mnum, 44, 0);
} else if (_engine->getGraphicsManager()->acquireSurface()) {
_engine->getGraphicsManager()->clear(_engine->getGraphicsManager()->_screenSurface, 44, 0, 32, 32);
_engine->getGraphicsManager()->unlockSurface();
@@ -813,14 +813,14 @@ void LogicManager::doAction(Link *link) {
break;
case kActionPlayMusic:
Common::sprintf_s(filename, "MUS%03d", link->param1);
- if (!dialogRunning(filename) && (link->param1 != 50 || _gameProgress[kProgressChapter] == 5))
+ if (!dialogRunning(filename) && (link->param1 != 50 || _globals[kProgressChapter] == 5))
playDialog(kCharacterCath, filename, 16, link->param2);
break;
case kActionKnock:
if (link->param1 < 128) {
- if (_gameObjects[link->param1].character) {
- send(kCharacterCath, _gameObjects[link->param1].character, 8, link->param1);
+ if (_doors[link->param1].who) {
+ send(kCharacterCath, _doors[link->param1].who, 8, link->param1);
return;
}
@@ -835,7 +835,7 @@ void LogicManager::doAction(Link *link) {
break;
case kActionPlayAnimation:
- if (!_gameEvents[link->param1]) {
+ if (!_doneNIS[link->param1]) {
playNIS(link->param1);
if (!link->scene)
@@ -843,11 +843,11 @@ void LogicManager::doAction(Link *link) {
}
break;
- case kActionOpenCloseObject:
+ case kActionSetDoor:
if (link->param1 >= 128)
return;
- setDoor(link->param1, _gameObjects[link->param1].character, link->param2, 255, 255);
+ setDoor(link->param1, _doors[link->param1].who, link->param2, 255, 255);
if ((link->param1 < 9 || link->param1 > 16) && (link->param1 < 40 || link->param1 > 47)) {
if (link->param2) {
if (link->param2 == 1) {
@@ -888,39 +888,39 @@ void LogicManager::doAction(Link *link) {
break;
if (link->param1 < 32) {
- if (!_gameInventory[link->param1].isPresent) {
- _gameInventory[link->param1].location = link->param2;
+ if (!_items[link->param1].haveIt) {
+ _items[link->param1].floating = link->param2;
if (link->param1 == kItemCorpse) {
- _gameProgress[kProgressEventCorpseMovedFromFloor] = (_gameInventory[kItemCorpse].location == 3 || _gameInventory[kItemCorpse].location == 4) ? 1 : 0;
+ _globals[kProgressEventCorpseMovedFromFloor] = (_items[kItemCorpse].floating == 3 || _items[kItemCorpse].floating == 4) ? 1 : 0;
}
}
}
break;
- case kActionPickItem:
+ case kActionTakeItem:
if (_engine->isDemo())
break;
if (link->param1 >= 32)
return;
- if (!_gameInventory[link->param1].location)
+ if (!_items[link->param1].floating)
return;
if (link->param1 == kItemCorpse) {
takeTyler(link->scene == 0, link->param2);
if (link->param2 != 4) {
- _gameInventory[kItemCorpse].isPresent = 1;
- _gameInventory[kItemCorpse].location = 0;
- _inventorySelectedItemIdx = kItemCorpse;
- _engine->getGraphicsManager()->drawItem(_gameInventory[kItemCorpse].cursor, 44, 0);
+ _items[kItemCorpse].haveIt = 1;
+ _items[kItemCorpse].floating = 0;
+ _activeItem = kItemCorpse;
+ _engine->getGraphicsManager()->drawItem(_items[kItemCorpse].mnum, 44, 0);
_engine->getGraphicsManager()->burstBox(44u, 0, 32, 32);
}
} else {
- _gameInventory[link->param1].isPresent = 1;
- _gameInventory[link->param1].location = 0;
+ _items[link->param1].haveIt = 1;
+ _items[link->param1].floating = 0;
if (link->param1 == kItemGreenJacket) {
takeJacket(link->scene == 0);
@@ -931,9 +931,9 @@ void LogicManager::doAction(Link *link) {
}
if (link->param1 == kItemParchemin && link->param2 == 2) {
- _gameInventory[kItemParchemin].isPresent = 1;
- _gameInventory[kItemParchemin].location = 0;
- _gameInventory[kItem11].location = 1;
+ _items[kItemParchemin].haveIt = 1;
+ _items[kItemParchemin].floating = 0;
+ _items[kItem11].floating = 1;
queueSFX(kCharacterCath, 9, 0);
} else if (link->param1 == kItemBomb) {
forceJump(kCharacterAbbot, &LogicManager::CONS_Abbot_CatchCath);
@@ -942,22 +942,22 @@ void LogicManager::doAction(Link *link) {
}
}
- if (_gameInventory[link->param1].scene) {
- if (!_useLastSavedNodeIndex) {
+ if (_items[link->param1].closeUp) {
+ if (!_closeUp) {
if (!link->scene)
- link->scene = _trainNodeIndex;
+ link->scene = _activeNode;
- _useLastSavedNodeIndex = 1;
- _lastNodeIndex = link->scene;
+ _closeUp = 1;
+ _nodeReturn = link->scene;
}
- bumpCathNode(_gameInventory[link->param1].scene);
+ bumpCathNode(_items[link->param1].closeUp);
link->scene = kSceneNone;
}
- if (_gameInventory[link->param1].isSelectable) {
- _inventorySelectedItemIdx = link->param1;
- _engine->getGraphicsManager()->drawItem(_gameInventory[link->param1].cursor, 44, 0);
+ if (_items[link->param1].useable) {
+ _activeItem = link->param1;
+ _engine->getGraphicsManager()->drawItem(_items[link->param1].mnum, 44, 0);
_engine->getGraphicsManager()->burstBox(44, 0, 32, 32);
}
}
@@ -967,33 +967,33 @@ void LogicManager::doAction(Link *link) {
if (_engine->isDemo())
break;
- if (link->param1 >= 32 || !_gameInventory[link->param1].isPresent || !link->param2)
+ if (link->param1 >= 32 || !_items[link->param1].haveIt || !link->param2)
return;
if (link->param1 == kItemBriefcase) {
queueSFX(kCharacterCath, 82, 0);
if (link->param2 == 2) {
- if (!_gameProgress[kProgressField58]) {
+ if (!_globals[kProgressField58]) {
_engine->getVCR()->writeSavePoint(1, 0, 0);
- _gameProgress[kProgressField58] = 1;
+ _globals[kProgressField58] = 1;
}
- if (_gameInventory[kItemParchemin].location == 2) {
- _gameInventory[kItemParchemin].isPresent = 1;
- _gameInventory[kItemParchemin].location = 0;
- _gameInventory[kItem11].location = 1;
+ if (_items[kItemParchemin].floating == 2) {
+ _items[kItemParchemin].haveIt = 1;
+ _items[kItemParchemin].floating = 0;
+ _items[kItem11].floating = 1;
queueSFX(kCharacterCath, 9, 0);
}
}
}
- _gameInventory[link->param1].isPresent = 0;
- _gameInventory[link->param1].location = link->param2;
+ _items[link->param1].haveIt = 0;
+ _items[link->param1].floating = link->param2;
if (link->param1 == 20)
dropTyler(link->scene == 0);
- _inventorySelectedItemIdx = 0;
+ _activeItem = 0;
if (_engine->getGraphicsManager()->acquireSurface()) {
_engine->getGraphicsManager()->clear(_engine->getGraphicsManager()->_screenSurface, 44, 0, 32, 32);
@@ -1007,7 +1007,7 @@ void LogicManager::doAction(Link *link) {
if (_engine->isDemo())
break;
- if (!_gameEvents[kEventCathLookOutsideWindowDay] && !_gameEvents[kEventCathLookOutsideWindowNight] && getModel(1) != 1 || !_gameProgress[kProgressIsTrainRunning] || link->param1 == 45 && (inComp(kCharacterRebecca, kCarRedSleeping, 4840) || _gameObjects[kObjectOutsideBetweenCompartments].door != 2) || _inventorySelectedItemIdx == kItemBriefcase || _inventorySelectedItemIdx == kItemFirebird) {
+ if (!_doneNIS[kEventCathLookOutsideWindowDay] && !_doneNIS[kEventCathLookOutsideWindowNight] && getModel(1) != 1 || !_globals[kProgressIsTrainRunning] || link->param1 == 45 && (inComp(kCharacterRebecca, kCarRedSleeping, 4840) || _doors[kObjectOutsideBetweenCompartments].status != 2) || _activeItem == kItemBriefcase || _activeItem == kItemFirebird) {
if (link->param1 == 9 || link->param1 >= 44 && link->param1 <= 45) {
if (isNight()) {
playNIS(kEventCathLookOutsideWindowNight);
@@ -1023,7 +1023,7 @@ void LogicManager::doAction(Link *link) {
switch (link->param1) {
case 9:
- _gameEvents[kEventCathLookOutsideWindowDay] = 1;
+ _doneNIS[kEventCathLookOutsideWindowDay] = 1;
if (isNight()) {
playNIS(kEventCathGoOutsideTylerCompartmentNight);
@@ -1031,10 +1031,10 @@ void LogicManager::doAction(Link *link) {
playNIS(kEventCathGoOutsideTylerCompartmentDay);
}
- _gameProgress[kProgressFieldC8] = 1;
+ _globals[kProgressFieldC8] = 1;
break;
case 44:
- _gameEvents[kEventCathLookOutsideWindowDay] = 1;
+ _doneNIS[kEventCathLookOutsideWindowDay] = 1;
if (isNight()) {
playNIS(kEventCathGoOutsideNight);
@@ -1042,10 +1042,10 @@ void LogicManager::doAction(Link *link) {
playNIS(kEventCathGoOutsideDay);
}
- _gameProgress[kProgressFieldC8] = 1;
+ _globals[kProgressFieldC8] = 1;
break;
case 45:
- _gameEvents[kEventCathLookOutsideWindowDay] = 1;
+ _doneNIS[kEventCathLookOutsideWindowDay] = 1;
if (isNight()) {
playNIS(kEventCathGetInsideNight);
@@ -1071,7 +1071,7 @@ void LogicManager::doAction(Link *link) {
playNIS(kEventCathSlipTylerCompartmentDay);
}
- _gameProgress[kProgressFieldC8] = 0;
+ _globals[kProgressFieldC8] = 0;
if (link->scene)
return;
@@ -1085,7 +1085,7 @@ void LogicManager::doAction(Link *link) {
playNIS(kEventCathSlipDay);
}
- _gameProgress[kProgressFieldC8] = 0;
+ _globals[kProgressFieldC8] = 0;
if (link->scene)
return;
@@ -1138,10 +1138,10 @@ void LogicManager::doAction(Link *link) {
break;
if (link->param1 == 1) {
- if (_gameProgress[kProgressChapter] == 2 || _gameProgress[kProgressChapter] == 3) {
+ if (_globals[kProgressChapter] == 2 || _globals[kProgressChapter] == 3) {
playNIS(kEventCathTopTrainGreenJacket);
- } else if (_gameProgress[kProgressChapter] == 5) {
- playNIS(kEventCathTopTrainNoJacketDay - (_gameProgress[kProgressIsDayTime] == kProgressField0));
+ } else if (_globals[kProgressChapter] == 5) {
+ playNIS(kEventCathTopTrainNoJacketDay - (_globals[kProgressIsDayTime] == kProgressField0));
}
if (link->scene)
@@ -1150,12 +1150,12 @@ void LogicManager::doAction(Link *link) {
if (link->param1 != 2)
return;
- if (_gameProgress[kProgressChapter] == 2 || _gameProgress[kProgressChapter] == 3) {
+ if (_globals[kProgressChapter] == 2 || _globals[kProgressChapter] == 3) {
playNIS(kEventCathClimbUpTrainGreenJacket);
playNIS(kEventCathTopTrainGreenJacket);
- } else if (_gameProgress[kProgressChapter] == 5) {
- playNIS(kEventCathClimbUpTrainNoJacketDay - (_gameProgress[kProgressIsDayTime] == 0));
- playNIS(kEventCathTopTrainNoJacketDay - (_gameProgress[kProgressIsDayTime] == 0));
+ } else if (_globals[kProgressChapter] == 5) {
+ playNIS(kEventCathClimbUpTrainNoJacketDay - (_globals[kProgressIsDayTime] == 0));
+ playNIS(kEventCathTopTrainNoJacketDay - (_globals[kProgressIsDayTime] == 0));
}
if (link->scene)
@@ -1168,10 +1168,10 @@ void LogicManager::doAction(Link *link) {
if (_engine->isDemo())
break;
- if (_gameProgress[kProgressChapter] == 2 || _gameProgress[kProgressChapter] == 3) {
+ if (_globals[kProgressChapter] == 2 || _globals[kProgressChapter] == 3) {
nisId = kEventCathClimbDownTrainGreenJacket;
- } else if (_gameProgress[kProgressChapter] == 5) {
- if (_gameProgress[kProgressIsDayTime] == 0) {
+ } else if (_globals[kProgressChapter] == 5) {
+ if (_globals[kProgressIsDayTime] == 0) {
nisId = kEventCathClimbDownTrainNoJacketNight;
} else {
nisId = kEventCathClimbDownTrainNoJacketDay;
@@ -1201,11 +1201,11 @@ void LogicManager::doAction(Link *link) {
send(kCharacterCath, 32, 338494260, 0);
break;
case 3:
- if (_inventorySelectedItemIdx == kItemBriefcase) {
- _gameInventory[kItemBriefcase].location = 3;
- _gameInventory[kItemBriefcase].isPresent = 0;
+ if (_activeItem == kItemBriefcase) {
+ _items[kItemBriefcase].floating = 3;
+ _items[kItemBriefcase].haveIt = 0;
queueSFX(kCharacterCath, 82, 0);
- _inventorySelectedItemIdx = 0;
+ _activeItem = 0;
if (_engine->getGraphicsManager()->acquireSurface()) {
_engine->getGraphicsManager()->clear(_engine->getGraphicsManager()->_screenSurface, 44, 0, 32, 32);
_engine->getGraphicsManager()->unlockSurface();
@@ -1213,7 +1213,7 @@ void LogicManager::doAction(Link *link) {
_engine->getGraphicsManager()->burstBox(44, 0, 32, 32);
}
- if (_gameInventory[kItemBriefcase].location == 3) {
+ if (_items[kItemBriefcase].floating == 3) {
nisId = kEventCathJumpUpCeiling;
} else {
nisId = kEventCathJumpUpCeilingBriefcase;
@@ -1221,7 +1221,7 @@ void LogicManager::doAction(Link *link) {
break;
case 4:
- if (_gameProgress[kProgressChapter] == 1)
+ if (_globals[kProgressChapter] == 1)
send(kCharacterCath, kCharacterKronos, 202621266, 0);
break;
default:
@@ -1248,16 +1248,16 @@ void LogicManager::doAction(Link *link) {
nisId = kEventCathBurnRope;
break;
case 3:
- if (_gameEvents[kEventCathBurnRope]) {
+ if (_doneNIS[kEventCathBurnRope]) {
playNIS(kEventCathRemoveBonds);
- _gameProgress[kProgressField84] = 0;
+ _globals[kProgressField84] = 0;
bumpCath(kCarBaggageRear, 89, 255);
link->scene = kSceneNone;
}
break;
case 4:
- if (!_gameEvents[kEventCathStruggleWithBonds2]) {
+ if (!_doneNIS[kEventCathStruggleWithBonds2]) {
playNIS(kEventCathStruggleWithBonds2);
queueSFX(kCharacterCath, 101, 0);
dropItem(kItemMatch, 2);
@@ -1297,7 +1297,7 @@ void LogicManager::doAction(Link *link) {
link->scene = kSceneNone;
} else {
if (cathHasItem(kItemKey)) {
- if (!_gameEvents[kEventAnnaBaggageArgument]) {
+ if (!_doneNIS[kEventAnnaBaggageArgument]) {
forceJump(kCharacterAnna, &LogicManager::CONS_Anna_BaggageFight);
link->scene = kSceneNone;
}
@@ -1318,7 +1318,7 @@ void LogicManager::doAction(Link *link) {
break;
case 2:
send(kCharacterCath, kCharacterMaster, 225367984, 0);
- _inventorySelectedItemIdx = 0;
+ _activeItem = 0;
if (_engine->getGraphicsManager()->acquireSurface()) {
_engine->getGraphicsManager()->clear(_engine->getGraphicsManager()->_screenSurface, 44, 0, 32, 32);
@@ -1380,7 +1380,7 @@ void LogicManager::doAction(Link *link) {
if (_engine->isDemo())
break;
- _gameProgress[kProgressFieldC] = 1;
+ _globals[kProgressFieldC] = 1;
queueSFX(kCharacterCath, link->param1, link->param2);
Common::sprintf_s(filename, "MUS%03d", link->param3);
if (!dialogRunning(filename))
@@ -1393,7 +1393,7 @@ void LogicManager::doAction(Link *link) {
if (_engine->_beetle && _engine->_beetle->click()) {
_engine->endBeetle();
- _gameInventory[kItemBeetle].location = 1;
+ _items[kItemBeetle].floating = 1;
send(kCharacterCath, kCharacterClerk, 202613084, 0);
}
@@ -1401,28 +1401,28 @@ void LogicManager::doAction(Link *link) {
case kActionCompartment:
case kActionExitCompartment:
- case kActionEnterCompartment:
+ case kActionRattle:
{
bool skipFlag = false;
if (link->action != kActionCompartment) {
if (!_engine->isDemo()) {
if (link->action == kActionExitCompartment) {
- if (!_gameProgress[kProgressField30] && _gameProgress[kProgressJacket]) {
+ if (!_globals[kProgressField30] && _globals[kProgressJacket]) {
_engine->getVCR()->writeSavePoint(1, kCharacterCath, 0);
- _gameProgress[kProgressField30] = 1;
+ _globals[kProgressField30] = 1;
}
setModel(1, link->param2);
}
- if (_gameObjects[kItemMatchBox].door != 1 && _gameObjects[kItemMatchBox].door != 3 && _inventorySelectedItemIdx != kItemKey) {
- if (!_gameProgress[kProgressEventFoundCorpse]) {
+ if (_doors[kItemMatchBox].status != 1 && _doors[kItemMatchBox].status != 3 && _activeItem != kItemKey) {
+ if (!_globals[kProgressEventFoundCorpse]) {
_engine->getVCR()->writeSavePoint(1, kCharacterCath, 0);
playDialog(kCharacterCath, "LIB014", -1, 0);
playNIS(kEventCathFindCorpse);
playDialog(kCharacterCath, "LIB015", -1, 0);
- _gameProgress[kProgressEventFoundCorpse] = 1;
+ _globals[kProgressEventFoundCorpse] = 1;
link->scene = kSceneCompartmentCorpse;
return;
@@ -1435,12 +1435,12 @@ void LogicManager::doAction(Link *link) {
}
}
- if (skipFlag || link->action == kActionCompartment || (link->action != kActionEnterCompartment || _gameInventory[kItemBriefcase].location != 2)) {
+ if (skipFlag || link->action == kActionCompartment || (link->action != kActionRattle || _items[kItemBriefcase].floating != 2)) {
if (link->param1 >= 128)
return;
- if (_gameObjects[link->param1].character) {
- send(kCharacterCath, _gameObjects[link->param1].character, 9, link->param1);
+ if (_doors[link->param1].who) {
+ send(kCharacterCath, _doors[link->param1].who, 9, link->param1);
link->scene = kSceneNone;
return;
}
@@ -1452,8 +1452,8 @@ void LogicManager::doAction(Link *link) {
}
}
- if (_gameObjects[link->param1].door == 1 || _gameObjects[link->param1].door == 3 || preventEnterComp(link->param1)) {
- if (_gameObjects[link->param1].door != 1 || preventEnterComp(link->param1) || _inventorySelectedItemIdx != 15 && (link->param1 != 1 || !cathHasItem(kItemKey) || _inventorySelectedItemIdx != kItemBriefcase && _inventorySelectedItemIdx != kItemFirebird)) {
+ if (_doors[link->param1].status == 1 || _doors[link->param1].status == 3 || preventEnterComp(link->param1)) {
+ if (_doors[link->param1].status != 1 || preventEnterComp(link->param1) || _activeItem != 15 && (link->param1 != 1 || !cathHasItem(kItemKey) || _activeItem != kItemBriefcase && _activeItem != kItemFirebird)) {
if (!cathRunningDialog("LIB013"))
queueSFX(kCharacterCath, 13, 0);
@@ -1467,13 +1467,13 @@ void LogicManager::doAction(Link *link) {
setDoor(link->param1, kCharacterCath, 0, 10, 9);
queueSFX(kCharacterCath, 15, 22);
- _inventorySelectedItemIdx = 0;
+ _activeItem = 0;
if (_engine->getGraphicsManager()->acquireSurface()) {
_engine->getGraphicsManager()->clear(_engine->getGraphicsManager()->_screenSurface, 44, 0, 32, 32);
_engine->getGraphicsManager()->unlockSurface();
}
} else {
- if (link->action != 16 || _inventorySelectedItemIdx != kItemKey) {
+ if (link->action != 16 || _activeItem != kItemKey) {
if (link->param1 == 109) {
queueSFX(kCharacterCath, 26, 0);
} else {
@@ -1486,7 +1486,7 @@ void LogicManager::doAction(Link *link) {
setDoor(1, kCharacterCath, 1, 10, 9);
queueSFX(kCharacterCath, 16, 0);
- _inventorySelectedItemIdx = 0;
+ _activeItem = 0;
link->scene = kSceneNone;
if (_engine->getGraphicsManager()->acquireSurface()) {
@@ -1503,9 +1503,9 @@ void LogicManager::doAction(Link *link) {
queueSFX(kCharacterCath, 14, 0);
queueSFX(kCharacterCath, 15, 22);
- if (_gameProgress[kProgressField78] && !dialogRunning("MUS003")) {
+ if (_globals[kProgressField78] && !dialogRunning("MUS003")) {
playDialog(kCharacterCath, "MUS003", 16, 0);
- _gameProgress[kProgressField78] = 0;
+ _globals[kProgressField78] = 0;
}
bumpCath(kCarGreenSleeping, 77, 255);
@@ -1527,7 +1527,7 @@ void LogicManager::doAction(Link *link) {
send(kCharacterCath, kCharacterVesna, 202884544, 0);
break;
case 3:
- if (_gameProgress[kProgressChapter] == 5) {
+ if (_globals[kProgressChapter] == 5) {
send(kCharacterCath, kCharacterAbbot, 168646401, 0);
send(kCharacterCath, kCharacterMilos, 168646401, 0);
} else {
@@ -1554,7 +1554,7 @@ void LogicManager::doAction(Link *link) {
if (_engine->isDemo())
break;
- if (_gameEvents[kEventKronosBringFirebird]) {
+ if (_doneNIS[kEventKronosBringFirebird]) {
switch (link->param1) {
case 1:
send(kCharacterCath, kCharacterAnna, 205294778, 0);
@@ -1579,7 +1579,7 @@ void LogicManager::doAction(Link *link) {
nisId = kEventCathOpenEggNoBackground;
}
- _gameProgress[kProgressIsEggOpen] = 1;
+ _globals[kProgressIsEggOpen] = 1;
break;
}
case 2:
@@ -1589,7 +1589,7 @@ void LogicManager::doAction(Link *link) {
nisId = kEventCathCloseEgg;
}
- _gameProgress[kProgressIsEggOpen] = 0;
+ _globals[kProgressIsEggOpen] = 0;
break;
case 3:
if (!inComp(kCharacterCath, kCarGreenSleeping, 8200)) {
@@ -1614,9 +1614,9 @@ void LogicManager::doAction(Link *link) {
if (_engine->isDemo())
break;
- if (_gameInventory[kItemMatch].location && !_gameInventory[kItemMatch].isPresent) {
- _gameInventory[kItemMatch].isPresent = 1;
- _gameInventory[kItemMatch].location = 0;
+ if (_items[kItemMatch].floating && !_items[kItemMatch].haveIt) {
+ _items[kItemMatch].haveIt = 1;
+ _items[kItemMatch].floating = 0;
queueSFX(kCharacterCath, 102, 0);
}
@@ -1640,9 +1640,9 @@ void LogicManager::doAction(Link *link) {
break;
queueSFX(kCharacterCath, 43, 0);
- if (_gameProgress[kProgressField7C] && !dialogRunning("MUS003")) {
+ if (_globals[kProgressField7C] && !dialogRunning("MUS003")) {
playDialog(kCharacterCath, "MUS003", 16, 0);
- _gameProgress[kProgressField7C] = 0;
+ _globals[kProgressField7C] = 0;
}
break;
@@ -1651,9 +1651,9 @@ void LogicManager::doAction(Link *link) {
break;
queueSFX(kCharacterCath, 24, 0);
- if (_gameProgress[kProgressField80] && !dialogRunning("MUS003")) {
+ if (_globals[kProgressField80] && !dialogRunning("MUS003")) {
playDialog(kCharacterCath, "MUS003", 16, 0);
- _gameProgress[kProgressField80] = 0;
+ _globals[kProgressField80] = 0;
}
break;
@@ -1667,13 +1667,13 @@ void LogicManager::doAction(Link *link) {
}
if (link->param1 < 128) {
- if (_gameObjects[link->param1].character)
- send(kCharacterCath, _gameObjects[link->param1].character, 8, link->param1);
+ if (_doors[link->param1].who)
+ send(kCharacterCath, _doors[link->param1].who, 8, link->param1);
}
return;
case kActionPlayMusicChapter:
- switch (_gameProgress[kProgressChapter]) {
+ switch (_globals[kProgressChapter]) {
case 1:
musId = link->param1;
break;
@@ -1698,7 +1698,7 @@ void LogicManager::doAction(Link *link) {
if (_engine->isDemo())
break;
- switch (_gameProgress[kProgressChapter]) {
+ switch (_globals[kProgressChapter]) {
case 1:
musId = 1;
break;
@@ -1739,22 +1739,22 @@ void LogicManager::doAction(Link *link) {
}
void LogicManager::takeTyler(bool doCleanNIS, int8 bedPosition) {
- if (!_gameProgress[kProgressJacket])
- _gameProgress[kProgressJacket] = 1;
+ if (!_globals[kProgressJacket])
+ _globals[kProgressJacket] = 1;
- if (_gameInventory[kItemCorpse].location == 1) {
+ if (_items[kItemCorpse].floating == 1) {
if (bedPosition == 4) {
- if (_gameProgress[kProgressJacket])
+ if (_globals[kProgressJacket])
playNIS(kEventCorpsePickFloorOpenedBedOriginal);
- _gameInventory[kItemCorpse].location = 5;
- } else if (_gameProgress[kProgressJacket] == 2) {
+ _items[kItemCorpse].floating = 5;
+ } else if (_globals[kProgressJacket] == 2) {
playNIS(kEventCorpsePickFloorGreen);
} else {
playNIS(kEventCorpsePickFloorOriginal);
}
- } else if (_gameInventory[kItemCorpse].location == 2) {
- if (_gameProgress[kProgressJacket] == 2) {
+ } else if (_items[kItemCorpse].floating == 2) {
+ if (_globals[kProgressJacket] == 2) {
playNIS(kEventCorpsePickBedGreen);
} else {
playNIS(kEventCorpsePickBedOriginal);
@@ -1766,9 +1766,9 @@ void LogicManager::takeTyler(bool doCleanNIS, int8 bedPosition) {
}
void LogicManager::dropTyler(bool doCleanNIS) {
- switch (_gameInventory[kItemCorpse].location) {
+ switch (_items[kItemCorpse].floating) {
case 1:
- if (_gameProgress[kProgressJacket] == 2) {
+ if (_globals[kProgressJacket] == 2) {
playNIS(kEventCorpseDropFloorGreen);
} else {
playNIS(kEventCorpseDropFloorOriginal);
@@ -1776,7 +1776,7 @@ void LogicManager::dropTyler(bool doCleanNIS) {
break;
case 2:
- if (_gameProgress[kProgressJacket] == 2) {
+ if (_globals[kProgressJacket] == 2) {
playNIS(kEventCorpseDropBedGreen);
} else {
playNIS(kEventCorpseDropBedOriginal);
@@ -1784,22 +1784,22 @@ void LogicManager::dropTyler(bool doCleanNIS) {
break;
case 4:
- _gameInventory[kItemCorpse].location = 0;
- _gameProgress[kProgressEventCorpseThrown] = 1;
+ _items[kItemCorpse].floating = 0;
+ _globals[kProgressEventCorpseThrown] = 1;
if (_gameTime <= 1138500) {
- if (_gameProgress[kProgressJacket] == 2) {
+ if (_globals[kProgressJacket] == 2) {
playNIS(kEventCorpseDropWindowGreen);
} else {
playNIS(kEventCorpseDropWindowOriginal);
}
- _gameProgress[kProgressField24] = 1;
+ _globals[kProgressField24] = 1;
} else {
playNIS(kEventCorpseDropBridge);
}
- _gameProgress[kProgressEventCorpseMovedFromFloor] = 1;
+ _globals[kProgressEventCorpseMovedFromFloor] = 1;
break;
}
@@ -1809,13 +1809,13 @@ void LogicManager::dropTyler(bool doCleanNIS) {
}
void LogicManager::takeJacket(bool doCleanNIS) {
- _gameProgress[kProgressJacket] = 2;
- _gameInventory[kItemMatchBox].isPresent = 1;
- _gameInventory[kItemMatchBox].location = 0;
+ _globals[kProgressJacket] = 2;
+ _items[kItemMatchBox].haveIt = 1;
+ _items[kItemMatchBox].floating = 0;
setDoor(9, kCharacterCath, 2, 255, 255);
playNIS(kEventPickGreenJacket);
- _gameProgress[kProgressPortrait] = 34;
- _engine->getGraphicsManager()->drawItemDim(_gameProgress[kProgressPortrait], 0, 0, 1);
+ _globals[kProgressPortrait] = 34;
+ _engine->getGraphicsManager()->drawItemDim(_globals[kProgressPortrait], 0, 0, 1);
_engine->getGraphicsManager()->burstBox(0, 0, 32, 32);
if (doCleanNIS)
@@ -1823,7 +1823,7 @@ void LogicManager::takeJacket(bool doCleanNIS) {
}
void LogicManager::takeScarf(bool doCleanNIS) {
- if (_gameProgress[kProgressJacket] == 2) {
+ if (_globals[kProgressJacket] == 2) {
playNIS(kEventPickScarfGreen);
} else {
playNIS(kEventPickScarfOriginal);
@@ -1839,195 +1839,195 @@ const char *LogicManager::getHintDialog(int character) {
switch (character) {
case kCharacterAnna:
- if (_gameEvents[kEventAnnaDialogGoToJerusalem]) {
+ if (_doneNIS[kEventAnnaDialogGoToJerusalem]) {
return "XANN12";
- } else if (_gameEvents[kEventLocomotiveRestartTrain]) {
+ } else if (_doneNIS[kEventLocomotiveRestartTrain]) {
return "XANN11";
- } else if (_gameEvents[kEventAnnaBaggageTies] ||
- _gameEvents[kEventAnnaBaggageTies2] ||
- _gameEvents[kEventAnnaBaggageTies3] ||
- _gameEvents[kEventAnnaBaggageTies4]) {
+ } else if (_doneNIS[kEventAnnaBaggageTies] ||
+ _doneNIS[kEventAnnaBaggageTies2] ||
+ _doneNIS[kEventAnnaBaggageTies3] ||
+ _doneNIS[kEventAnnaBaggageTies4]) {
return "XANN10";
- } else if (_gameEvents[kEventAnnaTired] ||
- _gameEvents[kEventAnnaTiredKiss]) {
+ } else if (_doneNIS[kEventAnnaTired] ||
+ _doneNIS[kEventAnnaTiredKiss]) {
return "XANN9";
- } else if (_gameEvents[kEventAnnaBaggageArgument]) {
+ } else if (_doneNIS[kEventAnnaBaggageArgument]) {
return "XANN8";
- } else if (_gameEvents[kEventKronosVisit]) {
+ } else if (_doneNIS[kEventKronosVisit]) {
return "XANN7";
- } else if (_gameEvents[kEventAbbotIntroduction]) {
+ } else if (_doneNIS[kEventAbbotIntroduction]) {
return "XANN6A";
- } else if (_gameEvents[kEventVassiliSeizure]) {
+ } else if (_doneNIS[kEventVassiliSeizure]) {
return "XANN6";
- } else if (_gameEvents[kEventAugustPresentAnna] ||
- _gameEvents[kEventAugustPresentAnnaFirstIntroduction]) {
+ } else if (_doneNIS[kEventAugustPresentAnna] ||
+ _doneNIS[kEventAugustPresentAnnaFirstIntroduction]) {
return "XANN5";
- } else if (_gameProgress[kProgressField60]) {
+ } else if (_globals[kProgressField60]) {
return "XANN4";
- } else if (_gameEvents[kEventAnnaGiveScarf] ||
- _gameEvents[kEventAnnaGiveScarfDiner] ||
- _gameEvents[kEventAnnaGiveScarfSalon] ||
- _gameEvents[kEventAnnaGiveScarfMonogram] ||
- _gameEvents[kEventAnnaGiveScarfDinerMonogram] ||
- _gameEvents[kEventAnnaGiveScarfSalonMonogram]) {
+ } else if (_doneNIS[kEventAnnaGiveScarf] ||
+ _doneNIS[kEventAnnaGiveScarfDiner] ||
+ _doneNIS[kEventAnnaGiveScarfSalon] ||
+ _doneNIS[kEventAnnaGiveScarfMonogram] ||
+ _doneNIS[kEventAnnaGiveScarfDinerMonogram] ||
+ _doneNIS[kEventAnnaGiveScarfSalonMonogram]) {
return "XANN3";
- } else if (_gameEvents[kEventDinerMindJoin]) {
+ } else if (_doneNIS[kEventDinerMindJoin]) {
return "XANN2";
- } else if (_gameEvents[kEventGotALight] ||
- _gameEvents[kEventGotALightD]) {
+ } else if (_doneNIS[kEventGotALight] ||
+ _doneNIS[kEventGotALightD]) {
return "XANN1";
}
break;
case kCharacterAugust:
- if (_gameEvents[kEventAugustTalkCigar]) {
+ if (_doneNIS[kEventAugustTalkCigar]) {
return "XAUG6";
- } else if (_gameEvents[kEventAugustBringBriefcase]) {
+ } else if (_doneNIS[kEventAugustBringBriefcase]) {
return "XAUG5";
- } else if (_gameEvents[kEventAugustMerchandise]) {
+ } else if (_doneNIS[kEventAugustMerchandise]) {
if (_gameTime <= 2200500) {
return "XAUG4";
} else {
return "XAUG4A";
}
- } else if (_gameEvents[kEventDinerAugust] ||
- _gameEvents[kEventDinerAugustAlexeiBackground] ||
- _gameEvents[kEventMeetAugustTylerCompartment] ||
- _gameEvents[kEventMeetAugustHisCompartment] ||
- _gameEvents[kEventMeetAugustTylerCompartmentBed] ||
- _gameEvents[kEventMeetAugustHisCompartmentBed]) {
+ } else if (_doneNIS[kEventDinerAugust] ||
+ _doneNIS[kEventDinerAugustAlexeiBackground] ||
+ _doneNIS[kEventMeetAugustTylerCompartment] ||
+ _doneNIS[kEventMeetAugustHisCompartment] ||
+ _doneNIS[kEventMeetAugustTylerCompartmentBed] ||
+ _doneNIS[kEventMeetAugustHisCompartmentBed]) {
return "XAUG3";
- } else if (_gameEvents[kEventAugustPresentAnnaFirstIntroduction]) {
+ } else if (_doneNIS[kEventAugustPresentAnnaFirstIntroduction]) {
return "XAUG2";
- } else if (_gameProgress[kProgressEventMertensAugustWaiting]) {
+ } else if (_globals[kProgressEventMertensAugustWaiting]) {
return "XAUG1";
}
break;
case kCharacterTatiana:
- if (_gameEvents[kEventTatianaTylerCompartment]) {
+ if (_doneNIS[kEventTatianaTylerCompartment]) {
return "XTAT6";
- } else if (_gameEvents[kEventTatianaCompartmentStealEgg]) {
+ } else if (_doneNIS[kEventTatianaCompartmentStealEgg]) {
return "XTAT5";
- } else if (_gameEvents[kEventTatianaGivePoem]) {
+ } else if (_doneNIS[kEventTatianaGivePoem]) {
return "XTAT3";
- } else if (_gameProgress[kProgressField64]) {
+ } else if (_globals[kProgressField64]) {
return "XTAT1";
}
break;
case kCharacterVassili:
- if (_gameEvents[kEventCathFreePassengers]) {
+ if (_doneNIS[kEventCathFreePassengers]) {
return "XVAS4";
- } else if (_gameEvents[kEventVassiliCompartmentStealEgg]) {
+ } else if (_doneNIS[kEventVassiliCompartmentStealEgg]) {
return "XVAS3";
- } else if (_gameEvents[kEventAbbotIntroduction]) {
+ } else if (_doneNIS[kEventAbbotIntroduction]) {
return "XVAS2";
- } else if (_gameEvents[kEventVassiliSeizure]) {
+ } else if (_doneNIS[kEventVassiliSeizure]) {
return "XVAS1A";
- } else if (_gameProgress[kProgressField64]) {
+ } else if (_globals[kProgressField64]) {
return "XVAS1";
}
break;
case kCharacterAlexei:
- if (_gameProgress[kProgressField88]) {
+ if (_globals[kProgressField88]) {
return "XALX6";
- } else if (_gameProgress[kProgressField8C]) {
+ } else if (_globals[kProgressField8C]) {
return "XALX5";
- } else if (_gameProgress[kProgressField90]) {
+ } else if (_globals[kProgressField90]) {
return "XALX4A";
- } else if (_gameProgress[kProgressField68]) {
+ } else if (_globals[kProgressField68]) {
return "XALX4";
- } else if (_gameEvents[kEventAlexeiSalonPoem]) {
+ } else if (_doneNIS[kEventAlexeiSalonPoem]) {
return "XALX3";
- } else if (_gameEvents[kEventAlexeiSalonVassili]) {
+ } else if (_doneNIS[kEventAlexeiSalonVassili]) {
return "XALX2";
- } else if (_gameEvents[kEventAlexeiDiner] ||
- _gameEvents[kEventAlexeiDinerOriginalJacket]) {
+ } else if (_doneNIS[kEventAlexeiDiner] ||
+ _doneNIS[kEventAlexeiDinerOriginalJacket]) {
return "XALX1";
}
break;
case kCharacterAbbot:
- if (_gameEvents[kEventAbbotDrinkDefuse]) {
+ if (_doneNIS[kEventAbbotDrinkDefuse]) {
return "XABB4";
- } else if (_gameEvents[kEventAbbotInvitationDrink] ||
- _gameEvents[kEventDefuseBomb]) {
+ } else if (_doneNIS[kEventAbbotInvitationDrink] ||
+ _doneNIS[kEventDefuseBomb]) {
return "XABB3";
- } else if (_gameEvents[kEventAbbotWrongCompartment] ||
- _gameEvents[kEventAbbotWrongCompartmentBed]) {
+ } else if (_doneNIS[kEventAbbotWrongCompartment] ||
+ _doneNIS[kEventAbbotWrongCompartmentBed]) {
return "XABB2";
- } else if (_gameEvents[kEventAbbotIntroduction]) {
+ } else if (_doneNIS[kEventAbbotIntroduction]) {
return "XABB1";
}
break;
case kCharacterMilos:
- if (_gameEvents[kEventLocomotiveMilosDay] || _gameEvents[kEventLocomotiveMilosNight]) {
+ if (_doneNIS[kEventLocomotiveMilosDay] || _doneNIS[kEventLocomotiveMilosNight]) {
return "XMIL5";
- } else if (_gameEvents[kEventMilosCompartmentVisitTyler] &&
- (_gameProgress[kProgressChapter] == 3 ||
- _gameProgress[kProgressChapter] == 4)) {
+ } else if (_doneNIS[kEventMilosCompartmentVisitTyler] &&
+ (_globals[kProgressChapter] == 3 ||
+ _globals[kProgressChapter] == 4)) {
return "XMIL4";
- } else if (_gameEvents[kEventMilosCorridorThanks] ||
- _gameProgress[kProgressChapter] == 5) {
+ } else if (_doneNIS[kEventMilosCorridorThanks] ||
+ _globals[kProgressChapter] == 5) {
return "XMIL3";
- } else if (_gameEvents[kEventMilosCompartmentVisitAugust]) {
+ } else if (_doneNIS[kEventMilosCompartmentVisitAugust]) {
return "XMIL2";
- } else if (_gameEvents[kEventMilosTylerCompartmentDefeat]) {
+ } else if (_doneNIS[kEventMilosTylerCompartmentDefeat]) {
return "XMIL1";
}
break;
case kCharacterVesna:
- if (_gameProgress[kProgressField94]) {
+ if (_globals[kProgressField94]) {
return "XVES2";
- } else if (_gameProgress[kProgressField98]) {
+ } else if (_globals[kProgressField98]) {
return "XVES1";
}
break;
case kCharacterKronos:
- if (_gameEvents[kEventKronosReturnBriefcase])
+ if (_doneNIS[kEventKronosReturnBriefcase])
return "XKRO6";
- if (_gameEvents[kEventKronosBringEggCeiling] ||
- _gameEvents[kEventKronosBringEgg]) {
+ if (_doneNIS[kEventKronosBringEggCeiling] ||
+ _doneNIS[kEventKronosBringEgg]) {
return "XKRO5";
} else {
- if (_gameEvents[kEventKronosConversation] ||
- _gameEvents[kEventKronosConversationFirebird]) {
- if (_gameInventory[kItemFirebird].location != 6 &&
- _gameInventory[kItemFirebird].location != 5 &&
- _gameInventory[kItemFirebird].location != 2 &&
- _gameInventory[kItemFirebird].location != 1)
+ if (_doneNIS[kEventKronosConversation] ||
+ _doneNIS[kEventKronosConversationFirebird]) {
+ if (_items[kItemFirebird].floating != 6 &&
+ _items[kItemFirebird].floating != 5 &&
+ _items[kItemFirebird].floating != 2 &&
+ _items[kItemFirebird].floating != 1)
return "XKRO4A";
}
- if (_gameEvents[kEventKronosConversationFirebird])
+ if (_doneNIS[kEventKronosConversationFirebird])
return "XKRO4";
- if (_gameEvents[kEventMilosCompartmentVisitAugust]) {
- if (_gameEvents[kEventKronosConversation])
+ if (_doneNIS[kEventMilosCompartmentVisitAugust]) {
+ if (_doneNIS[kEventKronosConversation])
return "XKRO3";
- } else if (_gameEvents[kEventKronosConversation]) {
+ } else if (_doneNIS[kEventKronosConversation]) {
return "XKRO2";
}
- if (_gameProgress[kProgressEventMertensChronosInvitation]) {
+ if (_globals[kProgressEventMertensChronosInvitation]) {
return "XKRO1";
}
}
break;
case kCharacterFrancois:
- if (_gameProgress[kProgressField9C]) {
+ if (_globals[kProgressField9C]) {
return "XFRA3";
- } else if (_gameProgress[kProgressFieldA0] ||
- _gameEvents[kEventFrancoisWhistle] ||
- _gameEvents[kEventFrancoisWhistleD] ||
- _gameEvents[kEventFrancoisWhistleNight] ||
- _gameEvents[kEventFrancoisWhistleNightD]) {
+ } else if (_globals[kProgressFieldA0] ||
+ _doneNIS[kEventFrancoisWhistle] ||
+ _doneNIS[kEventFrancoisWhistleD] ||
+ _doneNIS[kEventFrancoisWhistleNight] ||
+ _doneNIS[kEventFrancoisWhistleNightD]) {
return "XFRA2";
} else if (_gameTime <= 1075500) {
return "XFRA1";
@@ -2035,75 +2035,75 @@ const char *LogicManager::getHintDialog(int character) {
break;
case kCharacterMadame:
- if (_gameProgress[kProgressFieldA4]) {
+ if (_globals[kProgressFieldA4]) {
return "XMME4";
- } else if (_gameProgress[kProgressFieldA8]) {
+ } else if (_globals[kProgressFieldA8]) {
return "XMME3";
- } else if (_gameProgress[kProgressFieldA0]) {
+ } else if (_globals[kProgressFieldA0]) {
return "XMME2";
- } else if (_gameProgress[kProgressFieldAC]) {
+ } else if (_globals[kProgressFieldAC]) {
return "XMME1";
}
break;
case kCharacterMonsieur:
- if (_gameProgress[kProgressEventMetBoutarel]) {
+ if (_globals[kProgressEventMetBoutarel]) {
return "XMRB1";
}
break;
case kCharacterRebecca:
- if (_gameProgress[kProgressFieldB4]) {
+ if (_globals[kProgressFieldB4]) {
return "XREB1A";
- } else if (_gameProgress[kProgressFieldB8]) {
+ } else if (_globals[kProgressFieldB8]) {
return "XREB1";
}
break;
case kCharacterSophie:
- if (_gameProgress[kProgressFieldB0]) {
+ if (_globals[kProgressFieldB0]) {
return "XSOP2";
- } else if (_gameProgress[kProgressFieldBC]) {
+ } else if (_globals[kProgressFieldBC]) {
return "XSOP1B";
- } else if (_gameProgress[kProgressFieldB4]) {
+ } else if (_globals[kProgressFieldB4]) {
return "XSOP1A";
- } else if (!_gameProgress[kProgressFieldB8]) {
+ } else if (!_globals[kProgressFieldB8]) {
return "XSOP1";
}
break;
case kCharacterMahmud:
- if (_gameProgress[kProgressFieldC4]) {
+ if (_globals[kProgressFieldC4]) {
return "XMAH1";
}
break;
case kCharacterYasmin:
- if (_gameProgress[kProgressEventMetYasmin]) {
+ if (_globals[kProgressEventMetYasmin]) {
return "XHAR2";
}
break;
case kCharacterHadija:
- if (_gameProgress[kProgressEventMetHadija]) {
+ if (_globals[kProgressEventMetHadija]) {
return "XHAR1";
}
break;
case kCharacterAlouan:
- if (_gameProgress[kProgressFieldDC]) {
+ if (_globals[kProgressFieldDC]) {
return "XHAR3";
}
break;
case kCharacterPolice:
- if (_gameProgress[kProgressFieldE0]) {
+ if (_globals[kProgressFieldE0]) {
return "XHAR4";
}
break;
case kCharacterMaster:
- if (_gameEvents[kEventCathDream] || _gameEvents[kEventCathWakingUp]) {
+ if (_doneNIS[kEventCathDream] || _doneNIS[kEventCathWakingUp]) {
return "XTYL3";
} else {
return "XTYL1";
diff --git a/engines/lastexpress/game/beetle.cpp b/engines/lastexpress/game/beetle.cpp
index 4f53bfb282d..cd9f142233f 100644
--- a/engines/lastexpress/game/beetle.cpp
+++ b/engines/lastexpress/game/beetle.cpp
@@ -113,7 +113,7 @@ void CBeetle::tick() {
_mouseCooldown--;
if (!_currentSequence || _directions[_currentDirectionIndex] == 29) {
- if (_engine->getLogicManager()->_gameInventory[kItemBeetle].location != 3 ||
+ if (_engine->getLogicManager()->_items[kItemBeetle].floating != 3 ||
((_spawnCounter || rnd(10)) && (_spawnCounter >= 3 || rnd(30)) && rnd(100))) {
return;
}
@@ -407,7 +407,7 @@ bool CBeetle::onTable() {
}
bool CBeetle::click() {
- if (_engine->getLogicManager()->_inventorySelectedItemIdx == kItemMatchBox &&
+ if (_engine->getLogicManager()->_activeItem == kItemMatchBox &&
_engine->getLogicManager()->cathHasItem(12) &&
ABS<int16>(_engine->_cursorX - _coords.x) < 10 &&
ABS<int16>(_engine->_cursorY - _coords.y) < 10) {
@@ -421,8 +421,8 @@ bool CBeetle::click() {
}
void LastExpressEngine::doBeetle() {
- int32 chapter = getLogicManager()->_gameProgress[11];
- if (chapter >= 2 && chapter <= 3 && !_beetle && getLogicManager()->_gameInventory[kItemBeetle].location == 3) {
+ int32 chapter = getLogicManager()->_globals[11];
+ if (chapter >= 2 && chapter <= 3 && !_beetle && getLogicManager()->_items[kItemBeetle].floating == 3) {
_beetle = new CBeetle(this);
}
}
diff --git a/engines/lastexpress/game/logic.cpp b/engines/lastexpress/game/logic.cpp
index 7f5cb68357e..de5fce0617f 100644
--- a/engines/lastexpress/game/logic.cpp
+++ b/engines/lastexpress/game/logic.cpp
@@ -217,11 +217,11 @@ void LogicManager::fadeToWhite() {
}
void LogicManager::restoreIcons() {
- _engine->getGraphicsManager()->drawItemDim(_gameProgress[kProgressPortrait], 0, 0, 1);
+ _engine->getGraphicsManager()->drawItemDim(_globals[kProgressPortrait], 0, 0, 1);
_engine->getGraphicsManager()->drawItemDim(_engine->_currentGameFileColorId + 39, 608, 448, 1);
- if (_inventorySelectedItemIdx) {
- _engine->getGraphicsManager()->drawItem(_gameInventory[_inventorySelectedItemIdx].cursor, 44, 0);
+ if (_activeItem) {
+ _engine->getGraphicsManager()->drawItem(_items[_activeItem].mnum, 44, 0);
_engine->getGraphicsManager()->burstBox(44, 0, 32, 32);
}
@@ -231,8 +231,8 @@ void LogicManager::restoreIcons() {
void LogicManager::dropItem(int item, int outLocation) {
if (item < 32) {
- if (_gameInventory[item].location != outLocation) {
- _gameInventory[item].location = outLocation;
+ if (_items[item].floating != outLocation) {
+ _items[item].floating = outLocation;
if (nodeHasItem(item)) {
if (!_doubleClickFlag)
cleanNIS();
@@ -245,48 +245,48 @@ void LogicManager::takeItem(int item) {
int cathDir;
if (item < 32) {
- if (_gameInventory[item].location) {
- _gameInventory[item].location = 0;
+ if (_items[item].floating) {
+ _items[item].floating = 0;
if (item == kItem3) {
if (checkLoc(kCharacterCath, kCarRestaurant)) {
cathDir = checkCathDir();
- if (_useLastSavedNodeIndex)
- cathDir = _trainData[_lastNodeIndex].cathDir;
+ if (_closeUp)
+ cathDir = _trainData[_nodeReturn].cathDir;
if (cathDir == 56) {
- if (!_useLastSavedNodeIndex) {
+ if (!_closeUp) {
bumpCath(kCarRestaurant, 56, 255);
return;
}
- _lastNodeIndex = getBumpNode(kCarRestaurant, 56, 255);
+ _nodeReturn = getBumpNode(kCarRestaurant, 56, 255);
return;
}
}
} else if (item == 5) {
if (checkLoc(kCharacterCath, kCarRedSleeping) && !_doubleClickFlag) {
cathDir = checkCathDir();
- if (_useLastSavedNodeIndex)
- cathDir = _trainData[_lastNodeIndex].cathDir;
+ if (_closeUp)
+ cathDir = _trainData[_nodeReturn].cathDir;
if (cathDir >= 23 && cathDir <= 32) {
- if (!_useLastSavedNodeIndex) {
+ if (!_closeUp) {
bumpCath(kCarRedSleeping, cathDir, 255);
return;
}
- _lastNodeIndex = getBumpNode(kCarRedSleeping, cathDir, 255);
+ _nodeReturn = getBumpNode(kCarRedSleeping, cathDir, 255);
return;
}
}
} else if (item == 7 && checkLoc(kCharacterCath, kCarGreenSleeping) && !_doubleClickFlag) {
cathDir = checkCathDir();
- if (_useLastSavedNodeIndex)
- cathDir = _trainData[_lastNodeIndex].cathDir;
+ if (_closeUp)
+ cathDir = _trainData[_nodeReturn].cathDir;
if (cathDir == 1 || cathDir >= 22 && cathDir <= 33) {
- if (_useLastSavedNodeIndex) {
- _lastNodeIndex = getBumpNode(kCarGreenSleeping, cathDir, 255);
+ if (_closeUp) {
+ _nodeReturn = getBumpNode(kCarGreenSleeping, cathDir, 255);
return;
}
@@ -299,13 +299,13 @@ void LogicManager::takeItem(int item) {
void LogicManager::giveCathItem(int item) {
if (item < 32) {
- _gameInventory[item].location = 0;
- _gameInventory[item].isPresent = 1;
+ _items[item].floating = 0;
+ _items[item].haveIt = 1;
- if (_gameInventory[item].cursor) {
- if (!_gameInventory[item].manualSelect) {
- _inventorySelectedItemIdx = item;
- _engine->getGraphicsManager()->drawItem(_gameInventory[item].cursor, 44, 0);
+ if (_items[item].mnum) {
+ if (!_items[item].inPocket) {
+ _activeItem = item;
+ _engine->getGraphicsManager()->drawItem(_items[item].mnum, 44, 0);
_engine->getGraphicsManager()->burstBox(44, 0, 32, 32);
}
}
@@ -314,11 +314,11 @@ void LogicManager::giveCathItem(int item) {
void LogicManager::takeCathItem(int item) {
if (item < 32) {
- _gameInventory[item].location = 0;
- _gameInventory[item].isPresent = 0;
+ _items[item].floating = 0;
+ _items[item].haveIt = 0;
- if (item == _inventorySelectedItemIdx) {
- _inventorySelectedItemIdx = 0;
+ if (item == _activeItem) {
+ _activeItem = 0;
if (_engine->getGraphicsManager()->acquireSurface()) {
_engine->getGraphicsManager()->clear(_engine->getGraphicsManager()->_screenSurface, 44, 0, 32, 32);
_engine->getGraphicsManager()->unlockSurface();
@@ -331,18 +331,18 @@ void LogicManager::takeCathItem(int item) {
bool LogicManager::cathHasItem(int item) {
if (item && item < 32)
- return _gameInventory[item].isPresent == 1;
+ return _items[item].haveIt == 1;
else
return false;
}
int LogicManager::findLargeItem() {
- Item *inventory = _gameInventory;
+ Item *inventory = _items;
for (int i = kItemMatchBox; i < 32; i++) {
Item *item = &inventory[i];
- if (item->isPresent && inventory[i - 1].isPresent && !item->manualSelect) {
+ if (item->haveIt && inventory[i - 1].haveIt && !item->inPocket) {
return i;
}
}
@@ -351,12 +351,12 @@ int LogicManager::findLargeItem() {
}
int LogicManager::checkCathDir() {
- return _trainData[_trainNodeIndex].cathDir;
+ return _trainData[_activeNode].cathDir;
}
bool LogicManager::checkCathDir(int car, int position) {
return getCharacter(kCharacterCath).characterPosition.car == car &&
- _trainData[_trainNodeIndex].cathDir == position;
+ _trainData[_activeNode].cathDir == position;
}
bool LogicManager::isFemale(int character) {
@@ -379,8 +379,8 @@ bool LogicManager::isSingleFemale(int character) {
}
bool LogicManager::isNight() {
- int chapter = _gameProgress[kProgressChapter];
- return chapter == 1 || chapter == 4 || chapter == 5 && !_gameProgress[kProgressIsDayTime];
+ int chapter = _globals[kProgressChapter];
+ return chapter == 1 || chapter == 4 || chapter == 5 && !_globals[kProgressIsDayTime];
}
bool LogicManager::whoOutside(int character) {
@@ -586,7 +586,7 @@ bool LogicManager::whoWalking(int character) {
int LogicManager::checkDoor(int object) {
if (object < 128) {
- return _gameObjects[object].door;
+ return _doors[object].status;
} else {
return 0;
}
@@ -630,37 +630,37 @@ bool LogicManager::preventEnterComp(int object) {
return false;
}
-void LogicManager::setDoor(int object, int character, int door, int cursor, int cursor2) {
+void LogicManager::setDoor(int object, int character, int status, int cursor, int handleCursor) {
if (object < 128) {
- int oldDoor = _gameObjects[object].door;
- _gameObjects[object].character = character;
- _gameObjects[object].door = door;
+ int oldDoor = _doors[object].status;
+ _doors[object].who = character;
+ _doors[object].status = status;
- if (cursor != 255 || cursor2 != 255) {
+ if (cursor != 255 || handleCursor != 255) {
if (cursor != 255)
- _gameObjects[object].cursor = cursor;
+ _doors[object].windowCursor = cursor;
- if (cursor2 != 255)
- _gameObjects[object].cursor2 = cursor2;
+ if (handleCursor != 255)
+ _doors[object].handleCursor = handleCursor;
mouseStatus();
}
_engine->getSoundManager()->_scanAnySoundLoopingSection = true;
- if (oldDoor != door && (oldDoor == 2 || door == 2) && (object && object <= 8 || object >= 32 && object <= 39))
+ if (oldDoor != status && (oldDoor == 2 || status == 2) && (object && object <= 8 || object >= 32 && object <= 39))
_engine->getOtisManager()->drawLooseSprites();
}
}
void LogicManager::setModel(int object, int8 model) {
if (object < 128)
- _gameObjects[object].model = model;
+ _doors[object].model = model;
}
int LogicManager::getModel(int object) {
if (object < 128) {
- return _gameObjects[object].model;
+ return _doors[object].model;
} else {
return 0;
}
@@ -671,7 +671,7 @@ void LogicManager::blockView(int character, int car, int position) {
character = kCharacterCath;
if (character <= 31) {
- _positions[100 * car + position] |= 1 << character;
+ _blockedViews[100 * car + position] |= 1 << character;
if (checkCathDir(car, position) || (car == kCarRestaurant && position == 57 && checkCathDir(kCarRestaurant, 50))) {
playChrExcuseMe(character, kCharacterCath, 0);
smartBumpCath();
@@ -687,7 +687,7 @@ void LogicManager::releaseView(int character, int car, int position) {
character = kCharacterCath;
if (character <= 31) {
- _positions[100 * car + position] &= ~(1 << character);
+ _blockedViews[100 * car + position] &= ~(1 << character);
mouseStatus();
}
}
@@ -698,11 +698,11 @@ void LogicManager::releaseEverything(int character) {
if (character <= 31) {
for (int i = 0; i < 1000; i++) {
- _positions[i] &= ~(1 << character);
+ _blockedViews[i] &= ~(1 << character);
}
- for (int i = 0; i < 16; _softBlockedEntitiesBits[i - 1] &= ~(1 << character)) {
- _blockedEntitiesBits[i++] &= ~(1 << character);
+ for (int i = 0; i < 16; _softBlockedX[i - 1] &= ~(1 << character)) {
+ _blockedX[i++] &= ~(1 << character);
}
mouseStatus();
@@ -714,8 +714,8 @@ void LogicManager::release2Views(int character, int car, int pos1, int pos2) {
character = kCharacterCath;
if (character <= 31) {
- _positions[100 * car + pos1] &= ~(1 << character);
- _positions[100 * car + pos2] &= ~(1 << character);
+ _blockedViews[100 * car + pos1] &= ~(1 << character);
+ _blockedViews[100 * car + pos2] &= ~(1 << character);
mouseStatus();
}
}
@@ -725,8 +725,8 @@ void LogicManager::block2ViewsBump4(int character, int car, int pos1, int pos2,
character = kCharacterCath;
if (character <= 31) {
- _positions[100 * car + pos1] |= 1 << character;
- _positions[100 * car + pos2] |= 1 << character;
+ _blockedViews[100 * car + pos1] |= 1 << character;
+ _blockedViews[100 * car + pos2] |= 1 << character;
if ((checkCathDir(car, pos1) || checkCathDir(car, pos2) || checkCathDir(car, pos3) || checkCathDir(car, pos4))) {
playChrExcuseMe(character, kCharacterCath, 0);
@@ -738,72 +738,72 @@ void LogicManager::block2ViewsBump4(int character, int car, int pos1, int pos2,
}
}
-void LogicManager::blockAtDoor(int character, int door) {
- if (character <= 31 && (door - 1) <= 38) {
- switch (door) {
+void LogicManager::blockAtDoor(int character, int status) {
+ if (character <= 31 && (status - 1) <= 38) {
+ switch (status) {
case 1:
block2ViewsBump4(character, kCarGreenSleeping, 41, 51, 17, 38);
- _blockedEntitiesBits[0] |= 1 << character;
+ _blockedX[0] |= 1 << character;
break;
case 2:
block2ViewsBump4(character, kCarGreenSleeping, 42, 52, 15, 36);
- _blockedEntitiesBits[1] |= 1 << character;
+ _blockedX[1] |= 1 << character;
break;
case 3:
block2ViewsBump4(character, kCarGreenSleeping, 43, 53, 13, 34);
- _blockedEntitiesBits[2] |= 1 << character;
+ _blockedX[2] |= 1 << character;
break;
case 4:
block2ViewsBump4(character, kCarGreenSleeping, 44, 54, 11, 32);
- _blockedEntitiesBits[3] |= 1 << character;
+ _blockedX[3] |= 1 << character;
break;
case 5:
block2ViewsBump4(character, kCarGreenSleeping, 45, 55, 9, 30);
- _blockedEntitiesBits[4] |= 1 << character;
+ _blockedX[4] |= 1 << character;
break;
case 6:
block2ViewsBump4(character, kCarGreenSleeping, 46, 56, 7, 28);
- _blockedEntitiesBits[5] |= 1 << character;
+ _blockedX[5] |= 1 << character;
break;
case 7:
block2ViewsBump4(character, kCarGreenSleeping, 47, 57, 5, 26);
- _blockedEntitiesBits[6] |= 1 << character;
+ _blockedX[6] |= 1 << character;
break;
case 8:
block2ViewsBump4(character, kCarGreenSleeping, 48, 58, 3, 25);
- _blockedEntitiesBits[7] |= 1 << character;
+ _blockedX[7] |= 1 << character;
break;
case 32:
block2ViewsBump4(character, kCarRedSleeping, 41, 51, 17, 38);
- _blockedEntitiesBits[8] |= 1 << character;
+ _blockedX[8] |= 1 << character;
break;
case 33:
block2ViewsBump4(character, kCarRedSleeping, 42, 52, 15, 36);
- _blockedEntitiesBits[9] |= 1 << character;
+ _blockedX[9] |= 1 << character;
break;
case 34:
block2ViewsBump4(character, kCarRedSleeping, 43, 53, 13, 34);
- _blockedEntitiesBits[10] |= 1 << character;
+ _blockedX[10] |= 1 << character;
break;
case 35:
block2ViewsBump4(character, kCarRedSleeping, 44, 54, 11, 32);
- _blockedEntitiesBits[11] |= 1 << character;
+ _blockedX[11] |= 1 << character;
break;
case 36:
block2ViewsBump4(character, kCarRedSleeping, 45, 55, 9, 30);
- _blockedEntitiesBits[12] |= 1 << character;
+ _blockedX[12] |= 1 << character;
break;
case 37:
block2ViewsBump4(character, kCarRedSleeping, 46, 56, 7, 28);
- _blockedEntitiesBits[13] |= 1 << character;
+ _blockedX[13] |= 1 << character;
break;
case 38:
block2ViewsBump4(character, kCarRedSleeping, 47, 57, 5, 26);
- _blockedEntitiesBits[14] |= 1 << character;
+ _blockedX[14] |= 1 << character;
break;
case 39:
block2ViewsBump4(character, kCarRedSleeping, 48, 58, 3, 25);
- _blockedEntitiesBits[15] |= 1 << character;
+ _blockedX[15] |= 1 << character;
break;
default:
return;
@@ -811,72 +811,72 @@ void LogicManager::blockAtDoor(int character, int door) {
}
}
-void LogicManager::releaseAtDoor(int character, int door) {
- if (character <= 31 && (door - 1) <= 38) {
- switch (door) {
+void LogicManager::releaseAtDoor(int character, int status) {
+ if (character <= 31 && (status - 1) <= 38) {
+ switch (status) {
case 1:
release2Views(character, kCarGreenSleeping, 41, 51);
- _blockedEntitiesBits[0] &= ~(1 << character);
+ _blockedX[0] &= ~(1 << character);
break;
case 2:
release2Views(character, kCarGreenSleeping, 42, 52);
- _blockedEntitiesBits[1] &= ~(1 << character);
+ _blockedX[1] &= ~(1 << character);
break;
case 3:
release2Views(character, kCarGreenSleeping, 43, 53);
- _blockedEntitiesBits[2] &= ~(1 << character);
+ _blockedX[2] &= ~(1 << character);
break;
case 4:
release2Views(character, kCarGreenSleeping, 44, 54);
- _blockedEntitiesBits[3] &= ~(1 << character);
+ _blockedX[3] &= ~(1 << character);
break;
case 5:
release2Views(character, kCarGreenSleeping, 45, 55);
- _blockedEntitiesBits[4] &= ~(1 << character);
+ _blockedX[4] &= ~(1 << character);
break;
case 6:
release2Views(character, kCarGreenSleeping, 46, 56);
- _blockedEntitiesBits[5] &= ~(1 << character);
+ _blockedX[5] &= ~(1 << character);
break;
case 7:
release2Views(character, kCarGreenSleeping, 47, 57);
- _blockedEntitiesBits[6] &= ~(1 << character);
+ _blockedX[6] &= ~(1 << character);
break;
case 8:
release2Views(character, kCarGreenSleeping, 48, 58);
- _blockedEntitiesBits[7] &= ~(1 << character);
+ _blockedX[7] &= ~(1 << character);
break;
case 32:
release2Views(character, kCarRedSleeping, 41, 51);
- _blockedEntitiesBits[8] &= ~(1 << character);
+ _blockedX[8] &= ~(1 << character);
break;
case 33:
release2Views(character, kCarRedSleeping, 42, 52);
- _blockedEntitiesBits[9] &= ~(1 << character);
+ _blockedX[9] &= ~(1 << character);
break;
case 34:
release2Views(character, kCarRedSleeping, 43, 53);
- _blockedEntitiesBits[10] &= ~(1 << character);
+ _blockedX[10] &= ~(1 << character);
break;
Commit: 3515db6a9d801a5052eade9d8d5b207e9128d7c4
https://github.com/scummvm/scummvm/commit/3515db6a9d801a5052eade9d8d5b207e9128d7c4
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix some wrongly cleaned up code for TrainM
Changed paths:
engines/lastexpress/characters/trainm.cpp
diff --git a/engines/lastexpress/characters/trainm.cpp b/engines/lastexpress/characters/trainm.cpp
index 3c052395108..ac8e9b4863d 100644
--- a/engines/lastexpress/characters/trainm.cpp
+++ b/engines/lastexpress/characters/trainm.cpp
@@ -1439,7 +1439,7 @@ void LogicManager::HAND_TrainM_InOffice(HAND_PARAMS) {
break;
}
- if (_gameTime > 1089000 && !getCharacterCurrentParams(kCharacterTrainM)[7] && !(getCharacterCurrentParams(kCharacterTrainM)[7] = 1, getCharacterCurrentParams(kCharacterTrainM)[4])) {
+ if (_gameTime > 1089000 && !getCharacterCurrentParams(kCharacterTrainM)[7] && (getCharacterCurrentParams(kCharacterTrainM)[7] = 1, !getCharacterCurrentParams(kCharacterTrainM)[4])) {
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 5;
TrainMCall(&LogicManager::CONS_TrainM_LeaveOffice, 0, 0, 0, 0);
break;
@@ -1499,7 +1499,7 @@ void LogicManager::HAND_TrainM_InOffice(HAND_PARAMS) {
break;
case 9:
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 17;
- TrainMCall(&LogicManager::CONS_TrainM_KickCathOut, msg->param.intParam == 105, 0, 0, 0);
+ TrainMCall(&LogicManager::CONS_TrainM_KickCathOut, (msg->param.intParam == 105) ? 1 : 0, 0, 0, 0);
break;
case 12:
getCharacter(kCharacterTrainM).characterPosition.car = kCarBaggage;
@@ -1563,7 +1563,7 @@ void LogicManager::HAND_TrainM_InOffice(HAND_PARAMS) {
// fall through
case 4:
- if (_gameTime > 1089000 && !getCharacterCurrentParams(kCharacterTrainM)[7] && !(getCharacterCurrentParams(kCharacterTrainM)[7] = 1, getCharacterCurrentParams(kCharacterTrainM)[4])) {
+ if (_gameTime > 1089000 && !getCharacterCurrentParams(kCharacterTrainM)[7] && (getCharacterCurrentParams(kCharacterTrainM)[7] = 1, !getCharacterCurrentParams(kCharacterTrainM)[4])) {
getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 5;
TrainMCall(&LogicManager::CONS_TrainM_LeaveOffice, 0, 0, 0, 0);
break;
@@ -1571,17 +1571,29 @@ void LogicManager::HAND_TrainM_InOffice(HAND_PARAMS) {
// fall through
case 5:
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 6;
- TrainMCall(&LogicManager::CONS_TrainM_DoWalk, 3, 2000, 0, 0);
- break;
+ if (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] == 5) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 6;
+ TrainMCall(&LogicManager::CONS_TrainM_DoWalk, 3, 2000, 0, 0);
+ break;
+ }
+
+ // fall through
case 6:
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 7;
- TrainMCall(&LogicManager::CONS_TrainM_DoCond, 3, "TRA1202", 0, 0);
- break;
+ if (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] == 6) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 7;
+ TrainMCall(&LogicManager::CONS_TrainM_DoCond, 3, "TRA1202", 0, 0);
+ break;
+ }
+
+ // fall through
case 7:
- getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 8;
- TrainMCall(&LogicManager::CONS_TrainM_WalkBackToOffice, 0, 0, 0, 0);
- break;
+ if (getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] == 7) {
+ getCharacter(kCharacterTrainM).callbacks[getCharacter(kCharacterTrainM).currentCall + 8] = 8;
+ TrainMCall(&LogicManager::CONS_TrainM_WalkBackToOffice, 0, 0, 0, 0);
+ break;
+ }
+
+ // fall through
case 8:
if (_gameTime > 1107000 && !getCharacterCurrentParams(kCharacterTrainM)[8]) {
getCharacterCurrentParams(kCharacterTrainM)[8] = 1;
Commit: 11e77d1c75c07966f05bc56135b2a3d9b2e1efa1
https://github.com/scummvm/scummvm/commit/11e77d1c75c07966f05bc56135b2a3d9b2e1efa1
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: DEBUG: Differentiate train structure between chapters
Also label some previously unlabeled things
Changed paths:
engines/lastexpress/debug.cpp
engines/lastexpress/game/logic.cpp
engines/lastexpress/game/logic.h
engines/lastexpress/game/otis.cpp
engines/lastexpress/game/savegame.cpp
engines/lastexpress/lastexpress.h
diff --git a/engines/lastexpress/debug.cpp b/engines/lastexpress/debug.cpp
index 156b67d9167..b8b10e996f0 100644
--- a/engines/lastexpress/debug.cpp
+++ b/engines/lastexpress/debug.cpp
@@ -194,7 +194,8 @@ void onImGuiRender() {
}
ImGui::EndChild();
- // Top-right panels
+ // Top-right area
+
// Top-right is Clock
ImGui::SetCursorPos(ImVec2(mainAreaWidth + 8, 16));
ImGui::BeginChild("Clock", ImVec2(_state->_rightPanelWidth, _state->_rightTopPanelHeight), true);
@@ -255,7 +256,8 @@ void Clock::showCurrentTime() {
ImVec2 windowSize = ImGui::GetContentRegionAvail();
ImVec2 windowCenter = ImVec2(
windowPos.x + ImGui::GetWindowSize().x / 2,
- windowPos.y + ImGui::GetWindowSize().y / 2);
+ windowPos.y + ImGui::GetWindowSize().y / 2
+ );
drawList->AddText(
ImGui::GetFont(),
@@ -460,18 +462,74 @@ void LogicManager::showTrainMapWindow() {
bool isSleeper;
};
- CarInfo cars[] = {
- { kCarRestaurant, "Restaurant Car", restaurantColor, 1.6f, 6, false},
- { kCarRedSleeping, "Red Sleeping Car", redSleepingColor, 1.2f, 8, true },
- { kCarGreenSleeping, "Green Sleeping Car", greenSleepingColor, 1.2f, 8, true },
- { kCarVestibule, "Vestibule", vestibuleColor, 0.3f, 1, false},
- { kCarKronos, "Kronos Car", kronosColor, 1.0f, 3, false}
+ CarInfo carsChapter1[] = {
+ { kCarRestaurant, "Restaurant Car", restaurantColor, 1.6f, 6, false },
+ { kCarRedSleeping, "Red Sleeping Car", redSleepingColor, 1.2f, 8, true },
+ { kCarGreenSleeping, "Green Sleeping Car", greenSleepingColor, 1.2f, 8, true },
+ { kCarVestibule, "Vestibule", vestibuleColor, 0.3f, 1, false },
+ { kCarKronos, "Kronos Car", kronosColor, 1.0f, 3, false }
+ };
+
+ CarInfo carsChapters23[] = {
+ { kCarLocomotive, "Locomotive", vestibuleColor, 0.5f, 1, false },
+ { kCarCoalTender, "Coal Tender", voidColor, 1.0f, 1, false },
+ { kCarBaggage, "Baggage Car", vestibuleColor, 1.0f, 1, false },
+ { kCarRestaurant, "Restaurant Car", restaurantColor, 1.6f, 6, false },
+ { kCarRedSleeping, "Red Sleeping Car", redSleepingColor, 1.2f, 8, true },
+ { kCarGreenSleeping, "Green Sleeping Car", greenSleepingColor, 1.2f, 8, true },
+ { kCarVestibule, "Vestibule", vestibuleColor, 0.3f, 1, false },
+ { kCarKronos, "Kronos Car", kronosColor, 1.0f, 3, false },
+ { kCarBaggageRear, "Rear Baggage Car", vestibuleColor, 1.0f, 1, false }
+ };
+
+ CarInfo carsChapter4[] = {
+ { kCarLocomotive, "Locomotive", vestibuleColor, 0.5f, 1, false },
+ { kCarCoalTender, "Coal Tender", voidColor, 1.0f, 1, false },
+ { kCarBaggage, "Baggage Car", vestibuleColor, 1.0f, 1, false },
+ { kCarRestaurant, "Restaurant Car", restaurantColor, 1.6f, 6, false },
+ { kCarRedSleeping, "Red Sleeping Car", redSleepingColor, 1.2f, 8, true },
+ { kCarGreenSleeping, "Green Sleeping Car", greenSleepingColor, 1.2f, 8, true },
+ { kCarVestibule, "Vestibule", vestibuleColor, 0.3f, 1, false },
+ { kCarBaggageRear, "Rear Baggage Car", vestibuleColor, 1.0f, 1, false }
+ };
+
+ CarInfo carsChapter5[] = {
+ { kCarLocomotive, "Locomotive", vestibuleColor, 0.5f, 1, false },
+ { kCarCoalTender, "Coal Tender", voidColor, 1.0f, 1, false },
+ { kCarBaggage, "Baggage Car", vestibuleColor, 1.0f, 1, false },
+ { kCarRestaurant, "Restaurant Car", restaurantColor, 1.6f, 6, false }
};
- const int carCount = sizeof(cars) / sizeof(cars[0]);
+ CarInfo *cars = nullptr;
+ int carCount = 0;
+
+ switch (_state->_engine->getLogicManager()->_globals[kProgressChapter]) {
+ case 1:
+ cars = carsChapter1;
+ carCount = ARRAYSIZE(carsChapter1);
+ break;
+ case 2:
+ case 3:
+ default:
+ cars = carsChapters23;
+ carCount = ARRAYSIZE(carsChapters23);
+ break;
+ case 4:
+ case 5:
+ if (_state->_engine->getLogicManager()->_globals[kProgressChapter] == 5 &&
+ (_state->_engine->getLogicManager()->_doneNIS[kEventAugustUnhookCars] || _state->_engine->getLogicManager()->_doneNIS[kEventAugustUnhookCarsBetrayal])) {
+ cars = carsChapter5;
+ carCount = ARRAYSIZE(carsChapter5);
+ } else {
+ cars = carsChapter4;
+ carCount = ARRAYSIZE(carsChapter4);
+ }
+
+ break;
+ }
// Calculate total relative width to scale properly...
- float totalRelativeWidth = 0;
+ float totalRelativeWidth = 0.2f;
for (int i = 0; i < carCount; i++) {
totalRelativeWidth += cars[i].width;
}
@@ -538,7 +596,8 @@ void LogicManager::showTrainMapWindow() {
carMin,
carMax,
ImGui::ColorConvertFloat4ToU32(car.color),
- 5.0f);
+ 5.0f
+ );
// Corridor position - default is center for non-sleeper cars...
float corridorY = carMin.y + (carHeight - corridorHeight) / 2;
@@ -567,7 +626,8 @@ void LogicManager::showTrainMapWindow() {
ImVec2(carMin.x, corridorY),
ImVec2(carMax.x, corridorY + corridorHeight),
ImGui::ColorConvertFloat4ToU32(corridorColor),
- 0.0f);
+ 0.0f
+ );
// Draw corridor-colored areas on both sides of the compartments
// (where the compartements rooms end and the door to the next one is nearby)
@@ -577,14 +637,16 @@ void LogicManager::showTrainMapWindow() {
ImVec2(carMin.x, carMin.y),
ImVec2(compartmentLeftEdge, corridorY),
ImGui::ColorConvertFloat4ToU32(corridorColor),
- 0.0f);
+ 0.0f
+ );
// Right side (beyond compartments)
drawList->AddRectFilled(
ImVec2(compartmentRightEdge, carMin.y),
ImVec2(carMax.x, corridorY),
ImGui::ColorConvertFloat4ToU32(corridorColor),
- 0.0f);
+ 0.0f
+ );
// Calculate width of each compartment...
float compartmentWidth = (compartmentRightEdge - compartmentLeftEdge) / 8;
@@ -598,7 +660,8 @@ void LogicManager::showTrainMapWindow() {
ImVec2(x, carMin.y),
ImVec2(x, corridorY),
IM_COL32(0, 0, 0, 255),
- 1.0f);
+ 1.0f
+ );
}
} else if (car.id == kCarRestaurant) {
// Restaurant car with two sections: lounge and restaurant
@@ -633,7 +696,8 @@ void LogicManager::showTrainMapWindow() {
ImVec2(carMin.x, corridorY),
ImVec2(carMax.x, corridorY + corridorHeight),
ImGui::ColorConvertFloat4ToU32(corridorColor),
- 0.0f);
+ 0.0f
+ );
// Draw restaurant tables...
float tableWidth = restaurantWidth / 3;
@@ -701,15 +765,16 @@ void LogicManager::showTrainMapWindow() {
// Draw car name and ID...
char carName[32];
- Common::sprintf_s(carName, "%s (%d)", car.name, car.id);
+ Common::sprintf_s(carName, "%s\n(%d)", car.name, car.id);
ImVec2 textSize = ImGui::CalcTextSize(carName);
drawList->AddText(
ImVec2(carMin.x + (carWidth / 2) - (textSize.x / 2), carMax.y + 5),
IM_COL32(255, 255, 255, 255),
- carName);
+ carName
+ );
// Draw characters in this car...
- for (int i = 0; i < charPositions.size(); i++) {
+ for (uint i = 0; i < charPositions.size(); i++) {
if (charPositions[i].car == car.id) {
float charX, charY;
@@ -767,7 +832,7 @@ void LogicManager::showTrainMapWindow() {
if (inLounge) {
// Lounge area (right side of car)...
charX = carMin.x + restaurantWidth + (loungeWidth / 2);
- charY = restCorridorY + (compartment % 2 == 0 ? -restCorridorY / 2 : corridorHeight + restCorridorY / 2);
+ charY = carMin.y + carHeight / 2;
} else {
// Restaurant area (left side of car)...
float tableWidth = restaurantWidth / 3;
@@ -801,14 +866,16 @@ void LogicManager::showTrainMapWindow() {
ImVec2(charX, charY),
8.0f,
ImGui::ColorConvertFloat4ToU32(charPositions[i].charIndex == kCharacterCath ? cathColor : characterColor),
- 12);
+ 12
+ );
char charId[8];
Common::sprintf_s(charId, "%d", charPositions[i].charIndex);
drawList->AddText(
ImVec2(charX - ImGui::CalcTextSize(charId).x / 2, charY - ImGui::CalcTextSize(charId).y / 2),
charPositions[i].charIndex == kCharacterCath ? IM_COL32(255, 255, 255, 255) : IM_COL32(0, 0, 0, 255),
- charId);
+ charId
+ );
// Tooltip!
ImGui::SetCursorScreenPos(ImVec2(charX - 8, charY - 8));
@@ -819,7 +886,8 @@ void LogicManager::showTrainMapWindow() {
ImGui::Text("Car: %d, Loc: %d, Pos: %d",
charPositions[i].car,
getCharacter(charPositions[i].charIndex).characterPosition.location,
- getCharacter(charPositions[i].charIndex).characterPosition.position);
+ getCharacter(charPositions[i].charIndex).characterPosition.position
+ );
ImGui::EndTooltip();
}
}
@@ -855,11 +923,12 @@ void LogicManager::showTrainMapWindow() {
drawList->AddText(
ImVec2(voidMin.x + 10, voidMin.y + 5),
IM_COL32(255, 255, 255, 255),
- voidLabel);
+ voidLabel
+ );
// Character markers...
float charSpacing = (voidMax.x - voidMin.x - 20) / (voidCharPositions.size() + 1);
- for (int i = 0; i < voidCharPositions.size(); i++) {
+ for (uint i = 0; i < voidCharPositions.size(); i++) {
float charX = voidMin.x + 10 + charSpacing * (i + 1);
float charY = voidMin.y + 35;
@@ -867,14 +936,16 @@ void LogicManager::showTrainMapWindow() {
ImVec2(charX, charY),
8.0f,
ImGui::ColorConvertFloat4ToU32(characterColor),
- 12);
+ 12
+ );
char charId[16];
Common::sprintf_s(charId, "%d", voidCharPositions[i].charIndex);
drawList->AddText(
ImVec2(charX - ImGui::CalcTextSize(charId).x / 2, charY - ImGui::CalcTextSize(charId).y / 2),
IM_COL32(0, 0, 0, 255),
- charId);
+ charId
+ );
// Tooltip! :-)
ImGui::SetCursorScreenPos(ImVec2(charX - 8, charY - 8));
@@ -884,7 +955,8 @@ void LogicManager::showTrainMapWindow() {
ImGui::Text("%s", getCharacterName(voidCharPositions[i].charIndex));
ImGui::Text("Car: 0, Loc: %d, Pos: %d",
getCharacter(voidCharPositions[i].charIndex).characterPosition.location,
- getCharacter(voidCharPositions[i].charIndex).characterPosition.position);
+ getCharacter(voidCharPositions[i].charIndex).characterPosition.position
+ );
ImGui::EndTooltip();
}
}
@@ -943,7 +1015,7 @@ void LogicManager::renderCharacterGrid(bool onlyPinned, int &selectedCharacter)
Common::StringArray funcNames = getCharacterFunctionNames(i);
Common::String funcCurrName = "NONE";
- if (character->callbacks[character->currentCall] - 1 < funcNames.size())
+ if ((uint)(character->callbacks[character->currentCall] - 1) < funcNames.size())
funcCurrName = funcNames[character->callbacks[character->currentCall] - 1];
// Cath (the player) doesn't have logic functions...
@@ -974,7 +1046,8 @@ void LogicManager::renderCharacterGrid(bool onlyPinned, int &selectedCharacter)
if (displayed == 0) {
ImGui::TextColored(ImVec4(0.7f, 0.7f, 0.7f, 1.0f),
- onlyPinned ? "No pinned characters match the filter" : "No characters match the filter");
+ onlyPinned ? "No pinned characters match the filter" : "No characters match the filter"
+ );
}
}
@@ -991,12 +1064,13 @@ void LogicManager::renderCharacterDetails(Character *character, int index) {
ImGui::Text("Position: Car %u, Location %u, Position %u",
character->characterPosition.car,
character->characterPosition.location,
- character->characterPosition.position);
+ character->characterPosition.position
+ );
Common::StringArray funcNames = getCharacterFunctionNames(index);
Common::String funcCurrName = "NONE";
- if (character->callbacks[character->currentCall] - 1 < funcNames.size())
+ if ((uint)(character->callbacks[character->currentCall] - 1) < funcNames.size())
funcCurrName = funcNames[character->callbacks[character->currentCall] - 1];
// Cath (the player) doesn't have logic functions...
@@ -1026,7 +1100,8 @@ void LogicManager::renderCharacterDetails(Character *character, int index) {
ImGui::BulletText("Level %d: %s (#%d)",
currentDepth - i,
funcNames[functionId - 1].c_str(),
- functionId);
+ functionId
+ );
ImGui::Unindent(indentAmount);
}
@@ -1059,8 +1134,8 @@ void LogicManager::renderCharacterDetails(Character *character, int index) {
ImGui::Text("Process Entity: %d", character->doProcessEntity);
ImGui::Text("Previous Car: %d", character->car2);
ImGui::Text("Previous Position: %d", character->position2);
- ImGui::Text("Field_4A9: %d", character->field_4A9);
- ImGui::Text("Field_4AA: %d", character->field_4AA);
+ ImGui::Text("Position fudge flag: %d", character->needsPosFudge);
+ ImGui::Text("Position fudge flag (secondary): %d", character->needsSecondaryPosFudge);
}
if (ImGui::CollapsingHeader("Call Parameters", ImGuiTreeNodeFlags_DefaultOpen)) {
diff --git a/engines/lastexpress/game/logic.cpp b/engines/lastexpress/game/logic.cpp
index de5fce0617f..b444f329365 100644
--- a/engines/lastexpress/game/logic.cpp
+++ b/engines/lastexpress/game/logic.cpp
@@ -584,40 +584,40 @@ bool LogicManager::whoWalking(int character) {
return direction == 1 || direction == 2;
}
-int LogicManager::checkDoor(int object) {
- if (object < 128) {
- return _doors[object].status;
+int LogicManager::checkDoor(int door) {
+ if (door < 128) {
+ return _doors[door].status;
} else {
return 0;
}
}
-bool LogicManager::preventEnterComp(int object) {
+bool LogicManager::preventEnterComp(int door) {
int car;
int position;
- if (object && object <= 8) {
+ if (door && door <= 8) {
car = kCarGreenSleeping;
- position = _objectPosition[object - 1];
+ position = _doorPositions[door - 1];
if (inComp(kCharacterCath, car, position))
return false;
- } else if (object < 32 || object > 39) {
- if (object < 17 || object > 22) {
- if (object < 48 || object > 53)
+ } else if (door < 32 || door > 39) {
+ if (door < 17 || door > 22) {
+ if (door < 48 || door > 53)
return false;
car = kCarRedSleeping;
- position = _objectPosition[object - 48];
+ position = _doorPositions[door - 48];
} else {
car = kCarGreenSleeping;
- position = _objectPosition[object - 17];
+ position = _doorPositions[door - 17];
}
} else {
car = kCarRedSleeping;
- position = _objectPosition[object - 32];
+ position = _doorPositions[door - 32];
if (inComp(kCharacterCath, car, position))
return false;
}
@@ -630,37 +630,37 @@ bool LogicManager::preventEnterComp(int object) {
return false;
}
-void LogicManager::setDoor(int object, int character, int status, int cursor, int handleCursor) {
- if (object < 128) {
- int oldDoor = _doors[object].status;
- _doors[object].who = character;
- _doors[object].status = status;
+void LogicManager::setDoor(int door, int character, int status, int windowCursor, int handleCursor) {
+ if (door < 128) {
+ int oldStatus = _doors[door].status;
+ _doors[door].who = character;
+ _doors[door].status = status;
- if (cursor != 255 || handleCursor != 255) {
- if (cursor != 255)
- _doors[object].windowCursor = cursor;
+ if (windowCursor != 255 || handleCursor != 255) {
+ if (windowCursor != 255)
+ _doors[door].windowCursor = windowCursor;
if (handleCursor != 255)
- _doors[object].handleCursor = handleCursor;
+ _doors[door].handleCursor = handleCursor;
mouseStatus();
}
_engine->getSoundManager()->_scanAnySoundLoopingSection = true;
- if (oldDoor != status && (oldDoor == 2 || status == 2) && (object && object <= 8 || object >= 32 && object <= 39))
+ if (oldStatus != status && (oldStatus == 2 || status == 2) && (door && door <= 8 || door >= 32 && door <= 39))
_engine->getOtisManager()->drawLooseSprites();
}
}
-void LogicManager::setModel(int object, int8 model) {
- if (object < 128)
- _doors[object].model = model;
+void LogicManager::setModel(int door, int8 model) {
+ if (door < 128)
+ _doors[door].model = model;
}
-int LogicManager::getModel(int object) {
- if (object < 128) {
- return _doors[object].model;
+int LogicManager::getModel(int door) {
+ if (door < 128) {
+ return _doors[door].model;
} else {
return 0;
}
@@ -1091,9 +1091,9 @@ bool LogicManager::obstacleBetween(int character1, int character2) {
char2Pos = getCharacter(character2).characterPosition.position;
}
- for (i = 7; i > -1 && _objectPosition[i] < (int)char1Pos; i--);
+ for (i = 7; i > -1 && _doorPositions[i] < (int)char1Pos; i--);
- for (j = 0; j < 8 && _objectPosition[j] > (int)char2Pos; j++);
+ for (j = 0; j < 8 && _doorPositions[j] > (int)char2Pos; j++);
if (i > -1 && j < 8) {
while (j <= i) {
@@ -1115,15 +1115,15 @@ bool LogicManager::obstacleBetween(int character1, int character2) {
return false;
}
-bool LogicManager::bumpCathTowardsCond(int object, bool playSound, bool loadScene) {
- if (getCharacter(kCharacterCath).characterPosition.location || (object < 2 || object > 8) && (object < 32 || object > 39)) {
+bool LogicManager::bumpCathTowardsCond(int door, bool playSound, bool loadScene) {
+ if (getCharacter(kCharacterCath).characterPosition.location || (door < 2 || door > 8) && (door < 32 || door > 39)) {
return false;
}
if (getCharacter(kCharacterCath).characterPosition.car == getCharacter(kCharacterPolice).characterPosition.car &&
!getCharacter(kCharacterPolice).characterPosition.location && !obstacleBetween(kCharacterCath, kCharacterPolice)) {
if (playSound) {
- if (_doors[object].status == 1 || _doors[object].status == 3 || preventEnterComp(object)) {
+ if (_doors[door].status == 1 || _doors[door].status == 3 || preventEnterComp(door)) {
queueSFX(kCharacterCath, 13, 0);
} else {
queueSFX(kCharacterCath, 14, 0);
@@ -1132,7 +1132,7 @@ bool LogicManager::bumpCathTowardsCond(int object, bool playSound, bool loadScen
}
if (loadScene)
- bumpCathRDoor(object);
+ bumpCathRDoor(door);
return true;
}
@@ -1149,7 +1149,7 @@ bool LogicManager::bumpCathTowardsCond(int object, bool playSound, bool loadScen
(getCharacter(kCharacterTrainM).characterPosition.car != kCarGreenSleeping || getCharacter(kCharacterTrainM).characterPosition.position > 2740)) {
if (playSound) {
- if (_doors[object].status == 1 || _doors[object].status == 3 || preventEnterComp(object)) {
+ if (_doors[door].status == 1 || _doors[door].status == 3 || preventEnterComp(door)) {
queueSFX(kCharacterCath, 13, 0);
} else {
queueSFX(kCharacterCath, 14, 0);
@@ -1158,12 +1158,12 @@ bool LogicManager::bumpCathTowardsCond(int object, bool playSound, bool loadScen
}
if (!whoRunningDialog(kCharacterCond1))
- playCondYelling(kCharacterCond1, object);
+ playCondYelling(kCharacterCond1, door);
send(kCharacterCath, kCharacterCond1, 305159806, 0);
if (loadScene)
- bumpCathRDoor(object);
+ bumpCathRDoor(door);
return true;
}
@@ -1174,7 +1174,7 @@ bool LogicManager::bumpCathTowardsCond(int object, bool playSound, bool loadScen
getCharacter(kCharacterCond1).characterPosition.position < getCharacter(kCharacterCath).characterPosition.position) {
if (playSound) {
- if (_doors[object].status == 1 || _doors[object].status == 3 || preventEnterComp(object)) {
+ if (_doors[door].status == 1 || _doors[door].status == 3 || preventEnterComp(door)) {
queueSFX(kCharacterCath, 13, 0);
} else {
queueSFX(kCharacterCath, 14, 0);
@@ -1191,7 +1191,7 @@ bool LogicManager::bumpCathTowardsCond(int object, bool playSound, bool loadScen
}
if (loadScene)
- bumpCathRDoor(object);
+ bumpCathRDoor(door);
return true;
}
@@ -1201,7 +1201,7 @@ bool LogicManager::bumpCathTowardsCond(int object, bool playSound, bool loadScen
getCharacter(kCharacterCond1).characterPosition.position > getCharacter(kCharacterCath).characterPosition.position) {
if (playSound) {
- if (_doors[object].status == 1 || _doors[object].status == 3 || preventEnterComp(object)) {
+ if (_doors[door].status == 1 || _doors[door].status == 3 || preventEnterComp(door)) {
queueSFX(kCharacterCath, 13, 0);
} else {
queueSFX(kCharacterCath, 14, 0);
@@ -1218,7 +1218,7 @@ bool LogicManager::bumpCathTowardsCond(int object, bool playSound, bool loadScen
}
if (loadScene)
- bumpCathFDoor(object);
+ bumpCathFDoor(door);
return true;
}
@@ -1239,7 +1239,7 @@ bool LogicManager::bumpCathTowardsCond(int object, bool playSound, bool loadScen
(getCharacter(kCharacterMadame).characterPosition.car != kCarRedSleeping || getCharacter(kCharacterMadame).characterPosition.position > 2740)) {
if (playSound) {
- if (_doors[object].status == 1 || _doors[object].status == 3 || preventEnterComp(object)) {
+ if (_doors[door].status == 1 || _doors[door].status == 3 || preventEnterComp(door)) {
queueSFX(kCharacterCath, 13, 0);
} else {
queueSFX(kCharacterCath, 14, 0);
@@ -1248,12 +1248,12 @@ bool LogicManager::bumpCathTowardsCond(int object, bool playSound, bool loadScen
}
if (!whoRunningDialog(kCharacterCond2))
- playCondYelling(kCharacterCond2, object);
+ playCondYelling(kCharacterCond2, door);
send(kCharacterCath, kCharacterCond2, 305159806, 0);
if (loadScene)
- bumpCathRDoor(object);
+ bumpCathRDoor(door);
return true;
}
@@ -1261,7 +1261,7 @@ bool LogicManager::bumpCathTowardsCond(int object, bool playSound, bool loadScen
if (!obstacleBetween(kCharacterCath, kCharacterCond2) && getCharacter(kCharacterCond2).direction == 1 && getCharacter(kCharacterCath).characterPosition.position > getCharacter(kCharacterCond2).characterPosition.position) {
if (playSound) {
- if (_doors[object].status == 1 || _doors[object].status == 3 || preventEnterComp(object)) {
+ if (_doors[door].status == 1 || _doors[door].status == 3 || preventEnterComp(door)) {
queueSFX(kCharacterCath, 13, 0);
} else {
queueSFX(kCharacterCath, 14, 0);
@@ -1278,7 +1278,7 @@ bool LogicManager::bumpCathTowardsCond(int object, bool playSound, bool loadScen
}
if (loadScene)
- bumpCathRDoor(object);
+ bumpCathRDoor(door);
return true;
}
@@ -1288,7 +1288,7 @@ bool LogicManager::bumpCathTowardsCond(int object, bool playSound, bool loadScen
}
if (playSound) {
- if (_doors[object].status == 1 || _doors[object].status == 3 || preventEnterComp(object)) {
+ if (_doors[door].status == 1 || _doors[door].status == 3 || preventEnterComp(door)) {
queueSFX(kCharacterCath, 13, 0);
} else {
queueSFX(kCharacterCath, 14, 0);
@@ -1305,7 +1305,7 @@ bool LogicManager::bumpCathTowardsCond(int object, bool playSound, bool loadScen
}
if (loadScene)
- bumpCathFDoor(object);
+ bumpCathFDoor(door);
return true;
}
@@ -1352,9 +1352,9 @@ void LogicManager::bumpCathRx(int car, int position) {
}
}
-void LogicManager::bumpCathFDoor(int object) {
- if ((object - 1) <= 38) {
- switch (object) {
+void LogicManager::bumpCathFDoor(int door) {
+ if ((door - 1) <= 38) {
+ switch (door) {
case 1:
bumpCath(kCarGreenSleeping, 17, 255);
break;
@@ -1409,9 +1409,9 @@ void LogicManager::bumpCathFDoor(int object) {
}
}
-void LogicManager::bumpCathRDoor(int object) {
- if ((object - 1) <= 38) {
- switch (object) {
+void LogicManager::bumpCathRDoor(int door) {
+ if ((door - 1) <= 38) {
+ switch (door) {
case 1:
bumpCath(kCarGreenSleeping, 38, 255);
break;
@@ -3117,7 +3117,7 @@ bool LogicManager::walk(int character, int car, int position) {
}
if (whoOnScreen(character)) {
- if (getCharacter(character).field_4A9) {
+ if (getCharacter(character).needsPosFudge) {
if (getCharacter(character).characterPosition.car == kCarGreenSleeping) {
offset = 0;
@@ -3126,11 +3126,11 @@ bool LogicManager::walk(int character, int car, int position) {
}
for (int i = 0; i < 8; i++) {
- if ((_blockedX[offset + i] || _softBlockedX[offset + i]) && nearX(character, _objectPosition[i], 750) &&
- cathWillSeeOtis(_objectPosition[i]) && (getCharacter(character).direction == 1 && (getCharacter(character).characterPosition.position < _objectPosition[i]) &&
- (car != getCharacter(character).characterPosition.car || position > _objectPosition[i]) ||
- (getCharacter(character).direction == 2 && (getCharacter(character).characterPosition.position > _objectPosition[i]) &&
- (car != getCharacter(character).characterPosition.car || position < _objectPosition[i])))) {
+ if ((_blockedX[offset + i] || _softBlockedX[offset + i]) && nearX(character, _doorPositions[i], 750) &&
+ cathWillSeeOtis(_doorPositions[i]) && (getCharacter(character).direction == 1 && (getCharacter(character).characterPosition.position < _doorPositions[i]) &&
+ (car != getCharacter(character).characterPosition.car || position > _doorPositions[i]) ||
+ (getCharacter(character).direction == 2 && (getCharacter(character).characterPosition.position > _doorPositions[i]) &&
+ (car != getCharacter(character).characterPosition.car || position < _doorPositions[i])))) {
if (_blockedX[offset + i]) {
excuseMeCharacter = whoseBit(_blockedX[offset + i]);
} else {
@@ -3430,7 +3430,7 @@ void LogicManager::endGraphics(int character) {
delete getCharacter(character).sequence2;
getCharacter(character).sequence2 = nullptr;
Common::strcpy_s(getCharacter(character).sequenceName2, "");
- getCharacter(character).field_4AA = 0;
+ getCharacter(character).needsSecondaryPosFudge = 0;
getCharacter(character).directionSwitch = 0;
}
@@ -3439,7 +3439,7 @@ void LogicManager::endGraphics(int character) {
delete getCharacter(character).sequence1;
getCharacter(character).sequence1 = nullptr;
Common::strcpy_s(getCharacter(character).sequenceName, "");
- getCharacter(character).field_4A9 = 0;
+ getCharacter(character).needsPosFudge = 0;
getCharacter(character).currentFrameSeq1 = -1;
}
diff --git a/engines/lastexpress/game/logic.h b/engines/lastexpress/game/logic.h
index 44ce53e7654..7c81ee9f388 100644
--- a/engines/lastexpress/game/logic.h
+++ b/engines/lastexpress/game/logic.h
@@ -118,11 +118,11 @@ public:
bool nearX(int character, int x, int maxDist);
bool whoFacingCath(int character);
bool whoWalking(int character);
- int checkDoor(int object);
- bool preventEnterComp(int object);
- void setDoor(int object, int character, int status, int cursor, int handleCursor);
- void setModel(int object, int8 model);
- int getModel(int object);
+ int checkDoor(int door);
+ bool preventEnterComp(int door);
+ void setDoor(int door, int character, int status, int windowCursor, int handleCursor);
+ void setModel(int door, int8 model);
+ int getModel(int door);
void blockView(int character, int car, int position);
void releaseView(int character, int car, int position);
void releaseEverything(int character);
@@ -135,11 +135,11 @@ public:
int getBumpNode(int car, int position, int param);
void bumpCath(int car, int position, int param);
bool obstacleBetween(int character1, int character2);
- bool bumpCathTowardsCond(int object, bool playSound, bool loadScene);
+ bool bumpCathTowardsCond(int door, bool playSound, bool loadScene);
void bumpCathFx(int car, int position);
void bumpCathRx(int car, int position);
- void bumpCathFDoor(int object);
- void bumpCathRDoor(int object);
+ void bumpCathFDoor(int door);
+ void bumpCathRDoor(int door);
void bumpCathTylerComp();
int getSmartBumpNode(int node);
void smartBumpCath();
@@ -253,7 +253,7 @@ private:
int32 _realTime = 0;
int32 _lastSavegameSessionTicks = 0;
- int _objectPosition[8] = {
+ int _doorPositions[8] = {
8200, 7500, 6470, 5790,
4840, 4070, 3050, 2740
};
diff --git a/engines/lastexpress/game/otis.cpp b/engines/lastexpress/game/otis.cpp
index 1e8a7113213..16d8687ea9e 100644
--- a/engines/lastexpress/game/otis.cpp
+++ b/engines/lastexpress/game/otis.cpp
@@ -79,8 +79,8 @@ void OtisManager::wipeGSysInfo(int character) {
getCharacter(character).sequence2 = nullptr;
}
- getCharacter(character).field_4A9 = 0;
- getCharacter(character).field_4AA = 0;
+ getCharacter(character).needsPosFudge = 0;
+ getCharacter(character).needsSecondaryPosFudge = 0;
getCharacter(character).sequenceName[0] = '\0';
getCharacter(character).sequenceName2[0] = '\0';
getCharacter(character).sequenceNameCopy[0] = '\0';
@@ -253,7 +253,7 @@ void OtisManager::startSeq(int character, int direction, bool loadSequence) {
else
ticksToWaitUntilRestartCycle = 15;
- int8 field_4A9_flag = getCharacter(character).field_4A9;
+ int8 savedNeedsPosFudge = getCharacter(character).needsPosFudge;
getCharacter(character).doProcessEntity = 1;
if (getCharacter(kCharacterCath).characterPosition.car == getCharacter(character).characterPosition.car || direction == 4) {
@@ -329,9 +329,9 @@ void OtisManager::startSeq(int character, int direction, bool loadSequence) {
}
}
- getCharacter(character).field_4AA = getCharacter(character).field_4A9;
+ getCharacter(character).needsSecondaryPosFudge = getCharacter(character).needsPosFudge;
- if ((direction == 1 || direction == 2) && !getCharacter(character).field_4AA && getCharacter(character).sequence2) {
+ if ((direction == 1 || direction == 2) && !getCharacter(character).needsSecondaryPosFudge && getCharacter(character).sequence2) {
getCharacter(character).currentFrameSeq2 = findFrame(character, getCharacter(character).sequence2, 0, false);
if (getCharacter(character).currentFrameSeq2 == -1) {
@@ -342,7 +342,7 @@ void OtisManager::startSeq(int character, int direction, bool loadSequence) {
getCharacter(character).currentFrameSeq2 = 0;
}
- getCharacter(character).field_4A9 = field_4A9_flag;
+ getCharacter(character).needsPosFudge = savedNeedsPosFudge;
getCharacter(character).waitedTicksUntilCycleRestart = getCharacter(character).frame1->ticksToWaitUntilCycleRestart;
getCharacter(character).currentFrameSeq1 = getCharacter(character).sequence1->numFrames - 1;
getCharacter(character).direction = 5;
@@ -357,13 +357,13 @@ void OtisManager::startSeq(int character, int direction, bool loadSequence) {
getCharacter(character).sequence2 = _engine->getMemoryManager()->copySeq(getCharacter(character).sequence1);
Common::strcpy_s(getCharacter(character).sequenceName2, getCharacter(character).sequenceName);
- getCharacter(character).field_4AA = getCharacter(character).field_4A9;
+ getCharacter(character).needsSecondaryPosFudge = getCharacter(character).needsPosFudge;
getCharacter(character).waitedTicksUntilCycleRestart = getCharacter(character).frame1->ticksToWaitUntilCycleRestart;
getCharacter(character).currentFrameSeq1 = getCharacter(character).sequence1->numFrames - 1;
getCharacter(character).direction = 5;
getCharacter(character).directionSwitch = direction;
- if ((direction == 1 || direction == 2) && !getCharacter(character).field_4AA && getCharacter(character).sequence2) {
+ if ((direction == 1 || direction == 2) && !getCharacter(character).needsSecondaryPosFudge && getCharacter(character).sequence2) {
getCharacter(character).currentFrameSeq2 = findFrame(character, getCharacter(character).sequence2, 0, false);
if (getCharacter(character).currentFrameSeq2 == -1)
@@ -469,8 +469,8 @@ void OtisManager::startSeq(int character, int direction, bool loadSequence) {
Common::strcpy_s(getCharacter(character).sequenceName, "");
Common::strcpy_s(getCharacter(character).sequenceName2, "");
- getCharacter(character).field_4A9 = 0;
- getCharacter(character).field_4AA = 0;
+ getCharacter(character).needsPosFudge = 0;
+ getCharacter(character).needsSecondaryPosFudge = 0;
getCharacter(character).directionSwitch = 0;
getCharacter(character).currentFrameSeq1 = -1;
getCharacter(character).currentFrameSeq2 = 0;
@@ -495,8 +495,8 @@ void OtisManager::startSeq(int character, int direction, bool loadSequence) {
Common::strcpy_s(getCharacter(character).sequenceName, "");
Common::strcpy_s(getCharacter(character).sequenceName2, "");
- getCharacter(character).field_4A9 = 0;
- getCharacter(character).field_4AA = 0;
+ getCharacter(character).needsPosFudge = 0;
+ getCharacter(character).needsSecondaryPosFudge = 0;
getCharacter(character).directionSwitch = 0;
getCharacter(character).currentFrameSeq1 = -1;
getCharacter(character).currentFrameSeq2 = 0;
@@ -505,8 +505,8 @@ void OtisManager::startSeq(int character, int direction, bool loadSequence) {
}
void OtisManager::getNewSeqName(int character, int direction, char *outSeqName, char *outSecondarySeqName) {
- getCharacter(character).field_4A9 = 0;
- getCharacter(character).field_4AA = 0;
+ getCharacter(character).needsPosFudge = 0;
+ getCharacter(character).needsSecondaryPosFudge = 0;
int outSeqNameSize = sizeof(getCharacter(kCharacterCath).sequenceName);
@@ -535,11 +535,11 @@ void OtisManager::getNewSeqName(int character, int direction, char *outSeqName,
if (getCharacter(character).characterPosition.position > getCharacter(kCharacterCath).characterPosition.position) {
if (getCharacter(character).characterPosition.position <= 8513) {
Common::sprintf_s(outSeqName, outSeqNameSize, "%02d%01d-03d.seq", character, getCharacter(character).clothes);
- getCharacter(character).field_4A9 = 1;
+ getCharacter(character).needsPosFudge = 1;
} else {
Common::sprintf_s(outSeqName, outSeqNameSize, "%02d%01d-%02ded.seq", character, getCharacter(character).clothes, _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_activeNode].cathDir);
Common::sprintf_s(outSecondarySeqName, outSeqNameSize, "%02d%01d-03d.seq", character, getCharacter(character).clothes);
- getCharacter(character).field_4AA = 1;
+ getCharacter(character).needsSecondaryPosFudge = 1;
}
}
@@ -576,7 +576,7 @@ void OtisManager::getNewSeqName(int character, int direction, char *outSeqName,
} else {
Common::sprintf_s(outSeqName, outSeqNameSize, "%02d%01d-38d.seq", character, getCharacter(character).clothes);
Common::sprintf_s(outSecondarySeqName, outSeqNameSize, "%02d%01d-%02ded.seq", character, getCharacter(character).clothes, _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_activeNode].cathDir);
- getCharacter(character).field_4A9 = 1;
+ getCharacter(character).needsPosFudge = 1;
}
}
@@ -620,7 +620,7 @@ void OtisManager::getNewSeqName(int character, int direction, char *outSeqName,
} else {
Common::sprintf_s(outSeqName, outSeqNameSize, "%02d%01d-03u.seq", character, getCharacter(character).clothes);
Common::sprintf_s(outSecondarySeqName, outSeqNameSize, "%02d%01d-%02deu.seq", character, getCharacter(character).clothes, _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_activeNode].cathDir);
- getCharacter(character).field_4A9 = 1;
+ getCharacter(character).needsPosFudge = 1;
}
}
@@ -654,11 +654,11 @@ void OtisManager::getNewSeqName(int character, int direction, char *outSeqName,
if (getCharacter(character).characterPosition.position < getCharacter(kCharacterCath).characterPosition.position) {
if (getCharacter(character).characterPosition.position >= 2087) {
Common::sprintf_s(outSeqName, outSeqNameSize, "%02d%01d-38u.seq", character, getCharacter(character).clothes);
- getCharacter(character).field_4A9 = 1;
+ getCharacter(character).needsPosFudge = 1;
} else {
Common::sprintf_s(outSeqName, outSeqNameSize, "%02d%01d-%02deu.seq", character, getCharacter(character).clothes, _engine->getLogicManager()->_trainData[_engine->getLogicManager()->_activeNode].cathDir);
Common::sprintf_s(outSecondarySeqName, outSeqNameSize, "%02d%01d-38u.seq", character, getCharacter(character).clothes);
- getCharacter(character).field_4AA = 1;
+ getCharacter(character).needsSecondaryPosFudge = 1;
}
}
@@ -972,7 +972,7 @@ void OtisManager::initCurFrame(int character) {
case 15:
case 16:
case 17:
- if (!getCharacter(character).field_4A9) {
+ if (!getCharacter(character).needsPosFudge) {
getCharacter(character).currentFrameSeq1 = findFrame(
character,
getCharacter(character).sequence1,
@@ -1013,7 +1013,7 @@ void OtisManager::initCurFrame(int character) {
case 37:
case 38:
case 39:
- if (getCharacter(character).field_4A9) {
+ if (getCharacter(character).needsPosFudge) {
if (getCharacter(character).characterPosition.position >= getCharacter(kCharacterCath).characterPosition.position) {
getCharacter(character).currentFrameSeq1 = -1;
} else {
@@ -1222,7 +1222,7 @@ void OtisManager::updateCharacter(int character) {
getCharacter(character).currentFrameSeq1++;
- if (getCharacter(character).currentFrameSeq1 > (getCharacter(character).sequence1->numFrames - 1) || getCharacter(character).field_4A9 && mainWalkTooFar(character)) {
+ if (getCharacter(character).currentFrameSeq1 > (getCharacter(character).sequence1->numFrames - 1) || getCharacter(character).needsPosFudge && mainWalkTooFar(character)) {
if (getCharacter(character).direction == 3) {
getCharacter(character).currentFrameSeq1 = 0;
} else {
@@ -1328,7 +1328,7 @@ void OtisManager::doNewSprite(int character, bool keepPreviousFrame, bool dontPl
if (newSprite->visibilityDist) {
getCharacter(character).characterPosition.position = newSprite->visibilityDist;
- if (getCharacter(character).field_4A9)
+ if (getCharacter(character).needsPosFudge)
getCharacter(character).characterPosition.position += getFudge();
}
@@ -1383,14 +1383,14 @@ void OtisManager::doNewSprite(int character, bool keepPreviousFrame, bool dontPl
void OtisManager::doSeqChange(int character) {
if (getCharacter(character).direction != 4 || (_engine->getLogicManager()->send(kCharacterCath, character, 3, 0), _engine->getMessageManager()->flush(), !_engine->_stopUpdatingCharacters) && !getCharacter(character).doProcessEntity) {
if (_engine->getLogicManager()->whoWalking(character) && !getCharacter(character).sequence2 && corrRender(0) && getCharacter(kCharacterCath).characterPosition.car == getCharacter(character).characterPosition.car) {
- if (getCharacter(character).field_4A9 && !_engine->getLogicManager()->whoFacingCath(character)) {
+ if (getCharacter(character).needsPosFudge && !_engine->getLogicManager()->whoFacingCath(character)) {
getCharacter(character).characterPosition.position = 8514;
if (getCharacter(character).direction != 1)
getCharacter(character).characterPosition.position = 2086;
startSeq(character, getCharacter(character).direction, 1);
- } else if (!getCharacter(character).field_4A9 && _engine->getLogicManager()->whoFacingCath(character)) {
+ } else if (!getCharacter(character).needsPosFudge && _engine->getLogicManager()->whoFacingCath(character)) {
getCharacter(character).characterPosition.position = 2088;
if (getCharacter(character).direction != 1)
@@ -1408,17 +1408,17 @@ void OtisManager::doNextSeq(int character) {
getCharacter(character).sequence1 = getCharacter(character).sequence2;
Common::strcpy_s(getCharacter(character).sequenceName, getCharacter(character).sequenceName2);
- getCharacter(character).field_4A9 = getCharacter(character).field_4AA;
+ getCharacter(character).needsPosFudge = getCharacter(character).needsSecondaryPosFudge;
if (getCharacter(character).directionSwitch)
getCharacter(character).direction = getCharacter(character).directionSwitch;
getCharacter(character).sequence2 = nullptr;
Common::strcpy_s(getCharacter(character).sequenceName2, "");
- getCharacter(character).field_4AA = 0;
+ getCharacter(character).needsSecondaryPosFudge = 0;
getCharacter(character).directionSwitch = 0;
- if (getCharacter(character).field_4A9) {
+ if (getCharacter(character).needsPosFudge) {
initCurFrame(character);
if (getCharacter(character).currentFrameSeq1 == -1)
@@ -1441,7 +1441,7 @@ void OtisManager::doNoSeq(int character) {
if (_engine->getLogicManager()->whoFacingCath(character)) {
getCharacter(character).characterPosition.position = getCharacter(0).characterPosition.position;
} else {
- if (getCharacter(character).field_4A9) {
+ if (getCharacter(character).needsPosFudge) {
if (getCharacter(character).direction == 1) {
getCharacter(character).characterPosition.position = 8514;
} else {
@@ -1469,7 +1469,7 @@ void OtisManager::doNoSeq(int character) {
}
Common::strcpy_s(getCharacter(character).sequenceName, "");
- getCharacter(character).field_4A9 = 0;
+ getCharacter(character).needsPosFudge = 0;
if (getCharacter(character).directionSwitch)
getCharacter(character).direction = getCharacter(character).directionSwitch;
diff --git a/engines/lastexpress/game/savegame.cpp b/engines/lastexpress/game/savegame.cpp
index 62019e8554a..6f2404a4a81 100644
--- a/engines/lastexpress/game/savegame.cpp
+++ b/engines/lastexpress/game/savegame.cpp
@@ -147,8 +147,8 @@ void SaveManager::writeSavePoint(CVCRFile *file, int saveType, int character, in
charactersBuffer[i * 1262 + offset++] = characterStruct.position2;
charactersBuffer[i * 1262 + offset++] = characterStruct.car2;
charactersBuffer[i * 1262 + offset++] = characterStruct.doProcessEntity;
- charactersBuffer[i * 1262 + offset++] = characterStruct.field_4A9;
- charactersBuffer[i * 1262 + offset++] = characterStruct.field_4AA;
+ charactersBuffer[i * 1262 + offset++] = characterStruct.needsPosFudge;
+ charactersBuffer[i * 1262 + offset++] = characterStruct.needsSecondaryPosFudge;
charactersBuffer[i * 1262 + offset++] = characterStruct.directionSwitch;
// Copy string fields
@@ -346,8 +346,8 @@ void SaveManager::readSavePoint(CVCRFile *file, int *saveType, uint8 *character,
characterStruct->position2 = charactersBuffer[i * 1262 + offset]; offset++;
characterStruct->car2 = charactersBuffer[i * 1262 + offset]; offset++;
characterStruct->doProcessEntity = charactersBuffer[i * 1262 + offset]; offset++;
- characterStruct->field_4A9 = charactersBuffer[i * 1262 + offset]; offset++;
- characterStruct->field_4AA = charactersBuffer[i * 1262 + offset]; offset++;
+ characterStruct->needsPosFudge = charactersBuffer[i * 1262 + offset]; offset++;
+ characterStruct->needsSecondaryPosFudge = charactersBuffer[i * 1262 + offset]; offset++;
characterStruct->directionSwitch = charactersBuffer[i * 1262 + offset]; offset++;
// Copy string fields
diff --git a/engines/lastexpress/lastexpress.h b/engines/lastexpress/lastexpress.h
index ad8a5deb5db..c04afdb7b0e 100644
--- a/engines/lastexpress/lastexpress.h
+++ b/engines/lastexpress/lastexpress.h
@@ -252,8 +252,8 @@ typedef struct Character {
int8 position2;
int8 car2;
int8 doProcessEntity;
- int8 field_4A9;
- int8 field_4AA;
+ int8 needsPosFudge;
+ int8 needsSecondaryPosFudge;
int8 directionSwitch;
char sequenceName[13];
char sequenceName2[13];
@@ -285,8 +285,8 @@ typedef struct Character {
position2 = 0;
car2 = 0;
doProcessEntity = 0;
- field_4A9 = 0;
- field_4AA = 0;
+ needsPosFudge = 0;
+ needsSecondaryPosFudge = 0;
directionSwitch = 0;
memset(sequenceName, 0, sizeof(sequenceName));
Commit: c22a88182a0bae06e728a9bd0c3f5bdad28c8a42
https://github.com/scummvm/scummvm/commit/c22a88182a0bae06e728a9bd0c3f5bdad28c8a42
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix remaining character logic issues
Changed paths:
engines/lastexpress/characters/abbot.cpp
engines/lastexpress/characters/alexei.cpp
engines/lastexpress/characters/anna.cpp
engines/lastexpress/characters/august.cpp
engines/lastexpress/characters/cond2.cpp
engines/lastexpress/characters/cook.cpp
engines/lastexpress/characters/francois.cpp
engines/lastexpress/characters/headwait.cpp
engines/lastexpress/characters/salko.cpp
engines/lastexpress/characters/tablea.cpp
engines/lastexpress/characters/tableb.cpp
engines/lastexpress/characters/tablec.cpp
engines/lastexpress/characters/tabled.cpp
engines/lastexpress/characters/tablee.cpp
engines/lastexpress/characters/tablef.cpp
engines/lastexpress/characters/tatiana.cpp
diff --git a/engines/lastexpress/characters/abbot.cpp b/engines/lastexpress/characters/abbot.cpp
index 066aca1e789..5bc150dd99f 100644
--- a/engines/lastexpress/characters/abbot.cpp
+++ b/engines/lastexpress/characters/abbot.cpp
@@ -20,7 +20,6 @@
*/
#include "lastexpress/lastexpress.h"
-#include "lastexpress/game/logic.h"
namespace LastExpress {
@@ -777,8 +776,8 @@ void LogicManager::HAND_Abbot_GoLunch(HAND_PARAMS) {
case 18:
switch (getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8]) {
case 1:
- setDoor(34, getCharacter(kCharacterAbbot).currentCall, 0, 10, 9);
- setDoor(50, getCharacter(kCharacterAbbot).currentCall, 0, 10, 9);
+ setDoor(34, kCharacterCath, 0, 10, 9);
+ setDoor(50, kCharacterCath, 0, 10, 9);
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 2;
AbbotCall(&LogicManager::CONS_Abbot_DoCorrOtis, "617Mc", 34, 0, 0);
break;
@@ -799,8 +798,10 @@ void LogicManager::HAND_Abbot_GoLunch(HAND_PARAMS) {
break;
case 5:
startSeqOtis(kCharacterAbbot, "029J");
+
if (inSalon(kCharacterCath))
advanceFrame(kCharacterAbbot);
+
getCharacter(kCharacterAbbot).callbacks[getCharacter(kCharacterAbbot).currentCall + 8] = 6;
AbbotCall(&LogicManager::CONS_Abbot_FinishSeqOtis, 0, 0, 0, 0);
break;
diff --git a/engines/lastexpress/characters/alexei.cpp b/engines/lastexpress/characters/alexei.cpp
index 2765c5577ce..f613d7229bf 100644
--- a/engines/lastexpress/characters/alexei.cpp
+++ b/engines/lastexpress/characters/alexei.cpp
@@ -525,7 +525,7 @@ void LogicManager::HAND_Alexei_ExitComp(HAND_PARAMS) {
break;
case 135664192:
- setDoor(2, 0, 1, 10, 9);
+ setDoor(2, kCharacterCath, 1, 10, 9);
softReleaseAtDoor(kCharacterAlexei, 2);
getCharacter(kCharacterAlexei).currentCall--;
@@ -681,8 +681,8 @@ void LogicManager::HAND_Alexei_CompLogic(HAND_PARAMS) {
break;
case 17:
if (getCharacterCurrentParams(kCharacterAlexei)[5] || getCharacterCurrentParams(kCharacterAlexei)[4]) {
- setDoor(2, 12, 1, 10, 9);
- setDoor(18, 12, 1, 10, 9);
+ setDoor(2, kCharacterAlexei, 1, 10, 9);
+ setDoor(18, kCharacterAlexei, 1, 10, 9);
getCharacterCurrentParams(kCharacterAlexei)[5] = 0;
getCharacterCurrentParams(kCharacterAlexei)[4] = 0;
}
diff --git a/engines/lastexpress/characters/anna.cpp b/engines/lastexpress/characters/anna.cpp
index b9af64ca4b5..6394ba4dbcc 100644
--- a/engines/lastexpress/characters/anna.cpp
+++ b/engines/lastexpress/characters/anna.cpp
@@ -3491,7 +3491,7 @@ void LogicManager::HAND_Anna_LeaveConcert(HAND_PARAMS) {
AnnaCall(&LogicManager::CONS_Anna_DoWalk, 4, 4070, 0, 0);
break;
case 2:
- setDoor(37, 0, 1, 0, 0);
+ setDoor(37, kCharacterAlexei, 1, 0, 0);
send(kCharacterAnna, kCharacterCond2, 205033696, 0);
startCycOtis(kCharacterAnna, "625Ef");
softBlockAtDoor(kCharacterAnna, 37);
@@ -3733,15 +3733,15 @@ void LogicManager::HAND_Anna_AfterConcert(HAND_PARAMS) {
break;
case 236241630:
- setDoor(37, 1, 1, 0, 0);
- setDoor(53, 1, 1, 0, 0);
+ setDoor(37, kCharacterAnna, 1, 0, 0);
+ setDoor(53, kCharacterAnna, 1, 0, 0);
getCharacter(kCharacterAnna).callbacks[getCharacter(kCharacterAnna).currentCall + 8] = 7;
AnnaCall(&LogicManager::CONS_Anna_DoDialog, "Ann1016A", 0, 0, 0);
break;
case 236517970:
getCharacterCurrentParams(kCharacterAnna)[2] = 1;
- setDoor(37, 1, 1, 10, 9);
- setDoor(53, 1, 1, 10, 9);
+ setDoor(37, kCharacterAnna, 1, 10, 9);
+ setDoor(53, kCharacterAnna, 1, 10, 9);
break;
default:
break;
diff --git a/engines/lastexpress/characters/august.cpp b/engines/lastexpress/characters/august.cpp
index 4b6ac078116..cd689f377db 100644
--- a/engines/lastexpress/characters/august.cpp
+++ b/engines/lastexpress/characters/august.cpp
@@ -1484,7 +1484,7 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
break;
case 4:
- setDoor(1, 0, 0, 10, 9);
+ setDoor(1, kCharacterCath, 0, 10, 9);
playDialog(0, "LIB014", -1, 0);
endGraphics(kCharacterAugust);
getCharacter(kCharacterAugust).characterPosition.location = 1;
@@ -3124,7 +3124,7 @@ void LogicManager::HAND_August_AfterLunch(HAND_PARAMS) {
playDialog(kCharacterAugust, "AUG3102", -1, 15);
break;
case 12:
- setDoor(3, 0, 2, 0, 0);
+ setDoor(3, kCharacterCath, 2, 0, 0);
startCycOtis(kCharacterAugust, "506A2");
getCharacter(kCharacterAugust).inventoryItem = 0x92;
break;
@@ -3725,7 +3725,7 @@ void LogicManager::HAND_August_StartPart4(HAND_PARAMS) {
getCharacter(kCharacterAugust).characterPosition.location = 1;
getCharacter(kCharacterAugust).inventoryItem = 0;
getCharacter(kCharacterAugust).clothes = 2;
- setDoor(3, 0, 2, 0, 0);
+ setDoor(3, kCharacterCath, 2, 0, 0);
break;
default:
break;
@@ -3967,7 +3967,7 @@ void LogicManager::HAND_August_GoSalon4(HAND_PARAMS) {
case 18:
switch (getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8]) {
case 1:
- setDoor(3, 0, 0, 10, 9);
+ setDoor(3, kCharacterCath, 0, 10, 9);
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 2;
AugustCall(&LogicManager::CONS_August_DoWalk, 5, 850, 0, 0);
break;
diff --git a/engines/lastexpress/characters/cond2.cpp b/engines/lastexpress/characters/cond2.cpp
index 4764d5f4f9f..125e6b5ea59 100644
--- a/engines/lastexpress/characters/cond2.cpp
+++ b/engines/lastexpress/characters/cond2.cpp
@@ -1383,7 +1383,7 @@ void LogicManager::HAND_Cond2_MakeBedIvo(HAND_PARAMS) {
break;
case 7:
softReleaseAtDoor(kCharacterCond2, 39);
- setDoor(39, 0, 2, 255, 255);
+ setDoor(39, kCharacterCath, 2, 255, 255);
getCharacter(kCharacterCond2).characterPosition.location = 1;
endGraphics(kCharacterCond2);
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
@@ -1391,7 +1391,7 @@ void LogicManager::HAND_Cond2_MakeBedIvo(HAND_PARAMS) {
break;
case 8:
playDialog(kCharacterCond2, "JAC1013A", -1, 0);
- setDoor(39, 0, 1, 255, 255);
+ setDoor(39, kCharacterCath, 1, 255, 255);
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 9;
Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "667Uh", 39, 0, 0);
break;
@@ -1487,7 +1487,7 @@ void LogicManager::HAND_Cond2_MakeBedMilos(HAND_PARAMS) {
break;
case 7:
softReleaseAtDoor(kCharacterCond2, 38);
- setDoor(38, 0, 2, 255, 255);
+ setDoor(38, kCharacterCath, 2, 255, 255);
getCharacter(kCharacterCond2).characterPosition.location = 1;
endGraphics(kCharacterCond2);
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 8;
@@ -1495,7 +1495,7 @@ void LogicManager::HAND_Cond2_MakeBedMilos(HAND_PARAMS) {
break;
case 8:
playDialog(kCharacterCond2, "JAC1030A", -1, 0);
- setDoor(38, 0, 1, 255, 255);
+ setDoor(38, kCharacterCath, 1, 255, 255);
getCharacter(kCharacterCond2).callbacks[getCharacter(kCharacterCond2).currentCall + 8] = 9;
Cond2Call(&LogicManager::CONS_Cond2_DoCorrOtis, "627Ug", 38, 0, 0);
break;
diff --git a/engines/lastexpress/characters/cook.cpp b/engines/lastexpress/characters/cook.cpp
index 9494c91944c..b6bf9efdb4e 100644
--- a/engines/lastexpress/characters/cook.cpp
+++ b/engines/lastexpress/characters/cook.cpp
@@ -74,7 +74,7 @@ void LogicManager::HAND_Cook_DoSeqOtis(HAND_PARAMS) {
switch (msg->action) {
case 3:
getCharacter(kCharacterCook).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCook, _functionsAbbot[getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall]]);
+ _engine->getMessageManager()->setMessageHandle(kCharacterCook, _functionsCook[getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall]]);
fedEx(kCharacterCook, kCharacterCook, 18, 0);
break;
case 12:
@@ -101,7 +101,7 @@ void LogicManager::HAND_Cook_DoDialog(HAND_PARAMS) {
switch (msg->action) {
case 2:
getCharacter(kCharacterCook).currentCall--;
- _engine->getMessageManager()->setMessageHandle(kCharacterCook, _functionsAbbot[getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall]]);
+ _engine->getMessageManager()->setMessageHandle(kCharacterCook, _functionsCook[getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall]]);
fedEx(kCharacterCook, kCharacterCook, 18, 0);
break;
case 12:
@@ -233,7 +233,7 @@ void LogicManager::HAND_Cook_DowntrainVersion(HAND_PARAMS) {
break;
case 17:
if (!inKitchen(kCharacterCath)) {
- endGraphics(kCharacterCath);
+ endGraphics(kCharacterCook);
getCharacter(kCharacterCook).currentCall--;
_engine->getMessageManager()->setMessageHandle(8, _functionsCook[getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall]]);
fedEx(kCharacterCook, kCharacterCook, 18, 0);
@@ -336,7 +336,8 @@ void LogicManager::HAND_Cook_InKitchenDinner(HAND_PARAMS) {
case 0:
if (getCharacterCurrentParams(kCharacterCook)[3] || (getCharacterCurrentParams(kCharacterCook)[3] = _gameTime + getCharacterCurrentParams(kCharacterCook)[1], _gameTime + getCharacterCurrentParams(kCharacterCook)[1] != 0)) {
if (getCharacterCurrentParams(kCharacterCook)[3] >= _gameTime)
- return;
+ break;
+
getCharacterCurrentParams(kCharacterCook)[3] = 0x7FFFFFFF;
}
@@ -368,8 +369,8 @@ void LogicManager::HAND_Cook_InKitchenDinner(HAND_PARAMS) {
case 18:
if (getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] == 1) {
getCharacterCurrentParams(kCharacterCook)[0] = 0;
- } else if (getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] >= 2 && getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] <= 3) {
- getCharacterCurrentParams(kCharacterCook)[2] = getCharacterCurrentParams(kCharacterCook)[2] == 0;
+ } else if (getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] == 2 || getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] == 3) {
+ getCharacterCurrentParams(kCharacterCook)[2] = (getCharacterCurrentParams(kCharacterCook)[2] == 0) ? 1 : 0;
}
break;
@@ -481,7 +482,7 @@ void LogicManager::HAND_Cook_InKitchenBreakfast(HAND_PARAMS) {
break;
case 18:
if (getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] && getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] <= 2)
- getCharacterCurrentParams(kCharacterCook)[1] = getCharacterCurrentParams(kCharacterCook)[1] == 0;
+ getCharacterCurrentParams(kCharacterCook)[1] = (getCharacterCurrentParams(kCharacterCook)[1] == 0) ? 1 : 0;
break;
default:
@@ -575,8 +576,8 @@ void LogicManager::HAND_Cook_InKitchenLunch(HAND_PARAMS) {
case 18:
if (getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] == 1) {
getCharacterCurrentParams(kCharacterCook)[0] = 0;
- } else if (getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] >= 2 && getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] <= 3) {
- getCharacterCurrentParams(kCharacterCook)[2] = getCharacterCurrentParams(kCharacterCook)[2] == 0;
+ } else if (getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] == 2 || getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] == 3) {
+ getCharacterCurrentParams(kCharacterCook)[2] = (getCharacterCurrentParams(kCharacterCook)[2] == 0) ? 1 : 0;
}
break;
@@ -657,7 +658,7 @@ void LogicManager::HAND_Cook_InKitchenDinner2(HAND_PARAMS) {
break;
case 18:
if (getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] && getCharacter(kCharacterCook).callbacks[getCharacter(kCharacterCook).currentCall + 8] <= 2)
- getCharacterCurrentParams(kCharacterCook)[1] = getCharacterCurrentParams(kCharacterCook)[1] == 0;
+ getCharacterCurrentParams(kCharacterCook)[1] = (getCharacterCurrentParams(kCharacterCook)[1] == 0) ? 1 : 0;
break;
default:
diff --git a/engines/lastexpress/characters/francois.cpp b/engines/lastexpress/characters/francois.cpp
index 9093fa97e41..26b3d20b2b2 100644
--- a/engines/lastexpress/characters/francois.cpp
+++ b/engines/lastexpress/characters/francois.cpp
@@ -491,16 +491,22 @@ void LogicManager::HAND_Francois_EnterComp(HAND_PARAMS) {
break;
case 18:
- if (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] == 1) {
+ switch (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8]) {
+ case 1:
setDoor(35, kCharacterCath, 2, 255, 255);
send(kCharacterFrancois, kCharacterMadame, 102484312, 0);
- } else if (getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] == 2) {
+
+ // fall through
+ case 2:
getCharacter(kCharacterFrancois).characterPosition.location = 1;
endGraphics(kCharacterFrancois);
getCharacter(kCharacterFrancois).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterFrancois, _functionsFrancois[getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall]]);
fedEx(kCharacterFrancois, kCharacterFrancois, 18, 0);
+ break;
+ default:
+ break;
}
break;
@@ -1417,7 +1423,7 @@ void LogicManager::HAND_Francois_WithMama(HAND_PARAMS) {
break;
}
- if (getCharacterCurrentParams(kCharacterFrancois)[4] != 2147483647 && _gameTime) {
+ if (getCharacterCurrentParams(kCharacterFrancois)[4] != 0x7FFFFFFF && _gameTime) {
if (_gameTime > 15803100) {
getCharacterCurrentParams(kCharacterFrancois)[4] = 0x7FFFFFFF;
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 6;
@@ -1498,7 +1504,7 @@ void LogicManager::HAND_Francois_WithMama(HAND_PARAMS) {
break;
}
- if (getCharacterCurrentParams(kCharacterFrancois)[4] != 2147483647 && _gameTime) {
+ if (getCharacterCurrentParams(kCharacterFrancois)[4] != 0x7FFFFFFF && _gameTime) {
if (_gameTime > 15803100) {
getCharacterCurrentParams(kCharacterFrancois)[4] = 0x7FFFFFFF;
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 6;
@@ -1552,7 +1558,7 @@ void LogicManager::HAND_Francois_WithMama(HAND_PARAMS) {
break;
}
- if (getCharacterCurrentParams(kCharacterFrancois)[4] != 2147483647 && _gameTime) {
+ if (getCharacterCurrentParams(kCharacterFrancois)[4] != 0x7FFFFFFF && _gameTime) {
if (_gameTime > 15803100) {
getCharacterCurrentParams(kCharacterFrancois)[4] = 0x7FFFFFFF;
getCharacter(kCharacterFrancois).callbacks[getCharacter(kCharacterFrancois).currentCall + 8] = 6;
diff --git a/engines/lastexpress/characters/headwait.cpp b/engines/lastexpress/characters/headwait.cpp
index d0d95386004..77cae708f43 100644
--- a/engines/lastexpress/characters/headwait.cpp
+++ b/engines/lastexpress/characters/headwait.cpp
@@ -1034,7 +1034,7 @@ void LogicManager::HAND_HeadWait_DoOtis5029A(HAND_PARAMS) {
break;
case 12:
playDialog(kCharacterHeadWait, "ABB3015", -1, 105);
- startSeqOtis(kCharacterHeadWait, "029msg");
+ startSeqOtis(kCharacterHeadWait, "029A1");
startSeqOtis(kCharacterAbbot, "029A2");
break;
default:
diff --git a/engines/lastexpress/characters/salko.cpp b/engines/lastexpress/characters/salko.cpp
index 87f776385eb..55b54817d11 100644
--- a/engines/lastexpress/characters/salko.cpp
+++ b/engines/lastexpress/characters/salko.cpp
@@ -291,12 +291,12 @@ void LogicManager::HAND_Salko_DoWalkBehind(HAND_PARAMS) {
walk(kCharacterSalko, getCharacterCurrentParams(kCharacterSalko)[0], getCharacterCurrentParams(kCharacterSalko)[1]);
break;
case 123668192:
- break;
- default:
getCharacter(kCharacterSalko).currentCall--;
_engine->getMessageManager()->setMessageHandle(kCharacterSalko, _functionsSalko[getCharacter(kCharacterSalko).callbacks[getCharacter(kCharacterSalko).currentCall]]);
fedEx(kCharacterSalko, kCharacterSalko, 18, 0);
break;
+ default:
+ break;
}
}
diff --git a/engines/lastexpress/characters/tablea.cpp b/engines/lastexpress/characters/tablea.cpp
index 0b61d0ec832..ebc98db0a9b 100644
--- a/engines/lastexpress/characters/tablea.cpp
+++ b/engines/lastexpress/characters/tablea.cpp
@@ -168,18 +168,18 @@ void LogicManager::HAND_TableA_Idling(HAND_PARAMS) {
getCharacter(kCharacterTableA).characterPosition.position = 3970;
getCharacter(kCharacterTableA).characterPosition.location = 1;
getCharacter(kCharacterTableA).characterPosition.car = kCarRestaurant;
- _engine->getLogicManager()->startCycOtis(kCharacterTableA, "001P");
+ startCycOtis(kCharacterTableA, "001P");
break;
case 103798704:
if (msg->param.stringParam) {
- _engine->getLogicManager()->startCycOtis(kCharacterTableA, msg->param.stringParam);
+ startCycOtis(kCharacterTableA, msg->param.stringParam);
} else {
- _engine->getLogicManager()->startCycOtis(kCharacterTableA, "001P");
+ startCycOtis(kCharacterTableA, "001P");
}
break;
case 136455232:
- _engine->getLogicManager()->startCycOtis(kCharacterTableA, "BLANK");
+ startCycOtis(kCharacterTableA, "BLANK");
break;
default:
break;
diff --git a/engines/lastexpress/characters/tableb.cpp b/engines/lastexpress/characters/tableb.cpp
index 7730916e88f..af2c99a9fe4 100644
--- a/engines/lastexpress/characters/tableb.cpp
+++ b/engines/lastexpress/characters/tableb.cpp
@@ -168,18 +168,18 @@ void LogicManager::HAND_TableB_Idling(HAND_PARAMS) {
getCharacter(kCharacterTableB).characterPosition.position = 3970;
getCharacter(kCharacterTableB).characterPosition.location = 1;
getCharacter(kCharacterTableB).characterPosition.car = kCarRestaurant;
- _engine->getLogicManager()->startCycOtis(kCharacterTableB, "005J");
+ startCycOtis(kCharacterTableB, "005J");
break;
case 103798704:
if (msg->param.stringParam) {
- _engine->getLogicManager()->startCycOtis(kCharacterTableB, msg->param.stringParam);
+ startCycOtis(kCharacterTableB, msg->param.stringParam);
} else {
- _engine->getLogicManager()->startCycOtis(kCharacterTableB, "005J");
+ startCycOtis(kCharacterTableB, "005J");
}
break;
case 136455232:
- _engine->getLogicManager()->startCycOtis(kCharacterTableB, "BLANK");
+ startCycOtis(kCharacterTableB, "BLANK");
break;
default:
break;
diff --git a/engines/lastexpress/characters/tablec.cpp b/engines/lastexpress/characters/tablec.cpp
index 3019da301ad..80c44873c4d 100644
--- a/engines/lastexpress/characters/tablec.cpp
+++ b/engines/lastexpress/characters/tablec.cpp
@@ -193,18 +193,18 @@ void LogicManager::HAND_TableC_Idling(HAND_PARAMS) {
getCharacter(kCharacterTableC).characterPosition.position = 4690;
getCharacter(kCharacterTableC).characterPosition.location = 1;
getCharacter(kCharacterTableC).characterPosition.car = kCarRestaurant;
- _engine->getLogicManager()->startCycOtis(kCharacterTableC, "009G");
+ startCycOtis(kCharacterTableC, "009G");
break;
case 103798704:
if (msg->param.stringParam) {
- _engine->getLogicManager()->startCycOtis(kCharacterTableC, msg->param.stringParam);
+ startCycOtis(kCharacterTableC, msg->param.stringParam);
} else {
- _engine->getLogicManager()->startCycOtis(kCharacterTableC, "009G");
+ startCycOtis(kCharacterTableC, "009G");
}
break;
case 136455232:
- _engine->getLogicManager()->startCycOtis(kCharacterTableC, "BLANK");
+ startCycOtis(kCharacterTableC, "BLANK");
break;
default:
break;
diff --git a/engines/lastexpress/characters/tabled.cpp b/engines/lastexpress/characters/tabled.cpp
index 991bef0c976..755fd84ba3b 100644
--- a/engines/lastexpress/characters/tabled.cpp
+++ b/engines/lastexpress/characters/tabled.cpp
@@ -168,18 +168,18 @@ void LogicManager::HAND_TableD_Idling(HAND_PARAMS) {
getCharacter(kCharacterTableD).characterPosition.position = 4690;
getCharacter(kCharacterTableD).characterPosition.location = 1;
getCharacter(kCharacterTableD).characterPosition.car = kCarRestaurant;
- _engine->getLogicManager()->startCycOtis(kCharacterTableD, "010M");
+ startCycOtis(kCharacterTableD, "010M");
break;
case 103798704:
if (msg->param.stringParam) {
- _engine->getLogicManager()->startCycOtis(kCharacterTableD, msg->param.stringParam);
+ startCycOtis(kCharacterTableD, msg->param.stringParam);
} else {
- _engine->getLogicManager()->startCycOtis(kCharacterTableD, "010M");
+ startCycOtis(kCharacterTableD, "010M");
}
break;
case 136455232:
- _engine->getLogicManager()->startCycOtis(kCharacterTableD, "BLANK");
+ startCycOtis(kCharacterTableD, "BLANK");
break;
default:
break;
diff --git a/engines/lastexpress/characters/tablee.cpp b/engines/lastexpress/characters/tablee.cpp
index fa7247f64d0..80ad6929cc3 100644
--- a/engines/lastexpress/characters/tablee.cpp
+++ b/engines/lastexpress/characters/tablee.cpp
@@ -168,18 +168,18 @@ void LogicManager::HAND_TableE_Idling(HAND_PARAMS) {
getCharacter(kCharacterTableE).characterPosition.position = 5420;
getCharacter(kCharacterTableE).characterPosition.location = 1;
getCharacter(kCharacterTableE).characterPosition.car = kCarRestaurant;
- _engine->getLogicManager()->startCycOtis(kCharacterTableE, "014F");
+ startCycOtis(kCharacterTableE, "014F");
break;
case 103798704:
if (msg->param.stringParam) {
- _engine->getLogicManager()->startCycOtis(kCharacterTableE, msg->param.stringParam);
+ startCycOtis(kCharacterTableE, msg->param.stringParam);
} else {
- _engine->getLogicManager()->startCycOtis(kCharacterTableE, "014F");
+ startCycOtis(kCharacterTableE, "014F");
}
break;
case 136455232:
- _engine->getLogicManager()->startCycOtis(kCharacterTableE, "BLANK");
+ startCycOtis(kCharacterTableE, "BLANK");
break;
default:
break;
diff --git a/engines/lastexpress/characters/tablef.cpp b/engines/lastexpress/characters/tablef.cpp
index e592fb7f409..9311e2a25b4 100644
--- a/engines/lastexpress/characters/tablef.cpp
+++ b/engines/lastexpress/characters/tablef.cpp
@@ -168,18 +168,18 @@ void LogicManager::HAND_TableF_Idling(HAND_PARAMS) {
getCharacter(kCharacterTableF).characterPosition.position = 5420;
getCharacter(kCharacterTableF).characterPosition.location = 1;
getCharacter(kCharacterTableF).characterPosition.car = kCarRestaurant;
- _engine->getLogicManager()->startCycOtis(kCharacterTableF, "024D");
+ startCycOtis(kCharacterTableF, "024D");
break;
case 103798704:
if (msg->param.stringParam) {
- _engine->getLogicManager()->startCycOtis(kCharacterTableF, msg->param.stringParam);
+ startCycOtis(kCharacterTableF, msg->param.stringParam);
} else {
- _engine->getLogicManager()->startCycOtis(kCharacterTableF, "024D");
+ startCycOtis(kCharacterTableF, "024D");
}
break;
case 136455232:
- _engine->getLogicManager()->startCycOtis(kCharacterTableF, "BLANK");
+ startCycOtis(kCharacterTableF, "BLANK");
break;
default:
break;
diff --git a/engines/lastexpress/characters/tatiana.cpp b/engines/lastexpress/characters/tatiana.cpp
index 9c69c10b0f0..6cf89b9e72d 100644
--- a/engines/lastexpress/characters/tatiana.cpp
+++ b/engines/lastexpress/characters/tatiana.cpp
@@ -2670,7 +2670,7 @@ void LogicManager::HAND_Tatiana_SeekCath(HAND_PARAMS) {
case 18:
switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
case 1:
- setDoor(33, 0, 0, 10, 9);
+ setDoor(33, kCharacterCath, 0, 10, 9);
getCharacter(kCharacterTatiana).characterPosition.location = 0;
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 3, 7500, 0, 0);
Commit: 76075eda6c3d373ceb9f530543bf0038e22ce80b
https://github.com/scummvm/scummvm/commit/76075eda6c3d373ceb9f530543bf0038e22ce80b
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Remove leftover warning message
Changed paths:
engines/lastexpress/lastexpress.cpp
diff --git a/engines/lastexpress/lastexpress.cpp b/engines/lastexpress/lastexpress.cpp
index 67075388275..329476af72b 100644
--- a/engines/lastexpress/lastexpress.cpp
+++ b/engines/lastexpress/lastexpress.cpp
@@ -360,7 +360,6 @@ void LastExpressEngine::engineEventHandler(Event *event) {
case 1:
//++g_numClicks;
getNISManager()->abortNIS();
- warning("abortFight() missing from engineEventHandler");
abortFight();
abortCredits();
if (shouldQuit()) {
Commit: 512b746e71d8b8bb251cc669bcadb6996996c874
https://github.com/scummvm/scummvm/commit/512b746e71d8b8bb251cc669bcadb6996996c874
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix non-virtual dtor warning
Changed paths:
engines/lastexpress/data/archive.h
diff --git a/engines/lastexpress/data/archive.h b/engines/lastexpress/data/archive.h
index 91c8902c962..4453c57456c 100644
--- a/engines/lastexpress/data/archive.h
+++ b/engines/lastexpress/data/archive.h
@@ -77,7 +77,7 @@ enum HPFFlags {
class ArchiveManager {
public:
ArchiveManager(LastExpressEngine *engine);
- ~ArchiveManager();
+ virtual ~ArchiveManager();
HPF *search(const char *name, HPF *archive, int archiveSize);
virtual bool lockCD(int32 index);
Commit: ec7d62296cb60c9e7a3d7c4036e19e044578f995
https://github.com/scummvm/scummvm/commit/ec7d62296cb60c9e7a3d7c4036e19e044578f995
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix some trivial warnings
Changed paths:
engines/lastexpress/data/archive.cpp
engines/lastexpress/debug.cpp
engines/lastexpress/fight/opponent_ivo.cpp
engines/lastexpress/game/credits.cpp
engines/lastexpress/game/savegame.cpp
engines/lastexpress/lastexpress.cpp
engines/lastexpress/menu/menu.h
engines/lastexpress/sound/driver.cpp
engines/lastexpress/sound/sound.cpp
engines/lastexpress/sound/subtitle.cpp
diff --git a/engines/lastexpress/data/archive.cpp b/engines/lastexpress/data/archive.cpp
index f45f6831bb1..b33f5b16a4a 100644
--- a/engines/lastexpress/data/archive.cpp
+++ b/engines/lastexpress/data/archive.cpp
@@ -81,7 +81,7 @@ bool ArchiveManager::lockCD(int32 index) {
}
bool ArchiveManager::isCDAvailable(int cdNum, char *outPath, int pathSize) {
- Common::sprintf_s(outPath, pathSize, "CD%ld.hpf", cdNum);
+ Common::sprintf_s(outPath, pathSize, "CD%d.hpf", cdNum);
return true;
}
diff --git a/engines/lastexpress/debug.cpp b/engines/lastexpress/debug.cpp
index b8b10e996f0..1da22819802 100644
--- a/engines/lastexpress/debug.cpp
+++ b/engines/lastexpress/debug.cpp
@@ -253,7 +253,6 @@ void Clock::showCurrentTime() {
ImDrawList *drawList = ImGui::GetWindowDrawList();
ImVec2 windowPos = ImGui::GetWindowPos();
- ImVec2 windowSize = ImGui::GetContentRegionAvail();
ImVec2 windowCenter = ImVec2(
windowPos.x + ImGui::GetWindowSize().x / 2,
windowPos.y + ImGui::GetWindowSize().y / 2
@@ -919,7 +918,6 @@ void LogicManager::showTrainMapWindow() {
// Label...
const char *voidLabel = "THE VOID (id: 0)";
- ImVec2 textSize = ImGui::CalcTextSize(voidLabel);
drawList->AddText(
ImVec2(voidMin.x + 10, voidMin.y + 5),
IM_COL32(255, 255, 255, 255),
diff --git a/engines/lastexpress/fight/opponent_ivo.cpp b/engines/lastexpress/fight/opponent_ivo.cpp
index 90fd397cceb..a6080b4eb5d 100644
--- a/engines/lastexpress/fight/opponent_ivo.cpp
+++ b/engines/lastexpress/fight/opponent_ivo.cpp
@@ -95,7 +95,7 @@ void COpponent3::send(int action) {
switch (action) {
case 3:
- if (_currentActionIdx != 3 && _currentActionIdx != 1 || (_currentSprite->flags & 4) != 0) {
+ if ((_currentActionIdx != 3 && _currentActionIdx != 1) || (_currentSprite->flags & 4) != 0) {
doAction(6, 1);
_opponent->doAction(6, 1);
_opponent->send(103);
@@ -103,7 +103,7 @@ void COpponent3::send(int action) {
break;
case 4:
- if (_currentActionIdx != 3 && _currentActionIdx != 2 || (_currentSprite->flags & 4) != 0) {
+ if ((_currentActionIdx != 3 && _currentActionIdx != 2) || (_currentSprite->flags & 4) != 0) {
doAction(6, 1);
_opponent->doAction(5, 1);
_opponent->send(103);
diff --git a/engines/lastexpress/game/credits.cpp b/engines/lastexpress/game/credits.cpp
index 97fb1e23a55..eb32719433e 100644
--- a/engines/lastexpress/game/credits.cpp
+++ b/engines/lastexpress/game/credits.cpp
@@ -57,7 +57,7 @@ void LastExpressEngine::doCredits() {
char currentTgaFilename[24];
memset(currentTgaFilename, 0, sizeof(currentTgaFilename));
- Common::sprintf_s(currentTgaFilename, "map%05ld.tga", i + 1);
+ Common::sprintf_s(currentTgaFilename, "map%05d.tga", i + 1);
readTGAIntoMemory(currentTgaFilename, &mapTgas[i]);
handleEvents();
diff --git a/engines/lastexpress/game/savegame.cpp b/engines/lastexpress/game/savegame.cpp
index 6f2404a4a81..0af60bc46c5 100644
--- a/engines/lastexpress/game/savegame.cpp
+++ b/engines/lastexpress/game/savegame.cpp
@@ -424,7 +424,7 @@ void SaveManager::validateSaveFile(bool flag) {
int fileSize = saveFile->tell();
saveFile->seek(0, SEEK_SET);
- if (fileSize >= sizeof(SVCRFileHeader)) {
+ if (fileSize >= (int32)sizeof(SVCRFileHeader)) {
saveFile->read(&fileHeader, sizeof(SVCRFileHeader), 1, false, true);
if (checkFileHeader(&fileHeader)) {
if (flag) {
@@ -445,7 +445,7 @@ void SaveManager::validateSaveFile(bool flag) {
_engine->_savePointHeaders->partNumber = _engine->isDemo() ? 3 : 1;
}
- for (int i = 0; fileSize >= sizeof(SVCRFileHeader) && i < fileHeader.numVCRGames; ++i) {
+ for (int i = 0; fileSize >= (int32)sizeof(SVCRFileHeader) && i < fileHeader.numVCRGames; ++i) {
_engine->getSoundManager()->soundThread();
saveFile->read(&savePointHeader, sizeof(SVCRSavePointHeader), 1, false, true);
@@ -487,7 +487,7 @@ void SaveManager::validateSaveFile(bool flag) {
fileSize = saveFile->tell();
saveFile->seek(0, SEEK_SET);
- if (fileSize < sizeof(SVCRFileHeader)) {
+ if (fileSize < (int32)sizeof(SVCRFileHeader)) {
if (fileSize) {
error("Attempting to salvage corrupt save game file \"%s\"", _engine->_savegameFilename);
}
@@ -541,7 +541,7 @@ void SaveManager::validateSaveFile(bool flag) {
int numSavePoints = 0;
for (int j = 0; true; j++) {
- if (fileSize < sizeof(SVCRFileHeader) || j >= fileHeader.numVCRGames) {
+ if (fileSize < (int32)sizeof(SVCRFileHeader) || j >= fileHeader.numVCRGames) {
saveFile->close();
fileHeader.numVCRGames = numSavePoints;
tempFile->open("temp.egg", CVCRMODE_RWB);
@@ -617,8 +617,8 @@ void SaveManager::validateSaveFile(bool flag) {
bool SaveManager::checkFileHeader(SVCRFileHeader *fileHeader) {
if (fileHeader->magicNumber == 0x12001200 &&
fileHeader->numVCRGames >= 0 &&
- fileHeader->nextWritePos >= sizeof(SVCRFileHeader) &&
- fileHeader->realWritePos >= sizeof(SVCRFileHeader) &&
+ fileHeader->nextWritePos >= (int32)sizeof(SVCRFileHeader) &&
+ fileHeader->realWritePos >= (int32)sizeof(SVCRFileHeader) &&
fileHeader->lastIsTemporary < 2 &&
fileHeader->brightness <= 6 &&
fileHeader->volume < 8) {
@@ -636,7 +636,7 @@ bool SaveManager::checkFileHeader(SVCRFileHeader *fileHeader) {
}
bool SaveManager::checkSavePointHeader(SVCRSavePointHeader *savePointHeader) {
- if (savePointHeader->magicNumber == 0xE660E660) {
+ if ((uint32)savePointHeader->magicNumber == 0xE660E660) {
if (savePointHeader->type > 0 && savePointHeader->type <= 5) {
if (savePointHeader->time >= 1061100 && savePointHeader->time <= 4941000) {
if (savePointHeader->size > 0 && (savePointHeader->size & 0xF) == 0 && savePointHeader->partNumber > 0)
diff --git a/engines/lastexpress/lastexpress.cpp b/engines/lastexpress/lastexpress.cpp
index 329476af72b..2340cebb1d2 100644
--- a/engines/lastexpress/lastexpress.cpp
+++ b/engines/lastexpress/lastexpress.cpp
@@ -369,7 +369,7 @@ void LastExpressEngine::engineEventHandler(Event *event) {
// AfxEndThread(0, 1);
}
- if (getMenu()->isShowingMenu() || getMessageManager()->getEventHandle(1) == &LastExpressEngine::nodeStepMouseWrapper && !getVCR()->isVirgin(_currentGameFileColorId)) {
+ if (getMenu()->isShowingMenu() || (getMessageManager()->getEventHandle(1) == &LastExpressEngine::nodeStepMouseWrapper && !getVCR()->isVirgin(_currentGameFileColorId))) {
getMenu()->doEgg(1, 0, 0);
quitGame();
} else {
diff --git a/engines/lastexpress/menu/menu.h b/engines/lastexpress/menu/menu.h
index 7ba9b17dd89..eb23ffd4e08 100644
--- a/engines/lastexpress/menu/menu.h
+++ b/engines/lastexpress/menu/menu.h
@@ -88,7 +88,7 @@ protected:
nullptr
};
- const char _eggButtonsSeqNames[8][13] = {
+ char _eggButtonsSeqNames[8][13] = {
"helpnewr.seq",
"buttns.seq",
"quit.seq",
diff --git a/engines/lastexpress/sound/driver.cpp b/engines/lastexpress/sound/driver.cpp
index 88883180580..2017a8281fc 100644
--- a/engines/lastexpress/sound/driver.cpp
+++ b/engines/lastexpress/sound/driver.cpp
@@ -39,9 +39,6 @@ void SoundManager::soundDriverInit() {
void SoundManager::soundDriverCopyBuffersToDevice() {
_sound30HzCounter++;
- if (_stream->numQueuedStreams() < 0 && _soundCacheCount > 0)
- warning("Buffer underrun");
-
while (_stream->numQueuedStreams() < 4) {
byte *ptr = (byte *)malloc(1470 * sizeof(int16));
assert(ptr);
@@ -78,7 +75,7 @@ int SoundManager::soundDriverGetVolume() {
dsVolume = (2000 * log10((double)scummVMVolume / 255.0));
}
- // Convert DirectSound format to app format (0-7)
+ // Convert DirectSound scale to game scale (0-7)
int engineVolume;
if (dsVolume <= -3000) {
engineVolume = 0;
diff --git a/engines/lastexpress/sound/sound.cpp b/engines/lastexpress/sound/sound.cpp
index b1bbbac455e..120b033f21d 100644
--- a/engines/lastexpress/sound/sound.cpp
+++ b/engines/lastexpress/sound/sound.cpp
@@ -374,7 +374,7 @@ void SoundManager::soundThread() {
ambientSlot2 = ambientSlot2->getNext();
} while (ambientSlot2);
- if (!ambientSlot2 || _scanAnySoundLoopingSection || ambientSlot1 && ambientSlot1->getTime() > _loopingSoundDuration)
+ if (!ambientSlot2 || _scanAnySoundLoopingSection || (ambientSlot1 && ambientSlot1->getTime() > _loopingSoundDuration))
loopedPlaying = true;
}
diff --git a/engines/lastexpress/sound/subtitle.cpp b/engines/lastexpress/sound/subtitle.cpp
index 71cedfb4080..b61902f376b 100644
--- a/engines/lastexpress/sound/subtitle.cpp
+++ b/engines/lastexpress/sound/subtitle.cpp
@@ -354,7 +354,7 @@ void SubtitleManager::subThread() {
(slot->getStatusFlags() & kSoundFlagMute) != 0 ||
!slot->getTime() ||
((slot->getStatusFlags() & kSoundVolumeMask) < kVolume6) ||
- (_engine->getNISManager()->getNISFlag() & kNisFlagSoundFade) != 0 && slot->getPriority() < 90) {
+ ((_engine->getNISManager()->getNISFlag() & kNisFlagSoundFade) != 0 && slot->getPriority() < 90)) {
curPriority = 0;
} else {
Commit: cf38031f569c4e560ee967332688098a7f89582f
https://github.com/scummvm/scummvm/commit/cf38031f569c4e560ee967332688098a7f89582f
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix some more trivial warnings
Changed paths:
engines/lastexpress/characters/abbot.cpp
engines/lastexpress/characters/cond1.cpp
engines/lastexpress/characters/kahina.cpp
engines/lastexpress/characters/milos.cpp
engines/lastexpress/game/beetle.cpp
engines/lastexpress/game/navigation.cpp
diff --git a/engines/lastexpress/characters/abbot.cpp b/engines/lastexpress/characters/abbot.cpp
index 5bc150dd99f..9008e85f96a 100644
--- a/engines/lastexpress/characters/abbot.cpp
+++ b/engines/lastexpress/characters/abbot.cpp
@@ -2380,6 +2380,7 @@ void LogicManager::HAND_Abbot_CatchCath(HAND_PARAMS) {
}
send(kCharacterAbbot, kCharacterAbbot, 157489665, 0);
+ break;
case 8:
if (!cathRunningDialog("LIB012"))
playDialog(0, "LIB012", -1, 0);
diff --git a/engines/lastexpress/characters/cond1.cpp b/engines/lastexpress/characters/cond1.cpp
index 30b0beed67d..1c22a696003 100644
--- a/engines/lastexpress/characters/cond1.cpp
+++ b/engines/lastexpress/characters/cond1.cpp
@@ -3987,9 +3987,9 @@ void LogicManager::HAND_Cond1_Sitting(HAND_PARAMS) {
Cond1Call(&LogicManager::CONS_Cond1_Listen, 9, 0, 0, 0);
break;
}
-
- // fall through
}
+
+ // fall through
case 9:
if (_globals[kProgressField14] != 29) {
if (getCharacterParams(kCharacterCond1, 8)[13]) {
diff --git a/engines/lastexpress/characters/kahina.cpp b/engines/lastexpress/characters/kahina.cpp
index 60404cd7b40..98729771260 100644
--- a/engines/lastexpress/characters/kahina.cpp
+++ b/engines/lastexpress/characters/kahina.cpp
@@ -1023,6 +1023,7 @@ void LogicManager::HAND_Kahina_StartPart3(HAND_PARAMS) {
switch (msg->action) {
case 0:
CONS_Kahina_BeforeConcert(0, 0, 0, 0);
+ break;
case 12:
endGraphics(kCharacterKahina);
getCharacter(kCharacterKahina).characterPosition.car = kCarKronos;
diff --git a/engines/lastexpress/characters/milos.cpp b/engines/lastexpress/characters/milos.cpp
index 69f2775b6de..07fb190c88d 100644
--- a/engines/lastexpress/characters/milos.cpp
+++ b/engines/lastexpress/characters/milos.cpp
@@ -2168,6 +2168,7 @@ void LogicManager::HAND_Milos_StartPart5(HAND_PARAMS) {
switch (msg->action) {
case 0:
CONS_Milos_RunningTrain(0, 0, 0, 0);
+ break;
case 12:
endGraphics(kCharacterMilos);
getCharacter(kCharacterMilos).characterPosition.location = 1;
diff --git a/engines/lastexpress/game/beetle.cpp b/engines/lastexpress/game/beetle.cpp
index cd9f142233f..9ff0a52ddf4 100644
--- a/engines/lastexpress/game/beetle.cpp
+++ b/engines/lastexpress/game/beetle.cpp
@@ -142,7 +142,6 @@ void CBeetle::tick() {
_currentFrame += 10;
}
- bool sequenceEnded = false;
bool terminate = false;
if (_currentSequence->numFrames <= _currentFrame) {
@@ -158,8 +157,6 @@ void CBeetle::tick() {
_currentSequence = nullptr;
terminate = true;
}
-
- sequenceEnded = true;
}
if (terminate) {
diff --git a/engines/lastexpress/game/navigation.cpp b/engines/lastexpress/game/navigation.cpp
index ea26cbe6ba9..db47d0b09c2 100644
--- a/engines/lastexpress/game/navigation.cpp
+++ b/engines/lastexpress/game/navigation.cpp
@@ -725,7 +725,6 @@ void LogicManager::checkInventory(int32 flags) {
if (_inventoryFlag2) {
if ((flags & 1) != 0) {
if (_highlightedItem) {
- bool found = false;
int count = 0;
for (int i = 1; i < 32; i++) {
@@ -733,7 +732,6 @@ void LogicManager::checkInventory(int32 flags) {
count++;
if (count == _highlightedItem) {
selectedItemIdx = i;
- found = 1;
break;
}
}
@@ -839,7 +837,6 @@ void LogicManager::checkInventory(int32 flags) {
if ((flags & 1) != 0) {
int itemToHighlight = _engine->_cursorY / 40;
if (_highlightedItem && itemToHighlight != _highlightedItem) {
- bool found = false;
int count = 0;
for (int i = 1; i < 32; i++) {
@@ -847,7 +844,6 @@ void LogicManager::checkInventory(int32 flags) {
count++;
if (count == _highlightedItem) {
selectedItemIdx = i;
- found = 1;
break;
}
}
@@ -861,7 +857,6 @@ void LogicManager::checkInventory(int32 flags) {
}
if (itemToHighlight && itemToHighlight <= _inventoryVerticalSlot && itemToHighlight != _highlightedItem) {
- bool found = false;
int count = 0;
for (int i = 1; i < 32; i++) {
@@ -869,7 +864,6 @@ void LogicManager::checkInventory(int32 flags) {
count++;
if (count == itemToHighlight) {
selectedItemIdx = i;
- found = 1;
break;
}
}
@@ -886,7 +880,6 @@ void LogicManager::checkInventory(int32 flags) {
}
if (_highlightedItem) {
- bool found = false;
int count = 0;
for (int i = 1; i < 32; i++) {
@@ -894,7 +887,6 @@ void LogicManager::checkInventory(int32 flags) {
count++;
if (count == _highlightedItem) {
selectedItemIdx = i;
- found = 1;
break;
}
}
@@ -1059,7 +1051,6 @@ void LogicManager::checkInventory(int32 flags) {
}
if (_highlightedItem) {
- bool found = false;
int count = 0;
for (int i = 1; i < 32; i++) {
@@ -1067,7 +1058,6 @@ void LogicManager::checkInventory(int32 flags) {
count++;
if (count == _highlightedItem) {
selectedItemIdx = i;
- found = true;
break;
}
}
Commit: 208a61abedf3109a0fc0d8b38ab7fa8f0847b693
https://github.com/scummvm/scummvm/commit/208a61abedf3109a0fc0d8b38ab7fa8f0847b693
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix Alexei parentheses warnings
Changed paths:
engines/lastexpress/characters/alexei.cpp
diff --git a/engines/lastexpress/characters/alexei.cpp b/engines/lastexpress/characters/alexei.cpp
index f613d7229bf..37a62776b56 100644
--- a/engines/lastexpress/characters/alexei.cpp
+++ b/engines/lastexpress/characters/alexei.cpp
@@ -380,7 +380,7 @@ void LogicManager::HAND_Alexei_DoWalk(HAND_PARAMS) {
break;
}
- if (_doneNIS[kEventAlexeiSalonVassili] || _doneNIS[kEventTatianaAskMatchSpeakRussian] && cathHasItem(kItemPassengerList)) {
+ if (_doneNIS[kEventAlexeiSalonVassili] || (_doneNIS[kEventTatianaAskMatchSpeakRussian] && cathHasItem(kItemPassengerList))) {
if (rnd(2) == 0) {
playDialog(kCharacterCath, "CAT1012A", -1, 0);
} else {
@@ -550,7 +550,7 @@ void LogicManager::CONS_Alexei_PacingAtWindow(CONS_PARAMS) {
void LogicManager::HAND_Alexei_PacingAtWindow(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (!getCharacterCurrentParams(kCharacterAlexei)[1] && (getCharacterCurrentParams(kCharacterAlexei)[1] = _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0], _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0] == 0) ||
+ if ((!getCharacterCurrentParams(kCharacterAlexei)[1] && (getCharacterCurrentParams(kCharacterAlexei)[1] = _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0], _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0] == 0)) ||
getCharacterCurrentParams(kCharacterAlexei)[1] < _gameTime) {
if (rcClear()) {
getCharacter(kCharacterAlexei).characterPosition.location = 0;
@@ -1007,7 +1007,7 @@ void LogicManager::CONS_Alexei_Sitting(CONS_PARAMS) {
void LogicManager::HAND_Alexei_Sitting(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (!getCharacterCurrentParams(kCharacterAlexei)[1] && (getCharacterCurrentParams(kCharacterAlexei)[1] = _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0], _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0] == 0) || getCharacterCurrentParams(kCharacterAlexei)[1] < _gameTime) {
+ if ((!getCharacterCurrentParams(kCharacterAlexei)[1] && (getCharacterCurrentParams(kCharacterAlexei)[1] = _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0], _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0] == 0)) || getCharacterCurrentParams(kCharacterAlexei)[1] < _gameTime) {
if (rcClear()) {
getCharacter(kCharacterAlexei).characterPosition.location = 0;
getCharacter(kCharacterAlexei).inventoryItem = 0;
@@ -1073,7 +1073,7 @@ void LogicManager::CONS_Alexei_StandingAtWindow(CONS_PARAMS) {
void LogicManager::HAND_Alexei_StandingAtWindow(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (!getCharacterCurrentParams(kCharacterAlexei)[1] && (getCharacterCurrentParams(kCharacterAlexei)[1] = _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0], _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0] == 0) ||
+ if ((!getCharacterCurrentParams(kCharacterAlexei)[1] && (getCharacterCurrentParams(kCharacterAlexei)[1] = _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0], _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0] == 0)) ||
getCharacterCurrentParams(kCharacterAlexei)[1] < _gameTime) {
if (rcClear()) {
getCharacter(kCharacterAlexei).characterPosition.location = 0;
@@ -1092,7 +1092,7 @@ void LogicManager::HAND_Alexei_StandingAtWindow(HAND_PARAMS) {
break;
}
- if ((inSalon(kCharacterCath) || inDiningRoom(kCharacterCath)) && getCharacterCurrentParams(kCharacterAlexei)[2] || (getCharacterCurrentParams(kCharacterAlexei)[2] = _gameTime, _gameTime)) {
+ if (((inSalon(kCharacterCath) || inDiningRoom(kCharacterCath)) && getCharacterCurrentParams(kCharacterAlexei)[2]) || (getCharacterCurrentParams(kCharacterAlexei)[2] = _gameTime, _gameTime)) {
if (getCharacterCurrentParams(kCharacterAlexei)[2] >= _gameTime)
break;
@@ -1702,7 +1702,7 @@ void LogicManager::HAND_Alexei_Pacing3(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (inSalon(kCharacterCath)) {
- if (!getCharacterCurrentParams(kCharacterAlexei)[1] && (getCharacterCurrentParams(kCharacterAlexei)[1] = _gameTime + 2700, _gameTime == -2700) || getCharacterCurrentParams(kCharacterAlexei)[1] < _gameTime) {
+ if ((!getCharacterCurrentParams(kCharacterAlexei)[1] && (getCharacterCurrentParams(kCharacterAlexei)[1] = _gameTime + 2700, _gameTime == -2700)) || getCharacterCurrentParams(kCharacterAlexei)[1] < _gameTime) {
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
AlexeiCall(&LogicManager::CONS_Alexei_WaitRCClear, 0, 0, 0, 0);
break;
@@ -1710,7 +1710,7 @@ void LogicManager::HAND_Alexei_Pacing3(HAND_PARAMS) {
} else {
getCharacterCurrentParams(kCharacterAlexei)[1] = 0;
}
- if (!getCharacterCurrentParams(kCharacterAlexei)[2] && (getCharacterCurrentParams(kCharacterAlexei)[2] = _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0], _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0] == 0) || getCharacterCurrentParams(kCharacterAlexei)[2] < _gameTime) {
+ if ((!getCharacterCurrentParams(kCharacterAlexei)[2] && (getCharacterCurrentParams(kCharacterAlexei)[2] = _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0], _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0] == 0)) || getCharacterCurrentParams(kCharacterAlexei)[2] < _gameTime) {
if (rcClear()) {
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 3;
AlexeiCall(&LogicManager::CONS_Alexei_PacingAtWindow, 0, 0, 0, 0);
@@ -2151,7 +2151,7 @@ void LogicManager::HAND_Alexei_Pacing(HAND_PARAMS) {
switch (msg->action) {
case 0:
if (_gameTime < 1806300) {
- if (!getCharacterCurrentParams(kCharacterAlexei)[1] && (getCharacterCurrentParams(kCharacterAlexei)[1] = _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0], _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0] == 0) || getCharacterCurrentParams(kCharacterAlexei)[1] < _gameTime) {
+ if ((!getCharacterCurrentParams(kCharacterAlexei)[1] && (getCharacterCurrentParams(kCharacterAlexei)[1] = _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0], _gameTime + getCharacterCurrentParams(kCharacterAlexei)[0] == 0)) || getCharacterCurrentParams(kCharacterAlexei)[1] < _gameTime) {
if (rcClear()) {
getCharacter(kCharacterAlexei).callbacks[getCharacter(kCharacterAlexei).currentCall + 8] = 1;
AlexeiCall(&LogicManager::CONS_Alexei_PacingAtWindow, 0, 0, 0, 0);
Commit: d42de93a679dbe4b4684056035cc6cfb56cfec31
https://github.com/scummvm/scummvm/commit/d42de93a679dbe4b4684056035cc6cfb56cfec31
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix Anna parentheses warnings
Changed paths:
engines/lastexpress/characters/anna.cpp
diff --git a/engines/lastexpress/characters/anna.cpp b/engines/lastexpress/characters/anna.cpp
index 6394ba4dbcc..9b1a210a75e 100644
--- a/engines/lastexpress/characters/anna.cpp
+++ b/engines/lastexpress/characters/anna.cpp
@@ -3605,7 +3605,7 @@ void LogicManager::HAND_Anna_AfterConcert(HAND_PARAMS) {
break;
}
- if (!getCharacterCurrentParams(kCharacterAnna)[2] || !cathInCorridor(kCarRedSleeping) && !inSalon(kCharacterCath) && !inDiningRoom(kCharacterCath) || !getCharacterCurrentParams(kCharacterAnna)[3]) {
+ if (!getCharacterCurrentParams(kCharacterAnna)[2] || (!cathInCorridor(kCarRedSleeping) && !inSalon(kCharacterCath) && !inDiningRoom(kCharacterCath)) || !getCharacterCurrentParams(kCharacterAnna)[3]) {
getCharacterCurrentParams(kCharacterAnna)[3] = _gameTime;
if (!getCharacterCurrentParams(kCharacterAnna)[3]) {
CONS_Anna_GoBagg(0, 0, 0, 0);
@@ -4483,7 +4483,7 @@ void LogicManager::HAND_Anna_LetDownHair(HAND_PARAMS) {
if (getCharacterCurrentParams(kCharacterAnna)[2] != 0x7FFFFFFF && getCharacterCurrentParams(kCharacterAnna)[0] < _gameTime) {
if (getCharacterCurrentParams(kCharacterAnna)[1] < _gameTime) {
getCharacterCurrentParams(kCharacterAnna)[2] = 0x7FFFFFFF;
- } else if ((cathInCorridor(kCarGreenSleeping) || cathInCorridor(kCarRedSleeping)) && getCharacterCurrentParams(kCharacterAnna)[2] || (getCharacterCurrentParams(kCharacterAnna)[2] = _gameTime, _gameTime != 0)) {
+ } else if (((cathInCorridor(kCarGreenSleeping) || cathInCorridor(kCarRedSleeping)) && getCharacterCurrentParams(kCharacterAnna)[2]) || (getCharacterCurrentParams(kCharacterAnna)[2] = _gameTime, _gameTime != 0)) {
if (getCharacterCurrentParams(kCharacterAnna)[2] >= _gameTime)
break;
Commit: dc3d3a7a802bc8ee51794042f5bc84976e4e4de9
https://github.com/scummvm/scummvm/commit/dc3d3a7a802bc8ee51794042f5bc84976e4e4de9
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix August parentheses warnings
Changed paths:
engines/lastexpress/characters/august.cpp
diff --git a/engines/lastexpress/characters/august.cpp b/engines/lastexpress/characters/august.cpp
index cd689f377db..a6058aeb6c8 100644
--- a/engines/lastexpress/characters/august.cpp
+++ b/engines/lastexpress/characters/august.cpp
@@ -1294,8 +1294,8 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
}
if (!getCharacterCurrentParams(kCharacterAugust)[1]) {
- if (!getCharacterCurrentParams(kCharacterAugust)[10] &&
- (getCharacterCurrentParams(kCharacterAugust)[10] = _realTime + 75, _realTime == -75) ||
+ if ((!getCharacterCurrentParams(kCharacterAugust)[10] &&
+ (getCharacterCurrentParams(kCharacterAugust)[10] = _realTime + 75, _realTime == -75)) ||
getCharacterCurrentParams(kCharacterAugust)[10] < _realTime) {
if (!getCharacterCurrentParams(kCharacterAugust)[4]) {
getCharacter(kCharacterAugust).callbacks[getCharacter(kCharacterAugust).currentCall + 8] = 8;
@@ -1354,7 +1354,7 @@ void LogicManager::HAND_August_KnockTyler(HAND_PARAMS) {
break;
}
- if (!getCharacterCurrentParams(kCharacterAugust)[8] && (getCharacterCurrentParams(kCharacterAugust)[8] = _realTime + 45, _realTime == -45) || getCharacterCurrentParams(kCharacterAugust)[8] < _realTime) {
+ if ((!getCharacterCurrentParams(kCharacterAugust)[8] && (getCharacterCurrentParams(kCharacterAugust)[8] = _realTime + 45, _realTime == -45)) || getCharacterCurrentParams(kCharacterAugust)[8] < _realTime) {
if (checkDoor(1) == 1) {
if (getCharacterCurrentParams(kCharacterAugust)[9] || (getCharacterCurrentParams(kCharacterAugust)[9] = _realTime + 75, _realTime != -75)) {
if (getCharacterCurrentParams(kCharacterAugust)[9] >= _realTime)
@@ -4108,7 +4108,7 @@ void LogicManager::CONS_August_Drunk(CONS_PARAMS) {
void LogicManager::HAND_August_Drunk(HAND_PARAMS) {
switch (msg->action) {
case 0:
- if (!getCharacterCurrentParams(kCharacterAugust)[0] && (getCharacterCurrentParams(kCharacterAugust)[0] = _gameTime + 1800, _gameTime == -1800) || getCharacterCurrentParams(kCharacterAugust)[0] < _gameTime) {
+ if ((!getCharacterCurrentParams(kCharacterAugust)[0] && (getCharacterCurrentParams(kCharacterAugust)[0] = _gameTime + 1800, _gameTime == -1800)) || getCharacterCurrentParams(kCharacterAugust)[0] < _gameTime) {
if (_gameTime > 2430000) {
if (rcClear()) {
getCharacter(kCharacterAugust).characterPosition.location = 0;
Commit: 376bac3a151b8741f770c2ca4d65f2defa2a14fa
https://github.com/scummvm/scummvm/commit/376bac3a151b8741f770c2ca4d65f2defa2a14fa
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix Clerk parentheses warnings
Changed paths:
engines/lastexpress/characters/clerk.cpp
diff --git a/engines/lastexpress/characters/clerk.cpp b/engines/lastexpress/characters/clerk.cpp
index 936b25abcc9..b1865ea6d3f 100644
--- a/engines/lastexpress/characters/clerk.cpp
+++ b/engines/lastexpress/characters/clerk.cpp
@@ -512,8 +512,8 @@ void LogicManager::HAND_Clerk_Processing(HAND_PARAMS) {
endDialog("ZFX1001");
}
- if ((getCharacterCurrentParams(kCharacterClerk)[2] && (getCharacter(kCharacterCath).characterPosition.car != getCharacterCurrentParams(kCharacterClerk)[0]) ||
- (isNight() != (getCharacterCurrentParams(kCharacterClerk)[1] != 0 ? true : false)))) {
+ if ((getCharacterCurrentParams(kCharacterClerk)[2] && (getCharacter(kCharacterCath).characterPosition.car != getCharacterCurrentParams(kCharacterClerk)[0])) ||
+ (isNight() != (getCharacterCurrentParams(kCharacterClerk)[1] != 0 ? true : false))) {
switch (getCharacter(kCharacterCath).characterPosition.car) {
case 1:
Commit: 74d546a7e1ae5c46f72e16a2ed5355fe9895e78f
https://github.com/scummvm/scummvm/commit/74d546a7e1ae5c46f72e16a2ed5355fe9895e78f
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix Cond1 parentheses warnings
Changed paths:
engines/lastexpress/characters/cond1.cpp
diff --git a/engines/lastexpress/characters/cond1.cpp b/engines/lastexpress/characters/cond1.cpp
index 1c22a696003..79004412700 100644
--- a/engines/lastexpress/characters/cond1.cpp
+++ b/engines/lastexpress/characters/cond1.cpp
@@ -548,7 +548,7 @@ void LogicManager::HAND_Cond1_DoWalk(HAND_PARAMS) {
playChrExcuseMe(kCharacterCond1, kCharacterCath, 0);
break;
case 12:
- if (!_globals[kProgressEventFoundCorpse] && !_doneNIS[kEventMertensAskTylerCompartment] && !_doneNIS[kEventMertensAskTylerCompartmentD] || getCharacterParams(kCharacterCond1, 8)[3] && _globals[kProgressJacket] == 2 && !_doneNIS[kEventMertensDontMakeBed] && !_globals[kProgressEventCorpseThrown]) {
+ if ((!_globals[kProgressEventFoundCorpse] && !_doneNIS[kEventMertensAskTylerCompartment] && !_doneNIS[kEventMertensAskTylerCompartmentD]) || (getCharacterParams(kCharacterCond1, 8)[3] && _globals[kProgressJacket] == 2 && !_doneNIS[kEventMertensDontMakeBed] && !_globals[kProgressEventCorpseThrown])) {
getCharacterCurrentParams(kCharacterCond1)[2] = 1;
}
@@ -871,7 +871,7 @@ void LogicManager::HAND_Cond1_Passing(HAND_PARAMS) {
break;
}
- if (_globals[kProgressChapter] == 3 && !getCharacterCurrentParams(kCharacterCond1)[0] && _gameTime < 2173500 && (_gameTime > 2106000 || getCharacterCurrentParams(kCharacterCond1)[1] && _gameTime > 2079000)) {
+ if (_globals[kProgressChapter] == 3 && !getCharacterCurrentParams(kCharacterCond1)[0] && _gameTime < 2173500 && (_gameTime > 2106000 || (getCharacterCurrentParams(kCharacterCond1)[1] && _gameTime > 2079000))) {
if (getCharacterCurrentParams(kCharacterCond1)[1] == 2) {
playDialog(kCharacterCond1, "CON3052", -1, 0);
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 3;
@@ -3723,8 +3723,8 @@ void LogicManager::HAND_Cond1_Sitting(HAND_PARAMS) {
break;
}
- if (!cathInCorridor(kCarGreenSleeping) &&
- !cathInCorridor(kCarRedSleeping) ||
+ if ((!cathInCorridor(kCarGreenSleeping) &&
+ !cathInCorridor(kCarRedSleeping)) ||
dialogRunning("REB1205") ||
!inComp(kCharacterMadame, kCarRedSleeping, 5790) ||
!getCharacterCurrentParams(kCharacterCond1)[3]) {
@@ -3882,7 +3882,7 @@ void LogicManager::HAND_Cond1_Sitting(HAND_PARAMS) {
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 1;
Cond1Call(&LogicManager::CONS_Cond1_SaveGame, 2, kEventMertensKronosInvitation, 0, 0);
} else if (!checkCathDir(kCarGreenSleeping, 23) || _globals[kProgressEventMertensChronosInvitation] || _doneNIS[kEventMertensLastCar] || _doneNIS[kEventMertensLastCarOriginalJacket]) {
- if (!checkCathDir(kCarGreenSleeping, 1) && !checkCathDir(kCarGreenSleeping, 23) || getCharacterParams(kCharacterCond1, 8)[0] || getCharacterParams(kCharacterCond1, 8)[16]) {
+ if ((!checkCathDir(kCarGreenSleeping, 1) && !checkCathDir(kCarGreenSleeping, 23)) || getCharacterParams(kCharacterCond1, 8)[0] || getCharacterParams(kCharacterCond1, 8)[16]) {
if (cathInCorridor(kCarGreenSleeping) && getCharacter(kCharacterCond1).characterPosition.position < getCharacter(kCharacterCath).characterPosition.position && (_globals[1] == 1 || getCharacterParams(kCharacterCond1, 8)[6])) {
getCharacter(kCharacterCond1).inventoryItem = kItemNone;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
@@ -3922,7 +3922,7 @@ void LogicManager::HAND_Cond1_Sitting(HAND_PARAMS) {
case 2:
case 4:
startCycOtis(kCharacterCond1, "601B");
- if (!checkCathDir(kCarGreenSleeping, 1) && !checkCathDir(kCarGreenSleeping, 23) || getCharacterParams(kCharacterCond1, 8)[0] || getCharacterParams(kCharacterCond1, 8)[16]) {
+ if ((!checkCathDir(kCarGreenSleeping, 1) && !checkCathDir(kCarGreenSleeping, 23)) || getCharacterParams(kCharacterCond1, 8)[0] || getCharacterParams(kCharacterCond1, 8)[16]) {
if (cathInCorridor(kCarGreenSleeping) && getCharacter(kCharacterCond1).characterPosition.position < getCharacter(kCharacterCath).characterPosition.position && (_globals[1] == 1 || getCharacterParams(kCharacterCond1, 8)[6])) {
getCharacter(kCharacterCond1).inventoryItem = kItemNone;
getCharacter(kCharacterCond1).callbacks[getCharacter(kCharacterCond1).currentCall + 8] = 7;
Commit: bf9fc68b5c4ff53925917cdb814bd3a1e83f7f98
https://github.com/scummvm/scummvm/commit/bf9fc68b5c4ff53925917cdb814bd3a1e83f7f98
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix Cond2 parentheses warnings
Changed paths:
engines/lastexpress/characters/cond2.cpp
diff --git a/engines/lastexpress/characters/cond2.cpp b/engines/lastexpress/characters/cond2.cpp
index 125e6b5ea59..a6bb5db9fbe 100644
--- a/engines/lastexpress/characters/cond2.cpp
+++ b/engines/lastexpress/characters/cond2.cpp
@@ -2111,8 +2111,8 @@ void LogicManager::HAND_Cond2_CathBuzzing(HAND_PARAMS) {
break;
case 2:
if (inSuite(kCharacterCath, kCarRedSleeping, getCharacterCurrentParams(kCharacterCond2)[2]) ||
- (getCharacterCurrentParams(kCharacterCond2)[0] == 36 || getCharacterCurrentParams(kCharacterCond2)[0] == 37) &&
- cathOutRebeccaWindow()) {
+ ((getCharacterCurrentParams(kCharacterCond2)[0] == 36 || getCharacterCurrentParams(kCharacterCond2)[0] == 37) &&
+ cathOutRebeccaWindow())) {
setDoor(getCharacterCurrentParams(kCharacterCond2)[0], 0, checkDoor(getCharacterCurrentParams(kCharacterCond2)[0]), 0, 0);
getCharacterCurrentParams(kCharacterCond2)[4] = 1;
}
Commit: 27d7be2ff193ac3319ba90b3d00d17b290b28566
https://github.com/scummvm/scummvm/commit/27d7be2ff193ac3319ba90b3d00d17b290b28566
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix Kahina parentheses warnings
Changed paths:
engines/lastexpress/characters/kahina.cpp
diff --git a/engines/lastexpress/characters/kahina.cpp b/engines/lastexpress/characters/kahina.cpp
index 98729771260..167c118047f 100644
--- a/engines/lastexpress/characters/kahina.cpp
+++ b/engines/lastexpress/characters/kahina.cpp
@@ -1601,7 +1601,7 @@ void LogicManager::HAND_Kahina_Finished(HAND_PARAMS) {
getCharacter(kCharacterKahina).characterPosition.location = 0;
break;
case 17:
- if (getCharacter(kCharacterCath).characterPosition.car > kCarGreenSleeping || getCharacter(kCharacterCath).characterPosition.car == kCarGreenSleeping && getCharacter(kCharacterCath).characterPosition.position > 2740) {
+ if (getCharacter(kCharacterCath).characterPosition.car > kCarGreenSleeping || (getCharacter(kCharacterCath).characterPosition.car == kCarGreenSleeping && getCharacter(kCharacterCath).characterPosition.position > 2740)) {
getCharacterCurrentParams(kCharacterKahina)[0] = 1;
}
Commit: 87ca7f357f69dd81b19c39d90a928aa4661dfdb4
https://github.com/scummvm/scummvm/commit/87ca7f357f69dd81b19c39d90a928aa4661dfdb4
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix Mahmud parentheses warnings
Changed paths:
engines/lastexpress/characters/mahmud.cpp
diff --git a/engines/lastexpress/characters/mahmud.cpp b/engines/lastexpress/characters/mahmud.cpp
index 853db86124f..057cead31fe 100644
--- a/engines/lastexpress/characters/mahmud.cpp
+++ b/engines/lastexpress/characters/mahmud.cpp
@@ -407,7 +407,7 @@ void LogicManager::HAND_Mahmud_CathKnockingHarem(HAND_PARAMS) {
if (!whoRunningDialog(kCharacterMahmud)) {
if (getCharacter(kCharacterCath).characterPosition.position < 1500 ||
getCharacter(kCharacterCath).characterPosition.position >= 5790 ||
- getCharacter(kCharacterCath).characterPosition.position > 4455 && getCharacterCurrentParams(kCharacterMahmud)[4] != 5) {
+ (getCharacter(kCharacterCath).characterPosition.position > 4455 && getCharacterCurrentParams(kCharacterMahmud)[4] != 5)) {
setDoor(5, kCharacterClerk, 3, 10, 9);
setDoor(6, kCharacterClerk, 3, 10, 9);
setDoor(7, kCharacterClerk, 3, 10, 9);
Commit: 8172656789fc3159fa235c699a3ed09e521cd5e8
https://github.com/scummvm/scummvm/commit/8172656789fc3159fa235c699a3ed09e521cd5e8
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix Milos parentheses warnings
Changed paths:
engines/lastexpress/characters/milos.cpp
diff --git a/engines/lastexpress/characters/milos.cpp b/engines/lastexpress/characters/milos.cpp
index 07fb190c88d..bcc9da981d0 100644
--- a/engines/lastexpress/characters/milos.cpp
+++ b/engines/lastexpress/characters/milos.cpp
@@ -715,7 +715,7 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
fedEx(kCharacterMilos, kCharacterMilos, 18, 0);
}
} else if (getCharacterCurrentParams(kCharacterMilos)[0]) {
- if (!getCharacterCurrentParams(kCharacterMilos)[8] && (getCharacterCurrentParams(kCharacterMilos)[8] = _realTime + 45, _realTime == -45) || getCharacterCurrentParams(kCharacterMilos)[8] < _realTime) {
+ if ((!getCharacterCurrentParams(kCharacterMilos)[8] && (getCharacterCurrentParams(kCharacterMilos)[8] = _realTime + 45, _realTime == -45)) || getCharacterCurrentParams(kCharacterMilos)[8] < _realTime) {
if (checkDoor(1) == 1) {
if (getCharacterCurrentParams(kCharacterMilos)[9] || (getCharacterCurrentParams(kCharacterMilos)[9] = _realTime + 75, _realTime != -75)) {
if (getCharacterCurrentParams(kCharacterMilos)[9] >= _realTime)
@@ -773,7 +773,7 @@ void LogicManager::HAND_Milos_KnockTyler(HAND_PARAMS) {
MilosCall(&LogicManager::CONS_Milos_SaveGame, 2, kEventMilosTylerCompartmentVisit, 0, 0);
}
}
- } else if (!getCharacterCurrentParams(kCharacterMilos)[10] && (getCharacterCurrentParams(kCharacterMilos)[10] = _realTime + 75, _realTime == -75) || getCharacterCurrentParams(kCharacterMilos)[10] < _realTime) {
+ } else if ((!getCharacterCurrentParams(kCharacterMilos)[10] && (getCharacterCurrentParams(kCharacterMilos)[10] = _realTime + 75, _realTime == -75)) || getCharacterCurrentParams(kCharacterMilos)[10] < _realTime) {
if (!getCharacterCurrentParams(kCharacterMilos)[3]) {
getCharacter(kCharacterMilos).callbacks[getCharacter(kCharacterMilos).currentCall + 8] = 12;
MilosCall(&LogicManager::CONS_Milos_DoDialog, "MIL1030C", 0, 0, 0);
Commit: 4bd4e558644636d4fa3be6599e1f0eebc5181e87
https://github.com/scummvm/scummvm/commit/4bd4e558644636d4fa3be6599e1f0eebc5181e87
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix Police parentheses warnings
Changed paths:
engines/lastexpress/characters/police.cpp
diff --git a/engines/lastexpress/characters/police.cpp b/engines/lastexpress/characters/police.cpp
index 144ec32df32..933c0890ce1 100644
--- a/engines/lastexpress/characters/police.cpp
+++ b/engines/lastexpress/characters/police.cpp
@@ -568,8 +568,8 @@ void LogicManager::HAND_Police_TrappedCath(HAND_PARAMS) {
switch (msg->action) {
case 0:
{
- if (!getCharacterCurrentParams(kCharacterPolice)[4] &&
- (getCharacterCurrentParams(kCharacterPolice)[4] = _realTime + 75, _realTime == -75) ||
+ if ((!getCharacterCurrentParams(kCharacterPolice)[4] &&
+ (getCharacterCurrentParams(kCharacterPolice)[4] = _realTime + 75, _realTime == -75)) ||
getCharacterCurrentParams(kCharacterPolice)[4] < _realTime) {
if (!cathOutHisWindow() && checkDoor(getCharacterCurrentParams(kCharacterPolice)[2]) != 1) {
getCharacter(kCharacterPolice).callbacks[getCharacter(kCharacterPolice).currentCall + 8] = 2;
Commit: b4d936d7fd219ee3551c54f44876e50b55396ca6
https://github.com/scummvm/scummvm/commit/b4d936d7fd219ee3551c54f44876e50b55396ca6
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix Rebecca parentheses warnings
Changed paths:
engines/lastexpress/characters/rebecca.cpp
diff --git a/engines/lastexpress/characters/rebecca.cpp b/engines/lastexpress/characters/rebecca.cpp
index 4d6b7ff801c..1e0f6ab6adb 100644
--- a/engines/lastexpress/characters/rebecca.cpp
+++ b/engines/lastexpress/characters/rebecca.cpp
@@ -1220,7 +1220,7 @@ void LogicManager::HAND_Rebecca_InSalon1A(HAND_PARAMS) {
if (skip || getCharacterCurrentParams(kCharacterRebecca)[3] >= _gameTime) {
if (getCharacterCurrentParams(kCharacterRebecca)[0]) {
- if (!getCharacterCurrentParams(kCharacterRebecca)[4] && (getCharacterCurrentParams(kCharacterRebecca)[4] = _gameTime + 900, _gameTime == -900) || getCharacterCurrentParams(kCharacterRebecca)[4] < _gameTime) {
+ if ((!getCharacterCurrentParams(kCharacterRebecca)[4] && (getCharacterCurrentParams(kCharacterRebecca)[4] = _gameTime + 900, _gameTime == -900)) || getCharacterCurrentParams(kCharacterRebecca)[4] < _gameTime) {
if (inSalon(kCharacterCath)) {
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 5;
RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1013", 0, 0, 0);
@@ -1275,7 +1275,7 @@ void LogicManager::HAND_Rebecca_InSalon1A(HAND_PARAMS) {
case 4:
getCharacterCurrentParams(kCharacterRebecca)[0] = 1;
if (getCharacterCurrentParams(kCharacterRebecca)[0]) {
- if (!getCharacterCurrentParams(kCharacterRebecca)[4] && (getCharacterCurrentParams(kCharacterRebecca)[4] = _gameTime + 900, _gameTime == -900) || getCharacterCurrentParams(kCharacterRebecca)[4] < _gameTime) {
+ if ((!getCharacterCurrentParams(kCharacterRebecca)[4] && (getCharacterCurrentParams(kCharacterRebecca)[4] = _gameTime + 900, _gameTime == -900)) || getCharacterCurrentParams(kCharacterRebecca)[4] < _gameTime) {
if (inSalon(kCharacterCath)) {
getCharacter(kCharacterRebecca).callbacks[getCharacter(kCharacterRebecca).currentCall + 8] = 5;
RebeccaCall(&LogicManager::CONS_Rebecca_DoDialog, "REB1013", 0, 0, 0);
Commit: 2da59e68c10ce339305fdfcd0df2405633f81317
https://github.com/scummvm/scummvm/commit/2da59e68c10ce339305fdfcd0df2405633f81317
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix Salko parentheses warnings
Changed paths:
engines/lastexpress/characters/salko.cpp
diff --git a/engines/lastexpress/characters/salko.cpp b/engines/lastexpress/characters/salko.cpp
index 55b54817d11..48cfb91361b 100644
--- a/engines/lastexpress/characters/salko.cpp
+++ b/engines/lastexpress/characters/salko.cpp
@@ -264,14 +264,14 @@ void LogicManager::HAND_Salko_DoWalkBehind(HAND_PARAMS) {
case 0:
getCharacterCurrentParams(kCharacterSalko)[2] = 0;
if (nearChar(kCharacterSalko, kCharacterIvo, 500) ||
- (getCharacter(kCharacterSalko).direction == 1) &&
+ ((getCharacter(kCharacterSalko).direction == 1) &&
((getCharacter(kCharacterSalko).characterPosition.car > getCharacter(kCharacterIvo).characterPosition.car) ||
- getCharacter(kCharacterSalko).characterPosition.car == getCharacter(kCharacterIvo).characterPosition.car &&
- getCharacter(kCharacterSalko).characterPosition.position > getCharacter(kCharacterIvo).characterPosition.position) ||
- getCharacter(kCharacterSalko).direction == 2 &&
+ (getCharacter(kCharacterSalko).characterPosition.car == getCharacter(kCharacterIvo).characterPosition.car &&
+ getCharacter(kCharacterSalko).characterPosition.position > getCharacter(kCharacterIvo).characterPosition.position))) ||
+ (getCharacter(kCharacterSalko).direction == 2 &&
((getCharacter(kCharacterSalko).characterPosition.car < getCharacter(kCharacterIvo).characterPosition.car) ||
- getCharacter(kCharacterSalko).characterPosition.car == getCharacter(kCharacterIvo).characterPosition.car &&
- getCharacter(kCharacterSalko).characterPosition.position < getCharacter(kCharacterIvo).characterPosition.position)) {
+ (getCharacter(kCharacterSalko).characterPosition.car == getCharacter(kCharacterIvo).characterPosition.car &&
+ getCharacter(kCharacterSalko).characterPosition.position < getCharacter(kCharacterIvo).characterPosition.position)))) {
getCharacter(kCharacterSalko).waitedTicksUntilCycleRestart = 0;
getCharacterCurrentParams(kCharacterSalko)[2] = 1;
Commit: bd6aa554fb851a1c734daa774c1e792f9b7bb230
https://github.com/scummvm/scummvm/commit/bd6aa554fb851a1c734daa774c1e792f9b7bb230
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix Sophie parentheses warnings
Changed paths:
engines/lastexpress/characters/sophie.cpp
diff --git a/engines/lastexpress/characters/sophie.cpp b/engines/lastexpress/characters/sophie.cpp
index 56aa76cad52..25a49376209 100644
--- a/engines/lastexpress/characters/sophie.cpp
+++ b/engines/lastexpress/characters/sophie.cpp
@@ -109,10 +109,10 @@ void LogicManager::HAND_Sophie_DoWalkBehind(HAND_PARAMS) {
case 0:
getCharacterCurrentParams(kCharacterSophie)[2] = 0;
if (nearChar(kCharacterSophie, kCharacterRebecca, 500) ||
- (getCharacter(kCharacterSophie).direction == 1) && ((getCharacter(kCharacterSophie).characterPosition.car > getCharacter(kCharacterRebecca).characterPosition.car) ||
- getCharacter(kCharacterSophie).characterPosition.car == getCharacter(kCharacterRebecca).characterPosition.car && getCharacter(kCharacterSophie).characterPosition.position > getCharacter(kCharacterRebecca).characterPosition.position) ||
- getCharacter(kCharacterSophie).direction == 2 && ((getCharacter(kCharacterSophie).characterPosition.car < getCharacter(kCharacterRebecca).characterPosition.car) ||
- getCharacter(kCharacterSophie).characterPosition.car == getCharacter(kCharacterRebecca).characterPosition.car && getCharacter(kCharacterSophie).characterPosition.position < getCharacter(kCharacterRebecca).characterPosition.position)) {
+ ((getCharacter(kCharacterSophie).direction == 1) && ((getCharacter(kCharacterSophie).characterPosition.car > getCharacter(kCharacterRebecca).characterPosition.car) ||
+ (getCharacter(kCharacterSophie).characterPosition.car == getCharacter(kCharacterRebecca).characterPosition.car && getCharacter(kCharacterSophie).characterPosition.position > getCharacter(kCharacterRebecca).characterPosition.position))) ||
+ (getCharacter(kCharacterSophie).direction == 2 && ((getCharacter(kCharacterSophie).characterPosition.car < getCharacter(kCharacterRebecca).characterPosition.car) ||
+ (getCharacter(kCharacterSophie).characterPosition.car == getCharacter(kCharacterRebecca).characterPosition.car && getCharacter(kCharacterSophie).characterPosition.position < getCharacter(kCharacterRebecca).characterPosition.position)))) {
getCharacter(kCharacterSophie).waitedTicksUntilCycleRestart = 0;
getCharacterCurrentParams(kCharacterSophie)[2] = 1;
Commit: c9615ff131d0c3a10b4501dad00349b6aae741ae
https://github.com/scummvm/scummvm/commit/c9615ff131d0c3a10b4501dad00349b6aae741ae
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix Tatiana parentheses warnings
Changed paths:
engines/lastexpress/characters/tatiana.cpp
diff --git a/engines/lastexpress/characters/tatiana.cpp b/engines/lastexpress/characters/tatiana.cpp
index 6cf89b9e72d..2382dc72998 100644
--- a/engines/lastexpress/characters/tatiana.cpp
+++ b/engines/lastexpress/characters/tatiana.cpp
@@ -1117,7 +1117,7 @@ void LogicManager::HAND_Tatiana_GetSomeAir(HAND_PARAMS) {
break;
}
- if (!_doneNIS[kEventTatianaAskMatchSpeakRussian] && !_doneNIS[kEventTatianaAskMatch] || onLowPlatform(kCharacterCath) || !getCharacterCurrentParams(kCharacterTatiana)[0]) {
+ if ((!_doneNIS[kEventTatianaAskMatchSpeakRussian] && !_doneNIS[kEventTatianaAskMatch]) || onLowPlatform(kCharacterCath) || !getCharacterCurrentParams(kCharacterTatiana)[0]) {
getCharacterCurrentParams(kCharacterTatiana)[0] = _gameTime;
if (!_gameTime) {
setDoor(25, kCharacterCath, 0, 255, 255);
@@ -1542,7 +1542,7 @@ void LogicManager::HAND_Tatiana_StartPart3(HAND_PARAMS) {
setDoor(49, kCharacterCath, 1, 10, 9);
_items[kItemFirebird].floating = 2;
- if (_doneNIS[kEventTatianaBreakfastGivePoem] || _doneNIS[kEventTatianaGivePoem] && !_doneNIS[kEventTatianaBreakfastAlexei]) {
+ if (_doneNIS[kEventTatianaBreakfastGivePoem] || (_doneNIS[kEventTatianaGivePoem] && !_doneNIS[kEventTatianaBreakfastAlexei])) {
_items[kItemParchemin].floating = 2;
}
@@ -1579,7 +1579,7 @@ void LogicManager::HAND_Tatiana_PlayChess(HAND_PARAMS) {
}
if (getCharacterCurrentParams(kCharacterTatiana)[3] && getCharacterCurrentParams(kCharacterTatiana)[4]) {
- if (!getCharacterCurrentParams(kCharacterTatiana)[11] && (getCharacterCurrentParams(kCharacterTatiana)[11] = _gameTime + 6300, _gameTime == -6300) || getCharacterCurrentParams(kCharacterTatiana)[11] < _gameTime) {
+ if ((!getCharacterCurrentParams(kCharacterTatiana)[11] && (getCharacterCurrentParams(kCharacterTatiana)[11] = _gameTime + 6300, _gameTime == -6300)) || getCharacterCurrentParams(kCharacterTatiana)[11] < _gameTime) {
if (rcClear()) {
getCharacter(kCharacterTatiana).characterPosition.location = 0;
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
@@ -2441,7 +2441,7 @@ void LogicManager::HAND_Tatiana_WithAlexei(HAND_PARAMS) {
if (_gameTime > 2398500) {
getCharacterCurrentParams(kCharacterTatiana)[8] = 0x7FFFFFFF;
} else {
- if (!onLowPlatform(kCharacterCath) && getCharacterCurrentParams(kCharacterTatiana)[8] ||
+ if ((!onLowPlatform(kCharacterCath) && getCharacterCurrentParams(kCharacterTatiana)[8]) ||
(getCharacterCurrentParams(kCharacterTatiana)[8] = _gameTime, _gameTime)) {
if (getCharacterCurrentParams(kCharacterTatiana)[8] >= _gameTime)
break;
Commit: 5c0603461bedab084281a78d6a476ab3aa69e1c8
https://github.com/scummvm/scummvm/commit/5c0603461bedab084281a78d6a476ab3aa69e1c8
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix TrainM parentheses warnings
Changed paths:
engines/lastexpress/characters/trainm.cpp
diff --git a/engines/lastexpress/characters/trainm.cpp b/engines/lastexpress/characters/trainm.cpp
index ac8e9b4863d..66930591101 100644
--- a/engines/lastexpress/characters/trainm.cpp
+++ b/engines/lastexpress/characters/trainm.cpp
@@ -1242,13 +1242,13 @@ void LogicManager::HAND_TrainM_BoardPolice(HAND_PARAMS) {
break;
}
- if (getCharacter(kCharacterCath).characterPosition.car > kCarRedSleeping || getCharacter(kCharacterCath).characterPosition.car == kCarRedSleeping && getCharacter(kCharacterCath).characterPosition.position > 9270) {
+ if (getCharacter(kCharacterCath).characterPosition.car > kCarRedSleeping || (getCharacter(kCharacterCath).characterPosition.car == kCarRedSleeping && getCharacter(kCharacterCath).characterPosition.position > 9270)) {
playDialog(0, "BUMP", -1, 0);
bumpCath(kCarRedSleeping, 40, 255);
getCharacter(kCharacterTrainM).characterPosition.car = kCarRedSleeping;
getCharacter(kCharacterTrainM).characterPosition.position = 9270;
} else {
- if (getCharacter(kCharacterCath).characterPosition.car < kCarGreenSleeping || getCharacter(kCharacterCath).characterPosition.car == kCarGreenSleeping && getCharacter(kCharacterCath).characterPosition.position < 4840) {
+ if (getCharacter(kCharacterCath).characterPosition.car < kCarGreenSleeping || (getCharacter(kCharacterCath).characterPosition.car == kCarGreenSleeping && getCharacter(kCharacterCath).characterPosition.position < 4840)) {
playDialog(0, "BUMP", -1, 0);
bumpCathFDoor(5);
}
Commit: cfd1da027826c02aeea2d1f898674ea8769bfba9
https://github.com/scummvm/scummvm/commit/cfd1da027826c02aeea2d1f898674ea8769bfba9
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix Vassili parentheses warnings
Changed paths:
engines/lastexpress/characters/vassili.cpp
diff --git a/engines/lastexpress/characters/vassili.cpp b/engines/lastexpress/characters/vassili.cpp
index cfa32e2ddf0..0379ee78798 100644
--- a/engines/lastexpress/characters/vassili.cpp
+++ b/engines/lastexpress/characters/vassili.cpp
@@ -199,8 +199,8 @@ void LogicManager::HAND_Vassili_WithTatiana(HAND_PARAMS) {
case 0:
if (getCharacterCurrentParams(kCharacterVassili)[0]) {
getCharacter(kCharacterVassili).characterPosition = getCharacter(kCharacterTatiana).characterPosition;
- } else if (!getCharacterCurrentParams(kCharacterVassili)[2] &&
- (getCharacterCurrentParams(kCharacterVassili)[2] = _gameTime + 450, _gameTime == -450) || getCharacterCurrentParams(kCharacterVassili)[2] < _gameTime) {
+ } else if ((!getCharacterCurrentParams(kCharacterVassili)[2] &&
+ (getCharacterCurrentParams(kCharacterVassili)[2] = _gameTime + 450, _gameTime == -450)) || getCharacterCurrentParams(kCharacterVassili)[2] < _gameTime) {
if (!getCharacterCurrentParams(kCharacterVassili)[1] && getModel(32) == 1) {
getCharacterCurrentParams(kCharacterVassili)[1] = 1;
startCycOtis(kCharacterVassili, "303A");
@@ -417,8 +417,8 @@ void LogicManager::HAND_Vassili_HavingSeizure(HAND_PARAMS) {
break;
case 17:
- if (checkDoor(32) == 2 &&
- checkCathDir(kCarRedSleeping, 17) ||
+ if ((checkDoor(32) == 2 &&
+ checkCathDir(kCarRedSleeping, 17)) ||
checkCathDir(kCarRedSleeping, 18) ||
checkCathDir(kCarRedSleeping, 37) ||
checkCathDir(kCarRedSleeping, 38) ||
Commit: ed4a01d282c54f9526b41d8b77f325bf74003730
https://github.com/scummvm/scummvm/commit/ed4a01d282c54f9526b41d8b77f325bf74003730
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix Vesna parentheses warnings
Changed paths:
engines/lastexpress/characters/vesna.cpp
diff --git a/engines/lastexpress/characters/vesna.cpp b/engines/lastexpress/characters/vesna.cpp
index 5d34eb8772c..ba86e663579 100644
--- a/engines/lastexpress/characters/vesna.cpp
+++ b/engines/lastexpress/characters/vesna.cpp
@@ -268,11 +268,11 @@ void LogicManager::HAND_Vesna_DoWalkBehind(HAND_PARAMS) {
getCharacterCurrentParams(kCharacterVesna)[2] = 0;
if (nearChar(kCharacterVesna, kCharacterMilos, 500) ||
- (getCharacter(kCharacterVesna).direction == 1) &&
+ (getCharacter(kCharacterVesna).direction == 1 &&
((getCharacter(kCharacterVesna).characterPosition.car > getCharacter(kCharacterMilos).characterPosition.car) ||
- getCharacter(kCharacterVesna).characterPosition.car == getCharacter(kCharacterMilos).characterPosition.car && getCharacter(kCharacterVesna).characterPosition.position > getCharacter(kCharacterMilos).characterPosition.position) ||
- getCharacter(kCharacterVesna).direction == 2 && ((getCharacter(kCharacterVesna).characterPosition.car < getCharacter(kCharacterMilos).characterPosition.car) ||
- getCharacter(kCharacterVesna).characterPosition.car == getCharacter(kCharacterMilos).characterPosition.car && getCharacter(kCharacterVesna).characterPosition.position < getCharacter(kCharacterMilos).characterPosition.position)) {
+ (getCharacter(kCharacterVesna).characterPosition.car == getCharacter(kCharacterMilos).characterPosition.car && getCharacter(kCharacterVesna).characterPosition.position > getCharacter(kCharacterMilos).characterPosition.position))) ||
+ ((getCharacter(kCharacterVesna).direction == 2 && getCharacter(kCharacterVesna).characterPosition.car < getCharacter(kCharacterMilos).characterPosition.car) ||
+ (getCharacter(kCharacterVesna).characterPosition.car == getCharacter(kCharacterMilos).characterPosition.car && getCharacter(kCharacterVesna).characterPosition.position < getCharacter(kCharacterMilos).characterPosition.position))) {
getCharacter(kCharacterVesna).waitedTicksUntilCycleRestart = 0;
getCharacterCurrentParams(kCharacterVesna)[2] = 1;
Commit: 3d22a3bfc22bb1637f450791fbc5550e8440d02c
https://github.com/scummvm/scummvm/commit/3d22a3bfc22bb1637f450791fbc5550e8440d02c
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix TableC parentheses warnings
Changed paths:
engines/lastexpress/characters/tablec.cpp
diff --git a/engines/lastexpress/characters/tablec.cpp b/engines/lastexpress/characters/tablec.cpp
index 80c44873c4d..df8cebd467b 100644
--- a/engines/lastexpress/characters/tablec.cpp
+++ b/engines/lastexpress/characters/tablec.cpp
@@ -170,7 +170,6 @@ void LogicManager::CONS_TableC_Idling(CONS_PARAMS) {
}
void LogicManager::HAND_TableC_Idling(HAND_PARAMS) {
- getCharacterCurrentParams(kCharacterTableC);
switch (msg->action) {
case 0:
if (_globals[kProgressChapter] == 1) {
Commit: 186cdcb63bdd6fffb8873172eb915ccf88f52f23
https://github.com/scummvm/scummvm/commit/186cdcb63bdd6fffb8873172eb915ccf88f52f23
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix action.cpp parentheses warnings
Changed paths:
engines/lastexpress/game/action.cpp
diff --git a/engines/lastexpress/game/action.cpp b/engines/lastexpress/game/action.cpp
index d539ac7d2a3..6e417ee6530 100644
--- a/engines/lastexpress/game/action.cpp
+++ b/engines/lastexpress/game/action.cpp
@@ -81,7 +81,7 @@ int LogicManager::findCursor(Link *link) {
case kActionDropItem:
if (link->param1 >= 32) {
result = kCursorNormal;
- } else if (link->param1 != _activeItem || link->param1 == 20 && !_globals[kProgressIsTrainRunning] && link->param2 == 4 || link->param1 == 18 && link->param2 == 1 && _globals[kProgressField5C]) {
+ } else if (link->param1 != _activeItem || (link->param1 == 20 && !_globals[kProgressIsTrainRunning] && link->param2 == 4) || (link->param1 == 18 && link->param2 == 1 && _globals[kProgressField5C])) {
result = kCursorNormal;
} else {
result = _items[_activeItem].mnum;
@@ -99,7 +99,7 @@ int LogicManager::findCursor(Link *link) {
break;
case kActionRattle:
- if (_activeItem == kItemKey && !_doors[kItemMatchBox].status || _doors[kItemMatchBox].status == 1 && cathHasItem(kItemKey) && (_activeItem == kItemBriefcase || _activeItem == kItemFirebird)) {
+ if ((_activeItem == kItemKey && !_doors[kItemMatchBox].status) || (_doors[kItemMatchBox].status == 1 && cathHasItem(kItemKey) && (_activeItem == kItemBriefcase || _activeItem == kItemFirebird))) {
result = _items[kItemKey].mnum;
} else {
if (link->param1 >= 128) {
@@ -120,7 +120,7 @@ int LogicManager::findCursor(Link *link) {
if (_globals[kProgressJacket] == 2) {
if ((_doneNIS[kEventCathLookOutsideWindowDay] || _doneNIS[kEventCathLookOutsideWindowNight] || getModel(1) == 1) &&
_globals[kProgressIsTrainRunning] &&
- (link->param1 != 45 || !inComp(kCharacterRebecca, kCarRedSleeping, 4840) && _doors[kObjectOutsideBetweenCompartments].status == 2) &&
+ (link->param1 != 45 || (!inComp(kCharacterRebecca, kCarRedSleeping, 4840) && _doors[kObjectOutsideBetweenCompartments].status == 2)) &&
_activeItem != kItemBriefcase && _activeItem != kItemFirebird) {
result = kCursorForward;
} else {
@@ -195,7 +195,7 @@ int LogicManager::findCursor(Link *link) {
result = getHintDialog(link->param1) == 0 ? kCursorNormal : kCursorHandPointer;
break;
case kActionBed:
- if (_globals[kProgressField18] == 2 && !_globals[kProgressFieldE4] && (_gameTime > 1404000 || _globals[kProgressEventMetAugust] && _globals[kProgressFieldCC] && (!_globals[kProgressField24] || _globals[kProgressField3C]))) {
+ if (_globals[kProgressField18] == 2 && !_globals[kProgressFieldE4] && (_gameTime > 1404000 || (_globals[kProgressEventMetAugust] && _globals[kProgressFieldCC] && (!_globals[kProgressField24] || _globals[kProgressField3C])))) {
result = kCursorSleep;
} else {
result = kCursorNormal;
@@ -480,12 +480,12 @@ void LogicManager::doPreFunction(int *sceneOut) {
case kNodeSoftPointItem:
if (_trainData[*sceneOut].parameter1 < (_engine->isDemo() ? 16 : 32)) {
if (_softBlockedX[_trainData[*sceneOut].parameter1] || _blockedX[_trainData[*sceneOut].parameter1]) {
- if (_engine->getOtisManager()->fDirection(_activeNode) &&
+ if ((_engine->getOtisManager()->fDirection(_activeNode) &&
_engine->getOtisManager()->fDirection(*sceneOut) &&
- _trainData[_activeNode].nodePosition.position < _trainData[*sceneOut].nodePosition.position ||
- _engine->getOtisManager()->rDirection(_activeNode) &&
+ _trainData[_activeNode].nodePosition.position < _trainData[*sceneOut].nodePosition.position) ||
+ (_engine->getOtisManager()->rDirection(_activeNode) &&
_engine->getOtisManager()->rDirection(*sceneOut) &&
- _trainData[_activeNode].nodePosition.position > _trainData[*sceneOut].nodePosition.position) {
+ _trainData[_activeNode].nodePosition.position > _trainData[*sceneOut].nodePosition.position)) {
if (whoseBit(_softBlockedX[_trainData[*sceneOut].parameter1]) != 30 && whoseBit(_blockedX[_trainData[*sceneOut].parameter1]) != 30) {
playDialog(kCharacterCath, "CAT1126A", -1, 0);
@@ -578,11 +578,11 @@ void LogicManager::doPostFunction() {
for (int j = 1; j < 40; j++) {
if (getCharacter(kCharacterCath).characterPosition.position == 4) {
- if (getCharacter(j).characterPosition.car == kCarRedSleeping && getCharacter(j).characterPosition.position > 9270 || getCharacter(j).characterPosition.car == kCarRestaurant && getCharacter(j).characterPosition.position < 1540) {
+ if ((getCharacter(j).characterPosition.car == kCarRedSleeping && getCharacter(j).characterPosition.position > 9270) || (getCharacter(j).characterPosition.car == kCarRestaurant && getCharacter(j).characterPosition.position < 1540)) {
charactersRndArray[characterIdx] = j;
characterIdx++;
}
- } else if (getCharacter(j).characterPosition.car == kCarGreenSleeping && getCharacter(j).characterPosition.position > 9270 || getCharacter(j).characterPosition.car == kCarRedSleeping && getCharacter(j).characterPosition.position < 850) {
+ } else if ((getCharacter(j).characterPosition.car == kCarGreenSleeping && getCharacter(j).characterPosition.position > 9270) || (getCharacter(j).characterPosition.car == kCarRedSleeping && getCharacter(j).characterPosition.position < 850)) {
charactersRndArray[characterIdx] = j;
characterIdx++;
}
@@ -1007,8 +1007,8 @@ void LogicManager::doAction(Link *link) {
if (_engine->isDemo())
break;
- if (!_doneNIS[kEventCathLookOutsideWindowDay] && !_doneNIS[kEventCathLookOutsideWindowNight] && getModel(1) != 1 || !_globals[kProgressIsTrainRunning] || link->param1 == 45 && (inComp(kCharacterRebecca, kCarRedSleeping, 4840) || _doors[kObjectOutsideBetweenCompartments].status != 2) || _activeItem == kItemBriefcase || _activeItem == kItemFirebird) {
- if (link->param1 == 9 || link->param1 >= 44 && link->param1 <= 45) {
+ if ((!_doneNIS[kEventCathLookOutsideWindowDay] && !_doneNIS[kEventCathLookOutsideWindowNight] && getModel(1) != 1) || !_globals[kProgressIsTrainRunning] || (link->param1 == 45 && (inComp(kCharacterRebecca, kCarRedSleeping, 4840) || _doors[kObjectOutsideBetweenCompartments].status != 2)) || _activeItem == kItemBriefcase || _activeItem == kItemFirebird) {
+ if (link->param1 == 9 || (link->param1 >= 44 && link->param1 <= 45)) {
if (isNight()) {
playNIS(kEventCathLookOutsideWindowNight);
} else {
@@ -1453,7 +1453,7 @@ void LogicManager::doAction(Link *link) {
}
if (_doors[link->param1].status == 1 || _doors[link->param1].status == 3 || preventEnterComp(link->param1)) {
- if (_doors[link->param1].status != 1 || preventEnterComp(link->param1) || _activeItem != 15 && (link->param1 != 1 || !cathHasItem(kItemKey) || _activeItem != kItemBriefcase && _activeItem != kItemFirebird)) {
+ if (_doors[link->param1].status != 1 || preventEnterComp(link->param1) || (_activeItem != 15 && (link->param1 != 1 || !cathHasItem(kItemKey) || (_activeItem != kItemBriefcase && _activeItem != kItemFirebird)))) {
if (!cathRunningDialog("LIB013"))
queueSFX(kCharacterCath, 13, 0);
@@ -1463,7 +1463,7 @@ void LogicManager::doAction(Link *link) {
queueSFX(kCharacterCath, 32, 0);
- if (link->param1 != 0 && link->param1 <= 3 || link->param1 >= 32 && link->param1 <= 37)
+ if ((link->param1 != 0 && link->param1 <= 3) || (link->param1 >= 32 && link->param1 <= 37))
setDoor(link->param1, kCharacterCath, 0, 10, 9);
queueSFX(kCharacterCath, 15, 22);
Commit: d7fd0f3130782400d4f7abe2a33ff26cb958efa2
https://github.com/scummvm/scummvm/commit/d7fd0f3130782400d4f7abe2a33ff26cb958efa2
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix navigation.cpp parentheses warnings
Changed paths:
engines/lastexpress/game/navigation.cpp
diff --git a/engines/lastexpress/game/navigation.cpp b/engines/lastexpress/game/navigation.cpp
index db47d0b09c2..a5a689f4cb7 100644
--- a/engines/lastexpress/game/navigation.cpp
+++ b/engines/lastexpress/game/navigation.cpp
@@ -353,16 +353,16 @@ void LogicManager::getNewMnum() {
_isMagnifierInUse) {
if (_activeItem != kItemMatch ||
- !cathInCorridor(kCarGreenSleeping) &&
- !cathInCorridor(kCarRedSleeping) ||
+ (!cathInCorridor(kCarGreenSleeping) &&
+ !cathInCorridor(kCarRedSleeping)) ||
_globals[kProgressJacket] != 2 ||
_inventoryFlag1 ||
_inventoryFlag2 ||
_isEggHighlighted ||
_isMagnifierInUse ||
- _items[kItem2].floating &&
+ (_items[kItem2].floating &&
getCharacter(kCharacterCath).characterPosition.car == kCarRedSleeping &&
- getCharacter(kCharacterCath).characterPosition.position == 2300) {
+ getCharacter(kCharacterCath).characterPosition.position == 2300)) {
character = _engine->getOtisManager()->checkMouse(_engine->_cursorX, _engine->_cursorY);
@@ -463,8 +463,8 @@ void LogicManager::nodeStepMouse(Event *event) {
_isMagnifierInUse) {
if (_activeItem != kItemMatch ||
- !cathInCorridor(kCarGreenSleeping) &&
- !cathInCorridor(kCarRedSleeping) ||
+ (!cathInCorridor(kCarGreenSleeping) &&
+ !cathInCorridor(kCarRedSleeping)) ||
_globals[kProgressJacket] != 2 ||
_inventoryFlag1 ||
_inventoryFlag2 ||
@@ -798,7 +798,7 @@ void LogicManager::checkInventory(int32 flags) {
return;
}
- if (!_closeUp || _nodeReturn2 && findLargeItem() == _activeItem) {
+ if (!_closeUp || (_nodeReturn2 && findLargeItem() == _activeItem)) {
_isMagnifierInUse = 1;
}
Commit: 22ff3be4979a03ea5d425ab90db7b5c8f6b907a8
https://github.com/scummvm/scummvm/commit/22ff3be4979a03ea5d425ab90db7b5c8f6b907a8
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix most logic.cpp parentheses warnings
Changed paths:
engines/lastexpress/game/logic.cpp
diff --git a/engines/lastexpress/game/logic.cpp b/engines/lastexpress/game/logic.cpp
index b444f329365..48b2354a348 100644
--- a/engines/lastexpress/game/logic.cpp
+++ b/engines/lastexpress/game/logic.cpp
@@ -284,7 +284,7 @@ void LogicManager::takeItem(int item) {
if (_closeUp)
cathDir = _trainData[_nodeReturn].cathDir;
- if (cathDir == 1 || cathDir >= 22 && cathDir <= 33) {
+ if (cathDir == 1 || (cathDir >= 22 && cathDir <= 33)) {
if (_closeUp) {
_nodeReturn = getBumpNode(kCarGreenSleeping, cathDir, 255);
return;
@@ -380,7 +380,7 @@ bool LogicManager::isSingleFemale(int character) {
bool LogicManager::isNight() {
int chapter = _globals[kProgressChapter];
- return chapter == 1 || chapter == 4 || chapter == 5 && !_globals[kProgressIsDayTime];
+ return chapter == 1 || chapter == 4 || (chapter == 5 && !_globals[kProgressIsDayTime]);
}
bool LogicManager::whoOutside(int character) {
@@ -648,7 +648,7 @@ void LogicManager::setDoor(int door, int character, int status, int windowCursor
_engine->getSoundManager()->_scanAnySoundLoopingSection = true;
- if (oldStatus != status && (oldStatus == 2 || status == 2) && (door && door <= 8 || door >= 32 && door <= 39))
+ if (oldStatus != status && (oldStatus == 2 || status == 2) && ((door && door <= 8) || (door >= 32 && door <= 39)))
_engine->getOtisManager()->drawLooseSprites();
}
}
@@ -1116,7 +1116,7 @@ bool LogicManager::obstacleBetween(int character1, int character2) {
}
bool LogicManager::bumpCathTowardsCond(int door, bool playSound, bool loadScene) {
- if (getCharacter(kCharacterCath).characterPosition.location || (door < 2 || door > 8) && (door < 32 || door > 39)) {
+ if (getCharacter(kCharacterCath).characterPosition.location || ((door < 2 || door > 8) && (door < 32 || door > 39))) {
return false;
}
@@ -1706,7 +1706,7 @@ void LogicManager::playNIS(int nisId) {
bool videoWithoutFade = false;
- if (nisId >= kEventCorpseDropFloorOriginal ||
+ if (nisId >= (int)kEventCorpseDropFloorOriginal ||
nisId == kEventCathWakingUp ||
nisId == kEventConcertCough ||
nisId == kEventConcertSit ||
@@ -2622,7 +2622,7 @@ void LogicManager::playCondYelling(int character, int situation) {
playDialog(kCharacterCond2, "Jac1500", 16, 0);
break;
}
- } else if (_globals[kProgressField40] || _gameTime > 2101500 && _gameTime < 2133000) {
+ } else if (_globals[kProgressField40] || (_gameTime > 2101500 && _gameTime < 2133000)) {
playDialog(kCharacterCond2, "Jac1507A", 16, 0);
} else {
playDialog(kCharacterCond2, "Jac1507", 16, 0);
@@ -3000,8 +3000,8 @@ bool LogicManager::cathWillSeeOtis(int position) {
return true;
}
- return _engine->getOtisManager()->fDirection(0) && _engine->_fudgePosition[param1] >= getCharacter(kCharacterCath).characterPosition.position ||
- _engine->getOtisManager()->rDirection(0) && _engine->_fudgePosition[param2] <= getCharacter(kCharacterCath).characterPosition.position;
+ return (_engine->getOtisManager()->fDirection(0) && _engine->_fudgePosition[param1] >= getCharacter(kCharacterCath).characterPosition.position) ||
+ (_engine->getOtisManager()->rDirection(0) && _engine->_fudgePosition[param2] <= getCharacter(kCharacterCath).characterPosition.position);
}
bool LogicManager::walk(int character, int car, int position) {
@@ -3093,7 +3093,7 @@ bool LogicManager::walk(int character, int car, int position) {
getCharacter(character).attachedConductor = 0;
}
} else if (!getCharacter(character).attachedConductor) {
- if (getCharacter(character).direction != 1 || position <= 2000 && car == getCharacter(character).characterPosition.car) {
+ if (getCharacter(character).direction != 1 || (position <= 2000 && car == getCharacter(character).characterPosition.car)) {
if (getCharacter(character).direction == 2 &&
(position < 1500 || car != getCharacter(character).characterPosition.car) &&
getCharacter(character).characterPosition.position > 1500) {
Commit: a090b7ebda66e15635b24c6ba0016e64a71f2a4c
https://github.com/scummvm/scummvm/commit/a090b7ebda66e15635b24c6ba0016e64a71f2a4c
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix otis.cpp parentheses warnings
Changed paths:
engines/lastexpress/game/otis.cpp
diff --git a/engines/lastexpress/game/otis.cpp b/engines/lastexpress/game/otis.cpp
index 16d8687ea9e..d61fc20a887 100644
--- a/engines/lastexpress/game/otis.cpp
+++ b/engines/lastexpress/game/otis.cpp
@@ -183,7 +183,7 @@ bool OtisManager::walkingRender() {
return true;
if (car == kCarRestaurant) {
- if (cathDir >= 73 && cathDir <= 76 || cathDir >= 77 && cathDir <= 80)
+ if ((cathDir >= 73 && cathDir <= 76) || (cathDir >= 77 && cathDir <= 80))
return true;
if (cathDir == 10 || cathDir == 11)
@@ -272,8 +272,8 @@ void OtisManager::startSeq(int character, int direction, bool loadSequence) {
if (_engine->getLogicManager()->checkLoc(character, kCarGreenSleeping) || _engine->getLogicManager()->checkLoc(character, kCarRedSleeping)) {
if (getCharacter(kCharacterCath).characterPosition.car > getCharacter(character).characterPosition.car ||
- getCharacter(kCharacterCath).characterPosition.car == getCharacter(character).characterPosition.car &&
- getCharacter(kCharacterCath).characterPosition.position > getCharacter(character).characterPosition.position) {
+ (getCharacter(kCharacterCath).characterPosition.car == getCharacter(character).characterPosition.car &&
+ getCharacter(kCharacterCath).characterPosition.position > getCharacter(character).characterPosition.position)) {
Common::strcat_s(effSeqName1, "R.SEQ");
} else {
Common::strcat_s(effSeqName1, "F.SEQ");
@@ -291,8 +291,8 @@ void OtisManager::startSeq(int character, int direction, bool loadSequence) {
if (_engine->getLogicManager()->checkLoc(character, 3) || _engine->getLogicManager()->checkLoc(character, 4)) {
if (getCharacter(kCharacterCath).characterPosition.car > getCharacter(character).characterPosition.car ||
- getCharacter(kCharacterCath).characterPosition.car == getCharacter(character).characterPosition.car &&
- getCharacter(kCharacterCath).characterPosition.position > getCharacter(character).characterPosition.position) {
+ (getCharacter(kCharacterCath).characterPosition.car == getCharacter(character).characterPosition.car &&
+ getCharacter(kCharacterCath).characterPosition.position > getCharacter(character).characterPosition.position)) {
Common::strcat_s(effSeqName2, "R.SEQ");
} else {
Common::strcat_s(effSeqName2, "F.SEQ");
@@ -815,8 +815,8 @@ void OtisManager::refreshSequences() {
if (_engine->getLogicManager()->checkLoc(j, 3) || _engine->getLogicManager()->checkLoc(j, 4)) {
if (getCharacter(j).characterPosition.car < getCharacter(kCharacterCath).characterPosition.car ||
- getCharacter(j).characterPosition.car == getCharacter(kCharacterCath).characterPosition.car &&
- getCharacter(kCharacterCath).characterPosition.position > getCharacter(j).characterPosition.position) {
+ (getCharacter(j).characterPosition.car == getCharacter(kCharacterCath).characterPosition.car &&
+ getCharacter(kCharacterCath).characterPosition.position > getCharacter(j).characterPosition.position)) {
Common::strcat_s(seqName, "R.SEQ");
} else {
Common::strcat_s(seqName, "F.SEQ");
@@ -849,8 +849,8 @@ void OtisManager::refreshSequences() {
if (_engine->getLogicManager()->checkLoc(j, 3) || _engine->getLogicManager()->checkLoc(j, 4)) {
if (getCharacter(j).characterPosition.car < getCharacter(kCharacterCath).characterPosition.car ||
- getCharacter(j).characterPosition.car == getCharacter(kCharacterCath).characterPosition.car &&
- getCharacter(kCharacterCath).characterPosition.position > getCharacter(j).characterPosition.position) {
+ (getCharacter(j).characterPosition.car == getCharacter(kCharacterCath).characterPosition.car &&
+ getCharacter(kCharacterCath).characterPosition.position > getCharacter(j).characterPosition.position)) {
Common::strcat_s(seqName2, "R.SEQ");
} else {
Common::strcat_s(seqName2, "F.SEQ");
@@ -1214,7 +1214,7 @@ void OtisManager::updateCharacter(int character) {
if (getCharacter(character).frame1 && getCharacter(character).direction && getCharacter(character).sequence1) {
if (getCharacter(character).waitedTicksUntilCycleRestart < getCharacter(character).frame1->ticksToWaitUntilCycleRestart - 1 ||
- getCharacter(character).direction == 3 && getCharacter(character).sequence1->numFrames == 1) {
+ (getCharacter(character).direction == 3 && getCharacter(character).sequence1->numFrames == 1)) {
getCharacter(character).waitedTicksUntilCycleRestart++;
} else if (getCharacter(character).waitedTicksUntilCycleRestart >= getCharacter(character).frame1->ticksToWaitUntilCycleRestart || getCharacter(character).frame1->spritesUnk3) {
if (getCharacter(character).frame1->spritesUnk3 == 1)
@@ -1222,7 +1222,7 @@ void OtisManager::updateCharacter(int character) {
getCharacter(character).currentFrameSeq1++;
- if (getCharacter(character).currentFrameSeq1 > (getCharacter(character).sequence1->numFrames - 1) || getCharacter(character).needsPosFudge && mainWalkTooFar(character)) {
+ if (getCharacter(character).currentFrameSeq1 > (getCharacter(character).sequence1->numFrames - 1) || (getCharacter(character).needsPosFudge && mainWalkTooFar(character))) {
if (getCharacter(character).direction == 3) {
getCharacter(character).currentFrameSeq1 = 0;
} else {
@@ -1289,7 +1289,7 @@ void OtisManager::updateCharacter(int character) {
getCharacter(character).doProcessEntity = 0;
- if (getCharacter(character).direction == 4 || getCharacter(character).direction == 5 && getCharacter(character).directionSwitch == 4)
+ if (getCharacter(character).direction == 4 || (getCharacter(character).direction == 5 && getCharacter(character).directionSwitch == 4))
getCharacter(character).elapsedFrames++;
} else {
if (getCharacter(character).position2) {
@@ -1303,7 +1303,7 @@ void OtisManager::updateCharacter(int character) {
getCharacter(character).doProcessEntity = 0;
- if (getCharacter(character).direction == 4 || getCharacter(character).direction == 5 && getCharacter(character).directionSwitch == 4)
+ if (getCharacter(character).direction == 4 || (getCharacter(character).direction == 5 && getCharacter(character).directionSwitch == 4))
getCharacter(character).elapsedFrames++;
}
}
@@ -1345,8 +1345,8 @@ void OtisManager::doNewSprite(int character, bool keepPreviousFrame, bool dontPl
if ((newSprite->flags & 1) != 0)
_engine->getLogicManager()->send(kCharacterCath, character, 5, 0);
- if ((newSprite->flags & 2) == 0 || (_engine->getLogicManager()->send(kCharacterCath, character, 10, 0), _engine->getMessageManager()->flush(), !_engine->_stopUpdatingCharacters) && !getCharacter(character).doProcessEntity) {
- if ((newSprite->flags & 0x10) == 0 || (_engine->getLogicManager()->send(kCharacterCath, character, 4, 0), _engine->getMessageManager()->flush(), !_engine->_stopUpdatingCharacters) && !getCharacter(character).doProcessEntity) {
+ if ((newSprite->flags & 2) == 0 || ((_engine->getLogicManager()->send(kCharacterCath, character, 10, 0), _engine->getMessageManager()->flush(), !_engine->_stopUpdatingCharacters) && !getCharacter(character).doProcessEntity)) {
+ if ((newSprite->flags & 0x10) == 0 || ((_engine->getLogicManager()->send(kCharacterCath, character, 4, 0), _engine->getMessageManager()->flush(), !_engine->_stopUpdatingCharacters) && !getCharacter(character).doProcessEntity)) {
if (getCharacter(character).position2) {
_engine->getLogicManager()->releaseView(character, getCharacter(character).car2, getCharacter(character).position2);
getCharacter(character).car2 = 0;
@@ -1354,9 +1354,9 @@ void OtisManager::doNewSprite(int character, bool keepPreviousFrame, bool dontPl
}
if (!newSprite->position ||
- (getCharacter(character).car2 = getCharacter(character).characterPosition.car, getCharacter(character).position2 = newSprite->position,
+ ((getCharacter(character).car2 = getCharacter(character).characterPosition.car, getCharacter(character).position2 = newSprite->position,
_engine->getLogicManager()->blockView(character, getCharacter(character).car2, getCharacter(character).position2),
- !_engine->_stopUpdatingCharacters) && !getCharacter(character).doProcessEntity) {
+ !_engine->_stopUpdatingCharacters) && !getCharacter(character).doProcessEntity)) {
if (newSprite->soundAction && !dontPlaySound)
_engine->getLogicManager()->queueSFX(character, newSprite->soundAction, newSprite->soundDelay);
@@ -1381,7 +1381,7 @@ void OtisManager::doNewSprite(int character, bool keepPreviousFrame, bool dontPl
}
void OtisManager::doSeqChange(int character) {
- if (getCharacter(character).direction != 4 || (_engine->getLogicManager()->send(kCharacterCath, character, 3, 0), _engine->getMessageManager()->flush(), !_engine->_stopUpdatingCharacters) && !getCharacter(character).doProcessEntity) {
+ if (getCharacter(character).direction != 4 || ((_engine->getLogicManager()->send(kCharacterCath, character, 3, 0), _engine->getMessageManager()->flush(), !_engine->_stopUpdatingCharacters) && !getCharacter(character).doProcessEntity)) {
if (_engine->getLogicManager()->whoWalking(character) && !getCharacter(character).sequence2 && corrRender(0) && getCharacter(kCharacterCath).characterPosition.car == getCharacter(character).characterPosition.car) {
if (getCharacter(character).needsPosFudge && !_engine->getLogicManager()->whoFacingCath(character)) {
getCharacter(character).characterPosition.position = 8514;
Commit: 226dce52922b17d02781320af167c067090c406e
https://github.com/scummvm/scummvm/commit/226dce52922b17d02781320af167c067090c406e
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: SOUND: Fix some dialogs stopping after first frame
Changed paths:
engines/lastexpress/sound/slot.cpp
diff --git a/engines/lastexpress/sound/slot.cpp b/engines/lastexpress/sound/slot.cpp
index d6bd5b10206..6af9927b689 100644
--- a/engines/lastexpress/sound/slot.cpp
+++ b/engines/lastexpress/sound/slot.cpp
@@ -500,8 +500,8 @@ void Slot::devirtualize() {
_engine->_soundMutex->lock();
- _size = _soundBuffer[0];
- _blockCount = _soundBuffer[2] - 1;
+ _size = READ_LE_UINT32(&_soundBuffer[0]);
+ _blockCount = READ_LE_UINT32(&_soundBuffer[4]) - 1;
_blockCount -= _time;
}
Commit: 0ccb25781f76cba2d371321894e0e319d618e6f8
https://github.com/scummvm/scummvm/commit/0ccb25781f76cba2d371321894e0e319d618e6f8
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix warning in comparison of walkCounter
The disassembly showed a comparison with 0x80 but the
decompiler showed a "< 0" comparison. This should now
be fixed and it shows that this walkCounter actually contains
flags...
Changed paths:
engines/lastexpress/game/logic.cpp
diff --git a/engines/lastexpress/game/logic.cpp b/engines/lastexpress/game/logic.cpp
index 48b2354a348..17e4c3afd56 100644
--- a/engines/lastexpress/game/logic.cpp
+++ b/engines/lastexpress/game/logic.cpp
@@ -3009,7 +3009,7 @@ bool LogicManager::walk(int character, int car, int position) {
int excuseMeCharacter;
uint32 characterPosition;
bool canTeleportToTarget = false;
- bool negativeWalkCounter = false;
+ bool moveCharacterByOffset = false;
bool walkCounterUpdated = false;
int offset = 0;
@@ -3024,7 +3024,7 @@ bool LogicManager::walk(int character, int car, int position) {
if (getCharacter(character).walkCounter) {
getCharacter(character).walkCounter--;
- if (getCharacter(character).walkCounter == 128)
+ if (getCharacter(character).walkCounter == 0x80)
getCharacter(character).walkCounter = 0;
if ((getCharacter(character).walkCounter & 0x7F) != 8) {
@@ -3034,8 +3034,8 @@ bool LogicManager::walk(int character, int car, int position) {
walkCounterUpdated = true;
- if (getCharacter(character).walkCounter < 0)
- negativeWalkCounter = true;
+ if ((getCharacter(character).walkCounter & 0x80) != 0)
+ moveCharacterByOffset = true;
}
if (car == getCharacter(character).characterPosition.car) {
@@ -3138,7 +3138,7 @@ bool LogicManager::walk(int character, int car, int position) {
}
playChrExcuseMe(character, excuseMeCharacter, 0);
- getCharacter(character).walkCounter = 144;
+ getCharacter(character).walkCounter = 0x80 | 0x10;
break;
}
@@ -3171,8 +3171,8 @@ bool LogicManager::walk(int character, int car, int position) {
(getCharacter(character).direction == 2 && (getCharacter(character).characterPosition.position > getCharacter(j).characterPosition.position))) {
getCharacter(character).waitedTicksUntilCycleRestart = 0;
getCharacter(j).waitedTicksUntilCycleRestart = 0;
- getCharacter(character).walkCounter = 16;
- getCharacter(j).walkCounter = 16;
+ getCharacter(character).walkCounter = 0x10;
+ getCharacter(j).walkCounter = 0x10;
playChrExcuseMe(character, j, 0);
playChrExcuseMe(j, character, 0);
@@ -3317,7 +3317,7 @@ bool LogicManager::walk(int character, int car, int position) {
if (walkCounterUpdated) {
if (seqDirection == 1) {
- if (negativeWalkCounter) {
+ if (moveCharacterByOffset) {
if (getCharacter(character).characterPosition.position < 8800)
getCharacter(character).characterPosition.position += 1200;
} else if (getCharacter(character).characterPosition.position < 9250) {
@@ -3331,7 +3331,7 @@ bool LogicManager::walk(int character, int car, int position) {
return true;
}
} else {
- if (negativeWalkCounter) {
+ if (moveCharacterByOffset) {
if (getCharacter(character).characterPosition.position > 1200)
getCharacter(character).characterPosition.position -= 1200;
} else if (getCharacter(character).characterPosition.position > 750) {
Commit: 57fdfd45bbb4d2c8cb0c24b5614b85da55c88ed1
https://github.com/scummvm/scummvm/commit/57fdfd45bbb4d2c8cb0c24b5614b85da55c88ed1
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix last parentheses warning in logic.cpp
Changed paths:
engines/lastexpress/game/logic.cpp
diff --git a/engines/lastexpress/game/logic.cpp b/engines/lastexpress/game/logic.cpp
index 17e4c3afd56..1f1e52acc95 100644
--- a/engines/lastexpress/game/logic.cpp
+++ b/engines/lastexpress/game/logic.cpp
@@ -3127,8 +3127,8 @@ bool LogicManager::walk(int character, int car, int position) {
for (int i = 0; i < 8; i++) {
if ((_blockedX[offset + i] || _softBlockedX[offset + i]) && nearX(character, _doorPositions[i], 750) &&
- cathWillSeeOtis(_doorPositions[i]) && (getCharacter(character).direction == 1 && (getCharacter(character).characterPosition.position < _doorPositions[i]) &&
- (car != getCharacter(character).characterPosition.car || position > _doorPositions[i]) ||
+ cathWillSeeOtis(_doorPositions[i]) && ((getCharacter(character).direction == 1 && getCharacter(character).characterPosition.position < _doorPositions[i] &&
+ (car != getCharacter(character).characterPosition.car || position > _doorPositions[i])) ||
(getCharacter(character).direction == 2 && (getCharacter(character).characterPosition.position > _doorPositions[i]) &&
(car != getCharacter(character).characterPosition.car || position < _doorPositions[i])))) {
if (_blockedX[offset + i]) {
Commit: ef7e38e37ae5215e91d493e3310ebf4b676a7533
https://github.com/scummvm/scummvm/commit/ef7e38e37ae5215e91d493e3310ebf4b676a7533
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: DETECTION: Set engine as ready for public testing
Changed paths:
engines/lastexpress/detection.cpp
diff --git a/engines/lastexpress/detection.cpp b/engines/lastexpress/detection.cpp
index f3aecd56477..f713d722713 100644
--- a/engines/lastexpress/detection.cpp
+++ b/engines/lastexpress/detection.cpp
@@ -60,7 +60,7 @@ static const ADGameDescription gameDescriptions[] = {
},
Common::EN_ANY,
Common::kPlatformUnknown,
- ADGF_UNSTABLE,
+ ADGF_TESTING,
GUIO2(GUIO_NOASPECT, GUIO_NOMIDI)
},
@@ -79,7 +79,7 @@ static const ADGameDescription gameDescriptions[] = {
},
Common::EN_ANY,
Common::kPlatformUnknown,
- ADGF_UNSTABLE,
+ ADGF_TESTING,
GUIO2(GUIO_NOASPECT, GUIO_NOMIDI)
},
@@ -98,7 +98,7 @@ static const ADGameDescription gameDescriptions[] = {
},
Common::EN_ANY,
Common::kPlatformUnknown,
- ADGF_UNSTABLE,
+ ADGF_TESTING,
GUIO2(GUIO_NOASPECT, GUIO_NOMIDI)
},
@@ -114,7 +114,7 @@ static const ADGameDescription gameDescriptions[] = {
},
Common::EN_ANY,
Common::kPlatformUnknown,
- ADGF_DEMO | ADGF_UNSTABLE,
+ ADGF_DEMO | ADGF_TESTING,
GUIO2(GUIO_NOASPECT, GUIO_NOMIDI)
},
@@ -133,7 +133,7 @@ static const ADGameDescription gameDescriptions[] = {
},
Common::FR_FRA,
Common::kPlatformUnknown,
- ADGF_UNSTABLE,
+ ADGF_TESTING,
GUIO2(GUIO_NOASPECT, GUIO_NOMIDI)
},
@@ -152,7 +152,7 @@ static const ADGameDescription gameDescriptions[] = {
},
Common::DE_DEU,
Common::kPlatformUnknown,
- ADGF_UNSTABLE,
+ ADGF_TESTING,
GUIO2(GUIO_NOASPECT, GUIO_NOMIDI)
},
@@ -171,7 +171,7 @@ static const ADGameDescription gameDescriptions[] = {
},
Common::ES_ESP,
Common::kPlatformUnknown,
- ADGF_UNSTABLE,
+ ADGF_TESTING,
GUIO2(GUIO_NOASPECT, GUIO_NOMIDI)
},
@@ -190,7 +190,7 @@ static const ADGameDescription gameDescriptions[] = {
},
Common::IT_ITA,
Common::kPlatformUnknown,
- ADGF_UNSTABLE,
+ ADGF_TESTING,
GUIO2(GUIO_NOASPECT, GUIO_NOMIDI)
},
@@ -209,7 +209,7 @@ static const ADGameDescription gameDescriptions[] = {
},
Common::RU_RUS,
Common::kPlatformUnknown,
- ADGF_UNSTABLE,
+ ADGF_TESTING,
GUIO2(GUIO_NOASPECT, GUIO_NOMIDI)
},
Commit: db7783ab350deb756dbc97a5dfc4554a9c634dd6
https://github.com/scummvm/scummvm/commit/db7783ab350deb756dbc97a5dfc4554a9c634dd6
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Fix typo in Tatiana's logic
Changed paths:
engines/lastexpress/characters/tatiana.cpp
diff --git a/engines/lastexpress/characters/tatiana.cpp b/engines/lastexpress/characters/tatiana.cpp
index 2382dc72998..ee518f14380 100644
--- a/engines/lastexpress/characters/tatiana.cpp
+++ b/engines/lastexpress/characters/tatiana.cpp
@@ -1407,11 +1407,6 @@ void LogicManager::CONS_Tatiana_JoinAlexei(CONS_PARAMS) {
void LogicManager::HAND_Tatiana_JoinAlexei(HAND_PARAMS) {
switch (msg->action) {
- case 8:
- if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1)
- CONS_Tatiana_LeaveBreakfast(0, 0, 0, 0);
-
- break;
case 12:
getCharacter(kCharacterTatiana).inventoryItem = 0;
getCharacter(kCharacterTatiana).characterPosition.location = 0;
@@ -1422,6 +1417,11 @@ void LogicManager::HAND_Tatiana_JoinAlexei(HAND_PARAMS) {
send(kCharacterTatiana, kCharacterAlexei, 236053296, 0);
}
+ break;
+ case 18:
+ if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1)
+ CONS_Tatiana_LeaveBreakfast(0, 0, 0, 0);
+
break;
case 123857088:
startCycOtis(kCharacterTatiana, "018G");
Commit: c4c053bba3f808ea771fde92e0cec856736e29c9
https://github.com/scummvm/scummvm/commit/c4c053bba3f808ea771fde92e0cec856736e29c9
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Finish the EVENT_QUIT handling
Changed paths:
engines/lastexpress/lastexpress.cpp
engines/lastexpress/lastexpress.h
diff --git a/engines/lastexpress/lastexpress.cpp b/engines/lastexpress/lastexpress.cpp
index 2340cebb1d2..45d3d35b4fa 100644
--- a/engines/lastexpress/lastexpress.cpp
+++ b/engines/lastexpress/lastexpress.cpp
@@ -225,6 +225,11 @@ Common::Error LastExpressEngine::run() {
elapsedMs += 4 * 17;
}
+ bool haveEvent = true;
+ while (_pendingExitEvent && haveEvent) {
+ haveEvent = getMessageManager()->process();
+ }
+
getTimerManager()->removeTimerProc(soundTimerHandler);
shutDown();
@@ -357,44 +362,36 @@ void LastExpressEngine::startNewGame() {
void LastExpressEngine::engineEventHandler(Event *event) {
switch (event->flags) {
- case 1:
- //++g_numClicks;
+ case 1: // Quit signal request
getNISManager()->abortNIS();
abortFight();
abortCredits();
- if (shouldQuit()) {
- // g_flag_running = 0;
- // PostMessageA(g_engine_state->hwnd, WM_CLOSE, 0, 0);
- // g_flag_main_thread_running = 0;
- // AfxEndThread(0, 1);
- }
- if (getMenu()->isShowingMenu() || (getMessageManager()->getEventHandle(1) == &LastExpressEngine::nodeStepMouseWrapper && !getVCR()->isVirgin(_currentGameFileColorId))) {
- getMenu()->doEgg(1, 0, 0);
- quitGame();
- } else {
- getMessageManager()->addEvent(4, 0, 0, 2);
- }
-
- if (shouldQuit() /* || g_numClicks > 100*/) {
- //g_flag_running = 0;
- //PostMessageA(g_engine_state->hwnd, WM_CLOSE, 0, 0);
- //g_flag_main_thread_running = 0;
- //AfxEndThread(0, 1);
+ if (_pendingExitEvent) {
+ if (getMenu()->isShowingMenu() || (getMessageManager()->getEventHandle(1) == &LastExpressEngine::nodeStepMouseWrapper && !getVCR()->isVirgin(_currentGameFileColorId))) {
+ getMenu()->doEgg(true, 0, 0); // Save!
+ _pendingExitEvent = false; // We're done, we can quit
+ } else {
+ getMessageManager()->addEvent(4, 0, 0, 2); // Give the engine the actual chance to abort NIS, fights and credits by running process()
+ _pendingExitEvent = true;
+ }
}
break;
- case 2:
+ case 2: // Quit signal handler
getNISManager()->abortNIS();
abortFight();
- warning("abortFight() missing from engineEventHandler");
abortCredits();
- if (!shouldQuit() && !getMenu()->isShowingMenu()) {
- if (getMessageManager()->getEventHandle(1) != &LastExpressEngine::nodeStepMouseWrapper || getVCR()->isVirgin(_currentGameFileColorId))
- getMessageManager()->addEvent(4, 0, 0, 2);
- else
- getMenu()->doEgg(true, 0, 0);
+
+ if (_pendingExitEvent && !getMenu()->isShowingMenu()) {
+ if (getMessageManager()->getEventHandle(1) != &LastExpressEngine::nodeStepMouseWrapper || getVCR()->isVirgin(_currentGameFileColorId)) {
+ _pendingExitEvent = true;
+ } else {
+ getMenu()->doEgg(true, 0, 0); // Save!
+ _pendingExitEvent = false; // We're done, we can quit
+ }
}
+
break;
case 3:
// Originally handled WM_PAINT events and triggered burstBox on the screen rectangle
@@ -408,9 +405,8 @@ void LastExpressEngine::engineEventHandler(Event *event) {
break;
}
default:
- return;
+ break;
}
-
}
int32 LastExpressEngine::getSoundFrameCounter() {
@@ -540,8 +536,9 @@ bool LastExpressEngine::handleEvents() {
break;
case Common::EVENT_QUIT:
+ case Common::EVENT_RETURN_TO_LAUNCHER:
getMessageManager()->addEvent(4, 0, 0, 1);
- quitGame();
+ _pendingExitEvent = true;
break;
default:
diff --git a/engines/lastexpress/lastexpress.h b/engines/lastexpress/lastexpress.h
index c04afdb7b0e..3e66ed232e2 100644
--- a/engines/lastexpress/lastexpress.h
+++ b/engines/lastexpress/lastexpress.h
@@ -608,6 +608,8 @@ public:
bool _systemEventRightMouseDown = false;
Common::Point _systemEventLastMouseCoords;
+ bool _pendingExitEvent = false;
+
Seq *_doorSeqs[8] = { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr };
Seq *_clockHandsSeqs[2] = { nullptr, nullptr };
int32 _clockHandsValues[2] = { 0, 0 };
Commit: 0c1f5c7f2fb8877bbc4d0d3e6e72aca3a0acda97
https://github.com/scummvm/scummvm/commit/0c1f5c7f2fb8877bbc4d0d3e6e72aca3a0acda97
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Properly handle exit from menu button
Changed paths:
engines/lastexpress/lastexpress.cpp
engines/lastexpress/lastexpress.h
engines/lastexpress/menu/menu.cpp
diff --git a/engines/lastexpress/lastexpress.cpp b/engines/lastexpress/lastexpress.cpp
index 45d3d35b4fa..37c81be2bd8 100644
--- a/engines/lastexpress/lastexpress.cpp
+++ b/engines/lastexpress/lastexpress.cpp
@@ -537,8 +537,11 @@ bool LastExpressEngine::handleEvents() {
case Common::EVENT_QUIT:
case Common::EVENT_RETURN_TO_LAUNCHER:
- getMessageManager()->addEvent(4, 0, 0, 1);
- _pendingExitEvent = true;
+ if (!_exitFromMenuButton) {
+ getMessageManager()->addEvent(4, 0, 0, 1);
+ _pendingExitEvent = true;
+ }
+
break;
default:
diff --git a/engines/lastexpress/lastexpress.h b/engines/lastexpress/lastexpress.h
index 3e66ed232e2..eddc546001d 100644
--- a/engines/lastexpress/lastexpress.h
+++ b/engines/lastexpress/lastexpress.h
@@ -609,6 +609,7 @@ public:
Common::Point _systemEventLastMouseCoords;
bool _pendingExitEvent = false;
+ bool _exitFromMenuButton = false;
Seq *_doorSeqs[8] = { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr };
Seq *_clockHandsSeqs[2] = { nullptr, nullptr };
diff --git a/engines/lastexpress/menu/menu.cpp b/engines/lastexpress/menu/menu.cpp
index f21091aca78..b70fefaa79f 100644
--- a/engines/lastexpress/menu/menu.cpp
+++ b/engines/lastexpress/menu/menu.cpp
@@ -310,6 +310,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
endEgg();
_engine->quitGame();
+ _engine->_exitFromMenuButton = true;
} else {
setSprite(2, 10, true);
return true;
Commit: 3eed404feab47a8ad72b26339b81a03651ccf703
https://github.com/scummvm/scummvm/commit/3eed404feab47a8ad72b26339b81a03651ccf703
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Add MouseFlags enum and relabel some flags accordingly
Changed paths:
engines/lastexpress/game/events.cpp
engines/lastexpress/game/navigation.cpp
engines/lastexpress/lastexpress.cpp
engines/lastexpress/menu/menu.cpp
engines/lastexpress/shared.h
diff --git a/engines/lastexpress/game/events.cpp b/engines/lastexpress/game/events.cpp
index 60cf2567c58..997f0625f93 100644
--- a/engines/lastexpress/game/events.cpp
+++ b/engines/lastexpress/game/events.cpp
@@ -68,48 +68,48 @@ void MessageManager::addEvent(int channel, int x, int y, int flags) {
if (channel == 3) {
_engine->setEventTickInternal(true);
} else if (channel == 1) {
- if ((flags & 1) != 0) {
+ if ((flags & kMouseFlagLeftButton) != 0) {
// Originally _engine->mouseSetLeftClicked(true); was called from here,
// but it's been moved under the "if" because this lead to fake double
// clicks when registering mouse movement events (which are re-paired
// with RMOUSE and LMOUSE flags when sent to the engine via this function).
if (!_systemEventLeftMouseDown) {
_engine->mouseSetLeftClicked(true);
- flags |= 0x8;
+ flags |= kMouseFlagLeftDown;
_systemEventLeftMouseDown = true;
if (_doubleClickMaxFrames + _latestTickLeftMousePressed > _engine->getSoundFrameCounter())
- flags |= (0x20 | 0x8);
+ flags |= (kMouseFlagDoubleClick | kMouseFlagLeftDown);
_latestTickLeftMousePressed = _engine->getSoundFrameCounter();
}
} else {
if (_systemEventLeftMouseDown)
- flags |= 0x80;
+ flags |= kMouseFlagLeftUp;
_systemEventLeftMouseDown = false;
}
- if ((flags & 2) != 0) {
+ if ((flags & kMouseFlagRightButton) != 0) {
// Originally _engine->mouseSetRightClicked(true); was called from here,
// but it's been moved under the "if" because this lead to fake double
// clicks when registering mouse movement events (which are re-paired
// with RMOUSE and LMOUSE flags when sent to the engine via this function).
if (!_systemEventRightMouseDown) {
_engine->mouseSetRightClicked(true);
- flags |= 0x10;
+ flags |= kMouseFlagRightDown;
_systemEventRightMouseDown = true;
}
} else {
if (_systemEventRightMouseDown)
- flags |= 0x100;
+ flags |= kMouseFlagRightUp;
_systemEventRightMouseDown = false;
}
// Originally "if (!flags)"; this tames slowdowns when dragging the mouse
// with one of the buttons pressed. Hopefully it doesn't break anything...
- if (!flags || ((flags & 0x01) != 0 || (flags & 0x02) != 0)) {
+ if (!flags || ((flags & kMouseFlagLeftButton) != 0 || (flags & kMouseFlagRightButton) != 0)) {
if (_lastEventIndex != 128)
_events[_lastEventIndex].channel = 0;
diff --git a/engines/lastexpress/game/navigation.cpp b/engines/lastexpress/game/navigation.cpp
index a5a689f4cb7..700dde9fc6a 100644
--- a/engines/lastexpress/game/navigation.cpp
+++ b/engines/lastexpress/game/navigation.cpp
@@ -423,15 +423,15 @@ void LogicManager::nodeStepMouse(Event *event) {
_engine->mouseSetLeftClicked(false);
_engine->mouseSetRightClicked(false);
- if ((event->flags & 8) != 0) {
- if ((event->flags & 0x20) != 0 && _engine->_fastWalkJustDeactivated)
- event->flags &= ~0x20;
+ if ((event->flags & kMouseFlagLeftDown) != 0) {
+ if ((event->flags & kMouseFlagDoubleClick) != 0 && _engine->_fastWalkJustDeactivated)
+ event->flags &= ~kMouseFlagDoubleClick;
_engine->_fastWalkJustDeactivated = false;
}
if (_doubleClickFlag) {
- if ((event->flags & 0x18) != 0) {
+ if ((event->flags & (kMouseFlagRightDown | kMouseFlagLeftDown)) != 0) {
_doubleClickFlag = false;
_engine->getGraphicsManager()->setMouseDrawable(true);
mouseStatus();
@@ -441,7 +441,7 @@ void LogicManager::nodeStepMouse(Event *event) {
return;
}
- if ((event->flags & 0x20) != 0 && _engine->getOtisManager()->walkingRender() && _engine->_cursorType == 1) {
+ if ((event->flags & kMouseFlagDoubleClick) != 0 && _engine->getOtisManager()->walkingRender() && _engine->_cursorType == kCursorForward) {
_engine->getGraphicsManager()->setMouseDrawable(false);
_engine->getGraphicsManager()->burstMouseArea();
_doubleClickFlag = true;
@@ -481,13 +481,13 @@ void LogicManager::nodeStepMouse(Event *event) {
actionLink.left = 1;
_engine->_cursorType = _items[getCharacter(foundCharacter).inventoryItem & 0x7F].mnum;
- if ((event->flags & 8) != 0)
+ if ((event->flags & kMouseFlagLeftDown) != 0)
send(kCharacterCath, foundCharacter, 1, getCharacter(foundCharacter).inventoryItem & 0x7F);
} else if ((getCharacter(foundCharacter).inventoryItem & 0x80) != 0) {
actionLink.left = 1;
_engine->_cursorType = 15;
- if ((event->flags & 8) != 0)
+ if ((event->flags & kMouseFlagLeftDown) != 0)
send(kCharacterCath, foundCharacter, 1, 0);
}
}
@@ -529,7 +529,7 @@ void LogicManager::nodeStepMouse(Event *event) {
actionLink.copyFrom(foundLink);
- if ((event->flags & 8) != 0 && !_actionJustPerformed) {
+ if ((event->flags & kMouseFlagLeftDown) != 0 && !_actionJustPerformed) {
_actionJustPerformed = true;
doAction(&actionLink);
@@ -548,7 +548,7 @@ void LogicManager::nodeStepMouse(Event *event) {
if (!_engine->isDemo() && actionLink.action == 43 &&
actionLink.param1 == _globals[kProgressChapter] &&
- (event->flags & 2) != 0) {
+ (event->flags & kMouseFlagRightButton) != 0) {
doF4();
return;
}
@@ -560,7 +560,7 @@ void LogicManager::nodeStepMouse(Event *event) {
} else {
_engine->_cursorType = _items[kItemMatch].mnum;
- if ((event->flags & 8) != 0) {
+ if ((event->flags & kMouseFlagLeftDown) != 0) {
if (isNight()) {
playNIS(kEventCathSmokeNight);
} else {
@@ -582,7 +582,7 @@ void LogicManager::nodeStepMouse(Event *event) {
}
} else {
_engine->_cursorType = _items[kItemWhistle].mnum;
- if ((event->flags & 8) != 0 && !dialogRunning("LIB045")) {
+ if ((event->flags & kMouseFlagLeftDown) != 0 && !dialogRunning("LIB045")) {
queueSFX(kCharacterCath, 45, 0);
if (checkCathDir(kCarGreenSleeping, 26) ||
@@ -706,14 +706,14 @@ void LogicManager::checkInventory(int32 flags) {
_isEggHighlighted = true;
}
- if ((flags & 8) != 0) {
+ if ((flags & kMouseFlagLeftDown) != 0) {
_isEggHighlighted = false;
_inventoryFlag1 = false;
_inventoryFlag2 = false;
_engine->getSoundManager()->playSoundFile("LIB039.SND", kSoundTypeMenu | kVolumeFull, 0, 0);
_engine->getMenu()->doEgg(true, 0, 0);
- } else if ((flags & 0x10) != 0 && _engine->_gracePeriodTimer) {
+ } else if ((flags & kMouseFlagRightDown) != 0 && _engine->_gracePeriodTimer) {
if (dialogRunning("TIMER"))
endDialog("TIMER");
@@ -723,7 +723,7 @@ void LogicManager::checkInventory(int32 flags) {
if (_engine->_cursorX >= 32) {
if (_inventoryFlag2) {
- if ((flags & 1) != 0) {
+ if ((flags & kMouseFlagLeftButton) != 0) {
if (_highlightedItem) {
int count = 0;
@@ -802,7 +802,7 @@ void LogicManager::checkInventory(int32 flags) {
_isMagnifierInUse = 1;
}
- if ((flags & 8) == 0)
+ if ((flags & kMouseFlagLeftDown) == 0)
return;
if (!_closeUp) {
@@ -834,7 +834,7 @@ void LogicManager::checkInventory(int32 flags) {
return;
}
- if ((flags & 1) != 0) {
+ if ((flags & kMouseFlagLeftButton) != 0) {
int itemToHighlight = _engine->_cursorY / 40;
if (_highlightedItem && itemToHighlight != _highlightedItem) {
int count = 0;
@@ -981,7 +981,7 @@ void LogicManager::checkInventory(int32 flags) {
return;
}
- if ((flags & 8) != 0) {
+ if ((flags & kMouseFlagLeftDown) != 0) {
_inventoryFlag1 = false;
_inventoryFlag2 = true;
_engine->getGraphicsManager()->drawItem(_globals[kProgressPortrait] + 1, 0, 0);
@@ -1003,7 +1003,7 @@ void LogicManager::checkInventory(int32 flags) {
_engine->getGraphicsManager()->burstBox(0, 0, 32, 32);
_inventoryFlag1 = true;
- } else if (_inventoryFlag2 && (flags & 1) == 0) {
+ } else if (_inventoryFlag2 && (flags & kMouseFlagLeftButton) == 0) {
if (_inventoryFlag2) {
_inventoryFlag2 = false;
diff --git a/engines/lastexpress/lastexpress.cpp b/engines/lastexpress/lastexpress.cpp
index 37c81be2bd8..286f39f17d6 100644
--- a/engines/lastexpress/lastexpress.cpp
+++ b/engines/lastexpress/lastexpress.cpp
@@ -481,10 +481,10 @@ bool LastExpressEngine::handleEvents() {
case Common::EVENT_LBUTTONDOWN:
_systemEventLeftMouseDown = true;
- curFlags |= 1;
+ curFlags |= kMouseFlagLeftButton;
if (_systemEventRightMouseDown)
- curFlags |= 2;
+ curFlags |= kMouseFlagRightButton;
getMessageManager()->addEvent(1, ev.mouse.x, ev.mouse.y, curFlags);
break;
@@ -492,17 +492,17 @@ bool LastExpressEngine::handleEvents() {
_systemEventLeftMouseDown = false;
if (_systemEventRightMouseDown)
- curFlags |= 2;
+ curFlags |= kMouseFlagRightButton;
getMessageManager()->addEvent(1, ev.mouse.x, ev.mouse.y, curFlags);
break;
case Common::EVENT_RBUTTONDOWN:
_systemEventRightMouseDown = true;
- curFlags |= 2;
+ curFlags |= kMouseFlagRightButton;
if (_systemEventLeftMouseDown)
- curFlags |= 1;
+ curFlags |= kMouseFlagLeftButton;
getMessageManager()->addEvent(1, ev.mouse.x, ev.mouse.y, curFlags);
break;
@@ -510,7 +510,7 @@ bool LastExpressEngine::handleEvents() {
_systemEventRightMouseDown = false;
if (_systemEventLeftMouseDown)
- curFlags |= 1;
+ curFlags |= kMouseFlagLeftButton;
getMessageManager()->addEvent(1, ev.mouse.x, ev.mouse.y, curFlags);
break;
@@ -523,10 +523,10 @@ bool LastExpressEngine::handleEvents() {
// works out nicely for them...
if (!getLogicManager()->_doubleClickFlag) {
if (_systemEventLeftMouseDown)
- curFlags |= 1;
+ curFlags |= kMouseFlagLeftButton;
if (_systemEventRightMouseDown)
- curFlags |= 2;
+ curFlags |= kMouseFlagRightButton;
}
_systemEventLastMouseCoords.x = ev.mouse.x;
diff --git a/engines/lastexpress/menu/menu.cpp b/engines/lastexpress/menu/menu.cpp
index b70fefaa79f..e5b4f18437b 100644
--- a/engines/lastexpress/menu/menu.cpp
+++ b/engines/lastexpress/menu/menu.cpp
@@ -145,16 +145,16 @@ void Menu::eggMouse(Event *event) {
_engine->getGraphicsManager()->burstMouseArea(false); // The original updated the screen, we don't to avoid flickering...
_engine->_cursorX = event->x;
_engine->_cursorY = event->y;
- _eggCurrentMouseFlags = (event->flags & 1) != 0;
+ _eggCurrentMouseFlags = (event->flags & kMouseFlagLeftButton) != 0;
_engine->_cursorType = 0;
if (_engine->_doShowCredits) {
- if ((event->flags & 0x10) != 0) {
+ if ((event->flags & kMouseFlagRightDown) != 0) {
setSprite(7, -1, true);
_engine->_doShowCredits = false;
}
- if ((event->flags & 8) != 0) {
+ if ((event->flags & kMouseFlagLeftDown) != 0) {
if (_eggCreditsIndex == _menuSeqs[7]->numFrames - 1) {
setSprite(7, -1, true);
_engine->_doShowCredits = false;
@@ -174,10 +174,10 @@ void Menu::eggMouse(Event *event) {
}
}
- if (foundLink != _currentHotspotLink || (event->flags & 8) != 0 || (event->flags & 0x80) != 0) {
+ if (foundLink != _currentHotspotLink || (event->flags & kMouseFlagLeftDown) != 0 || (event->flags & kMouseFlagLeftUp) != 0) {
_currentHotspotLink = foundLink;
- if ((event->flags & 0x80) != 0 && !_moveClockHandsFlag && _engine->getClock()->statusClock())
+ if ((event->flags & kMouseFlagLeftUp) != 0 && !_moveClockHandsFlag && _engine->getClock()->statusClock())
_engine->getVCR()->stop();
if (foundLink) {
@@ -259,7 +259,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
return true;
}
- if ((flags & 8) != 0) {
+ if ((flags & kMouseFlagLeftDown) != 0) {
setSprite(1, 6, true);
setSprite(0, -1, true);
@@ -278,7 +278,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
return true;
} else {
- if ((flags & 0x80) != 0)
+ if ((flags & kMouseFlagLeftUp) != 0)
return true;
setSprite(1, 5, true);
@@ -289,7 +289,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
case kMenuActionQuit:
setSprite(0, 12, true);
- if ((flags & 8) != 0) {
+ if ((flags & kMouseFlagLeftDown) != 0) {
setSprite(2, 11, true);
_engine->getSoundManager()->killAllSlots();
@@ -326,7 +326,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
return true;
}
- if ((flags & 8) != 0)
+ if ((flags & kMouseFlagLeftDown) != 0)
_engine->_currentSavePoint = 0;
}
@@ -353,7 +353,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
}
}
- if ((flags & 8) == 0)
+ if ((flags & kMouseFlagLeftDown) == 0)
return true;
_engine->getLogicManager()->loadTrain(whichCD);
@@ -399,7 +399,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
setSprite(0, whichCD - 1, true);
}
- if ((flags & 8) == 0)
+ if ((flags & kMouseFlagLeftDown) == 0)
return true;
if (!_engine->getArchiveManager()->lockCD(whichCD))
@@ -495,15 +495,14 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
}
if (_engine->isDemo()) {
- // Demo: simplified implementation
- if ((flags & 0x88) != 0)
+ if ((flags & (kMouseFlagLeftDown | kMouseFlagLeftUp)) != 0)
return true;
setSprite(3, 0, true);
setSprite(0, 7, true);
return true;
} else {
- if ((flags & 8) != 0) {
+ if ((flags & kMouseFlagLeftDown) != 0) {
setSprite(3, 1, true);
setSprite(0, -1, true);
@@ -515,7 +514,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
return true;
}
- if ((flags & 0x80) != 0)
+ if ((flags & kMouseFlagLeftUp) != 0)
return true;
setSprite(3, 0, true);
@@ -559,8 +558,8 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
return true;
}
- if ((flags & 1) != 0) {
- if ((flags & 8) == 0)
+ if ((flags & kMouseFlagLeftButton) != 0) {
+ if ((flags & kMouseFlagLeftDown) == 0)
return true;
if (_engine->getClock()->statusClock())
@@ -581,7 +580,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
} else {
setSprite(1, 1, true);
- if ((flags & 0x80) == 0)
+ if ((flags & kMouseFlagLeftUp) == 0)
setSprite(0, 34, true);
}
@@ -597,8 +596,8 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
return true;
}
- if ((flags & 1) != 0) {
- if ((flags & 8) == 0)
+ if ((flags & kMouseFlagLeftButton) != 0) {
+ if ((flags & kMouseFlagLeftDown) == 0)
return true;
if (_engine->getClock()->statusClock())
@@ -619,7 +618,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
} else {
setSprite(1, 3, true);
- if ((flags & 0x80) == 0)
+ if ((flags & kMouseFlagLeftUp) == 0)
setSprite(0, 33, true);
}
@@ -634,13 +633,13 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
if (_engine->isDemo()) {
// Demo doesn't implement time seeking...
- if ((flags & 0x88) != 0)
+ if ((flags & (kMouseFlagLeftDown | kMouseFlagLeftUp)) != 0)
return true;
setSprite(0, 13, true);
return true;
} else {
- if ((flags & 8) != 0) {
+ if ((flags & kMouseFlagLeftDown) != 0) {
setSprite(0, -1, true);
_engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
@@ -650,7 +649,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
return true;
}
- if ((flags & 0x80) != 0)
+ if ((flags & kMouseFlagLeftUp) != 0)
return true;
setSprite(0, 13, true);
@@ -667,7 +666,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
if (_engine->isDemo()) {
// Demo doesn't implement time seeking...
- if ((flags & 0x88) != 0)
+ if ((flags & (kMouseFlagLeftDown | kMouseFlagLeftUp)) != 0)
return true;
if (_engine->getClock()->getTimeShowing() <= 1490400) {
@@ -678,7 +677,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
return true;
} else {
- if ((flags & 8) != 0) {
+ if ((flags & kMouseFlagLeftDown) != 0) {
setSprite(0, -1, true);
_engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
@@ -688,7 +687,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
return true;
}
- if ((flags & 0x80) != 0)
+ if ((flags & kMouseFlagLeftUp) != 0)
return true;
if (_engine->getClock()->getTimeShowing() <= 1490400) {
@@ -709,7 +708,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
if (_engine->isDemo()) {
// Demo doesn't implement time seeking...
- if ((flags & 0x88) != 0)
+ if ((flags & (kMouseFlagLeftDown | kMouseFlagLeftUp)) != 0)
return true;
if (_engine->getClock()->getTimeShowing() <= 1852200) {
@@ -720,7 +719,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
return true;
} else {
- if ((flags & 8) != 0) {
+ if ((flags & kMouseFlagLeftDown) != 0) {
setSprite(0, -1, true);
_engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
@@ -730,7 +729,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
return true;
}
- if ((flags & 0x80) != 0)
+ if ((flags & kMouseFlagLeftUp) != 0)
return true;
if (_engine->getClock()->getTimeShowing() <= 1852200) {
@@ -754,7 +753,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
setCity(3);
- if ((flags & 8) != 0) {
+ if ((flags & kMouseFlagLeftDown) != 0) {
setSprite(0, -1, true);
_engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
@@ -764,7 +763,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
return true;
}
- if ((flags & 0x80) != 0)
+ if ((flags & kMouseFlagLeftUp) != 0)
return true;
if (_engine->getClock()->getTimeShowing() <= 2268000) {
@@ -787,7 +786,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
setCity(4);
- if ((flags & 8) != 0) {
+ if ((flags & kMouseFlagLeftDown) != 0) {
setSprite(0, -1, true);
_engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
@@ -797,7 +796,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
return true;
}
- if ((flags & 0x80) != 0)
+ if ((flags & kMouseFlagLeftUp) != 0)
return true;
if (_engine->getClock()->getTimeShowing() <= 2551500) {
@@ -820,7 +819,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
setCity(5);
- if ((flags & 8) != 0) {
+ if ((flags & kMouseFlagLeftDown) != 0) {
setSprite(0, -1, true);
_engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
@@ -830,7 +829,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
return true;
}
- if ((flags & 0x80) != 0)
+ if ((flags & kMouseFlagLeftUp) != 0)
return true;
if (_engine->getClock()->getTimeShowing() <= 2952000) {
@@ -853,7 +852,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
setCity(6);
- if ((flags & 8) != 0) {
+ if ((flags & kMouseFlagLeftDown) != 0) {
setSprite(0, -1, true);
_engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
@@ -863,7 +862,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
return true;
}
- if ((flags & 0x80) != 0)
+ if ((flags & kMouseFlagLeftUp) != 0)
return true;
setSprite(0, 24, true);
@@ -883,7 +882,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
setSprite(0, 9, true);
- if ((flags & 8) == 0) {
+ if ((flags & kMouseFlagLeftDown) == 0) {
setSprite(2, 1, true);
return true;
}
@@ -922,7 +921,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
} else {
setSprite(0, 8, true);
- if ((flags & 8) != 0) {
+ if ((flags & kMouseFlagLeftDown) != 0) {
if (_engine->isDemo()) {
_engine->getSoundManager()->playSoundFile("LIB046.SND", 16, 0, 0);
} else {
@@ -963,7 +962,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
setSprite(0, 11, true);
- if ((flags & 8) == 0) {
+ if ((flags & kMouseFlagLeftDown) == 0) {
setSprite(2, 6, true);
return true;
}
@@ -1014,7 +1013,7 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
} else {
setSprite(0, 10, true);
- if ((flags & 8) != 0) {
+ if ((flags & kMouseFlagLeftDown) != 0) {
setSprite(2, 9, true);
if (_engine->isDemo()) {
diff --git a/engines/lastexpress/shared.h b/engines/lastexpress/shared.h
index 48c184f3f5c..79ad830d0f7 100644
--- a/engines/lastexpress/shared.h
+++ b/engines/lastexpress/shared.h
@@ -175,6 +175,16 @@ enum SoundDriverFlag : uint {
kSoundDriverStarted = 0x8000
};
+enum MouseFlags : int {
+ kMouseFlagLeftButton = 0x1,
+ kMouseFlagRightButton = 0x2,
+ kMouseFlagLeftDown = 0x8,
+ kMouseFlagRightDown = 0x10,
+ kMouseFlagDoubleClick = 0x20,
+ kMouseFlagLeftUp = 0x80,
+ kMouseFlagRightUp = 0x100
+};
+
enum NisFlags : uint {
kNisFlagHasSound = 0x1, // Set when a valid NIS sound exists
kNisFlagDataChunksAvailable = 0x100, // Used during initialization and chunk loading
Commit: 4bcec43eae8d25e4466d055adbe1b62736ade13b
https://github.com/scummvm/scummvm/commit/4bcec43eae8d25e4466d055adbe1b62736ade13b
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-16T23:12:18+02:00
Commit Message:
LASTEXPRESS: Remove "imgui" flag from required engine components
Changed paths:
engines/lastexpress/configure.engine
diff --git a/engines/lastexpress/configure.engine b/engines/lastexpress/configure.engine
index debb4b3f111..fd666b98b55 100644
--- a/engines/lastexpress/configure.engine
+++ b/engines/lastexpress/configure.engine
@@ -1,3 +1,3 @@
# This file is included from the main "configure" script
# add_engine [name] [desc] [build-by-default] [subengines] [base games] [deps] [components]
-add_engine lastexpress "The Last Express" no "" "" "imgui 16bit highres"
+add_engine lastexpress "The Last Express" no "" "" "16bit highres"
More information about the Scummvm-git-logs
mailing list