scummvm/engines/lastexpress/entities/august.cpp
2022-10-23 22:46:19 +02:00

3564 lines
93 KiB
C++

/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "lastexpress/entities/august.h"
#include "lastexpress/entities/alexei.h"
#include "lastexpress/entities/salko.h"
#include "lastexpress/entities/verges.h"
#include "lastexpress/game/action.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"
#include "lastexpress/game/scenes.h"
#include "lastexpress/game/state.h"
#include "lastexpress/sound/queue.h"
#include "lastexpress/lastexpress.h"
namespace LastExpress {
August::August(LastExpressEngine *engine) : Entity(engine, kEntityAugust) {
ADD_CALLBACK_FUNCTION(August, reset);
ADD_CALLBACK_FUNCTION_I(August, updateFromTime);
ADD_CALLBACK_FUNCTION_S(August, draw);
ADD_CALLBACK_FUNCTION_SII(August, updatePosition);
ADD_CALLBACK_FUNCTION_SI(August, enterExitCompartment);
ADD_CALLBACK_FUNCTION_SI(August, enterExitCompartment2);
ADD_CALLBACK_FUNCTION_SI(August, enterExitCompartment3);
ADD_CALLBACK_FUNCTION(August, callbackActionOnDirection);
ADD_CALLBACK_FUNCTION_SIIS(August, callSavepoint);
ADD_CALLBACK_FUNCTION_IIS(August, callSavepointNoDrawing);
ADD_CALLBACK_FUNCTION_SSI(August, draw2);
ADD_CALLBACK_FUNCTION_S(August, playSound);
ADD_CALLBACK_FUNCTION_S(August, playSound16);
ADD_CALLBACK_FUNCTION(August, callbackActionRestaurantOrSalon);
ADD_CALLBACK_FUNCTION_II(August, savegame);
ADD_CALLBACK_FUNCTION_II(August, updateEntity);
ADD_CALLBACK_FUNCTION_I(August, function17);
ADD_CALLBACK_FUNCTION_II(August, updateEntity2);
ADD_CALLBACK_FUNCTION_TYPE(August, function19, EntityParametersIISS);
ADD_CALLBACK_FUNCTION_TYPE(August, function20, EntityParametersISSI);
ADD_CALLBACK_FUNCTION_I(August, function21);
ADD_CALLBACK_FUNCTION(August, chapter1);
ADD_CALLBACK_FUNCTION_I(August, function23);
ADD_CALLBACK_FUNCTION(August, dinner);
ADD_CALLBACK_FUNCTION(August, chapter1Handler);
ADD_CALLBACK_FUNCTION(August, function26);
ADD_CALLBACK_FUNCTION(August, function27);
ADD_CALLBACK_FUNCTION(August, function28);
ADD_CALLBACK_FUNCTION(August, function29);
ADD_CALLBACK_FUNCTION(August, restaurant);
ADD_CALLBACK_FUNCTION(August, function31);
ADD_CALLBACK_FUNCTION(August, function32);
ADD_CALLBACK_FUNCTION(August, function33);
ADD_CALLBACK_FUNCTION(August, function34);
ADD_CALLBACK_FUNCTION(August, chapter2);
ADD_CALLBACK_FUNCTION(August, chapter2Handler);
ADD_CALLBACK_FUNCTION(August, function37);
ADD_CALLBACK_FUNCTION(August, function38);
ADD_CALLBACK_FUNCTION(August, function39);
ADD_CALLBACK_FUNCTION(August, chapter3);
ADD_CALLBACK_FUNCTION_II(August, function41);
ADD_CALLBACK_FUNCTION_III(August, function42);
ADD_CALLBACK_FUNCTION(August, chapter3Handler);
ADD_CALLBACK_FUNCTION(August, function44);
ADD_CALLBACK_FUNCTION(August, function45);
ADD_CALLBACK_FUNCTION(August, function46);
ADD_CALLBACK_FUNCTION(August, function47);
ADD_CALLBACK_FUNCTION(August, function48);
ADD_CALLBACK_FUNCTION(August, function49);
ADD_CALLBACK_FUNCTION(August, function50);
ADD_CALLBACK_FUNCTION(August, function51);
ADD_CALLBACK_FUNCTION(August, function52);
ADD_CALLBACK_FUNCTION(August, function53);
ADD_CALLBACK_FUNCTION(August, function54);
ADD_CALLBACK_FUNCTION(August, function55);
ADD_CALLBACK_FUNCTION(August, function56);
ADD_CALLBACK_FUNCTION(August, chapter4);
ADD_CALLBACK_FUNCTION(August, chapter4Handler);
ADD_CALLBACK_FUNCTION(August, function59);
ADD_CALLBACK_FUNCTION(August, function60);
ADD_CALLBACK_FUNCTION(August, function61);
ADD_CALLBACK_FUNCTION(August, function62);
ADD_CALLBACK_FUNCTION(August, function63);
ADD_CALLBACK_FUNCTION(August, function64);
ADD_CALLBACK_FUNCTION(August, function65);
ADD_CALLBACK_FUNCTION(August, chapter5);
ADD_CALLBACK_FUNCTION(August, chapter5Handler);
ADD_CALLBACK_FUNCTION(August, function68);
ADD_CALLBACK_FUNCTION(August, unhookCars);
ADD_NULL_FUNCTION();
}
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(1, August, reset)
Entity::reset(savepoint, kClothes2, true);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION_I(2, August, updateFromTime, uint32)
Entity::updateFromTime(savepoint);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION_S(3, August, draw)
Entity::draw(savepoint);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION_SII(4, August, updatePosition, CarIndex, Position)
Entity::updatePosition(savepoint);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION_SI(5, August, enterExitCompartment, ObjectIndex)
Entity::enterExitCompartment(savepoint);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION_SI(6, August, enterExitCompartment2, ObjectIndex)
Entity::enterExitCompartment(savepoint, kPosition_6470, kPosition_6130, kCarGreenSleeping, kObjectCompartment3, true, true);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION_SI(7, August, enterExitCompartment3, ObjectIndex)
if (savepoint.action == kAction4) {
getEntities()->exitCompartment(kEntityAugust, (ObjectIndex)params->param4);
callbackAction();
return;
}
Entity::enterExitCompartment(savepoint);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(8, August, callbackActionOnDirection)
Entity::callbackActionOnDirection(savepoint);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION_SIIS(9, August, callSavepoint, EntityIndex, ActionIndex)
Entity::callSavepoint(savepoint);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION_IIS(10, August, callSavepointNoDrawing, EntityIndex, ActionIndex)
switch (savepoint.action) {
default:
break;
case kActionExitCompartment:
if (!params->param6)
getSavePoints()->call(kEntityAugust, (EntityIndex)params->param1, (ActionIndex)params->param2, params->seq);
callbackAction();
break;
case kAction10:
if (!params->param6) {
getSavePoints()->call(kEntityAugust, (EntityIndex)params->param1, (ActionIndex)params->param2, params->seq);
params->param6 = 1;
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION_SSI(11, August, draw2, EntityIndex)
Entity::draw2(savepoint);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION_S(12, August, playSound)
Entity::playSound(savepoint);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION_S(13, August, playSound16)
Entity::playSound(savepoint, false, kVolumeFull);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(14, August, callbackActionRestaurantOrSalon)
Entity::callbackActionRestaurantOrSalon(savepoint);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION_II(15, August, savegame, SavegameType, uint32)
Entity::savegame(savepoint);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION_II(16, August, updateEntity, CarIndex, EntityPosition)
if (savepoint.action == kActionExcuseMeCath) {
getProgress().eventMetAugust ? getSound()->playSound(kEntityPlayer, rnd(2) ? "CAT1002A" : "CAT1002") : getSound()->excuseMeCath();
return;
}
Entity::updateEntity(savepoint, true);
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION_I(17, August, function17, TimeValue)
switch (savepoint.action) {
default:
break;
case kActionNone:
if (params->param1 < getState()->time && !params->param2) {
params->param2 = 1;
callbackAction();
break;
}
if (getEntities()->isPlayerInCar(kCarGreenSleeping) || getEntities()->isPlayerInCar(kCarRedSleeping)) {
if (getEntities()->isInsideTrainCar(kEntityPlayer, kCarGreenSleeping)) {
setCallback(2);
setup_updateEntity2(kCarGreenSleeping, kPosition_540);
} else {
setCallback(3);
setup_updateEntity2(kCarRedSleeping, kPosition_9460);
}
}
break;
case kActionDefault:
ENTITY_PARAM(0, 1) = 0;
setCallback(1);
setup_updateEntity2(kCarRedSleeping, kPosition_540);
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
if (ENTITY_PARAM(0, 1)) {
callbackAction();
break;
}
getEntities()->clearSequences(kEntityAugust);
break;
case 2:
case 3:
if (ENTITY_PARAM(0, 1)) {
callbackAction();
break;
}
getEntities()->clearSequences(kEntityAugust);
setCallback(4);
setup_updateFromTime(450);
break;
case 4:
setCallback(5);
setup_updateEntity2(kCarRedSleeping, kPosition_540);
break;
case 5:
if (ENTITY_PARAM(0, 1)) {
callbackAction();
break;
}
getEntities()->clearSequences(kEntityAugust);
break;
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION_II(18, August, updateEntity2, CarIndex, EntityPosition)
switch (savepoint.action) {
default:
break;
case kActionNone:
if (getEntities()->updateEntity(_entityIndex, (CarIndex)params->param1, (EntityPosition)params->param2)) {
callbackAction();
} else if (getEntities()->isDistanceBetweenEntities(kEntityAugust, kEntityPlayer, 1000)
&& !getEntities()->isInGreenCarEntrance(kEntityPlayer)
&& !getEntities()->isInsideCompartments(kEntityPlayer)
&& !getEntities()->checkFields10(kEntityPlayer)) {
if (getData()->car == kCarGreenSleeping || getData()->car == kCarRedSleeping) {
ENTITY_PARAM(0, 1) = 1;
callbackAction();
}
}
break;
case kActionDefault:
if (getEntities()->updateEntity(_entityIndex, (CarIndex)params->param1, (EntityPosition)params->param2))
callbackAction();
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION_II(19, August, function19, bool, bool)
// Expose parameters as IISS and ignore the default exposed parameters
EntityData::EntityParametersIISS *parameters = (EntityData::EntityParametersIISS*)_data->getCurrentParameters();
switch (savepoint.action) {
default:
break;
case kAction1:
getData()->inventoryItem = kItemNone;
getSound()->playSound(kEntityPlayer, "CAT1002");
getSound()->playSound(kEntityAugust, "AUG3101", kSoundVolumeEntityDefault, 15);
break;
case kActionDefault:
getData()->inventoryItem = kItemNone;
switch (getProgress().chapter) {
default:
break;
case kChapter1:
Common::strcpy_s(parameters->seq1, "626");
break;
case kChapter2:
case kChapter3:
if (getData()->clothes != kClothes2) {
Common::strcpy_s(parameters->seq1, "666");
break;
}
// fall through
case kChapter4:
case kChapter5:
Common::strcpy_s(parameters->seq1, "696");
break;
}
getSavePoints()->push(kEntityAugust, kEntityMertens, kAction303343617);
Common::strcpy_s(parameters->seq2, parameters->seq1);
Common::strcat_s(parameters->seq2, "Pc");
getEntities()->drawSequenceLeft(kEntityAugust, parameters->seq2);
getEntities()->enterCompartment(kEntityAugust, kObjectCompartment3, true);
setCallback(1);
setup_playSound("AUG2096");
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
Common::strcpy_s(parameters->seq2, parameters->seq1);
Common::strcat_s(parameters->seq2, "Qc");
getEntities()->drawSequenceLeft(kEntityAugust, parameters->seq2);
if (parameters->param2)
getData()->inventoryItem = kItem147;
break;
case 2:
Common::strcpy_s(parameters->seq2, parameters->seq1);
Common::strcat_s(parameters->seq2, parameters->param1 ? "Fc" : "Dc");
setCallback(3);
setup_enterExitCompartment2(parameters->seq2, kObjectCompartment3);
break;
case 3:
getEntities()->exitCompartment(kEntityAugust, kObjectCompartment3, true);
getData()->location = kLocationInsideCompartment;
getEntities()->clearSequences(kEntityAugust);
callbackAction();
break;
}
break;
case kAction69239528:
getData()->inventoryItem = kItemNone;
setCallback(2);
setup_updateFromTime(75);
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION_I(20, August, function20, bool)
// Expose parameters as ISSI and ignore the default exposed parameters
EntityData::EntityParametersISSI *parameters = (EntityData::EntityParametersISSI*)_data->getCurrentParameters();
switch (savepoint.action) {
default:
break;
case kActionDefault:
switch (getProgress().chapter) {
default:
break;
case kChapter1:
Common::strcpy_s(parameters->seq1, "626");
break;
case kChapter2:
case kChapter3:
if (getData()->clothes != kClothes2) {
Common::strcpy_s(parameters->seq1, "666");
break;
}
// fall through
case kChapter4:
case kChapter5:
Common::strcpy_s(parameters->seq1, "696");
break;
}
if (parameters->param1) {
Common::String sequence = Common::String::format("%s%s", parameters->seq1, "Gc");
assert(sequence.size() <= 12); // .size() does not count terminating zero
Common::strcpy_s(parameters->seq2, sequence.c_str());
getObjects()->update(kObjectCompartment3, kEntityPlayer, kObjectLocation1, kCursorKeepValue, kCursorKeepValue);
} else {
Common::String sequence = Common::String::format("%s%s", parameters->seq1, "Ec");
assert(sequence.size() <= 12);
Common::strcpy_s(parameters->seq2, sequence.c_str());
}
setCallback(1);
setup_enterExitCompartment(parameters->seq2, kObjectCompartment3);
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1: {
getData()->location = kLocationOutsideCompartment;
Common::String sequence2 = Common::String::format("%s%s", parameters->seq1, "Pc");
assert(sequence2.size() <= 12);
Common::strcpy_s(parameters->seq2, sequence2.c_str());
getEntities()->drawSequenceLeft(kEntityAugust, parameters->seq2);
getEntities()->enterCompartment(kEntityAugust, kObjectCompartment3, true);
if (getProgress().chapter != kChapter3 || getState()->time >= kTime1998000) {
setCallback(3);
setup_playSound("AUG2095");
} else {
setCallback(2);
setup_playSound("AUG2094");
}
}
break;
case 2:
case 3: {
getSavePoints()->push(kEntityAugust, kEntityMertens, kAction269436673);
Common::String sequence = Common::String::format("%s%s", parameters->seq1, "Qc");
assert(sequence.size() <= 13);
Common::strcpy_s(parameters->seq2, sequence.c_str());
getEntities()->drawSequenceLeft(kEntityAugust, parameters->seq2);
}
break;
}
break;
case kAction69239528:
getObjects()->update(kObjectCompartment3, kEntityPlayer, kObjectLocation1, kCursorHandKnock, kCursorHand);
getEntities()->exitCompartment(kEntityAugust, kObjectCompartment3, true);
callbackAction();
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION_I(21, August, function21, TimeValue)
switch (savepoint.action) {
default:
break;
case kActionNone:
if (!params->param4 && params->param1 < getState()->time && !params->param7) {
params->param7 = 1;
getObjects()->update(kObjectCompartment3, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
callbackAction();
break;
}
if (params->param2) {
if (!Entity::updateParameter(params->param8, getState()->timeTicks, 75))
goto label_continue;
params->param2 = 0;
params->param3 = 1;
getObjects()->update(kObjectCompartment3, kEntityAugust, kObjectLocation1, kCursorNormal, (getProgress().eventMetAugust || getProgress().jacket != kJacketGreen) ? kCursorNormal : kCursorHand);
}
params->param8 = 0;
label_continue:
if (getProgress().chapter != kChapter1)
break;
if (params->param6) {
if (Entity::updateParameter(CURRENT_PARAM(1, 1), getState()->time, 6300)) {
params->param6 = 0;
CURRENT_PARAM(1, 1) = 0;
}
}
if (!params->param4
&& !getProgress().eventMetAugust
&& !params->param6
&& (params->param1 - 4500) > getState()->time
&& !getProgress().field_14) {
getProgress().field_14 = 2;
getData()->location = kLocationOutsideCompartment;
getData()->entityPosition = kPosition_8200;
setCallback(1);
setup_function20(false);
}
break;
case kActionOpenDoor:
if (getProgress().chapter == kChapter1 && !getProgress().eventMetAugust && getProgress().jacket == kJacketGreen) {
getObjects()->update(kObjectOutsideTylerCompartment, kEntityPlayer, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue);
getEntityData(kEntityPlayer)->location = kLocationInsideCompartment;
setCallback(6);
setup_savegame(kSavegameTypeEvent, kEventMeetAugustHisCompartment);
break;
}
// fall through
case kActionKnock:
getObjects()->update(kObjectCompartment3, kEntityAugust, kObjectLocation1, kCursorNormal, kCursorNormal);
if (params->param2) {
if (getInventory()->hasItem(kItemPassengerList)) {
setCallback(12);
setup_playSound(rnd(2) ? getSound()->wrongDoorCath() : (rnd(2) ? "CAT1502" : "CAT1502A"));
} else {
setCallback(13);
setup_playSound(getSound()->wrongDoorCath());
}
} else {
setCallback(savepoint.action == kActionKnock ? 7 : 8);
setup_playSound(savepoint.action == kActionKnock ? "LIB012" : "LIB013");
}
break;
case kActionDefault:
getObjects()->update(kObjectCompartment3, kEntityAugust, kObjectLocation1, kCursorHandKnock, kCursorHand);
break;
case kActionDrawScene:
if (params->param2 || params->param3) {
getObjects()->update(kObjectCompartment3, kEntityAugust, kObjectLocation1, kCursorHandKnock, kCursorHand);
params->param2 = 0;
params->param3 = 0;
params->param5 = 0;
}
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
setCallback(2);
setup_updateEntity(kCarGreenSleeping, kPosition_8200);
break;
case 2:
setCallback(3);
setup_function23((TimeValue)(params->param1 - 2700));
break;
case 3:
setCallback(4);
setup_updateEntity(kCarGreenSleeping, kPosition_6470);
break;
case 4:
setCallback(5);
setup_function19(false, false);
break;
case 5:
if (getProgress().field_14 == 2)
getProgress().field_14 = 0;
getObjects()->update(kObjectCompartment3, kEntityAugust, kObjectLocation1, kCursorHandKnock, kCursorHand);
params->param2 = 0;
params->param3 = 0;
params->param5 = 0;
params->param6 = 1;
CURRENT_PARAM(1, 1) = 0;
break;
case 6:
getAction()->playAnimation(getObjects()->get(kObjectCompartment3).model == kObjectModel1 ? kEventMeetAugustHisCompartmentBed : kEventMeetAugustHisCompartment);
getProgress().eventMetAugust = true;
getObjects()->update(kObjectCompartment3, kEntityAugust, kObjectLocation1, kCursorNormal, kCursorNormal);
params->param2 = 0;
params->param3 = 1;
getScenes()->loadSceneFromObject(kObjectCompartment3, true);
break;
case 7:
case 8:
++params->param5;
switch(params->param5) {
default:
// Fall to next case
break;
case 1:
setCallback(9);
setup_playSound(rnd(2) ? "AUG1128A" : "AUG1128B");
return;
case 2:
setCallback(10);
setup_playSound(getProgress().eventMetAugust ? "AUG1128E" : "AUG1128G");
return;
case 3:
setCallback(11);
setup_playSound(getProgress().eventMetAugust ? "AUG1128F" : "AUG1128H");
return;
}
// fall through
case 9:
case 10:
case 11:
case 12:
case 13:
{
CursorStyle cursor1 = (getCallback() == 12 || getCallback() == 13) ? kCursorNormal : kCursorTalk;
CursorStyle cursor2 = (getProgress().eventMetAugust || getProgress().jacket != kJacketGreen) ? kCursorNormal : kCursorHand;
getObjects()->update(kObjectCompartment3, kEntityAugust, kObjectLocation1, cursor1, cursor2);
}
if (getCallback() == 12 || getCallback() == 13) {
params->param2 = 0;
params->param3 = 1;
} else {
params->param2= 1;
}
break;
case 14:
setCallback(15);
setup_updateFromTime(75);
break;
case 15:
setCallback(16);
setup_playSound("AUG1128I");
break;
case 16:
getSavePoints()->push(kEntityAugust, kEntityMertens, kAction100906246);
break;
case 17:
getData()->location = kLocationOutsideCompartment;
getSavePoints()->push(kEntityAugust, kEntityMertens, kAction156567128);
getEntities()->drawSequenceLeft(kEntityAugust, "626Lc");
getEntities()->enterCompartment(kEntityAugust, kObjectCompartment3, true);
break;
case 18:
getEntities()->exitCompartment(kEntityAugust, kObjectCompartment3, true);
getData()->location = kLocationInsideCompartment; // BUG: in the original, this is set to 6470
getEntities()->clearSequences(kEntityAugust);
getObjects()->update(kObjectCompartment3, kEntityAugust, kObjectLocation1, kCursorHandKnock, kCursorHand);
params->param4 = 0;
break;
}
break;
case kAction124697504:
getSound()->playSound(kEntityAugust, "CON1023A");
setCallback(18);
setup_enterExitCompartment("626Mc", kObjectCompartment3);
break;
case kAction192849856:
setCallback(17);
setup_enterExitCompartment("626Kc", kObjectCompartment3);
break;
case kAction221617184:
params->param4 = 1;
getSavePoints()->push(kEntityAugust, kEntityMertens, kAction102675536);
setCallback(14);
setup_playSound("CON1023");
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(22, August, chapter1)
switch (savepoint.action) {
default:
break;
case kActionNone:
Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(August, setup_chapter1Handler));
break;
case kActionDefault:
getObjects()->update(kObjectCompartment3, kEntityPlayer, kObjectLocation1, kCursorHandKnock, kCursorHand);
getObjects()->update(kObject11, kEntityPlayer, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue);
getData()->entityPosition = kPosition_4691;
getData()->location = kLocationInsideCompartment;
getData()->car = kCarRestaurant;
getData()->clothes = kClothesDefault;
getProgress().eventMetAugust = false;
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION_I(23, August, function23, TimeValue)
switch (savepoint.action) {
default:
break;
case kActionNone:
if (getProgress().field_14 == 29 || getProgress().field_14 == 3) {
if (params->param3) {
getData()->location = kLocationOutsideCompartment;
setCallback(2);
setup_enterExitCompartment("626Ea", kObjectCompartment1);
} else {
getEntities()->exitCompartment(kEntityAugust, kObjectCompartment1, true);
getObjects()->update(kObjectCompartment1, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
callbackAction();
}
break;
}
if (!params->param2) {
if (!CURRENT_PARAM(1, 3))
CURRENT_PARAM(1, 3) = getState()->timeTicks + 75;
if (CURRENT_PARAM(1, 3) >= getState()->timeTicks)
goto label_callback_9;
if (!params->param5) {
setCallback(8);
setup_playSound("AUG1002B");
break;
}
label_callback_8:
if (Entity::updateParameter(CURRENT_PARAM(1, 4), getState()->timeTicks, 75)) {
getEntities()->exitCompartment(kEntityAugust, kObjectCompartment1, true);
if (getProgress().eventCorpseMovedFromFloor) {
setCallback(9);
setup_enterExitCompartment("626Da", kObjectCompartment1);
} else if (getEntities()->isInsideTrainCar(kEntityPlayer, kCarGreenSleeping)) {
setCallback(10);
setup_enterExitCompartment3("626Da", kObjectCompartment1);
} else {
getScenes()->loadSceneFromPosition(kCarNone, 1);
getObjects()->update(kObjectOutsideTylerCompartment, kEntityPlayer, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue);
setCallback(11);
setup_savegame(kSavegameTypeEvent, kEventAugustFindCorpse);
}
break;
}
label_callback_9:
if (params->param3 && params->param1 < getState()->time && !CURRENT_PARAM(1, 5)) {
CURRENT_PARAM(1, 5) = 1;
getObjects()->update(kObjectCompartment1, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
setCallback(12);
setup_enterExitCompartment("626Ea", kObjectCompartment1);
}
break;
}
if (!CURRENT_PARAM(1, 1))
CURRENT_PARAM(1, 1) = getState()->timeTicks + 45;
if (CURRENT_PARAM(1, 1) >= getState()->timeTicks)
break;
if (getObjects()->get(kObjectCompartment1).status == kObjectLocation1) {
if (!Entity::updateParameter(CURRENT_PARAM(1, 2), getState()->timeTicks, 75))
break;
getObjects()->update(kObjectCompartment1, kEntityAugust, getObjects()->get(kObjectCompartment1).status, kCursorNormal, kCursorNormal);
params->param6++;
switch (params->param6) {
default:
break;
case 1:
setCallback(5);
setup_playSound("LIB013");
return;
case 2:
setCallback(7);
setup_playSound("LIB012");
return;
case 3:
params->param8++;
if (params->param8 >= 3) {
getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).status, kCursorHandKnock, kCursorHand);
callbackAction();
return;
}
params->param6 = 0;
}
getObjects()->update(kObjectCompartment1, kEntityAugust, getObjects()->get(kObjectCompartment1).status, params->param4 ? kCursorNormal : kCursorTalk, kCursorHand);
CURRENT_PARAM(1, 2) = 0;
} else {
if (getProgress().eventCorpseMovedFromFloor && getProgress().jacket != kJacketBlood) {
params->param7 = (getObjects()->get(kObjectCompartment1).model == kObjectModel1) ? kEventMeetAugustTylerCompartmentBed : kEventMeetAugustTylerCompartment;
getObjects()->update(kObjectOutsideTylerCompartment, kEntityPlayer, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue);
setCallback(4);
setup_savegame(kSavegameTypeEvent, kEventMeetAugustTylerCompartment);
} else {
getObjects()->update(kObjectOutsideTylerCompartment, kEntityPlayer, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue);
setCallback(3);
setup_savegame(kSavegameTypeEvent, kEventAugustFindCorpse);
}
}
break;
case kActionKnock:
if (params->param3) {
getObjects()->update(kObjectCompartment1, kEntityAugust, kObjectLocationNone, kCursorNormal, kCursorNormal);
setCallback(15);
setup_playSound("LIB012");
} else if (!params->param4) {
getObjects()->update(kObjectCompartment1, kEntityAugust, getObjects()->get(kObjectCompartment1).status, kCursorNormal, kCursorNormal);
setCallback(17);
setup_playSound16("AUG1002A");
}
break;
case kActionOpenDoor:
if (getProgress().eventCorpseMovedFromFloor && getProgress().jacket != kJacketBlood) {
if (params->param3) {
getEntityData(kEntityPlayer)->location = kLocationInsideCompartment;
params->param7 = (getObjects()->get(kObjectCompartment1).model == kObjectModel1) ? kEventMeetAugustHisCompartmentBed : kEventMeetAugustHisCompartment;
} else {
params->param7 = (getObjects()->get(kObjectCompartment1).model == kObjectModel1) ? kEventMeetAugustTylerCompartmentBed : kEventMeetAugustTylerCompartment;
}
setCallback(14);
setup_savegame(kSavegameTypeEvent, kEventMeetAugustTylerCompartment);
} else {
getObjects()->update(kObjectOutsideTylerCompartment, kEntityPlayer, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue);
setCallback(13);
setup_savegame(kSavegameTypeEvent, kEventAugustFindCorpse);
}
break;
case kActionDefault:
if (getEntities()->isInsideCompartment(kEntityPlayer, kCarGreenSleeping, kPosition_8200)
|| getEntities()->isInsideCompartment(kEntityPlayer, kCarGreenSleeping, kPosition_7850)
|| getEntities()->isOutsideAlexeiWindow()) {
getObjects()->update(kObjectCompartment1, kEntityAugust, getObjects()->get(kObjectCompartment1).status, kCursorNormal, kCursorNormal);
if (getEntities()->isOutsideAlexeiWindow())
getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49);
getSound()->playSound(kEntityPlayer, "LIB012");
getObjects()->update(kObjectCompartment1, kEntityAugust, getObjects()->get(kObjectCompartment1).status, kCursorTalk, kCursorHand);
params->param2 = 1;
} else {
setCallback(1);
setup_enterExitCompartment("626Aa", kObjectCompartment1);
}
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
getEntities()->drawSequenceLeft(kEntityAugust, "626Ba");
getEntities()->enterCompartment(kEntityAugust, kObjectCompartment1, true);
break;
case 2:
getObjects()->update(kObjectCompartment1, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
callbackAction();
break;
case 3:
getSound()->playSound(kEntityPlayer, "LIB014");
getAction()->playAnimation(kEventAugustFindCorpse);
if (getEvent(kEventDinerAugustOriginalJacket))
getLogic()->gameOver(kSavegameTypeEvent2, kEventDinerAugustOriginalJacket, getProgress().eventCorpseFound ? kSceneGameOverStopPolice : kSceneGameOverPolice, true);
else if (getProgress().eventCorpseMovedFromFloor)
getLogic()->gameOver(kSavegameTypeIndex, 1, kSceneGameOverBloodJacket, true);
else
getLogic()->gameOver(kSavegameTypeIndex, 1, getProgress().eventCorpseFound ? kSceneGameOverStopPolice : kSceneGameOverPolice, true);
break;
case 4:
getObjects()->update(kObjectCompartment1, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
getSound()->playSound(kEntityPlayer, "LIB014");
getEntities()->clearSequences(kEntityAugust);
getData()->location = kLocationInsideCompartment;
getAction()->playAnimation((EventIndex)params->param7);
getSound()->playSound(kEntityPlayer, "LIB015");
getProgress().eventMetAugust = true;
getData()->location = kLocationOutsideCompartment;
getScenes()->loadScene(kScene41);
callbackAction();
break;
case 5:
setCallback(6);
setup_playSound16("AUG1002B");
break;
case 6:
case 7:
getObjects()->update(kObjectCompartment1, kEntityAugust, getObjects()->get(kObjectCompartment1).status, params->param4 ? kCursorNormal : kCursorTalk, kCursorHand);
CURRENT_PARAM(1, 2) = 0;
break;
case 8:
params->param5 = 1;
goto label_callback_8;
case 9:
params->param3 = 1;
getEntities()->clearSequences(kEntityAugust);
getData()->location = kLocationInsideCompartment;
getObjects()->update(kObjectCompartment1, kEntityAugust, kObjectLocationNone, kCursorHandKnock, kCursorHand);
goto label_callback_9;
case 10:
getObjects()->update(kObjectOutsideTylerCompartment, kEntityPlayer, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue);
setCallback(11);
setup_savegame(kSavegameTypeEvent, kEventAugustFindCorpse);
break;
case 11:
getAction()->playAnimation(kEventAugustFindCorpse);
getLogic()->gameOver(getEvent(kEventDinerAugustOriginalJacket) ? kSavegameTypeEvent2 : kSavegameTypeIndex,
getEvent(kEventDinerAugustOriginalJacket) ? kEventDinerAugustOriginalJacket : 1,
getProgress().eventCorpseFound ? kSceneGameOverStopPolice : kSceneGameOverPolice,
true);
break;
case 12:
getData()->location = kLocationOutsideCompartment;
callbackAction();
break;
case 13:
getSound()->playSound(kEntityPlayer, getObjects()->get(kObjectCompartment1).status == kObjectLocation1 ? "LIB032" : "LIB014");
getAction()->playAnimation(kEventAugustFindCorpse);
if (getEvent(kEventDinerAugustOriginalJacket))
getLogic()->gameOver(kSavegameTypeEvent2, kEventDinerAugustOriginalJacket, getProgress().eventCorpseFound ? kSceneGameOverStopPolice : kSceneGameOverPolice, true);
else if (getProgress().eventCorpseMovedFromFloor)
getLogic()->gameOver(kSavegameTypeIndex, 1, kSceneGameOverBloodJacket, true);
else
getLogic()->gameOver(kSavegameTypeIndex, 1, getProgress().eventCorpseFound ? kSceneGameOverStopPolice : kSceneGameOverPolice, true);
break;
case 14:
if (!params->param3)
getSound()->playSound(kEntityPlayer, getObjects()->get(kObjectCompartment1).status == kObjectLocation1 ? "LIB032" : "LIB014");
getObjects()->update(kObjectCompartment1, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
getObjects()->update(kObjectOutsideTylerCompartment, kEntityPlayer, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue);
getAction()->playAnimation((EventIndex)params->param7);
getProgress().eventMetAugust = true;
getData()->location = kLocationOutsideCompartment;
getScenes()->loadScene(kScene41);
callbackAction();
break;
case 15:
setCallback(16);
setup_playSound("AUG1128A");
break;
case 16:
getObjects()->update(kObjectCompartment1, kEntityAugust, kObjectLocationNone, kCursorHandKnock, kCursorHand);
break;
case 17:
params->param4 = 1;
getObjects()->update(kObjectCompartment1, kEntityAugust, getObjects()->get(kObjectCompartment1).status, kCursorNormal, kCursorHand);
break;
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(24, August, dinner)
switch (savepoint.action) {
default:
break;
case kActionDefault:
setCallback(1);
setup_savegame(kSavegameTypeEvent, kEventDinerAugust);
break;
case kActionCallback:
if (getCallback() == 1) {
getAction()->playAnimation(getEntities()->isInRestaurant(kEntityAlexei) ? kEventDinerAugustAlexeiBackground : kEventDinerAugust);
getProgress().eventMetAugust = true;
getScenes()->loadSceneFromPosition(kCarRestaurant, 61);
callbackAction();
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(25, August, chapter1Handler)
switch (savepoint.action) {
default:
break;
case kActionNone:
if (!params->param1 && getProgress().eventCorpseFound) {
getSavePoints()->push(kEntityAugust, kEntityPascale, kAction239072064);
params->param1 = 1;
}
if (getState()->time > kTime1080000 && !params->param3) {
params->param3 = 1;
if (!params->param1) {
getSavePoints()->push(kEntityAugust, kEntityPascale, kAction239072064);
params->param1 = 1;
}
}
if (getState()->time > kTime1093500 && getEntities()->isSomebodyInsideRestaurantOrSalon()) {
getData()->location = kLocationOutsideCompartment;
getData()->inventoryItem = kItemNone;
setCallback(1);
setup_callSavepoint("010J", kEntityTables3, kActionDrawTablesWithChairs, "010K");
}
break;
case kAction1:
params->param2 = 0;
getData()->inventoryItem = kItemNone;
getSavePoints()->push(kEntityAugust, kEntityPascale, kAction191604416);
if (getProgress().jacket == kJacketGreen) {
setCallback(3);
setup_dinner();
} else {
setCallback(4);
setup_savegame(kSavegameTypeEvent, kEventDinerAugustOriginalJacket);
}
break;
case kActionDefault:
getSavePoints()->push(kEntityAugust, kEntityTables3, kAction136455232);
getEntities()->drawSequenceLeft(kEntityAugust, "010B");
if (!getProgress().eventMetAugust)
params->param2 = kItemInvalid;
getData()->inventoryItem = (InventoryItem)params->param2;
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
getSavePoints()->push(kEntityAugust, kEntityWaiter1, kAction204704037);
getEntities()->drawSequenceRight(kEntityAugust, "803DS");
if (getEntities()->isInRestaurant(kEntityPlayer))
getEntities()->updateFrame(kEntityAugust);
setCallback(2);
setup_callbackActionOnDirection();
break;
case 2:
setup_function26();
break;
case 3:
setup_function28();
break;
case 4:
getSavePoints()->push(kEntityAugust, kEntityAlexei, kAction225182640);
getAction()->playAnimation(kEventDinerAugustOriginalJacket);
getObjects()->update(kObjectCompartment1, kEntityPlayer, kObjectLocation3, kCursorNormal, kCursorNormal);
getData()->location = kLocationOutsideCompartment;
getSavePoints()->push(kEntityAugust, kEntityTables3, kActionDrawTablesWithChairs, "010K");
getEntities()->drawSequenceRight(kEntityAugust, "010P");
getScenes()->loadSceneFromPosition(kCarRestaurant, 65);
setCallback(5);
setup_callbackActionOnDirection();
break;
case 5:
getSavePoints()->push(kEntityAugust, kEntityWaiter1, kAction204704037);
getEntities()->drawSequenceRight(kEntityAugust, "803DS");
if (getEntities()->isInRestaurant(kEntityPlayer))
getEntities()->updateFrame(kEntityAugust);
setCallback(6);
setup_callbackActionOnDirection();
break;
case 6:
getProgress().field_14 = 2;
setCallback(7);
setup_updateEntity(kCarGreenSleeping, kPosition_8200);
break;
case 7:
setCallback(8);
setup_function23(kTimeNone);
break;
case 8:
getLogic()->gameOver(kSavegameTypeIndex, 0, kSceneNone, true);
break;
}
break;
case kAction168046720:
getData()->inventoryItem = kItemNone;
break;
case kAction168627977:
getData()->inventoryItem = (InventoryItem)params->param2;
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(26, August, function26)
switch (savepoint.action) {
default:
break;
case kActionDefault:
if (getProgress().eventMetAugust || getProgress().field_14) {
setCallback(5);
setup_updateEntity(kCarGreenSleeping, kPosition_6470);
} else {
getProgress().field_14 = 2;
setCallback(1);
setup_updateEntity(kCarGreenSleeping, kPosition_8200);
}
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
setCallback(2);
setup_function23((TimeValue)(getState()->time + 13500));
break;
case 2:
setCallback(3);
setup_updateEntity(kCarGreenSleeping, kPosition_6470);
break;
case 3:
setCallback(4);
setup_function19(false, false);
break;
case 4:
if (getProgress().field_14 == 2)
getProgress().field_14 = 0;
setCallback(7);
setup_function21((TimeValue)(getState()->time + 900));
break;
case 5:
setCallback(6);
setup_function19(false, false);
break;
case 6:
setCallback(7);
setup_function21((TimeValue)(getState()->time + 900));
break;
case 7:
setup_function27();
break;
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(27, August, function27)
switch (savepoint.action) {
default:
break;
case kActionDefault:
setCallback(1);
setup_function20(false);
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
setCallback(2);
setup_updateEntity(kCarRestaurant, kPosition_850);
break;
case 2:
setCallback(3);
setup_callbackActionRestaurantOrSalon();
break;
case 3:
getData()->entityPosition = kPosition_1540;
getData()->location = kLocationOutsideCompartment;
setCallback(4);
setup_draw("803US");
break;
case 4:
getEntities()->drawSequenceRight(kEntityAugust, "010A");
if (getEntities()->isInSalon(kEntityPlayer))
getEntities()->updateFrame(kEntityAugust);
setCallback(5);
setup_callSavepointNoDrawing(kEntityTables3, kAction136455232, "BOGUS");
break;
case 5:
getData()->location = kLocationInsideCompartment;
setup_function28();
break;
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(28, August, function28)
switch (savepoint.action) {
default:
break;
case kAction1:
getData()->inventoryItem = kItemNone;
params->param1 = 0;
setCallback(3);
setup_dinner();
break;
case kActionDefault:
if (!getProgress().eventMetAugust && getProgress().jacket == kJacketGreen)
params->param1 = kItemInvalid;
getEntities()->drawSequenceLeft(kEntityAugust, "010B");
getSavePoints()->push(kEntityAugust, kEntityWaiter1, kAction304061224);
getData()->inventoryItem = (InventoryItem)params->param1;
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
getSavePoints()->push(kEntityAugust, kEntityWaiter1, kAction203859488);
getData()->inventoryItem = (InventoryItem)params->param1;
getEntities()->drawSequenceLeft(kEntityAugust, "010B");
break;
case 2:
getSavePoints()->push(kEntityAugust, kEntityWaiter1, kAction136702400);
getEntities()->drawSequenceLeft(kEntityAugust, "010B");
setup_function29();
break;
}
break;
case kAction168046720:
getData()->inventoryItem = kItemNone;
break;
case kAction168627977:
getData()->inventoryItem = (InventoryItem)params->param1;
break;
case kAction170016384:
getData()->inventoryItem = kItemNone;
getEntities()->drawSequenceLeft(kEntityWaiter1, "BLANK");
getEntities()->drawSequenceLeft(kEntityAugust, "010G");
setCallback(2);
setup_playSound("AUG1053");
break;
case kAction268773672:
getData()->inventoryItem = kItemNone;
getEntities()->drawSequenceLeft(kEntityAugust, "010D");
setCallback(1);
setup_playSound("AUG1052");
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(29, August, function29)
switch (savepoint.action) {
default:
break;
case kActionNone:
if (!getProgress().field_28 || params->param2 || params->param3 == kTimeInvalid)
break;
if (getState()->time <= kTime1134000) {
if (!getEntities()->isInRestaurant(kEntityPlayer)
|| getSoundQueue()->isBuffered("MRB1076") || getSoundQueue()->isBuffered("MRB1078") || getSoundQueue()->isBuffered("MRB1078A") || !params->param3)
params->param3 = (uint)getState()->time + 225;
if (params->param3 >= getState()->time)
break;
}
params->param3 = kTimeInvalid;
getData()->inventoryItem = kItemNone;
getProgress().field_28 = 0;
setup_restaurant();
break;
case kAction1:
getData()->inventoryItem = kItemNone;
params->param1 = kItemNone;
setCallback(1);
setup_dinner();
break;
case kActionDefault:
if (!getProgress().eventMetAugust && getProgress().jacket == kJacketGreen)
params->param1 = kItemInvalid;
getData()->inventoryItem = (InventoryItem)LOW_BYTE(params->param1);
getEntities()->drawSequenceLeft(kEntityAugust, "010H");
break;
case kAction168046720:
getData()->inventoryItem = kItemNone;
break;
case kAction168627977:
getData()->inventoryItem = (InventoryItem)LOW_BYTE(params->param1);
break;
case kAction189426612:
params->param2 = 1;
break;
case kAction235257824:
params->param2 = 0;
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(30, August, restaurant)
switch (savepoint.action) {
default:
break;
case kActionNone:
if (!Entity::updateParameter(params->param3, getState()->timeTicks, 75))
break;
getData()->inventoryItem = kItemInvalid;
break;
case kAction1:
params->param1 = 1;
getData()->inventoryItem = kItemNone;
getScenes()->loadSceneFromPosition(kCarRestaurant, 62);
getEntities()->updatePositionEnter(kEntityAugust, kCarRestaurant, 61);
getEntities()->updatePositionEnter(kEntityAugust, kCarRestaurant, 64);
break;
case kActionEndSound:
if (params->param1) {
getData()->inventoryItem = kItemNone;
getEntities()->updatePositionExit(kEntityAugust, kCarRestaurant, 61);
getEntities()->updatePositionExit(kEntityAugust, kCarRestaurant, 64);
setCallback(4);
setup_savegame(kSavegameTypeEvent, kEventAugustPresentAnna);
break;
}
if (params->param2) {
params->param2 = 0;
if (getProgress().eventMetAugust)
getData()->inventoryItem = kItemNone;
getSound()->playSound(kEntityAugust, "AUG1003A");
} else {
getData()->inventoryItem = kItemNone;
getSavePoints()->push(kEntityAugust, kEntityAnna, kAction201437056);
setCallback(8);
setup_draw("010P");
}
break;
case kActionDefault:
getSavePoints()->push(kEntityAugust, kEntityBoutarel, kAction135854206);
setCallback(1);
setup_updateFromTime(450);
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
setCallback(2);
setup_callbackActionRestaurantOrSalon();
break;
case 2:
getSavePoints()->push(kEntityAugust, kEntityAnna, kAction259136835);
getData()->location = kLocationOutsideCompartment;
setCallback(3);
setup_callSavepoint("010N", kEntityTables3, kActionDrawTablesWithChairs, "010K");
break;
case 3:
getSavePoints()->push(kEntityAugust, kEntityWaiter1, kAction292758554);
getSavePoints()->push(kEntityAugust, kEntityAnna, kAction122358304);
getEntities()->drawSequenceLeft(kEntityAugust, "001K");
getSound()->playSound(kEntityAugust, "AUG1003");
if (getEntities()->isInRestaurant(kEntityPlayer))
getProgress().field_60 = 1;
params->param2 = 1;
break;
case 4:
getAction()->playAnimation(getProgress().eventMetAugust ? kEventAugustPresentAnna : kEventAugustPresentAnnaFirstIntroduction);
getSavePoints()->push(kEntityAugust, kEntityAnna, kAction201437056);
getEntities()->drawSequenceRight(kEntityAugust, getProgress().eventMetAugust ? "803GS" : "010P");
getScenes()->loadSceneFromPosition(kCarRestaurant, getProgress().eventMetAugust ? 55 : 65);
setCallback(getProgress().eventMetAugust ? 5 : 6);
setup_callbackActionOnDirection();
break;
case 5:
case 7:
case 9:
getSavePoints()->push(kEntityAugust, kEntityBoutarel, kAction134466544);
setup_function31();
break;
case 6:
case 8:
getEntities()->drawSequenceRight(kEntityAugust, "803DS");
if (getEntities()->isInRestaurant(kEntityPlayer))
getEntities()->updateFrame(kEntityAugust);
setCallback(getCallback() + 1);
setup_callbackActionOnDirection();
break;
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(31, August, function31)
switch (savepoint.action) {
default:
break;
case kActionDefault:
setCallback(1);
setup_updateEntity(kCarGreenSleeping, kPosition_6470);
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
setCallback(2);
setup_function19(false, false);
break;
case 2:
setCallback(3);
setup_function21(kTime1161000);
break;
case 3:
case 4:
if (getProgress().field_14 == 29) {
setCallback(4);
setup_function21((TimeValue)(getState()->time + 900));
} else {
setup_function32();
}
break;
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(32, August, function32)
switch (savepoint.action) {
default:
break;
case kActionNone:
if (params->param6 != kTimeInvalid && Entity::updateParameterTime(kTime1179000, (!getEntities()->isInSalon(kEntityAnna) || getEntities()->isInSalon(kEntityPlayer)), params->param6, 0)) {
getSavePoints()->push(kEntityAugust, kEntityAnna, kAction123712592);
}
if (params->param1 && getEntities()->isSomebodyInsideRestaurantOrSalon()) {
if (!params->param4) {
params->param4 = (uint)getState()->time + 1800;
params->param5 = (uint)getState()->time + 9000;
}
if (params->param7 != kTimeInvalid && params->param4 < getState()->time) {
if (Entity::updateParameterTime((TimeValue)params->param5, getEntities()->isInSalon(kEntityPlayer), params->param7, 0)) {
getData()->location = kLocationOutsideCompartment;
setCallback(5);
setup_updatePosition("109D", kCarRestaurant, 56);
break;
}
}
}
if (params->param3) {
if (!Entity::updateParameter(params->param8, getState()->timeTicks, 90))
break;
getScenes()->loadSceneFromPosition(kCarRestaurant, 55);
} else {
params->param8 = 0;
}
break;
case kActionDefault:
setCallback(1);
setup_function20(false);
break;
case kActionDrawScene:
if (params->param2) {
if (getEntities()->isPlayerPosition(kCarRestaurant, 57)) {
getScenes()->loadSceneFromPosition(kCarRestaurant, 50);
params->param3 = true;
} else if (!getEntities()->isPlayerPosition(kCarRestaurant, 50)) {
params->param3 = false;
}
} else {
params->param3 = getEntities()->isPlayerPosition(kCarRestaurant, 56) && params->param1;
}
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
setCallback(2);
setup_updateEntity(kCarRestaurant, kPosition_850);
break;
case 2:
setCallback(3);
setup_callbackActionRestaurantOrSalon();
break;
case 3:
getData()->entityPosition = kPosition_1540;
getData()->location = kLocationOutsideCompartment;
setCallback(4);
setup_updatePosition("105A", kCarRestaurant, 57);
break;
case 4:
getData()->location = kLocationInsideCompartment;
getEntities()->drawSequenceLeft(kEntityAugust, "105B");
params->param2 = 1;
break;
case 5:
setCallback(6);
setup_updateEntity(kCarGreenSleeping, kPosition_6470);
break;
case 6:
setCallback(7);
setup_function19(false, false);
break;
case 7:
setup_function33();
break;
}
break;
case kAction122358304:
params->param2 = 0;
getEntities()->drawSequenceLeft(kEntityAugust, "BLANK");
break;
case kAction159332865:
getEntities()->drawSequenceLeft(kEntityAugust, "106E");
params->param1 = 1;
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(33, August, function33)
switch (savepoint.action) {
default:
break;
case kActionDefault:
setCallback(getProgress().eventMetAugust ? 1 : 2);
setup_function21(getProgress().eventMetAugust ? (TimeValue)(getState()->time + 9000) : kTimeBedTime);
break;
case kActionCallback:
if (getCallback() == 1 || getCallback() == 2)
setup_function34();
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(34, August, function34)
switch (savepoint.action) {
default:
break;
case kActionNone:
if (!getSoundQueue()->isBuffered(kEntityAugust) && getProgress().field_18 != 4)
getSound()->playSound(kEntityAugust, "AUG1057"); // August snoring
break;
case kActionDefault:
getObjects()->update(kObjectCompartment3, kEntityPlayer, kObjectLocation1, kCursorHandKnock, kCursorHand);
getData()->entityPosition = kPosition_6470;
getData()->location = kLocationInsideCompartment;
getData()->car = kCarGreenSleeping;
getEntities()->clearSequences(kEntityAugust);
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(35, August, chapter2)
switch (savepoint.action) {
default:
break;
case kActionNone:
setup_chapter2Handler();
break;
case kActionDefault:
getEntities()->clearSequences(kEntityAugust);
getData()->entityPosition = kPosition_3970;
getData()->location = kLocationInsideCompartment;
getData()->car = kCarRestaurant;
getData()->clothes = kClothes1;
getData()->inventoryItem = kItemNone;
getObjects()->update(kObjectCompartment3, kEntityPlayer, kObjectLocation1, kCursorHandKnock, kCursorHand);
getObjects()->update(kObject11, kEntityPlayer, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue);
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(36, August, chapter2Handler)
switch (savepoint.action) {
default:
break;
case kActionNone:
Entity::timeCheckSavepoint(kTime1755000, params->param2, kEntityAugust, kEntityWaiter1, kAction252568704);
if (getState()->time > kTime1773000 && params->param1 && getEntities()->isSomebodyInsideRestaurantOrSalon()) {
getData()->inventoryItem = kItemNone;
getData()->location = kLocationOutsideCompartment;
getEntities()->updatePositionEnter(kEntityAugust, kCarRestaurant, 62);
setCallback(2);
setup_callSavepoint("016C", kEntityTables0, kActionDrawTablesWithChairs, "016D");
}
break;
case kAction1:
getData()->inventoryItem = kItemNone;
setCallback(1);
setup_savegame(kSavegameTypeEvent, kEventAugustGoodMorning);
break;
case kActionDefault:
if (!getEvent(kEventAugustGoodMorning))
getData()->inventoryItem = kItemInvalid;
getSavePoints()->push(kEntityAugust, kEntityTables0, kAction136455232);
getEntities()->drawSequenceLeft(kEntityAugust, "016B");
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
getAction()->playAnimation(kEventAugustGoodMorning);
getScenes()->loadSceneFromPosition(kCarRestaurant, 61);
break;
case 2:
getEntities()->updatePositionExit(kEntityAugust, kCarRestaurant, 62);
getEntities()->drawSequenceRight(kEntityAugust, "803ES");
if (getEntities()->isInRestaurant(kEntityPlayer))
getEntities()->updateFrame(kEntityAugust);
setCallback(3);
setup_callbackActionOnDirection();
break;
case 3:
getSavePoints()->push(kEntityAugust, kEntityWaiter1, kAction286534136);
setCallback(4);
setup_updateEntity(kCarGreenSleeping, kPosition_6470);
break;
case 4:
setCallback(5);
setup_function19(true, false);
break;
case 5:
setup_function37();
break;
case 6:
if (!getEvent(kEventAugustGoodMorning))
getData()->inventoryItem = kItemInvalid;
getSavePoints()->push(kEntityAugust, kEntityWaiter1, kAction219522616);
getEntities()->drawSequenceLeft(kEntityAugust, "016B");
params->param1 = 1;
break;
}
break;
case kAction123712592:
getEntities()->drawSequenceLeft(kEntityAugust, "016A");
getData()->inventoryItem = kItemNone;
setCallback(6);
setup_playSound("AUG2113");
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(37, August, function37)
switch (savepoint.action) {
default:
break;
case kActionNone:
Entity::timeCheckCallback(kTime1791000, params->param2, 5, true, WRAP_SETUP_FUNCTION_B(August, setup_function20));
break;
case kActionDefault:
getObjects()->update(kObjectCompartment3, kEntityPlayer, kObjectLocation2, kCursorNormal, kCursorNormal);
getEntities()->drawSequenceLeft(kEntityAugust, "506A2");
break;
case kActionDrawScene:
if (getState()->time > kTime1786500 && getEntities()->isPlayerPosition(kCarGreenSleeping, 43)) {
if (params->param1) {
setCallback(2);
setup_draw("506C2");
} else {
params->param1 = 1;
setCallback(1);
setup_draw("506B2");
}
}
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
getScenes()->loadSceneFromPosition(kCarGreenSleeping, 16);
break;
case 2:
setCallback(3);
setup_function20(true);
break;
case 3:
case 5:
setCallback(getCallback() + 1);
setup_updateEntity(kCarRestaurant, kPosition_850);
break;
case 4:
case 6:
setup_function38();
break;
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(38, August, function38)
switch (savepoint.action) {
default:
break;
case kActionNone:
Entity::timeCheckSavepoint(kTime1801800, params->param1, kEntityAugust, kEntityRebecca, kAction155980128);
Entity::timeCheckCallback(kTime1820700, params->param2, 3, WRAP_SETUP_FUNCTION(August, setup_callbackActionRestaurantOrSalon));
break;
case kActionDefault:
setCallback(1);
setup_callbackActionRestaurantOrSalon();
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
getData()->entityPosition = kPosition_1540;
getData()->location = kLocationOutsideCompartment;
setCallback(2);
setup_updatePosition("109A", kCarRestaurant, 56);
break;
case 2:
getScenes()->loadSceneFromItemPosition(kItem3);
getData()->location = kLocationInsideCompartment;
getEntities()->drawSequenceLeft(kEntityAugust, "109B");
break;
case 3:
getData()->location = kLocationOutsideCompartment;
setCallback(4);
setup_updatePosition("109D2", kCarRestaurant, 56);
break;
case 4:
getInventory()->setLocationAndProcess(kItem3, kObjectLocation1);
setCallback(5);
setup_function17(kTime1849500);
break;
case 5:
setup_function39();
break;
case 6:
setCallback(7);
setup_playSound("AUG2114");
break;
case 7:
getEntities()->drawSequenceLeft(kEntityAugust, "108C");
getEntities()->updatePositionEnter(kEntityAugust, kCarRestaurant, 56);
getEntities()->updatePositionEnter(kEntityAugust, kCarRestaurant, 57);
setCallback(8);
setup_playSound("AUG2114A");
break;
case 8:
setCallback(9);
setup_playSound("AUG2115");
break;
case 9:
setCallback(10);
setup_draw2("108D1", "108D2", kEntityRebecca);
break;
case 10:
getEntities()->drawSequenceLeft(kEntityAugust, "109B");
getEntities()->updatePositionExit(kEntityAugust, kCarRestaurant, 56);
getEntities()->updatePositionExit(kEntityAugust, kCarRestaurant, 57);
getSavePoints()->push(kEntityAugust, kEntityRebecca, kAction125496184);
break;
}
break;
case kAction169358379:
getSavePoints()->push(kEntityAugust, kEntityRebecca, kAction155465152);
getEntities()->drawSequenceLeft(kEntityAugust, "108A");
setCallback(6);
setup_updateFromTime(900);
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(39, August, function39)
switch (savepoint.action) {
default:
break;
case kActionDefault:
if (!ENTITY_PARAM(0, 1))
getSound()->playSound(kEntityPlayer, "BUMP");
setCallback(1);
setup_savegame(kSavegameTypeEvent, kEventAugustArrivalInMunich);
break;
case kActionCallback:
if (getCallback() == 1) {
getAction()->playAnimation(kEventAugustArrivalInMunich);
getSavePoints()->push(kEntityAugust, kEntityChapters, kActionChapter3);
getEntities()->clearSequences(kEntityAugust);
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(40, August, chapter3)
switch (savepoint.action) {
default:
break;
case kActionNone:
setup_chapter3Handler();
break;
case kActionDefault:
getEntities()->clearSequences(kEntityAugust);
getData()->entityPosition = kPosition_6470;
getData()->location = kLocationOutsideCompartment;
getData()->car = kCarGreenSleeping;
getData()->clothes = kClothes1;
getData()->inventoryItem = kItemNone;
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION_II(41, August, function41, CarIndex, EntityPosition)
switch (savepoint.action) {
default:
break;
case kActionNone:
if (params->param3 && getEntities()->isDistanceBetweenEntities(kEntityAugust, kEntityPlayer, 2000))
getData()->inventoryItem = kItemInvalid;
else
getData()->inventoryItem = kItemNone;
if (getEntities()->updateEntity(kEntityAugust, (CarIndex)params->param1, (EntityPosition)params->param2)) {
getData()->inventoryItem = kItemNone;
callbackAction();
break;
}
if (!getEvent(kEventAugustMerchandise)
&& getEntities()->isDistanceBetweenEntities(kEntityAugust, kEntityPlayer, 1000)
&& !getEntities()->isInsideCompartments(kEntityPlayer)
&& !getEntities()->checkFields10(kEntityPlayer)) {
if (getData()->car == kCarGreenSleeping || getData()->car == kCarRedSleeping) {
getAction()->playAnimation(kEventAugustMerchandise);
getEntities()->loadSceneFromEntityPosition(getData()->car, (EntityPosition)(getData()->entityPosition + (750 * (getData()->direction == kDirectionUp ? -1 : 1))), getData()->direction == kDirectionUp);
}
}
break;
case kAction1:
params->param3 = kItemNone;
getData()->inventoryItem = kItemNone;
getAction()->playAnimation((getData()->entityPosition < getEntityData(kEntityPlayer)->entityPosition) ? kEventAugustTalkGoldDay : kEventAugustTalkGold);
getEntities()->loadSceneFromEntityPosition(getData()->car, (EntityPosition)(getData()->entityPosition + (750 * (getData()->direction == kDirectionUp ? -1 : 1))), getData()->direction == kDirectionUp);
break;
case kActionExcuseMeCath:
if (getProgress().eventMetAugust)
getSound()->playSound(kEntityPlayer, rnd(2) ? "CAT1002" : "CAT1002A");
else
getSound()->excuseMeCath();
break;
case kActionExcuseMe:
getSound()->excuseMe(kEntityAugust);
break;
case kActionDefault:
if (getEntities()->updateEntity(kEntityAugust, (CarIndex)params->param1, (EntityPosition)params->param2)) {
callbackAction();
break;
}
if (getEvent(kEventAugustMerchandise) && !getEvent(kEventAugustTalkGold) && !getEvent(kEventAugustTalkGoldDay))
params->param3 = kItemInvalid;
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION_III(42, August, function42, CarIndex, EntityPosition, bool)
switch (savepoint.action) {
default:
break;
case kActionNone:
if (params->param4 && getEntities()->isDistanceBetweenEntities(kEntityAugust, kEntityPlayer, 2000))
getData()->inventoryItem = kItemInvalid;
else
getData()->inventoryItem = kItemNone;
if (getEntities()->updateEntity(kEntityAugust, (CarIndex)params->param1, (EntityPosition)params->param2)) {
getData()->inventoryItem = kItemNone;
callbackAction();
}
break;
case kAction1:
params->param4 = 0;
getData()->inventoryItem = kItemNone;
getSound()->playSound(kEntityPlayer, "CAT1002");
getSound()->playSound(kEntityAugust, getEvent(kEventAugustBringBriefcase) ? "AUG3103" : "AUG3100", kSoundVolumeEntityDefault, 15);
break;
case kActionExcuseMe:
if (!getSoundQueue()->isBuffered(kEntityAugust))
getSound()->excuseMe(kEntityAugust);
break;
case kActionDefault:
if (getEntities()->updateEntity(kEntityAugust, (CarIndex)params->param1, (EntityPosition)params->param2)) {
callbackAction();
break;
}
if (params->param3) {
params->param4 = 128;
if (!getEvent(kEventAugustBringBriefcase))
params->param4 = 147;
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(43, August, chapter3Handler)
switch (savepoint.action) {
default:
break;
case kActionNone:
Entity::timeCheckSavepoint(kTime1953000, params->param2, kEntityAugust, kEntityAnna, kAction291662081);
// Set as same position as Anna
if (params->param1) {
getData()->entityPosition = getEntityData(kEntityAnna)->entityPosition;
getData()->location = getEntityData(kEntityAnna)->location;
getData()->car = getEntityData(kEntityAnna)->car;
}
if (getState()->time > kTime2016000 && !params->param1) {
if (getEntities()->isSomebodyInsideRestaurantOrSalon()) {
getData()->inventoryItem = kItemNone;
setup_function44();
}
}
break;
case kAction1:
getData()->inventoryItem = kItemNone;
setCallback(6);
setup_savegame(kSavegameTypeEvent, kEventAugustLunch);
break;
case kActionDefault:
setCallback(1);
setup_function20(true);
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
setCallback(2);
setup_function41(kCarRestaurant, kPosition_850);
break;
case 2:
setCallback(3);
setup_callbackActionRestaurantOrSalon();
break;
case 3:
getData()->entityPosition = kPosition_1540;
getData()->location = kLocationOutsideCompartment;
setCallback(4);
setup_draw("803VS");
break;
case 4:
getEntities()->drawSequenceRight(kEntityAugust, "010A2");
if (getEntities()->isInSalon(kEntityPlayer))
getEntities()->updateFrame(kEntityAugust);
setCallback(5);
setup_callSavepointNoDrawing(kEntityTables3, kAction136455232, "BOGUS");
break;
case 5:
getData()->location = kLocationInsideCompartment;
getEntities()->drawSequenceLeft(kEntityAugust, "010B2");
if (!getEvent(kEventAugustLunch))
getData()->inventoryItem = kItemInvalid;
break;
case 6:
getAction()->playAnimation(kEventAugustLunch);
getScenes()->processScene();
break;
}
break;
case kAction122288808:
params->param1 = 0;
getData()->inventoryItem = kItemNone;
getData()->location = kLocationInsideCompartment;
getEntities()->drawSequenceLeft(kEntityAugust, "112G");
break;
case kAction122358304:
params->param1 = 1;
getData()->inventoryItem = kItemNone;
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(44, August, function44)
switch (savepoint.action) {
default:
break;
case kActionDefault:
getData()->location = kLocationOutsideCompartment;
setCallback(1);
setup_updatePosition("112H", kCarRestaurant, 57);
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
if (getEvent(kEventAugustMerchandise)) {
setCallback(4);
setup_function41(kCarGreenSleeping, kPosition_6470);
} else {
setCallback(2);
setup_function17(kTime2043000);
}
break;
case 2:
if (!ENTITY_PARAM(0, 1)) {
setCallback(4);
setup_function41(kCarGreenSleeping, kPosition_6470);
} else {
setCallback(3);
setup_savegame(kSavegameTypeEvent, kEventAugustMerchandise);
}
break;
case 3:
getAction()->playAnimation(kEventAugustMerchandise);
if (getData()->car == kCarGreenSleeping && getEntities()->checkDistanceFromPosition(kEntityAugust, kPosition_6470, 500))
getData()->entityPosition = kPosition_5970;
getEntities()->updateEntity(kEntityAugust, kCarGreenSleeping, kPosition_6470);
getEntities()->loadSceneFromEntityPosition(getData()->car,
(EntityPosition)(getData()->entityPosition + 750 * (getData()->direction == kDirectionUp ? -1 : 1)),
getData()->direction == kDirectionUp);
setCallback(4);
setup_function41(kCarGreenSleeping, kPosition_6470);
break;
case 4:
setCallback(5);
setup_function19(true, false);
break;
case 5:
setup_function45();
break;
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(45, August, function45)
switch (savepoint.action) {
default:
break;
case kActionNone:
if (getState()->time > kTime2061000 && !params->param1) {
params->param1 = 1;
getData()->inventoryItem = kItemNone;
setup_function46();
}
break;
case kAction1:
getData()->inventoryItem = kItemNone;
getSound()->playSound(kEntityPlayer, "CAT1002");
getSound()->playSound(kEntityAugust, "AUG3102", kSoundVolumeEntityDefault, 15);
break;
case kActionDefault:
getObjects()->update(kObjectCompartment3, kEntityPlayer, kObjectLocation2, kCursorNormal, kCursorNormal);
getEntities()->drawSequenceLeft(kEntityAugust, "506A2");
getData()->inventoryItem = kItem146; // TODO which item is that?
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(46, August, function46)
switch (savepoint.action) {
default:
break;
case kActionNone:
Entity::timeCheckCallback(kTime2088000, params->param1, 1, WRAP_SETUP_FUNCTION(August, setup_function47));
break;
case kActionDrawScene:
if (getEntities()->isPlayerPosition(kCarGreenSleeping, 43)) {
setCallback(2);
setup_draw("507B2");
}
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
setup_function48();
break;
case 2:
if (getEntities()->isPlayerPosition(kCarGreenSleeping, 43))
getScenes()->loadSceneFromPosition(kCarGreenSleeping, 34);
getEntities()->clearSequences(kEntityAugust);
break;
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(47, August, function47)
switch (savepoint.action) {
default:
break;
case kActionDefault:
setCallback(1);
setup_function20(true);
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
setCallback(2);
setup_function41(kCarGreenSleeping, kPosition_9460);
break;
case 2:
getEntities()->clearSequences(kEntityAugust);
setCallback(3);
setup_updateFromTime(2700);
break;
case 3:
setCallback(4);
setup_function41(kCarGreenSleeping, kPosition_6470);
break;
case 4:
setCallback(5);
setup_function19(false, false);
break;
case 5:
callbackAction();
break;
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(48, August, function48)
switch (savepoint.action) {
default:
break;
case kActionNone:
Entity::timeCheck(kTimeCityLinz, params->param1, WRAP_SETUP_FUNCTION(August, setup_function49));
break;
case kActionKnock:
case kActionOpenDoor:
if (!getEvent(kEventAugustTalkCompartmentDoor) && !getEvent(kEventAugustTalkCompartmentDoorBlueRedingote)
&& !getEvent(kEventAugustBringEgg) && !getEvent(kEventAugustBringBriefcase)) {
if (savepoint.action == kActionKnock)
getSound()->playSound(kEntityPlayer, "LIB012");
setCallback(1);
setup_savegame(kSavegameTypeEvent, kEventAugustTalkCompartmentDoor);
}
break;
case kActionDefault:
getObjects()->update(kObjectCompartment3, kEntityAugust, kObjectLocation1, kCursorHandKnock, kCursorHand);
getData()->clothes = kClothes2;
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
getAction()->playAnimation(kEventAugustTalkCompartmentDoor);
getScenes()->processScene();
setCallback(2);
setup_function21(kTimeCityLinz);
break;
case 2:
setup_function49();
break;
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(49, August, function49)
switch (savepoint.action) {
default:
break;
case kActionDefault:
setCallback(1);
setup_function20(false);
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
setCallback(2);
setup_updateEntity(kCarKronos, kPosition_9270);
break;
case 2:
setup_function50();
break;
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(50, August, function50)
switch (savepoint.action) {
default:
break;
case kActionDefault:
getObjects()->update(kObjectCompartment3, kEntityPlayer, kObjectLocation1, kCursorHandKnock, kCursorHand);
getEntities()->clearSequences(kEntityAugust);
getData()->entityPosition = kPosition_6000;
getData()->location = kLocationInsideCompartment;
getData()->car = kCarKronos;
break;
case kAction191668032:
setup_function51();
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(51, August, function51)
switch (savepoint.action) {
default:
break;
case kActionDefault:
getData()->car = kCarGreenSleeping;
getData()->entityPosition = kPosition_850;
getData()->location = kLocationOutsideCompartment;
setCallback(1);
setup_function42(kCarGreenSleeping, kPosition_5790, false);
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
getSavePoints()->push(kEntityAugust, kEntityTatiana, kAction191668032);
setCallback(2);
setup_function42(kCarRedSleeping, kPosition_540, true);
break;
case 2:
getEntities()->clearSequences(kEntityAugust);
break;
case 3:
getEntities()->drawSequenceLeft(kEntityAugust, "BLANK");
getSavePoints()->push(kEntityAugust, kEntityAnna, kAction123712592);
break;
}
break;
case kAction122288808:
setup_function52();
break;
case kAction122358304:
getEntities()->drawSequenceLeft(kEntityAugust, "BLANK");
break;
case kAction169032608:
setCallback(3);
setup_function42(kCarRedSleeping, kPosition_3820, true);
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(52, August, function52)
switch (savepoint.action) {
default:
break;
case kActionKnock:
case kActionOpenDoor:
if (getInventory()->hasItem(kItemBriefcase)) {
getEntityData(kEntityPlayer)->location = kLocationInsideCompartment;
if (savepoint.action == kActionKnock)
getSound()->playSound(kEntityPlayer, "LIB012");
setCallback(3);
setup_savegame(kSavegameTypeEvent, kEventAugustBringBriefcase);
break;
}
if (getInventory()->hasItem(kItemFirebird) && !getEvent(kEventAugustBringEgg)) {
setCallback(4);
setup_savegame(kSavegameTypeEvent, kEventAugustBringEgg);
break;
}
if (!getEvent(kEventAugustTalkCompartmentDoorBlueRedingote) && !getEvent(kEventAugustBringEgg) && !getEvent(kEventAugustBringBriefcase)) {
if (savepoint.action == kActionKnock)
getSound()->playSound(kEntityPlayer, "LIB012");
setCallback(5);
setup_savegame(kSavegameTypeEvent, kEventAugustBringEgg);
break;
}
getObjects()->update(kObjectCompartment3, kEntityAugust, kObjectLocation1, kCursorNormal, kCursorNormal);
setCallback(savepoint.action == kActionKnock ? 6 : 7);
setup_playSound(savepoint.action == kActionKnock ? "LIB012" : "LIB013");
break;
case kActionDefault:
setCallback(1);
setup_function42(kCarGreenSleeping, kPosition_6470, true);
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
setCallback(2);
setup_function19(false, true);
break;
case 2:
getObjects()->update(kObjectCompartment3, kEntityAugust, kObjectLocationNone, kCursorHandKnock, kCursorHand);
getSavePoints()->push(kEntityAugust, kEntityKahina, kAction134611040);
break;
case 3:
getAction()->playAnimation(kEventAugustBringBriefcase);
getSound()->playSound(kEntityPlayer, "LIB015");
RESET_ENTITY_STATE(kEntitySalko, Salko, setup_function17);
getScenes()->loadSceneFromPosition(kCarGreenSleeping, 13);
setup_function53();
break;
case 4:
getAction()->playAnimation(kEventAugustBringEgg);
getScenes()->processScene();
break;
case 5:
getAction()->playAnimation(kEventAugustTalkCompartmentDoorBlueRedingote);
getScenes()->processScene();
break;
case 6:
case 7:
setCallback(8);
setup_playSound("AUG1128F");
break;
case 8:
getObjects()->update(kObjectCompartment3, kEntityAugust, kObjectLocation1, kCursorHandKnock, kCursorHand);
break;
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(53, August, function53)
switch (savepoint.action) {
default:
break;
case kActionDefault:
setCallback(1);
setup_updateFromTime(2700);
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
setCallback(2);
setup_function20(false);
break;
case 2:
setCallback(3);
setup_updateEntity(kCarRestaurant, kPosition_850);
break;
case 3:
setup_function54();
break;
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(54, August, function54)
switch (savepoint.action) {
default:
break;
case kActionNone:
if (!params->param3 || params->param1 || getProgress().field_44)
getData()->inventoryItem = kItemNone;
else
getData()->inventoryItem = kItemInvalid;
if (getEvent(kEventAugustTalkCigar) && params->param2 && !params->param1) {
if (!Entity::updateParameter(params->param4, getState()->time, 9000))
break;
getData()->inventoryItem = kItemNone;
setup_function55();
}
break;
case kAction1:
getData()->inventoryItem = kItemNone;
setCallback(3);
setup_savegame(kSavegameTypeEvent, kEventAugustTalkCigar);
break;
case kActionExitCompartment:
getEntities()->updatePositionExit(kEntityAugust, kCarRestaurant, 57);
getEntities()->drawSequenceLeft(kEntityAugust, "105B3");
break;
case kActionDefault:
setCallback(1);
setup_callbackActionRestaurantOrSalon();
break;
case kActionDrawScene:
if (!getEntities()->isPlayerPosition(kCarRestaurant, 60) || params->param2 || params->param1) {
if (!params->param1 && getEntities()->isPlayerPosition(kCarRestaurant, 57))
getScenes()->loadSceneFromPosition(kCarRestaurant, 50);
} else {
getEntities()->updatePositionEnter(kEntityAugust, kCarRestaurant, 57);
getEntities()->drawSequenceRight(kEntityAugust, "105C3");
}
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
getData()->entityPosition = kPosition_1540;
getData()->location = kLocationOutsideCompartment;
setCallback(2);
setup_updatePosition("105A3", kCarRestaurant, 57);
break;
case 2:
getData()->location = kLocationInsideCompartment;
getSavePoints()->push(kEntityAugust, kEntityAbbot, kAction123712592);
getEntities()->drawSequenceLeft(kEntityAugust, "105B3");
params->param3 = 1;
break;
case 3:
getAction()->playAnimation(kEventAugustTalkCigar);
getEntities()->drawSequenceLeft(kEntityAugust, params->param2 ? "122B" : "105B3");
getScenes()->processScene();
params->param3 = 0;
break;
}
break;
case kAction122288808:
getEntities()->drawSequenceLeft(kEntityAugust, "122B");
params->param1 = 0;
break;
case kAction122358304:
getEntities()->drawSequenceLeft(kEntityAugust, "BLANK");
params->param1 = 1;
params->param2 = 1;
break;
case kAction136196244:
params->param1 = 1;
getData()->inventoryItem = kItemNone;
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(55, August, function55)
switch (savepoint.action) {
default:
break;
case kActionDefault:
setCallback(1);
setup_callbackActionRestaurantOrSalon();
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
getData()->location = kLocationOutsideCompartment;
setCallback(2);
setup_updatePosition("105D3", kCarRestaurant, 57);
break;
case 2:
setCallback(3);
setup_updateEntity(kCarGreenSleeping, kPosition_6470);
break;
case 3:
setCallback(4);
setup_function19(true, false);
break;
case 4:
setup_function56();
break;
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(56, August, function56)
switch (savepoint.action) {
default:
break;
case kActionDefault:
getObjects()->update(kObjectCompartment3, kEntityPlayer, kObjectLocation2, kCursorNormal, kCursorNormal);
getEntities()->drawSequenceLeft(kEntityAugust, "507A3");
break;
case kActionDrawScene:
if (!params->param1 && getEntities()->isPlayerPosition(kCarGreenSleeping, 43)) {
setCallback(1);
setup_draw("507B3");
}
break;
case kActionCallback:
if (getCallback() == 1) {
params->param1 = 1;
getEntities()->drawSequenceLeft(kEntityAugust, "507A3");
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(57, August, chapter4)
switch (savepoint.action) {
default:
break;
case kActionNone:
setup_chapter4Handler();
break;
case kActionDefault:
getEntities()->clearSequences(kEntityAugust);
getData()->entityPosition = kPosition_6470;
getData()->location = kLocationInsideCompartment;
getData()->car = kCarGreenSleeping;
getData()->clothes = kClothes2;
getData()->inventoryItem = kItemNone;
getObjects()->update(kObjectCompartment3, kEntityPlayer, kObjectLocation2, kCursorNormal, kCursorNormal);
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(58, August, chapter4Handler)
switch (savepoint.action) {
default:
break;
case kActionDefault:
setCallback(1);
setup_function20(true);
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
setCallback(2);
setup_updateEntity(kCarRestaurant, kPosition_850);
break;
case 2:
setCallback(3);
setup_callbackActionRestaurantOrSalon();
break;
case 3:
getData()->entityPosition = kPosition_1540;
getData()->location = kLocationOutsideCompartment;
setCallback(4);
setup_draw("803WS");
break;
case 4:
getEntities()->drawSequenceRight(kEntityAugust, "010A3");
if (getEntities()->isInSalon(kEntityPlayer))
getEntities()->updateFrame(kEntityAugust);
setCallback(5);
setup_callSavepointNoDrawing(kEntityTables3, kAction136455232, "BOGUS");
break;
case 5:
getData()->location = kLocationInsideCompartment;
setup_function59();
break;
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(59, August, function59)
switch (savepoint.action) {
default:
break;
case kActionDefault:
getEntities()->drawSequenceLeft(kEntityAugust, "010B3");
getSavePoints()->push(kEntityAugust, kEntityPascale, kAction190605184);
break;
case kAction122358304:
getEntities()->drawSequenceLeft(kEntityAugust, "BLANK");
break;
case kAction123793792:
setup_function60();
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(60, August, function60)
switch (savepoint.action) {
default:
break;
case kActionNone: {
bool pushSavepoint = false;
if (!params->param2) {
params->param2 = (uint)getState()->time + 450;
}
if (params->param2 < getState()->time) {
pushSavepoint = true;
params->param2 = kTimeInvalid;
}
if (pushSavepoint)
getSavePoints()->push(kEntityAugust, kEntityWaiter1, kAction207330561);
if (!params->param1)
break;
if (!Entity::updateParameter(params->param3, getState()->time, 9000))
break;
setCallback(1);
setup_callbackActionRestaurantOrSalon();
}
break;
case kActionDefault:
getEntities()->drawSequenceLeft(kEntityAugust, "010B3");
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
getData()->location = kLocationOutsideCompartment;
setCallback(2);
setup_callSavepoint("010J3", kEntityTables3, kActionDrawTablesWithChairs, "010M");
break;
case 2:
getSavePoints()->push(kEntityAugust, kEntityWaiter1, kAction286403504);
setup_function61();
break;
}
break;
case kAction122288808:
getEntities()->drawSequenceLeft(kEntityAugust, "010B3");
break;
case kAction122358304:
getEntities()->drawSequenceLeft(kEntityAugust, "BLANK");
break;
case kAction201964801:
getEntities()->drawSequenceLeft(kEntityAugust, "010H3");
params->param1 = 1;
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(61, August, function61)
switch (savepoint.action) {
default:
break;
case kActionDefault:
getData()->location = kLocationOutsideCompartment;
getEntities()->drawSequenceRight(kEntityAugust, "803FS");
if (getEntities()->isInRestaurant(kEntityPlayer))
getEntities()->updateFrame(kEntityAugust);
setCallback(1);
setup_callbackActionOnDirection();
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
setCallback(2);
setup_updateEntity(kCarGreenSleeping, kPosition_6470);
break;
case 2:
setCallback(3);
setup_function19(false, false);
break;
case 3:
setCallback(4);
setup_function21((TimeValue)(getState()->time + 4500));
break;
case 4:
setup_function62();
break;
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(62, August, function62)
switch (savepoint.action) {
default:
break;
case kActionNone:
if (!Entity::updateParameter(params->param1, getState()->time, 900))
break;
getSound()->playSound(kEntityAugust, "Aug4003A");
setCallback(5);
setup_updatePosition("122C", kCarRestaurant, 57);
break;
case kActionDefault:
getData()->location = kLocationOutsideCompartment;
setCallback(1);
setup_enterExitCompartment("696Ec", kObjectCompartment3);
break;
case kActionDrawScene:
if (getEntities()->isPlayerPosition(kCarRestaurant, 57))
getScenes()->loadSceneFromPosition(kCarRestaurant, 50);
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
getObjects()->update(kObjectCompartment3, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand);
setCallback(2);
setup_updateEntity(kCarRestaurant, kPosition_850);
break;
case 2:
setCallback(3);
setup_callbackActionRestaurantOrSalon();
break;
case 3:
getData()->entityPosition = kPosition_1540;
getData()->location = kLocationOutsideCompartment;
setCallback(4);
setup_updatePosition("122A", kCarRestaurant, 57);
break;
case 4:
getData()->location = kLocationInsideCompartment;
getEntities()->drawSequenceLeft(kEntityAugust, "122B");
break;
case 5:
getEntities()->drawSequenceLeft(kEntityAugust, "122B");
getSavePoints()->push(kEntityAugust, kEntityWaiter2, kAction291721418);
break;
}
break;
case kAction122358304:
getEntities()->drawSequenceLeft(kEntityAugust, "BLANK");
break;
case kAction125826561:
setup_function63();
break;
case kAction134486752:
getEntities()->drawSequenceLeft(kEntityAugust, "122B");
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(63, August, function63)
switch (savepoint.action) {
default:
break;
case kActionNone:
if (Entity::updateParameter(params->param3, getState()->time, 1800)) {
getData()->inventoryItem = kItemInvalid;
}
if (getState()->time > kTime2488500 && !params->param4) {
params->param4 = 1;
getData()->inventoryItem = kItemNone;
setup_function64();
break;
}
if (!Entity::updateParameter(params->param5, getState()->timeTicks, params->param1))
break;
params->param2 = (params->param2 == 0 ? 1 : 0);
getEntities()->drawSequenceLeft(kEntityAugust, params->param2 ? "122H" : "122F");
params->param1 = 5 * (3 * rnd(20) + 15);
params->param5 = 0;
break;
case kAction1:
if (getEntities()->isInSalon(kEntityAlexei)) {
RESET_ENTITY_STATE(kEntityAlexei, Alexei, setup_goToPlatform);
}
getData()->inventoryItem = kItemNone;
setCallback(1);
setup_savegame(kSavegameTypeEvent, kEventAugustDrink);
break;
case kActionDefault:
params->param1 = 5 * (3 * rnd(20) + 15);
getEntities()->drawSequenceLeft(kEntityAugust, "122F");
break;
case kActionDrawScene:
if (getEntities()->isPlayerPosition(kCarRestaurant, 57))
getScenes()->loadSceneFromPosition(kCarRestaurant, 50);
break;
case kActionCallback:
if (getCallback() == 1) {
getAction()->playAnimation(kEventAugustDrink);
getScenes()->loadSceneFromPosition(kCarRestaurant, 55);
setup_function64();
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(64, August, function64)
switch (savepoint.action) {
default:
break;
case kActionNone:
if (!params->param1)
params->param1 = (uint)getState()->time + 1800;
if (params->param1 >= getState()->time)
break;
if (getState()->time > kTime2430000 && getEntities()->isSomebodyInsideRestaurantOrSalon()) {
getData()->location = kLocationOutsideCompartment;
setCallback(1);
setup_updatePosition("122J", kCarRestaurant, 57);
}
break;
case kActionDefault:
getEntities()->drawSequenceLeft(kEntityAugust, "122H");
break;
case kActionDrawScene:
if (getEntities()->isPlayerPosition(kCarRestaurant, 57))
getScenes()->loadSceneFromPosition(kCarRestaurant, 50);
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
setCallback(2);
setup_updateEntity(kCarGreenSleeping, kPosition_6470);
break;
case 2:
setCallback(3);
setup_enterExitCompartment2("696Dc", kObjectCompartment3);
break;
case 3:
getEntities()->clearSequences(kEntityAugust);
setup_function65();
break;
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(65, August, function65)
switch (savepoint.action) {
default:
break;
case kActionEndSound:
getSound()->playSound(kEntityAugust, "AUG1057"); // August snoring
break;
case kActionDefault:
getData()->entityPosition = kPosition_6470;
getData()->location = kLocationInsideCompartment;
getData()->car = kCarGreenSleeping;
getEntities()->clearSequences(kEntityAugust);
getObjects()->update(kObjectCompartment3, kEntityPlayer, kObjectLocation1, kCursorHandKnock, kCursorHand);
if (!getSoundQueue()->isBuffered(kEntityAugust))
getSound()->playSound(kEntityAugust, "AUG1057"); // August snoring
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(66, August, chapter5)
switch (savepoint.action) {
default:
break;
case kActionNone:
setup_chapter5Handler();
break;
case kActionDefault:
getEntities()->clearSequences(kEntityAugust);
getData()->entityPosition = kPosition_3969;
getData()->location = kLocationInsideCompartment;
getData()->car = kCarRestaurant;
getData()->clothes = kClothes2;
getData()->inventoryItem = kItemNone;
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(67, August, chapter5Handler)
if (savepoint.action == kActionProceedChapter5)
setup_function68();
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(68, August, function68)
switch (savepoint.action) {
default:
break;
case kActionNone:
if (params->param1) {
if (!Entity::updateParameter(params->param4, getState()->timeTicks, 75))
break;
params->param1 = 0;
params->param2 = 1;
getObjects()->update(kObjectCompartment3, kEntityAugust, kObjectLocation1, kCursorNormal, kCursorNormal);
}
params->param4 = 0;
break;
case kActionKnock:
case kActionOpenDoor:
if (params->param1) {
getObjects()->update(kObjectCompartment3, kEntityAugust, kObjectLocation1, kCursorNormal, kCursorNormal);
setCallback(1);
setup_playSound(getSound()->justCheckingCath());
} else {
setCallback(savepoint.action == kActionKnock ? 2 : 3);
setup_playSound(savepoint.action == kActionKnock ? "LIB012" : "LIB013");
}
break;
case kActionDefault:
getData()->entityPosition = kPosition_6470;
getData()->location = kLocationInsideCompartment;
getData()->car = kCarGreenSleeping;
getObjects()->update(kObjectCompartment3, kEntityAugust, kObjectLocation1, kCursorHandKnock, kCursorHand);
break;
case kActionDrawScene:
if (params->param1 || params->param2) {
params->param1 = 0;
params->param2 = 0;
params->param3 = 0;
getObjects()->update(kObjectCompartment3, kEntityAugust, kObjectLocation1, kCursorHandKnock, kCursorHand);
}
break;
case kActionCallback:
switch (getCallback()) {
default:
break;
case 1:
params->param1 = 0;
getObjects()->update(kObjectCompartment3, kEntityAugust, kObjectLocation1, kCursorHandKnock, kCursorHand);
break;
case 2:
case 3:
++params->param3;
switch (params->param3) {
default:
break;
case 1:
getObjects()->update(kObjectCompartment3, kEntityAugust, kObjectLocation1, kCursorNormal, kCursorNormal);
setCallback(4);
setup_playSound("Aug5002");
break;
case 2:
getObjects()->update(kObjectCompartment3, kEntityAugust, kObjectLocation1, kCursorNormal, kCursorNormal);
setCallback(5);
setup_playSound("Aug5002A");
break;
case 3:
getObjects()->update(kObjectCompartment3, kEntityAugust, kObjectLocation1, kCursorNormal, kCursorNormal);
setCallback(6);
setup_playSound("Aug5002B");
break;
}
break;
case 4:
params->param1 = 1;
getObjects()->update(kObjectCompartment3, kEntityAugust, kObjectLocation1, kCursorTalk, kCursorNormal);
break;
case 5:
getObjects()->update(kObjectCompartment3, kEntityAugust, kObjectLocation1, kCursorHandKnock, kCursorHand);
break;
case 6:
params->param2 = 1;
break;
}
break;
case kAction203078272:
getSavePoints()->push(kEntityAugust, kEntityTatiana, kAction203078272);
setup_unhookCars();
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_FUNCTION(69, August, unhookCars)
switch (savepoint.action) {
default:
break;
case kActionNone:
getSavePoints()->pushAll(kEntityAugust, kAction135800432);
setup_nullfunction();
break;
case kActionDefault:
getSoundQueue()->endAmbient();
if (getSoundQueue()->isBuffered("ARRIVE"))
getSoundQueue()->stop("ARRIVE");
setCallback(1);
setup_savegame(kSavegameTypeEvent, kEventAugustUnhookCarsBetrayal);
break;
case kActionCallback:
if (getCallback() == 1) {
getAction()->playAnimation(getProgress().field_C ? kEventAugustUnhookCarsBetrayal : kEventAugustUnhookCars);
getEntities()->clearSequences(kEntityAugust);
getSoundQueue()->startAmbient();
getSound()->playSound(kEntityPlayer, "MUS050");
getScenes()->loadSceneFromPosition(kCarRestaurant, 85, 1);
getSavePoints()->pushAll(kEntityAugust, kActionProceedChapter5);
RESET_ENTITY_STATE(kEntityVerges, Verges, setup_end)
}
break;
}
IMPLEMENT_FUNCTION_END
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_NULL_FUNCTION(70, August)
} // End of namespace LastExpress