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