diff options
Diffstat (limited to 'engines/lastexpress/entities/rebecca.cpp')
-rw-r--r-- | engines/lastexpress/entities/rebecca.cpp | 78 |
1 files changed, 56 insertions, 22 deletions
diff --git a/engines/lastexpress/entities/rebecca.cpp b/engines/lastexpress/entities/rebecca.cpp index b8b4aa1275..acb58f7870 100644 --- a/engines/lastexpress/entities/rebecca.cpp +++ b/engines/lastexpress/entities/rebecca.cpp @@ -23,6 +23,7 @@ #include "lastexpress/entities/rebecca.h" #include "lastexpress/game/entities.h" +#include "lastexpress/game/inventory.h" #include "lastexpress/game/logic.h" #include "lastexpress/game/object.h" #include "lastexpress/game/savepoint.h" @@ -37,25 +38,25 @@ namespace LastExpress { Rebecca::Rebecca(LastExpressEngine *engine) : Entity(engine, kEntityRebecca) { ADD_CALLBACK_FUNCTION(Rebecca, reset); - ADD_CALLBACK_FUNCTION(Rebecca, updateFromTime); - ADD_CALLBACK_FUNCTION(Rebecca, playSound); - ADD_CALLBACK_FUNCTION(Rebecca, playSound16); - ADD_CALLBACK_FUNCTION(Rebecca, callSavepoint); - ADD_CALLBACK_FUNCTION(Rebecca, draw); - ADD_CALLBACK_FUNCTION(Rebecca, enterExitCompartment); - ADD_CALLBACK_FUNCTION(Rebecca, enterExitCompartment2); - ADD_CALLBACK_FUNCTION(Rebecca, enterExitCompartment3); + ADD_CALLBACK_FUNCTION_I(Rebecca, updateFromTime); + ADD_CALLBACK_FUNCTION_S(Rebecca, playSound); + ADD_CALLBACK_FUNCTION_S(Rebecca, playSound16); + ADD_CALLBACK_FUNCTION_SIIS(Rebecca, callSavepoint); + ADD_CALLBACK_FUNCTION_S(Rebecca, draw); + ADD_CALLBACK_FUNCTION_SI(Rebecca, enterExitCompartment); + ADD_CALLBACK_FUNCTION_SI(Rebecca, enterExitCompartment2); + ADD_CALLBACK_FUNCTION_SI(Rebecca, enterExitCompartment3); ADD_CALLBACK_FUNCTION(Rebecca, callbackActionOnDirection); ADD_CALLBACK_FUNCTION(Rebecca, callbackActionRestaurantOrSalon); - ADD_CALLBACK_FUNCTION(Rebecca, updateEntity); - ADD_CALLBACK_FUNCTION(Rebecca, updatePosition); - ADD_CALLBACK_FUNCTION(Rebecca, draw2); + ADD_CALLBACK_FUNCTION_II(Rebecca, updateEntity); + ADD_CALLBACK_FUNCTION_SII(Rebecca, updatePosition); + ADD_CALLBACK_FUNCTION_SSI(Rebecca, draw2); ADD_CALLBACK_FUNCTION(Rebecca, function15); - ADD_CALLBACK_FUNCTION(Rebecca, function16); - ADD_CALLBACK_FUNCTION(Rebecca, function17); + ADD_CALLBACK_FUNCTION_I(Rebecca, function16); + ADD_CALLBACK_FUNCTION_I(Rebecca, function17); ADD_CALLBACK_FUNCTION(Rebecca, function18); ADD_CALLBACK_FUNCTION(Rebecca, function19); - ADD_CALLBACK_FUNCTION(Rebecca, function20); + ADD_CALLBACK_FUNCTION_I(Rebecca, function20); ADD_CALLBACK_FUNCTION(Rebecca, chapter1); ADD_CALLBACK_FUNCTION(Rebecca, chapter1Handler); ADD_CALLBACK_FUNCTION(Rebecca, function23); @@ -129,6 +130,11 @@ IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// IMPLEMENT_FUNCTION_SI(9, Rebecca, enterExitCompartment3, ObjectIndex) + if (savepoint.action == kAction4) { + getEntities()->exitCompartment(_entityIndex, (ObjectIndex)params->param4); + callbackAction(); + return; + } Entity::enterExitCompartment(savepoint); IMPLEMENT_FUNCTION_END @@ -239,7 +245,7 @@ IMPLEMENT_FUNCTION_I(16, Rebecca, function16, bool) if (getEntities()->isInSalon(kEntityPlayer)) getEntities()->updateFrame(kEntityRebecca); - setCallback(4); + setCallback(5); setup_callbackActionOnDirection(); break; @@ -442,7 +448,7 @@ IMPLEMENT_FUNCTION(19, Rebecca, function19) if (getEntities()->isInRestaurant(kEntityPlayer)) getEntities()->updateFrame(kEntityRebecca); - setCallback(4); + setCallback(3); setup_callbackActionOnDirection(); break; @@ -563,6 +569,30 @@ label_callback: case kActionKnock: case kActionOpenDoor: + if (params->param2) { + getObjects()->update(kObjectCompartmentE, kEntityRebecca, kObjectLocation1, kCursorNormal, kCursorNormal); + getObjects()->update(kObject52, kEntityRebecca, kObjectLocation1, kCursorNormal, kCursorNormal); + if (savepoint.param.intValue == kObject52) { + setCallback(8); + setup_playSound(getSound()->justAMinuteCath()); + } else if (getInventory()->hasItem(kItemPassengerList)) { + if (rnd(2)) { + setCallback(9); + setup_playSound(getSound()->wrongDoorCath()); + } else { + setCallback(10); + setup_playSound(params->param4 ? "CAT1509" : (rnd(2) ? "CAT1508" : "CAT1508A")); + } + } else { + setCallback(11); + setup_playSound(getSound()->wrongDoorCath()); + } + } else { + getObjects()->update(kObjectCompartmentE, kEntityRebecca, kObjectLocation1, kCursorNormal, kCursorNormal); + getObjects()->update(kObject52, kEntityRebecca, kObjectLocation1, kCursorNormal, kCursorNormal); + setCallback(savepoint.action == kActionKnock ? 4 : 5); + setup_playSound(savepoint.action == kActionKnock ? "LIB012" : "LIB013"); + } break; case kActionDefault: @@ -955,7 +985,7 @@ IMPLEMENT_FUNCTION(25, Rebecca, function25) case 1: setCallback(2); - setup_function17(false); + setup_function17(true); break; case 2: @@ -1109,7 +1139,7 @@ IMPLEMENT_FUNCTION(30, Rebecca, function30) } } - if (!params->param3 && !params->param2 && params->param5 != kTimeInvalid) { + if (params->param3 && !params->param2 && params->param5 != kTimeInvalid) { if (getState()->time <= kTime10881000) { if (!getEntities()->isInSalon(kEntityPlayer) || !params->param5) @@ -1231,13 +1261,15 @@ IMPLEMENT_FUNCTION(34, Rebecca, function34) break; case kActionNone: - if (params->param2 == kTimeInvalid) { + if (params->param2 != kTimeInvalid) { if (getState()->time <= kTime1386000) { if (!getEntities()->isInRestaurant(kEntityPlayer) || !params->param2) params->param2 = (uint)getState()->time; if (params->param2 >= getState()->time) { - Entity::timeCheckCallback(kTime2052000, params->param3, 1, WRAP_SETUP_FUNCTION(Rebecca, setup_function19)); + if (params->param1) { + Entity::timeCheckCallback(kTime2052000, params->param3, 3, WRAP_SETUP_FUNCTION(Rebecca, setup_function19)); + } break; } } @@ -1247,7 +1279,9 @@ IMPLEMENT_FUNCTION(34, Rebecca, function34) getSavePoints()->push(kEntityRebecca, kEntityWaiter1, kAction223712416); } - Entity::timeCheckCallback(kTime2052000, params->param3, 1, WRAP_SETUP_FUNCTION(Rebecca, setup_function19)); + if (params->param1) { + Entity::timeCheckCallback(kTime2052000, params->param3, 3, WRAP_SETUP_FUNCTION(Rebecca, setup_function19)); + } break; case kActionEndSound: @@ -1785,7 +1819,7 @@ IMPLEMENT_FUNCTION(48, Rebecca, function48) getObjects()->update(kObjectCompartmentE, kEntityRebecca, kObjectLocation1, kCursorNormal, kCursorNormal); if (params->param1) { - params->param1 = 0; + params->param2 = 1; setCallback(2); setup_playSound(getSound()->justCheckingCath()); |