diff options
Diffstat (limited to 'engines/lastexpress/entities/chapters.cpp')
-rw-r--r-- | engines/lastexpress/entities/chapters.cpp | 76 |
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)) { |