[Scummvm-cvs-logs] SF.net SVN: scummvm:[53688] scummvm/trunk/engines/lastexpress
littleboy at users.sourceforge.net
littleboy at users.sourceforge.net
Fri Oct 22 01:43:36 CEST 2010
Revision: 53688
http://scummvm.svn.sourceforge.net/scummvm/?rev=53688&view=rev
Author: littleboy
Date: 2010-10-21 23:43:36 +0000 (Thu, 21 Oct 2010)
Log Message:
-----------
LASTEXPRESS: Implement remaining AI logic functions for MmeBoutarel
Modified Paths:
--------------
scummvm/trunk/engines/lastexpress/entities/mmeboutarel.cpp
scummvm/trunk/engines/lastexpress/shared.h
Modified: scummvm/trunk/engines/lastexpress/entities/mmeboutarel.cpp
===================================================================
--- scummvm/trunk/engines/lastexpress/entities/mmeboutarel.cpp 2010-10-21 23:43:04 UTC (rev 53687)
+++ scummvm/trunk/engines/lastexpress/entities/mmeboutarel.cpp 2010-10-21 23:43:36 UTC (rev 53688)
@@ -397,7 +397,126 @@
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(13, MmeBoutarel, function13)
- error("MmeBoutarel: callback function 13 not implemented!");
+ switch (savepoint.action) {
+ default:
+ break;
+
+ case kActionNone:
+ if (!getSound()->isBuffered(kEntityMmeBoutarel) && params->param6 != kTimeInvalid) {
+ UPDATE_PARAM_PROC_TIME(params->param1, !getEntities()->isDistanceBetweenEntities(kEntityMmeBoutarel, kEntityPlayer, 2000), params->param6, 0)
+ getObjects()->update(kObjectCompartmentD, kEntityPlayer, kObjectLocation1, kCursorNormal, kCursorNormal);
+ getObjects()->update(kObject51, kEntityPlayer, kObjectLocation1, kCursorNormal, kCursorNormal);
+
+ if (getEntities()->isDistanceBetweenEntities(kEntityMmeBoutarel, kEntityPlayer, 2000))
+ getProgress().field_A0 = 1;
+
+ params->param5 = 1;
+
+ setCallback(1);
+ setup_playSound("MME1037");
+ break;
+ UPDATE_PARAM_PROC_END
+ }
+
+label_callback_1:
+ if (getProgress().field_24 && params->param7 != kTimeInvalid) {
+ UPDATE_PARAM_PROC_TIME(kTime1093500, (!params->param5 || !getEntities()->isPlayerInCar(kCarRedSleeping)), params->param7, 0)
+ setCallback(2);
+ setup_function11();
+ break;
+ UPDATE_PARAM_PROC_END
+ }
+
+ TIME_CHECK(kTime1094400, params->param8, setup_function14);
+
+ if (params->param4) {
+ UPDATE_PARAM(CURRENT_PARAMS(1, 1), getState()->timeTicks, 75);
+
+ params->param3 = 1;
+ params->param4 = 0;
+
+ getObjects()->update(kObjectCompartmentD, kEntityMmeBoutarel, kObjectLocation1, kCursorNormal, kCursorNormal);
+ getObjects()->update(kObject51, kEntityMmeBoutarel, kObjectLocation1, kCursorNormal, kCursorNormal);
+ }
+
+ CURRENT_PARAMS(1, 1) = 0;
+ break;
+
+ case kActionKnock:
+ case kActionOpenDoor:
+ getObjects()->update(kObjectCompartmentD, kEntityMmeBoutarel, kObjectLocation1, kCursorNormal, kCursorNormal);
+ getObjects()->update(kObject51, kEntityMmeBoutarel, kObjectLocation1, kCursorNormal, kCursorNormal);
+
+ if (params->param4) {
+ if (getInventory()->hasItem(kItemPassengerList)) {
+ setCallback(7);
+ setup_playSound(rnd(2) ? "CAT1510" : getSound()->wrongDoorCath());
+ } else {
+ setCallback(8);
+ setup_playSound(getSound()->wrongDoorCath());
+ }
+ } else {
+ ++params->param2;
+
+ setCallback(savepoint.action == kActionKnock ? 4 : 3);
+ setup_playSound(savepoint.action == kActionKnock ? "LIB012" : "LIB013");
+ }
+ break;
+
+ case kActionDefault:
+ params->param1 = getState()->time + 900;
+ getData()->entityPosition = kPosition_5790;
+
+ getObjects()->update(kObjectCompartmentD, kEntityMmeBoutarel, kObjectLocation1, kCursorHandKnock, kCursorHand);
+ getObjects()->update(kObject51, kEntityMmeBoutarel, kObjectLocation1, kCursorHandKnock, kCursorHand);
+ break;
+
+ case kActionDrawScene:
+ if (params->param3 || params->param4) {
+ getObjects()->update(kObjectCompartmentD, kEntityMmeBoutarel, kObjectLocation1, kCursorHandKnock, kCursorHand);
+ getObjects()->update(kObject51, kEntityMmeBoutarel, kObjectLocation1, kCursorHandKnock, kCursorHand);
+
+ params->param2 = 0;
+ params->param3 = 0;
+ params->param4 = 0;
+ }
+ break;
+
+ case kActionCallback:
+ switch (getCallback()) {
+ default:
+ break;
+
+ case 1:
+ getObjects()->update(kObjectCompartmentD, kEntityMmeBoutarel, kObjectLocation1, kCursorHandKnock, kCursorHand);
+ getObjects()->update(kObject51, kEntityMmeBoutarel, kObjectLocation1, kCursorHandKnock, kCursorHand);
+ goto label_callback_1;
+
+ case 2:
+ setup_function14();
+ break;
+
+ case 3:
+ case 4:
+ setCallback(params->param2 <= 1 ? 6 : 5);
+ setup_playSound(params->param2 <= 1 ? "MME1038" : "MME1038C");
+ break;
+
+ case 5:
+ case 6:
+ getObjects()->update(kObjectCompartmentD, kEntityMmeBoutarel, kObjectLocation1, kCursorTalk, kCursorNormal);
+ getObjects()->update(kObject51, kEntityMmeBoutarel, kObjectLocation1, kCursorTalk, kCursorNormal);
+ params->param4 = 1;
+ break;
+
+ case 7:
+ case 8:
+ params->param3 = 1;
+ params->param4 = 0;
+ break;
+ }
+ break;
+ }
}
//////////////////////////////////////////////////////////////////////////
@@ -453,7 +572,152 @@
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(15, MmeBoutarel, function15)
- error("MmeBoutarel: callback function 15 not implemented!");
+ switch (savepoint.action) {
+ default:
+ break;
+
+ case kActionNone:
+ if (getState()->time > kTimeEnterChalons && !params->param4) {
+ params->param4 = 1;
+
+ getData()->location = kLocationOutsideCompartment;
+ getObjects()->update(kObject51, kEntityPlayer, kObjectLocation1, kCursorHandKnock, kCursorHand);
+
+ setCallback(1);
+ setup_enterExitCompartment("606Rd", kObjectCompartmentD);
+ break;
+ }
+
+label_callback_5:
+ if (params->param2) {
+ UPDATE_PARAM(params->param5, getState()->timeTicks, 75);
+
+ params->param1 = 1;
+ params->param2 = 0;
+
+ getObjects()->update(kObjectCompartmentD, kEntityMmeBoutarel, kObjectLocation1, kCursorNormal, kCursorNormal);
+ getObjects()->update(kObject51, kEntityMmeBoutarel, kObjectLocation1, kCursorNormal, kCursorNormal);
+ }
+
+ params->param5 = 0;
+ break;
+
+ case kActionKnock:
+ case kActionOpenDoor:
+ getObjects()->update(kObjectCompartmentD, kEntityMmeBoutarel, kObjectLocation1, kCursorNormal, kCursorNormal);
+ getObjects()->update(kObject51, kEntityMmeBoutarel, kObjectLocation1, kCursorNormal, kCursorNormal);
+
+ if (params->param2) {
+ if (getInventory()->hasItem(kItemPassengerList)) {
+ setCallback(10);
+ setup_playSound(rnd(2) ? "CAT1510" : getSound()->wrongDoorCath());
+ } else {
+ setCallback(11);
+ setup_playSound(getSound()->wrongDoorCath());
+ }
+ break;
+ }
+
+ ++params->param3;
+
+ setCallback(savepoint.action == kActionKnock ? 7 : 6);
+ setup_playSound(savepoint.action == kActionKnock ? "LIB012" : "LIB013");
+ break;
+
+ case kActionDefault:
+ getObjects()->update(kObjectCompartmentD, kEntityMmeBoutarel, kObjectLocation1, kCursorHandKnock, kCursorHand);
+ getObjects()->update(kObject51, kEntityMmeBoutarel, kObjectLocation1, kCursorHandKnock, kCursorHand);
+
+ getData()->car = kCarRedSleeping;
+ getData()->location = kLocationInsideCompartment;
+ getData()->entityPosition = kPosition_5790;
+ break;
+
+ case kActionDrawScene:
+ if (params->param1 || params->param2) {
+ getObjects()->update(kObjectCompartmentD, kEntityMmeBoutarel, kObjectLocation1, kCursorHandKnock, kCursorHand);
+ getObjects()->update(kObject51, kEntityMmeBoutarel, kObjectLocation1, kCursorHandKnock, kCursorHand);
+
+ params->param1 = 0;
+ params->param3 = 0; // BUG" why param3 when it's always param2?
+ }
+ break;
+
+ case kActionCallback:
+ switch (getCallback()) {
+ default:
+ break;
+
+ case 1:
+ getObjects()->update(kObjectCompartmentD, kEntityPlayer, kObjectLocation1, kCursorHandKnock, kCursorHand);
+
+ setCallback(2);
+ setup_updateEntity(kCarRedSleeping, kPosition_2000);
+ break;
+
+ case 2:
+ setCallback(3);
+ setup_function8("MME1101");
+ break;
+
+ case 3:
+ setCallback(4);
+ setup_updateEntity(kCarRedSleeping, kPosition_5790);
+ break;
+
+ case 4:
+ setCallback(5);
+ setup_enterExitCompartment2("606Td", kObjectCompartmentD);
+ break;
+
+ case 5:
+ getData()->location = kLocationInsideCompartment;
+ getData()->entityPosition = kPosition_5790;
+
+ getEntities()->clearSequences(kEntityMmeBoutarel);
+ getObjects()->update(kObjectCompartmentD, kEntityMmeBoutarel, kObjectLocation1, kCursorHandKnock, kCursorHand);
+ getObjects()->update(kObject51, kEntityMmeBoutarel, kObjectLocation1, kCursorHandKnock, kCursorHand);
+ goto label_callback_5;
+
+ case 6:
+ case 7:
+ if (params->param3 <= 1) {
+ setCallback(9);
+ setup_playSound("MME1038");
+ } else {
+ setCallback(8);
+ setup_playSound("MME1038C");
+ }
+ break;
+
+ case 8:
+ case 9:
+ getObjects()->update(kObjectCompartmentD, kEntityMmeBoutarel, kObjectLocation1, kCursorTalk, kCursorNormal);
+ getObjects()->update(kObject51, kEntityMmeBoutarel, kObjectLocation1, kCursorTalk, kCursorNormal);
+ params->param2 = 1;
+ break;
+
+ case 10:
+ case 11:
+ params->param1 = 1;
+ params->param2 = 0;
+ break;
+
+ case 12:
+ getObjects()->update(kObjectCompartmentD, kEntityMmeBoutarel, kObjectLocation1, kCursorHandKnock, kCursorHand);
+ getObjects()->update(kObject51, kEntityMmeBoutarel, kObjectLocation1, kCursorHandKnock, kCursorHand);
+ break;
+ }
+ break;
+
+ case kAction223068211:
+ getObjects()->update(kObjectCompartmentD, kEntityMmeBoutarel, kObjectLocation1, kCursorNormal, kCursorNormal);
+ getObjects()->update(kObject51, kEntityMmeBoutarel, kObjectLocation1, kCursorNormal, kCursorNormal);
+
+ setCallback(12);
+ setup_playSound("MME1151B");
+ break;
+ }
}
//////////////////////////////////////////////////////////////////////////
Modified: scummvm/trunk/engines/lastexpress/shared.h
===================================================================
--- scummvm/trunk/engines/lastexpress/shared.h 2010-10-21 23:43:04 UTC (rev 53687)
+++ scummvm/trunk/engines/lastexpress/shared.h 2010-10-21 23:43:36 UTC (rev 53688)
@@ -49,6 +49,7 @@
kTime1084500 = 1084500,
kTime1089000 = 1089000,
kTime1093500 = 1093500,
+ kTime1094400 = 1094400,
kTime1096200 = 1096200,
kTime1098000 = 1098000,
kTime1102500 = 1102500,
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list