aboutsummaryrefslogtreecommitdiff
path: root/engines/lastexpress/entities/chapters.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/lastexpress/entities/chapters.cpp')
-rw-r--r--engines/lastexpress/entities/chapters.cpp76
1 files changed, 43 insertions, 33 deletions
diff --git a/engines/lastexpress/entities/chapters.cpp b/engines/lastexpress/entities/chapters.cpp
index 0e027f8bf0..a057da23d3 100644
--- a/engines/lastexpress/entities/chapters.cpp
+++ b/engines/lastexpress/entities/chapters.cpp
@@ -411,18 +411,28 @@ IMPLEMENT_FUNCTION(8, Chapters, chapter1Handler)
label_processStations:
// Process stations
- TIME_CHECK_SAVEGAME(kTime1039500, params->param7, 1, kSavegameTypeTime, kTimeNone);
+ TIME_CHECK_CALLBACK_2(kTime1039500, params->param7, 1, setup_savegame, kSavegameTypeTime, kTimeNone);
label_enter_epernay:
// Entering Epernay station
- TIME_CHECK_ENTERSTATION(kTimeEnterEpernay, params->param8, 1, "Epernay", kCityEpernay);
+ TIME_CHECK_CALLBACK_2(kTimeEnterEpernay, params->param8, 1, setup_enterStation, "Epernay", kCityEpernay);
label_exit_epernay:
// Exiting Epernay station
- TIME_CHECK_EXITSTATION_2(kTimeExitEpernay, CURRENT_PARAM(1, 1), params->param4, 3, "Epernay");
+ if (getState()->time > kTimeExitEpernay && !CURRENT_PARAM(1, 1)) {
+ CURRENT_PARAM(1, 1) = 1;
+ params->param4 = 1;
+ setCallback(3);
+ setup_exitStation("Epernay");
+ break;
+ }
label_epernay_police:
- TIME_CHECK_EXITSTATION_0(params->param5, ENTITY_PARAM(0, 2), 4, "Unschedu");
+ if (params->param5 && !ENTITY_PARAM(0, 2)) {
+ setCallback(4);
+ setup_exitStation("Unschedu");
+ break;
+ }
label_enter_chalons:
if (getState()->time > kTimeEnterChalons && !CURRENT_PARAM(1, 2)) {
@@ -435,19 +445,19 @@ label_enter_chalons:
goto label_exit_strasbourg;
// Entering Chalons station
- TIME_CHECK_ENTERSTATION(kTimeEnterChalons, CURRENT_PARAM(1, 3), 5, "Chalons", kCityChalons);
+ TIME_CHECK_CALLBACK_2(kTimeEnterChalons, CURRENT_PARAM(1, 3), 5, setup_enterStation, "Chalons", kCityChalons);
label_exit_chalons:
// Exiting Chalons station
- TIME_CHECK_EXITSTATION(kTimeExitChalons, CURRENT_PARAM(1, 4), 6, "Chalons");
+ TIME_CHECK_CALLBACK_1(kTimeExitChalons, CURRENT_PARAM(1, 4), 6, setup_exitStation, "Chalons");
label_enter_barleduc:
// Entering Bar-Le-Duc station
- TIME_CHECK_ENTERSTATION(kTimeCityBarLeDuc, CURRENT_PARAM(1, 5), 7, "BarLeDuc", kCityBarleduc);
+ TIME_CHECK_CALLBACK_2(kTimeCityBarLeDuc, CURRENT_PARAM(1, 5), 7, setup_enterStation, "BarLeDuc", kCityBarleduc);
label_exit_barleduc:
// Exiting Bar-Le-Duc station
- TIME_CHECK_EXITSTATION(kTimeExitBarLeDuc, CURRENT_PARAM(1, 6), 8, "BarLeDuc");
+ TIME_CHECK_CALLBACK_1(kTimeExitBarLeDuc, CURRENT_PARAM(1, 6), 8, setup_exitStation, "BarLeDuc");
label_enter_nancy:
if (getState()->time > kTime1260000 && !CURRENT_PARAM(1, 7)) {
@@ -456,50 +466,50 @@ label_enter_nancy:
}
// Entering Nancy station
- TIME_CHECK_ENTERSTATION(kTimeCityNancy, CURRENT_PARAM(1, 8), 9, "Nancy", kCityNancy);
+ TIME_CHECK_CALLBACK_2(kTimeCityNancy, CURRENT_PARAM(1, 8), 9, setup_enterStation, "Nancy", kCityNancy);
label_exit_nancy:
// Exiting Nancy station
- TIME_CHECK_EXITSTATION(kTimeExitNancy, CURRENT_PARAM(2, 1), 10, "Nancy");
+ TIME_CHECK_CALLBACK_1(kTimeExitNancy, CURRENT_PARAM(2, 1), 10, setup_exitStation, "Nancy");
label_enter_luneville:
// Entering Luneville station
- TIME_CHECK_ENTERSTATION(kTimeCityLuneville, CURRENT_PARAM(2, 2), 11, "Luneville", kCityLuneville);
+ TIME_CHECK_CALLBACK_2(kTimeCityLuneville, CURRENT_PARAM(2, 2), 11, setup_enterStation, "Luneville", kCityLuneville);
label_exit_luneville:
// Exiting Luneville station
- TIME_CHECK_EXITSTATION(kTimeExitLuneville, CURRENT_PARAM(2, 3), 12, "Luneville");
+ TIME_CHECK_CALLBACK_1(kTimeExitLuneville, CURRENT_PARAM(2, 3), 12, setup_exitStation, "Luneville");
label_enter_avricourt:
// Entering Avricourt station
- TIME_CHECK_ENTERSTATION(kTimeCityAvricourt, CURRENT_PARAM(2, 4), 13, "Avricourt", kCityAvricourt);
+ TIME_CHECK_CALLBACK_2(kTimeCityAvricourt, CURRENT_PARAM(2, 4), 13, setup_enterStation, "Avricourt", kCityAvricourt);
label_exit_avricourt:
// Exiting Avricourt station
- TIME_CHECK_EXITSTATION(kTimeExitAvricourt, CURRENT_PARAM(2, 5), 14, "Avricourt");
+ TIME_CHECK_CALLBACK_1(kTimeExitAvricourt, CURRENT_PARAM(2, 5), 14, setup_exitStation, "Avricourt");
label_enter_deutschavricourt:
// Entering Deutsch-Avricourt station
- TIME_CHECK_ENTERSTATION(kTimeCityDeutschAvricourt, CURRENT_PARAM(2, 6), 15, "DeutschA", kCityDeutschAvricourt);
+ TIME_CHECK_CALLBACK_2(kTimeCityDeutschAvricourt, CURRENT_PARAM(2, 6), 15, setup_enterStation, "DeutschA", kCityDeutschAvricourt);
label_exit_deutschavricourt:
// Exiting Avricourt station
- TIME_CHECK_EXITSTATION(kTimeExitDeutschAvricourt, CURRENT_PARAM(2, 7), 16, "DeutschA");
+ TIME_CHECK_CALLBACK_1(kTimeExitDeutschAvricourt, CURRENT_PARAM(2, 7), 16, setup_exitStation, "DeutschA");
label_enter_strasbourg:
- TIME_CHECK_SAVEGAME(kTimeCityStrasbourg, CURRENT_PARAM(2, 8), 17, kSavegameTypeTime, kTimeNone);
+ TIME_CHECK_CALLBACK_2(kTimeCityStrasbourg, CURRENT_PARAM(2, 8), 17, setup_savegame, kSavegameTypeTime, kTimeNone);
label_exit_strasbourg:
// Exiting Strasbourg station
- TIME_CHECK_EXITSTATION(kTimeExitStrasbourg, CURRENT_PARAM(3, 1), 19, "Strasbou");
+ TIME_CHECK_CALLBACK_1(kTimeExitStrasbourg, CURRENT_PARAM(3, 1), 19, setup_exitStation, "Strasbou");
label_enter_badenoos:
// Entering Baden Oos station
- TIME_CHECK_ENTERSTATION(kTimeCityBadenOos, CURRENT_PARAM(3, 2), 20, "BadenOos", kCityBadenOos);
+ TIME_CHECK_CALLBACK_2(kTimeCityBadenOos, CURRENT_PARAM(3, 2), 20, setup_enterStation, "BadenOos", kCityBadenOos);
label_exit_badenoos:
// Exiting Baden Oos station
- TIME_CHECK_EXITSTATION(kTimeExitBadenOos, CURRENT_PARAM(3, 3), 21, "BadenOos");
+ TIME_CHECK_CALLBACK_1(kTimeExitBadenOos, CURRENT_PARAM(3, 3), 21, setup_exitStation, "BadenOos");
label_chapter1_next:
if (getState()->time > kTimeChapter1End3 && ! CURRENT_PARAM(3, 4)) {
@@ -919,28 +929,28 @@ IMPLEMENT_FUNCTION(15, Chapters, chapter3Handler)
params->param5 = 0;
UPDATE_PARAM_PROC_END
- TIME_CHECK_ENTERSTATION(kTimeEnterSalzbourg, params->param6, 1, "Salzburg", kCitySalzbourg);
+ TIME_CHECK_CALLBACK_2(kTimeEnterSalzbourg, params->param6, 1, setup_enterStation, "Salzburg", kCitySalzbourg);
label_callback_1:
- TIME_CHECK_EXITSTATION(kTimeExitSalzbourg, params->param7, 2, "Salzburg");
+ TIME_CHECK_CALLBACK_1(kTimeExitSalzbourg, params->param7, 2, setup_exitStation, "Salzburg");
label_callback_2:
- TIME_CHECK_ENTERSTATION(kTimeEnterAttnangPuchheim, params->param8, 3, "Attnang", kCityAttnangPuchheim);
+ TIME_CHECK_CALLBACK_2(kTimeEnterAttnangPuchheim, params->param8, 3, setup_enterStation, "Attnang", kCityAttnangPuchheim);
label_callback_3:
- TIME_CHECK_EXITSTATION(kTimeExitAttnangPuchheim, CURRENT_PARAM(1, 1), 4, "Attnang");
+ TIME_CHECK_CALLBACK_1(kTimeExitAttnangPuchheim, CURRENT_PARAM(1, 1), 4, setup_exitStation, "Attnang");
label_callback_4:
- TIME_CHECK_ENTERSTATION(kTimeEnterWels, CURRENT_PARAM(1, 2), 5, "Wels", kCityWels);
+ TIME_CHECK_CALLBACK_2(kTimeEnterWels, CURRENT_PARAM(1, 2), 5, setup_enterStation, "Wels", kCityWels);
label_callback_5:
- TIME_CHECK_EXITSTATION(kTimeEnterWels, CURRENT_PARAM(1, 3), 6, "Wels");
+ TIME_CHECK_CALLBACK_1(kTimeEnterWels, CURRENT_PARAM(1, 3), 6, setup_exitStation, "Wels");
label_callback_6:
- TIME_CHECK_ENTERSTATION(kTimeEnterLinz, CURRENT_PARAM(1, 4), 7, "Linz", kCityLinz);
+ TIME_CHECK_CALLBACK_2(kTimeEnterLinz, CURRENT_PARAM(1, 4), 7, setup_enterStation, "Linz", kCityLinz);
label_callback_7:
- TIME_CHECK_EXITSTATION(kTimeCityLinz, CURRENT_PARAM(1, 5), 8, "Linz");
+ TIME_CHECK_CALLBACK_1(kTimeCityLinz, CURRENT_PARAM(1, 5), 8, setup_exitStation, "Linz");
label_callback_8:
if (getState()->time > kTime2187000 && !CURRENT_PARAM(1, 6)) {
@@ -948,7 +958,7 @@ label_callback_8:
getState()->timeDelta = 5;
}
- TIME_CHECK_ENTERSTATION(kTimeCityVienna, CURRENT_PARAM(1, 7), 9, "Vienna", kCityVienna);
+ TIME_CHECK_CALLBACK_2(kTimeCityVienna, CURRENT_PARAM(1, 7), 9, setup_enterStation, "Vienna", kCityVienna);
break;
case kActionEndSound:
@@ -1217,10 +1227,10 @@ IMPLEMENT_FUNCTION(19, Chapters, chapter4Handler)
params->param7 = 0;
UPDATE_PARAM_PROC_END
- TIME_CHECK_ENTERSTATION(kTimeEnterPoszony, params->param8, 1, "Pozsony", kCityPoszony);
+ TIME_CHECK_CALLBACK_2(kTimeEnterPoszony, params->param8, 1, setup_enterStation, "Pozsony", kCityPoszony);
label_exitPozsony:
- TIME_CHECK_EXITSTATION(kTimeExitPoszony, CURRENT_PARAM(1, 1), 2, "Pozsony");
+ TIME_CHECK_CALLBACK_1(kTimeExitPoszony, CURRENT_PARAM(1, 1), 2, setup_exitStation, "Pozsony");
label_enterGalanta:
if (getObjects()->get(kObjectCompartment1).location2 == kObjectLocation1) {
@@ -1233,10 +1243,10 @@ label_enterGalanta:
if (params->param1)
goto label_callback_4;
- TIME_CHECK_ENTERSTATION(kTimeEnterGalanta, CURRENT_PARAM(1, 3), 3, "Galanta", kCityGalanta);
+ TIME_CHECK_CALLBACK_2(kTimeEnterGalanta, CURRENT_PARAM(1, 3), 3, setup_enterStation, "Galanta", kCityGalanta);
label_exitGalanta:
- TIME_CHECK_EXITSTATION(kTimeExitGalanta, CURRENT_PARAM(1, 4), 4, "Galanta");
+ TIME_CHECK_CALLBACK_1(kTimeExitGalanta, CURRENT_PARAM(1, 4), 4, setup_exitStation, "Galanta");
label_callback_4:
if (getState()->time > kTime2470500 && !CURRENT_PARAM(1, 5)) {