aboutsummaryrefslogtreecommitdiff
path: root/engines/lastexpress/entities/milos.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/lastexpress/entities/milos.cpp')
-rw-r--r--engines/lastexpress/entities/milos.cpp101
1 files changed, 100 insertions, 1 deletions
diff --git a/engines/lastexpress/entities/milos.cpp b/engines/lastexpress/entities/milos.cpp
index a3e4a962e3..092b0c9945 100644
--- a/engines/lastexpress/entities/milos.cpp
+++ b/engines/lastexpress/entities/milos.cpp
@@ -25,6 +25,8 @@
#include "lastexpress/entities/milos.h"
+#include "lastexpress/entities/vesna.h"
+
#include "lastexpress/game/action.h"
#include "lastexpress/game/entities.h"
#include "lastexpress/game/inventory.h"
@@ -973,7 +975,104 @@ IMPLEMENT_FUNCTION(24, Milos, function24)
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(25, Milos, function25)
- error("Milos: callback function 25 not implemented!");
+ switch (savepoint.action) {
+ default:
+ break;
+
+ case kActionNone:
+ if (!getEvent(kEventMilosCompartmentVisitTyler) && !getProgress().field_54 && !ENTITY_PARAM(0, 4)) {
+ UPDATE_PARAM_PROC(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);
+
+ params->param1 = 0;
+ params->param2 = 1;
+ getObjects()->update(kObjectCompartmentG, kEntityMilos, kObjectLocation1, kCursorNormal, kCursorNormal);
+ }
+
+ params->param4 = 0;
+ break;
+
+ case kActionKnock:
+ case kActionOpenDoor:
+ getObjects()->update(kObjectCompartmentG, kEntityMilos, params->param1 ? kObjectLocation3 : kObjectLocation1, kCursorNormal, kCursorNormal);
+
+ if (params->param1) {
+ setCallback(5);
+ setup_playSound(rnd(2) ? "CAT1505" : "CAT1505A");
+ } else {
+ setCallback(savepoint.action == kActionKnock ? 1 : 2);
+ setup_playSound(savepoint.action == kActionKnock ? "LIB012" : "LIB013");
+ }
+ break;
+
+ case kActionDefault:
+ getObjects()->update(kObjectCompartmentG, kEntityMilos, kObjectLocation3, kCursorHandKnock, kCursorHand);
+
+ if (!getEvent(kEventMilosCompartmentVisitTyler) && !getProgress().field_54 && !ENTITY_PARAM(0, 4))
+ getSavePoints()->push(kEntityMilos, kEntityVesna, kAction155913424);
+ break;
+
+ case kActionDrawScene:
+ if (params->param1 || params->param2) {
+ getObjects()->update(kObjectCompartmentG, kEntityMilos, kObjectLocation3, kCursorHandKnock, kCursorHand);
+
+ params->param1 = 0;
+ params->param2 = 0;
+ }
+ break;
+
+ case kActionCallback:
+ switch (getCallback()) {
+ default:
+ break;
+
+ case 1:
+ case 2:
+ if (getEntities()->isInsideCompartment(kEntityVesna, kCarRedSleeping, kPosition_3050)) {
+ setCallback(3);
+ setup_playSound("VES1015A");
+ break;
+ }
+
+ if (getEvent(kEventMilosCompartmentVisitTyler) || ENTITY_PARAM(0, 4)) {
+ getObjects()->update(kObjectCompartmentG, kEntityMilos, kObjectLocation1, kCursorHandKnock, kCursorHand);
+ break;
+ }
+
+ RESET_ENTITY_STATE(kEntityVesna, Vesna, setup_chapter3Handler);
+
+ getData()->location = kLocationInsideCompartment;
+
+ setCallback(4);
+ setup_savegame(kSavegameTypeEvent, kEventMilosCompartmentVisitTyler);
+ break;
+
+ case 3:
+ getObjects()->update(kObjectCompartmentG, kEntityMilos, kObjectLocation1, kCursorTalk, kCursorNormal);
+ getObjects()->update(kObjectCompartmentG, kEntityMilos, kObjectLocation1, kCursorHandKnock, kCursorHand);
+
+ params->param1 = 1;
+ break;
+
+ case 4:
+ getAction()->playAnimation(kEventMilosCompartmentVisitTyler);
+ getScenes()->loadSceneFromPosition(kCarRestaurant, 5);
+ getObjects()->update(kObjectCompartmentG, kEntityMilos, kObjectLocation1, kCursorHandKnock, kCursorHand);
+ break;
+
+ case 5:
+ params->param1 = 0;
+ params->param2 = 1;
+ break;
+ }
+ break;
+ }
}
//////////////////////////////////////////////////////////////////////////