aboutsummaryrefslogtreecommitdiff
path: root/engines/lastexpress/entities/tatiana.cpp
diff options
context:
space:
mode:
authorJulien Templier2010-10-21 23:39:48 +0000
committerJulien Templier2010-10-21 23:39:48 +0000
commitc35d23aa95d12e5b622d9c25558f91ddf5eb066f (patch)
treeaa34c609aa6064630553298463229b4d3aee22ab /engines/lastexpress/entities/tatiana.cpp
parenta621302a719d384560fd8f2765639a948ef0cee9 (diff)
downloadscummvm-rg350-c35d23aa95d12e5b622d9c25558f91ddf5eb066f.tar.gz
scummvm-rg350-c35d23aa95d12e5b622d9c25558f91ddf5eb066f.tar.bz2
scummvm-rg350-c35d23aa95d12e5b622d9c25558f91ddf5eb066f.zip
LASTEXPRESS: Implement 7 AI logic functions
svn-id: r53681
Diffstat (limited to 'engines/lastexpress/entities/tatiana.cpp')
-rw-r--r--engines/lastexpress/entities/tatiana.cpp98
1 files changed, 97 insertions, 1 deletions
diff --git a/engines/lastexpress/entities/tatiana.cpp b/engines/lastexpress/entities/tatiana.cpp
index 2c6f74dff5..4bd73c1ee0 100644
--- a/engines/lastexpress/entities/tatiana.cpp
+++ b/engines/lastexpress/entities/tatiana.cpp
@@ -607,7 +607,103 @@ IMPLEMENT_FUNCTION(21, Tatiana, function21)
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(22, Tatiana, function22)
- error("Tatiana: callback function 22 not implemented!");
+ switch (savepoint.action) {
+ default:
+ break;
+
+ case kActionNone:
+ if (params->param1 == kTimeInvalid || getState()->time <= kTime1179000)
+ goto label_update;
+
+ UPDATE_PARAM_PROC_TIME(kTime1233000, (!getEvent(kEventTatianaAskMatchSpeakRussian) && !getEvent(kEventTatianaAskMatch) || getEntities()->isInGreenCarEntrance(kEntityPlayer)), params->param1, 0)
+label_update:
+ if (!getEvent(kEventTatianaAskMatchSpeakRussian)
+ && !getEvent(kEventTatianaAskMatch)
+ && getInventory()->hasItem(kItemMatchBox)
+ && getEntities()->isInGreenCarEntrance(kEntityPlayer)) {
+ getObjects()->update(kObject25, kEntityTatiana, kObjectLocation1, kCursorNormal, kCursorForward);
+ getObjects()->update(kObjectTrainTimeTable, kEntityTatiana, kObjectLocation1, kCursorNormal, kCursorForward);
+ }
+ UPDATE_PARAM_PROC_END
+
+ params->param1 = kTimeInvalid;
+
+ getObjects()->update(kObject25, kEntityPlayer, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue);
+ getObjects()->update(kObjectTrainTimeTable, kEntityPlayer, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue);
+ getEntities()->updatePositionExit(kEntityTatiana, kCarGreenSleeping, 70);
+ getEntities()->updatePositionExit(kEntityTatiana, kCarGreenSleeping, 71);
+
+ if (getEntities()->isInGreenCarEntrance(kEntityPlayer)) {
+ getSound()->excuseMe(kEntityTatiana);
+
+ if (getEntities()->isPlayerPosition(kCarGreenSleeping, 62))
+ getScenes()->loadSceneFromPosition(kCarGreenSleeping, 72);
+ }
+
+ getData()->inventoryItem = kItemNone;
+
+ setup_function23();
+ break;
+
+ case kAction1:
+ getData()->inventoryItem = kItemNone;
+
+ setCallback(4);
+ setup_savegame(kSavegameTypeEvent, kEventTatianaGivePoem);
+ break;
+
+ case kActionOpenDoor:
+ setCallback(3);
+ setup_savegame(kSavegameTypeEvent, kEventTatianaAskMatchSpeakRussian);
+ break;
+
+ case kActionDefault:
+ getSavePoints()->push(kEntityTatiana, kEntityVassili, kAction122732000);
+
+ setCallback(1);
+ setup_function15();
+ break;
+
+ case kActionCallback:
+ switch (getCallback()) {
+ default:
+ break;
+
+ case 1:
+ setCallback(2);
+ setup_updateEntity(kCarGreenSleeping, kPosition_540);
+ break;
+
+ case 2:
+ if (getEntities()->isInGreenCarEntrance(kEntityPlayer)) {
+ getSound()->excuseMe(kEntityTatiana);
+
+ if (getEntities()->isPlayerPosition(kCarGreenSleeping, 62))
+ getScenes()->loadSceneFromPosition(kCarGreenSleeping, 72);
+ }
+
+ getEntities()->drawSequenceLeft(kEntityTatiana, "306B");
+ getEntities()->updatePositionEnter(kEntityTatiana, kCarGreenSleeping, 70);
+ getEntities()->updatePositionEnter(kEntityTatiana, kCarGreenSleeping, 71);
+ break;
+
+ case 3:
+ getAction()->playAnimation(getEvent(kEventAlexeiSalonVassili) ? kEventTatianaAskMatchSpeakRussian : kEventTatianaAskMatch);
+ getScenes()->loadSceneFromPosition(kCarGreenSleeping, 62);
+ getData()->inventoryItem = kItemParchemin;
+
+ getObjects()->update(kObject25, kEntityPlayer, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue);
+ getObjects()->update(kObjectTrainTimeTable, kEntityPlayer, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue);
+ break;
+
+ case 4:
+ getAction()->playAnimation(kEventTatianaGivePoem);
+ getInventory()->removeItem(kItemParchemin);
+ getScenes()->processScene();
+ break;
+ }
+ break;
+ }
}
//////////////////////////////////////////////////////////////////////////