aboutsummaryrefslogtreecommitdiff
path: root/engines/lastexpress/entities/abbot.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/lastexpress/entities/abbot.cpp')
-rw-r--r--engines/lastexpress/entities/abbot.cpp51
1 files changed, 29 insertions, 22 deletions
diff --git a/engines/lastexpress/entities/abbot.cpp b/engines/lastexpress/entities/abbot.cpp
index 1581916e07..99b9ee3bc2 100644
--- a/engines/lastexpress/entities/abbot.cpp
+++ b/engines/lastexpress/entities/abbot.cpp
@@ -41,18 +41,18 @@ namespace LastExpress {
Abbot::Abbot(LastExpressEngine *engine) : Entity(engine, kEntityAbbot) {
ADD_CALLBACK_FUNCTION(Abbot, reset);
- ADD_CALLBACK_FUNCTION(Abbot, draw);
- ADD_CALLBACK_FUNCTION(Abbot, enterExitCompartment);
- ADD_CALLBACK_FUNCTION(Abbot, enterExitCompartment2);
+ ADD_CALLBACK_FUNCTION_S(Abbot, draw);
+ ADD_CALLBACK_FUNCTION_SI(Abbot, enterExitCompartment);
+ ADD_CALLBACK_FUNCTION_SI(Abbot, enterExitCompartment2);
ADD_CALLBACK_FUNCTION(Abbot, callbackActionOnDirection);
- ADD_CALLBACK_FUNCTION(Abbot, draw2);
- ADD_CALLBACK_FUNCTION(Abbot, updateFromTime);
- ADD_CALLBACK_FUNCTION(Abbot, updateFromTicks);
- ADD_CALLBACK_FUNCTION(Abbot, playSound);
- ADD_CALLBACK_FUNCTION(Abbot, savegame);
- ADD_CALLBACK_FUNCTION(Abbot, updateEntity);
- ADD_CALLBACK_FUNCTION(Abbot, callSavepoint);
- ADD_CALLBACK_FUNCTION(Abbot, updatePosition);
+ ADD_CALLBACK_FUNCTION_SSI(Abbot, draw2);
+ ADD_CALLBACK_FUNCTION_I(Abbot, updateFromTime);
+ ADD_CALLBACK_FUNCTION_I(Abbot, updateFromTicks);
+ ADD_CALLBACK_FUNCTION_S(Abbot, playSound);
+ ADD_CALLBACK_FUNCTION_II(Abbot, savegame);
+ ADD_CALLBACK_FUNCTION_II(Abbot, updateEntity);
+ ADD_CALLBACK_FUNCTION_SIIS(Abbot, callSavepoint);
+ ADD_CALLBACK_FUNCTION_SII(Abbot, updatePosition);
ADD_CALLBACK_FUNCTION(Abbot, callbackActionRestaurantOrSalon);
ADD_CALLBACK_FUNCTION(Abbot, chapter1);
ADD_CALLBACK_FUNCTION(Abbot, chapter2);
@@ -79,7 +79,7 @@ Abbot::Abbot(LastExpressEngine *engine) : Entity(engine, kEntityAbbot) {
ADD_CALLBACK_FUNCTION(Abbot, goCompartment4);
ADD_CALLBACK_FUNCTION(Abbot, inCompartment4);
ADD_CALLBACK_FUNCTION(Abbot, chapter4);
- ADD_CALLBACK_FUNCTION(Abbot, doWalkSearchingForCath);
+ ADD_CALLBACK_FUNCTION_II(Abbot, doWalkSearchingForCath);
ADD_CALLBACK_FUNCTION(Abbot, chapter4Handler);
ADD_CALLBACK_FUNCTION(Abbot, leaveDinner);
ADD_CALLBACK_FUNCTION(Abbot, inCompartment);
@@ -616,7 +616,7 @@ IMPLEMENT_FUNCTION(26, Abbot, inSalon1)
break;
case kActionNone:
- if (!Entity::updateParameter(params->param2, getState()->time, 4500))
+ if (!params->param1 || !Entity::updateParameterCheck(params->param2, getState()->time, 4500))
break;
if (getEntities()->isSomebodyInsideRestaurantOrSalon())
@@ -691,7 +691,7 @@ IMPLEMENT_FUNCTION(28, Abbot, openCompartment2)
break;
case kActionNone:
- Entity::timeCheckCallback(kTime2052000, params->param1, 1, WRAP_SETUP_FUNCTION(Abbot, setup_goWander));
+ Entity::timeCheckCallback(kTime2052000, params->param1, 2, WRAP_SETUP_FUNCTION(Abbot, setup_goWander));
break;
case kActionDefault:
@@ -699,7 +699,7 @@ IMPLEMENT_FUNCTION(28, Abbot, openCompartment2)
getEntities()->drawSequenceLeft(kEntityAbbot, "508A");
setCallback(1);
- setup_playSound("abb3013");
+ setup_playSound("Abb3013");
break;
case kActionCallback:
@@ -749,6 +749,9 @@ IMPLEMENT_FUNCTION(29, Abbot, goWander)
break;
case 4:
+ // compare with callback 2.
+ // This is taken from the original game as is,
+ // but do we really want real-time 30s in case 2 but simulated-time 15s (aka real-time 5s) here?
setCallback(5);
setup_updateFromTime(225);
break;
@@ -962,7 +965,7 @@ IMPLEMENT_FUNCTION(32, Abbot, goCompartment3)
case 1:
getObjects()->update(kObjectCompartmentC, kEntityPlayer, kObjectLocation1, kCursorKeepValue, kCursorKeepValue);
- setCallback(1);
+ setCallback(2);
setup_enterExitCompartment("617Ac", kObjectCompartmentC);
break;
@@ -1355,7 +1358,7 @@ IMPLEMENT_FUNCTION(42, Abbot, leaveDinner)
case kActionDefault:
getData()->location = kLocationOutsideCompartment;
- getEntities()->updatePositionExit(kEntityAbbot, kCarRestaurant, 67);
+ getEntities()->updatePositionEnter(kEntityAbbot, kCarRestaurant, 67);
setCallback(1);
setup_callSavepoint("029F", kEntityTables4, kActionDrawTablesWithChairs, "029G");
@@ -1406,8 +1409,8 @@ IMPLEMENT_FUNCTION(43, Abbot, inCompartment)
break;
case kActionNone:
- if (params->param1 && params->param4 != kTimeInvalid && params->param2 < getState()->time) {
- if (getState()->time < kTime2452500) {
+ if (params->param1 && params->param4 != kTimeInvalid) {
+ if (getState()->time > kTime2452500) {
params->param4 = kTimeInvalid;
setCallback(1);
@@ -1415,7 +1418,7 @@ IMPLEMENT_FUNCTION(43, Abbot, inCompartment)
break;
} else {
if (!getEntities()->isDistanceBetweenEntities(kEntityAbbot, kEntityPlayer, 1000) || getSoundQueue()->isBuffered(kEntityBoutarel) || !params->param4)
- params->param4 = (uint)getState()->time + 450;
+ params->param4 = (uint)getState()->time;
if (params->param4 < getState()->time) {
params->param4 = kTimeInvalid;
@@ -1655,7 +1658,8 @@ IMPLEMENT_FUNCTION(48, Abbot, afterBomb)
getData()->inventoryItem = kItemNone;
setCallback(4);
- setup_updatePosition("126C", kCarRedSleeping, 52);
+ setup_updatePosition("126C", kCarRestaurant, 52);
+ break;
}
Entity::timeCheckCallbackInventory(kTime2533500, params->param2, 5, WRAP_SETUP_FUNCTION(Abbot, setup_callbackActionRestaurantOrSalon));
@@ -1771,6 +1775,9 @@ IMPLEMENT_FUNCTION(49, Abbot, catchCath)
getSavePoints()->push(kEntityAbbot, kEntityTatiana, kAction238790488);
getObjects()->update(kObjectCompartment2, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
getObjects()->update(kObjectHandleInsideBathroom, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
+
+ setCallback(1);
+ setup_savegame(kSavegameTypeEvent, kEventAbbotWrongCompartment);
break;
case kActionDefault:
@@ -1791,7 +1798,7 @@ IMPLEMENT_FUNCTION(49, Abbot, catchCath)
break;
case 1:
- getAction()->playAnimation(getObjects()->get(kObjectCompartment2).model < kObjectModel2 ? kEventAbbotWrongCompartmentBed : kEventAbbotWrongCompartment);
+ getAction()->playAnimation(getObjects()->get(kObjectCompartment2).model == kObjectModel1 ? kEventAbbotWrongCompartmentBed : kEventAbbotWrongCompartment);
getEntities()->updateEntity(kEntityAbbot, kCarRedSleeping, kPosition_6470);
getSound()->playSound(kEntityPlayer, "LIB015");
getScenes()->loadSceneFromObject(kObjectCompartment2, true);