aboutsummaryrefslogtreecommitdiff
path: root/engines/lastexpress/entities
diff options
context:
space:
mode:
authorD G Turner2012-10-12 17:03:32 +0100
committerD G Turner2012-10-12 17:03:32 +0100
commit151b7beb47ec4b964862d6779bd48e3a33482bbd (patch)
tree867717c5266d0908d95edd82560599be20a4ede9 /engines/lastexpress/entities
parent80af0e239473f85c49cc2da3c848dfcde41d4a37 (diff)
parent2b55837650c4229dc3d75b660cecfc7a3292e5e0 (diff)
downloadscummvm-rg350-151b7beb47ec4b964862d6779bd48e3a33482bbd.tar.gz
scummvm-rg350-151b7beb47ec4b964862d6779bd48e3a33482bbd.tar.bz2
scummvm-rg350-151b7beb47ec4b964862d6779bd48e3a33482bbd.zip
Merge branch 'master' into teenagentRefactor
Conflicts: engines/teenagent/callbacks.cpp
Diffstat (limited to 'engines/lastexpress/entities')
-rw-r--r--engines/lastexpress/entities/abbot.cpp64
-rw-r--r--engines/lastexpress/entities/abbot.h9
-rw-r--r--engines/lastexpress/entities/alexei.cpp33
-rw-r--r--engines/lastexpress/entities/alexei.h1
-rw-r--r--engines/lastexpress/entities/alouan.cpp47
-rw-r--r--engines/lastexpress/entities/alouan.h1
-rw-r--r--engines/lastexpress/entities/anna.cpp87
-rw-r--r--engines/lastexpress/entities/anna.h1
-rw-r--r--engines/lastexpress/entities/august.cpp65
-rw-r--r--engines/lastexpress/entities/august.h1
-rw-r--r--engines/lastexpress/entities/boutarel.cpp37
-rw-r--r--engines/lastexpress/entities/boutarel.h1
-rw-r--r--engines/lastexpress/entities/chapters.cpp189
-rw-r--r--engines/lastexpress/entities/chapters.h4
-rw-r--r--engines/lastexpress/entities/cooks.cpp15
-rw-r--r--engines/lastexpress/entities/cooks.h1
-rw-r--r--engines/lastexpress/entities/coudert.cpp115
-rw-r--r--engines/lastexpress/entities/coudert.h2
-rw-r--r--engines/lastexpress/entities/entity.cpp516
-rw-r--r--engines/lastexpress/entities/entity.h337
-rw-r--r--engines/lastexpress/entities/entity39.h3
-rw-r--r--engines/lastexpress/entities/entity_intern.h485
-rw-r--r--engines/lastexpress/entities/francois.cpp95
-rw-r--r--engines/lastexpress/entities/francois.h5
-rw-r--r--engines/lastexpress/entities/gendarmes.cpp8
-rw-r--r--engines/lastexpress/entities/gendarmes.h1
-rw-r--r--engines/lastexpress/entities/hadija.cpp65
-rw-r--r--engines/lastexpress/entities/hadija.h1
-rw-r--r--engines/lastexpress/entities/ivo.cpp4
-rw-r--r--engines/lastexpress/entities/ivo.h1
-rw-r--r--engines/lastexpress/entities/kahina.cpp33
-rw-r--r--engines/lastexpress/entities/kahina.h1
-rw-r--r--engines/lastexpress/entities/kronos.cpp17
-rw-r--r--engines/lastexpress/entities/kronos.h1
-rw-r--r--engines/lastexpress/entities/mahmud.cpp14
-rw-r--r--engines/lastexpress/entities/mahmud.h1
-rw-r--r--engines/lastexpress/entities/max.cpp17
-rw-r--r--engines/lastexpress/entities/max.h1
-rw-r--r--engines/lastexpress/entities/mertens.cpp130
-rw-r--r--engines/lastexpress/entities/mertens.h4
-rw-r--r--engines/lastexpress/entities/milos.cpp40
-rw-r--r--engines/lastexpress/entities/milos.h1
-rw-r--r--engines/lastexpress/entities/mmeboutarel.cpp31
-rw-r--r--engines/lastexpress/entities/mmeboutarel.h1
-rw-r--r--engines/lastexpress/entities/pascale.cpp7
-rw-r--r--engines/lastexpress/entities/pascale.h1
-rw-r--r--engines/lastexpress/entities/rebecca.cpp47
-rw-r--r--engines/lastexpress/entities/rebecca.h1
-rw-r--r--engines/lastexpress/entities/salko.cpp8
-rw-r--r--engines/lastexpress/entities/salko.h1
-rw-r--r--engines/lastexpress/entities/servers0.cpp12
-rw-r--r--engines/lastexpress/entities/servers0.h1
-rw-r--r--engines/lastexpress/entities/servers1.cpp4
-rw-r--r--engines/lastexpress/entities/servers1.h1
-rw-r--r--engines/lastexpress/entities/sophie.cpp70
-rw-r--r--engines/lastexpress/entities/sophie.h5
-rw-r--r--engines/lastexpress/entities/tables.h1
-rw-r--r--engines/lastexpress/entities/tatiana.cpp45
-rw-r--r--engines/lastexpress/entities/tatiana.h1
-rw-r--r--engines/lastexpress/entities/train.cpp16
-rw-r--r--engines/lastexpress/entities/train.h1
-rw-r--r--engines/lastexpress/entities/vassili.cpp14
-rw-r--r--engines/lastexpress/entities/vassili.h1
-rw-r--r--engines/lastexpress/entities/verges.cpp200
-rw-r--r--engines/lastexpress/entities/verges.h27
-rw-r--r--engines/lastexpress/entities/vesna.cpp15
-rw-r--r--engines/lastexpress/entities/vesna.h1
-rw-r--r--engines/lastexpress/entities/yasmin.cpp68
-rw-r--r--engines/lastexpress/entities/yasmin.h1
69 files changed, 1813 insertions, 1222 deletions
diff --git a/engines/lastexpress/entities/abbot.cpp b/engines/lastexpress/entities/abbot.cpp
index eef64bdf07..406b017d3a 100644
--- a/engines/lastexpress/entities/abbot.cpp
+++ b/engines/lastexpress/entities/abbot.cpp
@@ -58,10 +58,10 @@ Abbot::Abbot(LastExpressEngine *engine) : Entity(engine, kEntityAbbot) {
ADD_CALLBACK_FUNCTION(Abbot, chapter2);
ADD_CALLBACK_FUNCTION(Abbot, chapter3);
ADD_CALLBACK_FUNCTION(Abbot, chapter3Handler);
- ADD_CALLBACK_FUNCTION(Abbot, function19);
- ADD_CALLBACK_FUNCTION(Abbot, function20);
- ADD_CALLBACK_FUNCTION(Abbot, function21);
- ADD_CALLBACK_FUNCTION(Abbot, function22);
+ ADD_CALLBACK_FUNCTION(Abbot, conversationWithBoutarel);
+ ADD_CALLBACK_FUNCTION(Abbot, readPaper);
+ ADD_CALLBACK_FUNCTION(Abbot, goToLunch);
+ ADD_CALLBACK_FUNCTION(Abbot, haveLunch);
ADD_CALLBACK_FUNCTION(Abbot, function23);
ADD_CALLBACK_FUNCTION(Abbot, function24);
ADD_CALLBACK_FUNCTION(Abbot, function25);
@@ -259,7 +259,7 @@ IMPLEMENT_FUNCTION(18, Abbot, chapter3Handler)
getData()->entityPosition = kPosition_6470;
getData()->location = kLocationInsideCompartment;
- setup_function19();
+ setup_conversationWithBoutarel();
break;
}
break;
@@ -272,7 +272,7 @@ IMPLEMENT_FUNCTION(18, Abbot, chapter3Handler)
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(19, Abbot, function19)
+IMPLEMENT_FUNCTION(19, Abbot, conversationWithBoutarel)
switch (savepoint.action) {
default:
break;
@@ -311,21 +311,21 @@ IMPLEMENT_FUNCTION(19, Abbot, function19)
case 3:
getSavePoints()->push(kEntityAbbot, kEntityBoutarel, kAction122288808);
- setup_function20();
+ setup_readPaper();
break;
}
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(20, Abbot, function20)
+IMPLEMENT_FUNCTION(20, Abbot, readPaper)
switch (savepoint.action) {
default:
break;
case kActionNone:
if (getState()->time > kTime1966500 && getEntities()->isInRestaurant(kEntityBoutarel))
- setup_function21();
+ setup_goToLunch();
break;
case kActionDefault:
@@ -335,7 +335,7 @@ IMPLEMENT_FUNCTION(20, Abbot, function20)
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(21, Abbot, function21)
+IMPLEMENT_FUNCTION(21, Abbot, goToLunch)
switch (savepoint.action) {
default:
break;
@@ -393,7 +393,7 @@ IMPLEMENT_FUNCTION(21, Abbot, function21)
break;
case 7:
- setup_function22();
+ setup_haveLunch();
break;
}
break;
@@ -409,13 +409,13 @@ IMPLEMENT_FUNCTION(21, Abbot, function21)
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(22, Abbot, function22)
+IMPLEMENT_FUNCTION(22, Abbot, haveLunch)
switch (savepoint.action) {
default:
break;
case kActionNone:
- TIME_CHECK_SAVEPOINT(kTime1971000, params->param1, kEntityAbbot, kEntityServers0, kAction218586752);
+ Entity::timeCheckSavepoint(kTime1971000, params->param1, kEntityAbbot, kEntityServers0, kAction218586752);
if (getState()->time > kTime1989000 && getEntities()->isSomebodyInsideRestaurantOrSalon()) {
getData()->inventoryItem = kItemNone;
@@ -514,7 +514,8 @@ IMPLEMENT_FUNCTION(24, Abbot, function24)
break;
case kActionNone:
- UPDATE_PARAM(params->param1, getState()->time, 900);
+ if (!Entity::updateParameter(params->param1, getState()->time, 900))
+ break;
setup_function25();
break;
@@ -615,7 +616,8 @@ IMPLEMENT_FUNCTION(26, Abbot, function26)
break;
case kActionNone:
- UPDATE_PARAM(params->param2, getState()->time, 4500);
+ if (!Entity::updateParameter(params->param2, getState()->time, 4500))
+ break;
if (getEntities()->isSomebodyInsideRestaurantOrSalon())
setup_function27();
@@ -689,7 +691,7 @@ IMPLEMENT_FUNCTION(28, Abbot, function28)
break;
case kActionNone:
- TIME_CHECK_CALLBACK(kTime2052000, params->param1, 1, setup_function29);
+ Entity::timeCheckCallback(kTime2052000, params->param1, 1, WRAP_SETUP_FUNCTION(Abbot, setup_function29));
break;
case kActionDefault:
@@ -862,7 +864,8 @@ IMPLEMENT_FUNCTION(31, Abbot, function31)
if (!params->param1)
break;
- UPDATE_PARAM(params->param5, getState()->time, 450);
+ if (!Entity::updateParameter(params->param5, getState()->time, 450))
+ break;
setCallback(6);
setup_callbackActionRestaurantOrSalon();
@@ -918,7 +921,8 @@ IMPLEMENT_FUNCTION(31, Abbot, function31)
getSavePoints()->push(kEntityAbbot, kEntityAlexei, kAction122288808);
params->param1 = 1;
- UPDATE_PARAM(params->param5, getState()->time, 450);
+ if (!Entity::updateParameter(params->param5, getState()->time, 450))
+ break;
setCallback(6);
setup_callbackActionRestaurantOrSalon();
@@ -1161,7 +1165,8 @@ IMPLEMENT_FUNCTION(36, Abbot, function36)
break;
case 2:
- UPDATE_PARAM(params->param4, getState()->time, 900);
+ if (!Entity::updateParameter(params->param4, getState()->time, 900))
+ break;
getSound()->playSound(kEntityAbbot, "Abb3042");
break;
@@ -1319,7 +1324,7 @@ IMPLEMENT_FUNCTION(41, Abbot, chapter4Handler)
break;
case kActionNone:
- TIME_CHECK_SAVEPOINT(kTime2358000, params->param1, kEntityAbbot, kEntityServers0, kAction218128129);
+ Entity::timeCheckSavepoint(kTime2358000, params->param1, kEntityAbbot, kEntityServers0, kAction218128129);
if (getState()->time > kTime2389500 && getEntities()->isSomebodyInsideRestaurantOrSalon())
setup_function42();
@@ -1423,10 +1428,12 @@ IMPLEMENT_FUNCTION(43, Abbot, function43)
}
label_callback_1:
- TIME_CHECK(kTime2466000, params->param5, setup_function44);
+ if (Entity::timeCheck(kTime2466000, params->param5, WRAP_SETUP_FUNCTION(Abbot, setup_function44)))
+ break;
if (params->param3) {
- UPDATE_PARAM(params->param6, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param6, getState()->timeTicks, 75))
+ break;
params->param2 = 1;
params->param3 = 0;
@@ -1540,7 +1547,7 @@ IMPLEMENT_FUNCTION(45, Abbot, function45)
getData()->car = kCarRedSleeping;
getData()->location = kLocationOutsideCompartment;
- RESET_ENTITY_STATE(kEntityVerges, Verges, setup_function38);
+ RESET_ENTITY_STATE(kEntityVerges, Verges, setup_resetState);
getEntities()->drawSequenceLeft(kEntityAbbot, "617Ec");
getEntities()->enterCompartment(kEntityAbbot, kObjectCompartmentC, true);
@@ -1644,14 +1651,14 @@ IMPLEMENT_FUNCTION(48, Abbot, function48)
if (ENTITY_PARAM(0, 1))
getData()->inventoryItem = kItemInvalid;
- UPDATE_PARAM_PROC(params->param1, getState()->time, 1800)
+ if (Entity::updateParameter(params->param1, getState()->time, 1800)) {
getData()->inventoryItem = kItemNone;
setCallback(4);
setup_updatePosition("126C", kCarRedSleeping, 52);
- UPDATE_PARAM_PROC_END
+ }
- TIME_CHECK_CALLBACK_INVENTORY(kTime2533500, params->param2, 5, setup_callbackActionRestaurantOrSalon);
+ Entity::timeCheckCallbackInventory(kTime2533500, params->param2, 5, WRAP_SETUP_FUNCTION(Abbot, setup_callbackActionRestaurantOrSalon));
break;
case kAction1:
@@ -1703,7 +1710,7 @@ IMPLEMENT_FUNCTION(48, Abbot, function48)
getEntities()->drawSequenceLeft(kEntityAbbot, "126B");
params->param1 = 0;
- TIME_CHECK_CALLBACK_INVENTORY(kTime2533500, params->param2, 5, setup_callbackActionRestaurantOrSalon);
+ Entity::timeCheckCallbackInventory(kTime2533500, params->param2, 5, WRAP_SETUP_FUNCTION(Abbot, setup_callbackActionRestaurantOrSalon));
break;
case 5:
@@ -1748,7 +1755,8 @@ IMPLEMENT_FUNCTION(49, Abbot, pickBomb)
break;
case kActionNone:
- UPDATE_PARAM(params->param1, getState()->timeTicks, 150);
+ if (!Entity::updateParameter(params->param1, getState()->timeTicks, 150))
+ break;
getSavePoints()->push(kEntityAbbot, kEntityAbbot, kAction157489665);
break;
diff --git a/engines/lastexpress/entities/abbot.h b/engines/lastexpress/entities/abbot.h
index 462f5a491e..dc3e86db54 100644
--- a/engines/lastexpress/entities/abbot.h
+++ b/engines/lastexpress/entities/abbot.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_ABBOT_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
@@ -157,10 +156,10 @@ public:
* Handle Chapter 3 events
*/
DECLARE_FUNCTION(chapter3Handler)
- DECLARE_FUNCTION(function19)
- DECLARE_FUNCTION(function20)
- DECLARE_FUNCTION(function21)
- DECLARE_FUNCTION(function22)
+ DECLARE_FUNCTION(conversationWithBoutarel)
+ DECLARE_FUNCTION(readPaper)
+ DECLARE_FUNCTION(goToLunch)
+ DECLARE_FUNCTION(haveLunch)
DECLARE_FUNCTION(function23)
DECLARE_FUNCTION(function24)
DECLARE_FUNCTION(function25)
diff --git a/engines/lastexpress/entities/alexei.cpp b/engines/lastexpress/entities/alexei.cpp
index 437c31c476..115c890f6f 100644
--- a/engines/lastexpress/entities/alexei.cpp
+++ b/engines/lastexpress/entities/alexei.cpp
@@ -251,7 +251,7 @@ IMPLEMENT_FUNCTION(15, Alexei, function15)
break;
case kActionNone:
- UPDATE_PARAM_CHECK(params->param2, getState()->time, params->param1)
+ if (Entity::updateParameterCheck(params->param2, getState()->time, params->param1)) {
if (getEntities()->isSomebodyInsideRestaurantOrSalon()) {
getData()->location = kLocationOutsideCompartment;
@@ -314,7 +314,8 @@ IMPLEMENT_FUNCTION_IS(16, Alexei, function16, TimeValue)
}
if (params->param5) {
- UPDATE_PARAM(CURRENT_PARAM(1, 1), getState()->timeTicks, 75);
+ if (!Entity::updateParameter(CURRENT_PARAM(1, 1), getState()->timeTicks, 75))
+ break;
params->param5 = 0;
params->param6 = 1;
@@ -445,7 +446,7 @@ IMPLEMENT_FUNCTION(17, Alexei, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler)
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Alexei, setup_chapter1Handler));
break;
case kActionDefault:
@@ -482,7 +483,9 @@ IMPLEMENT_FUNCTION(18, Alexei, chapter1Handler)
}
if (params->param1) {
- UPDATE_PARAM(params->param3, getState()->timeTicks, 90);
+ if (!Entity::updateParameter(params->param3, getState()->timeTicks, 90))
+ break;
+
getScenes()->loadSceneFromPosition(kCarRestaurant, 61);
} else {
params->param3 = 0;
@@ -686,7 +689,7 @@ IMPLEMENT_FUNCTION(21, Alexei, function21)
break;
case kActionNone:
- UPDATE_PARAM_CHECK(params->param2, getState()->time, params->param1)
+ if (Entity::updateParameterCheck(params->param2, getState()->time, params->param1)) {
getData()->location = kLocationOutsideCompartment;
getData()->inventoryItem = kItemNone;
@@ -748,7 +751,7 @@ IMPLEMENT_FUNCTION(22, Alexei, function22)
break;
case kActionNone:
- UPDATE_PARAM_PROC(params->param2, getState()->time, params->param2)
+ if (Entity::updateParameter(params->param2, getState()->time, params->param2)) {
if (getEntities()->isSomebodyInsideRestaurantOrSalon()) {
getData()->location = kLocationOutsideCompartment;
getData()->inventoryItem = kItemNone;
@@ -757,7 +760,7 @@ IMPLEMENT_FUNCTION(22, Alexei, function22)
setup_updatePosition("103D", kCarRestaurant, 52);
break;
}
- UPDATE_PARAM_PROC_END
+ }
if (params->param3 == kTimeInvalid || getState()->time <= kTime1111500)
break;
@@ -975,7 +978,7 @@ IMPLEMENT_FUNCTION(26, Alexei, function26)
break;
case kActionNone:
- TIME_CHECK(kTime1512000, params->param1, setup_function27)
+ Entity::timeCheck(kTime1512000, params->param1, WRAP_SETUP_FUNCTION(Alexei, setup_function27));
break;
case kActionDefault:
@@ -1330,25 +1333,26 @@ IMPLEMENT_FUNCTION(35, Alexei, function35)
case kActionNone:
if (getEntities()->isInSalon(kEntityPlayer)) {
- UPDATE_PARAM_PROC(params->param2, getState()->time, 2700)
+ if (Entity::updateParameter(params->param2, getState()->time, 2700)) {
setCallback(1);
setup_callbackActionRestaurantOrSalon();
break;
- UPDATE_PARAM_PROC_END
+ }
} else {
params->param2 = 0;
}
- UPDATE_PARAM_PROC(params->param3, getState()->time, params->param1)
+ if (Entity::updateParameter(params->param3, getState()->time, params->param1)) {
if (getEntities()->isSomebodyInsideRestaurantOrSalon()) {
setCallback(3);
setup_function15();
break;
}
- UPDATE_PARAM_PROC_END
+ }
label_callback_3:
- UPDATE_PARAM(params->param4, getState()->time, 9000);
+ if (!Entity::updateParameter(params->param4, getState()->time, 9000))
+ break;
setCallback(4);
setup_callbackActionRestaurantOrSalon();
@@ -1397,7 +1401,8 @@ IMPLEMENT_FUNCTION(36, Alexei, function36)
if (params->param3 || params->param2)
break;
- UPDATE_PARAM(params->param4, getState()->timeTicks, params->param1);
+ if (!Entity::updateParameter(params->param4, getState()->timeTicks, params->param1))
+ break;
getEntities()->drawSequenceRight(kEntityAlexei, "124B");
diff --git a/engines/lastexpress/entities/alexei.h b/engines/lastexpress/entities/alexei.h
index 262826ae42..9792385863 100644
--- a/engines/lastexpress/entities/alexei.h
+++ b/engines/lastexpress/entities/alexei.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_ALEXEI_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/alouan.cpp b/engines/lastexpress/entities/alouan.cpp
index 3ae38dcf27..e834e1f7cb 100644
--- a/engines/lastexpress/entities/alouan.cpp
+++ b/engines/lastexpress/entities/alouan.cpp
@@ -86,22 +86,22 @@ IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(6, Alouan, compartment6)
- COMPARTMENT_TO(Alouan, kObjectCompartment6, kPosition_4070, "621Cf", "621Df");
+ Entity::goToCompartment(savepoint, kObjectCompartment6, kPosition_4070, "621Cf", "621Df");
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(7, Alouan, compartment8)
- COMPARTMENT_TO(Alouan, kObjectCompartment8, kPosition_2740, "621Ch", "621Dh");
+ Entity::goToCompartment(savepoint, kObjectCompartment8, kPosition_2740, "621Ch", "621Dh");
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(8, Alouan, compartment6to8)
- COMPARTMENT_FROM_TO(Alouan, kObjectCompartment6, kPosition_4070, "621Bf", kObjectCompartment8, kPosition_2740, "621Ah");
+ Entity::goToCompartmentFromCompartment(savepoint, kObjectCompartment6, kPosition_4070, "621Bf", kObjectCompartment8, kPosition_2740, "621Ah");
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(9, Alouan, compartment8to6)
- COMPARTMENT_FROM_TO(Alouan, kObjectCompartment8, kPosition_2740, "621Bh", kObjectCompartment6, kPosition_4070, "621Af");
+ Entity::goToCompartmentFromCompartment(savepoint, kObjectCompartment8, kPosition_2740, "621Bh", kObjectCompartment6, kPosition_4070, "621Af");
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
@@ -111,7 +111,7 @@ IMPLEMENT_FUNCTION(10, Alouan, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Alouan, setup_chapter1Handler));
break;
case kActionDefault:
@@ -131,7 +131,8 @@ IMPLEMENT_FUNCTION(11, Alouan, chapter1Handler)
case kActionNone:
- TIME_CHECK_CALLBACK(kTime1096200, params->param1, 1, setup_compartment8to6);
+ if (Entity::timeCheckCallback(kTime1096200, params->param1, 1, WRAP_SETUP_FUNCTION(Alouan, setup_compartment8to6)))
+ break;
label_callback1:
if (getState()->time > kTime1162800 && !params->param2) {
@@ -281,21 +282,28 @@ IMPLEMENT_FUNCTION(16, Alouan, chapter3Handler)
break;
case kActionNone:
- TIME_CHECK_CALLBACK(kTimeCitySalzbourg, params->param1, 1, setup_compartment8to6);
+ if (Entity::timeCheckCallback(kTimeCitySalzbourg, params->param1, 1, WRAP_SETUP_FUNCTION(Alouan, setup_compartment8to6)))
+ break;
label_callback1:
- if (params->param2 != kTimeInvalid && getState()->time > kTime1989000)
- TIME_CHECK_CAR(kTime2119500, params->param5, 5, setup_compartment8);
+ if (params->param2 != kTimeInvalid && getState()->time > kTime1989000) {
+ if (Entity::timeCheckCar(kTime2119500, params->param5, 5, WRAP_SETUP_FUNCTION(Alouan, setup_compartment8)))
+ break;
+ }
label_callback2:
- TIME_CHECK_CALLBACK_1(kTime2052000, params->param3, 3, setup_playSound, "Har1005");
+ if (Entity::timeCheckCallback(kTime2052000, params->param3, 3, "Har1005", WRAP_SETUP_FUNCTION_S(Alouan, setup_playSound)))
+ break;
label_callback3:
- TIME_CHECK_CALLBACK(kTime2133000, params->param4, 4, setup_compartment6to8);
+ if (Entity::timeCheckCallback(kTime2133000, params->param4, 4, WRAP_SETUP_FUNCTION(Alouan, setup_compartment6to8)))
+ break;
label_callback4:
- if (params->param5 != kTimeInvalid && getState()->time > kTime2151000)
- TIME_CHECK_CAR(kTime2241000, params->param5, 5, setup_compartment8);
+ if (params->param5 != kTimeInvalid && getState()->time > kTime2151000) {
+ if (Entity::timeCheckCar(kTime2241000, params->param5, 5, WRAP_SETUP_FUNCTION(Alouan, setup_compartment8)))
+ break;
+ }
break;
case kActionDefault:
@@ -352,11 +360,14 @@ IMPLEMENT_FUNCTION(18, Alouan, chapter4Handler)
break;
case kActionNone:
- if (params->param1 != kTimeInvalid)
- TIME_CHECK_CAR(kTime2443500, params->param1, 1, setup_compartment8);
+ if (params->param1 != kTimeInvalid) {
+ if (Entity::timeCheckCar(kTime2443500, params->param1, 1, WRAP_SETUP_FUNCTION(Alouan, setup_compartment8)))
+ break;
+ }
label_callback1:
- TIME_CHECK_CALLBACK(kTime2455200, params->param2, 2, setup_compartment8to6);
+ if (Entity::timeCheckCallback(kTime2455200, params->param2, 2, WRAP_SETUP_FUNCTION(Alouan, setup_compartment8to6)))
+ break;
label_callback2:
if (getState()->time > kTime2475000 && !params->param3) {
@@ -438,7 +449,9 @@ IMPLEMENT_FUNCTION(22, Alouan, function22)
break;
case kActionNone:
- UPDATE_PARAM(params->param1, getState()->time, 2700);
+ if (!Entity::updateParameter(params->param1, getState()->time, 2700))
+ break;
+
setup_function23();
break;
diff --git a/engines/lastexpress/entities/alouan.h b/engines/lastexpress/entities/alouan.h
index c6a6beddd9..91254a449a 100644
--- a/engines/lastexpress/entities/alouan.h
+++ b/engines/lastexpress/entities/alouan.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_ALOUAN_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/anna.cpp b/engines/lastexpress/entities/anna.cpp
index 806beaee9d..f8768032b5 100644
--- a/engines/lastexpress/entities/anna.cpp
+++ b/engines/lastexpress/entities/anna.cpp
@@ -198,16 +198,17 @@ IMPLEMENT_FUNCTION(12, Anna, function12)
params->param2 = 1;
if (params->param6) {
- UPDATE_PARAM_PROC(params->param7, getState()->timeTicks, 75)
+ if (Entity::updateParameter(params->param7, getState()->timeTicks, 75)) {
getSavePoints()->push(kEntityAnna, kEntityAnna, kActionEndSound);
params->param6 = 0;
params->param7 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (params->param4) {
- UPDATE_PARAM(params->param8, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param8, getState()->timeTicks, 75))
+ break;
params->param4 = 0;
params->param5 = 1;
@@ -427,7 +428,8 @@ IMPLEMENT_FUNCTION_IS(15, Anna, function15, TimeValue)
}
if (params->param5) {
- UPDATE_PARAM(params->param8, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param8, getState()->timeTicks, 75))
+ break;
params->param5 = 0;
params->param6 = 1;
@@ -545,7 +547,7 @@ IMPLEMENT_FUNCTION(16, Anna, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Anna, setup_chapter1Handler));
break;
case kActionDefault:
@@ -667,15 +669,16 @@ IMPLEMENT_FUNCTION_I(18, Anna, function18, TimeValue)
}
if (params->param5 && !params->param4) {
- UPDATE_PARAM_PROC(params->param6, getState()->time, 900)
+ if (Entity::updateParameter(params->param6, getState()->time, 900)) {
params->param2 |= kItemScarf;
params->param5 = 0;
params->param6 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (params->param3) {
- UPDATE_PARAM(params->param7, getState()->timeTicks, 90);
+ if (!Entity::updateParameter(params->param7, getState()->timeTicks, 90))
+ break;
getScenes()->loadSceneFromPosition(kCarRestaurant, 61);
} else {
@@ -1149,15 +1152,16 @@ IMPLEMENT_FUNCTION(29, Anna, function29)
case kActionNone:
if (params->param2) {
- UPDATE_PARAM_PROC(params->param3, getState()->time, 900)
+ if (Entity::updateParameter(params->param3, getState()->time, 900)) {
getData()->inventoryItem = (InventoryItem)(getData()->inventoryItem | kItemScarf);
params->param2 = 0;
params->param3 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (params->param1) {
- UPDATE_PARAM(params->param4, getState()->timeTicks, 90);
+ if (!Entity::updateParameter(params->param4, getState()->timeTicks, 90))
+ break;
getScenes()->loadSceneFromPosition(kCarRestaurant, 55);
} else {
@@ -1279,7 +1283,9 @@ IMPLEMENT_FUNCTION(30, Anna, function30)
}
if (params->param1) {
- UPDATE_PARAM(params->param5, getState()->timeTicks, 90);
+ if (!Entity::updateParameter(params->param5, getState()->timeTicks, 90))
+ break;
+
getScenes()->loadSceneFromPosition(kCarRestaurant, 55);
} else {
params->param5 = 0;
@@ -1409,15 +1415,15 @@ IMPLEMENT_FUNCTION(34, Anna, function34)
case kActionNone:
if (!params->param1 && getEntities()->isPlayerPosition(kCarRedSleeping, 60)) {
- UPDATE_PARAM_PROC(params->param2, getState()->time, 150)
+ if (Entity::updateParameter(params->param2, getState()->time, 150)) {
setCallback(1);
setup_draw("419B");
break;
- UPDATE_PARAM_PROC_END
+ }
}
label_callback_1:
- TIME_CHECK(kTime1489500, params->param3, setup_function35);
+ Entity::timeCheck(kTime1489500, params->param3, WRAP_SETUP_FUNCTION(Anna, setup_function35));
break;
case kActionKnock:
@@ -1483,7 +1489,8 @@ IMPLEMENT_FUNCTION(35, Anna, function35)
if (!params->param1)
break;
- UPDATE_PARAM(params->param3, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param3, getState()->timeTicks, 75))
+ break;
switch (params->param2) {
default:
@@ -1797,7 +1804,8 @@ IMPLEMENT_FUNCTION(41, Anna, function41)
break;
case kActionNone:
- UPDATE_PARAM(params->param2, getState()->time, 2700);
+ if (!Entity::updateParameter(params->param2, getState()->time, 2700))
+ break;
params->param5++;
switch (params->param5) {
@@ -2090,11 +2098,11 @@ IMPLEMENT_FUNCTION(48, Anna, function48)
break;
if (params->param3 != kTimeInvalid && getState()->time > kTime1969200) {
- UPDATE_PARAM_PROC_TIME(kTime1983600, (!getEntities()->isInRestaurant(kEntityPlayer) || getSoundQueue()->isBuffered(kEntityBoutarel)), params->param3, 150)
+ if (Entity::updateParameterTime(kTime1983600, (!getEntities()->isInRestaurant(kEntityPlayer) || getSoundQueue()->isBuffered(kEntityBoutarel)), params->param3, 150)) {
setCallback(3);
setup_playSound("Aug3007A");
break;
- UPDATE_PARAM_PROC_END
+ }
}
label_callback_4:
@@ -2384,22 +2392,23 @@ IMPLEMENT_FUNCTION(53, Anna, function53)
case kActionNone:
if (getProgress().field_48 && params->param5 != kTimeInvalid) {
- UPDATE_PARAM_PROC_TIME(kTime2065500, !getEntities()->isPlayerInCar(kCarRedSleeping), params->param5, 150)
+ if (Entity::updateParameterTime(kTime2065500, !getEntities()->isPlayerInCar(kCarRedSleeping), params->param5, 150)) {
setup_function54();
break;
- UPDATE_PARAM_PROC_END
+ }
}
if (params->param3) {
- UPDATE_PARAM_PROC(params->param6, getState()->time, 9000)
+ if (Entity::updateParameter(params->param6, getState()->time, 9000)) {
params->param4 = !params->param4;
getEntities()->drawSequenceLeft(kEntityAnna, params->param4 ? "417B" : "417A");
params->param6 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (params->param1) {
- UPDATE_PARAM(params->param7, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param7, getState()->timeTicks, 75))
+ break;
CursorStyle cursor = getEntities()->isInsideCompartment(kEntityMax, kCarRedSleeping, kPosition_4070) ? kCursorHand : kCursorNormal;
@@ -2535,17 +2544,19 @@ IMPLEMENT_FUNCTION(54, Anna, function54)
case kActionNone:
if (params->param3) {
- TIME_CHECK(kTime2079000, params->param5, setup_function55);
+ if (Entity::timeCheck(kTime2079000, params->param5, WRAP_SETUP_FUNCTION(Anna, setup_function55)))
+ break;
- UPDATE_PARAM_PROC(params->param6, getState()->time, 9000)
+ if (Entity::updateParameter(params->param6, getState()->time, 9000)) {
params->param4 = !params->param4;
getEntities()->drawSequenceLeft(kEntityAnna, params->param4 ? "417B" : "417A");
params->param6 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (params->param1) {
- UPDATE_PARAM(params->param7, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param7, getState()->timeTicks, 75))
+ break;
CursorStyle cursor = getEntities()->isInsideCompartment(kEntityMax, kCarRedSleeping, kPosition_4070) ? kCursorHand : kCursorNormal;
@@ -2892,7 +2903,8 @@ IMPLEMENT_FUNCTION(59, Anna, function59)
}
if (params->param1) {
- UPDATE_PARAM(params->param5, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param5, getState()->timeTicks, 75))
+ break;
CursorStyle style = getEntities()->isInsideCompartment(kEntityMax, kCarRedSleeping, kPosition_4070) ? kCursorHand : kCursorNormal;
getObjects()->update(kObjectCompartmentF, kEntityAnna, kObjectLocation1, kCursorNormal, style);
@@ -3266,7 +3278,8 @@ IMPLEMENT_FUNCTION(67, Anna, chapter4Handler)
case kActionNone:
if (getEntities()->isPlayerPosition(kCarRedSleeping, 46)) {
- UPDATE_PARAM_GOTO(params->param4, getState()->timeTicks, 30, label_next);
+ if (!Entity::updateParameter(params->param4, getState()->timeTicks, 30))
+ goto label_next;
getScenes()->loadSceneFromPosition(kCarRedSleeping, 8);
}
@@ -3275,7 +3288,8 @@ IMPLEMENT_FUNCTION(67, Anna, chapter4Handler)
label_next:
if (params->param1) {
- UPDATE_PARAM(params->param5, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param5, getState()->timeTicks, 75))
+ break;
params->param1 = 0;
params->param2 = 1;
@@ -3405,7 +3419,8 @@ IMPLEMENT_FUNCTION(69, Anna, function69)
case kActionNone:
if (params->param1) {
- UPDATE_PARAM(params->param2, getState()->time, 4500);
+ if (!Entity::updateParameter(params->param2, getState()->time, 4500))
+ break;
getData()->car = kCarRedSleeping;
getData()->entityPosition = kPosition_9270;
@@ -3415,7 +3430,7 @@ IMPLEMENT_FUNCTION(69, Anna, function69)
break;
}
- TIME_CHECK_CALLBACK(kTime2535300, params->param3, 4, setup_callbackActionRestaurantOrSalon);
+ Entity::timeCheckCallback(kTime2535300, params->param3, 4, WRAP_SETUP_FUNCTION(Anna, setup_callbackActionRestaurantOrSalon));
break;
case kActionDefault:
@@ -3909,7 +3924,8 @@ IMPLEMENT_FUNCTION(80, Anna, function80)
break;
case kActionNone:
- UPDATE_PARAM(params->param1, getState()->timeTicks, 450);
+ if (!Entity::updateParameter(params->param1, getState()->timeTicks, 450))
+ break;
getSound()->playSound(kEntityPlayer, "Kro5001", kFlagDefault);
break;
@@ -3978,7 +3994,8 @@ IMPLEMENT_FUNCTION(81, Anna, finalSequence)
break;
case kActionNone:
- UPDATE_PARAM(params->param1, getState()->timeTicks, 180);
+ if (!Entity::updateParameter(params->param1, getState()->timeTicks, 180))
+ break;
getSound()->playSound(kEntityTrain, "LIB069");
getLogic()->gameOver(kSavegameTypeIndex, 2, kSceneNone, true);
diff --git a/engines/lastexpress/entities/anna.h b/engines/lastexpress/entities/anna.h
index 72c6db4bd9..205ff9d42c 100644
--- a/engines/lastexpress/entities/anna.h
+++ b/engines/lastexpress/entities/anna.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_ANNA_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/august.cpp b/engines/lastexpress/entities/august.cpp
index 86c02e4301..dbae7bad20 100644
--- a/engines/lastexpress/entities/august.cpp
+++ b/engines/lastexpress/entities/august.cpp
@@ -523,7 +523,8 @@ IMPLEMENT_FUNCTION_I(21, August, function21, TimeValue)
}
if (params->param2) {
- UPDATE_PARAM_GOTO(params->param8, getState()->timeTicks, 75, label_continue);
+ if (!Entity::updateParameter(params->param8, getState()->timeTicks, 75))
+ goto label_continue;
params->param2 = 0;
params->param3 = 1;
@@ -538,10 +539,10 @@ label_continue:
break;
if (params->param6) {
- UPDATE_PARAM_PROC(CURRENT_PARAM(1, 1), getState()->time, 6300)
+ if (Entity::updateParameter(CURRENT_PARAM(1, 1), getState()->time, 6300)) {
params->param6 = 0;
CURRENT_PARAM(1, 1) = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (!params->param4
@@ -751,7 +752,7 @@ IMPLEMENT_FUNCTION(22, August, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(August, setup_chapter1Handler));
break;
case kActionDefault:
@@ -804,7 +805,7 @@ IMPLEMENT_FUNCTION_I(23, August, function23, TimeValue)
}
label_callback_8:
- UPDATE_PARAM_PROC(CURRENT_PARAM(1, 4), getState()->timeTicks, 75)
+ if (Entity::updateParameter(CURRENT_PARAM(1, 4), getState()->timeTicks, 75)) {
getEntities()->exitCompartment(kEntityAugust, kObjectCompartment1, true);
if (getProgress().eventCorpseMovedFromFloor) {
@@ -820,7 +821,7 @@ label_callback_8:
setup_savegame(kSavegameTypeEvent, kEventAugustFindCorpse);
}
break;
- UPDATE_PARAM_PROC_END
+ }
label_callback_9:
if (params->param3 && params->param1 < getState()->time && !CURRENT_PARAM(1, 5)) {
@@ -840,7 +841,8 @@ label_callback_9:
break;
if (getObjects()->get(kObjectCompartment1).location == kObjectLocation1) {
- UPDATE_PARAM(CURRENT_PARAM(1, 2), getState()->timeTicks, 75);
+ if (!Entity::updateParameter(CURRENT_PARAM(1, 2), getState()->timeTicks, 75))
+ break;
getObjects()->update(kObjectCompartment1, kEntityAugust, getObjects()->get(kObjectCompartment1).location, kCursorNormal, kCursorNormal);
@@ -1483,7 +1485,8 @@ IMPLEMENT_FUNCTION(30, August, restaurant)
break;
case kActionNone:
- UPDATE_PARAM(params->param3, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param3, getState()->timeTicks, 75))
+ break;
getData()->inventoryItem = kItemInvalid;
break;
@@ -1632,9 +1635,9 @@ IMPLEMENT_FUNCTION(32, August, function32)
break;
case kActionNone:
- UPDATE_PARAM_PROC_TIME(kTime1179000, (!getEntities()->isInSalon(kEntityAnna) || getEntities()->isInSalon(kEntityPlayer)), params->param6, 0);
+ if (Entity::updateParameterTime(kTime1179000, (!getEntities()->isInSalon(kEntityAnna) || getEntities()->isInSalon(kEntityPlayer)), params->param6, 0)) {
getSavePoints()->push(kEntityAugust, kEntityAnna, kAction123712592);
- UPDATE_PARAM_PROC_END
+ }
if (params->param1 && getEntities()->isSomebodyInsideRestaurantOrSalon()) {
if (!params->param4) {
@@ -1643,18 +1646,19 @@ IMPLEMENT_FUNCTION(32, August, function32)
}
if (params->param7 != kTimeInvalid && params->param4 < getState()->time) {
- UPDATE_PARAM_PROC_TIME(params->param5, getEntities()->isInSalon(kEntityPlayer), params->param7, 0);
+ if (Entity::updateParameterTime((TimeValue)params->param5, getEntities()->isInSalon(kEntityPlayer), params->param7, 0)) {
getData()->location = kLocationOutsideCompartment;
setCallback(5);
setup_updatePosition("109D", kCarRestaurant, 56);
break;
- UPDATE_PARAM_PROC_END
+ }
}
}
if (params->param3) {
- UPDATE_PARAM(params->param8, getState()->timeTicks, 90);
+ if (!Entity::updateParameter(params->param8, getState()->timeTicks, 90))
+ break;
getScenes()->loadSceneFromPosition(kCarRestaurant, 55);
} else {
@@ -1811,7 +1815,7 @@ IMPLEMENT_FUNCTION(36, August, chapter2Handler)
break;
case kActionNone:
- TIME_CHECK_SAVEPOINT(kTime1755000, params->param2, kEntityAugust, kEntityServers0, kAction252568704);
+ Entity::timeCheckSavepoint(kTime1755000, params->param2, kEntityAugust, kEntityServers0, kAction252568704);
if (getState()->time > kTime1773000 && params->param1 && getEntities()->isSomebodyInsideRestaurantOrSalon()) {
getData()->inventoryItem = kItemNone;
@@ -1902,7 +1906,7 @@ IMPLEMENT_FUNCTION(37, August, function37)
break;
case kActionNone:
- TIME_CHECK_CALLBACK_1(kTime1791000, params->param2, 5, setup_function20, true);
+ Entity::timeCheckCallback(kTime1791000, params->param2, 5, true, WRAP_SETUP_FUNCTION_B(August, setup_function20));
break;
case kActionDefault:
@@ -1960,9 +1964,9 @@ IMPLEMENT_FUNCTION(38, August, function38)
break;
case kActionNone:
- TIME_CHECK_SAVEPOINT(kTime1801800, params->param1, kEntityAugust, kEntityRebecca, kAction155980128);
+ Entity::timeCheckSavepoint(kTime1801800, params->param1, kEntityAugust, kEntityRebecca, kAction155980128);
- TIME_CHECK_CALLBACK(kTime1820700, params->param2, 3, setup_callbackActionRestaurantOrSalon);
+ Entity::timeCheckCallback(kTime1820700, params->param2, 3, WRAP_SETUP_FUNCTION(August, setup_callbackActionRestaurantOrSalon));
break;
case kActionDefault:
@@ -2210,7 +2214,7 @@ IMPLEMENT_FUNCTION(43, August, chapter3Handler)
break;
case kActionNone:
- TIME_CHECK_SAVEPOINT(kTime1953000, params->param2, kEntityAugust, kEntityAnna, kAction291662081);
+ Entity::timeCheckSavepoint(kTime1953000, params->param2, kEntityAugust, kEntityAnna, kAction291662081);
// Set as same position as Anna
if (params->param1) {
@@ -2400,7 +2404,7 @@ IMPLEMENT_FUNCTION_END
IMPLEMENT_FUNCTION(46, August, function46)
switch (savepoint.action) {
default:
- TIME_CHECK_CALLBACK(kTime2088000, params->param1, 1, setup_function47);
+ Entity::timeCheckCallback(kTime2088000, params->param1, 1, WRAP_SETUP_FUNCTION(August, setup_function47));
break;
case kActionNone:
@@ -2485,7 +2489,7 @@ IMPLEMENT_FUNCTION(48, August, function48)
break;
case kActionNone:
- TIME_CHECK(kTimeCityLinz, params->param1, setup_function49);
+ Entity::timeCheck(kTimeCityLinz, params->param1, WRAP_SETUP_FUNCTION(August, setup_function49));
break;
case kActionKnock:
@@ -2768,7 +2772,8 @@ IMPLEMENT_FUNCTION(54, August, function54)
getData()->inventoryItem = kItemInvalid;
if (!params->param2 && params->param1) {
- UPDATE_PARAM(params->param5, getState()->time, params->param1);
+ if (!Entity::updateParameter(params->param5, getState()->time, params->param1))
+ break;
getData()->inventoryItem = kItemNone;
setup_function55();
@@ -3044,7 +3049,8 @@ IMPLEMENT_FUNCTION(60, August, function60)
if (!params->param1)
break;
- UPDATE_PARAM(params->param3, getState()->time, 9000);
+ if (!Entity::updateParameter(params->param3, getState()->time, 9000))
+ break;
setCallback(1);
setup_callbackActionRestaurantOrSalon();
@@ -3140,7 +3146,8 @@ IMPLEMENT_FUNCTION(62, August, function62)
break;
case kActionNone:
- UPDATE_PARAM(params->param1, getState()->time, 900);
+ if (!Entity::updateParameter(params->param1, getState()->time, 900))
+ break;
getSound()->playSound(kEntityAugust, "Aug4003A");
@@ -3218,9 +3225,9 @@ IMPLEMENT_FUNCTION(63, August, function63)
break;
case kActionNone:
- UPDATE_PARAM_PROC(params->param3, getState()->time, 1800)
+ if (Entity::updateParameter(params->param3, getState()->time, 1800)) {
getData()->inventoryItem = kItemInvalid;
- UPDATE_PARAM_PROC_END
+ }
if (getState()->time > kTime2488500 && !params->param4) {
params->param4 = 1;
@@ -3229,7 +3236,8 @@ IMPLEMENT_FUNCTION(63, August, function63)
break;
}
- UPDATE_PARAM(params->param5, getState()->timeTicks, params->param1);
+ if (!Entity::updateParameter(params->param5, getState()->timeTicks, params->param1))
+ break;
params->param2 = (params->param6 < 1 ? 1 : 0);
@@ -3386,7 +3394,8 @@ IMPLEMENT_FUNCTION(68, August, function68)
case kActionNone:
if (params->param1) {
- UPDATE_PARAM(params->param4, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param4, getState()->timeTicks, 75))
+ break;
params->param1 = 0;
params->param2 = 1;
@@ -3521,7 +3530,7 @@ IMPLEMENT_FUNCTION(69, August, unhookCars)
getScenes()->loadSceneFromPosition(kCarRestaurant, 85, 1);
getSavePoints()->pushAll(kEntityAugust, kActionProceedChapter5);
- RESET_ENTITY_STATE(kEntityVerges, Verges, setup_function42)
+ RESET_ENTITY_STATE(kEntityVerges, Verges, setup_end)
}
break;
}
diff --git a/engines/lastexpress/entities/august.h b/engines/lastexpress/entities/august.h
index 2cbb31b968..606321955b 100644
--- a/engines/lastexpress/entities/august.h
+++ b/engines/lastexpress/entities/august.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_AUGUST_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/boutarel.cpp b/engines/lastexpress/entities/boutarel.cpp
index 95ec37bf50..219ddf901b 100644
--- a/engines/lastexpress/entities/boutarel.cpp
+++ b/engines/lastexpress/entities/boutarel.cpp
@@ -476,10 +476,13 @@ IMPLEMENT_FUNCTION_IS(17, Boutarel, function17, TimeValue)
break;
case kActionNone:
- TIME_CHECK_CALLBACK_ACTION(params->param1, params->param6);
+ if (Entity::timeCheckCallbackAction((TimeValue)params->param1, params->param6))
+ break;
if (params->param5) {
- UPDATE_PARAM(params->param7, getState()->timeTicks, 90)
+ if (!Entity::updateParameter(params->param7, getState()->timeTicks, 90))
+ break;
+
getScenes()->loadSceneFromPosition(kCarRestaurant, 51);
} else {
params->param7 = 0;
@@ -514,7 +517,8 @@ IMPLEMENT_FUNCTION_I(18, Boutarel, function18, TimeValue)
}
if (params->param2) {
- UPDATE_PARAM(params->param5, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param5, getState()->timeTicks, 75))
+ break;
params->param2 = 0;
params->param3 = 1;
@@ -613,7 +617,7 @@ IMPLEMENT_FUNCTION(19, Boutarel, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Boutarel, setup_chapter1Handler));
break;
case kActionDefault:
@@ -642,14 +646,14 @@ IMPLEMENT_FUNCTION(20, Boutarel, function20)
break;
if (!params->param2) {
- UPDATE_PARAM_PROC(params->param3, getState()->time, 4500)
+ if (Entity::updateParameter(params->param3, getState()->time, 4500)) {
setCallback(3);
setup_playSound("MRB1078A");
break;
- UPDATE_PARAM_PROC_END
+ }
}
- TIME_CHECK_CALLBACK_1(kTime1138500, params->param4, 4, setup_function14, false);
+ Entity::timeCheckCallback(kTime1138500, params->param4, 4, false, WRAP_SETUP_FUNCTION_B(Boutarel, setup_function14));
break;
case kActionDefault:
@@ -674,7 +678,7 @@ IMPLEMENT_FUNCTION(20, Boutarel, function20)
break;
case 3:
- TIME_CHECK_CALLBACK_1(kTime1138500, params->param4, 4, setup_function14, false);
+ Entity::timeCheckCallback(kTime1138500, params->param4, 4, false, WRAP_SETUP_FUNCTION_B(Boutarel, setup_function14));
break;
case 4:
@@ -832,7 +836,7 @@ IMPLEMENT_FUNCTION(24, Boutarel, chapter2Handler)
break;
case kActionNone:
- TIME_CHECK_CALLBACK_1(kTime1759500, params->param2, 1, setup_function14, false);
+ Entity::timeCheckCallback(kTime1759500, params->param2, 1, false, WRAP_SETUP_FUNCTION_B(Boutarel, setup_function14));
break;
case kActionDefault:
@@ -932,9 +936,9 @@ IMPLEMENT_FUNCTION(29, Boutarel, function29)
break;
case kActionNone:
- UPDATE_PARAM_PROC(params->param2, getState()->time, 450)
+ if (Entity::updateParameter(params->param2, getState()->time, 450)) {
getSavePoints()->push(kEntityBoutarel, kEntityServers1, kAction256200848);
- UPDATE_PARAM_PROC_END
+ }
if (!params->param1)
break;
@@ -957,7 +961,7 @@ IMPLEMENT_FUNCTION(29, Boutarel, function29)
}
}
- TIME_CHECK_CALLBACK_1(kTime2002500, params->param4, 1, setup_function14, true);
+ Entity::timeCheckCallback(kTime2002500, params->param4, 1, true, WRAP_SETUP_FUNCTION_B(Boutarel, setup_function14));
break;
case kActionDefault:
@@ -970,7 +974,7 @@ IMPLEMENT_FUNCTION(29, Boutarel, function29)
break;
case 1:
- TIME_CHECK_CALLBACK_1(kTime2002500, params->param4, 1, setup_function14, true);
+ Entity::timeCheckCallback(kTime2002500, params->param4, 1, true, WRAP_SETUP_FUNCTION_B(Boutarel, setup_function14));
break;
case 2:
@@ -1043,7 +1047,7 @@ IMPLEMENT_FUNCTION(32, Boutarel, chapter4Handler)
break;
case kActionNone:
- TIME_CHECK(kTime2367000, params->param1, setup_function33);
+ Entity::timeCheck(kTime2367000, params->param1, WRAP_SETUP_FUNCTION(Boutarel, setup_function33));
break;
case kActionDefault:
@@ -1061,7 +1065,7 @@ IMPLEMENT_FUNCTION(33, Boutarel, function33)
case kActionNone:
if (params->param1)
- TIME_CHECK_CALLBACK_1(kTime2389500, params->param2, 3, setup_function14, false);
+ Entity::timeCheckCallback(kTime2389500, params->param2, 3, false, WRAP_SETUP_FUNCTION_B(Boutarel, setup_function14));
break;
case kActionDefault:
@@ -1109,7 +1113,8 @@ IMPLEMENT_FUNCTION(34, Boutarel, function34)
break;
case kActionNone:
- TIME_CHECK(kTime2470500, params->param1, setup_function35);
+ if (Entity::timeCheck(kTime2470500, params->param1, WRAP_SETUP_FUNCTION(Boutarel, setup_function35)))
+ break;
if (getState()->time > kTime2457000 && getEvent(kEventAugustDrink)) {
getSavePoints()->push(kEntityBoutarel, kEntityAbbot, kAction159003408);
diff --git a/engines/lastexpress/entities/boutarel.h b/engines/lastexpress/entities/boutarel.h
index 5eb264631c..04838f6527 100644
--- a/engines/lastexpress/entities/boutarel.h
+++ b/engines/lastexpress/entities/boutarel.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_BOUTAREL_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/chapters.cpp b/engines/lastexpress/entities/chapters.cpp
index eab4dfe2c1..d373432710 100644
--- a/engines/lastexpress/entities/chapters.cpp
+++ b/engines/lastexpress/entities/chapters.cpp
@@ -384,12 +384,6 @@ IMPLEMENT_FUNCTION(7, Chapters, chapter1Init)
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
-#define PLAY_STEAM() { \
- getSoundQueue()->resetState(); \
- getSound()->playSteam((CityIndex)ENTITY_PARAM(0, 4)); \
- ENTITY_PARAM(0, 2) = 0; \
- }
-
IMPLEMENT_FUNCTION(8, Chapters, chapter1Handler)
switch (savepoint.action) {
default:
@@ -399,21 +393,28 @@ IMPLEMENT_FUNCTION(8, Chapters, chapter1Handler)
if (!getProgress().isTrainRunning || getState()->time >= kTime1458000)
goto label_processStations;
- UPDATE_PARAM_PROC(params->param6, getState()->timeTicks, params->param2)
+ if (Entity::updateParameter(params->param6, getState()->timeTicks, params->param2)) {
// Play sound FX
getSound()->playLocomotiveSound();
params->param2 = 225 * (4 * rnd(5) + 20);
params->param6 = 0;
- UPDATE_PARAM_PROC_END
+ }
label_processStations:
// Process stations
- TIME_CHECK_CALLBACK_2(kTime1039500, params->param7, 1, setup_savegame, kSavegameTypeTime, kTimeNone);
+ if (getState()->time > kTime1039500 && !params->param7) {
+ params->param7 = 1;
+ setCallback(1);
+ setup_savegame(kSavegameTypeTime, kTimeNone);
+
+ break;
+ }
label_enter_epernay:
// Entering Epernay station
- TIME_CHECK_CALLBACK_2(kTimeEnterEpernay, params->param8, 1, setup_enterStation, "Epernay", kCityEpernay);
+ if (timeCheckEnterStation(kTimeEnterEpernay, params->param8, 1, "Epernay", kCityEpernay))
+ break;
label_exit_epernay:
// Exiting Epernay station
@@ -443,19 +444,23 @@ label_enter_chalons:
goto label_exit_strasbourg;
// Entering Chalons station
- TIME_CHECK_CALLBACK_2(kTimeEnterChalons, CURRENT_PARAM(1, 3), 5, setup_enterStation, "Chalons", kCityChalons);
+ if (timeCheckEnterStation(kTimeEnterChalons, CURRENT_PARAM(1, 3), 5, "Chalons", kCityChalons))
+ break;
label_exit_chalons:
// Exiting Chalons station
- TIME_CHECK_CALLBACK_1(kTimeExitChalons, CURRENT_PARAM(1, 4), 6, setup_exitStation, "Chalons");
+ if (timeCheckExitStation(kTimeExitChalons, CURRENT_PARAM(1, 4), 6, "Chalons"))
+ break;
label_enter_barleduc:
// Entering Bar-Le-Duc station
- TIME_CHECK_CALLBACK_2(kTimeCityBarLeDuc, CURRENT_PARAM(1, 5), 7, setup_enterStation, "BarLeDuc", kCityBarleduc);
+ if (timeCheckEnterStation(kTimeCityBarLeDuc, CURRENT_PARAM(1, 5), 7, "BarLeDuc", kCityBarleduc))
+ break;
label_exit_barleduc:
// Exiting Bar-Le-Duc station
- TIME_CHECK_CALLBACK_1(kTimeExitBarLeDuc, CURRENT_PARAM(1, 6), 8, setup_exitStation, "BarLeDuc");
+ if (timeCheckExitStation(kTimeExitBarLeDuc, CURRENT_PARAM(1, 6), 8, "BarLeDuc"))
+ break;
label_enter_nancy:
if (getState()->time > kTime1260000 && !CURRENT_PARAM(1, 7)) {
@@ -464,50 +469,67 @@ label_enter_nancy:
}
// Entering Nancy station
- TIME_CHECK_CALLBACK_2(kTimeCityNancy, CURRENT_PARAM(1, 8), 9, setup_enterStation, "Nancy", kCityNancy);
+ if (timeCheckEnterStation(kTimeCityNancy, CURRENT_PARAM(1, 8), 9, "Nancy", kCityNancy))
+ break;
label_exit_nancy:
// Exiting Nancy station
- TIME_CHECK_CALLBACK_1(kTimeExitNancy, CURRENT_PARAM(2, 1), 10, setup_exitStation, "Nancy");
+ if (timeCheckExitStation(kTimeExitNancy, CURRENT_PARAM(2, 1), 10, "Nancy"))
+ break;
label_enter_luneville:
// Entering Luneville station
- TIME_CHECK_CALLBACK_2(kTimeCityLuneville, CURRENT_PARAM(2, 2), 11, setup_enterStation, "Luneville", kCityLuneville);
+ if (timeCheckEnterStation(kTimeCityLuneville, CURRENT_PARAM(2, 2), 11, "Luneville", kCityLuneville))
+ break;
label_exit_luneville:
// Exiting Luneville station
- TIME_CHECK_CALLBACK_1(kTimeExitLuneville, CURRENT_PARAM(2, 3), 12, setup_exitStation, "Luneville");
+ if (timeCheckExitStation(kTimeExitLuneville, CURRENT_PARAM(2, 3), 12, "Luneville"))
+ break;
label_enter_avricourt:
// Entering Avricourt station
- TIME_CHECK_CALLBACK_2(kTimeCityAvricourt, CURRENT_PARAM(2, 4), 13, setup_enterStation, "Avricourt", kCityAvricourt);
+ if (timeCheckEnterStation(kTimeCityAvricourt, CURRENT_PARAM(2, 4), 13, "Avricourt", kCityAvricourt))
+ break;
label_exit_avricourt:
// Exiting Avricourt station
- TIME_CHECK_CALLBACK_1(kTimeExitAvricourt, CURRENT_PARAM(2, 5), 14, setup_exitStation, "Avricourt");
+ if (timeCheckExitStation(kTimeExitAvricourt, CURRENT_PARAM(2, 5), 14, "Avricourt"))
+ break;
label_enter_deutschavricourt:
// Entering Deutsch-Avricourt station
- TIME_CHECK_CALLBACK_2(kTimeCityDeutschAvricourt, CURRENT_PARAM(2, 6), 15, setup_enterStation, "DeutschA", kCityDeutschAvricourt);
+ if (timeCheckEnterStation(kTimeCityDeutschAvricourt, CURRENT_PARAM(2, 6), 15, "DeutschA", kCityDeutschAvricourt))
+ break;
label_exit_deutschavricourt:
// Exiting Avricourt station
- TIME_CHECK_CALLBACK_1(kTimeExitDeutschAvricourt, CURRENT_PARAM(2, 7), 16, setup_exitStation, "DeutschA");
+ if (timeCheckExitStation(kTimeExitDeutschAvricourt, CURRENT_PARAM(2, 7), 16, "DeutschA"))
+ break;
label_enter_strasbourg:
- TIME_CHECK_CALLBACK_2(kTimeCityStrasbourg, CURRENT_PARAM(2, 8), 17, setup_savegame, kSavegameTypeTime, kTimeNone);
+ if (getState()->time > kTimeCityStrasbourg && !CURRENT_PARAM(2, 8)) {
+ CURRENT_PARAM(2, 8) = 1;
+ setCallback(17);
+ setup_savegame(kSavegameTypeTime, kTimeNone);
+
+ break;
+ }
label_exit_strasbourg:
// Exiting Strasbourg station
- TIME_CHECK_CALLBACK_1(kTimeExitStrasbourg, CURRENT_PARAM(3, 1), 19, setup_exitStation, "Strasbou");
+ if (timeCheckExitStation(kTimeExitStrasbourg, CURRENT_PARAM(3, 1), 19, "Strasbou"))
+ break;
label_enter_badenoos:
// Entering Baden Oos station
- TIME_CHECK_CALLBACK_2(kTimeCityBadenOos, CURRENT_PARAM(3, 2), 20, setup_enterStation, "BadenOos", kCityBadenOos);
+ if (timeCheckEnterStation(kTimeCityBadenOos, CURRENT_PARAM(3, 2), 20, "BadenOos", kCityBadenOos))
+ break;
label_exit_badenoos:
// Exiting Baden Oos station
- TIME_CHECK_CALLBACK_1(kTimeExitBadenOos, CURRENT_PARAM(3, 3), 21, setup_exitStation, "BadenOos");
+ if (timeCheckExitStation(kTimeExitBadenOos, CURRENT_PARAM(3, 3), 21, "BadenOos"))
+ break;
label_chapter1_next:
if (getState()->time > kTimeChapter1End3 && ! CURRENT_PARAM(3, 4)) {
@@ -522,43 +544,43 @@ label_chapter1_next:
getSavePoints()->push(kEntityChapters, kEntityTrain, kActionTrainStopRunning);
if (getEntityData(kEntityPlayer)->location != kLocationOutsideTrain) {
- PLAY_STEAM();
+ playSteam();
break;
}
if (getEntities()->isOutsideAlexeiWindow()) {
getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49);
- PLAY_STEAM();
+ playSteam();
break;
}
if (getEntities()->isOutsideAnnaWindow()) {
getScenes()->loadSceneFromPosition(kCarRedSleeping, 49);
- PLAY_STEAM();
+ playSteam();
break;
}
CarIndex car = getEntityData(kEntityPlayer)->car;
if (car < kCarRedSleeping || car > kCarCoalTender) {
if (car < kCarBaggageRear || car > kCarGreenSleeping) {
- PLAY_STEAM();
+ playSteam();
break;
}
if (getEntities()->isPlayerPosition(kCarGreenSleeping, 98)) {
getSound()->playSound(kEntityPlayer, "LIB015");
getScenes()->loadSceneFromPosition(kCarGreenSleeping, 71);
- PLAY_STEAM();
+ playSteam();
break;
}
getScenes()->loadSceneFromPosition(kCarGreenSleeping, 82);
- PLAY_STEAM();
+ playSteam();
break;
}
getScenes()->loadSceneFromPosition(kCarRestaurant, 82);
- PLAY_STEAM();
+ playSteam();
break;
}
@@ -815,7 +837,8 @@ IMPLEMENT_FUNCTION(12, Chapters, chapter2Handler)
if (!getProgress().isTrainRunning)
break;
- UPDATE_PARAM(params->param2, getState()->timeTicks, params->param1);
+ if (!Entity::updateParameter(params->param2, getState()->timeTicks, params->param1))
+ break;
getSound()->playLocomotiveSound();
@@ -901,15 +924,15 @@ IMPLEMENT_FUNCTION(15, Chapters, chapter3Handler)
case kActionNone:
if (getProgress().isTrainRunning) {
- UPDATE_PARAM_PROC(params->param4, getState()->timeTicks, params->param1)
+ if (Entity::updateParameter(params->param4, getState()->timeTicks, params->param1)) {
getSound()->playLocomotiveSound();
params->param1 = 225 * (4 * rnd(5) + 20);
params->param4 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
- UPDATE_PARAM_PROC(params->param5, getState()->timeTicks, params->param2)
+ if (Entity::updateParameter(params->param5, getState()->timeTicks, params->param2)) {
switch (rnd(2)) {
default:
break;
@@ -925,30 +948,38 @@ IMPLEMENT_FUNCTION(15, Chapters, chapter3Handler)
params->param2 = 225 * (4 * rnd(6) + 8);
params->param5 = 0;
- UPDATE_PARAM_PROC_END
+ }
- TIME_CHECK_CALLBACK_2(kTimeEnterSalzbourg, params->param6, 1, setup_enterStation, "Salzburg", kCitySalzbourg);
+ if (timeCheckEnterStation(kTimeEnterSalzbourg, params->param6, 1, "Salzburg", kCitySalzbourg))
+ break;
label_callback_1:
- TIME_CHECK_CALLBACK_1(kTimeExitSalzbourg, params->param7, 2, setup_exitStation, "Salzburg");
+ if (timeCheckExitStation(kTimeExitSalzbourg, params->param7, 2, "Salzburg"))
+ break;
label_callback_2:
- TIME_CHECK_CALLBACK_2(kTimeEnterAttnangPuchheim, params->param8, 3, setup_enterStation, "Attnang", kCityAttnangPuchheim);
+ if (timeCheckEnterStation(kTimeEnterAttnangPuchheim, params->param8, 3, "Attnang", kCityAttnangPuchheim))
+ break;
label_callback_3:
- TIME_CHECK_CALLBACK_1(kTimeExitAttnangPuchheim, CURRENT_PARAM(1, 1), 4, setup_exitStation, "Attnang");
+ if (timeCheckExitStation(kTimeExitAttnangPuchheim, CURRENT_PARAM(1, 1), 4, "Attnang"))
+ break;
label_callback_4:
- TIME_CHECK_CALLBACK_2(kTimeEnterWels, CURRENT_PARAM(1, 2), 5, setup_enterStation, "Wels", kCityWels);
+ if (timeCheckEnterStation(kTimeEnterWels, CURRENT_PARAM(1, 2), 5, "Wels", kCityWels))
+ break;
label_callback_5:
- TIME_CHECK_CALLBACK_1(kTimeEnterWels, CURRENT_PARAM(1, 3), 6, setup_exitStation, "Wels");
+ if (timeCheckExitStation(kTimeEnterWels, CURRENT_PARAM(1, 3), 6, "Wels"))
+ break;
label_callback_6:
- TIME_CHECK_CALLBACK_2(kTimeEnterLinz, CURRENT_PARAM(1, 4), 7, setup_enterStation, "Linz", kCityLinz);
+ if (timeCheckEnterStation(kTimeEnterLinz, CURRENT_PARAM(1, 4), 7, "Linz", kCityLinz))
+ break;
label_callback_7:
- TIME_CHECK_CALLBACK_1(kTimeCityLinz, CURRENT_PARAM(1, 5), 8, setup_exitStation, "Linz");
+ if (timeCheckExitStation(kTimeCityLinz, CURRENT_PARAM(1, 5), 8, "Linz"))
+ break;
label_callback_8:
if (getState()->time > kTime2187000 && !CURRENT_PARAM(1, 6)) {
@@ -956,7 +987,7 @@ label_callback_8:
getState()->timeDelta = 5;
}
- TIME_CHECK_CALLBACK_2(kTimeCityVienna, CURRENT_PARAM(1, 7), 9, setup_enterStation, "Vienna", kCityVienna);
+ timeCheckEnterStation(kTimeCityVienna, CURRENT_PARAM(1, 7), 9, "Vienna", kCityVienna);
break;
case kActionEndSound:
@@ -1200,15 +1231,15 @@ IMPLEMENT_FUNCTION(19, Chapters, chapter4Handler)
case kActionNone:
if (getProgress().isTrainRunning) {
- UPDATE_PARAM_PROC(params->param6, getState()->timeTicks, params->param4);
+ if (Entity::updateParameter(params->param6, getState()->timeTicks, params->param4)) {
getSound()->playLocomotiveSound();
params->param4 = 225 * (4 * rnd(5) + 20);
params->param6 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
- UPDATE_PARAM_PROC(params->param7, getState()->timeTicks, params->param5)
+ if (Entity::updateParameter(params->param7, getState()->timeTicks, params->param5)) {
switch (rnd(2)) {
default:
break;
@@ -1224,12 +1255,14 @@ IMPLEMENT_FUNCTION(19, Chapters, chapter4Handler)
params->param5 = 225 * (4 * rnd(6) + 8);
params->param7 = 0;
- UPDATE_PARAM_PROC_END
+ }
- TIME_CHECK_CALLBACK_2(kTimeEnterPoszony, params->param8, 1, setup_enterStation, "Pozsony", kCityPoszony);
+ if (timeCheckEnterStation(kTimeEnterPoszony, params->param8, 1, "Pozsony", kCityPoszony))
+ break;
label_exitPozsony:
- TIME_CHECK_CALLBACK_1(kTimeExitPoszony, CURRENT_PARAM(1, 1), 2, setup_exitStation, "Pozsony");
+ if (timeCheckExitStation(kTimeExitPoszony, CURRENT_PARAM(1, 1), 2, "Pozsony"))
+ break;
label_enterGalanta:
if (getObjects()->get(kObjectCompartment1).location2 == kObjectLocation1) {
@@ -1242,10 +1275,12 @@ label_enterGalanta:
if (params->param1)
goto label_callback_4;
- TIME_CHECK_CALLBACK_2(kTimeEnterGalanta, CURRENT_PARAM(1, 3), 3, setup_enterStation, "Galanta", kCityGalanta);
+ if (timeCheckEnterStation(kTimeEnterGalanta, CURRENT_PARAM(1, 3), 3, "Galanta", kCityGalanta))
+ break;
label_exitGalanta:
- TIME_CHECK_CALLBACK_1(kTimeExitGalanta, CURRENT_PARAM(1, 4), 4, setup_exitStation, "Galanta");
+ if (timeCheckExitStation(kTimeExitGalanta, CURRENT_PARAM(1, 4), 4, "Galanta"))
+ break;
label_callback_4:
if (getState()->time > kTime2470500 && !CURRENT_PARAM(1, 5)) {
@@ -1278,43 +1313,43 @@ label_callback_4:
getSavePoints()->push(kEntityChapters, kEntityTrain, kActionTrainStopRunning);
if (getEntityData(kEntityPlayer)->location != kLocationOutsideTrain) {
- PLAY_STEAM();
+ playSteam();
break;
}
if (getEntities()->isOutsideAlexeiWindow()) {
getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49);
- PLAY_STEAM();
+ playSteam();
break;
}
if (getEntities()->isOutsideAnnaWindow()) {
getScenes()->loadSceneFromPosition(kCarRedSleeping, 49);
- PLAY_STEAM();
+ playSteam();
break;
}
CarIndex car = getEntityData(kEntityPlayer)->car;
if (car < kCarRedSleeping || car > kCarCoalTender) {
if (car < kCarBaggageRear || car > kCarGreenSleeping) {
- PLAY_STEAM();
+ playSteam();
break;
}
if (getEntities()->isPlayerPosition(kCarGreenSleeping, 98)) {
getSound()->playSound(kEntityPlayer, "LIB015");
getScenes()->loadSceneFromPosition(kCarGreenSleeping, 71);
- PLAY_STEAM();
+ playSteam();
break;
}
getScenes()->loadSceneFromPosition(kCarGreenSleeping, 82);
- PLAY_STEAM();
+ playSteam();
break;
}
getScenes()->loadSceneFromPosition(kCarRestaurant, 82);
- PLAY_STEAM();
+ playSteam();
break;
}
@@ -1816,4 +1851,34 @@ void Chapters::enterExitHelper(bool isEnteringStation) {
callbackAction();
}
+void Chapters::playSteam() const {
+ getSoundQueue()->resetState();
+ getSound()->playSteam((CityIndex)ENTITY_PARAM(0, 4));
+ ENTITY_PARAM(0, 2) = 0;
+}
+
+bool Chapters::timeCheckEnterStation(TimeValue timeValue, uint &parameter, byte callback, const char *sequence, CityIndex cityIndex) {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ setCallback(callback);
+ setup_enterStation(sequence, cityIndex);
+
+ return true;
+ }
+
+ return false;
+}
+
+bool Chapters::timeCheckExitStation(TimeValue timeValue, uint &parameter, byte callback, const char *sequence) {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ setCallback(callback);
+ setup_exitStation(sequence);
+
+ return true;
+ }
+
+ return false;
+}
+
} // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/chapters.h b/engines/lastexpress/entities/chapters.h
index 353d3a6b5b..fb52ea3ee4 100644
--- a/engines/lastexpress/entities/chapters.h
+++ b/engines/lastexpress/entities/chapters.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_CHAPTERS_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
@@ -154,8 +153,11 @@ public:
DECLARE_FUNCTION(chapter5Handler)
private:
+ bool timeCheckEnterStation(TimeValue timeValue, uint &parameter, byte callback, const char *sequence, CityIndex cityIndex);
+ bool timeCheckExitStation(TimeValue timeValue, uint &parameter, byte callback, const char *sequence);
void enterExitStation(const SavePoint &savepoint, bool isEnteringStation);
void enterExitHelper(bool isEnteringStation);
+ void playSteam() const;
};
} // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/cooks.cpp b/engines/lastexpress/entities/cooks.cpp
index 63494e6062..5e8a2df8cb 100644
--- a/engines/lastexpress/entities/cooks.cpp
+++ b/engines/lastexpress/entities/cooks.cpp
@@ -239,7 +239,7 @@ IMPLEMENT_FUNCTION(5, Cooks, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Cooks, setup_chapter1Handler));
break;
case kActionDefault:
@@ -260,7 +260,8 @@ IMPLEMENT_FUNCTION(6, Cooks, chapter1Handler)
break;
case kActionNone:
- UPDATE_PARAM(params->param4, getState()->time, params->param2);
+ if (!Entity::updateParameter(params->param4, getState()->time, params->param2))
+ break;
// Broken plate sound
getSound()->playSound(kEntityPlayer, "LIB122", getSound()->getSoundFlag(kEntityCooks));
@@ -373,7 +374,8 @@ IMPLEMENT_FUNCTION(9, Cooks, chapter2Handler)
break;
case kActionNone:
- UPDATE_PARAM(params->param3, getState()->time, params->param1);
+ if (!Entity::updateParameter(params->param3, getState()->time, params->param1))
+ break;
// Broken plate sound
getSound()->playSound(kEntityPlayer, "LIB122", getSound()->getSoundFlag(kEntityCooks));
@@ -432,12 +434,12 @@ IMPLEMENT_FUNCTION(11, Cooks, chapter3Handler)
break;
case kActionNone:
- UPDATE_PARAM_PROC(params->param4, getState()->time, params->param2)
+ if (Entity::updateParameter(params->param4, getState()->time, params->param2)) {
// Broken plate sound
getSound()->playSound(kEntityPlayer, "LIB122", getSound()->getSoundFlag(kEntityCooks));
params->param2 = 225 * (4 * rnd(30) + 120);
params->param4 = 0;
- UPDATE_PARAM_PROC_END
+ }
if (getState()->time > kTime2079000 && !params->param5) {
params->param1 = 0;
@@ -524,7 +526,8 @@ IMPLEMENT_FUNCTION(13, Cooks, chapter4Handler)
break;
case kActionNone:
- UPDATE_PARAM(params->param3, getState()->time, params->param1)
+ if (!Entity::updateParameter(params->param3, getState()->time, params->param1))
+ break;
// Broken plate sound
getSound()->playSound(kEntityPlayer, "LIB122", getSound()->getSoundFlag(kEntityCooks));
diff --git a/engines/lastexpress/entities/cooks.h b/engines/lastexpress/entities/cooks.h
index 3ab7d35161..f01d0b2ca0 100644
--- a/engines/lastexpress/entities/cooks.h
+++ b/engines/lastexpress/entities/cooks.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_COOKS_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/coudert.cpp b/engines/lastexpress/entities/coudert.cpp
index dc7beb3167..b604277903 100644
--- a/engines/lastexpress/entities/coudert.cpp
+++ b/engines/lastexpress/entities/coudert.cpp
@@ -37,15 +37,6 @@
namespace LastExpress {
-#define SAVEGAME_BLOOD_JACKET() \
- if (getProgress().jacket == kJacketBlood \
- && getEntities()->isDistanceBetweenEntities(kEntityCoudert, kEntityPlayer, 1000) \
- && !getEntities()->isInsideCompartments(kEntityPlayer) \
- && !getEntities()->checkFields10(kEntityPlayer)) { \
- setCallback(1); \
- setup_savegame(kSavegameTypeEvent, kEventMertensBloodJacket); \
- }
-
Coudert::Coudert(LastExpressEngine *engine) : Entity(engine, kEntityCoudert) {
ADD_CALLBACK_FUNCTION(Coudert, reset);
ADD_CALLBACK_FUNCTION(Coudert, bloodJacket);
@@ -124,7 +115,7 @@ IMPLEMENT_FUNCTION_S(2, Coudert, bloodJacket)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
break;
case kActionExitCompartment:
@@ -151,7 +142,7 @@ IMPLEMENT_FUNCTION_SI(3, Coudert, enterExitCompartment, ObjectIndex)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
return;
case kActionCallback:
@@ -177,7 +168,7 @@ IMPLEMENT_FUNCTION(4, Coudert, callbackActionOnDirection)
break;
}
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
break;
case kActionExitCompartment:
@@ -200,7 +191,7 @@ IMPLEMENT_FUNCTION_SIII(5, Coudert, enterExitCompartment2, ObjectIndex, EntityPo
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
return;
case kActionCallback:
@@ -221,7 +212,7 @@ IMPLEMENT_FUNCTION_S(6, Coudert, playSound)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
break;
case kActionEndSound:
@@ -250,7 +241,7 @@ IMPLEMENT_FUNCTION_NOSETUP(7, Coudert, playSound16)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
break;
case kActionEndSound:
@@ -363,9 +354,10 @@ IMPLEMENT_FUNCTION_I(10, Coudert, updateFromTime, uint32)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
- UPDATE_PARAM(params->param2, getState()->time, params->param1);
+ if (!Entity::updateParameter(params->param2, getState()->time, params->param1))
+ break;
callbackAction();
break;
@@ -386,9 +378,10 @@ IMPLEMENT_FUNCTION_I(11, Coudert, updateFromTicks, uint32)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
- UPDATE_PARAM(params->param2, getState()->timeTicks, params->param1);
+ if (!Entity::updateParameter(params->param2, getState()->timeTicks, params->param1))
+ break;
callbackAction();
break;
@@ -460,7 +453,7 @@ IMPLEMENT_FUNCTION_II(13, Coudert, function13, bool, EntityIndex)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
if (!params->param2 && !params->param3) {
@@ -485,7 +478,8 @@ IMPLEMENT_FUNCTION_II(13, Coudert, function13, bool, EntityIndex)
}
}
- UPDATE_PARAM(params->param5, getState()->timeTicks, 225);
+ if (!Entity::updateParameter(params->param5, getState()->timeTicks, 225))
+ break;
getData()->inventoryItem = kItemNone;
setCallback(5);
@@ -582,7 +576,7 @@ IMPLEMENT_FUNCTION_I(14, Coudert, function14, EntityIndex)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
break;
case kActionDefault:
@@ -914,11 +908,12 @@ IMPLEMENT_FUNCTION_II(20, Coudert, function20, ObjectIndex, ObjectIndex)
break;
case kActionNone:
- UPDATE_PARAM_PROC(CURRENT_PARAM(1, 3), getState()->time, 300)
+ if (Entity::updateParameter(CURRENT_PARAM(1, 3), getState()->time, 300)) {
getSound()->playSound(kEntityPlayer, "ZFX1004", getSound()->getSoundFlag(kEntityCoudert));
- UPDATE_PARAM_PROC_END
+ }
- UPDATE_PARAM(CURRENT_PARAM(1, 4), getState()->time, 900);
+ if (!Entity::updateParameter(CURRENT_PARAM(1, 4), getState()->time, 900))
+ break;
getObjects()->updateLocation2((ObjectIndex)params->param1, kObjectLocation1);
@@ -997,7 +992,8 @@ IMPLEMENT_FUNCTION(21, Coudert, function21)
case kActionNone:
if (!params->param1) {
- UPDATE_PARAM(params->param2, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param2, getState()->timeTicks, 75))
+ break;
setCallback(3);
setup_enterExitCompartment("627Zh", kObjectCompartmentH);
@@ -1098,7 +1094,8 @@ IMPLEMENT_FUNCTION(22, Coudert, function22)
case kActionNone:
if (!params->param1) {
- UPDATE_PARAM(params->param2, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param2, getState()->timeTicks, 75))
+ break;
setCallback(3);
setup_enterExitCompartment("627Rg", kObjectCompartmentG);
@@ -1309,7 +1306,8 @@ IMPLEMENT_FUNCTION(26, Coudert, function26)
case kActionNone:
if (params->param1) {
- UPDATE_PARAM(params->param2, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param2, getState()->timeTicks, 75))
+ break;
setCallback(3);
setup_enterExitCompartment2("627Zd", kObjectCompartmentD, kPosition_5790, kPosition_6130);
@@ -1400,7 +1398,8 @@ IMPLEMENT_FUNCTION(27, Coudert, function27)
case kActionNone:
if (!params->param1) {
- UPDATE_PARAM(params->param2, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param2, getState()->timeTicks, 75))
+ break;
setCallback(3);
setup_enterExitCompartment2("627Rc", kObjectCompartmentC, kPosition_6470, kPosition_6130);
@@ -1900,7 +1899,8 @@ IMPLEMENT_FUNCTION_I(35, Coudert, function35, bool)
getScenes()->loadSceneFromPosition(kCarRestaurant, 65);
}
- UPDATE_PARAM(params->param2, getState()->time, 2700);
+ if (!Entity::updateParameter(params->param2, getState()->time, 2700))
+ break;
getSavePoints()->push(kEntityCoudert, kEntityMax, kActionMaxFreeFromCage);
@@ -1963,7 +1963,7 @@ IMPLEMENT_FUNCTION(36, Coudert, chapter1)
break;
case kActionNone:
- TIME_CHECK_CALLBACK(kTimeChapter1, params->param1, 1, setup_chapter1Handler)
+ Entity::timeCheckCallback(kTimeChapter1, params->param1, 1, WRAP_SETUP_FUNCTION(Coudert, setup_chapter1Handler));
break;
case kActionDefault:
@@ -2281,22 +2281,22 @@ label_callback_9:
label_callback_10:
if (getState()->time > kTime1189800 && !ENTITY_PARAM(0, 1) && !ENTITY_PARAM(2, 1)) {
- UPDATE_PARAM_PROC(params->param3, getState()->time, 2700);
+ if (Entity::updateParameter(params->param3, getState()->time, 2700)) {
ENTITY_PARAM(0, 2) = 1;
ENTITY_PARAM(0, 1) = 1;
getEntities()->drawSequenceLeft(kEntityCoudert, "697F");
params->param3 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (!ENTITY_PARAM(0, 2))
break;
- TIME_CHECK_OBJECT(kTime1107000, params->param4, kObject111, kObjectLocation2);
- TIME_CHECK_OBJECT(kTime1161000, params->param5, kObject111, kObjectLocation3);
- TIME_CHECK_OBJECT(kTime1206000, params->param6, kObject111, kObjectLocation4);
+ timeCheckObject(kTime1107000, params->param4, kObject111, kObjectLocation2);
+ timeCheckObject(kTime1161000, params->param5, kObject111, kObjectLocation3);
+ timeCheckObject(kTime1206000, params->param6, kObject111, kObjectLocation4);
break;
case kAction1:
@@ -2825,28 +2825,34 @@ label_callback_12:
}
label_callback_13:
- TIME_CHECK_CALLBACK(kTime2088900, params->param1, 14, setup_function32);
+ if (Entity::timeCheckCallback(kTime2088900, params->param1, 14, WRAP_SETUP_FUNCTION(Coudert, setup_function32)))
+ break;
label_callback_14:
- TIME_CHECK_CALLBACK(kTime2119500, params->param2, 15, setup_function32);
+ if (Entity::timeCheckCallback(kTime2119500, params->param2, 15, WRAP_SETUP_FUNCTION(Coudert, setup_function32)))
+ break;
label_callback_15:
- TIME_CHECK_CALLBACK(kTime2138400, params->param3, 16, setup_function32);
+ if (Entity::timeCheckCallback(kTime2138400, params->param3, 16, WRAP_SETUP_FUNCTION(Coudert, setup_function32)))
+ break;
label_callback_16:
- TIME_CHECK_CALLBACK(kTime2147400, params->param4, 17, setup_function32);
+ if (Entity::timeCheckCallback(kTime2147400, params->param4, 17, WRAP_SETUP_FUNCTION(Coudert, setup_function32)))
+ break;
label_callback_17:
- TIME_CHECK_CALLBACK(kTime2160000, params->param5, 18, setup_function32);
+ if (Entity::timeCheckCallback(kTime2160000, params->param5, 18, WRAP_SETUP_FUNCTION(Coudert, setup_function32)))
+ break;
label_callback_18:
- TIME_CHECK_CALLBACK(kTime2205000, params->param6, 19, setup_function32);
+ if (Entity::timeCheckCallback(kTime2205000, params->param6, 19, WRAP_SETUP_FUNCTION(Coudert, setup_function32)))
+ break;
label_callback_19:
if (ENTITY_PARAM(0, 2)) {
- TIME_CHECK_OBJECT(kTime2025000, params->param7, kObject111, kObjectLocation7);
- TIME_CHECK_OBJECT(kTime2133000, params->param8, kObject111, kObjectLocation8);
- TIME_CHECK_OBJECT(kTime2173500, CURRENT_PARAM(1, 1), kObject111, kObjectLocation9);
+ timeCheckObject(kTime2025000, params->param7, kObject111, kObjectLocation7);
+ timeCheckObject(kTime2133000, params->param8, kObject111, kObjectLocation8);
+ timeCheckObject(kTime2173500, CURRENT_PARAM(1, 1), kObject111, kObjectLocation9);
}
break;
@@ -3539,11 +3545,11 @@ label_callback_1:
params->param2 = (uint)(getState()->time + 4500);
if (params->param3 != kTimeInvalid) {
- UPDATE_PARAM_PROC_TIME(params->param2, !getEntities()->isPlayerInCar(kCarRedSleeping), params->param3, 0)
+ if (Entity::updateParameterTime((TimeValue)params->param2, !getEntities()->isPlayerInCar(kCarRedSleeping), params->param3, 0)) {
setCallback(2);
setup_function55();
break;
- UPDATE_PARAM_PROC_END
+ }
}
}
@@ -3556,18 +3562,22 @@ label_callback_2:
label_callback_3:
if (!params->param1) {
- TIME_CHECK_CALLBACK(kTime2394000, params->param4, 4, setup_function56);
+ if (Entity::timeCheckCallback(kTime2394000, params->param4, 4, WRAP_SETUP_FUNCTION(Coudert, setup_function56)))
+ break;
label_callback_4:
- TIME_CHECK_CALLBACK(kTime2434500, params->param5, 5, setup_function32);
+ if (Entity::timeCheckCallback(kTime2434500, params->param5, 5, WRAP_SETUP_FUNCTION(Coudert, setup_function32)))
+ break;
label_callback_5:
- TIME_CHECK_CALLBACK(kTime2448000, params->param6, 6, setup_function32);
+ if (Entity::timeCheckCallback(kTime2448000, params->param6, 6, WRAP_SETUP_FUNCTION(Coudert, setup_function32)))
+ break;
}
label_callback_6:
if (getState()->time > kTime2538000 && !ENTITY_PARAM(0, 1) && !ENTITY_PARAM(2, 1)) {
- UPDATE_PARAM(params->param7, getState()->time, 2700);
+ if (!Entity::updateParameter(params->param7, getState()->time, 2700))
+ break;
ENTITY_PARAM(0, 2) = 0;
ENTITY_PARAM(0, 1) = 1;
@@ -4032,7 +4042,8 @@ IMPLEMENT_FUNCTION(62, Coudert, function62)
case kActionNone:
if (params->param1) {
- UPDATE_PARAM(params->param4, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param4, getState()->timeTicks, 75))
+ break;
params->param1 = 0;
params->param2 = 1;
diff --git a/engines/lastexpress/entities/coudert.h b/engines/lastexpress/entities/coudert.h
index 45d13ce9bb..8303c80a32 100644
--- a/engines/lastexpress/entities/coudert.h
+++ b/engines/lastexpress/entities/coudert.h
@@ -24,8 +24,6 @@
#define LASTEXPRESS_COUDERT_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
-
namespace LastExpress {
class LastExpressEngine;
diff --git a/engines/lastexpress/entities/entity.cpp b/engines/lastexpress/entities/entity.cpp
index 7fdfd53d2f..dad5e67392 100644
--- a/engines/lastexpress/entities/entity.cpp
+++ b/engines/lastexpress/entities/entity.cpp
@@ -22,17 +22,16 @@
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
-
#include "lastexpress/data/sequence.h"
#include "lastexpress/game/action.h"
#include "lastexpress/game/entities.h"
#include "lastexpress/game/logic.h"
-#include "lastexpress/game/scenes.h"
-#include "lastexpress/game/state.h"
+#include "lastexpress/game/object.h"
#include "lastexpress/game/savegame.h"
#include "lastexpress/game/savepoint.h"
+#include "lastexpress/game/state.h"
+#include "lastexpress/game/scenes.h"
#include "lastexpress/lastexpress.h"
@@ -51,6 +50,19 @@ EntityData::EntityCallData::~EntityCallData() {
SAFE_DELETE(sequence3);
}
+void EntityData::EntityCallData::syncString(Common::Serializer &s, Common::String &string, uint length) const {
+ char seqName[13];
+ memset(&seqName, 0, length);
+
+ if (s.isSaving())
+ strcpy((char *)&seqName, string.c_str());
+
+ s.syncBytes((byte *)&seqName, length);
+
+ if (s.isLoading())
+ string = seqName;
+}
+
void EntityData::EntityCallData::saveLoadWithSerializer(Common::Serializer &s) {
for (uint i = 0; i < ARRAYSIZE(callbacks); i++)
s.syncAsByte(callbacks[i]);
@@ -77,23 +89,19 @@ void EntityData::EntityCallData::saveLoadWithSerializer(Common::Serializer &s) {
s.syncAsByte(directionSwitch);
// Sync strings
-#define SYNC_STRING(varName, count) { \
- char seqName[13]; \
- memset(&seqName, 0, count); \
- if (s.isSaving()) strcpy((char *)&seqName, varName.c_str()); \
- s.syncBytes((byte *)&seqName, count); \
- if (s.isLoading()) varName = seqName; \
-}
-
- SYNC_STRING(sequenceName, 13);
- SYNC_STRING(sequenceName2, 13);
- SYNC_STRING(sequenceNamePrefix, 7);
- SYNC_STRING(sequenceNameCopy, 13);
-
-#undef SYNC_STRING
+ syncString(s, sequenceName, 13);
+ syncString(s, sequenceName2, 13);
+ syncString(s, sequenceNamePrefix, 7);
+ syncString(s, sequenceNameCopy, 13);
// Skip pointers to frame & sequences
- s.skip(5 * 4);
+ // (we are using a compressed stream, so we cannot seek on load)
+ if (s.isLoading()) {
+ byte empty[5 * 4];
+ s.syncBytes(empty, 5 * 4);
+ } else {
+ s.skip(5 * 4);
+ }
}
//////////////////////////////////////////////////////////////////////////
@@ -109,7 +117,7 @@ EntityData::EntityParameters *EntityData::getParameters(uint callback, byte inde
return _parameters[callback].parameters[index];
}
-int EntityData::getCallback(uint callback) const {
+byte EntityData::getCallback(uint callback) const {
if (callback >= 16)
error("[EntityData::getCallback] Invalid callback value (was: %d, max: 16)", callback);
@@ -252,6 +260,28 @@ void Entity::savegame(const SavePoint &savepoint) {
}
}
+void Entity::savegameBloodJacket() {
+ if (getProgress().jacket == kJacketBlood
+ && getEntities()->isDistanceBetweenEntities(_entityIndex, kEntityPlayer, 1000)
+ && !getEntities()->isInsideCompartments(kEntityPlayer)
+ && !getEntities()->checkFields10(kEntityPlayer)) {
+ setCallback(1);
+
+ switch (_entityIndex) {
+ default:
+ break;
+
+ case kEntityCoudert:
+ setup_savegame(kSavegameTypeEvent, kEventCoudertBloodJacket);
+ break;
+
+ case kEntityMertens:
+ setup_savegame(kSavegameTypeEvent, kEventCoudertBloodJacket);
+ break;
+ }
+ }
+}
+
void Entity::playSound(const SavePoint &savepoint, bool resetItem, SoundFlag flag) {
EXPOSE_PARAMS(EntityData::EntityParametersSIIS)
@@ -322,7 +352,9 @@ void Entity::updateFromTicks(const SavePoint &savepoint) {
break;
case kActionNone:
- UPDATE_PARAM(params->param2, getState()->timeTicks, params->param1)
+ if (Entity::updateParameter(params->param2, getState()->timeTicks, params->param1))
+ break;
+
callbackAction();
break;
}
@@ -336,7 +368,9 @@ void Entity::updateFromTime(const SavePoint &savepoint) {
break;
case kActionNone:
- UPDATE_PARAM(params->param2, getState()->time, params->param1)
+ if (Entity::updateParameter(params->param2, getState()->time, params->param1))
+ break;
+
callbackAction();
break;
}
@@ -464,6 +498,74 @@ void Entity::enterExitCompartment(const SavePoint &savepoint, EntityPosition pos
}
}
+void Entity::goToCompartment(const SavePoint &savepoint, ObjectIndex compartmentFrom, EntityPosition positionFrom, Common::String sequenceFrom, Common::String sequenceTo) {
+ switch (savepoint.action) {
+ default:
+ break;
+
+ case kActionDefault:
+ getData()->entityPosition = positionFrom;
+ setCallback(1);
+ setup_enterExitCompartment(sequenceFrom.c_str(), compartmentFrom);
+ break;
+
+ case kActionCallback:
+ switch (getCallback()) {
+ default:
+ break;
+
+ case 1:
+ setCallback(2);
+ setup_enterExitCompartment(sequenceTo.c_str(), compartmentFrom);
+ break;
+
+ case 2:
+ getData()->entityPosition = positionFrom;
+ getEntities()->clearSequences(_entityIndex);
+ callbackAction();
+ break;
+ }
+ break;
+ }
+}
+
+void Entity::goToCompartmentFromCompartment(const SavePoint &savepoint, ObjectIndex compartmentFrom, EntityPosition positionFrom, Common::String sequenceFrom, ObjectIndex compartmentTo, EntityPosition positionTo, Common::String sequenceTo) {
+ switch (savepoint.action) {
+ default:
+ break;
+
+ case kActionDefault:
+ getData()->entityPosition = positionFrom;
+ getData()->location = kLocationOutsideCompartment;
+ setCallback(1);
+ setup_enterExitCompartment(sequenceFrom.c_str(), compartmentFrom);
+ break;
+
+ case kActionCallback:
+ switch (getCallback()) {
+ default:
+ break;
+
+ case 1:
+ setCallback(2);
+ setup_updateEntity(kCarGreenSleeping, positionTo);
+ break;
+
+ case 2:
+ setCallback(3);
+ setup_enterExitCompartment(sequenceTo.c_str(), compartmentTo);
+ break;
+
+ case 3:
+ getData()->location = kLocationInsideCompartment;
+ getEntities()->clearSequences(_entityIndex);
+ callbackAction();
+ break;
+ }
+ break;
+ }
+}
+
void Entity::updatePosition(const SavePoint &savepoint, bool handleExcuseMe) {
EXPOSE_PARAMS(EntityData::EntityParametersSIII)
@@ -501,4 +603,374 @@ void Entity::callbackAction() {
getSavePoints()->call(_entityIndex, _entityIndex, kActionCallback);
}
+//////////////////////////////////////////////////////////////////////////
+// Setup functions
+//////////////////////////////////////////////////////////////////////////
+void Entity::setup(const char *name, uint index) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s()", name);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersIIII>();
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupI(const char *name, uint index, uint param1) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%u)", name, param1);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersIIII>();
+
+ EntityData::EntityParametersIIII *params = (EntityData::EntityParametersIIII *)_data->getCurrentParameters();
+ params->param1 = (unsigned int)param1;
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupII(const char *name, uint index, uint param1, uint param2) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%u, %u)", name, param1, param2);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersIIII>();
+
+ EntityData::EntityParametersIIII *params = (EntityData::EntityParametersIIII *)_data->getCurrentParameters();
+ params->param1 = param1;
+ params->param2 = param2;
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupIII(const char *name, uint index, uint param1, uint param2, uint param3) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%u, %u, %u)", name, param1, param2, param3);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersIIII>();
+
+ EntityData::EntityParametersIIII *params = (EntityData::EntityParametersIIII *)_data->getCurrentParameters();
+ params->param1 = param1;
+ params->param2 = param2;
+ params->param3 = param3;
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupS(const char *name, uint index, const char *seq1) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%s)", name, seq1);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersSIIS>();
+
+ EntityData::EntityParametersSIIS *params = (EntityData::EntityParametersSIIS*)_data->getCurrentParameters();
+ strncpy(params->seq1, seq1, 12);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupSS(const char *name, uint index, const char *seq1, const char *seq2) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%s, %s)", name, seq1, seq2);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersSSII>();
+
+ EntityData::EntityParametersSSII *params = (EntityData::EntityParametersSSII*)_data->getCurrentParameters();
+ strncpy(params->seq1, seq1, 12);
+ strncpy(params->seq2, seq2, 12);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupSI(const char *name, uint index, const char *seq1, uint param4) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%s, %u)", name, seq1, param4);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersSIIS>();
+
+ EntityData::EntityParametersSIIS *params = (EntityData::EntityParametersSIIS *)_data->getCurrentParameters();
+ strncpy(params->seq1, seq1, 12);
+ params->param4 = param4;
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupSII(const char *name, uint index, const char *seq1, uint param4, uint param5) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%s, %u, %u)", name, seq1, param4, param5);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersSIIS>();
+
+ EntityData::EntityParametersSIIS *params = (EntityData::EntityParametersSIIS *)_data->getCurrentParameters();
+ strncpy(params->seq1, seq1, 12);
+ params->param4 = param4;
+ params->param5 = param5;
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupSIII(const char *name, uint index, const char *seq, uint param4, uint param5, uint param6) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%s, %u, %u, %u)", name, seq, param4, param5, param6);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersSIII>();
+
+ EntityData::EntityParametersSIII *params = (EntityData::EntityParametersSIII *)_data->getCurrentParameters();
+ strncpy(params->seq, seq, 12);
+ params->param4 = param4;
+ params->param5 = param5;
+ params->param6 = param6;
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupSIIS(const char *name, uint index, const char *seq1, uint param4, uint param5, const char *seq2) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%s, %u, %u, %s)", name, seq1, param4, param5, seq2);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersSIIS>();
+
+ EntityData::EntityParametersSIIS *params = (EntityData::EntityParametersSIIS *)_data->getCurrentParameters();
+ strncpy(params->seq1, seq1, 12);
+ params->param4 = param4;
+ params->param5 = param5;
+ strncpy(params->seq2, seq2, 12);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupSSI(const char *name, uint index, const char *seq1, const char *seq2, uint param7) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%s, %s, %u)", name, seq1, seq2, param7);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersSSII>();
+
+ EntityData::EntityParametersSSII *params = (EntityData::EntityParametersSSII *)_data->getCurrentParameters();
+ strncpy(params->seq1, seq1, 12);
+ strncpy(params->seq2, seq2, 12);
+ params->param7 = param7;
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupIS(const char *name, uint index, uint param1, const char *seq) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%u, %s)", name, param1, seq);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersISII>();
+
+ EntityData::EntityParametersISII *params = (EntityData::EntityParametersISII *)_data->getCurrentParameters();
+ params->param1 = (unsigned int)param1;
+ strncpy(params->seq, seq, 12);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupISS(const char *name, uint index, uint param1, const char *seq1, const char *seq2) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%u, %s, %s)", name, param1, seq1, seq2);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersISSI>();
+
+ EntityData::EntityParametersISSI *params = (EntityData::EntityParametersISSI *)_data->getCurrentParameters();
+ params->param1 = param1;
+ strncpy(params->seq1, seq1, 12);
+ strncpy(params->seq2, seq2, 12);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupIIS(const char *name, uint index, uint param1, uint param2, const char *seq) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%u, %u, %s)", name, param1, param2, seq);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersIISI>();
+
+ EntityData::EntityParametersIISI *params = (EntityData::EntityParametersIISI *)_data->getCurrentParameters();
+ params->param1 = param1;
+ params->param2 = param2;
+ strncpy(params->seq, seq, 12);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+void Entity::setupIISS(const char *name, uint index, uint param1, uint param2, const char *seq1, const char *seq2) {
+ debugC(6, kLastExpressDebugLogic, "Entity: %s(%u, %u, %s, %s)", name, param1, param2, seq1, seq2);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]);
+ _data->setCurrentCallback(index);
+ _data->resetCurrentParameters<EntityData::EntityParametersIISS>();
+
+ EntityData::EntityParametersIISS *params = (EntityData::EntityParametersIISS *)_data->getCurrentParameters();
+ params->param1 = param1;
+ params->param2 = param2;
+ strncpy(params->seq1, seq1, 12);
+ strncpy(params->seq2, seq2, 12);
+
+ _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
+}
+
+//////////////////////////////////////////////////////////////////////////
+// Helper functions
+//////////////////////////////////////////////////////////////////////////
+
+bool Entity::updateParameter(uint &parameter, uint timeType, uint delta) const {
+ if (!parameter)
+ parameter = (uint)(timeType + delta);
+
+ if (parameter >= timeType)
+ return false;
+
+ parameter = kTimeInvalid;
+
+ return true;
+}
+
+bool Entity::updateParameterTime(TimeValue timeValue, bool check, uint &parameter, uint delta) const {
+ if (getState()->time <= timeValue) {
+ if (check || !parameter)
+ parameter = (uint)(getState()->time + delta);
+ }
+
+ if (parameter >= getState()->time && getState()->time <= timeValue)
+ return false;
+
+ parameter = kTimeInvalid;
+
+ return true;
+}
+
+bool Entity::updateParameterCheck(uint &parameter, uint timeType, uint delta) const {
+ if (parameter && parameter >= timeType)
+ return false;
+
+ if (!parameter)
+ parameter = (uint)(timeType + delta);
+
+ return true;
+}
+
+bool Entity::timeCheck(TimeValue timeValue, uint &parameter, Common::Functor0<void> *function) const {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ (*function)();
+
+ return true;
+ }
+
+ return false;
+}
+
+bool Entity::timeCheckCallback(TimeValue timeValue, uint &parameter, byte callback, Common::Functor0<void> *function) {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ setCallback(callback);
+ (*function)();
+
+ return true;
+ }
+
+ return false;
+}
+
+bool Entity::timeCheckCallback(TimeValue timeValue, uint &parameter, byte callback, const char *str, Common::Functor1<const char *, void> *function) {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ setCallback(callback);
+ (*function)(str);
+
+ return true;
+ }
+
+ return false;
+}
+
+bool Entity::timeCheckCallback(TimeValue timeValue, uint &parameter, byte callback, bool check, Common::Functor1<bool, void> *function) {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ setCallback(callback);
+ (*function)(check);
+
+ return true;
+ }
+
+ return false;
+}
+
+bool Entity::timeCheckCallbackInventory(TimeValue timeValue, uint &parameter, byte callback, Common::Functor0<void> *function) {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ getData()->inventoryItem = kItemNone;
+ setCallback(callback);
+ (*function)();
+
+ return true;
+ }
+
+ return false;
+}
+
+bool Entity::timeCheckCar(TimeValue timeValue, uint &parameter, byte callback, Common::Functor0<void> *function) {
+ if ((getState()->time <= timeValue && !getEntities()->isPlayerInCar(kCarGreenSleeping)) || !parameter)
+ parameter = (uint)getState()->time + 75;
+
+ if (getState()->time > timeValue || parameter < getState()->time) {
+ parameter = kTimeInvalid;
+ setCallback(callback);
+ (*function)();
+
+ return true;
+ }
+
+ return false;
+}
+
+void Entity::timeCheckSavepoint(TimeValue timeValue, uint &parameter, EntityIndex entity1, EntityIndex entity2, ActionIndex action) const {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ getSavePoints()->push(entity1, entity2, action);
+ }
+}
+
+void Entity::timeCheckObject(TimeValue timeValue, uint &parameter, ObjectIndex object, ObjectLocation location) const {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ getObjects()->updateLocation2(object, location);
+ }
+}
+
+bool Entity::timeCheckCallbackAction(TimeValue timeValue, uint &parameter) {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ callbackAction();
+ return true;
+ }
+
+ return false;
+}
+
+bool Entity::timeCheckPlaySoundUpdatePosition(TimeValue timeValue, uint &parameter, byte callback, const char* sound, EntityPosition position) {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ getData()->entityPosition = position;
+ setCallback(callback);
+ setup_playSound(sound);
+ return true;
+ }
+
+ return false;
+}
+
+
} // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/entity.h b/engines/lastexpress/entities/entity.h
index 3fd2009313..c67d13db9e 100644
--- a/engines/lastexpress/entities/entity.h
+++ b/engines/lastexpress/entities/entity.h
@@ -41,10 +41,229 @@ class Sequence;
class SequenceFrame;
struct SavePoint;
+//////////////////////////////////////////////////////////////////////////
+// Declaration
+//////////////////////////////////////////////////////////////////////////
+#define DECLARE_FUNCTION(name) \
+ void setup_##name(); \
+ void name(const SavePoint &savepoint);
+
+#define DECLARE_FUNCTION_1(name, param1) \
+ void setup_##name(param1); \
+ void name(const SavePoint &savepoint);
+
+#define DECLARE_FUNCTION_2(name, param1, param2) \
+ void setup_##name(param1, param2); \
+ void name(const SavePoint &savepoint);
+
+#define DECLARE_FUNCTION_3(name, param1, param2, param3) \
+ void setup_##name(param1, param2, param3); \
+ void name(const SavePoint &savepoint);
+
+#define DECLARE_FUNCTION_4(name, param1, param2, param3, param4) \
+ void setup_##name(param1, param2, param3, param4); \
+ void name(const SavePoint &savepoint);
+
+#define DECLARE_FUNCTION_NOSETUP(name) \
+ void name(const SavePoint &savepoint);
+
+#define DECLARE_NULL_FUNCTION() \
+ void setup_nullfunction();
+
+//////////////////////////////////////////////////////////////////////////
+// Callbacks
+//////////////////////////////////////////////////////////////////////////
+#define ENTITY_CALLBACK(class, name, pointer) \
+ Common::Functor1Mem<const SavePoint&, void, class>(pointer, &class::name)
+
+#define ADD_CALLBACK_FUNCTION(class, name) \
+ _callbacks.push_back(new ENTITY_CALLBACK(class, name, this));
+
+#define ADD_NULL_FUNCTION() \
+ _callbacks.push_back(new ENTITY_CALLBACK(Entity, nullfunction, this));
+
+#define WRAP_SETUP_FUNCTION(className, method) \
+ new Common::Functor0Mem<void, className>(this, &className::method)
+
+#define WRAP_SETUP_FUNCTION_S(className, method) \
+ new Common::Functor1Mem<const char *, void, className>(this, &className::method)
+
+#define WRAP_SETUP_FUNCTION_B(className, method) \
+ new Common::Functor1Mem<bool, void, className>(this, &className::method)
+
+//////////////////////////////////////////////////////////////////////////
+// Parameters macros
+//////////////////////////////////////////////////////////////////////////
+#define CURRENT_PARAM(index, id) \
+ ((EntityData::EntityParametersIIII*)_data->getCurrentParameters(index))->param##id
+
+#define ENTITY_PARAM(index, id) \
+ ((EntityData::EntityParametersIIII*)_data->getParameters(8, index))->param##id
+
+//////////////////////////////////////////////////////////////////////////
+// Misc
+//////////////////////////////////////////////////////////////////////////
+#define RESET_ENTITY_STATE(entity, class, function) \
+ getEntities()->resetState(entity); \
+ ((class *)getEntities()->get(entity))->function();
+
+//////////////////////////////////////////////////////////////////////////
+// Implementation
+//////////////////////////////////////////////////////////////////////////
+
+// Expose parameters and check validity
+#define EXPOSE_PARAMS(type) \
+ type *params = (type *)_data->getCurrentParameters(); \
+ if (!params) \
+ error("[EXPOSE_PARAMS] Trying to call an entity function with invalid parameters"); \
+
+// function signature without setup (we keep the index for consistency but never use it)
+#define IMPLEMENT_FUNCTION_NOSETUP(index, class, name) \
+ void class::name(const SavePoint &savepoint) { \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(index=" #index ")");
+
+// simple setup with no parameters
+#define IMPLEMENT_FUNCTION(index, class, name) \
+ void class::setup_##name() { \
+ Entity::setup(#class "::setup_" #name, index); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersIIII) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "() - action: %s", ACTION_NAME(savepoint.action));
+
+#define IMPLEMENT_FUNCTION_END }
+
+// nullfunction call
+#define IMPLEMENT_NULL_FUNCTION(index, class) \
+ void class::setup_nullfunction() { \
+ Entity::setup(#class "::setup_nullfunction", index); \
+ }
+
+// setup with one uint parameter
+#define IMPLEMENT_FUNCTION_I(index, class, name, paramType) \
+ void class::setup_##name(paramType param1) { \
+ Entity::setupI(#class "::setup_" #name, index, param1); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersIIII) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d) - action: %s", params->param1, ACTION_NAME(savepoint.action));
+
+// setup with two uint parameters
+#define IMPLEMENT_FUNCTION_II(index, class, name, paramType1, paramType2) \
+ void class::setup_##name(paramType1 param1, paramType2 param2) { \
+ Entity::setupII(#class "::setup_" #name, index, param1, param2); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersIIII) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d, %d) - action: %s", params->param1, params->param2, ACTION_NAME(savepoint.action));
+
+// setup with three uint parameters
+#define IMPLEMENT_FUNCTION_III(index, class, name, paramType1, paramType2, paramType3) \
+ void class::setup_##name(paramType1 param1, paramType2 param2, paramType3 param3) { \
+ Entity::setupIII(#class "::setup_" #name, index, param1, param2, param3); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersIIII) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d, %d, %d) - action: %s", params->param1, params->param2, params->param3, ACTION_NAME(savepoint.action));
+
+// setup with one char *parameter
+#define IMPLEMENT_FUNCTION_S(index, class, name) \
+ void class::setup_##name(const char *seq1) { \
+ Entity::setupS(#class "::setup_" #name, index, seq1); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersSIIS) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s) - action: %s", (char *)&params->seq1, ACTION_NAME(savepoint.action));
+
+// setup with one char *parameter and one uint
+#define IMPLEMENT_FUNCTION_SI(index, class, name, paramType2) \
+ void class::setup_##name(const char *seq1, paramType2 param4) { \
+ Entity::setupSI(#class "::setup_" #name, index, seq1, param4); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersSIIS) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s, %d) - action: %s", (char *)&params->seq1, params->param4, ACTION_NAME(savepoint.action));
+
+// setup with one char *parameter and two uints
+#define IMPLEMENT_FUNCTION_SII(index, class, name, paramType2, paramType3) \
+ void class::setup_##name(const char *seq1, paramType2 param4, paramType3 param5) { \
+ Entity::setupSII(#class "::setup_" #name, index, seq1, param4, param5); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersSIIS) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s, %d, %d) - action: %s", (char *)&params->seq1, params->param4, params->param5, ACTION_NAME(savepoint.action));
+
+// setup with one char *parameter and three uints
+#define IMPLEMENT_FUNCTION_SIII(index, class, name, paramType2, paramType3, paramType4) \
+ void class::setup_##name(const char *seq, paramType2 param4, paramType3 param5, paramType4 param6) { \
+ Entity::setupSIII(#class "::setup_" #name, index, seq, param4, param5, param6); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersSIII) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s, %d, %d, %d) - action: %s", (char *)&params->seq, params->param4, params->param5, params->param6, ACTION_NAME(savepoint.action));
+
+#define IMPLEMENT_FUNCTION_SIIS(index, class, name, paramType2, paramType3) \
+ void class::setup_##name(const char *seq1, paramType2 param4, paramType3 param5, const char *seq2) { \
+ Entity::setupSIIS(#class "::setup_" #name, index, seq1, param4, param5, seq2); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersSIIS) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s, %d, %d, %s) - action: %s", (char *)&params->seq1, params->param4, params->param5, (char *)&params->seq2, ACTION_NAME(savepoint.action));
+
+#define IMPLEMENT_FUNCTION_SS(index, class, name) \
+ void class::setup_##name(const char *seq1, const char *seq2) { \
+ Entity::setupSS(#class "::setup_" #name, index, seq1, seq2); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersSSII) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s, %s) - action: %s", (char *)&params->seq1, (char *)&params->seq2, ACTION_NAME(savepoint.action));
+
+#define IMPLEMENT_FUNCTION_SSI(index, class, name, paramType3) \
+ void class::setup_##name(const char *seq1, const char *seq2, paramType3 param7) { \
+ Entity::setupSSI(#class "::setup_" #name, index, seq1, seq2, param7); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersSSII) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s, %s, %d) - action: %s", (char *)&params->seq1, (char *)&params->seq2, params->param7, ACTION_NAME(savepoint.action));
+
+#define IMPLEMENT_FUNCTION_IS(index, class, name, paramType) \
+ void class::setup_##name(paramType param1, const char *seq) { \
+ Entity::setupIS(#class "::setup_" #name, index, param1, seq); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersISII) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d, %s) - action: %s", params->param1, (char *)&params->seq, ACTION_NAME(savepoint.action));
+
+#define IMPLEMENT_FUNCTION_ISS(index, class, name, paramType) \
+ void class::setup_##name(paramType param1, const char *seq1, const char *seq2) { \
+ Entity::setupISS(#class "::setup_" #name, index, param1, seq1, seq2); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersISSI) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d, %s, %s) - action: %s", params->param1, (char *)&params->seq1, (char *)&params->seq2, ACTION_NAME(savepoint.action));
+
+#define IMPLEMENT_FUNCTION_IIS(index, class, name, paramType1, paramType2) \
+ void class::setup_##name(paramType1 param1, paramType2 param2, const char *seq) { \
+ Entity::setupIIS(#class "::setup_" #name, index, param1, param2, seq); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersIISI) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d, %d, %s) - action: %s", params->param1, params->param2, (char *)&params->seq, ACTION_NAME(savepoint.action));
+
+#define IMPLEMENT_FUNCTION_IISS(index, class, name, paramType1, paramType2) \
+ void class::setup_##name(paramType1 param1, paramType2 param2, const char *seq1, const char *seq2) { \
+ Entity::setupIISS(#class "::setup_" #name, index, param1, param2, seq1, seq2); \
+ } \
+ void class::name(const SavePoint &savepoint) { \
+ EXPOSE_PARAMS(EntityData::EntityParametersIISS) \
+ debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d, %d, %s, %s) - action: %s", params->param1, params->param2, (char *)&params->seq1, (char *)&params->seq2, ACTION_NAME(savepoint.action));
+
+
+//////////////////////////////////////////////////////////////////////////
class EntityData : Common::Serializable {
public:
- struct EntityParameters : Common::Serializable{
+ struct EntityParameters : Common::Serializable {
virtual ~EntityParameters() {}
virtual Common::String toString() = 0;
@@ -596,6 +815,15 @@ public:
return str;
}
+ /**
+ * Synchronizes a string.
+ *
+ * @param s The Common::Serializer to use.
+ * @param string The string.
+ * @param length Length of the string.
+ */
+ void syncString(Common::Serializer &s, Common::String &string, uint length) const;
+
// Serializable
void saveLoadWithSerializer(Common::Serializer &s);
};
@@ -611,32 +839,30 @@ public:
params->parameters[i] = new T();
}
- EntityCallData *getCallData() { return &_data; }
+ EntityCallData *getCallData() { return &_data; }
- EntityParameters *getParameters(uint callback, byte index) const;
- EntityParameters *getCurrentParameters(byte index = 0) { return getParameters(_data.currentCall, index); }
+ EntityParameters *getParameters(uint callback, byte index) const;
+ EntityParameters *getCurrentParameters(byte index = 0) { return getParameters(_data.currentCall, index); }
+ EntityCallParameters *getCurrentCallParameters() { return &_parameters[_data.currentCall]; }
- int getCallback(uint callback) const;
- int getCurrentCallback() { return getCallback(_data.currentCall); }
- void setCallback(uint callback, byte index);
- void setCurrentCallback(uint index) { setCallback(_data.currentCall, index); }
+ byte getCallback(uint callback) const;
+ byte getCurrentCallback() { return getCallback(_data.currentCall); }
+ void setCallback(uint callback, byte index);
+ void setCurrentCallback(uint index) { setCallback(_data.currentCall, index); }
- void updateParameters(uint32 index) const;
+ void updateParameters(uint32 index) const;
// Serializable
- void saveLoadWithSerializer(Common::Serializer &ser);
+ void saveLoadWithSerializer(Common::Serializer &ser);
private:
- EntityCallData _data;
+ EntityCallData _data;
EntityCallParameters _parameters[9];
};
class Entity : Common::Serializable {
public:
-
- typedef Common::Functor1<const SavePoint&, void> Callback;
-
Entity(LastExpressEngine *engine, EntityIndex index);
virtual ~Entity();
@@ -657,6 +883,12 @@ public:
virtual void setup_chapter4() = 0;
virtual void setup_chapter5() = 0;
+ // Shared functions
+ virtual void setup_savegame(SavegameType, uint32) { error("[Entity::setup_savegame] Trying to call the parent setup function. Use the specific entity function directly"); }
+ virtual void setup_enterExitCompartment(const char *, ObjectIndex) { error("[Entity::setup_enterExitCompartment] Trying to call the parent setup function. Use the specific entity function directly"); }
+ virtual void setup_updateEntity(CarIndex, EntityPosition) { error("[Entity::setup_updateEntity] Trying to call the parent setup function. Use the specific entity function directly"); }
+ virtual void setup_playSound(const char*) { error("[Entity::setup_playSound] Trying to call the parent setup function. Use the specific entity function directly"); }
+
// Serializable
void saveLoadWithSerializer(Common::Serializer &ser) { _data->saveLoadWithSerializer(ser); }
@@ -664,10 +896,11 @@ public:
protected:
LastExpressEngine *_engine;
+ typedef Common::Functor1<const SavePoint&, void> Callback;
- EntityIndex _entityIndex;
- EntityData *_data;
- Common::Array<Callback *> _callbacks;
+ EntityIndex _entityIndex;
+ EntityData *_data;
+ Common::Array<Callback *> _callbacks;
/**
* Saves the game
@@ -679,6 +912,13 @@ protected:
void savegame(const SavePoint &savepoint);
/**
+ * Saves the game before being found out with a blood covered jacket.
+ *
+ * @param saveFunction The setup function to call to save the game
+ */
+ void savegameBloodJacket();
+
+ /**
* Play sound
*
* @param savepoint The savepoint
@@ -782,6 +1022,30 @@ protected:
void enterExitCompartment(const SavePoint &savepoint, EntityPosition position1 = kPositionNone, EntityPosition position2 = kPositionNone, CarIndex car = kCarNone, ObjectIndex compartment = kObjectNone, bool alternate = false, bool updateLocation = false);
/**
+ * Go to compartment.
+ *
+ * @param savepoint The savepoint.
+ * @param compartmentFrom The compartment from.
+ * @param positionFrom The position from.
+ * @param sequenceFrom The sequence from.
+ * @param sequenceTo The sequence to.
+ */
+ void goToCompartment(const SavePoint &savepoint, ObjectIndex compartmentFrom, EntityPosition positionFrom, Common::String sequenceFrom, Common::String sequenceTo);
+
+ /**
+ * Go to compartment from compartment.
+ *
+ * @param savepoint The savepoint.
+ * @param compartmentFrom The compartment from.
+ * @param positionFrom The position from.
+ * @param sequenceFrom The sequence from.
+ * @param compartmentTo The compartment to.
+ * @param positionTo The position to.
+ * @param sequenceTo The sequence to.
+ */
+ void goToCompartmentFromCompartment(const SavePoint &savepoint, ObjectIndex compartmentFrom, EntityPosition positionFrom, Common::String sequenceFrom, ObjectIndex compartmentTo, EntityPosition positionTo, Common::String sequenceTo);
+
+ /**
* Updates the position
*
* @param savepoint The savepoint
@@ -796,6 +1060,45 @@ protected:
* Store the current callback information and perform the callback action
*/
void callbackAction();
+
+ //////////////////////////////////////////////////////////////////////////
+ // Setup functions
+ //////////////////////////////////////////////////////////////////////////
+ void setup(const char *name, uint index);
+ void setupI(const char *name, uint index, uint param1);
+ void setupII(const char *name, uint index, uint param1, uint param2);
+ void setupIII(const char *name, uint index, uint param1, uint param2, uint param3);
+ void setupS(const char *name, uint index, const char *seq1);
+ void setupSS(const char *name, uint index, const char *seq1, const char *seq2);
+ void setupSI(const char *name, uint index, const char *seq1, uint param4);
+ void setupSII(const char *name, uint index, const char *seq1, uint param4, uint param5);
+ void setupSIII(const char *name, uint index, const char *seq, uint param4, uint param5, uint param6);
+ void setupSIIS(const char *name, uint index, const char *seq1, uint param4, uint param5, const char *seq2);
+ void setupSSI(const char *name, uint index, const char *seq1, const char *seq2, uint param7);
+ void setupIS(const char *name, uint index, uint param1, const char *seq);
+ void setupISS(const char *name, uint index, uint param1, const char *seq1, const char *seq2);
+ void setupIIS(const char *name, uint index, uint param1, uint param2, const char *seq);
+ void setupIISS(const char *name, uint index, uint param1, uint param2, const char *seq1, const char *seq2);
+
+ //////////////////////////////////////////////////////////////////////////
+ // Helper functions
+ //////////////////////////////////////////////////////////////////////////
+
+ bool updateParameter(uint &parameter, uint timeType, uint delta) const;
+ bool updateParameterCheck(uint &parameter, uint timeType, uint delta) const;
+ bool updateParameterTime(TimeValue timeValue, bool check, uint &parameter, uint delta) const;
+
+ bool timeCheck(TimeValue timeValue, uint &parameter, Common::Functor0<void> *function) const;
+ bool timeCheckCallback(TimeValue timeValue, uint &parameter, byte callback, Common::Functor0<void> *function);
+ bool timeCheckCallback(TimeValue timeValue, uint &parameter, byte callback, const char *str, Common::Functor1<const char *, void> *function);
+ bool timeCheckCallback(TimeValue timeValue, uint &parameter, byte callback, bool check, Common::Functor1<bool, void> *function);
+ bool timeCheckCallbackInventory(TimeValue timeValue, uint &parameter, byte callback, Common::Functor0<void> *function);
+ bool timeCheckCar(TimeValue timeValue, uint &parameter, byte callback, Common::Functor0<void> *function);
+ void timeCheckSavepoint(TimeValue timeValue, uint &parameter, EntityIndex entity1, EntityIndex entity2, ActionIndex action) const;
+ void timeCheckObject(TimeValue timeValue, uint &parameter, ObjectIndex index, ObjectLocation location) const;
+ bool timeCheckCallbackAction(TimeValue timeValue, uint &parameter);
+ bool timeCheckPlaySoundUpdatePosition(TimeValue timeValue, uint &parameter, byte callback, const char* sound, EntityPosition position);
+
};
diff --git a/engines/lastexpress/entities/entity39.h b/engines/lastexpress/entities/entity39.h
index 4335a9566e..54b65408c7 100644
--- a/engines/lastexpress/entities/entity39.h
+++ b/engines/lastexpress/entities/entity39.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_ENTITY39_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
@@ -72,4 +71,4 @@ private:
} // End of namespace LastExpress
-#endif // LASTEXPRESS_##define##_H
+#endif // LASTEXPRESS_ENTITY39_H
diff --git a/engines/lastexpress/entities/entity_intern.h b/engines/lastexpress/entities/entity_intern.h
index c21f2c14e2..fd803676a9 100644
--- a/engines/lastexpress/entities/entity_intern.h
+++ b/engines/lastexpress/entities/entity_intern.h
@@ -25,491 +25,6 @@
namespace LastExpress {
-#define LOW_BYTE(w) ((unsigned char)(((unsigned long)(w)) & 0xff))
-
-//////////////////////////////////////////////////////////////////////////
-// Callbacks
-#define ENTITY_CALLBACK(class, name, pointer) \
- Common::Functor1Mem<const SavePoint&, void, class>(pointer, &class::name)
-
-#define ADD_CALLBACK_FUNCTION(class, name) \
- _callbacks.push_back(new ENTITY_CALLBACK(class, name, this));
-
-#define ADD_NULL_FUNCTION() \
- _callbacks.push_back(new ENTITY_CALLBACK(Entity, nullfunction, this));
-
-//////////////////////////////////////////////////////////////////////////
-// Declaration
-//////////////////////////////////////////////////////////////////////////
-
-#define DECLARE_FUNCTION(name) \
- void setup_##name(); \
- void name(const SavePoint &savepoint);
-
-#define DECLARE_FUNCTION_1(name, param1) \
- void setup_##name(param1); \
- void name(const SavePoint &savepoint);
-
-#define DECLARE_FUNCTION_2(name, param1, param2) \
- void setup_##name(param1, param2); \
- void name(const SavePoint &savepoint);
-
-#define DECLARE_FUNCTION_3(name, param1, param2, param3) \
- void setup_##name(param1, param2, param3); \
- void name(const SavePoint &savepoint);
-
-#define DECLARE_FUNCTION_4(name, param1, param2, param3, param4) \
- void setup_##name(param1, param2, param3, param4); \
- void name(const SavePoint &savepoint);
-
-#define DECLARE_FUNCTION_NOSETUP(name) \
- void name(const SavePoint &savepoint);
-
-#define DECLARE_NULL_FUNCTION() \
- void setup_nullfunction();
-
-//////////////////////////////////////////////////////////////////////////
-// Setup
-//////////////////////////////////////////////////////////////////////////
-
-#define IMPLEMENT_SETUP(class, callback_class, name, index) \
-void class::setup_##name() { \
- BEGIN_SETUP(callback_class, name, index, EntityData::EntityParametersIIII) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::setup_" #name "()"); \
- END_SETUP() \
-}
-
-#define BEGIN_SETUP(class, name, index, type) \
- _engine->getGameLogic()->getGameState()->getGameSavePoints()->setCallback(_entityIndex, _callbacks[index]); \
- _data->setCurrentCallback(index); \
- _data->resetCurrentParameters<type>();
-
-#define END_SETUP() \
- _engine->getGameLogic()->getGameState()->getGameSavePoints()->call(_entityIndex, _entityIndex, kActionDefault);
-
-
-//////////////////////////////////////////////////////////////////////////
-// Implementation
-//////////////////////////////////////////////////////////////////////////
-
-// Expose parameters and check validity
-#define EXPOSE_PARAMS(type) \
- type *params = (type *)_data->getCurrentParameters(); \
- if (!params) \
- error("[EXPOSE_PARAMS] Trying to call an entity function with invalid parameters"); \
-
-
-// function signature without setup (we keep the index for consistency but never use it)
-#define IMPLEMENT_FUNCTION_NOSETUP(index, class, name) \
- void class::name(const SavePoint &savepoint) { \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(index=" #index ")");
-
-// simple setup with no parameters
-#define IMPLEMENT_FUNCTION(index, class, name) \
- IMPLEMENT_SETUP(class, class, name, index) \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersIIII) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "() - action: %s", ACTION_NAME(savepoint.action));
-
-#define IMPLEMENT_FUNCTION_END }
-
-// nullfunction call
-#define IMPLEMENT_NULL_FUNCTION(index, class) \
- IMPLEMENT_SETUP(class, Entity, nullfunction, index)
-
-// setup with one uint parameter
-#define IMPLEMENT_FUNCTION_I(index, class, name, paramType) \
- void class::setup_##name(paramType param1) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersIIII) \
- EntityData::EntityParametersIIII *params = (EntityData::EntityParametersIIII*)_data->getCurrentParameters(); \
- params->param1 = (unsigned int)param1; \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersIIII) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d) - action: %s", params->param1, ACTION_NAME(savepoint.action));
-
-// setup with two uint parameters
-#define IMPLEMENT_FUNCTION_II(index, class, name, paramType1, paramType2) \
- void class::setup_##name(paramType1 param1, paramType2 param2) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersIIII) \
- EntityData::EntityParametersIIII *params = (EntityData::EntityParametersIIII*)_data->getCurrentParameters(); \
- params->param1 = param1; \
- params->param2 = param2; \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersIIII) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d, %d) - action: %s", params->param1, params->param2, ACTION_NAME(savepoint.action));
-
-// setup with three uint parameters
-#define IMPLEMENT_FUNCTION_III(index, class, name, paramType1, paramType2, paramType3) \
- void class::setup_##name(paramType1 param1, paramType2 param2, paramType3 param3) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersIIII) \
- EntityData::EntityParametersIIII *params = (EntityData::EntityParametersIIII*)_data->getCurrentParameters(); \
- params->param1 = param1; \
- params->param2 = param2; \
- params->param3 = param3; \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersIIII) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d, %d, %d) - action: %s", params->param1, params->param2, params->param3, ACTION_NAME(savepoint.action));
-
-// setup with one char *parameter
-#define IMPLEMENT_FUNCTION_S(index, class, name) \
- void class::setup_##name(const char *seq1) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersSIIS) \
- EntityData::EntityParametersSIIS *params = (EntityData::EntityParametersSIIS*)_data->getCurrentParameters(); \
- strncpy((char *)&params->seq1, seq1, 12); \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersSIIS) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s) - action: %s", (char *)&params->seq1, ACTION_NAME(savepoint.action));
-
-// setup with one char *parameter and one uint
-#define IMPLEMENT_FUNCTION_SI(index, class, name, paramType2) \
- void class::setup_##name(const char *seq1, paramType2 param4) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersSIIS) \
- EntityData::EntityParametersSIIS *params = (EntityData::EntityParametersSIIS*)_data->getCurrentParameters(); \
- strncpy((char *)&params->seq1, seq1, 12); \
- params->param4 = param4; \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersSIIS) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s, %d) - action: %s", (char *)&params->seq1, params->param4, ACTION_NAME(savepoint.action));
-
-// setup with one char *parameter and two uints
-#define IMPLEMENT_FUNCTION_SII(index, class, name, paramType2, paramType3) \
- void class::setup_##name(const char *seq1, paramType2 param4, paramType3 param5) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersSIIS) \
- EntityData::EntityParametersSIIS *params = (EntityData::EntityParametersSIIS*)_data->getCurrentParameters(); \
- strncpy((char *)&params->seq1, seq1, 12); \
- params->param4 = param4; \
- params->param5 = param5; \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersSIIS) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s, %d, %d) - action: %s", (char *)&params->seq1, params->param4, params->param5, ACTION_NAME(savepoint.action));
-
-// setup with one char *parameter and three uints
-#define IMPLEMENT_FUNCTION_SIII(index, class, name, paramType2, paramType3, paramType4) \
- void class::setup_##name(const char *seq, paramType2 param4, paramType3 param5, paramType4 param6) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersSIII) \
- EntityData::EntityParametersSIII *params = (EntityData::EntityParametersSIII*)_data->getCurrentParameters(); \
- strncpy((char *)&params->seq, seq, 12); \
- params->param4 = param4; \
- params->param5 = param5; \
- params->param6 = param6; \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersSIII) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s, %d, %d, %d) - action: %s", (char *)&params->seq, params->param4, params->param5, params->param6, ACTION_NAME(savepoint.action));
-
-#define IMPLEMENT_FUNCTION_SIIS(index, class, name, paramType2, paramType3) \
- void class::setup_##name(const char *seq1, paramType2 param4, paramType3 param5, const char *seq2) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersSIIS) \
- EntityData::EntityParametersSIIS *params = (EntityData::EntityParametersSIIS*)_data->getCurrentParameters(); \
- strncpy((char *)&params->seq1, seq1, 12); \
- params->param4 = param4; \
- params->param5 = param5; \
- strncpy((char *)&params->seq2, seq2, 12); \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersSIIS) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s, %d, %d, %s) - action: %s", (char *)&params->seq1, params->param4, params->param5, (char *)&params->seq2, ACTION_NAME(savepoint.action));
-
-#define IMPLEMENT_FUNCTION_SS(index, class, name) \
- void class::setup_##name(const char *seq1, const char *seq2) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersSSII) \
- EntityData::EntityParametersSSII *params = (EntityData::EntityParametersSSII*)_data->getCurrentParameters(); \
- strncpy((char *)&params->seq1, seq1, 12); \
- strncpy((char *)&params->seq2, seq2, 12); \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersSSII) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s, %s) - action: %s", (char *)&params->seq1, (char *)&params->seq2, ACTION_NAME(savepoint.action));
-
-#define IMPLEMENT_FUNCTION_SSI(index, class, name, paramType3) \
- void class::setup_##name(const char *seq1, const char *seq2, paramType3 param7) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersSSII) \
- EntityData::EntityParametersSSII *params = (EntityData::EntityParametersSSII*)_data->getCurrentParameters(); \
- strncpy((char *)&params->seq1, seq1, 12); \
- strncpy((char *)&params->seq2, seq2, 12); \
- params->param7 = param7; \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersSSII) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%s, %s, %d) - action: %s", (char *)&params->seq1, (char *)&params->seq2, params->param7, ACTION_NAME(savepoint.action));
-
-#define IMPLEMENT_FUNCTION_IS(index, class, name, paramType) \
- void class::setup_##name(paramType param1, const char *seq) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersISII) \
- EntityData::EntityParametersISII *params = (EntityData::EntityParametersISII*)_data->getCurrentParameters(); \
- params->param1 = (unsigned int)param1; \
- strncpy((char *)&params->seq, seq, 12); \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersISII) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d, %s) - action: %s", params->param1, (char *)&params->seq, ACTION_NAME(savepoint.action));
-
-#define IMPLEMENT_FUNCTION_ISS(index, class, name, paramType) \
- void class::setup_##name(paramType param1, const char *seq1, const char *seq2) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersISSI) \
- EntityData::EntityParametersISSI *params = (EntityData::EntityParametersISSI*)_data->getCurrentParameters(); \
- params->param1 = param1; \
- strncpy((char *)&params->seq1, seq1, 12); \
- strncpy((char *)&params->seq2, seq2, 12); \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersISSI) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d, %s, %s) - action: %s", params->param1, (char *)&params->seq1, (char *)&params->seq2, ACTION_NAME(savepoint.action));
-
-#define IMPLEMENT_FUNCTION_IIS(index, class, name, paramType1, paramType2) \
- void class::setup_##name(paramType1 param1, paramType2 param2, const char *seq) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersIISI) \
- EntityData::EntityParametersIISI *params = (EntityData::EntityParametersIISI*)_data->getCurrentParameters(); \
- params->param1 = param1; \
- params->param2 = param2; \
- strncpy((char *)&params->seq, seq, 12); \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersIISI) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d, %d, %s) - action: %s", params->param1, params->param2, (char *)&params->seq, ACTION_NAME(savepoint.action));
-
-#define IMPLEMENT_FUNCTION_IISS(index, class, name, paramType1, paramType2) \
- void class::setup_##name(paramType1 param1, paramType2 param2, const char *seq1, const char *seq2) { \
- BEGIN_SETUP(class, name, index, EntityData::EntityParametersIISS) \
- EntityData::EntityParametersIISS *params = (EntityData::EntityParametersIISS*)_data->getCurrentParameters(); \
- params->param1 = param1; \
- params->param2 = param2; \
- strncpy((char *)&params->seq1, seq1, 12); \
- strncpy((char *)&params->seq2, seq2, 12); \
- END_SETUP() \
- } \
- void class::name(const SavePoint &savepoint) { \
- EXPOSE_PARAMS(EntityData::EntityParametersIISS) \
- debugC(6, kLastExpressDebugLogic, "Entity: " #class "::" #name "(%d, %d, %s, %s) - action: %s", params->param1, params->param2, (char *)&params->seq1, (char *)&params->seq2, ACTION_NAME(savepoint.action));
-
-
-//////////////////////////////////////////////////////////////////////////
-// Misc
-//////////////////////////////////////////////////////////////////////////
-#define RESET_ENTITY_STATE(entity, class, function) \
- getEntities()->resetState(entity); \
- ((class *)getEntities()->get(entity))->function();
-
-//////////////////////////////////////////////////////////////////////////
-// Parameters macros (for default IIII parameters)
-//////////////////////////////////////////////////////////////////////////
-#define CURRENT_PARAM(index, id) \
- ((EntityData::EntityParametersIIII*)_data->getCurrentParameters(index))->param##id
-
-#define ENTITY_PARAM(index, id) \
- ((EntityData::EntityParametersIIII*)_data->getParameters(8, index))->param##id
-
-//////////////////////////////////////////////////////////////////////////
-// Time check macros
-//////////////////////////////////////////////////////////////////////////
-#define TIME_CHECK(timeValue, parameter, function) \
- if (getState()->time > timeValue && !parameter) { \
- parameter = 1; \
- function(); \
- break; \
- }
-
-#define TIME_CHECK_SAVEPOINT(timeValue, parameter, entity1, entity2, action) \
- if (getState()->time > timeValue && !parameter) { \
- parameter = 1; \
- getSavePoints()->push(entity1, entity2, action); \
- }
-
-#define TIME_CHECK_CALLBACK(timeValue, parameter, callback, function) \
- if (getState()->time > timeValue && !parameter) { \
- parameter = 1; \
- setCallback(callback); \
- function(); \
- break; \
- }
-
-#define TIME_CHECK_CALLBACK_1(timeValue, parameter, callback, function, param1) \
- if (getState()->time > timeValue && !parameter) { \
- parameter = 1; \
- setCallback(callback); \
- function(param1); \
- break; \
- }
-
-#define TIME_CHECK_CALLBACK_2(timeValue, parameter, callback, function, param1, param2) \
- if (getState()->time > timeValue && !parameter) { \
- parameter = 1; \
- setCallback(callback); \
- function(param1, param2); \
- break; \
- }
-
-#define TIME_CHECK_CALLBACK_3(timeValue, parameter, callback, function, param1, param2, param3) \
- if (getState()->time > timeValue && !parameter) { \
- parameter = 1; \
- setCallback(callback); \
- function(param1, param2, param3); \
- break; \
- }
-
-#define TIME_CHECK_CALLBACK_INVENTORY(timeValue, parameter, callback, function) \
- if (getState()->time > timeValue && !parameter) { \
- parameter = 1; \
- getData()->inventoryItem = kItemNone; \
- setCallback(callback); \
- function(); \
- break; \
- }
-
-#define TIME_CHECK_CALLBACK_ACTION(timeValue, parameter) \
- if (getState()->time > timeValue && !parameter) { \
- parameter = 1; \
- callbackAction(); \
- break; \
- }
-
-#define TIME_CHECK_PLAYSOUND_UPDATEPOSITION(timeValue, parameter, callback, sound, position) \
- if (getState()->time > timeValue && !parameter) { \
- parameter = 1; \
- getData()->entityPosition = position; \
- setCallback(callback); \
- setup_playSound(sound); \
- break; \
- }
-
-#define TIME_CHECK_OBJECT(timeValue, parameter, object, location) \
- if (getState()->time > timeValue && !parameter) { \
- parameter = 1; \
- getObjects()->updateLocation2(object, location); \
- }
-
-#define TIME_CHECK_CAR(timeValue, parameter, callback, function) {\
- if ((getState()->time <= timeValue && !getEntities()->isPlayerInCar(kCarGreenSleeping)) || !parameter) \
- parameter = (uint)getState()->time + 75; \
- if (getState()->time > timeValue || parameter < getState()->time) { \
- parameter = kTimeInvalid; \
- setCallback(callback); \
- function(); \
- break; \
- } \
-}
-
-//////////////////////////////////////////////////////////////////////////
-// Param update
-//////////////////////////////////////////////////////////////////////////
-#define UPDATE_PARAM(parameter, type, value) { \
- if (!parameter) \
- parameter = (uint)(type + value); \
- if (parameter >= type) \
- break; \
- parameter = kTimeInvalid; \
-}
-
-// Todo: replace with UPDATE_PARAM_PROC as appropriate
-#define UPDATE_PARAM_GOTO(parameter, type, value, label) { \
- if (!parameter) \
- parameter = (uint)(type + value); \
- if (parameter >= type) \
- goto label; \
- parameter = kTimeInvalid; \
-}
-
-// Updating parameter with code inside the check
-#define UPDATE_PARAM_PROC(parameter, type, value) \
- if (!parameter) \
- parameter = (uint)(type + value); \
- if (parameter < type) { \
- parameter = kTimeInvalid;
-
-#define UPDATE_PARAM_PROC_TIME(timeValue, test, parameter, value) \
- if (getState()->time <= timeValue) { \
- if (test || !parameter) \
- parameter = (uint)(getState()->time + value); \
- } \
- if (parameter < getState()->time || getState()->time > timeValue) { \
- parameter = kTimeInvalid;
-
-#define UPDATE_PARAM_PROC_END }
-
-// Updating parameter with an added check (and code inside the check)
-#define UPDATE_PARAM_CHECK(parameter, type, value) \
- if (!parameter || parameter < type) { \
- if (!parameter) \
- parameter = (uint)(type + value);
-
-//////////////////////////////////////////////////////////////////////////
-// Compartments
-//////////////////////////////////////////////////////////////////////////
-// Go from one compartment to another (or the same one if no optional args are passed
-#define COMPARTMENT_TO(class, compartmentFrom, positionFrom, sequenceFrom, sequenceTo) \
- switch (savepoint.action) { \
- default: \
- break; \
- case kActionDefault: \
- getData()->entityPosition = positionFrom; \
- setCallback(1); \
- setup_enterExitCompartment(sequenceFrom, compartmentFrom); \
- break; \
- case kActionCallback: \
- switch (getCallback()) { \
- default: \
- break; \
- case 1: \
- setCallback(2); \
- setup_enterExitCompartment(sequenceTo, compartmentFrom); \
- break; \
- case 2: \
- getData()->entityPosition = positionFrom; \
- getEntities()->clearSequences(_entityIndex); \
- callbackAction(); \
- } \
- break; \
- }
-
-#define COMPARTMENT_FROM_TO(class, compartmentFrom, positionFrom, sequenceFrom, compartmentTo, positionTo, sequenceTo) \
- switch (savepoint.action) { \
- default: \
- break; \
- case kActionDefault: \
- getData()->entityPosition = positionFrom; \
- getData()->location = kLocationOutsideCompartment; \
- setCallback(1); \
- setup_enterExitCompartment(sequenceFrom, compartmentFrom); \
- break; \
- case kActionCallback: \
- switch (getCallback()) { \
- default: \
- break; \
- case 1: \
- setCallback(2); \
- setup_updateEntity(kCarGreenSleeping, positionTo); \
- break; \
- case 2: \
- setCallback(3); \
- setup_enterExitCompartment(sequenceTo, compartmentTo); \
- break; \
- case 3: \
- getData()->location = kLocationInsideCompartment; \
- getEntities()->clearSequences(_entityIndex); \
- callbackAction(); \
- break; \
- } \
- break; \
- }
} // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/francois.cpp b/engines/lastexpress/entities/francois.cpp
index b99dbe466b..d2bbc9854c 100644
--- a/engines/lastexpress/entities/francois.cpp
+++ b/engines/lastexpress/entities/francois.cpp
@@ -278,7 +278,7 @@ IMPLEMENT_FUNCTION_I(11, Francois, function11, TimeValue)
case kActionNone:
if (!getSoundQueue()->isBuffered(kEntityFrancois)) {
- UPDATE_PARAM_PROC(CURRENT_PARAM(1, 1), getState()->timeTicks, params->param6)
+ if (Entity::updateParameter(CURRENT_PARAM(1, 1), getState()->timeTicks, params->param6)) {
switch (rnd(7)) {
default:
break;
@@ -311,7 +311,7 @@ IMPLEMENT_FUNCTION_I(11, Francois, function11, TimeValue)
params->param6 = 15 * rnd(7);
CURRENT_PARAM(1, 1) = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (!getEntities()->hasValidFrame(kEntityFrancois) || !getEntities()->isWalkingOppositeToPlayer(kEntityFrancois))
@@ -848,7 +848,7 @@ IMPLEMENT_FUNCTION(17, Francois, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Francois, setup_chapter1Handler));
break;
case kActionDefault:
@@ -866,7 +866,7 @@ IMPLEMENT_FUNCTION(18, Francois, chapter1Handler)
break;
case kActionNone:
- TIME_CHECK_CALLBACK_1(kTimeParisEpernay, params->param1, 1, setup_function11, kTime1093500);
+ timeCheckCallback(kTimeParisEpernay, params->param1, 1, kTime1093500);
break;
case kActionCallback:
@@ -883,7 +883,7 @@ IMPLEMENT_FUNCTION(19, Francois, function19)
break;
case kActionNone:
- TIME_CHECK_CALLBACK(kTime1161000, params->param1, 2, setup_function12);
+ Entity::timeCheckCallback(kTime1161000, params->param1, 2, WRAP_SETUP_FUNCTION(Francois, setup_function12));
break;
case kAction101107728:
@@ -978,17 +978,21 @@ IMPLEMENT_FUNCTION(23, Francois, function23)
}
label_callback_1:
- TIME_CHECK_CALLBACK_1(kTime1764000, params->param1, 2, setup_playSound, "Fra2011");
+ if (Entity::timeCheckCallback(kTime1764000, params->param1, 2, "Fra2011", WRAP_SETUP_FUNCTION_S(Francois, setup_playSound)))
+ break;
label_callback_2:
- TIME_CHECK_CALLBACK(kTime1800000, params->param2, 3, setup_function13);
+ if (Entity::timeCheckCallback(kTime1800000, params->param2, 3, WRAP_SETUP_FUNCTION(Francois, setup_function13)))
+ break;
label_callback_3:
if (!getInventory()->hasItem(kItemWhistle) && getInventory()->get(kItemWhistle)->location != kObjectLocation3) {
- TIME_CHECK_CALLBACK_1(kTime1768500, params->param3, 4, setup_function11, kTime1773000);
+ if (timeCheckCallback(kTime1768500, params->param3, 4, kTime1773000))
+ break;
label_callback_4:
- TIME_CHECK_CALLBACK_1(kTime1827000, params->param4, 5, setup_function11, kTime1831500);
+ if (timeCheckCallback(kTime1827000, params->param4, 5, kTime1831500))
+ break;
}
label_callback_5:
@@ -998,18 +1002,19 @@ label_callback_5:
}
if (params->param5 != kTimeInvalid) {
- UPDATE_PARAM_PROC_TIME(kTimeEnd, !getEntities()->isDistanceBetweenEntities(kEntityFrancois, kEntityPlayer, 2000), params->param5, 75);
+ if (Entity::updateParameterTime(kTimeEnd, !getEntities()->isDistanceBetweenEntities(kEntityFrancois, kEntityPlayer, 2000), params->param5, 75)) {
setCallback(6);
setup_playSound("Fra2010");
break;
- UPDATE_PARAM_PROC_END
+ }
}
label_callback_6:
- TIME_CHECK_CALLBACK_3(kTime1782000, params->param6, 7, setup_function14, kObjectCompartmentC, kPosition_6470, "c");
+ if (timeCheckCallbackCompartment(kTime1782000, params->param6, 7, kObjectCompartmentC, kPosition_6470, "c"))
+ break;
label_callback_7:
- TIME_CHECK_CALLBACK_3(kTime1813500, params->param7, 8, setup_function14, kObjectCompartmentF, kPosition_4070, "f");
+ timeCheckCallbackCompartment(kTime1813500, params->param7, 8, kObjectCompartmentF, kPosition_4070, "f");
break;
case kActionCallback:
@@ -1085,32 +1090,41 @@ IMPLEMENT_FUNCTION(25, Francois, chapter3Handler)
}
label_callback_2:
- TIME_CHECK_CALLBACK(kTime2025000, params->param3, 3, setup_function12);
+ if (Entity::timeCheckCallback(kTime2025000, params->param3, 3, WRAP_SETUP_FUNCTION(Francois, setup_function12)))
+ break;
label_callback_3:
- TIME_CHECK_CALLBACK(kTime2052000, params->param4, 4, setup_function12);
+ if (Entity::timeCheckCallback(kTime2052000, params->param4, 4, WRAP_SETUP_FUNCTION(Francois, setup_function12)))
+ break;
label_callback_4:
- TIME_CHECK_CALLBACK(kTime2079000, params->param5, 5, setup_function12);
+ if (Entity::timeCheckCallback(kTime2079000, params->param5, 5, WRAP_SETUP_FUNCTION(Francois, setup_function12)))
+ break;
label_callback_5:
- TIME_CHECK_CALLBACK(kTime2092500, params->param6, 6, setup_function12);
+ if (Entity::timeCheckCallback(kTime2092500, params->param6, 6, WRAP_SETUP_FUNCTION(Francois, setup_function12)))
+ break;
label_callback_6:
- TIME_CHECK_CALLBACK(kTime2173500, params->param7, 7, setup_function12);
+ if (Entity::timeCheckCallback(kTime2173500, params->param7, 7, WRAP_SETUP_FUNCTION(Francois, setup_function12)))
+ break;
label_callback_7:
- TIME_CHECK_CALLBACK(kTime2182500, params->param8, 8, setup_function12);
+ if (Entity::timeCheckCallback(kTime2182500, params->param8, 8, WRAP_SETUP_FUNCTION(Francois, setup_function12)))
+ break;
label_callback_8:
- TIME_CHECK_CALLBACK(kTime2241000, CURRENT_PARAM(1, 1), 9, setup_function12);
+ if (Entity::timeCheckCallback(kTime2241000, CURRENT_PARAM(1, 1), 9, WRAP_SETUP_FUNCTION(Francois, setup_function12)))
+ break;
label_callback_9:
if (!getInventory()->hasItem(kItemWhistle) && getInventory()->get(kItemWhistle)->location != kObjectLocation3) {
- TIME_CHECK_CALLBACK_1(kTime2011500, CURRENT_PARAM(1, 2), 10, setup_function11, kTime2016000);
+ if (timeCheckCallback(kTime2011500, CURRENT_PARAM(1, 2), 10, kTime2016000))
+ break;
label_callback_10:
- TIME_CHECK_CALLBACK_1(kTime2115000, CURRENT_PARAM(1, 3), 11, setup_function11, kTime2119500);
+ if (timeCheckCallback(kTime2115000, CURRENT_PARAM(1, 3), 11, kTime2119500))
+ break;
}
label_callback_11:
@@ -1128,13 +1142,15 @@ label_callback_11:
}
label_callback_12:
- TIME_CHECK_CALLBACK_3(kTime2040300, CURRENT_PARAM(1, 5), 13, setup_function14, kObjectCompartmentE, kPosition_4840, "e");
+ if (timeCheckCallbackCompartment(kTime2040300, CURRENT_PARAM(1, 5), 13, kObjectCompartmentE, kPosition_4840, "e"))
+ break;
label_callback_13:
- TIME_CHECK_CALLBACK_3(kTime2040300, CURRENT_PARAM(1, 6), 14, setup_function14, kObjectCompartmentF, kPosition_4070, "f");
+ if (timeCheckCallbackCompartment(kTime2040300, CURRENT_PARAM(1, 6), 14, kObjectCompartmentF, kPosition_4070, "f"))
+ break;
label_callback_14:
- TIME_CHECK_CALLBACK_3(kTime2040300, CURRENT_PARAM(1, 7), 15, setup_function14, kObjectCompartmentB, kPosition_7500, "b");
+ timeCheckCallbackCompartment(kTime2040300, CURRENT_PARAM(1, 7), 15, kObjectCompartmentB, kPosition_7500, "b");
}
}
break;
@@ -1290,4 +1306,33 @@ IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_NULL_FUNCTION(31, Francois)
+
+//////////////////////////////////////////////////////////////////////////
+// Helper functions
+//////////////////////////////////////////////////////////////////////////
+bool Francois::timeCheckCallbackCompartment(TimeValue timeValue, uint &parameter, byte callback, ObjectIndex compartment, EntityPosition position, const char* sequenceSuffix) {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ setCallback(callback);
+ setup_function14(compartment, position, sequenceSuffix);
+
+ return true;
+ }
+
+ return false;
+}
+
+bool Francois::timeCheckCallback(TimeValue timeValue, uint &parameter, byte callback, TimeValue timeValue2) {
+ if (getState()->time > timeValue && !parameter) {
+ parameter = 1;
+ setCallback(callback);
+ setup_function11(timeValue2);
+
+ return true;
+ }
+
+ return false;
+}
+
+
} // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/francois.h b/engines/lastexpress/entities/francois.h
index 19eca6fb50..51270fa4b6 100644
--- a/engines/lastexpress/entities/francois.h
+++ b/engines/lastexpress/entities/francois.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_FRANCOIS_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
@@ -160,6 +159,10 @@ public:
DECLARE_FUNCTION(function30)
DECLARE_NULL_FUNCTION()
+
+private:
+ bool timeCheckCallbackCompartment(TimeValue timeValue, uint &parameter, byte callback, ObjectIndex compartment, EntityPosition position, const char* sequenceSuffix);
+ bool timeCheckCallback(TimeValue timeValue, uint &parameter, byte callback, TimeValue timeValue2);
};
} // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/gendarmes.cpp b/engines/lastexpress/entities/gendarmes.cpp
index 877c0c29b3..a912fa4ecb 100644
--- a/engines/lastexpress/entities/gendarmes.cpp
+++ b/engines/lastexpress/entities/gendarmes.cpp
@@ -66,7 +66,7 @@ IMPLEMENT_FUNCTION(2, Gendarmes, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Gendarmes, setup_chapter1Handler));
break;
case kActionDefault:
@@ -266,7 +266,8 @@ IMPLEMENT_FUNCTION_III(10, Gendarmes, function10, CarIndex, EntityPosition, Obje
getSound()->playSound(kEntityGendarmes, "POL1046A", kFlagDefault);
}
- UPDATE_PARAM(params->param7, getState()->timeTicks, 300);
+ if (!Entity::updateParameter(params->param7, getState()->timeTicks, 300))
+ break;
if (!params->param4 && getEntities()->isOutsideAlexeiWindow()) {
getObjects()->update((ObjectIndex)params->param3, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
@@ -551,7 +552,8 @@ void Gendarmes::arrest(const SavePoint &savepoint, bool shouldPlaySound, SoundFl
case kActionNone:
if (checkCallback) {
EXPOSE_PARAMS(EntityData::EntityParametersIIII);
- TIME_CHECK_CALLBACK_ACTION(params->param1, params->param2);
+ if (Entity::timeCheckCallbackAction((TimeValue)params->param1, params->param2))
+ break;
}
if (shouldUpdateEntity) {
diff --git a/engines/lastexpress/entities/gendarmes.h b/engines/lastexpress/entities/gendarmes.h
index d999cfc1fd..a761643531 100644
--- a/engines/lastexpress/entities/gendarmes.h
+++ b/engines/lastexpress/entities/gendarmes.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_GENDARMES_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
#include "lastexpress/sound/sound.h"
diff --git a/engines/lastexpress/entities/hadija.cpp b/engines/lastexpress/entities/hadija.cpp
index 09c80247d4..e9abcd888a 100644
--- a/engines/lastexpress/entities/hadija.cpp
+++ b/engines/lastexpress/entities/hadija.cpp
@@ -86,22 +86,22 @@ IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(6, Hadija, compartment6)
- COMPARTMENT_TO(Hadija, kObjectCompartment6, kPosition_4070, "619Cf", "619Df");
+ Entity::goToCompartment(savepoint, kObjectCompartment6, kPosition_4070, "619Cf", "619Df");
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(7, Hadija, compartment8)
- COMPARTMENT_TO(Hadija, kObjectCompartment8, kPosition_2740, "619Ch", "619Dh");
+ Entity::goToCompartment(savepoint, kObjectCompartment8, kPosition_2740, "619Ch", "619Dh");
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(8, Hadija, compartment6to8)
- COMPARTMENT_FROM_TO(Hadija, kObjectCompartment6, kPosition_4070, "619Bf", kObjectCompartment8, kPosition_2740, "619Ah");
+ Entity::goToCompartmentFromCompartment(savepoint, kObjectCompartment6, kPosition_4070, "619Bf", kObjectCompartment8, kPosition_2740, "619Ah");
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(9, Hadija, compartment8to6)
- COMPARTMENT_FROM_TO(Hadija, kObjectCompartment8, kPosition_2740, "619Bh", kObjectCompartment6, kPosition_4070, "619Af");
+ Entity::goToCompartmentFromCompartment(savepoint, kObjectCompartment8, kPosition_2740, "619Bh", kObjectCompartment6, kPosition_4070, "619Af");
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
@@ -111,7 +111,7 @@ IMPLEMENT_FUNCTION(10, Hadija, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Hadija, setup_chapter1Handler));
break;
case kActionDefault:
@@ -130,10 +130,12 @@ IMPLEMENT_FUNCTION(11, Hadija, chapter1Handler)
break;
case kActionNone:
- TIME_CHECK_PLAYSOUND_UPDATEPOSITION(kTimeParisEpernay, params->param1, 1, "Har1100", kPosition_4840);
+ if (Entity::timeCheckPlaySoundUpdatePosition(kTimeParisEpernay, params->param1, 1, "Har1100", kPosition_4840))
+ break;
label_callback1:
- TIME_CHECK_CALLBACK(kTime1084500, params->param2, 2, setup_compartment6to8);
+ if (Entity::timeCheckCallback(kTime1084500, params->param2, 2, WRAP_SETUP_FUNCTION(Hadija, setup_compartment6to8)))
+ break;
label_callback2:
if (params->param3 != kTimeInvalid && getState()->time > kTime1093500) {
@@ -161,7 +163,8 @@ label_callback2:
}
label_callback3:
- TIME_CHECK_CALLBACK(kTime1156500, params->param4, 4, setup_compartment8to6);
+ if (Entity::timeCheckCallback(kTime1156500, params->param4, 4, WRAP_SETUP_FUNCTION(Hadija, setup_compartment8to6)))
+ break;
label_callback4:
if (params->param5 != kTimeInvalid && getState()->time > kTime1165500) {
@@ -251,7 +254,7 @@ IMPLEMENT_FUNCTION(14, Hadija, chapter2Handler)
}
if (params->param2 == kTimeInvalid || getState()->time <= kTime1786500) {
- TIME_CHECK_CALLBACK(kTime1822500, params->param3, 2, setup_compartment8to6);
+ Entity::timeCheckCallback(kTime1822500, params->param3, 2, WRAP_SETUP_FUNCTION(Hadija, setup_compartment8to6));
break;
}
@@ -261,7 +264,7 @@ IMPLEMENT_FUNCTION(14, Hadija, chapter2Handler)
params->param2 = (uint)getState()->time + 75;
if (params->param2 >= getState()->time) {
- TIME_CHECK_CALLBACK(kTime1822500, params->param3, 2, setup_compartment8to6);
+ Entity::timeCheckCallback(kTime1822500, params->param3, 2, WRAP_SETUP_FUNCTION(Hadija, setup_compartment8to6));
break;
}
}
@@ -278,7 +281,7 @@ IMPLEMENT_FUNCTION(14, Hadija, chapter2Handler)
break;
case 1:
- TIME_CHECK_CALLBACK(kTime1822500, params->param3, 2, setup_compartment8to6);
+ Entity::timeCheckCallback(kTime1822500, params->param3, 2, WRAP_SETUP_FUNCTION(Hadija, setup_compartment8to6));
break;
case 2:
@@ -318,20 +321,26 @@ IMPLEMENT_FUNCTION(16, Hadija, chapter3Handler)
break;
case kActionNone:
- TIME_CHECK_CALLBACK(kTime1998000, params->param1, 1, setup_compartment6to8);
+ if (Entity::timeCheckCallback(kTime1998000, params->param1, 1, WRAP_SETUP_FUNCTION(Hadija, setup_compartment6to8)))
+ break;
label_callback1:
- TIME_CHECK_CALLBACK(kTime2020500, params->param2, 2, setup_compartment8to6);
+ if (Entity::timeCheckCallback(kTime2020500, params->param2, 2, WRAP_SETUP_FUNCTION(Hadija, setup_compartment8to6)))
+ break;
label_callback2:
- TIME_CHECK_CALLBACK(kTime2079000, params->param3, 3, setup_compartment6to8);
+ if (Entity::timeCheckCallback(kTime2079000, params->param3, 3, WRAP_SETUP_FUNCTION(Hadija, setup_compartment6to8)))
+ break;
label_callback3:
- TIME_CHECK_CALLBACK(kTime2187000, params->param4, 4, setup_compartment8to6);
+ if (Entity::timeCheckCallback(kTime2187000, params->param4, 4, WRAP_SETUP_FUNCTION(Hadija, setup_compartment8to6)))
+ break;
label_callback4:
- if (params->param5 != kTimeInvalid && getState()->time > kTime2196000)
- TIME_CHECK_CAR(kTime2254500, params->param5, 5, setup_compartment6);
+ if (params->param5 != kTimeInvalid && getState()->time > kTime2196000) {
+ if (Entity::timeCheckCar(kTime2254500, params->param5, 5, WRAP_SETUP_FUNCTION(Hadija, setup_compartment6)))
+ break;
+ }
break;
case kActionDefault:
@@ -384,18 +393,24 @@ IMPLEMENT_FUNCTION(18, Hadija, chapter4Handler)
break;
case kActionNone:
- if (params->param1 != kTimeInvalid)
- TIME_CHECK_CAR(kTime1714500, params->param1, 1, setup_compartment6);
+ if (params->param1 != kTimeInvalid) {
+ if (Entity::timeCheckCar(kTime1714500, params->param1, 1, WRAP_SETUP_FUNCTION(Hadija, setup_compartment6)))
+ break;
+ }
label_callback1:
- TIME_CHECK_CALLBACK(kTime2367000, params->param2, 2, setup_compartment6to8);
+ if (Entity::timeCheckCallback(kTime2367000, params->param2, 2, WRAP_SETUP_FUNCTION(Hadija, setup_compartment6to8)))
+ break;
label_callback2:
- TIME_CHECK_CALLBACK(kTime2421000, params->param3, 3, setup_compartment8to6);
+ if (Entity::timeCheckCallback(kTime2421000, params->param3, 3, WRAP_SETUP_FUNCTION(Hadija, setup_compartment8to6)))
+ break;
label_callback3:
- if (params->param4 != kTimeInvalid && getState()->time > kTime2425500)
- TIME_CHECK_CAR(kTime2484000, params->param4, 4, setup_compartment6);
+ if (params->param4 != kTimeInvalid && getState()->time > kTime2425500) {
+ if (Entity::timeCheckCar(kTime2484000, params->param4, 4, WRAP_SETUP_FUNCTION(Hadija, setup_compartment6)))
+ break;
+ }
break;
case kActionCallback:
@@ -465,7 +480,9 @@ IMPLEMENT_FUNCTION(22, Hadija, function22)
break;
case kActionNone:
- UPDATE_PARAM(params->param1, getState()->time, 2700);
+ if (!Entity::updateParameter(params->param1, getState()->time, 2700))
+ break;
+
setup_function23();
break;
diff --git a/engines/lastexpress/entities/hadija.h b/engines/lastexpress/entities/hadija.h
index d2495955e0..545f21ee03 100644
--- a/engines/lastexpress/entities/hadija.h
+++ b/engines/lastexpress/entities/hadija.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_HADIJA_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/ivo.cpp b/engines/lastexpress/entities/ivo.cpp
index cb0fb92b74..c53f4689fb 100644
--- a/engines/lastexpress/entities/ivo.cpp
+++ b/engines/lastexpress/entities/ivo.cpp
@@ -246,7 +246,7 @@ IMPLEMENT_FUNCTION(14, Ivo, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Ivo, setup_chapter1Handler));
break;
case kActionDefault:
@@ -371,7 +371,7 @@ IMPLEMENT_FUNCTION(18, Ivo, chapter2)
break;
case kActionNone:
- TIME_CHECK(kTime1777500, params->param1, setup_function19);
+ Entity::timeCheck(kTime1777500, params->param1, WRAP_SETUP_FUNCTION(Ivo, setup_function19));
break;
case kActionDefault:
diff --git a/engines/lastexpress/entities/ivo.h b/engines/lastexpress/entities/ivo.h
index cd5cb7b6be..75814336e0 100644
--- a/engines/lastexpress/entities/ivo.h
+++ b/engines/lastexpress/entities/ivo.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_IVO_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/kahina.cpp b/engines/lastexpress/entities/kahina.cpp
index 0c4045097a..7860836a26 100644
--- a/engines/lastexpress/entities/kahina.cpp
+++ b/engines/lastexpress/entities/kahina.cpp
@@ -247,7 +247,7 @@ IMPLEMENT_FUNCTION(10, Kahina, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Kahina, setup_chapter1Handler));
break;
case kActionDefault:
@@ -267,7 +267,7 @@ IMPLEMENT_FUNCTION(11, Kahina, chapter1Handler)
return;
if (getProgress().jacket != kJacketOriginal)
- TIME_CHECK_SAVEPOINT(kTime1107000, params->param1, kEntityKahina, kEntityMertens, kAction238732837);
+ Entity::timeCheckSavepoint(kTime1107000, params->param1, kEntityKahina, kEntityMertens, kAction238732837);
if (getProgress().eventMertensKronosInvitation)
setup_function12();
@@ -280,7 +280,7 @@ IMPLEMENT_FUNCTION(12, Kahina, function12)
break;
case kActionNone:
- TIME_CHECK(kTime1485000, params->param2, setup_function13);
+ Entity::timeCheck(kTime1485000, params->param2, WRAP_SETUP_FUNCTION(Kahina, setup_function13));
break;
case kActionKnock:
@@ -394,10 +394,10 @@ IMPLEMENT_FUNCTION(15, Kahina, function15)
case kActionNone:
if (params->param2 != kTimeInvalid) {
- UPDATE_PARAM_PROC_TIME(params->param1, !getEntities()->isPlayerInCar(kCarRedSleeping), params->param2, 0)
+ if (Entity::updateParameterTime((TimeValue)params->param1, !getEntities()->isPlayerInCar(kCarRedSleeping), params->param2, 0)) {
setCallback(9);
setup_updateEntity(kCarRedSleeping, kPosition_4070);
- UPDATE_PARAM_PROC_END
+ }
}
break;
@@ -580,18 +580,18 @@ IMPLEMENT_FUNCTION(17, Kahina, chapter2Handler)
case kActionNone:
if (params->param1) {
- UPDATE_PARAM_PROC(params->param2, getState()->time, 9000)
+ if (Entity::updateParameter(params->param2, getState()->time, 9000)) {
params->param1 = 1;
params->param2 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (getEvent(kEventKahinaAskSpeakFirebird) && getEvent(kEventKronosConversationFirebird) && getEntities()->isInsideTrainCar(kEntityPlayer, kCarKronos)) {
- UPDATE_PARAM_PROC(params->param3, getState()->time, 900)
+ if (Entity::updateParameter(params->param3, getState()->time, 900)) {
setCallback(1);
setup_savegame(kSavegameTypeEvent, kEventKronosConversationFirebird);
break;
- UPDATE_PARAM_PROC_END
+ }
}
label_callback_3:
@@ -785,16 +785,17 @@ label_callback_2:
}
if (!params->param1) {
- UPDATE_PARAM_PROC(params->param3, getState()->time, 9000)
+ if (Entity::updateParameter(params->param3, getState()->time, 9000)) {
params->param1 = 1;
params->param3 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (getEvent(kEventKahinaAskSpeakFirebird)
&& !getEvent(kEventKronosConversationFirebird)
&& getEntities()->isInsideTrainCar(kEntityPlayer, kCarKronos)) {
- UPDATE_PARAM(params->param4, getState()->time, 900);
+ if (!Entity::updateParameter(params->param4, getState()->time, 900))
+ break;
setCallback(3);
setup_savegame(kSavegameTypeEvent, kEventKronosConversationFirebird);
@@ -926,11 +927,11 @@ IMPLEMENT_FUNCTION(21, Kahina, function21)
params->param3 = (uint)getState()->time + 4500;
if (params->param6 != kTimeInvalid) {
- UPDATE_PARAM_PROC_TIME(params->param3, (getEntities()->isPlayerPosition(kCarKronos, 80) || getEntities()->isPlayerPosition(kCarKronos, 88)), params->param5, 0)
+ if (Entity::updateParameterTime((TimeValue)params->param3, (getEntities()->isPlayerPosition(kCarKronos, 80) || getEntities()->isPlayerPosition(kCarKronos, 88)), params->param5, 0)) {
setCallback(2);
setup_function23();
break;
- UPDATE_PARAM_PROC_END
+ }
}
}
@@ -941,14 +942,14 @@ label_callback_2:
params->param4 = (uint)getState()->time + 4500;
if (params->param6 != kTimeInvalid) {
- UPDATE_PARAM_PROC_TIME(params->param3, (getEntities()->isPlayerPosition(kCarKronos, 80) || getEntities()->isPlayerPosition(kCarKronos, 88)), params->param6, 0)
+ if (Entity::updateParameterTime((TimeValue)params->param3, (getEntities()->isPlayerPosition(kCarKronos, 80) || getEntities()->isPlayerPosition(kCarKronos, 88)), params->param6, 0)) {
getSound()->playSound(kEntityPlayer, "LIB014", getSound()->getSoundFlag(kEntityKahina));
getSound()->playSound(kEntityPlayer, "LIB015", getSound()->getSoundFlag(kEntityKahina));
getEntities()->drawSequenceLeft(kEntityKahina, "202a");
params->param2 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
}
diff --git a/engines/lastexpress/entities/kahina.h b/engines/lastexpress/entities/kahina.h
index b25053e339..7479cf76f9 100644
--- a/engines/lastexpress/entities/kahina.h
+++ b/engines/lastexpress/entities/kahina.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_KAHINA_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/kronos.cpp b/engines/lastexpress/entities/kronos.cpp
index c9fe0dcde1..26ce3ca424 100644
--- a/engines/lastexpress/entities/kronos.cpp
+++ b/engines/lastexpress/entities/kronos.cpp
@@ -126,7 +126,7 @@ IMPLEMENT_FUNCTION(7, Kronos, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Kronos, setup_chapter1Handler));
break;
case kActionDefault:
@@ -147,7 +147,7 @@ IMPLEMENT_FUNCTION(8, Kronos, chapter1Handler)
break;
case kActionNone:
- TIME_CHECK(kTime1489500, params->param2, setup_function11);
+ Entity::timeCheck(kTime1489500, params->param2, WRAP_SETUP_FUNCTION(Kronos, setup_function11));
break;
case kAction171849314:
@@ -189,7 +189,7 @@ IMPLEMENT_FUNCTION(10, Kronos, function10)
break;
case kActionNone:
- TIME_CHECK(kTime1489500, params->param1, setup_function11);
+ Entity::timeCheck(kTime1489500, params->param1, WRAP_SETUP_FUNCTION(Kronos, setup_function11));
break;
case kActionDefault:
@@ -293,10 +293,10 @@ IMPLEMENT_FUNCTION(15, Kronos, function15)
case kActionNone:
if (params->param1 && !getEntities()->isInSalon(kEntityBoutarel)) {
- UPDATE_PARAM_PROC(params->param2, getState()->timeTicks, 75)
+ if (Entity::updateParameter(params->param2, getState()->timeTicks, 75)) {
setup_function16();
break;
- UPDATE_PARAM_PROC_END
+ }
}
if (params->param3 != kTimeInvalid && getState()->time > kTime2002500) {
@@ -405,8 +405,7 @@ IMPLEMENT_FUNCTION(18, Kronos, function18)
params->param2 = 1;
}
- TIME_CHECK(kTime2106000, params->param3, setup_function19)
- else {
+ if (!Entity::timeCheck(kTime2106000, params->param3, WRAP_SETUP_FUNCTION(Kronos, setup_function19))) {
if (params->param1 && getEntities()->isInKronosSanctum(kEntityPlayer)) {
setCallback(1);
setup_savegame(kSavegameTypeEvent, kEventKahinaPunchSuite4);
@@ -526,9 +525,9 @@ IMPLEMENT_FUNCTION(20, Kronos, function20)
}
if (CURRENT_PARAM(1, 2) != kTimeInvalid && params->param7 < getState()->time) {
- UPDATE_PARAM_PROC_TIME(params->param8, !params->param1, CURRENT_PARAM(1, 2), 450)
+ if (Entity::updateParameterTime((TimeValue)params->param8, !params->param1, CURRENT_PARAM(1, 2), 450)) {
getSavePoints()->push(kEntityKronos, kEntityKahina, kAction237555748);
- UPDATE_PARAM_PROC_END
+ }
}
if (!params->param1)
diff --git a/engines/lastexpress/entities/kronos.h b/engines/lastexpress/entities/kronos.h
index 4c61b98620..a7693fcd46 100644
--- a/engines/lastexpress/entities/kronos.h
+++ b/engines/lastexpress/entities/kronos.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_KRONOS_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/mahmud.cpp b/engines/lastexpress/entities/mahmud.cpp
index ebe754bfa4..af86ef8cdd 100644
--- a/engines/lastexpress/entities/mahmud.cpp
+++ b/engines/lastexpress/entities/mahmud.cpp
@@ -84,7 +84,8 @@ IMPLEMENT_FUNCTION_SIII(4, Mahmud, enterExitCompartment2, ObjectIndex, uint32, O
break;
case kActionNone:
- UPDATE_PARAM(params->param7, getState()->timeTicks, params->param5);
+ if (!Entity::updateParameter(params->param7, getState()->timeTicks, params->param5))
+ break;
if (!getScenes()->checkPosition(kSceneNone, SceneManager::kCheckPositionLookingUp))
getScenes()->loadSceneFromObject((ObjectIndex)params->param6, true);
@@ -144,7 +145,8 @@ IMPLEMENT_FUNCTION_II(10, Mahmud, function10, ObjectIndex, bool)
break;
case kActionNone:
- UPDATE_PARAM(params->param6, getState()->time, 13500);
+ if (!Entity::updateParameter(params->param6, getState()->time, 13500))
+ break;
getObjects()->update(kObjectCompartment5, kEntityTrain, kObjectLocation3, kCursorHandKnock, kCursorHand);
getObjects()->update(kObjectCompartment6, kEntityTrain, kObjectLocation3, kCursorHandKnock, kCursorHand);
@@ -558,7 +560,8 @@ IMPLEMENT_FUNCTION(14, Mahmud, chaptersHandler)
if (!params->param2 && getProgress().chapter == kChapter1) {
- TIME_CHECK_CALLBACK(kTime1098000, params->param6, 1, setup_function13);
+ if (Entity::timeCheckCallback(kTime1098000, params->param6, 1, WRAP_SETUP_FUNCTION(Mahmud, setup_function13)))
+ break;
if (!getSoundQueue()->isBuffered("HAR1104") && getState()->time > kTime1167300 && !params->param7) {
params->param7 = 1;
@@ -570,7 +573,8 @@ IMPLEMENT_FUNCTION(14, Mahmud, chaptersHandler)
}
if (params->param5) {
- UPDATE_PARAM(params->param8, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param8, getState()->timeTicks, 75))
+ break;
params->param4 = 1;
params->param5 = 0;
@@ -730,7 +734,7 @@ IMPLEMENT_FUNCTION(15, Mahmud, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chaptersHandler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Mahmud, setup_chaptersHandler));
break;
case kActionDefault:
diff --git a/engines/lastexpress/entities/mahmud.h b/engines/lastexpress/entities/mahmud.h
index 5feb95cba5..685100f078 100644
--- a/engines/lastexpress/entities/mahmud.h
+++ b/engines/lastexpress/entities/mahmud.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_MAHMUD_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/max.cpp b/engines/lastexpress/entities/max.cpp
index cecfe64dc6..abd2aae9e4 100644
--- a/engines/lastexpress/entities/max.cpp
+++ b/engines/lastexpress/entities/max.cpp
@@ -89,7 +89,8 @@ IMPLEMENT_FUNCTION(6, Max, chapter12_handler)
break;
case kActionNone:
- UPDATE_PARAM(params->param2, getState()->time, params->param1);
+ if (!Entity::updateParameter(params->param2, getState()->time, params->param1))
+ break;
if (!getSoundQueue()->isBuffered(kEntityMax))
getSound()->playSound(kEntityMax, "Max1122");
@@ -123,7 +124,8 @@ IMPLEMENT_FUNCTION(7, Max, function7)
break;
case kActionNone:
- UPDATE_PARAM(params->param2, getState()->time, params->param1)
+ if (!Entity::updateParameter(params->param2, getState()->time, params->param1))
+ break;
if (!getSoundQueue()->isBuffered(kEntityMax))
getSound()->playSound(kEntityMax, "Max1122");
@@ -212,7 +214,8 @@ IMPLEMENT_FUNCTION(8, Max, chapter4Handler)
break;
case kActionNone:
- UPDATE_PARAM(params->param3, getState()->time, params->param2);
+ if (!Entity::updateParameter(params->param3, getState()->time, params->param2))
+ break;
if (!getSoundQueue()->isBuffered(kEntityMax))
getSound()->playSound(kEntityMax, "Max3101");
@@ -321,7 +324,7 @@ IMPLEMENT_FUNCTION(10, Max, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter12_handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Max, setup_chapter12_handler));
break;
case kActionDefault:
@@ -390,7 +393,8 @@ IMPLEMENT_FUNCTION(13, Max, chapter3Handler)
break;
}
- UPDATE_PARAM(params->param3, getState()->time, params->param1);
+ if (!Entity::updateParameter(params->param3, getState()->time, params->param1))
+ break;
if (!getSoundQueue()->isBuffered(kEntityMax))
getSound()->playSound(kEntityMax, "Max1122");
@@ -512,7 +516,8 @@ IMPLEMENT_FUNCTION(15, Max, function15)
}
if (!params->param1) {
- UPDATE_PARAM(params->param3, getState()->time, 900);
+ if (!Entity::updateParameter(params->param3, getState()->time, 900))
+ break;
getSavePoints()->push(kEntityMax, kEntityCoudert, kAction157026693);
}
diff --git a/engines/lastexpress/entities/max.h b/engines/lastexpress/entities/max.h
index 17b58475aa..acd8235e89 100644
--- a/engines/lastexpress/entities/max.h
+++ b/engines/lastexpress/entities/max.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_MAX_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/mertens.cpp b/engines/lastexpress/entities/mertens.cpp
index 5672fe4d49..97dd293793 100644
--- a/engines/lastexpress/entities/mertens.cpp
+++ b/engines/lastexpress/entities/mertens.cpp
@@ -37,14 +37,6 @@
namespace LastExpress {
-#define SAVEGAME_BLOOD_JACKET() \
- if (getProgress().jacket == kJacketBlood \
- && getEntities()->isDistanceBetweenEntities(kEntityMertens, kEntityPlayer, 1000) \
- && !getEntities()->isInsideCompartments(kEntityPlayer) \
- && !getEntities()->checkFields10(kEntityPlayer)) { \
- setCallback(1); \
- setup_savegame(kSavegameTypeEvent, kEventMertensBloodJacket); \
- }
Mertens::Mertens(LastExpressEngine *engine) : Entity(engine, kEntityMertens) {
ADD_CALLBACK_FUNCTION(Mertens, reset);
@@ -115,7 +107,7 @@ IMPLEMENT_FUNCTION_S(2, Mertens, bloodJacket)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
break;
case kActionExitCompartment:
@@ -142,7 +134,7 @@ IMPLEMENT_FUNCTION_SI(3, Mertens, enterExitCompartment, ObjectIndex)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
return;
case kActionCallback:
@@ -163,7 +155,7 @@ IMPLEMENT_FUNCTION_SI(4, Mertens, enterExitCompartment2, ObjectIndex)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
return;
case kAction4:
@@ -189,7 +181,7 @@ IMPLEMENT_FUNCTION_SIII(5, Mertens, enterExitCompartment3, ObjectIndex, EntityPo
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
break;
case kActionExitCompartment:
@@ -231,7 +223,7 @@ IMPLEMENT_FUNCTION(6, Mertens, callbackActionOnDirection)
break;
}
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
break;
case kActionExitCompartment:
@@ -254,7 +246,7 @@ IMPLEMENT_FUNCTION_S(7, Mertens, playSound)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
break;
case kActionEndSound:
@@ -281,7 +273,7 @@ IMPLEMENT_FUNCTION_S(8, Mertens, playSound16)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
break;
case kActionEndSound:
@@ -308,14 +300,6 @@ IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION_II(10, Mertens, updateEntity, CarIndex, EntityPosition)
-
-#define LOADSCENE_FROM_POSITION() \
- if (getData()->direction != kDirectionUp) { \
- getEntities()->loadSceneFromEntityPosition(getData()->car, (EntityPosition)(getData()->entityPosition + 750)); \
- } else { \
- getEntities()->loadSceneFromEntityPosition(getData()->car, (EntityPosition)(getData()->entityPosition - 750), true); \
- }
-
switch (savepoint.action) {
default:
break;
@@ -414,7 +398,7 @@ IMPLEMENT_FUNCTION_II(10, Mertens, updateEntity, CarIndex, EntityPosition)
ENTITY_PARAM(0, 7) = 0;
if (params->param1 != 3 || (params->param2 != kPosition_8200 && params->param2 != kPosition_9510)) {
- LOADSCENE_FROM_POSITION();
+ loadSceneFromPosition();
break;
}
@@ -446,31 +430,29 @@ IMPLEMENT_FUNCTION_II(10, Mertens, updateEntity, CarIndex, EntityPosition)
break;
}
- LOADSCENE_FROM_POSITION();
+ loadSceneFromPosition();
break;
case 4:
getAction()->playAnimation(kEventMertensKronosConcertInvitation);
ENTITY_PARAM(2, 4) = 0;
- LOADSCENE_FROM_POSITION();
+ loadSceneFromPosition();
break;
case 5:
getAction()->playAnimation(getData()->entityPosition < getEntityData(kEntityPlayer)->entityPosition ? kEventMertensAskTylerCompartmentD : kEventMertensAskTylerCompartment);
- LOADSCENE_FROM_POSITION();
+ loadSceneFromPosition();
break;
case 6:
getAction()->playAnimation(kEventMertensDontMakeBed);
- LOADSCENE_FROM_POSITION();
+ loadSceneFromPosition();
ENTITY_PARAM(0, 4) = 0;
break;
}
break;
}
-
-#undef LOADSCENE_FROM_POSITION
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
@@ -480,9 +462,10 @@ IMPLEMENT_FUNCTION_I(11, Mertens, function11, uint32)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
- UPDATE_PARAM(params->param2, getState()->time, params->param1)
+ if (!Entity::updateParameter(params->param2, getState()->time, params->param1))
+ break;
callbackAction();
break;
@@ -548,23 +531,23 @@ IMPLEMENT_FUNCTION_II(13, Mertens, function13, bool, bool)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
if (!params->param2 && !params->param3) {
- UPDATE_PARAM_PROC(params->param4, getState()->timeTicks, 75)
+ if (Entity::updateParameter(params->param4, getState()->timeTicks, 75)) {
getData()->inventoryItem = kItemNone;
setCallback(5);
setup_function18();
break;
- UPDATE_PARAM_PROC_END
+ }
}
- UPDATE_PARAM_PROC(params->param5, getState()->timeTicks, 225)
+ if (Entity::updateParameter(params->param5, getState()->timeTicks, 225)) {
getData()->inventoryItem = kItemNone;
setCallback(6);
setup_function18();
break;
- UPDATE_PARAM_PROC_END
+ }
getData()->inventoryItem = (getProgress().chapter == kChapter1
&& !ENTITY_PARAM(2, 1)
@@ -670,7 +653,7 @@ IMPLEMENT_FUNCTION_I(14, Mertens, function14, EntityIndex)
break;
case kActionNone:
- SAVEGAME_BLOOD_JACKET();
+ Entity::savegameBloodJacket();
break;
case kActionDefault:
@@ -1076,11 +1059,12 @@ IMPLEMENT_FUNCTION_II(21, Mertens, function21, ObjectIndex, ObjectIndex)
break;
case kActionNone:
- UPDATE_PARAM_PROC(CURRENT_PARAM(1, 4), getState()->time, 300)
+ if (Entity::updateParameter(CURRENT_PARAM(1, 4), getState()->time, 300)) {
getSound()->playSound(kEntityPlayer, "ZFX1004", getSound()->getSoundFlag(kEntityMertens));
- UPDATE_PARAM_PROC_END
+ }
- UPDATE_PARAM(CURRENT_PARAM(1, 5), getState()->time, 900);
+ if (!Entity::updateParameter(CURRENT_PARAM(1, 5), getState()->time, 900))
+ break;
// Update objects
getObjects()->updateLocation2((ObjectIndex)params->param1, kObjectLocation1);
@@ -1304,7 +1288,8 @@ IMPLEMENT_FUNCTION(24, Mertens, function24)
case kActionNone:
if (!params->param1) {
- UPDATE_PARAM(params->param2, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param2, getState()->timeTicks, 75))
+ break;
setCallback(3);
setup_enterExitCompartment3("601Rc", kObjectCompartment3, kPosition_6470, kPosition_6130);
@@ -1407,7 +1392,8 @@ IMPLEMENT_FUNCTION(25, Mertens, function25)
case kActionNone:
if (!params->param1) {
- UPDATE_PARAM(params->param2, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param2, getState()->timeTicks, 75))
+ break;
setCallback(3);
setup_enterExitCompartment3("601Zb", kObjectCompartment2, kPosition_7500, kPositionNone);
@@ -1630,13 +1616,13 @@ IMPLEMENT_FUNCTION_I(27, Mertens, tylerCompartment, MertensActionType)
break;
}
- UPDATE_PARAM_PROC(params->param2, getState()->timeTicks, 150)
+ if (Entity::updateParameter(params->param2, getState()->timeTicks, 150)) {
getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).location, kCursorNormal, kCursorNormal);
setCallback(10);
setup_playSound16("CON1018A");
break;
- UPDATE_PARAM_PROC_END
+ }
label_callback10:
if (!params->param3)
@@ -1644,7 +1630,8 @@ label_callback10:
if (params->param3 >= getState()->timeTicks) {
label_callback11:
- UPDATE_PARAM(params->param4, getState()->timeTicks, 375);
+ if (!Entity::updateParameter(params->param4, getState()->timeTicks, 375))
+ break;
getSound()->playSound(kEntityPlayer, "LIB033");
@@ -2511,7 +2498,7 @@ IMPLEMENT_FUNCTION(34, Mertens, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Mertens, setup_chapter1Handler));
break;
case kActionDefault:
@@ -3011,7 +2998,7 @@ IMPLEMENT_FUNCTION(42, Mertens, function42)
getData()->inventoryItem = kItemInvalid;
if (!params->param2) {
- TIME_CHECK_SAVEPOINT(kTime1125000, params->param3, kEntityMertens, kEntityMahmud, kAction170483072);
+ Entity::timeCheckSavepoint(kTime1125000, params->param3, kEntityMertens, kEntityMahmud, kAction170483072);
if (params->param4 != kTimeInvalid && getState()->time > kTimeCityChalons) {
@@ -3038,11 +3025,11 @@ IMPLEMENT_FUNCTION(42, Mertens, function42)
label_callback_8:
if (getState()->time > kTime1215000 && !ENTITY_PARAM(0, 1) && !ENTITY_PARAM(2, 1)) {
- UPDATE_PARAM_PROC(params->param5, getState()->time, 2700)
+ if (Entity::updateParameter(params->param5, getState()->time, 2700)) {
getEntities()->drawSequenceLeft(kEntityMertens, "601E");
ENTITY_PARAM(0, 1) = 1;
params->param5 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (ENTITY_PARAM(0, 8)) {
@@ -3545,19 +3532,23 @@ label_callback_5:
}
label_callback_6:
- TIME_CHECK_CALLBACK_1(kTime1971000, params->param1, 7, setup_function28, "CON3012");
+ if (Entity::timeCheckCallback(kTime1971000, params->param1, 7, "CON3012", WRAP_SETUP_FUNCTION_S(Mertens, setup_function28)))
+ break;
label_callback_7:
- TIME_CHECK_CALLBACK(kTime2117700, params->param2, 8, setup_function32);
+ if (Entity::timeCheckCallback(kTime2117700, params->param2, 8, WRAP_SETUP_FUNCTION(Mertens, setup_function32)))
+ break;
label_callback_8:
- TIME_CHECK_CALLBACK_1(kTime2124000, params->param3, 9, setup_function28, "CON2010");
+ if (Entity::timeCheckCallback(kTime2124000, params->param3, 9, "CON2010", WRAP_SETUP_FUNCTION_S(Mertens, setup_function28)))
+ break;
label_callback_9:
- TIME_CHECK_CALLBACK(kTime2146500, params->param4, 10, setup_function32);
+ if (Entity::timeCheckCallback(kTime2146500, params->param4, 10, WRAP_SETUP_FUNCTION(Mertens, setup_function32)))
+ break;
label_callback_10:
- TIME_CHECK_CALLBACK(kTime2169000, params->param5, 11, setup_function32);
+ Entity::timeCheckCallback(kTime2169000, params->param5, 11, WRAP_SETUP_FUNCTION(Mertens, setup_function32));
break;
case kAction11:
@@ -3740,21 +3731,26 @@ label_callback_3:
label_callback_4:
if (!params->param1) {
- TIME_CHECK_CALLBACK(kTime2403000, params->param2, 5, setup_function49);
+ if (Entity::timeCheckCallback(kTime2403000, params->param2, 5, WRAP_SETUP_FUNCTION(Mertens, setup_function49)))
+ break;
label_callback_5:
- TIME_CHECK_CALLBACK(kTime2430000, params->param3, 6, setup_function32);
+ if (Entity::timeCheckCallback(kTime2430000, params->param3, 6, WRAP_SETUP_FUNCTION(Mertens, setup_function32)))
+ break;
label_callback_6:
- TIME_CHECK_CALLBACK(kTime2439000, params->param4, 7, setup_function32);
+ if (Entity::timeCheckCallback(kTime2439000, params->param4, 7, WRAP_SETUP_FUNCTION(Mertens, setup_function32)))
+ break;
label_callback_7:
- TIME_CHECK_CALLBACK(kTime2448000, params->param5, 8, setup_function32);
+ if (Entity::timeCheckCallback(kTime2448000, params->param5, 8, WRAP_SETUP_FUNCTION(Mertens, setup_function32)))
+ break;
}
label_callback_8:
if (getState()->time > kTime2538000 && !ENTITY_PARAM(0, 1) && !ENTITY_PARAM(2, 1)) {
- UPDATE_PARAM(params->param6, getState()->time, 2700);
+ if (!Entity::updateParameter(params->param6, getState()->time, 2700))
+ break;
getEntities()->drawSequenceLeft(kEntityMertens, "601E");
@@ -4008,7 +4004,8 @@ IMPLEMENT_FUNCTION(53, Mertens, function53)
case kActionNone:
if (params->param1) {
- UPDATE_PARAM(params->param4, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param4, getState()->timeTicks, 75))
+ break;
params->param1 = 0;
params->param2 = 0;
@@ -4106,4 +4103,15 @@ IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_NULL_FUNCTION(54, Mertens)
+//////////////////////////////////////////////////////////////////////////
+// Helper functions
+//////////////////////////////////////////////////////////////////////////
+
+void Mertens::loadSceneFromPosition() {
+ if (getData()->direction != kDirectionUp)
+ getEntities()->loadSceneFromEntityPosition(getData()->car, (EntityPosition)(getData()->entityPosition + 750));
+ else
+ getEntities()->loadSceneFromEntityPosition(getData()->car, (EntityPosition)(getData()->entityPosition - 750), true);
+}
+
} // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/mertens.h b/engines/lastexpress/entities/mertens.h
index 31b7a97dcd..4cc58fd4ba 100644
--- a/engines/lastexpress/entities/mertens.h
+++ b/engines/lastexpress/entities/mertens.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_MERTENS_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
@@ -210,6 +209,9 @@ public:
DECLARE_FUNCTION(function53)
DECLARE_NULL_FUNCTION()
+
+private:
+ void loadSceneFromPosition();
};
} // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/milos.cpp b/engines/lastexpress/entities/milos.cpp
index 21f3b06896..519a613497 100644
--- a/engines/lastexpress/entities/milos.cpp
+++ b/engines/lastexpress/entities/milos.cpp
@@ -176,11 +176,11 @@ IMPLEMENT_FUNCTION_I(11, Milos, function11, TimeValue)
}
if (params->param2) {
- UPDATE_PARAM_PROC(params->param8, getState()->timeTicks, 75)
+ if (Entity::updateParameter(params->param8, getState()->timeTicks, 75)) {
params->param2 = 0;
params->param3 = 1;
getObjects()->update(kObjectCompartmentG, kEntityMilos, kObjectLocation1, kCursorNormal, kCursorNormal);
- UPDATE_PARAM_PROC_END
+ }
}
params->param8 = 0;
@@ -189,10 +189,10 @@ IMPLEMENT_FUNCTION_I(11, Milos, function11, TimeValue)
break;
if (params->param6) {
- UPDATE_PARAM_PROC(CURRENT_PARAM(1, 1), getState()->time, 4500)
+ if (Entity::updateParameter(CURRENT_PARAM(1, 1), getState()->time, 4500)) {
params->param6 = 0;
CURRENT_PARAM(1, 1) = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (!getProgress().field_CC) {
@@ -362,7 +362,7 @@ IMPLEMENT_FUNCTION(12, Milos, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Milos, setup_chapter1Handler));
break;
case kActionDefault:
@@ -434,7 +434,8 @@ IMPLEMENT_FUNCTION(14, Milos, function14)
if (CURRENT_PARAM(1, 1) < getState()->timeTicks) {
if (getObjects()->get(kObjectCompartment1).location == kObjectLocation1) {
- UPDATE_PARAM(CURRENT_PARAM(1, 2), getState()->timeTicks, 75);
+ if (!Entity::updateParameter(CURRENT_PARAM(1, 2), getState()->timeTicks, 75))
+ break;
getObjects()->update(kObjectCompartment1, kEntityMilos, getObjects()->get(kObjectCompartment1).location, kCursorNormal, kCursorNormal);
@@ -505,7 +506,8 @@ IMPLEMENT_FUNCTION(14, Milos, function14)
}
label_callback_12:
- UPDATE_PARAM(CURRENT_PARAM(1, 4), getState()->timeTicks, 75);
+ if (!Entity::updateParameter(CURRENT_PARAM(1, 4), getState()->timeTicks, 75))
+ break;
getEntities()->exitCompartment(kEntityMilos, kObjectCompartment1, true);
@@ -720,7 +722,7 @@ IMPLEMENT_FUNCTION(15, Milos, chapter1Handler)
break;
case kActionNone:
- TIME_CHECK_SAVEPOINT(kTime1071000, params->param3, kEntityMilos, kEntityServers1, kAction223002560);
+ Entity::timeCheckSavepoint(kTime1071000, params->param3, kEntityMilos, kEntityServers1, kAction223002560);
if (getState()->time > kTime1089000 && getEntities()->isSomebodyInsideRestaurantOrSalon()) {
setup_function16();
@@ -728,15 +730,16 @@ IMPLEMENT_FUNCTION(15, Milos, chapter1Handler)
}
if (getEntities()->isPlayerPosition(kCarRestaurant, 61) && !params->param1) {
- UPDATE_PARAM_PROC(params->param4, getState()->timeTicks, 45)
+ if (Entity::updateParameter(params->param4, getState()->timeTicks, 45)) {
setCallback(1);
setup_draw("009C");
break;
- UPDATE_PARAM_PROC_END
+ }
}
if (getEntities()->isPlayerPosition(kCarRestaurant, 70) && !params->param2) {
- UPDATE_PARAM(params->param5, getState()->timeTicks, 45);
+ if (!Entity::updateParameter(params->param5, getState()->timeTicks, 45))
+ break;
setCallback(2);
setup_draw("009C");
@@ -951,7 +954,8 @@ IMPLEMENT_FUNCTION(21, Milos, function21)
break;
case kActionNone:
- UPDATE_PARAM(params->param2, getState()->time, 4500);
+ if (!Entity::updateParameter(params->param2, getState()->time, 4500))
+ break;
params->param1 = 1;
break;
@@ -1116,7 +1120,8 @@ IMPLEMENT_FUNCTION(24, Milos, function24)
}
if (params->param1) {
- UPDATE_PARAM(params->param5, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param5, getState()->timeTicks, 75))
+ break;
params->param1 = 0;
params->param2 = 1;
@@ -1282,14 +1287,15 @@ IMPLEMENT_FUNCTION(25, Milos, function25)
case kActionNone:
if (!getEvent(kEventMilosCompartmentVisitTyler) && !getProgress().field_54 && !ENTITY_PARAM(0, 4)) {
- UPDATE_PARAM_PROC(params->param3, getState()->time, 13500)
+ if (Entity::updateParameter(params->param3, getState()->time, 13500)) {
getSavePoints()->push(kEntityMilos, kEntityVesna, kAction155913424);
params->param3 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (params->param1) {
- UPDATE_PARAM(params->param4, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param4, getState()->timeTicks, 75))
+ break;
params->param1 = 0;
params->param2 = 1;
@@ -1534,7 +1540,7 @@ IMPLEMENT_FUNCTION(29, Milos, chapter4Handler)
TIME_CHECK_PLAYSOUND_MILOS(kTime2370600, params->param5, "Mil4015");
- TIME_CHECK_SAVEPOINT(kTime2407500, params->param6, kEntityMilos, kEntityVesna, kAction55996766);
+ Entity::timeCheckSavepoint(kTime2407500, params->param6, kEntityMilos, kEntityVesna, kAction55996766);
break;
case kActionCallback:
diff --git a/engines/lastexpress/entities/milos.h b/engines/lastexpress/entities/milos.h
index d58d717f8a..e8f95dc5ff 100644
--- a/engines/lastexpress/entities/milos.h
+++ b/engines/lastexpress/entities/milos.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_MILOS_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/mmeboutarel.cpp b/engines/lastexpress/entities/mmeboutarel.cpp
index ace8637556..950644cb8f 100644
--- a/engines/lastexpress/entities/mmeboutarel.cpp
+++ b/engines/lastexpress/entities/mmeboutarel.cpp
@@ -244,7 +244,7 @@ IMPLEMENT_FUNCTION(10, MmeBoutarel, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(MmeBoutarel, setup_chapter1Handler));
break;
case kActionDefault:
@@ -400,7 +400,7 @@ IMPLEMENT_FUNCTION(13, MmeBoutarel, function13)
case kActionNone:
if (!getSoundQueue()->isBuffered(kEntityMmeBoutarel) && params->param6 != kTimeInvalid) {
- UPDATE_PARAM_PROC_TIME(params->param1, !getEntities()->isDistanceBetweenEntities(kEntityMmeBoutarel, kEntityPlayer, 2000), params->param6, 0)
+ if (Entity::updateParameterTime((TimeValue)params->param1, !getEntities()->isDistanceBetweenEntities(kEntityMmeBoutarel, kEntityPlayer, 2000), params->param6, 0)) {
getObjects()->update(kObjectCompartmentD, kEntityPlayer, kObjectLocation1, kCursorNormal, kCursorNormal);
getObjects()->update(kObject51, kEntityPlayer, kObjectLocation1, kCursorNormal, kCursorNormal);
@@ -412,22 +412,24 @@ IMPLEMENT_FUNCTION(13, MmeBoutarel, function13)
setCallback(1);
setup_playSound("MME1037");
break;
- UPDATE_PARAM_PROC_END
+ }
}
label_callback_1:
if (getProgress().field_24 && params->param7 != kTimeInvalid) {
- UPDATE_PARAM_PROC_TIME(kTime1093500, (!params->param5 || !getEntities()->isPlayerInCar(kCarRedSleeping)), params->param7, 0)
+ if (Entity::updateParameterTime(kTime1093500, (!params->param5 || !getEntities()->isPlayerInCar(kCarRedSleeping)), params->param7, 0)) {
setCallback(2);
setup_function11();
break;
- UPDATE_PARAM_PROC_END
+ }
}
- TIME_CHECK(kTime1094400, params->param8, setup_function14);
+ if (Entity::timeCheck(kTime1094400, params->param8, WRAP_SETUP_FUNCTION(MmeBoutarel, setup_function14)))
+ break;
if (params->param4) {
- UPDATE_PARAM(CURRENT_PARAM(1, 1), getState()->timeTicks, 75);
+ if (!Entity::updateParameter(CURRENT_PARAM(1, 1), getState()->timeTicks, 75))
+ break;
params->param3 = 1;
params->param4 = 0;
@@ -587,7 +589,8 @@ IMPLEMENT_FUNCTION(15, MmeBoutarel, function15)
label_callback_5:
if (params->param2) {
- UPDATE_PARAM(params->param5, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param5, getState()->timeTicks, 75))
+ break;
params->param1 = 1;
params->param2 = 0;
@@ -1016,7 +1019,8 @@ IMPLEMENT_FUNCTION(23, MmeBoutarel, chapter4Handler)
case kActionNone:
if (params->param1) {
- UPDATE_PARAM(params->param2, getState()->time, 900);
+ if (!Entity::updateParameter(params->param2, getState()->time, 900))
+ break;
getObjects()->update(kObjectCompartmentD, kEntityPlayer, kObjectLocation1, kCursorKeepValue, kCursorKeepValue);
@@ -1062,10 +1066,12 @@ IMPLEMENT_FUNCTION(24, MmeBoutarel, function24)
break;
case kActionNone:
- TIME_CHECK(kTime2470500, params->param4, setup_function25);
+ if (Entity::timeCheck(kTime2470500, params->param4, WRAP_SETUP_FUNCTION(MmeBoutarel, setup_function25)))
+ break;
if (params->param2) {
- UPDATE_PARAM(params->param5, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param5, getState()->timeTicks, 75))
+ break;
params->param1 = 1;
params->param2 = 0;
@@ -1208,7 +1214,8 @@ IMPLEMENT_FUNCTION(28, MmeBoutarel, function28)
case kActionNone:
if (params->param1) {
- UPDATE_PARAM(params->param3, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param3, getState()->timeTicks, 75))
+ break;
params->param1 = 0;
params->param2 = 1;
diff --git a/engines/lastexpress/entities/mmeboutarel.h b/engines/lastexpress/entities/mmeboutarel.h
index 772451ba15..0f6e6349fe 100644
--- a/engines/lastexpress/entities/mmeboutarel.h
+++ b/engines/lastexpress/entities/mmeboutarel.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_MMEBOUTAREL_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/pascale.cpp b/engines/lastexpress/entities/pascale.cpp
index 6620634ade..6e9f992390 100644
--- a/engines/lastexpress/entities/pascale.cpp
+++ b/engines/lastexpress/entities/pascale.cpp
@@ -1115,18 +1115,19 @@ IMPLEMENT_FUNCTION(33, Pascale, function33)
case kActionNone:
if (params->param4) {
- UPDATE_PARAM_PROC(params->param5, getState()->time, 4500)
+ if (Entity::updateParameter(params->param5, getState()->time, 4500)) {
getObjects()->update(kObjectCompartmentG, kEntityPascale, kObjectLocation1, kCursorNormal, kCursorNormal);
setCallback(1);
setup_playSound("Wat5010");
break;
- UPDATE_PARAM_PROC_END
+ }
}
label_callback1:
if (params->param1) {
- UPDATE_PARAM(params->param6, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param6, getState()->timeTicks, 75))
+ break;
params->param1 = 0;
params->param2 = 2;
diff --git a/engines/lastexpress/entities/pascale.h b/engines/lastexpress/entities/pascale.h
index 333ebcae3e..eaf0f3ba0c 100644
--- a/engines/lastexpress/entities/pascale.h
+++ b/engines/lastexpress/entities/pascale.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_PASCALE_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/rebecca.cpp b/engines/lastexpress/entities/rebecca.cpp
index 4f7be385ce..5bcb6aef85 100644
--- a/engines/lastexpress/entities/rebecca.cpp
+++ b/engines/lastexpress/entities/rebecca.cpp
@@ -498,14 +498,14 @@ IMPLEMENT_FUNCTION_I(20, Rebecca, function20, TimeValue)
if (!params->param2) {
params->param6 = 0;
} else {
- UPDATE_PARAM_PROC(params->param6, getState()->timeTicks, 75)
+ if (Entity::updateParameter(params->param6, getState()->timeTicks, 75)) {
params->param2 = 0;
params->param3 = 1;
getObjects()->update(kObjectCompartmentE, kEntityRebecca, kObjectLocation1, kCursorNormal, kCursorNormal);
getObjects()->update(kObject52, kEntityRebecca, kObjectLocation1, kCursorNormal, kCursorNormal);
params->param6 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (getProgress().chapter == kChapter1 && !ENTITY_PARAM(0, 3)) {
@@ -655,7 +655,7 @@ IMPLEMENT_FUNCTION(21, Rebecca, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Rebecca, setup_chapter1Handler));
break;
case kActionDefault:
@@ -683,7 +683,8 @@ IMPLEMENT_FUNCTION(22, Rebecca, chapter1Handler)
break;
case kActionNone:
- TIME_CHECK_CALLBACK_1(kTime1084500, params->param3, 1, setup_playSound, "REB1015");
+ if (Entity::timeCheckCallback(kTime1084500, params->param3, 1, "REB1015", WRAP_SETUP_FUNCTION_S(Rebecca, setup_playSound)))
+ break;
if (params->param4 == kTimeInvalid)
goto label_callback_4;
@@ -697,7 +698,7 @@ IMPLEMENT_FUNCTION(22, Rebecca, chapter1Handler)
if (params->param4 >= getState()->time) {
label_callback_4:
if (params->param1) {
- UPDATE_PARAM_CHECK(params->param5, getState()->time, 900)
+ if (Entity::updateParameterCheck(params->param5, getState()->time, 900)) {
if (getEntities()->isInSalon(kEntityPlayer)) {
setCallback(5);
setup_playSound("REB1013");
@@ -708,7 +709,9 @@ label_callback_4:
label_callback_5:
if (params->param2) {
- UPDATE_PARAM(params->param6, getState()->timeTicks, 90);
+ if (!Entity::updateParameter(params->param6, getState()->timeTicks, 90))
+ break;
+
getScenes()->loadSceneFromPosition(kCarRestaurant, 55);
} else {
params->param6 = 0;
@@ -772,7 +775,13 @@ IMPLEMENT_FUNCTION(23, Rebecca, function23)
break;
case kActionNone:
- TIME_CHECK_CALLBACK_2(kTime1111500, params->param2, 3, setup_enterExitCompartment, "623De", kObjectCompartmentE);
+ if (getState()->time > kTime1111500 && !params->param2) {
+ params->param2 = 1;
+ setCallback(3);
+ setup_enterExitCompartment("623De", kObjectCompartmentE);
+
+ break;
+ }
break;
case kActionDefault:
@@ -841,12 +850,13 @@ IMPLEMENT_FUNCTION(24, Rebecca, function24)
break;
case kActionNone:
- TIME_CHECK_SAVEPOINT(kTime1134000, params->param2, kEntityRebecca, kEntityServers0, kAction223712416);
+ Entity::timeCheckSavepoint(kTime1134000, params->param2, kEntityRebecca, kEntityServers0, kAction223712416);
if (!params->param1)
break;
- TIME_CHECK_CALLBACK(kTime1165500, params->param3, 6, setup_function19);
+ if (Entity::timeCheckCallback(kTime1165500, params->param3, 6, WRAP_SETUP_FUNCTION(Rebecca, setup_function19)))
+ break;
if (params->param4 != kTimeInvalid) {
if (getState()->time <= kTime1161000) {
@@ -963,10 +973,16 @@ IMPLEMENT_FUNCTION(26, Rebecca, function26)
break;
case kActionNone:
- TIME_CHECK_CALLBACK_3(kTime1224000, params->param2, 1, setup_updatePosition, "118H", kCarRestaurant, 52);
+ if (getState()->time > kTime1224000 && !params->param2) {
+ params->param2 = 1;
+ setCallback(1);
+ setup_updatePosition("118H", kCarRestaurant, 52);
+ break;
+ }
if (params->param1) {
- UPDATE_PARAM(params->param3, getState()->timeTicks, 90);
+ if (!Entity::updateParameter(params->param3, getState()->timeTicks, 90))
+ break;
getScenes()->loadSceneFromPosition(kCarRestaurant, 51);
}
@@ -1221,7 +1237,7 @@ IMPLEMENT_FUNCTION(34, Rebecca, function34)
params->param2 = (uint)getState()->time;
if (params->param2 >= getState()->time) {
- TIME_CHECK_CALLBACK(kTime2052000, params->param3, 1, setup_function19);
+ Entity::timeCheckCallback(kTime2052000, params->param3, 1, WRAP_SETUP_FUNCTION(Rebecca, setup_function19));
break;
}
}
@@ -1231,7 +1247,7 @@ IMPLEMENT_FUNCTION(34, Rebecca, function34)
getSavePoints()->push(kEntityRebecca, kEntityServers0, kAction223712416);
}
- TIME_CHECK_CALLBACK(kTime2052000, params->param3, 1, setup_function19);
+ Entity::timeCheckCallback(kTime2052000, params->param3, 1, WRAP_SETUP_FUNCTION(Rebecca, setup_function19));
break;
case kActionEndSound:
@@ -1630,7 +1646,7 @@ label_next:
label_callback_2:
if (params->param2)
- TIME_CHECK_CALLBACK(kTime2443500, params->param5, 3, setup_function19);
+ Entity::timeCheckCallback(kTime2443500, params->param5, 3, WRAP_SETUP_FUNCTION(Rebecca, setup_function19));
break;
case kActionEndSound:
@@ -1753,7 +1769,8 @@ IMPLEMENT_FUNCTION(48, Rebecca, function48)
case kActionNone:
if (params->param1) {
- UPDATE_PARAM(params->param3, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param3, getState()->timeTicks, 75))
+ break;
params->param1 = 0;
params->param2 = 1;
diff --git a/engines/lastexpress/entities/rebecca.h b/engines/lastexpress/entities/rebecca.h
index e91ee30d4d..885632f884 100644
--- a/engines/lastexpress/entities/rebecca.h
+++ b/engines/lastexpress/entities/rebecca.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_REBECCA_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/salko.cpp b/engines/lastexpress/entities/salko.cpp
index 70a26b515a..e8b4b4247b 100644
--- a/engines/lastexpress/entities/salko.cpp
+++ b/engines/lastexpress/entities/salko.cpp
@@ -156,7 +156,7 @@ IMPLEMENT_FUNCTION(9, Salko, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Salko, setup_chapter1Handler));
break;
case kActionDefault:
@@ -299,7 +299,8 @@ IMPLEMENT_FUNCTION(15, Salko, chapter3Handler)
case kActionNone:
if (getState()->time < kTime2200500) {
- UPDATE_PARAM(params->param1, getState()->time, 81000);
+ if (!Entity::updateParameter(params->param1, getState()->time, 81000))
+ break;
setCallback(1);
setup_function16();
@@ -329,7 +330,8 @@ IMPLEMENT_FUNCTION(16, Salko, function16)
}
label_callback3:
- UPDATE_PARAM(params->param1, getState()->time, 4500);
+ if (!Entity::updateParameter(params->param1, getState()->time, 4500))
+ break;
getSavePoints()->push(kEntitySalko, kEntitySalko, kAction101169464);
break;
diff --git a/engines/lastexpress/entities/salko.h b/engines/lastexpress/entities/salko.h
index 6308211053..6ca73e39f6 100644
--- a/engines/lastexpress/entities/salko.h
+++ b/engines/lastexpress/entities/salko.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_SALKO_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/servers0.cpp b/engines/lastexpress/entities/servers0.cpp
index 56fc0e6056..73e0d34722 100644
--- a/engines/lastexpress/entities/servers0.cpp
+++ b/engines/lastexpress/entities/servers0.cpp
@@ -312,17 +312,17 @@ IMPLEMENT_FUNCTION(20, Servers0, chapter1Handler)
case kActionNone:
if (params->param2) {
- UPDATE_PARAM_PROC(params->param3, getState()->time, 2700);
+ if (Entity::updateParameter(params->param3, getState()->time, 2700)) {
ENTITY_PARAM(0, 4) = 1;
params->param2 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (params->param1) {
- UPDATE_PARAM_PROC(params->param4, getState()->time, 4500)
+ if (Entity::updateParameter(params->param4, getState()->time, 4500)) {
ENTITY_PARAM(0, 5) = 1;
params->param1 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (!getEntities()->isInKitchen(kEntityServers0) && !getEntities()->isSomebodyInsideRestaurantOrSalon())
@@ -733,10 +733,10 @@ IMPLEMENT_FUNCTION(32, Servers0, chapter4Handler)
break;
case kActionNone:
- UPDATE_PARAM_PROC(params->param2, getState()->time, 3600)
+ if (Entity::updateParameter(params->param2, getState()->time, 3600)) {
ENTITY_PARAM(1, 8) = 1;
params->param1 = 0;
- UPDATE_PARAM_PROC_END
+ }
if (!getEntities()->isInKitchen(kEntityServers1) || !getEntities()->isSomebodyInsideRestaurantOrSalon())
break;
diff --git a/engines/lastexpress/entities/servers0.h b/engines/lastexpress/entities/servers0.h
index 2e9165a410..4c35637d65 100644
--- a/engines/lastexpress/entities/servers0.h
+++ b/engines/lastexpress/entities/servers0.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_SERVERS0_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/servers1.cpp b/engines/lastexpress/entities/servers1.cpp
index 24bf678f3a..a8f4c0233c 100644
--- a/engines/lastexpress/entities/servers1.cpp
+++ b/engines/lastexpress/entities/servers1.cpp
@@ -563,10 +563,10 @@ IMPLEMENT_FUNCTION(26, Servers1, chapter4Handler)
case kActionNone:
if (params->param2) {
- UPDATE_PARAM_PROC(params->param2, getState()->time, 900)
+ if (Entity::updateParameter(params->param2, getState()->time, 900)) {
ENTITY_PARAM(1, 5) = 1;
params->param1 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
if (!getEntities()->isInKitchen(kEntityServers1) || !getEntities()->isSomebodyInsideRestaurantOrSalon())
diff --git a/engines/lastexpress/entities/servers1.h b/engines/lastexpress/entities/servers1.h
index 13b30696f0..c8f667ec5c 100644
--- a/engines/lastexpress/entities/servers1.h
+++ b/engines/lastexpress/entities/servers1.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_SERVERS1_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/sophie.cpp b/engines/lastexpress/entities/sophie.cpp
index c2f25b7eb1..170090005f 100644
--- a/engines/lastexpress/entities/sophie.cpp
+++ b/engines/lastexpress/entities/sophie.cpp
@@ -31,31 +31,6 @@
namespace LastExpress {
-#define CHAPTER_IMPLEMENTATION() \
- switch (savepoint.action) { \
- default: \
- break; \
- case kActionNone: \
- setup_chaptersHandler(); \
- break; \
- case kActionDefault: \
- getEntities()->clearSequences(kEntitySophie); \
- getData()->entityPosition = kPosition_4840; \
- getData()->location = kLocationInsideCompartment; \
- getData()->car = kCarRedSleeping; \
- getData()->clothes = kClothesDefault; \
- getData()->inventoryItem = kItemNone; \
- break; \
- }
-
-#define DEFAULT_ACTION_IMPLEMENTATION() \
- if (savepoint.action == kActionDefault) { \
- getData()->entityPosition = kPosition_4840; \
- getData()->location = kLocationInsideCompartment; \
- getData()->car = kCarRedSleeping; \
- getEntities()->clearSequences(kEntitySophie); \
- }
-
Sophie::Sophie(LastExpressEngine *engine) : Entity(engine, kEntitySophie) {
ADD_CALLBACK_FUNCTION(Sophie, reset);
ADD_CALLBACK_FUNCTION(Sophie, updateEntity);
@@ -204,7 +179,7 @@ IMPLEMENT_FUNCTION(4, Sophie, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chaptersHandler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Sophie, setup_chaptersHandler));
break;
case kActionDefault:
@@ -217,27 +192,27 @@ IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(5, Sophie, function5)
- DEFAULT_ACTION_IMPLEMENTATION()
+ handleAction(savepoint);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(6, Sophie, chapter2)
- CHAPTER_IMPLEMENTATION()
+ handleChapter(savepoint);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(7, Sophie, chapter3)
- CHAPTER_IMPLEMENTATION()
+ handleChapter(savepoint);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(8, Sophie, chapter4)
- CHAPTER_IMPLEMENTATION()
+ handleChapter(savepoint);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(9, Sophie, function9)
- DEFAULT_ACTION_IMPLEMENTATION()
+ handleAction(savepoint);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
@@ -271,4 +246,37 @@ IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_NULL_FUNCTION(12, Sophie)
+//////////////////////////////////////////////////////////////////////////
+// Helpers functions
+//////////////////////////////////////////////////////////////////////////
+
+void Sophie::handleAction(const SavePoint &savepoint) {
+ if (savepoint.action == kActionDefault) {
+ getData()->entityPosition = kPosition_4840;
+ getData()->location = kLocationInsideCompartment;
+ getData()->car = kCarRedSleeping;
+ getEntities()->clearSequences(kEntitySophie);
+ }
+}
+
+void Sophie::handleChapter(const SavePoint &savepoint) {
+ switch (savepoint.action) {
+ default:
+ break;
+
+ case kActionNone:
+ setup_chaptersHandler();
+ break;
+
+ case kActionDefault:
+ getEntities()->clearSequences(kEntitySophie);
+ getData()->entityPosition = kPosition_4840;
+ getData()->location = kLocationInsideCompartment;
+ getData()->car = kCarRedSleeping;
+ getData()->clothes = kClothesDefault;
+ getData()->inventoryItem = kItemNone;
+ break;
+ }
+}
+
} // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/sophie.h b/engines/lastexpress/entities/sophie.h
index c2ca348027..188788bb9b 100644
--- a/engines/lastexpress/entities/sophie.h
+++ b/engines/lastexpress/entities/sophie.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_SOPHIE_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
@@ -88,6 +87,10 @@ public:
DECLARE_FUNCTION(chapter5Handler)
DECLARE_NULL_FUNCTION()
+
+private:
+ void handleAction(const SavePoint &savepoint);
+ void handleChapter(const SavePoint &savepoint);
};
} // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/tables.h b/engines/lastexpress/entities/tables.h
index 7fcfc0499e..c213aac978 100644
--- a/engines/lastexpress/entities/tables.h
+++ b/engines/lastexpress/entities/tables.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_TABLES_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/tatiana.cpp b/engines/lastexpress/entities/tatiana.cpp
index 3b9cc6d322..432def6253 100644
--- a/engines/lastexpress/entities/tatiana.cpp
+++ b/engines/lastexpress/entities/tatiana.cpp
@@ -249,7 +249,8 @@ IMPLEMENT_FUNCTION_I(16, Tatiana, function16, uint32)
}
if (params->param2) {
- UPDATE_PARAM(params->param5, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param5, getState()->timeTicks, 75))
+ break;
params->param2 = 0;
params->param3 = 1;
@@ -340,7 +341,7 @@ IMPLEMENT_FUNCTION(17, Tatiana, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Tatiana, setup_chapter1Handler));
break;
case kActionDefault:
@@ -373,10 +374,10 @@ IMPLEMENT_FUNCTION(18, Tatiana, function18)
}
if (!params->param1) {
- UPDATE_PARAM_PROC(params->param3, getState()->time, 4500)
+ if (Entity::updateParameter(params->param3, getState()->time, 4500)) {
getEntities()->drawSequenceRight(kEntityTatiana, "806DS");
params->param1 = 1;
- UPDATE_PARAM_PROC_END
+ }
}
}
@@ -423,27 +424,29 @@ IMPLEMENT_FUNCTION(19, Tatiana, chapter1Handler)
if (getSoundQueue()->isBuffered(kEntityTatiana) || !params->param4 || params->param3 == 2 || getSoundQueue()->isBuffered("TAT1066"))
goto label_tatiana_chapter1_2;
- UPDATE_PARAM_PROC(params->param5, getState()->timeTicks, 450)
+ if (Entity::updateParameter(params->param5, getState()->timeTicks, 450)) {
getSound()->playSound(kEntityTatiana, params->param3 ? "TAT1069B" : "TAT1069A");
getProgress().field_64 = 1;
params->param3++;
params->param5 = 0;
- UPDATE_PARAM_PROC_END
+ }
if (getEntities()->isPlayerPosition(kCarRestaurant, 71)) {
- UPDATE_PARAM_PROC(params->param6, getState()->timeTicks, 75)
+ if (Entity::updateParameter(params->param6, getState()->timeTicks, 75)) {
getSound()->playSound(kEntityTatiana, params->param3 ? "TAT1069B" : "TAT1069A");
getProgress().field_64 = 1;
params->param3++;
params->param6 = 0;
- UPDATE_PARAM_PROC_END
+ }
}
label_tatiana_chapter1_2:
- TIME_CHECK_SAVEPOINT(kTime1084500, params->param7, kEntityTatiana, kEntityPascale, kAction257489762);
+ Entity::timeCheckSavepoint(kTime1084500, params->param7, kEntityTatiana, kEntityPascale, kAction257489762);
if (params->param1) {
- UPDATE_PARAM(params->param8, getState()->timeTicks, 90);
+ if (!Entity::updateParameter(params->param8, getState()->timeTicks, 90))
+ break;
+
getScenes()->loadSceneFromPosition(kCarRestaurant, 65);
} else {
params->param8 = 0;
@@ -612,7 +615,7 @@ IMPLEMENT_FUNCTION(22, Tatiana, function22)
if (params->param1 == kTimeInvalid || getState()->time <= kTime1179000)
goto label_update;
- UPDATE_PARAM_PROC_TIME(kTime1233000, ((!getEvent(kEventTatianaAskMatchSpeakRussian) && !getEvent(kEventTatianaAskMatch)) || getEntities()->isInGreenCarEntrance(kEntityPlayer)), params->param1, 0)
+ if (Entity::updateParameterTime(kTime1233000, ((!getEvent(kEventTatianaAskMatchSpeakRussian) && !getEvent(kEventTatianaAskMatch)) || getEntities()->isInGreenCarEntrance(kEntityPlayer)), params->param1, 0)) {
label_update:
if (!getEvent(kEventTatianaAskMatchSpeakRussian)
&& !getEvent(kEventTatianaAskMatch)
@@ -621,7 +624,7 @@ label_update:
getObjects()->update(kObject25, kEntityTatiana, kObjectLocation1, kCursorNormal, kCursorForward);
getObjects()->update(kObjectTrainTimeTable, kEntityTatiana, kObjectLocation1, kCursorNormal, kCursorForward);
}
- UPDATE_PARAM_PROC_END
+ }
params->param1 = kTimeInvalid;
@@ -1020,7 +1023,7 @@ IMPLEMENT_FUNCTION(32, Tatiana, chapter3Handler)
}
if (parameters->param4 && parameters->param5) {
- UPDATE_PARAM_CHECK(parameters->param4, getState()->time, 6300)
+ if (Entity::updateParameterCheck(parameters->param4, getState()->time, 6300)) {
if (getEntities()->isSomebodyInsideRestaurantOrSalon()) {
getData()->location = kLocationOutsideCompartment;
@@ -1281,18 +1284,19 @@ IMPLEMENT_FUNCTION(37, Tatiana, function37)
params->param3 = (uint)getState()->time + 900;
if (params->param4 != kTimeInvalid && params->param3 < getState()->time) {
- UPDATE_PARAM_PROC_TIME(kTime2227500, !getEntities()->isPlayerInCar(kCarRedSleeping), params->param4, 450)
+ if (Entity::updateParameterTime(kTime2227500, !getEntities()->isPlayerInCar(kCarRedSleeping), params->param4, 450)) {
getProgress().field_5C = 1;
if (getEntities()->isInsideCompartment(kEntityAnna, kCarRedSleeping, kPosition_4070)) {
setup_function38();
break;
}
- UPDATE_PARAM_PROC_END
+ }
}
}
if (params->param1) {
- UPDATE_PARAM(params->param5, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param5, getState()->timeTicks, 75))
+ break;
getObjects()->update(kObjectCompartmentB, kEntityTatiana, kObjectLocation1, kCursorNormal, kCursorNormal);
getObjects()->update(kObject49, kEntityTatiana, kObjectLocation1, kCursorNormal, kCursorNormal);
@@ -1401,7 +1405,8 @@ IMPLEMENT_FUNCTION(38, Tatiana, function38)
break;
case kActionNone:
- UPDATE_PARAM(params->param1, getState()->time, 450);
+ if (!Entity::updateParameter(params->param1, getState()->time, 450))
+ break;
getEntities()->exitCompartment(kEntityTatiana, kObjectCompartmentF, true);
@@ -1950,7 +1955,8 @@ IMPLEMENT_FUNCTION(48, Tatiana, function48)
if (!params->param1 || getSoundQueue()->isBuffered(kEntityTatiana))
goto label_end;
- UPDATE_PARAM_GOTO(params->param2, getState()->timeTicks, 5 * (3 * rnd(5) + 30), label_end);
+ if (!Entity::updateParameter(params->param2, getState()->timeTicks, 5 * (3 * rnd(5) + 30)))
+ goto label_end;
getSound()->playSound(kEntityTatiana, "LIB012", kFlagDefault);
params->param2 = 0;
@@ -2197,7 +2203,8 @@ IMPLEMENT_FUNCTION(54, Tatiana, function54)
}
if (params->param1 > 3) {
- UPDATE_PARAM(params->param3, getState()->timeTicks, 225);
+ if (!Entity::updateParameter(params->param3, getState()->timeTicks, 225))
+ break;
params->param1 = 0;
params->param3 = 0;
diff --git a/engines/lastexpress/entities/tatiana.h b/engines/lastexpress/entities/tatiana.h
index c457d49b1e..8ec69db5e9 100644
--- a/engines/lastexpress/entities/tatiana.h
+++ b/engines/lastexpress/entities/tatiana.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_TATIANA_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/train.cpp b/engines/lastexpress/entities/train.cpp
index 0830dffbef..e3f530ef25 100644
--- a/engines/lastexpress/entities/train.cpp
+++ b/engines/lastexpress/entities/train.cpp
@@ -267,18 +267,20 @@ IMPLEMENT_FUNCTION(8, Train, process)
if ((getEntities()->isPlayerInCar(kCarGreenSleeping) || getEntities()->isPlayerInCar(kCarRedSleeping))
&& params->param4 && !params->param5) {
- params->param4 -= 1;
+ params->param4 -= 1;
- if (!params->param4 && getProgress().jacket == kJacketGreen) {
+ if (!params->param4 && getProgress().jacket == kJacketGreen) {
- getAction()->playAnimation(isNight() ? kEventCathSmokeNight : kEventCathSmokeDay);
- params->param5 = 1;
- getScenes()->processScene();
- }
+ getAction()->playAnimation(isNight() ? kEventCathSmokeNight : kEventCathSmokeDay);
+ params->param5 = 1;
+ getScenes()->processScene();
+ }
}
if (params->param6) {
- UPDATE_PARAM_GOTO(params1->param7, getState()->time, 900, label_process);
+ if (!Entity::updateParameter(params1->param7, getState()->time, 900))
+ goto label_process;
+
getScenes()->loadSceneFromPosition(kCarRestaurant, 58);
}
diff --git a/engines/lastexpress/entities/train.h b/engines/lastexpress/entities/train.h
index ea9e1d7a07..4b8bc10c1a 100644
--- a/engines/lastexpress/entities/train.h
+++ b/engines/lastexpress/entities/train.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_TRAIN_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/vassili.cpp b/engines/lastexpress/entities/vassili.cpp
index 5079fdb252..4695f8831f 100644
--- a/engines/lastexpress/entities/vassili.cpp
+++ b/engines/lastexpress/entities/vassili.cpp
@@ -83,7 +83,7 @@ IMPLEMENT_FUNCTION(4, Vassili, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Vassili, setup_chapter1Handler));
break;
case kActionDefault:
@@ -144,7 +144,8 @@ IMPLEMENT_FUNCTION(6, Vassili, function6)
case kActionNone:
if (getEntities()->isInsideCompartment(kEntityPlayer, kCarRedSleeping, kPosition_8200)) {
- UPDATE_PARAM_GOTO(params->param3, getState()->timeTicks, params->param1, label_function7);
+ if (!Entity::updateParameter(params->param3, getState()->timeTicks, params->param1))
+ goto label_function7;
setCallback(1);
setup_draw("303B");
@@ -400,7 +401,8 @@ IMPLEMENT_FUNCTION(13, Vassili, sleeping)
case kActionNone:
if (getEntities()->isInsideCompartment(kEntityPlayer, kCarRedSleeping, kPosition_8200)) {
- UPDATE_PARAM(params->param3, getState()->timeTicks, params->param1);
+ if (!Entity::updateParameter(params->param3, getState()->timeTicks, params->param1))
+ break;
setCallback(1);
setup_draw("303B");
@@ -459,7 +461,8 @@ IMPLEMENT_FUNCTION(15, Vassili, stealEgg)
case kActionNone:
if (getEntities()->isInsideCompartment(kEntityPlayer, kCarRedSleeping, kPosition_8200)) {
- UPDATE_PARAM(params->param3, getState()->timeTicks, params->param1);
+ if (!Entity::updateParameter(params->param3, getState()->timeTicks, params->param1))
+ break;
setCallback(1);
setup_draw("303B");
@@ -543,7 +546,8 @@ IMPLEMENT_FUNCTION(17, Vassili, chapter4Handler)
case kActionNone:
if (getEntities()->isInsideCompartment(kEntityPlayer, kCarRedSleeping, kPosition_8200)) {
- UPDATE_PARAM(params->param3, getState()->timeTicks, params->param1);
+ if (!Entity::updateParameter(params->param3, getState()->timeTicks, params->param1))
+ break;
setCallback(1);
setup_draw("303B");
diff --git a/engines/lastexpress/entities/vassili.h b/engines/lastexpress/entities/vassili.h
index 843a065174..d006770f7b 100644
--- a/engines/lastexpress/entities/vassili.h
+++ b/engines/lastexpress/entities/vassili.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_VASSILI_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/verges.cpp b/engines/lastexpress/entities/verges.cpp
index bdd758a5be..d9ddb0a4d1 100644
--- a/engines/lastexpress/entities/verges.cpp
+++ b/engines/lastexpress/entities/verges.cpp
@@ -46,40 +46,40 @@ Verges::Verges(LastExpressEngine *engine) : Entity(engine, kEntityVerges) {
ADD_CALLBACK_FUNCTION(Verges, callbackActionRestaurantOrSalon);
ADD_CALLBACK_FUNCTION(Verges, savegame);
ADD_CALLBACK_FUNCTION(Verges, updateEntity);
- ADD_CALLBACK_FUNCTION(Verges, function9);
- ADD_CALLBACK_FUNCTION(Verges, function10);
+ ADD_CALLBACK_FUNCTION(Verges, walkBetweenCars);
+ ADD_CALLBACK_FUNCTION(Verges, makeAnnouncement);
ADD_CALLBACK_FUNCTION(Verges, function11);
ADD_CALLBACK_FUNCTION(Verges, function12);
- ADD_CALLBACK_FUNCTION(Verges, function13);
+ ADD_CALLBACK_FUNCTION(Verges, baggageCar);
ADD_CALLBACK_FUNCTION(Verges, updateFromTime);
- ADD_CALLBACK_FUNCTION(Verges, function15);
- ADD_CALLBACK_FUNCTION(Verges, function16);
- ADD_CALLBACK_FUNCTION(Verges, function17);
+ ADD_CALLBACK_FUNCTION(Verges, dialog);
+ ADD_CALLBACK_FUNCTION(Verges, dialog2);
+ ADD_CALLBACK_FUNCTION(Verges, talkAboutPassengerList);
ADD_CALLBACK_FUNCTION(Verges, chapter1);
ADD_CALLBACK_FUNCTION(Verges, talkHarem);
ADD_CALLBACK_FUNCTION(Verges, talkPassengerList);
ADD_CALLBACK_FUNCTION(Verges, talkGendarmes);
- ADD_CALLBACK_FUNCTION(Verges, function22);
+ ADD_CALLBACK_FUNCTION(Verges, askMertensToRelayAugustInvitation);
ADD_CALLBACK_FUNCTION(Verges, function23);
ADD_CALLBACK_FUNCTION(Verges, policeGettingOffTrain);
- ADD_CALLBACK_FUNCTION(Verges, function25);
+ ADD_CALLBACK_FUNCTION(Verges, policeSearch);
ADD_CALLBACK_FUNCTION(Verges, chapter1Handler);
ADD_CALLBACK_FUNCTION(Verges, chapter2);
ADD_CALLBACK_FUNCTION(Verges, chapter2Handler);
ADD_CALLBACK_FUNCTION(Verges, chapter3);
ADD_CALLBACK_FUNCTION(Verges, function30);
- ADD_CALLBACK_FUNCTION(Verges, function31);
+ ADD_CALLBACK_FUNCTION(Verges, talkAboutMax);
ADD_CALLBACK_FUNCTION(Verges, function32);
ADD_CALLBACK_FUNCTION(Verges, function33);
ADD_CALLBACK_FUNCTION(Verges, function34);
- ADD_CALLBACK_FUNCTION(Verges, function35);
+ ADD_CALLBACK_FUNCTION(Verges, organizeConcertInvitations);
ADD_CALLBACK_FUNCTION(Verges, chapter4);
ADD_CALLBACK_FUNCTION(Verges, chapter4Handler);
- ADD_CALLBACK_FUNCTION(Verges, function38);
+ ADD_CALLBACK_FUNCTION(Verges, resetState);
ADD_CALLBACK_FUNCTION(Verges, chapter5);
ADD_CALLBACK_FUNCTION(Verges, chapter5Handler);
- ADD_CALLBACK_FUNCTION(Verges, function41);
- ADD_CALLBACK_FUNCTION(Verges, function42);
+ ADD_CALLBACK_FUNCTION(Verges, askPassengersToStayInCompartments);
+ ADD_CALLBACK_FUNCTION(Verges, end);
}
//////////////////////////////////////////////////////////////////////////
@@ -149,7 +149,7 @@ IMPLEMENT_FUNCTION_II(8, Verges, updateEntity, CarIndex, EntityPosition)
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_S(9, Verges, function9)
+IMPLEMENT_FUNCTION_S(9, Verges, walkBetweenCars)
switch (savepoint.action) {
default:
break;
@@ -201,7 +201,7 @@ switch (savepoint.action) {
case 3:
setCallback(4);
- setup_function10(kCarGreenSleeping, kPosition_540, (char *)&params->seq1);
+ setup_makeAnnouncement(kCarGreenSleeping, kPosition_540, (char *)&params->seq1);
break;
case 4:
@@ -225,7 +225,7 @@ switch (savepoint.action) {
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_IIS(10, Verges, function10, CarIndex, EntityPosition)
+IMPLEMENT_FUNCTION_IIS(10, Verges, makeAnnouncement, CarIndex, EntityPosition)
switch (savepoint.action) {
default:
break;
@@ -244,7 +244,8 @@ IMPLEMENT_FUNCTION_IIS(10, Verges, function10, CarIndex, EntityPosition)
}
if (params->param6) {
- UPDATE_PARAM(params->param8, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(params->param8, getState()->timeTicks, 75))
+ break;
getSound()->playSound(kEntityVerges, (char *)&params->seq);
@@ -403,7 +404,7 @@ IMPLEMENT_FUNCTION(12, Verges, function12)
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_I(13, Verges, function13, bool)
+IMPLEMENT_FUNCTION_I(13, Verges, baggageCar, bool)
switch (savepoint.action) {
default:
break;
@@ -448,7 +449,7 @@ IMPLEMENT_FUNCTION_I(14, Verges, updateFromTime, uint32)
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_IS(15, Verges, function15, EntityIndex)
+IMPLEMENT_FUNCTION_IS(15, Verges, dialog, EntityIndex)
switch (savepoint.action) {
default:
break;
@@ -485,7 +486,7 @@ IMPLEMENT_FUNCTION_IS(15, Verges, function15, EntityIndex)
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_ISS(16, Verges, function16, EntityIndex)
+IMPLEMENT_FUNCTION_ISS(16, Verges, dialog2, EntityIndex)
switch (savepoint.action) {
default:
break;
@@ -525,7 +526,7 @@ IMPLEMENT_FUNCTION_ISS(16, Verges, function16, EntityIndex)
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(17, Verges, function17)
+IMPLEMENT_FUNCTION(17, Verges, talkAboutPassengerList)
switch (savepoint.action) {
default:
break;
@@ -547,7 +548,7 @@ IMPLEMENT_FUNCTION(17, Verges, function17)
case 2:
setCallback(3);
- setup_function15(kEntityMertens, "TRA1291");
+ setup_dialog(kEntityMertens, "TRA1291");
break;
case 3:
@@ -571,7 +572,7 @@ IMPLEMENT_FUNCTION(18, Verges, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Verges, setup_chapter1Handler));
break;
case kActionDefault:
@@ -610,7 +611,7 @@ IMPLEMENT_FUNCTION(21, Verges, talkGendarmes)
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(22, Verges, function22)
+IMPLEMENT_FUNCTION(22, Verges, askMertensToRelayAugustInvitation)
switch (savepoint.action) {
default:
break;
@@ -633,10 +634,10 @@ IMPLEMENT_FUNCTION(22, Verges, function22)
case 2:
if (getEvent(kEventMertensAskTylerCompartment) || getEvent(kEventMertensAskTylerCompartmentD) || getEvent(kEventMertensAugustWaiting)) {
setCallback(3);
- setup_function16(kEntityMertens, "TRA1200", "TRA1201");
+ setup_dialog2(kEntityMertens, "TRA1200", "TRA1201");
} else {
setCallback(4);
- setup_function16(kEntityMertens, "TRA1200A", "TRA1201");
+ setup_dialog2(kEntityMertens, "TRA1200A", "TRA1201");
}
break;
@@ -713,7 +714,7 @@ IMPLEMENT_FUNCTION(24, Verges, policeGettingOffTrain)
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(25, Verges, function25)
+IMPLEMENT_FUNCTION(25, Verges, policeSearch)
switch (savepoint.action) {
default:
break;
@@ -773,10 +774,10 @@ IMPLEMENT_FUNCTION(25, Verges, function25)
if (getData()->car == kCarRedSleeping) {
setCallback(6);
- setup_function10(kCarGreenSleeping, kPosition_540, "TRA1005");
+ setup_makeAnnouncement(kCarGreenSleeping, kPosition_540, "TRA1005");
} else {
setCallback(7);
- setup_function10(kCarRedSleeping, kPosition_9460, "TRA1006");
+ setup_makeAnnouncement(kCarRedSleeping, kPosition_9460, "TRA1006");
}
break;
}
@@ -804,7 +805,7 @@ IMPLEMENT_FUNCTION(25, Verges, function25)
getSavePoints()->push(kEntityVerges, kEntityCoudert, kAction168254872);
setCallback(4);
- setup_function10(kCarRedSleeping, kPosition_9460, "TRA1006");
+ setup_makeAnnouncement(kCarRedSleeping, kPosition_9460, "TRA1006");
break;
case 4:
@@ -837,7 +838,7 @@ IMPLEMENT_FUNCTION(25, Verges, function25)
getSavePoints()->push(kEntityVerges, kEntityCoudert, kAction168254872);
setCallback(10);
- setup_function10(kCarGreenSleeping, kPosition_540, "TRA1006");
+ setup_makeAnnouncement(kCarGreenSleeping, kPosition_540, "TRA1006");
break;
case 10:
@@ -891,14 +892,14 @@ IMPLEMENT_FUNCTION(26, Verges, chapter1Handler)
label_callback1:
if (getEntities()->isInBaggageCarEntrance(kEntityPlayer)) {
setCallback(2);
- setup_function13(false);
+ setup_baggageCar(false);
break;
}
label_callback2:
if (ENTITY_PARAM(0, 7)) {
setCallback(3);
- setup_function25();
+ setup_policeSearch();
break;
}
@@ -906,10 +907,12 @@ label_callback3:
if (params->param6)
goto label_callback12;
- TIME_CHECK_CALLBACK_1(kTimeChapter1, params->param7, 4, setup_function9, "TRA1001");
+ if (Entity::timeCheckCallback(kTimeChapter1, params->param7, 4, "TRA1001", WRAP_SETUP_FUNCTION_S(Verges, setup_walkBetweenCars)))
+ break;
label_callback4:
- TIME_CHECK_CALLBACK(kTime1089000, params->param8, 5, setup_function12);
+ if (Entity::timeCheckCallback(kTime1089000, params->param8, 5, WRAP_SETUP_FUNCTION(Verges, setup_function12)))
+ break;
params->param8 = 1;
@@ -920,16 +923,20 @@ label_callback4:
}
label_callback8:
- TIME_CHECK_CALLBACK_1(kTime1107000, CURRENT_PARAM(1, 1), 9, setup_function9, "TRA1001A");
+ if (Entity::timeCheckCallback(kTime1107000, CURRENT_PARAM(1, 1), 9, "TRA1001A", WRAP_SETUP_FUNCTION_S(Verges, setup_walkBetweenCars)))
+ break;
label_callback9:
- TIME_CHECK_CALLBACK_1(kTime1134000, CURRENT_PARAM(1, 2), 10, setup_function9, "TRA1002");
+ if (Entity::timeCheckCallback(kTime1134000, CURRENT_PARAM(1, 2), 10, "TRA1002", WRAP_SETUP_FUNCTION_S(Verges, setup_walkBetweenCars)))
+ break;
label_callback10:
- TIME_CHECK_CALLBACK_1(kTime1165500, CURRENT_PARAM(1, 3), 11, setup_function9, "TRA1003");
+ if (Entity::timeCheckCallback(kTime1165500, CURRENT_PARAM(1, 3), 11, "TRA1003", WRAP_SETUP_FUNCTION_S(Verges, setup_walkBetweenCars)))
+ break;
label_callback11:
- TIME_CHECK_CALLBACK_1(kTime1225800, CURRENT_PARAM(1, 4), 12, setup_function9, "TRA1004");
+ if (Entity::timeCheckCallback(kTime1225800, CURRENT_PARAM(1, 4), 12, "TRA1004", WRAP_SETUP_FUNCTION_S(Verges, setup_walkBetweenCars)))
+ break;
label_callback12:
if (ENTITY_PARAM(0, 5) && !params->param2) {
@@ -948,7 +955,7 @@ label_callback13:
label_callback14:
if (ENTITY_PARAM(0, 3) && !params->param4 && (getState()->time < kTime1134000 || getState()->time > kTime1156500)) {
setCallback(15);
- setup_function17();
+ setup_talkAboutPassengerList();
break;
}
@@ -956,14 +963,14 @@ label_callback15:
if (ENTITY_PARAM(0, 1) && !params->param5) {
if (getState()->time < kTime1134000 || getState()->time > kTime1156500) {
setCallback(16);
- setup_function22();
+ setup_askMertensToRelayAugustInvitation();
}
}
break;
case kActionOpenDoor:
setCallback(17);
- setup_function13(savepoint.param.intValue < 106 ? true : false);
+ setup_baggageCar(savepoint.param.intValue < 106 ? true : false);
break;
case kActionDefault:
@@ -999,7 +1006,7 @@ label_callback15:
case 6:
setCallback(7);
- setup_function15(kEntityMertens, "TRA1202");
+ setup_dialog(kEntityMertens, "TRA1202");
break;
case 7:
@@ -1077,11 +1084,12 @@ IMPLEMENT_FUNCTION(28, Verges, chapter2Handler)
case kActionNone:
if (getEntities()->isInBaggageCarEntrance(kEntityPlayer)) {
setCallback(1);
- setup_function13(false);
+ setup_baggageCar(false);
}
label_callback_1:
- TIME_CHECK_CALLBACK_1(kTime1818900, params->param1, 2, setup_function9, "Tra2177");
+ if (Entity::timeCheckCallback(kTime1818900, params->param1, 2, "Tra2177", WRAP_SETUP_FUNCTION_S(Verges, setup_walkBetweenCars)))
+ break;
label_callback_2:
if (params->param2 == kTimeInvalid || !getState()->time)
@@ -1109,7 +1117,7 @@ label_callback_6:
if (ENTITY_PARAM(0, 3)) {
setCallback(7);
- setup_function17();
+ setup_talkAboutPassengerList();
}
break;
@@ -1122,7 +1130,7 @@ label_callback_6:
case kActionOpenDoor:
setCallback(8);
- setup_function13(savepoint.param.intValue < 106);
+ setup_baggageCar(savepoint.param.intValue < 106);
break;
case kActionDefault:
@@ -1147,7 +1155,7 @@ label_callback_6:
case 4:
setCallback(5);
- setup_function15(kEntityCoudert, "TRA2100");
+ setup_dialog(kEntityCoudert, "TRA2100");
break;
case 5:
@@ -1169,7 +1177,7 @@ IMPLEMENT_FUNCTION(29, Verges, chapter3)
break;
case kActionNone:
- setup_function23();
+ setup_function33();
break;
case kActionDefault:
@@ -1213,7 +1221,7 @@ IMPLEMENT_FUNCTION_S(30, Verges, function30)
case 2:
setCallback(3);
- setup_function15(kEntityCoudert, (char *)&params->seq1);
+ setup_dialog(kEntityCoudert, (char *)&params->seq1);
break;
case 3:
@@ -1230,7 +1238,7 @@ IMPLEMENT_FUNCTION_S(30, Verges, function30)
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(31, Verges, function31)
+IMPLEMENT_FUNCTION(31, Verges, talkAboutMax)
switch (savepoint.action) {
default:
break;
@@ -1252,7 +1260,7 @@ IMPLEMENT_FUNCTION(31, Verges, function31)
case 2:
setCallback(3);
- setup_function15(kEntityCoudert, "TRA3015");
+ setup_dialog(kEntityCoudert, "TRA3015");
break;
case 3:
@@ -1278,7 +1286,12 @@ IMPLEMENT_FUNCTION(32, Verges, function32)
break;
case kActionNone:
- TIME_CHECK_CALLBACK_3(kTime2263500, params->param1, 5, setup_function10, kCarRedSleeping, kPosition_9460, "TRA3006");
+ if (getState()->time > kTime2263500 && !params->param1) {
+ params->param1 = 1;
+ setCallback(5);
+ setup_makeAnnouncement(kCarRedSleeping, kPosition_9460, "TRA3006");
+ break;
+ }
break;
case kActionDefault:
@@ -1328,7 +1341,7 @@ IMPLEMENT_FUNCTION(32, Verges, function32)
case 3:
setCallback(4);
- setup_function10(kCarGreenSleeping, kPosition_540, "TRA3004");
+ setup_makeAnnouncement(kCarGreenSleeping, kPosition_540, "TRA3004");
break;
case 4:
@@ -1399,7 +1412,7 @@ IMPLEMENT_FUNCTION(33, Verges, function33)
getSavePoints()->push(kEntityVerges, kEntityAbbot, kAction192054567);
setCallback(6);
- setup_function9("Tra3010");
+ setup_walkBetweenCars("Tra3010");
break;
case 6:
@@ -1419,49 +1432,55 @@ IMPLEMENT_FUNCTION(34, Verges, function34)
case kActionNone:
if (getEntities()->isInBaggageCarEntrance(kEntityPlayer)) {
setCallback(1);
- setup_function13(false);
+ setup_baggageCar(false);
break;
}
label_callback_1:
if (ENTITY_PARAM(0, 4)) {
setCallback(2);
- setup_function31();
+ setup_talkAboutMax();
break;
}
label_callback_2:
if (ENTITY_PARAM(0, 3)) {
setCallback(3);
- setup_function17();
+ setup_talkAboutPassengerList();
break;
}
label_callback_3:
- TIME_CHECK_CALLBACK_1(kTime1971000, params->param1, 4, setup_function9, "Tra3001");
+ if (Entity::timeCheckCallback(kTime1971000, params->param1, 4, "Tra3001", WRAP_SETUP_FUNCTION_S(Verges, setup_walkBetweenCars)))
+ break;
label_callback_4:
- TIME_CHECK_CALLBACK_1(kTime1998000, params->param2, 5, setup_function9, "Tra3010a");
+ if (Entity::timeCheckCallback(kTime1998000, params->param2, 5, "Tra3010a", WRAP_SETUP_FUNCTION_S(Verges, setup_walkBetweenCars)))
+ break;
label_callback_5:
- TIME_CHECK_CALLBACK(kTime2016000, params->param3, 6, setup_function35);
+ if (Entity::timeCheckCallback(kTime2016000, params->param3, 6, WRAP_SETUP_FUNCTION(Verges, setup_organizeConcertInvitations)))
+ break;
label_callback_6:
- TIME_CHECK_CALLBACK_1(kTime2070000, params->param4, 7, setup_function9, "Tra3002");
+ if (Entity::timeCheckCallback(kTime2070000, params->param4, 7, "Tra3002", WRAP_SETUP_FUNCTION_S(Verges, setup_walkBetweenCars)))
+ break;
label_callback_7:
- TIME_CHECK_CALLBACK_1(kTime2142000, params->param5, 8, setup_function9, "Tra3003");
+ if (Entity::timeCheckCallback(kTime2142000, params->param5, 8, "Tra3003", WRAP_SETUP_FUNCTION_S(Verges, setup_walkBetweenCars)))
+ break;
label_callback_8:
- TIME_CHECK_CALLBACK_1(kTime2173500, params->param6, 9, setup_function30, "Tra3012");
+ if (Entity::timeCheckCallback(kTime2173500, params->param6, 9, "Tra3012", WRAP_SETUP_FUNCTION_S(Verges, setup_function30)))
+ break;
label_callback_9:
- TIME_CHECK_CALLBACK(kTime2218500, params->param7, 10, setup_function32);
+ Entity::timeCheckCallback(kTime2218500, params->param7, 10, WRAP_SETUP_FUNCTION(Verges, setup_function32));
break;
case kActionOpenDoor:
setCallback(11);
- setup_function13(savepoint.param.intValue < 106);
+ setup_baggageCar(savepoint.param.intValue < 106);
break;
case kActionCallback:
@@ -1501,7 +1520,7 @@ label_callback_9:
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(35, Verges, function35)
+IMPLEMENT_FUNCTION(35, Verges, organizeConcertInvitations)
switch (savepoint.action) {
default:
break;
@@ -1523,7 +1542,7 @@ IMPLEMENT_FUNCTION(35, Verges, function35)
case 2:
setCallback(3);
- setup_function15(kEntityMertens, "Tra3011A");
+ setup_dialog(kEntityMertens, "Tra3011A");
break;
case 3:
@@ -1535,7 +1554,7 @@ IMPLEMENT_FUNCTION(35, Verges, function35)
case 4:
setCallback(5);
- setup_function15(kEntityMertens, "Tra3011");
+ setup_dialog(kEntityMertens, "Tra3011");
break;
case 5:
@@ -1590,7 +1609,7 @@ IMPLEMENT_FUNCTION(37, Verges, chapter4Handler)
case kActionNone:
if (getEntities()->isInBaggageCarEntrance(kEntityPlayer)) {
setCallback(1);
- setup_function13(false);
+ setup_baggageCar(false);
break;
}
@@ -1598,37 +1617,42 @@ label_callback_1:
if (ENTITY_PARAM(0, 6)) {
if (ENTITY_PARAM(0, 3)) {
setCallback(2);
- setup_function17();
+ setup_talkAboutPassengerList();
break;
}
label_callback_2:
- TIME_CHECK_CALLBACK_1(kTime2349000, params->param1, 3, setup_function9, "Tra1001");
+ if (Entity::timeCheckCallback(kTime2349000, params->param1, 3, "Tra1001", WRAP_SETUP_FUNCTION_S(Verges, setup_walkBetweenCars)))
+ break;
label_callback_3:
- TIME_CHECK_CALLBACK_1(kTime2378700, params->param2, 4, setup_function9, "Tra4001");
+ if (Entity::timeCheckCallback(kTime2378700, params->param2, 4, "Tra4001", WRAP_SETUP_FUNCTION_S(Verges, setup_walkBetweenCars)))
+ break;
label_callback_4:
- TIME_CHECK_CALLBACK_1(kTime2403000, params->param3, 5, setup_function9, "Tra1001A");
+ if (Entity::timeCheckCallback(kTime2403000, params->param3, 5, "Tra1001A", WRAP_SETUP_FUNCTION_S(Verges, setup_walkBetweenCars)))
+ break;
label_callback_5:
- TIME_CHECK_CALLBACK_1(kTime2414700, params->param4, 6, setup_function9, "Tra4002");
+ if (Entity::timeCheckCallback(kTime2414700, params->param4, 6, "Tra4002", WRAP_SETUP_FUNCTION_S(Verges, setup_walkBetweenCars)))
+ break;
label_callback_6:
- TIME_CHECK_CALLBACK_1(kTime2484000, params->param5, 7, setup_function9, "Tra4003");
+ if (Entity::timeCheckCallback(kTime2484000, params->param5, 7, "Tra4003", WRAP_SETUP_FUNCTION_S(Verges, setup_walkBetweenCars)))
+ break;
label_callback_7:
- TIME_CHECK_CALLBACK_1(kTime2511000, params->param6, 8, setup_function9, "Tra4004");
+ if (Entity::timeCheckCallback(kTime2511000, params->param6, 8, "Tra4004", WRAP_SETUP_FUNCTION_S(Verges, setup_walkBetweenCars)))
+ break;
}
label_callback_8:
- TIME_CHECK_CALLBACK_1(kTime2538000, params->param7, 9, setup_function9, "Tra4005");
-
+ Entity::timeCheckCallback(kTime2538000, params->param7, 9, "Tra4005", WRAP_SETUP_FUNCTION_S(Verges, setup_walkBetweenCars));
break;
case kActionOpenDoor:
setCallback(10);
- setup_function13(savepoint.param.intValue < 106);
+ setup_baggageCar(savepoint.param.intValue < 106);
break;
case kActionDefault:
@@ -1673,7 +1697,7 @@ label_callback_8:
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(38, Verges, function38)
+IMPLEMENT_FUNCTION(38, Verges, resetState)
switch (savepoint.action) {
default:
break;
@@ -1779,14 +1803,14 @@ IMPLEMENT_FUNCTION(40, Verges, chapter5Handler)
getAction()->playAnimation(kEventCathFreePassengers);
getSavePoints()->pushAll(kEntityVerges, kActionProceedChapter5);
getScenes()->loadSceneFromPosition(kCarRedSleeping, 40);
- setup_function41();
+ setup_askPassengersToStayInCompartments();
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(41, Verges, function41)
+IMPLEMENT_FUNCTION(41, Verges, askPassengersToStayInCompartments)
switch (savepoint.action) {
default:
break;
@@ -1798,7 +1822,7 @@ IMPLEMENT_FUNCTION(41, Verges, function41)
getData()->location = kLocationInsideCompartment;
setCallback(1);
- setup_function10(kCarRedSleeping, kPosition_2000, "Tra5001");
+ setup_makeAnnouncement(kCarRedSleeping, kPosition_2000, "Tra5001");
break;
case kActionCallback:
@@ -1828,7 +1852,7 @@ IMPLEMENT_FUNCTION(41, Verges, function41)
break;
case 4:
- setup_function42();
+ setup_end();
break;
}
break;
@@ -1836,7 +1860,7 @@ IMPLEMENT_FUNCTION(41, Verges, function41)
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION(42, Verges, function42)
+IMPLEMENT_FUNCTION(42, Verges, end)
if (savepoint.action == kActionDefault)
getEntities()->clearSequences(kEntityVerges);
IMPLEMENT_FUNCTION_END
@@ -1867,7 +1891,7 @@ void Verges::talk(const SavePoint &savepoint, const char *sound1, const char *so
case 2:
setCallback(3);
- setup_function15(kEntityCoudert, sound1);
+ setup_dialog(kEntityCoudert, sound1);
break;
case 3:
@@ -1877,7 +1901,7 @@ void Verges::talk(const SavePoint &savepoint, const char *sound1, const char *so
case 4:
setCallback(5);
- setup_function15(kEntityMertens, sound2);
+ setup_dialog(kEntityMertens, sound2);
break;
case 5:
diff --git a/engines/lastexpress/entities/verges.h b/engines/lastexpress/entities/verges.h
index 17a3c8ac40..93cc190d1e 100644
--- a/engines/lastexpress/entities/verges.h
+++ b/engines/lastexpress/entities/verges.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_VERGES_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
@@ -88,11 +87,11 @@ public:
*/
DECLARE_FUNCTION_2(updateEntity, CarIndex car, EntityPosition entityPosition)
- DECLARE_FUNCTION_1(function9, const char *soundName)
- DECLARE_FUNCTION_3(function10, CarIndex car, EntityPosition entityPosition, const char *soundName)
+ DECLARE_FUNCTION_1(walkBetweenCars, const char *soundName)
+ DECLARE_FUNCTION_3(makeAnnouncement, CarIndex car, EntityPosition entityPosition, const char *soundName)
DECLARE_FUNCTION(function11)
DECLARE_FUNCTION(function12)
- DECLARE_FUNCTION_1(function13, bool)
+ DECLARE_FUNCTION_1(baggageCar, bool)
/**
* Updates parameter 2 using time value
@@ -101,9 +100,9 @@ public:
*/
DECLARE_FUNCTION_1(updateFromTime, uint32 time)
- DECLARE_FUNCTION_2(function15, EntityIndex entity, const char *soundName)
- DECLARE_FUNCTION_3(function16, EntityIndex entityIndex, const char *soundName1, const char *soundName2)
- DECLARE_FUNCTION(function17)
+ DECLARE_FUNCTION_2(dialog, EntityIndex entity, const char *soundName)
+ DECLARE_FUNCTION_3(dialog2, EntityIndex entityIndex, const char *soundName1, const char *soundName2)
+ DECLARE_FUNCTION(talkAboutPassengerList)
/**
* Setup Chapter 1
@@ -113,10 +112,10 @@ public:
DECLARE_FUNCTION_NOSETUP(talkHarem)
DECLARE_FUNCTION(talkPassengerList)
DECLARE_FUNCTION(talkGendarmes)
- DECLARE_FUNCTION(function22)
+ DECLARE_FUNCTION(askMertensToRelayAugustInvitation)
DECLARE_FUNCTION(function23)
DECLARE_FUNCTION(policeGettingOffTrain)
- DECLARE_FUNCTION(function25)
+ DECLARE_FUNCTION(policeSearch)
/**
* Handle Chapter 1 events
@@ -139,11 +138,11 @@ public:
DECLARE_FUNCTION(chapter3)
DECLARE_FUNCTION_1(function30, const char *soundName)
- DECLARE_FUNCTION(function31)
+ DECLARE_FUNCTION(talkAboutMax)
DECLARE_FUNCTION(function32)
DECLARE_FUNCTION(function33)
DECLARE_FUNCTION(function34)
- DECLARE_FUNCTION(function35)
+ DECLARE_FUNCTION(organizeConcertInvitations)
/**
* Setup Chapter 4
@@ -155,7 +154,7 @@ public:
*/
DECLARE_FUNCTION(chapter4Handler)
- DECLARE_FUNCTION(function38)
+ DECLARE_FUNCTION(resetState)
/**
* Setup Chapter 5
@@ -167,8 +166,8 @@ public:
*/
DECLARE_FUNCTION(chapter5Handler)
- DECLARE_FUNCTION(function41)
- DECLARE_FUNCTION(function42)
+ DECLARE_FUNCTION(askPassengersToStayInCompartments)
+ DECLARE_FUNCTION(end)
private:
void talk(const SavePoint &savepoint, const char *sound1, const char *sound2);
diff --git a/engines/lastexpress/entities/vesna.cpp b/engines/lastexpress/entities/vesna.cpp
index b0ee9bcbc1..f29bce8b2b 100644
--- a/engines/lastexpress/entities/vesna.cpp
+++ b/engines/lastexpress/entities/vesna.cpp
@@ -162,7 +162,8 @@ IMPLEMENT_FUNCTION(11, Vesna, function11)
case kActionNone:
if (parameters->param3) {
- UPDATE_PARAM(parameters->param7, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(parameters->param7, getState()->timeTicks, 75))
+ break;
parameters->param2 = 1;
parameters->param3 = 0;
@@ -254,7 +255,7 @@ IMPLEMENT_FUNCTION(12, Vesna, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Vesna, setup_chapter1Handler));
break;
case kActionDefault:
@@ -511,7 +512,8 @@ IMPLEMENT_FUNCTION(20, Vesna, chapter3Handler)
}
if (parameters->param2) {
- UPDATE_PARAM(parameters->param8, getState()->timeTicks, 75);
+ if (!Entity::updateParameter(parameters->param8, getState()->timeTicks, 75))
+ break;
parameters->param1 = 1;
parameters->param2 = 0;
@@ -1080,13 +1082,14 @@ IMPLEMENT_FUNCTION(30, Vesna, function30)
case kActionNone:
if (!params->param1) {
- UPDATE_PARAM_PROC(params->param3, getState()->timeTicks, 120)
+ if (Entity::updateParameter(params->param3, getState()->timeTicks, 120)) {
getSound()->playSound(kEntityVesna, "Ves50001", kFlagDefault);
params->param1 = 1;
- UPDATE_PARAM_PROC_END
+ }
}
- UPDATE_PARAM(params->param4, getState()->timeTicks, 180);
+ if (!Entity::updateParameter(params->param4, getState()->timeTicks, 180))
+ break;
setCallback(1);
setup_savegame(kSavegameTypeEvent, kEventCathVesnaTrainTopKilled);
diff --git a/engines/lastexpress/entities/vesna.h b/engines/lastexpress/entities/vesna.h
index a09664096d..025d45882e 100644
--- a/engines/lastexpress/entities/vesna.h
+++ b/engines/lastexpress/entities/vesna.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_VESNA_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {
diff --git a/engines/lastexpress/entities/yasmin.cpp b/engines/lastexpress/entities/yasmin.cpp
index ebf90744f5..1d280f51e0 100644
--- a/engines/lastexpress/entities/yasmin.cpp
+++ b/engines/lastexpress/entities/yasmin.cpp
@@ -184,7 +184,7 @@ IMPLEMENT_FUNCTION(8, Yasmin, chapter1)
break;
case kActionNone:
- TIME_CHECK(kTimeChapter1, params->param1, setup_chapter1Handler);
+ Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Yasmin, setup_chapter1Handler));
break;
case kActionDefault:
@@ -202,12 +202,22 @@ IMPLEMENT_FUNCTION(9, Yasmin, chapter1Handler)
break;
case kActionNone:
- TIME_CHECK_CALLBACK(kTime1093500, params->param1, 1, setup_function6);
- TIME_CHECK_CALLBACK(kTime1161000, params->param2, 3, setup_function7);
- TIME_CHECK_PLAYSOUND_UPDATEPOSITION(kTime1162800, params->param3, 4, "Har1102", kPosition_4070);
- TIME_CHECK_CALLBACK_1(kTime1165500, params->param4, 5, setup_playSound, "Har1104");
- TIME_CHECK_CALLBACK_1(kTime1174500, params->param5, 6, setup_playSound, "Har1106");
- TIME_CHECK_CALLBACK(kTime1183500, params->param6, 7, setup_function6);
+ if (Entity::timeCheckCallback(kTime1093500, params->param1, 1, WRAP_SETUP_FUNCTION(Yasmin, setup_function6)))
+ break;
+
+ if (Entity::timeCheckCallback(kTime1161000, params->param2, 3, WRAP_SETUP_FUNCTION(Yasmin, setup_function7)))
+ break;
+
+ if (Entity::timeCheckPlaySoundUpdatePosition(kTime1162800, params->param3, 4, "Har1102", kPosition_4070))
+ break;
+
+ if (Entity::timeCheckCallback(kTime1165500, params->param4, 5, "Har1104", WRAP_SETUP_FUNCTION_S(Yasmin, setup_playSound)))
+ break;
+
+ if (Entity::timeCheckCallback(kTime1174500, params->param5, 6, "Har1106", WRAP_SETUP_FUNCTION_S(Yasmin, setup_playSound)))
+ break;
+
+ Entity::timeCheckCallback(kTime1183500, params->param6, 7, WRAP_SETUP_FUNCTION(Yasmin, setup_function6));
break;
case kActionCallback:
@@ -222,23 +232,27 @@ IMPLEMENT_FUNCTION(9, Yasmin, chapter1Handler)
break;
case 2:
- TIME_CHECK_CALLBACK(kTime1161000, params->param2, 3, setup_function7);
+ if (Entity::timeCheckCallback(kTime1161000, params->param2, 3, WRAP_SETUP_FUNCTION(Yasmin, setup_function7)))
+ break;
// Fallback to case 3
case 3:
- TIME_CHECK_PLAYSOUND_UPDATEPOSITION(kTime1162800, params->param3, 4, "Har1102", kPosition_4070);
+ if (Entity::timeCheckPlaySoundUpdatePosition(kTime1162800, params->param3, 4, "Har1102", kPosition_4070))
+ break;
// Fallback to case 4
case 4:
- TIME_CHECK_CALLBACK_1(kTime1165500, params->param4, 5, setup_playSound, "Har1104");
+ if (Entity::timeCheckCallback(kTime1165500, params->param4, 5, "Har1104", WRAP_SETUP_FUNCTION_S(Yasmin, setup_playSound)))
+ break;
// Fallback to case 5
case 5:
- TIME_CHECK_CALLBACK_1(kTime1174500, params->param5, 6, setup_playSound, "Har1106");
+ if (Entity::timeCheckCallback(kTime1174500, params->param5, 6, "Har1106", WRAP_SETUP_FUNCTION_S(Yasmin, setup_playSound)))
+ break;
// Fallback to case 6
case 6:
- TIME_CHECK_CALLBACK(kTime1183500, params->param6, 7, setup_function6);
+ Entity::timeCheckCallback(kTime1183500, params->param6, 7, WRAP_SETUP_FUNCTION(Yasmin, setup_function6));
break;
}
break;
@@ -279,7 +293,8 @@ IMPLEMENT_FUNCTION(12, Yasmin, chapter2Handler)
break;
case kActionNone:
- TIME_CHECK_CALLBACK(kTime1759500, params->param1, 1, setup_function7);
+ if (Entity::timeCheckCallback(kTime1759500, params->param1, 1, WRAP_SETUP_FUNCTION(Yasmin, setup_function7)))
+ break;
if (getState()->time > kTime1800000 && !params->param2) {
params->param2 = 1;
@@ -332,9 +347,13 @@ IMPLEMENT_FUNCTION(14, Yasmin, chapter3Handler)
break;
case kActionNone:
- TIME_CHECK_CALLBACK(kTime2062800, params->param1, 1, setup_function6);
- TIME_CHECK_CALLBACK(kTime2106000, params->param2, 2, setup_function7);
- TIME_CHECK_CALLBACK(kTime2160000, params->param3, 3, setup_function6);
+ if (Entity::timeCheckCallback(kTime2062800, params->param1, 1, WRAP_SETUP_FUNCTION(Yasmin, setup_function6)))
+ break;
+
+ if (Entity::timeCheckCallback(kTime2106000, params->param2, 2, WRAP_SETUP_FUNCTION(Yasmin, setup_function7)))
+ break;
+
+ Entity::timeCheckCallback(kTime2160000, params->param3, 3, WRAP_SETUP_FUNCTION(Yasmin, setup_function6));
break;
case kActionCallback:
@@ -343,11 +362,12 @@ IMPLEMENT_FUNCTION(14, Yasmin, chapter3Handler)
break;
case 1:
- TIME_CHECK_CALLBACK(kTime2106000, params->param2, 2, setup_function7);
+ if (Entity::timeCheckCallback(kTime2106000, params->param2, 2, WRAP_SETUP_FUNCTION(Yasmin, setup_function7)))
+ break;
// Fallback to case 2
case 2:
- TIME_CHECK_CALLBACK(kTime2160000, params->param3, 3, setup_function6);
+ Entity::timeCheckCallback(kTime2160000, params->param3, 3, WRAP_SETUP_FUNCTION(Yasmin, setup_function6));
break;
}
break;
@@ -379,8 +399,10 @@ IMPLEMENT_FUNCTION(16, Yasmin, chapter4Handler)
break;
case kActionNone:
- TIME_CHECK_CALLBACK(kTime2457000, params->param1, 1, setup_function7);
- TIME_CHECK_CALLBACK(kTime2479500, params->param2, 3, setup_function6);
+ if (Entity::timeCheckCallback(kTime2457000, params->param1, 1, WRAP_SETUP_FUNCTION(Yasmin, setup_function7)))
+ break;
+
+ Entity::timeCheckCallback(kTime2479500, params->param2, 3, WRAP_SETUP_FUNCTION(Yasmin, setup_function6));
break;
case kActionCallback:
@@ -395,7 +417,7 @@ IMPLEMENT_FUNCTION(16, Yasmin, chapter4Handler)
break;
case 2:
- TIME_CHECK_CALLBACK(kTime2479500, params->param2, 3, setup_function6);
+ Entity::timeCheckCallback(kTime2479500, params->param2, 3, WRAP_SETUP_FUNCTION(Yasmin, setup_function6));
break;
}
break;
@@ -443,7 +465,9 @@ IMPLEMENT_FUNCTION(20, Yasmin, function20)
break;
case kActionNone:
- UPDATE_PARAM(params->param1, getState()->time, 2700);
+ if (!Entity::updateParameter(params->param1, getState()->time, 2700))
+ break;
+
setup_function21();
break;
diff --git a/engines/lastexpress/entities/yasmin.h b/engines/lastexpress/entities/yasmin.h
index e943a8b158..b1413f5c2f 100644
--- a/engines/lastexpress/entities/yasmin.h
+++ b/engines/lastexpress/entities/yasmin.h
@@ -24,7 +24,6 @@
#define LASTEXPRESS_YASMIN_H
#include "lastexpress/entities/entity.h"
-#include "lastexpress/entities/entity_intern.h"
namespace LastExpress {