aboutsummaryrefslogtreecommitdiff
path: root/engines/lastexpress/entities/coudert.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/lastexpress/entities/coudert.cpp')
-rw-r--r--engines/lastexpress/entities/coudert.cpp100
1 files changed, 99 insertions, 1 deletions
diff --git a/engines/lastexpress/entities/coudert.cpp b/engines/lastexpress/entities/coudert.cpp
index 6093110c6c..d585205eb0 100644
--- a/engines/lastexpress/entities/coudert.cpp
+++ b/engines/lastexpress/entities/coudert.cpp
@@ -3124,7 +3124,105 @@ IMPLEMENT_FUNCTION(50, Coudert, function50)
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(51, Coudert, function51)
- error("Coudert: callback function 51 not implemented!");
+ switch (savepoint.action) {
+ default:
+ break;
+
+ case kActionNone:
+ if (getState()->time > kTime2133000 && !getProgress().field_40) {
+ getEntities()->exitCompartment(kEntityCoudert, kObjectCompartmentB);
+ getObjects()->update(kObjectCompartmentA, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
+ getObjects()->update(kObjectCompartmentB, kEntityPlayer, kObjectLocation1, kCursorHandKnock, kCursorHand);
+
+ setCallback(1);
+ setup_updateEntity(kCarRedSleeping, kPosition_2000);
+ }
+ break;
+
+ case kActionOpenDoor:
+ if (savepoint.param.intValue == kObjectCompartmentB)
+ getData()->entityPosition = kPosition_7500;
+
+ getSound()->playSound(kEntityPlayer, "LIB014");
+ getAction()->playAnimation(kEventCoudertGoingOutOfVassiliCompartment);
+ getEntities()->updateEntity(kEntityCoudert, kCarRedSleeping, kPosition_2000);
+ getScenes()->loadSceneFromObject(savepoint.param.intValue == kObjectCompartmentB ? kObjectCompartmentB : kObjectCompartmentA);
+ getEntities()->exitCompartment(kEntityCoudert, kObjectCompartmentB, true);
+ getObjects()->update(kObjectCompartmentA, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
+ getObjects()->update(kObjectCompartmentB, kEntityPlayer, kObjectLocation1, kCursorHandKnock, kCursorHand);
+
+ setCallback(3);
+ setup_updateEntity(kCarRedSleeping, kPosition_2000);
+ break;
+
+ case kActionDefault:
+ getData()->car = kCarRedSleeping;
+ getData()->entityPosition = kPosition_7500;
+ getData()->location = kLocationOutsideCompartment;
+
+ getSavePoints()->push(kEntityCoudert, kEntityMax, kActionMaxFreeFromCage);
+
+ if (ENTITY_PARAM(0, 5)) {
+ ENTITY_PARAM(0, 5) = 0;
+
+ getSavePoints()->push(kEntityCoudert, kEntityMertens, kAction155853632);
+ getSavePoints()->push(kEntityCoudert, kEntityMertens, kActionEndSound);
+ }
+
+ if (ENTITY_PARAM(0, 3)) {
+ ENTITY_PARAM(0, 3) = 0;
+
+ getSavePoints()->push(kEntityCoudert, kEntityVerges, kAction155853632);
+ getSavePoints()->push(kEntityCoudert, kEntityVerges, kActionEndSound);
+ }
+
+ getEntities()->drawSequenceLeft(kEntityCoudert, "627Wb");
+ getEntities()->enterCompartment(kEntityCoudert, kObjectCompartmentB, true);
+ getSavePoints()->push(kEntityCoudert, kEntityTatiana, kAction154071333);
+ break;
+
+ case kActionCallback:
+ switch (getCallback()) {
+ default:
+ break;
+
+ case 1:
+ setCallback(2);
+ setup_function18();
+ break;
+
+ case 2:
+ case 4:
+ case 6:
+ setup_function45();
+ break;
+
+ case 3:
+ setCallback(4);
+ setup_function18();
+ break;
+
+ case 5:
+ setCallback(5);
+ setup_function18();
+ break;
+ }
+ break;
+
+ case kAction168316032:
+ getObjects()->update(kObjectCompartmentA, kEntityCoudert, kObjectLocationNone, kCursorNormal, kCursorHand);
+ getObjects()->update(kObjectCompartmentB, kEntityCoudert, kObjectLocation1, kCursorNormal, kCursorHand);
+ break;
+
+ case kAction235061888:
+ getEntities()->exitCompartment(kEntityCoudert, kObjectCompartmentB, true);
+ getObjects()->update(kObjectCompartmentA, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
+ getObjects()->update(kObjectCompartmentB, kEntityPlayer, kObjectLocation1, kCursorHandKnock, kCursorHand);
+
+ setCallback(5);
+ setup_updateEntity(kCarRedSleeping, kPosition_2000);
+ break;
+ }
}
//////////////////////////////////////////////////////////////////////////