aboutsummaryrefslogtreecommitdiff
path: root/engines/lastexpress/entities/alexei.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/lastexpress/entities/alexei.cpp')
-rw-r--r--engines/lastexpress/entities/alexei.cpp64
1 files changed, 31 insertions, 33 deletions
diff --git a/engines/lastexpress/entities/alexei.cpp b/engines/lastexpress/entities/alexei.cpp
index 5ea3ff4898..89027c2d2f 100644
--- a/engines/lastexpress/entities/alexei.cpp
+++ b/engines/lastexpress/entities/alexei.cpp
@@ -37,21 +37,21 @@ namespace LastExpress {
Alexei::Alexei(LastExpressEngine *engine) : Entity(engine, kEntityAlexei) {
ADD_CALLBACK_FUNCTION(Alexei, reset);
- ADD_CALLBACK_FUNCTION(Alexei, playSound);
- ADD_CALLBACK_FUNCTION(Alexei, updateFromTicks);
- ADD_CALLBACK_FUNCTION(Alexei, draw);
- ADD_CALLBACK_FUNCTION(Alexei, updatePosition);
- ADD_CALLBACK_FUNCTION(Alexei, enterExitCompartment);
+ ADD_CALLBACK_FUNCTION_S(Alexei, playSound);
+ ADD_CALLBACK_FUNCTION_I(Alexei, updateFromTime);
+ ADD_CALLBACK_FUNCTION_S(Alexei, draw);
+ ADD_CALLBACK_FUNCTION_SII(Alexei, updatePosition);
+ ADD_CALLBACK_FUNCTION_SI(Alexei, enterExitCompartment);
ADD_CALLBACK_FUNCTION(Alexei, callbackActionOnDirection);
- ADD_CALLBACK_FUNCTION(Alexei, callSavepoint);
- ADD_CALLBACK_FUNCTION(Alexei, savegame);
- ADD_CALLBACK_FUNCTION(Alexei, updateEntity);
- ADD_CALLBACK_FUNCTION(Alexei, draw2);
+ ADD_CALLBACK_FUNCTION_SIIS(Alexei, callSavepoint);
+ ADD_CALLBACK_FUNCTION_II(Alexei, savegame);
+ ADD_CALLBACK_FUNCTION_II(Alexei, updateEntity);
+ ADD_CALLBACK_FUNCTION_SSI(Alexei, draw2);
ADD_CALLBACK_FUNCTION(Alexei, callbackActionRestaurantOrSalon);
ADD_CALLBACK_FUNCTION(Alexei, enterComparment);
ADD_CALLBACK_FUNCTION(Alexei, exitCompartment);
ADD_CALLBACK_FUNCTION(Alexei, pacingAtWindow);
- ADD_CALLBACK_FUNCTION(Alexei, compartmentLogic);
+ ADD_CALLBACK_FUNCTION_IS(Alexei, compartmentLogic);
ADD_CALLBACK_FUNCTION(Alexei, chapter1);
ADD_CALLBACK_FUNCTION(Alexei, atDinner);
ADD_CALLBACK_FUNCTION(Alexei, returnCompartment);
@@ -97,8 +97,8 @@ IMPLEMENT_FUNCTION_S(2, Alexei, playSound)
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
-IMPLEMENT_FUNCTION_I(3, Alexei, updateFromTicks, uint32)
- Entity::updateFromTicks(savepoint);
+IMPLEMENT_FUNCTION_I(3, Alexei, updateFromTime, uint32)
+ Entity::updateFromTime(savepoint);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
@@ -394,7 +394,7 @@ IMPLEMENT_FUNCTION_IS(16, Alexei, compartmentLogic, TimeValue)
case 7:
setCallback(8);
- setup_updateFromTicks(300);
+ setup_updateFromTime(300);
break;
case 8:
@@ -675,7 +675,7 @@ IMPLEMENT_FUNCTION(20, Alexei, goSalon)
case 4:
getData()->location = kLocationInsideCompartment;
- setup_function26();
+ setup_sitting();
break;
}
break;
@@ -689,7 +689,7 @@ IMPLEMENT_FUNCTION(21, Alexei, sitting)
break;
case kActionNone:
- if (Entity::updateParameterCheck(params->param2, getState()->time, params->param1)) {
+ if (Entity::updateParameterCheck(params->param2, getState()->time, params->param1) && getEntities()->isSomebodyInsideRestaurantOrSalon()) {
getData()->location = kLocationOutsideCompartment;
getData()->inventoryItem = kItemNone;
@@ -738,6 +738,7 @@ IMPLEMENT_FUNCTION(21, Alexei, sitting)
case 3:
getEntities()->drawSequenceLeft(kEntityAlexei, "103B");
getEntities()->updatePositionExit(kEntityAlexei, kCarRestaurant, 52);
+ getData()->location = kLocationInsideCompartment;
break;
}
break;
@@ -751,7 +752,7 @@ IMPLEMENT_FUNCTION(22, Alexei, standingAtWindow)
break;
case kActionNone:
- if (Entity::updateParameter(params->param2, getState()->time, params->param2)) {
+ if (Entity::updateParameterCheck(params->param2, getState()->time, params->param1)) {
if (getEntities()->isSomebodyInsideRestaurantOrSalon()) {
getData()->location = kLocationOutsideCompartment;
getData()->inventoryItem = kItemNone;
@@ -768,7 +769,7 @@ IMPLEMENT_FUNCTION(22, Alexei, standingAtWindow)
if (getState()->time > kTime1138500) {
params->param3 = kTimeInvalid;
} else {
- if (!getEntities()->isInSalon(kEntityPlayer) || getEntities()->isInSalon(kEntityPlayer) || !params->param3)
+ if (!getEntities()->isInSalon(kEntityPlayer) && !getEntities()->isInRestaurant(kEntityPlayer) || !params->param3)
params->param3 = (uint)getState()->time;
if (params->param3 >= getState()->time)
@@ -788,7 +789,7 @@ IMPLEMENT_FUNCTION(22, Alexei, standingAtWindow)
break;
case kActionDefault:
- params->param1 = 255 * (4 * rnd(4) + 8);
+ params->param1 = 225 * (4 * rnd(4) + 8);
getEntities()->drawSequenceLeft(kEntityAlexei, "103E");
if (!getEvent(kEventAlexeiSalonPoem))
getData()->inventoryItem = kItemParchemin;
@@ -821,7 +822,7 @@ IMPLEMENT_FUNCTION(22, Alexei, standingAtWindow)
getEntities()->updatePositionExit(kEntityAlexei, kCarRestaurant, 52);
getData()->location = kLocationInsideCompartment;
- setup_standingAtWindow();
+ setup_sitting();
break;
}
break;
@@ -835,7 +836,7 @@ IMPLEMENT_FUNCTION(23, Alexei, waitingForTatiana)
break;
case kActionNone:
- getData()->inventoryItem = (!getEntities()->isInRestaurant(kEntityAlexei) || getEvent(kEventAlexeiSalonPoem)) ? kItemNone : kItemParchemin;
+ getData()->inventoryItem = (!getEntities()->isInRestaurant(kEntityTatiana) || getEvent(kEventAlexeiSalonPoem)) ? kItemNone : kItemParchemin;
break;
case kAction1:
@@ -913,7 +914,7 @@ IMPLEMENT_FUNCTION(24, Alexei, upset)
case 1:
getAction()->playAnimation(kEventAlexeiSalonCath);
- getData()->car = kCarRestaurant;
+ getData()->car = kCarRedSleeping;
getData()->entityPosition = kPosition_9460;
getEntities()->clearSequences(kEntityAlexei);
getScenes()->loadSceneFromPosition(kCarRestaurant, 55);
@@ -1125,7 +1126,7 @@ IMPLEMENT_FUNCTION(30, Alexei, atBreakfast)
break;
case 2:
- getSound()->playSound(kEntityAlexei, "TAt2116A");
+ getSound()->playSound(kEntityAlexei, "TAT2116A");
getEntities()->updatePositionEnter(kEntityAlexei, kCarRestaurant, 63);
setCallback(3);
@@ -1333,7 +1334,7 @@ IMPLEMENT_FUNCTION(35, Alexei, pacing3)
case kActionNone:
if (getEntities()->isInSalon(kEntityPlayer)) {
- if (Entity::updateParameter(params->param2, getState()->time, 2700)) {
+ if (Entity::updateParameterCheck(params->param2, getState()->time, 2700)) {
setCallback(1);
setup_callbackActionRestaurantOrSalon();
break;
@@ -1342,7 +1343,7 @@ IMPLEMENT_FUNCTION(35, Alexei, pacing3)
params->param2 = 0;
}
- if (Entity::updateParameter(params->param3, getState()->time, params->param1)) {
+ if (Entity::updateParameterCheck(params->param3, getState()->time, params->param1)) {
if (getEntities()->isSomebodyInsideRestaurantOrSalon()) {
setCallback(3);
setup_pacingAtWindow();
@@ -1535,10 +1536,10 @@ IMPLEMENT_FUNCTION(39, Alexei, meetTatiana)
break;
}
- params->param4 = kTimeInvalid;
+ params->param5 = kTimeInvalid;
- getEntities()->updatePositionEnter(kEntityAlexei, kCarGreenSleeping, 70);
- getEntities()->updatePositionEnter(kEntityAlexei, kCarGreenSleeping, 71);
+ getEntities()->updatePositionExit(kEntityAlexei, kCarGreenSleeping, 70);
+ getEntities()->updatePositionExit(kEntityAlexei, kCarGreenSleeping, 71);
if (getEntities()->isInGreenCarEntrance(kEntityPlayer)) {
getSound()->excuseMe(kEntityAlexei);
@@ -1725,10 +1726,7 @@ IMPLEMENT_FUNCTION(43, Alexei, pacing)
break;
case kActionNone:
- if (getState()->time < kTime1806300 && params->param2 < getState()->time) {
- if (!params->param2)
- params->param2 = (uint)getState()->time + params->param1;
-
+ if (getState()->time < kTime1806300 && Entity::updateParameterCheck(params->param2, getState()->time, params->param1)) {
if (getEntities()->isSomebodyInsideRestaurantOrSalon()) {
setCallback(1);
setup_pacingAtWindow();
@@ -1782,7 +1780,7 @@ IMPLEMENT_FUNCTION(44, Alexei, goToPlatform)
break;
case kActionNone:
- if (getState()->time > kTime2457000 && !params->param1) {
+ if (getState()->time > kTime2475000 && !params->param1) {
params->param1 = 1;
getEntities()->updatePositionExit(kEntityAlexei, kCarGreenSleeping, 70);
@@ -1986,7 +1984,7 @@ IMPLEMENT_FUNCTION(47, Alexei, function47)
getData()->entityPosition = kPositionNone;
getData()->location = kLocationOutsideCompartment;
- getData()->car = kCarNone;
+ getData()->car = kCarLocomotive;
getObjects()->update(kObjectCompartment2, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
getObjects()->update(kObjectHandleInsideBathroom, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);