3066 lines
110 KiB
C++
3066 lines
110 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/lastexpress.h"
|
|
|
|
namespace LastExpress {
|
|
|
|
void LogicManager::CONS_Tatiana(int chapter) {
|
|
switch (chapter) {
|
|
case 0:
|
|
_engine->getMessageManager()->setMessageHandle(
|
|
kCharacterTatiana,
|
|
_functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]
|
|
);
|
|
|
|
break;
|
|
case 1:
|
|
CONS_Tatiana_Birth(0, 0, 0, 0);
|
|
break;
|
|
case 2:
|
|
CONS_Tatiana_StartPart2(0, 0, 0, 0);
|
|
break;
|
|
case 3:
|
|
CONS_Tatiana_StartPart3(0, 0, 0, 0);
|
|
break;
|
|
case 4:
|
|
CONS_Tatiana_StartPart4(0, 0, 0, 0);
|
|
break;
|
|
case 5:
|
|
CONS_Tatiana_StartPart5(0, 0, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::TatianaCall(CALL_PARAMS) {
|
|
getCharacter(kCharacterTatiana).currentCall++;
|
|
|
|
(this->*functionPointer)(param1, param2, param3, param4);
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_DebugWalks(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_DebugWalks);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 1;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_DebugWalks(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
if (walk(kCharacterTatiana, kCarGreenSleeping, getCharacterCurrentParams(kCharacterTatiana)[0])) {
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[0] == 10000) {
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 0;
|
|
} else {
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 10000;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 1:
|
|
getCharacter(kCharacterTatiana).clothes++;
|
|
if (getCharacter(kCharacterTatiana).clothes > 3)
|
|
getCharacter(kCharacterTatiana).clothes = 0;
|
|
|
|
break;
|
|
case 12:
|
|
getCharacter(kCharacterTatiana).characterPosition.position = 0;
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 0;
|
|
getCharacter(kCharacterTatiana).characterPosition.car = kCarGreenSleeping;
|
|
getCharacter(kCharacterTatiana).inventoryItem = 0x80;
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 10000;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_DoDialog(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_DoDialog);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 2;
|
|
|
|
params->clear();
|
|
|
|
strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_DoDialog(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 2:
|
|
getCharacter(kCharacterTatiana).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
|
|
break;
|
|
case 12:
|
|
playDialog(kCharacterTatiana, (char *)&getCharacterCurrentParams(kCharacterTatiana)[0], -1, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_DoSeqOtis(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_DoSeqOtis);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 3;
|
|
|
|
params->clear();
|
|
|
|
strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_DoSeqOtis(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 3:
|
|
getCharacter(kCharacterTatiana).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
|
|
break;
|
|
case 12:
|
|
startSeqOtis(kCharacterTatiana, (char *)&getCharacterCurrentParams(kCharacterTatiana)[0]);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_DoBlockSeqOtis(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_DoBlockSeqOtis);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 4;
|
|
|
|
params->clear();
|
|
|
|
strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
|
|
|
|
params->parameters[3] = param2.intParam;
|
|
params->parameters[4] = param3.intParam;
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_DoBlockSeqOtis(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 3:
|
|
releaseView(kCharacterTatiana, getCharacterCurrentParams(kCharacterTatiana)[3], getCharacterCurrentParams(kCharacterTatiana)[4]);
|
|
|
|
getCharacter(kCharacterTatiana).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
|
|
break;
|
|
case 12:
|
|
startSeqOtis(kCharacterTatiana, (char *)&getCharacterCurrentParams(kCharacterTatiana)[0]);
|
|
blockView(kCharacterTatiana, getCharacterCurrentParams(kCharacterTatiana)[3], getCharacterCurrentParams(kCharacterTatiana)[4]);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_DoCorrOtis(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_DoCorrOtis);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 5;
|
|
|
|
params->clear();
|
|
|
|
strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
|
|
|
|
params->parameters[3] = param2.intParam;
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_DoCorrOtis(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 3:
|
|
releaseAtDoor(kCharacterTatiana, getCharacterCurrentParams(kCharacterTatiana)[3]);
|
|
|
|
getCharacter(kCharacterTatiana).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
|
|
break;
|
|
case 12:
|
|
startSeqOtis(kCharacterTatiana, (char *)&getCharacterCurrentParams(kCharacterTatiana)[0]);
|
|
blockAtDoor(kCharacterTatiana, getCharacterCurrentParams(kCharacterTatiana)[3]);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_DoEnterCorrOtis(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_DoEnterCorrOtis);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 6;
|
|
|
|
params->clear();
|
|
|
|
strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
|
|
|
|
params->parameters[3] = param2.intParam;
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_DoEnterCorrOtis(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 3:
|
|
releaseAtDoor(kCharacterTatiana, getCharacterCurrentParams(kCharacterTatiana)[3]);
|
|
getCharacter(kCharacterTatiana).characterPosition.position = 7500;
|
|
|
|
getCharacter(kCharacterTatiana).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
|
|
break;
|
|
case 12:
|
|
startSeqOtis(kCharacterTatiana, (char *)&getCharacterCurrentParams(kCharacterTatiana)[0]);
|
|
blockAtDoor(kCharacterTatiana, getCharacterCurrentParams(kCharacterTatiana)[3]);
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 1;
|
|
|
|
if (inComp(kCharacterCath, kCarRedSleeping, 7500) || inComp(kCharacterCath, kCarRedSleeping, 7850)) {
|
|
playNIS((kEventCathTurningNight - !isNight()));
|
|
playDialog(0, "BUMP", -1, 0);
|
|
bumpCathRDoor(33);
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_DoJoinedSeqOtis(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_DoJoinedSeqOtis);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 7;
|
|
|
|
params->clear();
|
|
|
|
strncpy((char *)¶ms->parameters[0], param1.stringParam, 12);
|
|
|
|
params->parameters[3] = param2.intParam;
|
|
params->parameters[4] = param3.intParam;
|
|
|
|
strncpy((char *)¶ms->parameters[5], param4.stringParam, 12);
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_DoJoinedSeqOtis(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 3:
|
|
if (!getCharacterCurrentParams(kCharacterTatiana)[8])
|
|
fedEx(kCharacterTatiana, getCharacterCurrentParams(kCharacterTatiana)[3], getCharacterCurrentParams(kCharacterTatiana)[4], (char *)&getCharacterCurrentParams(kCharacterTatiana)[5]);
|
|
|
|
getCharacter(kCharacterTatiana).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
|
|
break;
|
|
case 10:
|
|
if (!getCharacterCurrentParams(kCharacterTatiana)[8]) {
|
|
fedEx(kCharacterTatiana, getCharacterCurrentParams(kCharacterTatiana)[3], getCharacterCurrentParams(kCharacterTatiana)[4], (char *)&getCharacterCurrentParams(kCharacterTatiana)[5]);
|
|
getCharacterCurrentParams(kCharacterTatiana)[8] = 1;
|
|
}
|
|
|
|
break;
|
|
case 12:
|
|
startSeqOtis(kCharacterTatiana, (char *)&getCharacterCurrentParams(kCharacterTatiana)[0]);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_FinishSeqOtis(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_FinishSeqOtis);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 8;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_FinishSeqOtis(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
if (getCharacter(kCharacterTatiana).direction != 4) {
|
|
getCharacter(kCharacterTatiana).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
|
|
}
|
|
|
|
break;
|
|
case 3:
|
|
getCharacter(kCharacterTatiana).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_DoWaitRealTime(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_DoWaitRealTime);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 9;
|
|
|
|
params->clear();
|
|
|
|
params->parameters[0] = param1.intParam;
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_DoWaitRealTime(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[1] || (getCharacterCurrentParams(kCharacterTatiana)[1] = _realTime + getCharacterCurrentParams(kCharacterTatiana)[0],
|
|
_realTime + getCharacterCurrentParams(kCharacterTatiana)[0] != 0)) {
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[1] >= _realTime)
|
|
break;
|
|
|
|
getCharacterCurrentParams(kCharacterTatiana)[1] = 0x7FFFFFFF;
|
|
}
|
|
|
|
getCharacter(kCharacterTatiana).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_DoWait(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_DoWait);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 10;
|
|
|
|
params->clear();
|
|
|
|
params->parameters[0] = param1.intParam;
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_DoWait(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[1] || (getCharacterCurrentParams(kCharacterTatiana)[1] = _gameTime + getCharacterCurrentParams(kCharacterTatiana)[0],
|
|
_gameTime + getCharacterCurrentParams(kCharacterTatiana)[0] != 0)) {
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[1] >= _gameTime)
|
|
break;
|
|
|
|
getCharacterCurrentParams(kCharacterTatiana)[1] = 0x7FFFFFFF;
|
|
}
|
|
|
|
getCharacter(kCharacterTatiana).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_WaitRCClear(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_WaitRCClear);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 11;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_WaitRCClear(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
case 12:
|
|
if (rcClear()) {
|
|
getCharacter(kCharacterTatiana).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_SaveGame(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_SaveGame);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 12;
|
|
|
|
params->clear();
|
|
|
|
params->parameters[0] = param1.intParam;
|
|
params->parameters[1] = param2.intParam;
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_SaveGame(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
getCharacter(kCharacterTatiana).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
|
|
break;
|
|
case 12:
|
|
save(
|
|
kCharacterTatiana,
|
|
getCharacterCurrentParams(kCharacterTatiana)[0],
|
|
getCharacterCurrentParams(kCharacterTatiana)[1]
|
|
);
|
|
|
|
getCharacter(kCharacterTatiana).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_DoWalk(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_DoWalk);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 13;
|
|
|
|
params->clear();
|
|
|
|
params->parameters[0] = param1.intParam;
|
|
params->parameters[1] = param2.intParam;
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_DoWalk(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
case 12:
|
|
if (walk(kCharacterTatiana, getCharacterCurrentParams(kCharacterTatiana)[0], getCharacterCurrentParams(kCharacterTatiana)[1])) {
|
|
getCharacter(kCharacterTatiana).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
|
|
}
|
|
|
|
break;
|
|
case 5:
|
|
if (_doneNIS[kEventTatianaAskMatchSpeakRussian] || _doneNIS[kEventTatianaAskMatch] || _doneNIS[kEventVassiliSeizure]) {
|
|
if (rnd(2) == 0) {
|
|
playDialog(kCharacterCath, "CAT1010A", -1, 0);
|
|
} else {
|
|
playDialog(kCharacterCath, "CAT1010", -1, 0);
|
|
}
|
|
} else {
|
|
playCathExcuseMe();
|
|
}
|
|
|
|
break;
|
|
case 6:
|
|
playChrExcuseMe(kCharacterTatiana, kCharacterCath, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_EnterComp(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_EnterComp);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 14;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_EnterComp(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
send(kCharacterTatiana, kCharacterCond2, 326348944, 0);
|
|
|
|
if (_globals[kGlobalChapter] != 1) {
|
|
startCycOtis(kCharacterTatiana, "673Fb");
|
|
} else {
|
|
startCycOtis(kCharacterTatiana, "603Fb");
|
|
}
|
|
|
|
softBlockAtDoor(kCharacterTatiana, 33);
|
|
break;
|
|
case 18:
|
|
if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] &&
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] <= 2) {
|
|
softReleaseAtDoor(kCharacterTatiana, 33);
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 1;
|
|
endGraphics(kCharacterTatiana);
|
|
|
|
getCharacter(kCharacterTatiana).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
|
|
}
|
|
|
|
break;
|
|
case 69239528:
|
|
if (_globals[kGlobalChapter] == 1) {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoEnterCorrOtis, "603Db", 33, 0, 0);
|
|
} else {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoEnterCorrOtis, "673Db", 33, 0, 0);
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_ExitComp(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_ExitComp);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 15;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_ExitComp(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
if (_globals[kGlobalChapter] == 1) {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoCorrOtis, "603Bb", 33, 0, 0);
|
|
} else {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoCorrOtis, "673Bb", 33, 0, 0);
|
|
}
|
|
|
|
break;
|
|
case 18:
|
|
if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] &&
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] <= 2) {
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 0;
|
|
send(kCharacterTatiana, kCharacterCond2, 292048641, 0);
|
|
|
|
if (_globals[kGlobalChapter] != 1) {
|
|
startCycOtis(kCharacterTatiana, "673Fb");
|
|
} else {
|
|
startCycOtis(kCharacterTatiana, "603Fb");
|
|
}
|
|
|
|
softBlockAtDoor(kCharacterTatiana, 33);
|
|
}
|
|
|
|
break;
|
|
case 69239528:
|
|
softReleaseAtDoor(kCharacterTatiana, 33);
|
|
setDoor(33, kCharacterCath, 1, 10, 9);
|
|
|
|
getCharacter(kCharacterTatiana).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_CompLogic(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_CompLogic);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 16;
|
|
|
|
params->clear();
|
|
|
|
params->parameters[0] = param1.intParam;
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_CompLogic(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[0] < _gameTime && !getCharacterCurrentParams(kCharacterTatiana)[3]) {
|
|
getCharacterCurrentParams(kCharacterTatiana)[3] = 1;
|
|
setDoor(33, kCharacterCath, 0, 10, 9);
|
|
setDoor(49, kCharacterCath, 0, 10, 9);
|
|
|
|
getCharacter(kCharacterTatiana).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
|
|
break;
|
|
}
|
|
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[1]) {
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[4] || (getCharacterCurrentParams(kCharacterTatiana)[4] = _realTime + 75, _realTime != -75)) {
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[4] >= _realTime)
|
|
break;
|
|
|
|
getCharacterCurrentParams(kCharacterTatiana)[4] = 0x7FFFFFFF;
|
|
}
|
|
|
|
getCharacterCurrentParams(kCharacterTatiana)[1] = 0;
|
|
getCharacterCurrentParams(kCharacterTatiana)[2] = 1;
|
|
setDoor(33, kCharacterTatiana, 1, 0, 0);
|
|
setDoor(49, kCharacterTatiana, 1, 0, 0);
|
|
getCharacterCurrentParams(kCharacterTatiana)[4] = 0;
|
|
} else {
|
|
getCharacterCurrentParams(kCharacterTatiana)[4] = 0;
|
|
}
|
|
|
|
break;
|
|
case 8:
|
|
case 9:
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[1]) {
|
|
setDoor(33, kCharacterTatiana, 1, 0, 0);
|
|
setDoor(49, kCharacterTatiana, 1, 0, 0);
|
|
|
|
if (msg->param.intParam == 49) {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 4;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, getCathWCDialog(), 0, 0, 0);
|
|
} else if (cathHasItem(kItemPassengerList)) {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 5;
|
|
|
|
if (rnd(2) != 0) {
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, getCathSorryDialog(), 0, 0, 0);
|
|
} else {
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, "CAT1512", 0, 0, 0);
|
|
}
|
|
} else {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 6;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, getCathSorryDialog(), 0, 0, 0);
|
|
}
|
|
} else {
|
|
setDoor(33, kCharacterTatiana, 1, 0, 0);
|
|
setDoor(49, kCharacterTatiana, 1, 0, 0);
|
|
if (msg->action == 8) {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, "LIB012", 0, 0, 0);
|
|
} else {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, "LIB013", 0, 0, 0);
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 12:
|
|
setDoor(33, kCharacterTatiana, 1, 10, 9);
|
|
setDoor(49, kCharacterTatiana, 1, 10, 9);
|
|
break;
|
|
case 17:
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[2] || getCharacterCurrentParams(kCharacterTatiana)[1]) {
|
|
setDoor(33, kCharacterTatiana, 1, 10, 9);
|
|
setDoor(49, kCharacterTatiana, 1, 10, 9);
|
|
getCharacterCurrentParams(kCharacterTatiana)[2] = 0;
|
|
getCharacterCurrentParams(kCharacterTatiana)[1] = 0;
|
|
}
|
|
|
|
break;
|
|
case 18:
|
|
switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
|
|
case 1:
|
|
case 2:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
|
|
if (rnd(2) == 0) {
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, "TAT1133B", 0, 0, 0);
|
|
} else {
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, "TAT1133A", 0, 0, 0);
|
|
}
|
|
|
|
break;
|
|
case 3:
|
|
setDoor(33, kCharacterTatiana, 1, 14, 0);
|
|
setDoor(49, kCharacterTatiana, 1, 14, 0);
|
|
getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
|
|
break;
|
|
case 4:
|
|
case 5:
|
|
case 6:
|
|
getCharacterCurrentParams(kCharacterTatiana)[1] = 0;
|
|
getCharacterCurrentParams(kCharacterTatiana)[2] = 1;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_Birth(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_Birth);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 17;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_Birth(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
if (_gameTime > 1062000 && !getCharacterCurrentParams(kCharacterTatiana)[0]) {
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
|
|
CONS_Tatiana_AtDinner(0, 0, 0, 0);
|
|
}
|
|
|
|
break;
|
|
case 12:
|
|
autoMessage(kCharacterTatiana, 191198209, 0);
|
|
getCharacter(kCharacterTatiana).characterPosition.position = 5419;
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 1;
|
|
getCharacter(kCharacterTatiana).characterPosition.car = kCarRestaurant;
|
|
setDoor(33, kCharacterCath, 1, 10, 9);
|
|
setDoor(49, kCharacterCath, 1, 10, 9);
|
|
setDoor(41, kCharacterCath, 0, 255, 255);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_DoSpecialSalonWalk(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_DoSpecialSalonWalk);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 18;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_DoSpecialSalonWalk(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
if (!getCharacterCurrentParams(kCharacterTatiana)[0]) {
|
|
if (_gameTime > 1143000 && !getCharacterCurrentParams(kCharacterTatiana)[1]) {
|
|
getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
|
|
startSeqOtis(kCharacterTatiana, "806DS");
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
|
|
}
|
|
|
|
if (!getCharacterCurrentParams(kCharacterTatiana)[0]) {
|
|
bool skip = false;
|
|
|
|
if (!getCharacterCurrentParams(kCharacterTatiana)[2]) {
|
|
getCharacterCurrentParams(kCharacterTatiana)[2] = _gameTime + 4500;
|
|
if (_gameTime == -4500) {
|
|
skip = true;
|
|
startSeqOtis(kCharacterTatiana, "806DS");
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
|
|
}
|
|
}
|
|
|
|
if (!skip && getCharacterCurrentParams(kCharacterTatiana)[2] < _gameTime) {
|
|
getCharacterCurrentParams(kCharacterTatiana)[2] = 0x7FFFFFFF;
|
|
startSeqOtis(kCharacterTatiana, "806DS");
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (getCharacter(kCharacterTatiana).characterPosition.position <= 2330) {
|
|
send(kCharacterTatiana, kCharacterAlexei, 157159392, 0);
|
|
endGraphics(kCharacterTatiana);
|
|
|
|
getCharacter(kCharacterTatiana).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
|
|
}
|
|
|
|
break;
|
|
case 3:
|
|
send(kCharacterTatiana, kCharacterAlexei, 188784532, 0);
|
|
|
|
getCharacter(kCharacterTatiana).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
|
|
break;
|
|
case 12:
|
|
if (inSalon(kCharacterCath)) {
|
|
startSeqOtis(kCharacterTatiana, "806DS");
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
|
|
} else {
|
|
endGraphics(kCharacterTatiana);
|
|
}
|
|
|
|
break;
|
|
case 17:
|
|
if (!getCharacterCurrentParams(kCharacterTatiana)[0] && inSalon(kCharacterCath)) {
|
|
startSeqOtis(kCharacterTatiana, "806DS");
|
|
advanceFrame(kCharacterTatiana);
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_AtDinner(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_AtDinner);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 19;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_AtDinner(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
{
|
|
if (!whoRunningDialog(kCharacterTatiana) && getCharacterCurrentParams(kCharacterTatiana)[3] && getCharacterCurrentParams(kCharacterTatiana)[2] < 2 && !dialogRunning("TAT1066")) {
|
|
bool skip1 = false;
|
|
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[4] || (getCharacterCurrentParams(kCharacterTatiana)[4] = _realTime + 450, _realTime != -450)) {
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[4] >= _realTime) {
|
|
skip1 = true;
|
|
}
|
|
|
|
if (!skip1) {
|
|
getCharacterCurrentParams(kCharacterTatiana)[4] = 0x7FFFFFFF;
|
|
}
|
|
}
|
|
|
|
if (!skip1) {
|
|
if (!getCharacterCurrentParams(kCharacterTatiana)[2]) {
|
|
playDialog(kCharacterTatiana, "TAT1069A", -1, 0);
|
|
} else {
|
|
playDialog(kCharacterTatiana, "TAT1069B", -1, 0);
|
|
}
|
|
|
|
_globals[kGlobalMetTatianaAndVassili] = 1;
|
|
getCharacterCurrentParams(kCharacterTatiana)[2]++;
|
|
getCharacterCurrentParams(kCharacterTatiana)[4] = 0;
|
|
}
|
|
|
|
bool skip2 = false;
|
|
|
|
if (checkCathDir(kCarRestaurant, 71)) {
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[5] || (getCharacterCurrentParams(kCharacterTatiana)[5] = _realTime + 75, _realTime != -75)) {
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[5] >= _realTime) {
|
|
skip2 = true;
|
|
}
|
|
|
|
if (!skip2) {
|
|
getCharacterCurrentParams(kCharacterTatiana)[5] = 0x7FFFFFFF;
|
|
}
|
|
}
|
|
|
|
if (!skip2) {
|
|
if (!getCharacterCurrentParams(kCharacterTatiana)[2]) {
|
|
playDialog(kCharacterTatiana, "TAT1069A", -1, 0);
|
|
} else {
|
|
playDialog(kCharacterTatiana, "TAT1069B", -1, 0);
|
|
}
|
|
|
|
_globals[kGlobalMetTatianaAndVassili] = 1;
|
|
getCharacterCurrentParams(kCharacterTatiana)[2]++;
|
|
getCharacterCurrentParams(kCharacterTatiana)[5] = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_gameTime > 1084500 && !getCharacterCurrentParams(kCharacterTatiana)[6]) {
|
|
getCharacterCurrentParams(kCharacterTatiana)[6] = 1;
|
|
send(kCharacterTatiana, kCharacterHeadWait, 257489762, 0);
|
|
}
|
|
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[0]) {
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[7] || (getCharacterCurrentParams(kCharacterTatiana)[7] = _realTime + 90, _realTime != -90)) {
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[7] >= _realTime)
|
|
break;
|
|
|
|
getCharacterCurrentParams(kCharacterTatiana)[7] = 0x7FFFFFFF;
|
|
}
|
|
|
|
bumpCath(kCarRestaurant, 65, 255);
|
|
} else {
|
|
getCharacterCurrentParams(kCharacterTatiana)[7] = 0;
|
|
}
|
|
|
|
break;
|
|
}
|
|
case 12:
|
|
send(kCharacterTatiana, kCharacterTableE, 136455232, 0);
|
|
startCycOtis(kCharacterTatiana, "014A");
|
|
break;
|
|
case 17:
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
|
|
|
|
if (!checkCathDir(kCarRestaurant, 67))
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 0;
|
|
|
|
getCharacterCurrentParams(kCharacterTatiana)[3] = (checkCathDir(kCarRestaurant, 69) || checkCathDir(kCarRestaurant, 70) || checkCathDir(kCarRestaurant, 71)) ? 1 : 0;
|
|
break;
|
|
case 122358304:
|
|
startCycOtis(kCharacterTatiana, "BLANK");
|
|
break;
|
|
case 124973510:
|
|
CONS_Tatiana_ExitDining(0, 0, 0, 0);
|
|
break;
|
|
case 122288808:
|
|
startCycOtis(kCharacterTatiana, "014A");
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_ExitDining(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_ExitDining);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 20;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_ExitDining(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_WaitRCClear, 0, 0, 0, 0);
|
|
break;
|
|
case 18:
|
|
switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
|
|
case 1:
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 0;
|
|
send(kCharacterTatiana, kCharacterAugust, 223183000, 0);
|
|
blockView(kCharacterTatiana, kCarRestaurant, 67);
|
|
playDialog(kCharacterTatiana, "TAT1070", -1, 0);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoJoinedSeqOtis, "014C", 37, 103798704, "014D");
|
|
break;
|
|
case 2:
|
|
releaseView(kCharacterTatiana, kCarRestaurant, 67);
|
|
send(kCharacterTatiana, kCharacterWaiter1, 188893625, 0);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoSpecialSalonWalk, 0, 0, 0, 0);
|
|
break;
|
|
case 3:
|
|
send(kCharacterTatiana, kCharacterAugust, 268620864, 0);
|
|
CONS_Tatiana_ReturnToComp(0, 0, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_ReturnToComp(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_ReturnToComp);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 21;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_ReturnToComp(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
getCharacter(kCharacterTatiana).clothes = 1;
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 4, 8513, 0, 0);
|
|
break;
|
|
case 18:
|
|
switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
|
|
case 1:
|
|
getCharacter(kCharacterTatiana).clothes = 0;
|
|
playDialog(kCharacterTatiana, "TAT1071", -1, 0);
|
|
startSeqOtis(kCharacterTatiana, "604Aa");
|
|
blockAtDoor(kCharacterTatiana, 32);
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 1;
|
|
|
|
if (inSuite(kCharacterCath, kCarRedSleeping, 7850)) {
|
|
playNIS((kEventCathTurningNight - !isNight()));
|
|
playDialog(0, "BUMP", -1, 0);
|
|
bumpCathFDoor(32);
|
|
}
|
|
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_FinishSeqOtis, 0, 0, 0, 0);
|
|
break;
|
|
case 2:
|
|
releaseAtDoor(kCharacterTatiana, 32);
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 1;
|
|
endGraphics(kCharacterTatiana);
|
|
send(kCharacterTatiana, kCharacterAlexei, 135854208, 0);
|
|
setDoor(32, kCharacterCath, 1, 0, 0);
|
|
setDoor(33, kCharacterCath, 1, 0, 0);
|
|
|
|
// fall through
|
|
case 3:
|
|
if (whoRunningDialog(kCharacterTatiana)) {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoWait, 75, 0, 0, 0);
|
|
} else {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 4;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, "TAT1071A", 0, 0, 0);
|
|
}
|
|
|
|
break;
|
|
case 4:
|
|
getCharacter(kCharacterTatiana).characterPosition.position = 7500;
|
|
send(kCharacterTatiana, kCharacterVassili, 168459827, 0);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 5;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_CompLogic, 1156500, 0, 0, 0);
|
|
break;
|
|
case 5:
|
|
case 6:
|
|
if (_globals[kGlobalCharacterSearchingForCath] == kCharacterPolice) {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 6;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_CompLogic, _gameTime + 900, 0, 0, 0);
|
|
} else {
|
|
setDoor(49, kCharacterCath, 1, 10, 9);
|
|
CONS_Tatiana_GetSomeAir(0, 0, 0, 0);
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_GetSomeAir(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_GetSomeAir);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 22;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_GetSomeAir(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[0] == 0x7FFFFFFF || _gameTime <= 1179000) {
|
|
if (!_doneNIS[kEventTatianaAskMatchSpeakRussian] && !_doneNIS[kEventTatianaAskMatch] && cathHasItem(kItemMatchBox) && onLowPlatform(kCharacterCath)) {
|
|
setDoor(25, kCharacterTatiana, 1, 0, 1);
|
|
setDoor(23, kCharacterTatiana, 1, 0, 1);
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
if (_gameTime > 1233000) {
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 0x7FFFFFFF;
|
|
setDoor(25, kCharacterCath, 0, 255, 255);
|
|
setDoor(23, kCharacterCath, 0, 255, 255);
|
|
releaseView(kCharacterTatiana, kCarGreenSleeping, 70);
|
|
releaseView(kCharacterTatiana, kCarGreenSleeping, 71);
|
|
|
|
if (onLowPlatform(kCharacterCath)) {
|
|
playChrExcuseMe(kCharacterTatiana, kCharacterCath, 0);
|
|
if (checkCathDir(kCarGreenSleeping, 62))
|
|
bumpCath(kCarGreenSleeping, 72, 255);
|
|
}
|
|
|
|
getCharacter(kCharacterTatiana).inventoryItem = 0;
|
|
CONS_Tatiana_ReturnToCompAgain(0, 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if ((!_doneNIS[kEventTatianaAskMatchSpeakRussian] && !_doneNIS[kEventTatianaAskMatch]) || onLowPlatform(kCharacterCath) || !getCharacterCurrentParams(kCharacterTatiana)[0]) {
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = _gameTime;
|
|
if (!_gameTime) {
|
|
setDoor(25, kCharacterCath, 0, 255, 255);
|
|
setDoor(23, kCharacterCath, 0, 255, 255);
|
|
releaseView(kCharacterTatiana, kCarGreenSleeping, 70);
|
|
releaseView(kCharacterTatiana, kCarGreenSleeping, 71);
|
|
|
|
if (onLowPlatform(kCharacterCath)) {
|
|
playChrExcuseMe(kCharacterTatiana, kCharacterCath, 0);
|
|
if (checkCathDir(kCarGreenSleeping, 62))
|
|
bumpCath(kCarGreenSleeping, 72, 255);
|
|
}
|
|
|
|
getCharacter(kCharacterTatiana).inventoryItem = 0;
|
|
CONS_Tatiana_ReturnToCompAgain(0, 0, 0, 0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[0] >= _gameTime) {
|
|
if (!_doneNIS[kEventTatianaAskMatchSpeakRussian] && !_doneNIS[kEventTatianaAskMatch] && cathHasItem(kItemMatchBox) && onLowPlatform(kCharacterCath)) {
|
|
setDoor(25, kCharacterTatiana, 1, 0, 1);
|
|
setDoor(23, kCharacterTatiana, 1, 0, 1);
|
|
}
|
|
} else {
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 0x7FFFFFFF;
|
|
setDoor(25, kCharacterCath, 0, 255, 255);
|
|
setDoor(23, kCharacterCath, 0, 255, 255);
|
|
releaseView(kCharacterTatiana, kCarGreenSleeping, 70);
|
|
releaseView(kCharacterTatiana, kCarGreenSleeping, 71);
|
|
|
|
if (onLowPlatform(kCharacterCath)) {
|
|
playChrExcuseMe(kCharacterTatiana, kCharacterCath, 0);
|
|
if (checkCathDir(kCarGreenSleeping, 62))
|
|
bumpCath(kCarGreenSleeping, 72, 255);
|
|
}
|
|
|
|
getCharacter(kCharacterTatiana).inventoryItem = 0;
|
|
CONS_Tatiana_ReturnToCompAgain(0, 0, 0, 0);
|
|
}
|
|
|
|
break;
|
|
case 1:
|
|
getCharacter(kCharacterTatiana).inventoryItem = 0;
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 4;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_SaveGame, 2, kEventTatianaGivePoem, 0, 0);
|
|
break;
|
|
case 9:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_SaveGame, 2, kEventTatianaAskMatchSpeakRussian, 0, 0);
|
|
break;
|
|
case 12:
|
|
send(kCharacterTatiana, kCharacterVassili, 122732000, 0);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_ExitComp, 0, 0, 0, 0);
|
|
break;
|
|
case 18:
|
|
switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
|
|
case 1:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 3, 540, 0, 0);
|
|
break;
|
|
case 2:
|
|
if (onLowPlatform(kCharacterCath)) {
|
|
playChrExcuseMe(kCharacterTatiana, kCharacterCath, 0);
|
|
if (checkCathDir(kCarGreenSleeping, 62))
|
|
bumpCath(kCarGreenSleeping, 72, 255);
|
|
}
|
|
|
|
startCycOtis(kCharacterTatiana, "306B");
|
|
blockView(kCharacterTatiana, kCarGreenSleeping, 70);
|
|
blockView(kCharacterTatiana, kCarGreenSleeping, 71);
|
|
break;
|
|
case 3:
|
|
playNIS(((_doneNIS[kEventAlexeiSalonVassili] == 0) + kEventTatianaAskMatchSpeakRussian));
|
|
bumpCath(kCarGreenSleeping, 62, 255);
|
|
getCharacter(kCharacterTatiana).inventoryItem = 10;
|
|
setDoor(25, kCharacterCath, 0, 255, 255);
|
|
setDoor(23, kCharacterCath, 0, 255, 255);
|
|
break;
|
|
case 4:
|
|
playNIS(kEventTatianaGivePoem);
|
|
takeCathItem(kItemParchemin);
|
|
cleanNIS();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_ReturnToCompAgain(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_ReturnToCompAgain);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 23;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_ReturnToCompAgain(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 4, 7500, 0, 0);
|
|
break;
|
|
case 18:
|
|
if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1) {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_EnterComp, 0, 0, 0, 0);
|
|
} else if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 2) {
|
|
CONS_Tatiana_Asleep(0, 0, 0, 0);
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_Asleep(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_Asleep);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 24;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_Asleep(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
getCharacter(kCharacterTatiana).characterPosition.car = kCarRedSleeping;
|
|
getCharacter(kCharacterTatiana).characterPosition.position = 7500;
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 1;
|
|
setDoor(25, kCharacterCath, 0, 255, 255);
|
|
setDoor(23, kCharacterCath, 0, 255, 255);
|
|
releaseView(kCharacterTatiana, kCarGreenSleeping, 70);
|
|
releaseView(kCharacterTatiana, kCarGreenSleeping, 71);
|
|
endGraphics(kCharacterTatiana);
|
|
setDoor(33, kCharacterCath, 1, 10, 9);
|
|
setDoor(49, kCharacterCath, 1, 10, 9);
|
|
setDoor(41, kCharacterCath, 0, 255, 255);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_StartPart2(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_StartPart2);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 25;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_StartPart2(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
CONS_Tatiana_EatingBreakfast(0, 0, 0, 0);
|
|
break;
|
|
case 12:
|
|
endGraphics(kCharacterTatiana);
|
|
getCharacter(kCharacterTatiana).characterPosition.car = kCarRestaurant;
|
|
getCharacter(kCharacterTatiana).characterPosition.position = 5420;
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 1;
|
|
getCharacter(kCharacterTatiana).clothes = 2;
|
|
setDoor(33, kCharacterCath, 1, 10, 9);
|
|
setDoor(49, kCharacterCath, 1, 10, 9);
|
|
setDoor(41, kCharacterCath, 0, 255, 255);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_EatingBreakfast(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_EatingBreakfast);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 26;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_EatingBreakfast(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
if (_gameTime > 1800000 && getCharacterCurrentParams(kCharacterTatiana)[0] && rcClear()) {
|
|
getCharacter(kCharacterTatiana).inventoryItem = 0;
|
|
CONS_Tatiana_JoinAlexei(0, 0, 0, 0);
|
|
}
|
|
|
|
break;
|
|
case 1:
|
|
getCharacter(kCharacterTatiana).inventoryItem = 0;
|
|
CONS_Tatiana_BreakfastClick(0, 0, 0, 0);
|
|
break;
|
|
case 12:
|
|
startCycOtis(kCharacterTatiana, "024A");
|
|
send(kCharacterTatiana, kCharacterTableF, 136455232, 0);
|
|
getCharacter(kCharacterTatiana).inventoryItem = 0x80;
|
|
break;
|
|
case 17:
|
|
if (checkCathDir(kCarRestaurant, 64) || checkCathDir(kCarRestaurant, 65)) {
|
|
getCharacter(kCharacterTatiana).inventoryItem = 0;
|
|
CONS_Tatiana_BreakfastClick(0, 0, 0, 0);
|
|
}
|
|
|
|
break;
|
|
case 290869168:
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_BreakfastClick(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_BreakfastClick);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 27;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_BreakfastClick(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
if (_doneNIS[kEventTatianaGivePoem]) {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_SaveGame, 2, kEventTatianaBreakfastAlexei, 0, 0);
|
|
} else {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_SaveGame, 2, kEventTatianaBreakfast, 0, 0);
|
|
}
|
|
|
|
break;
|
|
case 18:
|
|
if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1) {
|
|
forceJump(kCharacterAlexei, &LogicManager::CONS_Alexei_AtBreakfast);
|
|
playNIS(kEventTatianaBreakfastAlexei);
|
|
giveCathItem(kItemParchemin);
|
|
dropItem(kItem11, 1);
|
|
CONS_Tatiana_JoinAlexei(0, 0, 0, 0);
|
|
} else if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 2) {
|
|
forceJump(kCharacterAlexei, &LogicManager::CONS_Alexei_AtBreakfast);
|
|
playNIS(kEventTatianaBreakfast);
|
|
|
|
if (cathHasItem(kItemParchemin)) {
|
|
playNIS(kEventTatianaBreakfastGivePoem);
|
|
takeCathItem(kItemParchemin);
|
|
} else {
|
|
playNIS(kEventTatianaAlexei);
|
|
}
|
|
|
|
CONS_Tatiana_JoinAlexei(0, 0, 0, 0);
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_JoinAlexei(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_JoinAlexei);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 28;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_JoinAlexei(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
getCharacter(kCharacterTatiana).inventoryItem = 0;
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 0;
|
|
send(kCharacterTatiana, kCharacterTableF, 103798704, "024D");
|
|
if (_doneNIS[kEventTatianaBreakfastAlexei] || _doneNIS[kEventTatianaBreakfast]) {
|
|
send(kCharacterTatiana, kCharacterAlexei, 236053296, 69);
|
|
} else {
|
|
send(kCharacterTatiana, kCharacterAlexei, 236053296, 0);
|
|
}
|
|
|
|
break;
|
|
case 18:
|
|
if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1)
|
|
CONS_Tatiana_LeaveBreakfast(0, 0, 0, 0);
|
|
|
|
break;
|
|
case 123857088:
|
|
startCycOtis(kCharacterTatiana, "018G");
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoWait, 1800, 0, 0, 0);
|
|
break;
|
|
case 156444784:
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 1;
|
|
startCycOtis(kCharacterTatiana, "BLANK");
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_LeaveBreakfast(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_LeaveBreakfast);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 29;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_LeaveBreakfast(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_WaitRCClear, 0, 0, 0, 0);
|
|
break;
|
|
case 18:
|
|
switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
|
|
case 1:
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 0;
|
|
blockView(kCharacterTatiana, kCarRestaurant, 63);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoJoinedSeqOtis, "018H", 34, 103798704, "018A");
|
|
break;
|
|
case 2:
|
|
releaseView(kCharacterTatiana, kCarRestaurant, 63);
|
|
send(kCharacterTatiana, kCharacterWaiter2, 302203328, 0);
|
|
startSeqOtis(kCharacterTatiana, "805DS");
|
|
|
|
if (inDiningRoom(kCharacterCath))
|
|
advanceFrame(kCharacterTatiana);
|
|
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_FinishSeqOtis, 0, 0, 0, 0);
|
|
break;
|
|
case 3:
|
|
CONS_Tatiana_ReturnComp(0, 0, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_ReturnComp(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_ReturnComp);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 30;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_ReturnComp(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 4, 7500, 0, 0);
|
|
break;
|
|
case 18:
|
|
if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1) {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_EnterComp, 0, 0, 0, 0);
|
|
} else if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 2) {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_CompLogic, 15803100, 0, 0, 0);
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_StartPart3(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_StartPart3);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 31;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_StartPart3(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
CONS_Tatiana_PlayChess(0, 0, 0, 0);
|
|
break;
|
|
case 12:
|
|
endGraphics(kCharacterTatiana);
|
|
getCharacter(kCharacterTatiana).characterPosition.position = 1750;
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 1;
|
|
getCharacter(kCharacterTatiana).characterPosition.car = kCarRestaurant;
|
|
getCharacter(kCharacterTatiana).inventoryItem = 0;
|
|
getCharacter(kCharacterTatiana).clothes = 2;
|
|
setDoor(33, kCharacterCath, 1, 10, 9);
|
|
setDoor(49, kCharacterCath, 1, 10, 9);
|
|
_items[kItemFirebird].floating = 2;
|
|
|
|
if (_doneNIS[kEventTatianaBreakfastGivePoem] || (_doneNIS[kEventTatianaGivePoem] && !_doneNIS[kEventTatianaBreakfastAlexei])) {
|
|
_items[kItemParchemin].floating = 2;
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_PlayChess(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_PlayChess);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 32;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_PlayChess(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
if (!getCharacterCurrentParams(kCharacterTatiana)[1] && !getCharacterCurrentParams(kCharacterTatiana)[4]) {
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] -= _timeSpeed;
|
|
if (_timeSpeed > getCharacterCurrentParams(kCharacterTatiana)[0]) {
|
|
startCycOtis(kCharacterTatiana, (char *)&getCharacterCurrentParams(kCharacterTatiana)[8]);
|
|
playDialog(kCharacterTatiana, (char *)&getCharacterCurrentParams(kCharacterTatiana)[5], -1, 0);
|
|
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[2] == 4 && inSalon(kCharacterCath))
|
|
_globals[kGlobalOverheardTatianaAndAlexeiPlayingChess] = 1;
|
|
|
|
getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
|
|
}
|
|
}
|
|
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[3] && getCharacterCurrentParams(kCharacterTatiana)[4]) {
|
|
if ((!getCharacterCurrentParams(kCharacterTatiana)[11] && (getCharacterCurrentParams(kCharacterTatiana)[11] = _gameTime + 6300, _gameTime == -6300)) || getCharacterCurrentParams(kCharacterTatiana)[11] < _gameTime) {
|
|
if (rcClear()) {
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 0;
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoBlockSeqOtis, "110E", 5, 52, 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 2:
|
|
getCharacterCurrentParams(kCharacterTatiana)[1] = 0;
|
|
getCharacterCurrentParams(kCharacterTatiana)[2]++;
|
|
|
|
switch (getCharacterCurrentParams(kCharacterTatiana)[2]) {
|
|
case 1:
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 900;
|
|
startCycOtis(kCharacterTatiana, "110A");
|
|
Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat3160B");
|
|
Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[8], 12, "110A");
|
|
break;
|
|
case 2:
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 9000;
|
|
Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat3160C");
|
|
Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[8], 12, "110C");
|
|
break;
|
|
case 3:
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 13500;
|
|
startCycOtis(kCharacterTatiana, "110B");
|
|
Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat3160D");
|
|
Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[8], 12, "110D");
|
|
break;
|
|
case 4:
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 9000;
|
|
startCycOtis(kCharacterTatiana, "110B");
|
|
Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat3160E");
|
|
Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[8], 12, "110D");
|
|
break;
|
|
case 5:
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 4500;
|
|
startCycOtis(kCharacterTatiana, "110B");
|
|
Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat3160G");
|
|
Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[8], 12, "110D");
|
|
break;
|
|
case 6:
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 4500;
|
|
startCycOtis(kCharacterTatiana, "110B");
|
|
Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat3160F");
|
|
break;
|
|
default:
|
|
getCharacterCurrentParams(kCharacterTatiana)[4] = 1;
|
|
break;
|
|
}
|
|
|
|
break;
|
|
case 12:
|
|
send(kCharacterTatiana, kCharacterAlexei, 122358304, 0);
|
|
send(kCharacterTatiana, kCharacterKronos, 157159392, 0);
|
|
startCycOtis(kCharacterTatiana, "110C");
|
|
playDialog(kCharacterTatiana, "Tat3160A", -1, 0);
|
|
getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
|
|
break;
|
|
case 18:
|
|
if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1) {
|
|
send(kCharacterTatiana, kCharacterAlexei, 122288808, 0);
|
|
CONS_Tatiana_ReturnComp3(0, 0, 0, 0);
|
|
}
|
|
|
|
break;
|
|
case 101169422:
|
|
getCharacterCurrentParams(kCharacterTatiana)[3] = 1;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_ReturnComp3(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_ReturnComp3);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 33;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_ReturnComp3(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
endGraphics(kCharacterTatiana);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoWait, 75, 0, 0, 0);
|
|
break;
|
|
case 18:
|
|
switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
|
|
case 1:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 4, 7500, 0, 0);
|
|
break;
|
|
case 2:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_EnterComp, 0, 0, 0, 0);
|
|
break;
|
|
case 3:
|
|
CONS_Tatiana_BeforeConcert(0, 0, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_BeforeConcert(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_BeforeConcert);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 34;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_BeforeConcert(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_CompLogic, 2097000, 0, 0, 0);
|
|
break;
|
|
case 18:
|
|
switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
|
|
case 1:
|
|
_items[kItemFirebird].floating = 1;
|
|
|
|
if (inSuite(kCharacterCath, kCarRedSleeping, 7850))
|
|
bumpCathRDoor(33);
|
|
|
|
setDoor(33, kCharacterCath, 1, 10, 9);
|
|
setDoor(49, kCharacterCath, 0, 10, 9);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_ExitComp, 0, 0, 0, 0);
|
|
break;
|
|
case 2:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 2, 9270, 0, 0);
|
|
break;
|
|
case 3:
|
|
CONS_Tatiana_Concert(0, 0, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_Concert(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_Concert);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 35;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_Concert(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
if (!getCharacterCurrentParams(kCharacterTatiana)[0] && cathHasItem(kItemFirebird) && inSuite(kCharacterCath, kCarRedSleeping, 7850) && (_gameTime < 2133000 || _globals[16])) {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_TrapCath, 0, 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (_gameTime <= 2133000)
|
|
break;
|
|
|
|
if (getCharacter(kCharacterAugust).characterPosition.car < kCarRedSleeping && (getCharacter(kCharacterAugust).characterPosition.car != kCarGreenSleeping || getCharacter(kCharacterAugust).characterPosition.position <= 5790))
|
|
break;
|
|
|
|
CONS_Tatiana_LeaveConcert(0, 0, 0, 0);
|
|
break;
|
|
case 12:
|
|
setDoor(33, kCharacterCath, 1, 10, 9);
|
|
setDoor(49, kCharacterCath, 0, 10, 9);
|
|
endGraphics(kCharacterTatiana);
|
|
getCharacter(kCharacterTatiana).characterPosition.car = kCarKronos;
|
|
getCharacter(kCharacterTatiana).characterPosition.position = 6000;
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 1;
|
|
break;
|
|
case 18:
|
|
if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] != 1)
|
|
break;
|
|
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
|
|
|
|
if (_gameTime <= 2133000)
|
|
break;
|
|
|
|
if (getCharacter(kCharacterAugust).characterPosition.car < kCarRedSleeping && (getCharacter(kCharacterAugust).characterPosition.car != kCarGreenSleeping || getCharacter(kCharacterAugust).characterPosition.position <= 5790))
|
|
break;
|
|
|
|
CONS_Tatiana_LeaveConcert(0, 0, 0, 0);
|
|
break;
|
|
case 191668032:
|
|
CONS_Tatiana_LeaveConcert(0, 0, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_LeaveConcert(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_LeaveConcert);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 36;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_LeaveConcert(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
getCharacter(kCharacterTatiana).characterPosition.car = kCarGreenSleeping;
|
|
getCharacter(kCharacterTatiana).characterPosition.position = 850;
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 0;
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 4, 7500, 0, 0);
|
|
break;
|
|
case 18:
|
|
if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1) {
|
|
if (!inSuite(kCharacterCath, kCarRedSleeping, 7850) || inComp(kCharacterCath, kCarRedSleeping, 8200)) {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_EnterComp, 0, 0, 0, 0);
|
|
break;
|
|
}
|
|
|
|
if (cathHasItem(kItemFirebird)) {
|
|
playNIS(kEventTatianaCompartmentStealEgg);
|
|
takeCathItem(kItemFirebird);
|
|
_items[kItemFirebird].floating = 2;
|
|
} else {
|
|
playNIS(kEventTatianaCompartment);
|
|
}
|
|
|
|
bumpCathRDoor(33);
|
|
} else if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 2) {
|
|
CONS_Tatiana_AfterConcert(0, 0, 0, 0);
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_AfterConcert(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_AfterConcert);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 37;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_AfterConcert(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
if (_items[kItemFirebird].floating != 1 && _items[kItemFirebird].floating != 2) {
|
|
if (!getCharacterCurrentParams(kCharacterTatiana)[2])
|
|
getCharacterCurrentParams(kCharacterTatiana)[2] = _gameTime + 900;
|
|
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[3] != 0x7FFFFFFF && getCharacterCurrentParams(kCharacterTatiana)[2] < _gameTime) {
|
|
if (_gameTime > 2227500) {
|
|
getCharacterCurrentParams(kCharacterTatiana)[3] = 0x7FFFFFFF;
|
|
_globals[kGlobalTatianaFoundOutEggStolen] = 1;
|
|
|
|
if (inComp(kCharacterAnna, kCarRedSleeping, 4070)) {
|
|
CONS_Tatiana_CryAnna(0, 0, 0, 0);
|
|
break;
|
|
}
|
|
} else {
|
|
bool skip = false;
|
|
if (!cathInCorridor(kCarRedSleeping) || !getCharacterCurrentParams(kCharacterTatiana)[3]) {
|
|
getCharacterCurrentParams(kCharacterTatiana)[3] = _gameTime + 450;
|
|
if (_gameTime == -450) {
|
|
skip = true;
|
|
|
|
_globals[kGlobalTatianaFoundOutEggStolen] = 1;
|
|
if (inComp(kCharacterAnna, kCarRedSleeping, 4070)) {
|
|
CONS_Tatiana_CryAnna(0, 0, 0, 0);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!skip && getCharacterCurrentParams(kCharacterTatiana)[3] < _gameTime) {
|
|
getCharacterCurrentParams(kCharacterTatiana)[3] = 0x7FFFFFFF;
|
|
_globals[kGlobalTatianaFoundOutEggStolen] = 1;
|
|
if (inComp(kCharacterAnna, kCarRedSleeping, 4070)) {
|
|
CONS_Tatiana_CryAnna(0, 0, 0, 0);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[0]) {
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[4] || (getCharacterCurrentParams(kCharacterTatiana)[4] = _realTime + 75, _realTime != -75)) {
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[4] >= _realTime)
|
|
break;
|
|
|
|
getCharacterCurrentParams(kCharacterTatiana)[4] = 0x7FFFFFFF;
|
|
}
|
|
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 0;
|
|
getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
|
|
setDoor(33, kCharacterTatiana, 1, 0, 0);
|
|
setDoor(49, kCharacterTatiana, 1, 0, 0);
|
|
getCharacterCurrentParams(kCharacterTatiana)[4] = 0;
|
|
} else {
|
|
getCharacterCurrentParams(kCharacterTatiana)[4] = 0;
|
|
}
|
|
|
|
break;
|
|
case 8:
|
|
case 9:
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[0]) {
|
|
setDoor(33, kCharacterTatiana, 1, 0, 0);
|
|
setDoor(49, kCharacterTatiana, 1, 0, 0);
|
|
|
|
if (msg->param.intParam == 49) {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 4;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, getCathWCDialog(), 0, 0, 0);
|
|
} else if (cathHasItem(kItemPassengerList)) {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 5;
|
|
|
|
if (rnd(2) != 0) {
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, getCathSorryDialog(), 0, 0, 0);
|
|
} else {
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, "CAT1512", 0, 0, 0);
|
|
}
|
|
} else {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 6;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, getCathSorryDialog(), 0, 0, 0);
|
|
}
|
|
} else if (msg->param.intParam == 49) {
|
|
if (cathHasItem(kItemFirebird)) {
|
|
playNIS(kEventTatianaCompartmentStealEgg);
|
|
takeCathItem(kItemFirebird);
|
|
_items[kItemFirebird].floating = 2;
|
|
} else {
|
|
playNIS(kEventTatianaCompartment);
|
|
}
|
|
|
|
bumpCathRDoor(33);
|
|
} else {
|
|
setDoor(33, kCharacterTatiana, 1, 0, 0);
|
|
setDoor(49, kCharacterTatiana, 1, 0, 0);
|
|
|
|
if (msg->action == 8) {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, "LIB012", 0, 0, 0);
|
|
} else {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, "LIB013", 0, 0, 0);
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 12:
|
|
setDoor(33, kCharacterTatiana, 1, 10, 9);
|
|
setDoor(49, kCharacterTatiana, 1, 0, 9);
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 1;
|
|
endGraphics(kCharacterTatiana);
|
|
break;
|
|
case 17:
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[1] || getCharacterCurrentParams(kCharacterTatiana)[0]) {
|
|
getCharacterCurrentParams(kCharacterTatiana)[1] = 0;
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 0;
|
|
setDoor(33, kCharacterTatiana, 1, 10, 9);
|
|
setDoor(49, kCharacterTatiana, 1, 0, 9);
|
|
}
|
|
|
|
break;
|
|
case 18:
|
|
switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
|
|
case 1:
|
|
case 2:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
|
|
if (rnd(2) == 0) {
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, "TAT1133B", 0, 0, 0);
|
|
} else {
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, "TAT1133A", 0, 0, 0);
|
|
}
|
|
|
|
break;
|
|
case 3:
|
|
setDoor(33, kCharacterTatiana, 1, 14, 0);
|
|
setDoor(49, kCharacterTatiana, 1, 14, 0);
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
|
|
break;
|
|
case 4:
|
|
case 5:
|
|
case 6:
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 0;
|
|
getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_CryAnna(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_CryAnna);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 38;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_CryAnna(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[0] || (getCharacterCurrentParams(kCharacterTatiana)[0] = _gameTime + 450, _gameTime != -450)) {
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[0] >= _gameTime)
|
|
break;
|
|
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 0x7FFFFFFF;
|
|
}
|
|
|
|
softReleaseAtDoor(kCharacterTatiana, 37);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 4;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_WalkSniffle, 4, 7500, 0, 0);
|
|
break;
|
|
case 12:
|
|
getCharacter(kCharacterTatiana).clothes = 3;
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoCorrOtis, "673Jb", 33, 0, 0);
|
|
break;
|
|
case 18:
|
|
switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
|
|
case 1:
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 0;
|
|
setDoor(33, kCharacterCath, 0, 10, 9);
|
|
setDoor(49, kCharacterCath, 0, 10, 9);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_WalkSniffle, 4, 4070, 0, 0);
|
|
break;
|
|
case 2:
|
|
startCycOtis(kCharacterTatiana, "673Gf");
|
|
softBlockAtDoor(kCharacterTatiana, 37);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, "Tat3164", 0, 0, 0);
|
|
break;
|
|
case 3:
|
|
send(kCharacterTatiana, kCharacterAnna, 236241630, 0);
|
|
break;
|
|
case 4:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 5;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoEnterCorrOtis, "673Db", 0x21, 0, 0);
|
|
break;
|
|
case 5:
|
|
case 11:
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 1;
|
|
endGraphics(kCharacterTatiana);
|
|
CONS_Tatiana_Upset(0, 0, 0, 0);
|
|
break;
|
|
case 6:
|
|
softReleaseAtDoor(kCharacterTatiana, 37);
|
|
endGraphics(kCharacterTatiana);
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 1;
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 7;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, "ANN3011", 0, 0, 0);
|
|
break;
|
|
case 7:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 8;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoWait, 900, 0, 0, 0);
|
|
break;
|
|
case 8:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 9;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoCorrOtis, "673Jf", 37, 0, 0);
|
|
break;
|
|
case 9:
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 0;
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 10;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_WalkSniffle, 4, 7500, 0, 0);
|
|
break;
|
|
case 10:
|
|
send(kCharacterTatiana, kCharacterAnna, 236517970, 0);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 11;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoEnterCorrOtis, "673Db", 33, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
break;
|
|
case 100906246:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 6;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoCorrOtis, "673Df", 37, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_Upset(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_Upset);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 39;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_Upset(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
if (!getCharacterCurrentParams(kCharacterTatiana)[0] && nearChar(kCharacterTatiana, kCharacterCath, 1000)) {
|
|
playDialog(kCharacterTatiana, "Tat3164", -1, 0);
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
|
|
}
|
|
|
|
break;
|
|
case 12:
|
|
setDoor(33, kCharacterCath, 1, 10, 9);
|
|
setDoor(49, kCharacterCath, 1, 10, 9);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_DoConcertWalk(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_DoConcertWalk);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 40;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_DoConcertWalk(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
if (checkLoc(kCharacterCath, kCarKronos) || getCharacter(kCharacterTatiana).characterPosition.car != getCharacter(kCharacterCath).characterPosition.car || walk(kCharacterTatiana, kCarKronos, 9270)) {
|
|
getCharacter(kCharacterTatiana).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
|
|
}
|
|
|
|
break;
|
|
case 6:
|
|
if (_doneNIS[kEventTatianaAskMatchSpeakRussian] || _doneNIS[kEventTatianaAskMatch] || _doneNIS[kEventVassiliSeizure]) {
|
|
if (rnd(2) == 0) {
|
|
playDialog(kCharacterCath, "CAT1010A", -1, 0);
|
|
} else {
|
|
playDialog(kCharacterCath, "CAT1010", -1, 0);
|
|
}
|
|
} else {
|
|
playCathExcuseMe();
|
|
}
|
|
|
|
break;
|
|
case 12:
|
|
if (walk(kCharacterTatiana, kCarKronos, 9270)) {
|
|
getCharacter(kCharacterTatiana).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_TrapCath(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_TrapCath);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 41;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_TrapCath(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[0]) {
|
|
if (inSuite(kCharacterCath, kCarRedSleeping, 7850) && !_doneNIS[kEventVassiliCompartmentStealEgg] && (_gameTime <= 2133000 || _globals[kGlobalConcertIsHappening])) {
|
|
if (inComp(kCharacterCath, kCarRedSleeping, 7500)) {
|
|
send(kCharacterTatiana, kCharacterCond2, 235061888, 0);
|
|
endGraphics(kCharacterTatiana);
|
|
softReleaseAtDoor(kCharacterTatiana, 33);
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 1;
|
|
|
|
if (cathHasItem(kItemFirebird)) {
|
|
playNIS(kEventTatianaCompartmentStealEgg);
|
|
takeCathItem(kItemFirebird);
|
|
_items[kItemFirebird].floating = 2;
|
|
} else {
|
|
playNIS(kEventTatianaCompartment);
|
|
}
|
|
|
|
bumpCathRDoor(33);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 4;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoWait, 150, 0, 0, 0);
|
|
}
|
|
} else {
|
|
softReleaseAtDoor(kCharacterTatiana, 33);
|
|
if (_gameTime < 2133000 || _globals[16]) {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoConcertWalk, 0, 0, 0, 0);
|
|
} else {
|
|
endGraphics(kCharacterTatiana);
|
|
|
|
getCharacter(kCharacterTatiana).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 12:
|
|
getCharacter(kCharacterTatiana).characterPosition.car = kCarRedSleeping;
|
|
getCharacter(kCharacterTatiana).characterPosition.position = 7500;
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 0;
|
|
forceJump(kCharacterCond2, &LogicManager::CONS_Cond2_TatianaComeHere);
|
|
startCycOtis(kCharacterTatiana, "673Fb");
|
|
softBlockAtDoor(kCharacterTatiana, 33);
|
|
break;
|
|
case 18:
|
|
switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
|
|
case 1:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoDialog, "Tat3161B", 0, 0, 0);
|
|
break;
|
|
case 2:
|
|
send(kCharacterTatiana, kCharacterCond2, 168316032, 0);
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
|
|
break;
|
|
case 3:
|
|
case 6:
|
|
endGraphics(kCharacterTatiana);
|
|
|
|
getCharacter(kCharacterTatiana).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
|
|
break;
|
|
case 4:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 5;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_ExitComp, 0, 0, 0, 0);
|
|
break;
|
|
case 5:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 6;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoConcertWalk, 0, 0, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
break;
|
|
case 154071333:
|
|
setDoor(33, kCharacterCath, 1, 0, 0);
|
|
setDoor(32, kCharacterCath, 1, 0, 0);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_SaveGame, 1, 0, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_WalkSniffle(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_WalkSniffle);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 42;
|
|
|
|
params->clear();
|
|
|
|
params->parameters[0] = param1.intParam;
|
|
params->parameters[1] = param2.intParam;
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_WalkSniffle(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
case 12:
|
|
if (walk(kCharacterTatiana, getCharacterCurrentParams(kCharacterTatiana)[0], getCharacterCurrentParams(kCharacterTatiana)[1])) {
|
|
getCharacter(kCharacterTatiana).currentCall--;
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, _functionsTatiana[getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall]]);
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 18, 0);
|
|
}
|
|
|
|
break;
|
|
case 5:
|
|
case 6:
|
|
playDialog(kCharacterCath, "Tat3124", getVolume(kCharacterTatiana), 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_StartPart4(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_StartPart4);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 43;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_StartPart4(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
CONS_Tatiana_InComp(0, 0, 0, 0);
|
|
break;
|
|
case 12:
|
|
endGraphics(kCharacterTatiana);
|
|
getCharacter(kCharacterTatiana).characterPosition.position = 7500;
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 1;
|
|
getCharacter(kCharacterTatiana).characterPosition.car = kCarRedSleeping;
|
|
getCharacter(kCharacterTatiana).inventoryItem = 0;
|
|
getCharacter(kCharacterTatiana).clothes = 2;
|
|
getCharacter(kCharacterTatiana).callParams[8].parameters[0] = 0;
|
|
setDoor(33, kCharacterCath, 1, 10, 9);
|
|
setDoor(49, kCharacterCath, 1, 10, 9);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_InComp(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_InComp);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 44;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_InComp(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_CompLogic, 2362500, 0, 0, 0);
|
|
break;
|
|
case 18:
|
|
if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1) {
|
|
CONS_Tatiana_MeetAlexei(0, 0, 0, 0);
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_MeetAlexei(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_MeetAlexei);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 45;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_MeetAlexei(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoCorrOtis, "673Bb", 33, 0, 0);
|
|
break;
|
|
case 18:
|
|
if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1) {
|
|
setDoor(33, kCharacterCath, 0, 10, 9);
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 0;
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 3, 540, 0, 0);
|
|
} else if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 2) {
|
|
if (onLowPlatform(kCharacterCath)) {
|
|
playChrExcuseMe(kCharacterTatiana, kCharacterCath, 0);
|
|
|
|
if (checkCathDir(kCarGreenSleeping, 62))
|
|
bumpCath(kCarGreenSleeping, 72, 255);
|
|
}
|
|
|
|
send(kCharacterTatiana, kCharacterAlexei, 123712592, 0);
|
|
CONS_Tatiana_WithAlexei(0, 0, 0, 0);
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_WithAlexei(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_WithAlexei);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 46;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_WithAlexei(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
if (!getCharacterCurrentParams(kCharacterTatiana)[1] && !getCharacterCurrentParams(kCharacterTatiana)[2]) {
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] -= _timeSpeed;
|
|
if (_timeSpeed > getCharacterCurrentParams(kCharacterTatiana)[0]) {
|
|
playDialog(kCharacterTatiana, (char *)&getCharacterCurrentParams(kCharacterTatiana)[5], -1, 0);
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[3] == 4 && nearChar(kCharacterTatiana, kCharacterCath, 2000)) {
|
|
_globals[kGlobalOverheardAlexeiTellingTatianaAboutWantingToKillVassili] = 1;
|
|
} else if (getCharacterCurrentParams(kCharacterTatiana)[3] == 7 && nearChar(kCharacterTatiana, kCharacterCath, 2000)) {
|
|
_globals[kGlobalOverheardAlexeiTellingTatianaAboutBomb] = 1;
|
|
}
|
|
|
|
getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
|
|
}
|
|
}
|
|
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[8] == 0x7FFFFFFF || _gameTime <= 2394000)
|
|
break;
|
|
|
|
if (_gameTime > 2398500) {
|
|
getCharacterCurrentParams(kCharacterTatiana)[8] = 0x7FFFFFFF;
|
|
} else {
|
|
if ((!onLowPlatform(kCharacterCath) && getCharacterCurrentParams(kCharacterTatiana)[8]) ||
|
|
(getCharacterCurrentParams(kCharacterTatiana)[8] = _gameTime, _gameTime)) {
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[8] >= _gameTime)
|
|
break;
|
|
|
|
getCharacterCurrentParams(kCharacterTatiana)[8] = 0x7FFFFFFF;
|
|
}
|
|
}
|
|
|
|
if (onLowPlatform(kCharacterCath)) {
|
|
playChrExcuseMe(kCharacterTatiana, kCharacterCath, 0);
|
|
if (checkCathDir(kCarGreenSleeping, 62))
|
|
bumpCath(kCarGreenSleeping, 72, 255);
|
|
}
|
|
|
|
send(kCharacterTatiana, kCharacterAlexei, 123536024, 0);
|
|
CONS_Tatiana_Thinking(0, 0, 0, 0);
|
|
break;
|
|
case 2:
|
|
getCharacterCurrentParams(kCharacterTatiana)[1] = 0;
|
|
getCharacterCurrentParams(kCharacterTatiana)[3]++;
|
|
switch (getCharacterCurrentParams(kCharacterTatiana)[3]) {
|
|
case 1:
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 900;
|
|
Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat4165F");
|
|
break;
|
|
case 2:
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 900;
|
|
Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat4165B");
|
|
break;
|
|
case 3:
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 1800;
|
|
Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat4165G");
|
|
break;
|
|
case 4:
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 900;
|
|
Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat4165H");
|
|
break;
|
|
case 5:
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 2700;
|
|
Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat4165C");
|
|
break;
|
|
case 6:
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 900;
|
|
Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat4165D");
|
|
break;
|
|
case 7:
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 900;
|
|
Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat4165E");
|
|
break;
|
|
default:
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 162000;
|
|
break;
|
|
}
|
|
|
|
break;
|
|
case 12:
|
|
startCycOtis(kCharacterTatiana, "306E");
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 450;
|
|
Common::strcpy_s((char *)&getCharacterCurrentParams(kCharacterTatiana)[5], 12, "Tat4165A");
|
|
break;
|
|
case 17:
|
|
if (onLowPlatform(kCharacterCath)) {
|
|
getCharacterCurrentParams(kCharacterTatiana)[2] = 1;
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[1]) {
|
|
endDialog(kCharacterTatiana);
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 2, 0);
|
|
}
|
|
} else {
|
|
getCharacterCurrentParams(kCharacterTatiana)[2] = 0;
|
|
getCharacterCurrentParams(kCharacterTatiana)[4] = 0;
|
|
}
|
|
|
|
if (checkCathDir(kCarGreenSleeping, 62) && !getCharacterCurrentParams(kCharacterTatiana)[4]) {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoSeqOtis, "306D", 0, 0, 0);
|
|
}
|
|
|
|
break;
|
|
case 18:
|
|
if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1) {
|
|
startCycOtis(kCharacterTatiana, "306E");
|
|
getCharacterCurrentParams(kCharacterTatiana)[4] = 1;
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_Thinking(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_Thinking);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 47;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_Thinking(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 4, 7500, 0, 0);
|
|
break;
|
|
case 18:
|
|
switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
|
|
case 1:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoEnterCorrOtis, "673Db", 33, 0, 0);
|
|
break;
|
|
case 2:
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 1;
|
|
endGraphics(kCharacterTatiana);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_CompLogic, 2407500, 0, 0, 0);
|
|
break;
|
|
case 3:
|
|
case 4:
|
|
if (getCharacter(kCharacterTatiana).callParams[8].parameters[0] && getModel(1) == 1) {
|
|
CONS_Tatiana_SeekCath(0, 0, 0, 0);
|
|
} else {
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 4;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_CompLogic, 900, 0, 0, 0);
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_SeekCath(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_SeekCath);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 48;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_SeekCath(HAND_PARAMS) {
|
|
int rndNum;
|
|
switch (msg->action) {
|
|
case 0:
|
|
if (!getCharacterCurrentParams(kCharacterTatiana)[0]) {
|
|
if (!_doneNIS[kEventTatianaTylerCompartment] && inComp(kCharacterCath, kCarGreenSleeping, 8200)) {
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
|
|
_globals[kGlobalTatianaScheduledToVisitCath] = 1;
|
|
setDoor(1, kCharacterTatiana, checkDoor(1), 0, 9);
|
|
}
|
|
|
|
if (!getCharacterCurrentParams(kCharacterTatiana)[0]) {
|
|
if (_doneNIS[kEventTatianaTylerCompartment] || _gameTime > 2475000) {
|
|
// Dead-code, byproduct of unrolling a goto...
|
|
//
|
|
// if (getCharacterCurrentParams(kCharacterTatiana)[0]) {
|
|
// setDoor(1, kCharacterCath, checkDoor(1), 10, 9);
|
|
// }
|
|
|
|
_globals[kGlobalTatianaScheduledToVisitCath] = 0;
|
|
softReleaseAtDoor(kCharacterTatiana, 2);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 4, 7500, 0, 0);
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!inSuite(kCharacterCath, kCarGreenSleeping, 7850)) {
|
|
setDoor(1, kCharacterCath, checkDoor(1), 10, 9);
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 0;
|
|
}
|
|
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[0] && !whoRunningDialog(kCharacterTatiana)) {
|
|
rndNum = 5 * (3 * rnd(5) + 30);
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[1] || (getCharacterCurrentParams(kCharacterTatiana)[1] = _realTime + rndNum,
|
|
_realTime + rndNum != 0)) {
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[1] >= _realTime) {
|
|
if (_doneNIS[kEventTatianaTylerCompartment] || _gameTime > 2475000) {
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[0]) {
|
|
setDoor(1, kCharacterCath, checkDoor(1), 10, 9);
|
|
}
|
|
_globals[kGlobalTatianaScheduledToVisitCath] = 0;
|
|
softReleaseAtDoor(kCharacterTatiana, 2);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 4, 7500, 0, 0);
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
getCharacterCurrentParams(kCharacterTatiana)[1] = 0x7FFFFFFF;
|
|
}
|
|
|
|
playDialog(kCharacterTatiana, "LIB012", 16, 0);
|
|
getCharacterCurrentParams(kCharacterTatiana)[1] = 0;
|
|
}
|
|
|
|
if (_doneNIS[kEventTatianaTylerCompartment] || _gameTime > 2475000) {
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[0]) {
|
|
setDoor(1, kCharacterCath, checkDoor(1), 10, 9);
|
|
}
|
|
_globals[kGlobalTatianaScheduledToVisitCath] = 0;
|
|
softReleaseAtDoor(kCharacterTatiana, 2);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 3;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 4, 7500, 0, 0);
|
|
}
|
|
|
|
break;
|
|
case 9:
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 0;
|
|
setDoor(1, kCharacterCath, 0, 10, 9);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 5;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_SaveGame, 2, kEventTatianaTylerCompartment, 0, 0);
|
|
break;
|
|
case 12:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoCorrOtis, "673Bb", 33, 0, 0);
|
|
break;
|
|
case 18:
|
|
switch (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8]) {
|
|
case 1:
|
|
setDoor(33, kCharacterCath, 0, 10, 9);
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 0;
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 2;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 3, 7500, 0, 0);
|
|
break;
|
|
case 2:
|
|
case 7:
|
|
startCycOtis(kCharacterTatiana, "673Fb");
|
|
softBlockAtDoor(kCharacterTatiana, 2);
|
|
break;
|
|
case 3:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 4;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoEnterCorrOtis, "673Db", 33, 0, 0);
|
|
break;
|
|
case 4:
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 1;
|
|
endGraphics(kCharacterTatiana);
|
|
CONS_Tatiana_Asleep4(0, 0, 0, 0);
|
|
break;
|
|
case 5:
|
|
setDoor(9, kCharacterCath, 0, 255, 255);
|
|
playNIS(kEventTatianaTylerCompartment);
|
|
playDialog(0, "LIB015", -1, 0);
|
|
bumpCathTylerComp();
|
|
break;
|
|
case 6:
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 7;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoWalk, 3, 7500, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
break;
|
|
case 238790488:
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 0;
|
|
setDoor(1, kCharacterCath, checkDoor(1), 10, 9);
|
|
softReleaseAtDoor(kCharacterTatiana, 2);
|
|
endGraphics(kCharacterTatiana);
|
|
getCharacter(kCharacterTatiana).characterPosition.car = 3;
|
|
getCharacter(kCharacterTatiana).characterPosition.position = 9460;
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 6;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_DoWait, 1800, 0, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_Asleep4(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_Asleep4);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 49;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_Asleep4(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
getCharacter(kCharacterTatiana).characterPosition.car = kCarRedSleeping;
|
|
getCharacter(kCharacterTatiana).characterPosition.position = 7500;
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 1;
|
|
setDoor(33, kCharacterCath, 1, 10, 9);
|
|
setDoor(49, kCharacterCath, 1, 10, 9);
|
|
break;
|
|
case 169360385:
|
|
CONS_Tatiana_AlexeiDead(0, 0, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_AlexeiDead(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_AlexeiDead);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 50;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_AlexeiDead(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
if (_gameTime > 2520000 && !getCharacterCurrentParams(kCharacterTatiana)[0]) {
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 1;
|
|
CONS_Tatiana_Calm(0, 0, 0, 0);
|
|
}
|
|
|
|
break;
|
|
case 2:
|
|
playDialog(kCharacterTatiana, "Tat4166", -1, 0);
|
|
break;
|
|
case 8:
|
|
if (!cathRunningDialog("LIB012"))
|
|
playDialog(0, "LIB012", -1, 0);
|
|
|
|
break;
|
|
case 9:
|
|
playDialog(0, "LIB014", -1, 0);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_SaveGame, 2, kEventVassiliDeadAlexei, 0, 0);
|
|
break;
|
|
case 12:
|
|
getCharacter(kCharacterTatiana).characterPosition.position = 8200;
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 1;
|
|
getCharacter(kCharacterTatiana).characterPosition.car = kCarRedSleeping;
|
|
setDoor(33, kCharacterCath, 0, 10, 9);
|
|
setDoor(49, kCharacterCath, 0, 10, 9);
|
|
setDoor(48, kCharacterTatiana, 0, 10, 9);
|
|
setDoor(32, kCharacterTatiana, 0, 10, 9);
|
|
|
|
if (!whoRunningDialog(kCharacterTatiana))
|
|
playDialog(kCharacterTatiana, "Tat4166", -1, 0);
|
|
|
|
break;
|
|
case 18:
|
|
if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1) {
|
|
if (dialogRunning("MUS013"))
|
|
fadeDialog("MUS013");
|
|
|
|
playNIS(kEventVassiliDeadAlexei);
|
|
send(kCharacterTatiana, kCharacterAbbot, 104060776, 0);
|
|
bumpCath(kCarRedSleeping, 38, 255);
|
|
CONS_Tatiana_Calm(0, 0, 0, 0);
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_Calm(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_Calm);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 51;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_Calm(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
setDoor(32, kCharacterCath, 1, 0, 0);
|
|
setDoor(48, kCharacterCath, 1, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_StartPart5(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_StartPart5);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 52;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_StartPart5(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
CONS_Tatiana_Trapped(0, 0, 0, 0);
|
|
break;
|
|
case 12:
|
|
endGraphics(kCharacterTatiana);
|
|
getCharacter(kCharacterTatiana).characterPosition.location = 1;
|
|
getCharacter(kCharacterTatiana).characterPosition.position = 3969;
|
|
getCharacter(kCharacterTatiana).characterPosition.car = kCarRestaurant;
|
|
getCharacter(kCharacterTatiana).inventoryItem = 0;
|
|
getCharacter(kCharacterTatiana).clothes = 0;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_Trapped(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_Trapped);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 53;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_Trapped(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 70549068:
|
|
CONS_Tatiana_Autistic(0, 0, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_Autistic(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_Autistic);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 54;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_Autistic(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 0:
|
|
if (!getCharacterCurrentParams(kCharacterTatiana)[1]) {
|
|
switch (getCharacterCurrentParams(kCharacterTatiana)[0]) {
|
|
case 0:
|
|
playDialog(kCharacterTatiana, "Tat5167A", -1, 0);
|
|
getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
|
|
break;
|
|
case 1:
|
|
playDialog(kCharacterTatiana, "Tat5167B", -1, 0);
|
|
getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
|
|
break;
|
|
case 2:
|
|
playDialog(kCharacterTatiana, "Tat5167C", -1, 0);
|
|
getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
|
|
break;
|
|
case 3:
|
|
playDialog(kCharacterTatiana, "Tat5167D", -1, 0);
|
|
getCharacterCurrentParams(kCharacterTatiana)[1] = 1;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[0] > 3) {
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[2] || (getCharacterCurrentParams(kCharacterTatiana)[2] = _realTime + 225, _realTime != -225)) {
|
|
if (getCharacterCurrentParams(kCharacterTatiana)[2] >= _realTime)
|
|
break;
|
|
|
|
getCharacterCurrentParams(kCharacterTatiana)[2] = 0x7FFFFFFF;
|
|
}
|
|
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 0;
|
|
getCharacterCurrentParams(kCharacterTatiana)[2] = 0;
|
|
}
|
|
|
|
break;
|
|
case 1:
|
|
getCharacter(kCharacterTatiana).inventoryItem = 0;
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] = 1;
|
|
TatianaCall(&LogicManager::CONS_Tatiana_SaveGame, 2, kEventTatianaVassiliTalk, 0, 0);
|
|
break;
|
|
case 2:
|
|
getCharacterCurrentParams(kCharacterTatiana)[0]++;
|
|
getCharacterCurrentParams(kCharacterTatiana)[1] = 0;
|
|
break;
|
|
case 12:
|
|
startCycOtis(kCharacterTatiana, "033A");
|
|
getCharacter(kCharacterTatiana).inventoryItem = 0x80;
|
|
break;
|
|
case 18:
|
|
if (getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall + 8] == 1) {
|
|
if (dialogRunning("MUS050"))
|
|
fadeDialog("MUS050");
|
|
|
|
if (whoRunningDialog(kCharacterTatiana))
|
|
fadeDialog(kCharacterTatiana);
|
|
|
|
if (isNight()) {
|
|
playNIS(kEventTatianaVassiliTalkNight);
|
|
} else {
|
|
playNIS(kEventTatianaVassiliTalk);
|
|
}
|
|
|
|
cleanNIS();
|
|
getCharacterCurrentParams(kCharacterTatiana)[0] = 4;
|
|
getCharacterCurrentParams(kCharacterTatiana)[1] = 0;
|
|
getCharacterCurrentParams(kCharacterTatiana)[2] = 0;
|
|
}
|
|
|
|
break;
|
|
case 203078272:
|
|
startCycOtis(kCharacterTatiana, "033E");
|
|
break;
|
|
case 236060709:
|
|
getCharacter(kCharacterTatiana).inventoryItem = 0;
|
|
CONS_Tatiana_Asleep5(0, 0, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void LogicManager::CONS_Tatiana_Asleep5(CONS_PARAMS) {
|
|
CharacterCallParams *params = &getCharacter(kCharacterTatiana).callParams[getCharacter(kCharacterTatiana).currentCall];
|
|
_engine->getMessageManager()->setMessageHandle(kCharacterTatiana, &LogicManager::HAND_Tatiana_Asleep5);
|
|
getCharacter(kCharacterTatiana).callbacks[getCharacter(kCharacterTatiana).currentCall] = 55;
|
|
|
|
params->clear();
|
|
|
|
fedEx(kCharacterTatiana, kCharacterTatiana, 12, 0);
|
|
}
|
|
|
|
void LogicManager::HAND_Tatiana_Asleep5(HAND_PARAMS) {
|
|
switch (msg->action) {
|
|
case 12:
|
|
endGraphics(kCharacterTatiana);
|
|
if (checkCathDir(kCarRestaurant, 72))
|
|
bumpCath(kCarRestaurant, 86, 255);
|
|
|
|
break;
|
|
case 17:
|
|
if (checkCathDir(kCarRestaurant, 72))
|
|
bumpCath(kCarRestaurant, 86, 255);
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void (LogicManager::*LogicManager::_functionsTatiana[])(HAND_PARAMS) = {
|
|
nullptr,
|
|
&LogicManager::HAND_Tatiana_DebugWalks,
|
|
&LogicManager::HAND_Tatiana_DoDialog,
|
|
&LogicManager::HAND_Tatiana_DoSeqOtis,
|
|
&LogicManager::HAND_Tatiana_DoBlockSeqOtis,
|
|
&LogicManager::HAND_Tatiana_DoCorrOtis,
|
|
&LogicManager::HAND_Tatiana_DoEnterCorrOtis,
|
|
&LogicManager::HAND_Tatiana_DoJoinedSeqOtis,
|
|
&LogicManager::HAND_Tatiana_FinishSeqOtis,
|
|
&LogicManager::HAND_Tatiana_DoWaitRealTime,
|
|
&LogicManager::HAND_Tatiana_DoWait,
|
|
&LogicManager::HAND_Tatiana_WaitRCClear,
|
|
&LogicManager::HAND_Tatiana_SaveGame,
|
|
&LogicManager::HAND_Tatiana_DoWalk,
|
|
&LogicManager::HAND_Tatiana_EnterComp,
|
|
&LogicManager::HAND_Tatiana_ExitComp,
|
|
&LogicManager::HAND_Tatiana_CompLogic,
|
|
&LogicManager::HAND_Tatiana_Birth,
|
|
&LogicManager::HAND_Tatiana_DoSpecialSalonWalk,
|
|
&LogicManager::HAND_Tatiana_AtDinner,
|
|
&LogicManager::HAND_Tatiana_ExitDining,
|
|
&LogicManager::HAND_Tatiana_ReturnToComp,
|
|
&LogicManager::HAND_Tatiana_GetSomeAir,
|
|
&LogicManager::HAND_Tatiana_ReturnToCompAgain,
|
|
&LogicManager::HAND_Tatiana_Asleep,
|
|
&LogicManager::HAND_Tatiana_StartPart2,
|
|
&LogicManager::HAND_Tatiana_EatingBreakfast,
|
|
&LogicManager::HAND_Tatiana_BreakfastClick,
|
|
&LogicManager::HAND_Tatiana_JoinAlexei,
|
|
&LogicManager::HAND_Tatiana_LeaveBreakfast,
|
|
&LogicManager::HAND_Tatiana_ReturnComp,
|
|
&LogicManager::HAND_Tatiana_StartPart3,
|
|
&LogicManager::HAND_Tatiana_PlayChess,
|
|
&LogicManager::HAND_Tatiana_ReturnComp3,
|
|
&LogicManager::HAND_Tatiana_BeforeConcert,
|
|
&LogicManager::HAND_Tatiana_Concert,
|
|
&LogicManager::HAND_Tatiana_LeaveConcert,
|
|
&LogicManager::HAND_Tatiana_AfterConcert,
|
|
&LogicManager::HAND_Tatiana_CryAnna,
|
|
&LogicManager::HAND_Tatiana_Upset,
|
|
&LogicManager::HAND_Tatiana_DoConcertWalk,
|
|
&LogicManager::HAND_Tatiana_TrapCath,
|
|
&LogicManager::HAND_Tatiana_WalkSniffle,
|
|
&LogicManager::HAND_Tatiana_StartPart4,
|
|
&LogicManager::HAND_Tatiana_InComp,
|
|
&LogicManager::HAND_Tatiana_MeetAlexei,
|
|
&LogicManager::HAND_Tatiana_WithAlexei,
|
|
&LogicManager::HAND_Tatiana_Thinking,
|
|
&LogicManager::HAND_Tatiana_SeekCath,
|
|
&LogicManager::HAND_Tatiana_Asleep4,
|
|
&LogicManager::HAND_Tatiana_AlexeiDead,
|
|
&LogicManager::HAND_Tatiana_Calm,
|
|
&LogicManager::HAND_Tatiana_StartPart5,
|
|
&LogicManager::HAND_Tatiana_Trapped,
|
|
&LogicManager::HAND_Tatiana_Autistic,
|
|
&LogicManager::HAND_Tatiana_Asleep5
|
|
};
|
|
|
|
} // End of namespace LastExpress
|