diff options
69 files changed, 2554 insertions, 1938 deletions
diff --git a/devtools/create_project/msbuild.cpp b/devtools/create_project/msbuild.cpp index 07ae20e7dc..018a04370f 100644 --- a/devtools/create_project/msbuild.cpp +++ b/devtools/create_project/msbuild.cpp @@ -360,7 +360,7 @@ void MSBuildProvider::outputGlobalPropFile(const BuildSetup &setup, std::ofstrea "\t\t<ClCompile>\n" "\t\t\t<DisableLanguageExtensions>true</DisableLanguageExtensions>\n" "\t\t\t<DisableSpecificWarnings>" << warnings << ";%(DisableSpecificWarnings)</DisableSpecificWarnings>\n" - "\t\t\t<AdditionalIncludeDirectories>$(" << LIBS_DEFINE << ")\\include;.\\;" << prefix << ";" << prefix << "\\engines;" << (setup.tests ? prefix + "\\test\\cxxtest;" : "") << "$(TargetDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n" + "\t\t\t<AdditionalIncludeDirectories>$(" << LIBS_DEFINE << ")\\include;.;" << prefix << ";" << prefix << "\\engines;" << (setup.tests ? prefix + "\\test\\cxxtest;" : "") << "$(TargetDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n" "\t\t\t<PreprocessorDefinitions>" << definesList << "%(PreprocessorDefinitions)</PreprocessorDefinitions>\n" "\t\t\t<ExceptionHandling>" << ((setup.devTools || setup.tests) ? "Sync" : "") << "</ExceptionHandling>\n"; @@ -434,8 +434,11 @@ void MSBuildProvider::createBuildProp(const BuildSetup &setup, bool isRelease, b "\t\t\t<DebugInformationFormat>" << (isWin32 ? "EditAndContinue" : "ProgramDatabase") << "</DebugInformationFormat>\n" // For x64 format Edit and continue is not supported, thus we default to Program Database "\t\t\t<EnablePREfast>" << (configuration == "Analysis" ? "true" : "false") << "</EnablePREfast>\n"; - if (configuration == "LLVM") - properties << "\t\t\t<AdditionalOptions>-Wno-microsoft -Wno-long-long -Wno-multichar -Wno-unknown-pragmas -Wno-reorder -Wpointer-arith -Wcast-qual -Wshadow -Wnon-virtual-dtor -Wwrite-strings -Wno-conversion -Wno-shorten-64-to-32 -Wno-sign-compare -Wno-four-char-constants -Wno-nested-anon-types %(AdditionalOptions)</AdditionalOptions>\n"; + if (configuration == "LLVM") { + // FIXME The LLVM cl wrapper does not seem to work properly with the $(TargetDir) path so we hard-code the build folder until the issue is resolved + properties << "\t\t\t<AdditionalIncludeDirectories>" << configuration << outputBitness <<";%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n" + "\t\t\t<AdditionalOptions>-Wno-microsoft -Wno-long-long -Wno-multichar -Wno-unknown-pragmas -Wno-reorder -Wpointer-arith -Wcast-qual -Wshadow -Wnon-virtual-dtor -Wwrite-strings -Wno-conversion -Wno-shorten-64-to-32 -Wno-sign-compare -Wno-four-char-constants -Wno-nested-anon-types -Qunused-arguments %(AdditionalOptions)</AdditionalOptions>\n"; + } properties << "\t\t</ClCompile>\n" "\t\t<Link>\n" @@ -521,6 +524,7 @@ void MSBuildProvider::writeFileListToProject(const FileNode &dir, std::ofstream outputNasmCommand(projectFile, "Debug", (isDuplicate ? (*entry).prefix : "")); outputNasmCommand(projectFile, "Analysis", (isDuplicate ? (*entry).prefix : "")); outputNasmCommand(projectFile, "Release", (isDuplicate ? (*entry).prefix : "")); + outputNasmCommand(projectFile, "LLVM", (isDuplicate ? (*entry).prefix : "")); projectFile << "\t\t</CustomBuild>\n"; } diff --git a/devtools/create_project/scripts/install-natvis.bat b/devtools/create_project/scripts/install-natvis.bat new file mode 100644 index 0000000000..62186df7bf --- /dev/null +++ b/devtools/create_project/scripts/install-natvis.bat @@ -0,0 +1,41 @@ +@echo off +echo Installing Visual Studio debugger integration... + +REM On 2000 & XP, the folder is "My Documents" but VS 2012 is not supported on those OSes +SET DOCUMENTS="%USERPROFILE%\Documents" +set FOUND=0 + +REM Set current folder +cd /d %~dp0 + +:INSTALL_VS11 +SET FOLDER="%DOCUMENTS%\Visual Studio 2012" +IF EXIST %FOLDER% ( + echo Visual Studio 2012 + copy scummvm.natvis %FOLDER%\Visualizers + IF NOT %ERRORLEVEL% == 0 GOTO FAILED + SET FOUND=1 +) + +:INSTALL_VS12 +SET FOLDER="%DOCUMENTS%\Visual Studio 2013" +IF EXIST %FOLDER% ( + echo Visual Studio 2013 + copy scummvm.natvis %FOLDER%\Visualizers + IF NOT %ERRORLEVEL% == 0 GOTO FAILED + SET FOUND=1 +) + +IF %FOUND% == 1 goto SUCCESS +echo Failed to find Visual Studio user folder. + +:SUCCESS +echo. +echo Done! +goto END + +:FAILED +echo Failed to install visualization file + +:END +pause diff --git a/devtools/create_project/scripts/scummvm.natvis b/devtools/create_project/scripts/scummvm.natvis index ffeced7cff..995668690e 100644 --- a/devtools/create_project/scripts/scummvm.natvis +++ b/devtools/create_project/scripts/scummvm.natvis @@ -15,6 +15,29 @@ --> <AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010"> + <UIVisualizer ServiceId="{A452AFEA-3DF6-46BB-9177-C0B08F318025}" Id="1" MenuName="Add to Image Watch"/> + + <Type Name="Graphics::Surface"> + <UIVisualizer ServiceId="{A452AFEA-3DF6-46BB-9177-C0B08F318025}" Id="1" /> + </Type> + + <Type Name="Graphics::Surface"> + <Expand> + <Synthetic Name="[type]"> + <DisplayString>UINT8</DisplayString> + </Synthetic> + <Item Name="[channels]" Condition="format.bytesPerPixel==1">1</Item> + <Item Name="[channels]" Condition="format.bytesPerPixel==2">2</Item> + <Synthetic Name="[channels]" Condition="format.bytesPerPixel==4"> + <DisplayString>RGBA</DisplayString> + </Synthetic> + <Item Name="[width]">w</Item> + <Item Name="[height]">h</Item> + <Item Name="[stride]">pitch</Item> + <Item Name="[data]">pixels</Item> + </Expand> + </Type> + <Type Name="Common::Array<*>"> <DisplayString>{{size = {_size}}}</DisplayString> <Expand> diff --git a/engines/fullpipe/constants.h b/engines/fullpipe/constants.h index b774c89ed0..1a59cce787 100644 --- a/engines/fullpipe/constants.h +++ b/engines/fullpipe/constants.h @@ -122,6 +122,7 @@ namespace Fullpipe { #define MV_MAN_JUMPONPLANK 551 #define MV_MAN_LOOKLADDER 520 #define MV_MAN_LOOKUP 4773 +#define MV_MAN_PLANKTOLADDER 553 #define MV_MAN_STARTLADDER 452 #define MV_MAN_STARTLADDER2 2842 #define MV_MAN_STOPLADDER 454 @@ -129,10 +130,12 @@ namespace Fullpipe { #define MV_MAN_TOLADDER 448 #define MV_MAN_TOLADDER2 2841 #define MV_MAN_TURN_LU 486 +#define MV_MAN_TURN_SUD 1089 #define MV_PNK_WEIGHTLEFT 541 #define MV_PNK_WEIGHTRIGHT 502 #define MV_SC4_COIN_default 1029 #define MV_SPK4_PLAY 3276 +#define MV_SPR_LOWER 543 #define PIC_CMN_EVAL 3468 #define PIC_CSR_DEFAULT 4891 #define PIC_CSR_DEFAULT_INV 4892 @@ -292,13 +295,17 @@ namespace Fullpipe { #define ST_LBN_8P 2775 #define ST_LBN_9N 2777 #define ST_LBN_9P 2778 +#define ST_MAN_GOLADDER 450 +#define ST_MAN_GOLADDER2 2843 #define ST_MAN_EMPTY 476 #define ST_MAN_LADDERDOWN 521 #define ST_MAN_ONPLANK 552 #define ST_MAN_RIGHT 325 #define ST_MAN_SIT 1164 #define ST_MAN_STANDLADDER 453 +#define ST_MAN_UP 449 #define ST_PNK_WEIGHTLEFT 503 +#define ST_SPR_UP 544 #define TrubaDown 697 #define TrubaLeft 474 #define TrubaRight 696 diff --git a/engines/fullpipe/fullpipe.cpp b/engines/fullpipe/fullpipe.cpp index a254ea642d..970af423ae 100644 --- a/engines/fullpipe/fullpipe.cpp +++ b/engines/fullpipe/fullpipe.cpp @@ -35,6 +35,7 @@ #include "fullpipe/input.h" #include "fullpipe/scenes.h" #include "fullpipe/floaters.h" +#include "fullpipe/motion.h" #include "fullpipe/console.h" namespace Fullpipe { @@ -100,6 +101,7 @@ FullpipeEngine::FullpipeEngine(OSystem *syst, const ADGameDescription *gameDesc) _scene2 = 0; _movTable = 0; _floaters = 0; + _mgm = 0; _globalMessageQueueList = 0; _messageHandlers = 0; @@ -168,6 +170,7 @@ void FullpipeEngine::initialize() { _sceneRect.bottom = 599; _floaters = new Floaters; + _mgm = new MGM; } Common::Error FullpipeEngine::run() { diff --git a/engines/fullpipe/fullpipe.h b/engines/fullpipe/fullpipe.h index ca025a48a2..eb502cbadf 100644 --- a/engines/fullpipe/fullpipe.h +++ b/engines/fullpipe/fullpipe.h @@ -61,6 +61,7 @@ class GameObject; class GlobalMessageQueueList; struct MessageHandler; struct MovTable; +class MGM; class NGIArchive; class Scene; class SoundList; @@ -173,6 +174,9 @@ public: MovTable *_movTable; Floaters *_floaters; + MGM *_mgm; + + Common::Array<Common::Point *> _arcadeKeys; void initMap(); void updateMapPiece(int mapId, int update); @@ -239,7 +243,9 @@ public: void openMainMenu(); void initArcadeKeys(const char *varname); + void processArcade(ExCommand *ex); void winArcade(); + void getAllInventory(); int lift_getButtonIdP(int objid); diff --git a/engines/fullpipe/gameloader.cpp b/engines/fullpipe/gameloader.cpp index a2ab71d7e3..e130337001 100644 --- a/engines/fullpipe/gameloader.cpp +++ b/engines/fullpipe/gameloader.cpp @@ -209,7 +209,7 @@ bool GameLoader::gotoScene(int sceneId, int entranceId) { ex->_messageNum = 0; ex->_excFlags |= 3; - mq->_exCommands.push_back(ex); + mq->addExCommandToEnd(ex); } mq->setFlags(mq->getFlags() | 1); diff --git a/engines/fullpipe/gfx.cpp b/engines/fullpipe/gfx.cpp index a4dbc30669..d54f7591b4 100644 --- a/engines/fullpipe/gfx.cpp +++ b/engines/fullpipe/gfx.cpp @@ -659,8 +659,8 @@ void Picture::displayPicture() { if (!_dataSize) return; - g_fullpipe->_backgroundSurface.fillRect(Common::Rect(0, 0, 799, 599), 0); - g_fullpipe->_system->copyRectToScreen(g_fullpipe->_backgroundSurface.getBasePtr(0, 0), g_fullpipe->_backgroundSurface.pitch, 0, 0, 799, 599); + g_fullpipe->_backgroundSurface.fillRect(Common::Rect(0, 0, 800, 600), 0); + g_fullpipe->_system->copyRectToScreen(g_fullpipe->_backgroundSurface.getBasePtr(0, 0), g_fullpipe->_backgroundSurface.pitch, 0, 0, 800, 600); draw(0, 0, 0, 0); diff --git a/engines/fullpipe/interaction.cpp b/engines/fullpipe/interaction.cpp index b513d2b8ee..cd9aad5b22 100644 --- a/engines/fullpipe/interaction.cpp +++ b/engines/fullpipe/interaction.cpp @@ -186,7 +186,7 @@ bool InteractionController::handleInteraction(StaticANIObject *subj, GameObject ex->_excFlags = 3; ex->_field_14 = (obj->_objtype != kObjTypePictureObject); ex->_field_20 = invId; - mq->_exCommands.push_back(ex); + mq->addExCommandToEnd(ex); if (mq->_isFinished) { mq->_isFinished = 0; @@ -255,7 +255,7 @@ LABEL_38: ex->_field_14 = 0x100; ex->_messageNum = 0; ex->_excFlags = 3; - mq->_exCommands.push_back(ex); + mq->addExCommandToEnd(ex); } ex = new ExCommand(obj->_id, 34, 0x100, 0, 0, 0, 1, 0, 0, 0); @@ -263,19 +263,19 @@ LABEL_38: ex->_field_14 = 0x100; ex->_messageNum = 0; ex->_excFlags = 3; - mq->_exCommands.push_back(ex); + mq->addExCommandToEnd(ex); ex = new ExCommand(subj->_id, 34, 0x100, 0, 0, 0, 1, 0, 0, 0); ex->_keyCode = subj->_okeyCode; ex->_field_14 = 0x100; ex->_messageNum = 0; ex->_excFlags = 3; - mq->_exCommands.push_back(ex); + mq->addExCommandToEnd(ex); ex = new ExCommand(subj->_id, 17, 0x40, 0, 0, 0, 1, 0, 0, 0); ex->_excFlags |= 3; ex->_keyCode = 0; - mq->_exCommands.push_back(ex); + mq->addExCommandToEnd(ex); if (!mq->chain(subj)) { delete mq; @@ -317,7 +317,7 @@ LABEL_38: ex->_excFlags = 3; ex->_field_20 = invId; ex->_field_14 = (obj->_objtype != kObjTypePictureObject); - mq->_exCommands.push_back(ex); + mq->addExCommandToEnd(ex); someFlag = true; @@ -357,14 +357,14 @@ LABEL_38: ex->_field_14 = 0x80; ex->_keyCode = ani->_okeyCode; ex->_excFlags = 3; - mq->_exCommands.push_back(ex); + mq->addExCommandToEnd(ex); } } ex = new ExCommand(ani->_id, 34, 0x100, 0, 0, 0, 1, 0, 0, 0); ex->_keyCode = ani->_okeyCode; ex->_field_14 = 0x100; ex->_excFlags = 3; - mq->_exCommands.push_back(ex); + mq->addExCommandToEnd(ex); } else { ex = new ExCommand(subj->_id, 55, 0, 0, 0, 0, 1, 0, 0, 0); ex->_x = ani->_id; @@ -373,7 +373,7 @@ LABEL_38: ex->_excFlags = 2; ex->_field_14 = (obj->_objtype != kObjTypePictureObject); ex->_field_20 = invId; - mq->_exCommands.push_back(ex); + mq->addExCommandToEnd(ex); if (!mq->_isFinished) return true; diff --git a/engines/fullpipe/messages.cpp b/engines/fullpipe/messages.cpp index 4abf2ef56f..8ed99fce15 100644 --- a/engines/fullpipe/messages.cpp +++ b/engines/fullpipe/messages.cpp @@ -309,7 +309,7 @@ void MessageQueue::update() { if (_counter > 0) _counter--; - if (_exCommands.size()) { + if (getCount()) { sendNextCommand(); } else if (_counter == 0) { _isFinished = 1; @@ -326,8 +326,12 @@ void MessageQueue::addExCommand(ExCommand *ex) { _exCommands.push_front(ex); } +void MessageQueue::addExCommandToEnd(ExCommand *ex) { + _exCommands.push_back(ex); +} + ExCommand *MessageQueue::getExCommandByIndex(uint idx) { - if (idx > _exCommands.size()) + if (idx > getCount()) return 0; Common::List<ExCommand *>::iterator it = _exCommands.begin(); @@ -341,7 +345,7 @@ ExCommand *MessageQueue::getExCommandByIndex(uint idx) { } void MessageQueue::deleteExCommandByIndex(uint idx, bool doFree) { - if (idx > _exCommands.size()) + if (idx > getCount()) return; Common::List<ExCommand *>::iterator it = _exCommands.begin(); @@ -351,10 +355,10 @@ void MessageQueue::deleteExCommandByIndex(uint idx, bool doFree) { idx--; } - _exCommands.erase(it); - if (doFree) delete *it; + + _exCommands.erase(it); } void MessageQueue::transferExCommands(MessageQueue *mq) { @@ -365,7 +369,7 @@ void MessageQueue::transferExCommands(MessageQueue *mq) { } void MessageQueue::sendNextCommand() { - if (_exCommands.size()) { + if (getCount()) { if (!(_flags & 4) && (_flags & 1)) { messageQueueCallback1(16); } @@ -492,7 +496,8 @@ int MessageQueue::calcDuration(StaticANIObject *obj) { ExCommand *ex; Movement *mov; - for (uint i = 0; (ex = getExCommandByIndex(i)); i++) + for (uint i = 0; i < getCount(); i++) { + ex = getExCommandByIndex(i); if (ex->_parentId == obj->_id) { if (ex->_messageKind == 1 || ex->_messageKind == 20) { if ((mov = obj->getMovementById(ex->_messageNum)) != 0) { @@ -503,12 +508,13 @@ int MessageQueue::calcDuration(StaticANIObject *obj) { } } } + } return res; } void MessageQueue::changeParam28ForObjectId(int objId, int oldParam28, int newParam28) { - for (uint i = 0; i < _exCommands.size(); i++) { + for (uint i = 0; i < getCount(); i++) { ExCommand *ex = getExCommandByIndex(i); int k = ex->_messageKind; @@ -557,16 +563,32 @@ void GlobalMessageQueueList::disableQueueById(int id) { } int GlobalMessageQueueList::compact() { + int *useList = new int[size() + 2]; + + for (uint i = 0; i < size() + 2; i++) + useList[i] = 0; + for (uint i = 0; i < size();) { if (((MessageQueue *)_storage[i])->_isFinished) { disableQueueById(_storage[i]->_id); remove_at(i); } else { + if (_storage[i]->_id < size() + 2) + useList[_storage[i]->_id] = 1; i++; } } - return size() + 1; + uint i; + + for (i = 1; i < size() + 2; i++) { + if (!useList[i]) + break; + } + + delete [] useList; + + return i; } void GlobalMessageQueueList::addMessageQueue(MessageQueue *msg) { @@ -779,8 +801,8 @@ bool chainQueue(int queueId, int flags) { nmq->_flags |= flags; - if (!mq->chain(0)) { - delete mq; + if (!nmq->chain(0)) { + delete nmq; return false; } @@ -788,4 +810,17 @@ bool chainQueue(int queueId, int flags) { return true; } +void postExCommand(int parentId, int keyCode, int x, int y, int f20, int f14) { + ExCommand *ex = new ExCommand(parentId, 17, 64, 0, 0, 0, 1, 0, 0, 0); + + ex->_keyCode = keyCode; + ex->_excFlags |= 3; + ex->_x = x; + ex->_y = y; + ex->_field_20 = f20; + ex->_field_14 = f14; + + ex->postMessage(); +} + } // End of namespace Fullpipe diff --git a/engines/fullpipe/messages.h b/engines/fullpipe/messages.h index 326f05cef3..ca61dad007 100644 --- a/engines/fullpipe/messages.h +++ b/engines/fullpipe/messages.h @@ -100,13 +100,15 @@ class MessageQueue : public CObject { char *_queueName; int16 _dataId; CObject *_field_14; - Common::List<ExCommand *> _exCommands; int _counter; int _field_38; int _isFinished; int _parId; int _flag1; + private: + Common::List<ExCommand *> _exCommands; + public: MessageQueue(); MessageQueue(int dataId); @@ -121,6 +123,7 @@ class MessageQueue : public CObject { uint getCount() { return _exCommands.size(); } void addExCommand(ExCommand *ex); + void addExCommandToEnd(ExCommand *ex); ExCommand *getExCommandByIndex(uint idx); void deleteExCommandByIndex(uint idx, bool doFree); @@ -175,6 +178,7 @@ void updateGlobalMessageQueue(int id, int objid); void clearGlobalMessageQueueList1(); bool chainQueue(int queueId, int flags); +void postExCommand(int parentId, int keyCode, int x, int y, int f20, int f16); } // End of namespace Fullpipe diff --git a/engines/fullpipe/motion.cpp b/engines/fullpipe/motion.cpp index 20b710d7df..fbe2768486 100644 --- a/engines/fullpipe/motion.cpp +++ b/engines/fullpipe/motion.cpp @@ -170,7 +170,7 @@ MessageQueue *MctlCompound::doWalkTo(StaticANIObject *subj, int xpos, int ypos, for (uint i = 0; i < closestP->_messageQueueObj->getCount(); i++) { ex = new ExCommand(closestP->_messageQueueObj->getExCommandByIndex(i)); ex->_excFlags |= 2; - mq->_exCommands.push_back(ex); + mq->addExCommandToEnd(ex); } ex = new ExCommand(subj->_id, 51, 0, xpos, ypos, 0, 1, 0, 0, 0); @@ -179,7 +179,7 @@ MessageQueue *MctlCompound::doWalkTo(StaticANIObject *subj, int xpos, int ypos, ex->_keyCode = subj->_okeyCode; ex->_excFlags |= 2; - mq->_exCommands.push_back(ex); + mq->addExCommandToEnd(ex); } return mq; @@ -817,7 +817,7 @@ MessageQueue *MovGraph2::buildMovInfo1MessageQueue(MovInfo1 *movInfo) { ex->_keyCode = _items2[movInfo->field_0]->_obj->_okeyCode; ex->_field_24 = 1; ex->_field_14 = -1; - mq->_exCommands.push_back(ex); + mq->addExCommandToEnd(ex); curX += mg2i->_mx; curY += mg2i->_my; @@ -1046,20 +1046,20 @@ MessageQueue *MovGraph2::doWalkTo(StaticANIObject *obj, int xpos, int ypos, int ex->_keyCode = picAniInfo.field_8; ex->_excFlags |= 2; - mq->_exCommands.push_back(ex); + mq->addExCommandToEnd(ex); } else { ExCommand *ex = new ExCommand(picAniInfo.objectId, 22, obj->_statics->_staticsId, 0, 0, 0, 1, 0, 0, 0); ex->_keyCode = picAniInfo.field_8; ex->_excFlags |= 3; - mq->_exCommands.push_back(ex); + mq->addExCommandToEnd(ex); ex = new ExCommand(picAniInfo.objectId, 5, -1, obj->_ox, obj->_oy, 0, 1, 0, 0, 0); ex->_field_14 = -1; ex->_keyCode = picAniInfo.field_8; ex->_excFlags |= 3; - mq->_exCommands.push_back(ex); + mq->addExCommandToEnd(ex); } obj->setPicAniInfo(&picAniInfo); @@ -1160,6 +1160,7 @@ MessageQueue *MovGraph2::doWalkTo(StaticANIObject *obj, int xpos, int ypos, int if (_items2[idx]->_subItems[idxsub]._staticsId1 != obj->_statics->_staticsId) movInfo1.flags |= 2; + // FIXME: This somehow corrupts the heap (reported by MSVC) buildMovInfo1SubItems(&movInfo1, &tempLinkList, &linkInfoSource, &linkInfoDest); MessageQueue *mq = buildMovInfo1MessageQueue(&movInfo1); @@ -1519,6 +1520,36 @@ MessageQueue *MGM::genMovement(MGMInfo *mgminfo) { return 0; } +void MGM::updateAnimStatics(StaticANIObject *ani, int staticsId) { + if (getItemIndexById(ani->_id) == -1) + return; + + if (ani->_movement) { + ani->queueMessageQueue(0); + ani->_movement->gotoLastFrame(); + ani->_statics = ani->_movement->_staticsObj2; + ani->_movement = 0; + + ani->setOXY(ani->_movement->_ox, ani->_movement->_oy); + } + + if (ani->_statics) { + Common::Point point; + + getPoint(&point, ani->_id, ani->_statics->_staticsId, staticsId); + + ani->setOXY(ani->_ox + point.x, ani->_oy + point.y); + + ani->_statics = ani->getStaticsById(staticsId); + } +} + +Common::Point *MGM::getPoint(Common::Point *point, int aniId, int staticsId1, int staticsId2) { + warning("STUB: MGM::getPoint()"); + + return point; +} + MovGraphLink::MovGraphLink() { _distance = 0; _angle = 0; diff --git a/engines/fullpipe/motion.h b/engines/fullpipe/motion.h index 5842b296da..b49fea55bc 100644 --- a/engines/fullpipe/motion.h +++ b/engines/fullpipe/motion.h @@ -159,6 +159,8 @@ public: int getItemIndexById(int objId); MessageQueue *genMovement(MGMInfo *mgminfo); + void updateAnimStatics(StaticANIObject *ani, int staticsId); + Common::Point *getPoint(Common::Point *point, int aniId, int staticsId1, int staticsId2); }; struct MctlLadderMovementVars { diff --git a/engines/fullpipe/scene.cpp b/engines/fullpipe/scene.cpp index 61ff3457a7..a5a286cfcb 100644 --- a/engines/fullpipe/scene.cpp +++ b/engines/fullpipe/scene.cpp @@ -450,6 +450,9 @@ void Scene::draw() { debug(6, ">>>>> Scene::draw()"); updateScrolling(); + // Clean previous stuff + g_fullpipe->_backgroundSurface.fillRect(Common::Rect(0, 0, 800, 600), 0); + drawContent(60000, 0, true); objectList_sortByPriority(_staticANIObjectList2); diff --git a/engines/fullpipe/scenes.cpp b/engines/fullpipe/scenes.cpp index 9dc4c74b15..37d1250ae0 100644 --- a/engines/fullpipe/scenes.cpp +++ b/engines/fullpipe/scenes.cpp @@ -72,7 +72,7 @@ Vars::Vars() { scene04_coinPut = false; scene04_soundPlaying = false; scene04_dynamicPhaseIndex = 0; - scene04_needJumping = false; + scene04_dudeOnLadder = false; scene04_sceneClickX = 0; scene04_sceneClickY = 0; @@ -83,7 +83,7 @@ Vars::Vars() { scene04_var02 = 0; scene04_var04 = 0; scene04_walkingKozyawka = 0; - scene04_var06 = 0; + scene04_bottleWeight = 0; scene04_var07 = 0; scene04_var08 = 0; scene04_var09 = 0; @@ -99,6 +99,7 @@ Vars::Vars() { scene04_var19 = 0; scene04_var20 = 0; scene04_var24 = 0; + scene04_var25 = 0; scene04_bottleY = 0; scene04_ladderOffset = 0; @@ -707,7 +708,29 @@ int defaultUpdateCursor() { } void FullpipeEngine::initArcadeKeys(const char *varname) { - warning("STUB: FullpipeEngine::initArcadeKeys(\"%s\")", varname); + GameVar *var = getGameLoaderGameVar()->getSubVarByName(varname)->getSubVarByName("KEYPOS"); + + if (!var) + return; + + int cnt = var->getSubVarsCount(); + + for (int i = 0; i < cnt; i++) { + Common::Point *point = new Common::Point; + + GameVar *sub = var->getSubVarByIndex(i); + + point->x = sub->getSubVarAsInt("X"); + point->y = sub->getSubVarAsInt("Y"); + + _arcadeKeys.push_back(point); + } +} + +void FullpipeEngine::processArcade(ExCommand *ex) { + warning("STUB: FullpipeEngine::processArcade()"); } + + } // End of namespace Fullpipe diff --git a/engines/fullpipe/scenes.h b/engines/fullpipe/scenes.h index e7960fe010..38f685e82a 100644 --- a/engines/fullpipe/scenes.h +++ b/engines/fullpipe/scenes.h @@ -99,7 +99,7 @@ public: bool scene04_coinPut; bool scene04_soundPlaying; - bool scene04_needJumping; + bool scene04_dudeOnLadder; int scene04_dynamicPhaseIndex; int scene04_sceneClickX; @@ -115,7 +115,7 @@ public: int scene04_var02; int scene04_var04; - int scene04_var06; + int scene04_bottleWeight; int scene04_var07; int scene04_var08; int scene04_var09; @@ -129,6 +129,7 @@ public: int scene04_var19; int scene04_var20; StaticANIObject *scene04_var24; + int scene04_var25; PictureObject *selector; }; diff --git a/engines/fullpipe/scenes/scene03.cpp b/engines/fullpipe/scenes/scene03.cpp index e9f8a240e8..1bfd8b8fcc 100644 --- a/engines/fullpipe/scenes/scene03.cpp +++ b/engines/fullpipe/scenes/scene03.cpp @@ -241,7 +241,7 @@ int sceneHandler03(ExCommand *ex) { g_fullpipe->lift_sub05(ex); break; - case 93: + case 29: { StaticANIObject *ani = g_fullpipe->_currentScene->getStaticANIObjectAtPos(ex->_sceneClickX, ex->_sceneClickY); if (ani && ani->_id == ANI_LIFTBUTTON) { @@ -266,7 +266,7 @@ int sceneHandler03(ExCommand *ex) { break; } - case 97: + case 33: { int res = 0; diff --git a/engines/fullpipe/scenes/scene04.cpp b/engines/fullpipe/scenes/scene04.cpp index 3c2c02298a..07ac109477 100644 --- a/engines/fullpipe/scenes/scene04.cpp +++ b/engines/fullpipe/scenes/scene04.cpp @@ -61,7 +61,7 @@ void scene04_speakerCallback(int *phase) { } void scene04_initScene(Scene *sc) { - g_vars->scene04_needJumping = false; + g_vars->scene04_dudeOnLadder = false; g_vars->scene04_bottle = sc->getPictureObjectById(PIC_SC4_BOTTLE, 0); g_vars->scene04_hand = sc->getStaticANIObject1ById(ANI_HAND, -1); g_vars->scene04_plank = sc->getStaticANIObject1ById(ANI_PLANK, -1); @@ -164,7 +164,7 @@ void scene04_initScene(Scene *sc) { g_vars->scene04_soundPlaying = false; g_vars->scene04_var04 = 0; g_vars->scene04_walkingKozyawka = 0; - g_vars->scene04_var06 = 2; + g_vars->scene04_bottleWeight = 2; g_vars->scene04_dynamicPhaseIndex = 0; g_vars->scene04_kozyawkiAni.clear(); @@ -196,7 +196,7 @@ void scene04_initScene(Scene *sc) { } bool sceneHandler04_friesAreWalking() { - if (g_vars->scene04_needJumping && g_fullpipe->_aniMan->isIdle() && !(g_fullpipe->_aniMan->_flags & 0x100)) { + if (g_vars->scene04_dudeOnLadder && g_fullpipe->_aniMan->isIdle() && !(g_fullpipe->_aniMan->_flags & 0x100)) { int col = g_vars->scene04_ladder->collisionDetection(g_fullpipe->_aniMan); if (col >= 3 && col <= 6 ) { Movement *koz; @@ -244,10 +244,6 @@ int scene04_updateCursor() { return g_fullpipe->_cursorId; } -void sceneHandlers_sub01(ExCommand *ex) { - warning("STUB: sceneHandlers_sub01()"); -} - void sceneHandler04_checkBigBallClick() { StaticANIObject *ball = g_fullpipe->_currentScene->getStaticANIObject1ById(ANI_BIGBALL, -1); @@ -278,8 +274,114 @@ void sceneHandler04_clickButton() { } } +void sceneHandler04_downLadder(int x, int y) { + g_vars->scene04_ladder->method34(g_fullpipe->_aniMan, x + g_vars->scene04_ladder->_ladder_field_20, y + g_vars->scene04_ladder->_ladder_field_24, 0, 0); +} + +void sceneHandler04_walkClimbLadder(ExCommand *ex) { + MessageQueue *mq = new MessageQueue(g_fullpipe->_globalMessageQueueList->compact()); + + ExCommand *ex1 = new ExCommand(ANI_MAN, 1, MV_MAN_TOLADDER, 0, 0, 0, 1, 0, 0, 0); + + ex1->_keyCode = g_fullpipe->_aniMan->_okeyCode; + ex1->_excFlags |= 2; + + mq->addExCommandToEnd(ex1); + + ExCommand *ex2 = new ExCommand(ANI_MAN, 1, MV_MAN_STOPLADDER, 0, 0, 0, 1, 0, 0, 0); + + ex2->_keyCode = g_fullpipe->_aniMan->_okeyCode; + ex2->_excFlags |= 2; + + mq->addExCommandToEnd(ex2); + + ExCommand *ex3; + + if (ex) { + ex3 = new ExCommand(ex); + } else { + ex3 = new ExCommand(0, 17, MSG_SC4_CLICKLADDER, 0, 0, 0, 1, 0, 0, 0); + ex3->_excFlags |= 3; + } + + mq->addExCommandToEnd(ex3); + + mq->setFlags(mq->getFlags() | 1); + + mq->chain(0); + + g_vars->scene04_dudeOnLadder = 1; + + g_vars->scene04_ladder = new MctlLadder; + g_vars->scene04_ladder->_objId = MV_MAN_TURN_SUD; + g_vars->scene04_ladder->_ladderY = 406; + g_vars->scene04_ladder->_ladder_field_14 = 12; + g_vars->scene04_ladder->_ladder_field_18 = 0; + g_vars->scene04_ladder->_height = -40; + g_vars->scene04_ladder->_ladder_field_20 = 0; + g_vars->scene04_ladder->_ladder_field_24 = -60; + + g_vars->scene04_ladder->addObject(g_fullpipe->_aniMan); + + if (g_vars->scene04_soundPlaying) { + g_vars->scene04_ladder->_movements.front()->movVars->varUpStart = MV_MAN_STARTLADDER2; + g_vars->scene04_ladder->_movements.front()->movVars->varUpGo = MV_MAN_GOLADDER2; + g_vars->scene04_ladder->_movements.front()->movVars->varUpStop = MV_MAN_STOPLADDER2; + g_vars->scene04_ladder->_movements.front()->staticIds[2] = ST_MAN_GOLADDER2; + } else { + g_vars->scene04_ladder->_movements.front()->movVars->varUpStart = MV_MAN_STARTLADDER; + g_vars->scene04_ladder->_movements.front()->movVars->varUpGo = MV_MAN_GOLADDER; + g_vars->scene04_ladder->_movements.front()->movVars->varUpStop = MV_MAN_STOPLADDER; + g_vars->scene04_ladder->_movements.front()->staticIds[2] = ST_MAN_GOLADDER; + } + + g_fullpipe->_aniMan->_priority = 12; + + getSc2MctlCompoundBySceneId(g_fullpipe->_currentScene->_sceneId)->clearEnabled(); + getGameLoaderInteractionController()->disableFlag24(); +} + void sceneHandler04_clickLadder() { - warning("STUB: sceneHandler04_clickLadder()"); + g_vars->scene04_dudePosX = g_fullpipe->_aniMan->_ox; + g_vars->scene04_dudePosY = g_fullpipe->_aniMan->_oy; + + if (g_vars->scene04_dudeOnLadder) { + if (!g_fullpipe->_aniMan->isIdle() || (g_fullpipe->_aniMan->_flags & 0x100)) { + g_vars->scene04_var08 = 1; + } else { + int h3 = 3 * g_vars->scene04_ladder->_height; + int half = abs(g_vars->scene04_ladder->_height) / 2; + int start = g_vars->scene04_ladder->_ladderY - g_vars->scene04_ladder->_ladder_field_24; + int min = 2 * h3 + start + half + 1; + int max = h3 + start - half - 1; + + if (g_vars->scene04_sceneClickY > max) + g_vars->scene04_sceneClickY = max; + + if (g_vars->scene04_sceneClickY < min) + g_vars->scene04_sceneClickY = min; + + sceneHandler04_downLadder(g_vars->scene04_sceneClickX, g_vars->scene04_sceneClickY); + + g_vars->scene04_var08 = 0; + } + } else { + if (g_fullpipe->_aniMan->isIdle() && !(g_fullpipe->_aniMan->_flags & 0x100)) { + if (abs(1095 - g_vars->scene04_dudePosX) > 1 || abs(434 - g_vars->scene04_dudePosY) > 1) { + MessageQueue *mq = getSc2MctlCompoundBySceneId(g_fullpipe->_currentScene->_sceneId)->method34(g_fullpipe->_aniMan, 1095, 434, 1, ST_MAN_UP); + if (mq) { + ExCommand *ex = new ExCommand(0, 17, MSG_SC4_CLICKLADDER, 0, 0, 0, 1, 0, 0, 0); + + ex->_excFlags = 3; + mq->addExCommandToEnd(ex); + + postExCommand(g_fullpipe->_aniMan->_id, 2, 1095, 434, 0, -1); + } + } else { + sceneHandler04_walkClimbLadder(0); + } + } + } } void sceneHandler04_jumpOnLadder() { @@ -324,7 +426,7 @@ void sceneHandler04_jumpOnLadder() { void sceneHandler04_clickPlank() { if (sceneHandler04_friesAreWalking()) sceneHandler04_jumpOnLadder(); - else if (g_vars->scene04_needJumping) + else if (g_vars->scene04_dudeOnLadder) g_fullpipe->playSound(SND_4_033, 0); else if (!g_vars->scene04_soundPlaying) chainQueue(QU_PNK_CLICK, 0); @@ -333,7 +435,7 @@ void sceneHandler04_clickPlank() { void sceneHandler04_dropBottle() { g_vars->scene04_var12 = 1; g_vars->scene04_bottleY = 10; - g_vars->scene04_var06 = 0; + g_vars->scene04_bottleWeight = 0; while (g_vars->scene04_kozyawkiAni.size()) { StaticANIObject *koz = g_vars->scene04_kozyawkiAni.front(); @@ -357,8 +459,61 @@ void sceneHandler04_dropBottle() { g_vars->scene04_hand->_priority = 15; } -void sceneHandler04_gotoLadder(int par) { - warning("STUB: sceneHandler04_gotoLadder()"); +void sceneHandler04_gotoLadder(ExCommand *ex) { + MGM mgm; + MGMInfo mgminfo; + + mgm.addItem(ANI_MAN); + + mgminfo.ani = g_fullpipe->_aniMan; + mgminfo.staticsId2 = ST_MAN_UP; + mgminfo.x1 = 1095; + mgminfo.y1 = 434; + mgminfo.field_1C = 12; + mgminfo.field_10 = 1; + mgminfo.flags = 78; + mgminfo.movementId = MV_MAN_PLANKTOLADDER; + + MessageQueue *mq = mgm.genMovement(&mgminfo); + + if (mq) { + mq->deleteExCommandByIndex(mq->getCount() - 1, 1); + + ExCommand *ex1 = new ExCommand(ANI_MAN, 1, MV_MAN_TOLADDER, 0, 0, 0, 1, 0, 0, 0); + ex1->_excFlags = 2; + ex1->_field_24 = 1; + ex1->_keyCode = -1; + mq->addExCommandToEnd(ex1); + + ExCommand *ex2 = new ExCommand(ANI_MAN, 1, MV_MAN_STOPLADDER, 0, 0, 0, 1, 0, 0, 0); + ex2->_excFlags = 2; + ex2->_field_24 = 1; + ex2->_keyCode = -1; + mq->addExCommandToEnd(ex2); + + ExCommand *ex3 = new ExCommand(g_fullpipe->_aniMan->_id, 34, 256, 0, 0, 0, 1, 0, 0, 0); + ex3->_field_14 = 256; + ex3->_messageNum = 0; + ex3->_excFlags |= 3; + mq->addExCommandToEnd(ex3); + + if (ex) { + ExCommand *ex4 = new ExCommand(ex); + + mq->addExCommandToEnd(ex4); + } + + mq->setFlags(mq->getFlags() | 1); + + if (mq->chain(g_fullpipe->_aniMan)) { + g_fullpipe->_aniMan->_priority = 12; + g_fullpipe->_aniMan->_flags |= 1; + } else { + delete mq; + } + } + + g_vars->scene04_var04 = 0; } void sceneHandler04_lowerPlank() { @@ -369,7 +524,7 @@ void sceneHandler04_manFromBottle() { for (Common::List<GameObject *>::iterator it = g_vars->scene04_bottleObjList.begin(); it != g_vars->scene04_bottleObjList.end(); ++it) if (*it == g_fullpipe->_aniMan) { g_vars->scene04_bottleObjList.erase(it); - g_vars->scene04_var06 -= 9; + g_vars->scene04_bottleWeight -= 9; break; } @@ -385,7 +540,7 @@ void sceneHandler04_manFromBottle() { void sceneHandler04_manToBottle() { g_vars->scene04_bottleObjList.push_back(g_fullpipe->_aniMan); g_vars->scene04_var20 = 5; - g_vars->scene04_var06 += 9; + g_vars->scene04_bottleWeight += 9; g_fullpipe->_aniMan2 = g_fullpipe->_aniMan; g_vars->scene04_var10 = 1; } @@ -420,7 +575,7 @@ void sceneHandler04_sub1(ExCommand *ex) { if (ex) { ExCommand *newex = new ExCommand(ex); - mq->_exCommands.push_back(newex); + mq->addExCommandToEnd(newex); } mq->_flags |= 1; @@ -441,61 +596,49 @@ void sceneHandler04_walkKozyawka() { } } -void sceneHandler04_sub4() { -#if 0 - int var20 = g_vars->scene04_var20; +void sceneHandler04_bottleUpdateObjects(int off) { + for (Common::List<GameObject *>::iterator it = g_vars->scene04_bottleObjList.begin(); it != g_vars->scene04_bottleObjList.end(); ++it) { + GameObject *obj = *it; + + obj->setOXY(obj->_ox, off + obj->_oy); + } +} + +void sceneHandler04_springWobble() { int oldDynIndex = g_vars->scene04_dynamicPhaseIndex; - v2 = g_vars->scene04_var20 + g_vars->scene04_dynamicPhaseIndex; + int newdelta = g_vars->scene04_var20 + g_vars->scene04_dynamicPhaseIndex; + g_vars->scene04_dynamicPhaseIndex += g_vars->scene04_var20; - if (g_vars->scene04_var20 + g_vars->scene04_dynamicPhaseIndex < 0) { - v2 = 0; - var20 = 0; + if (newdelta < 0) { + newdelta = 0; g_vars->scene04_dynamicPhaseIndex = 0; g_vars->scene04_var20 = 0; } - if (v2 > 14) { - v2 = 14; - var20 = 0; + if (newdelta > 14) { + newdelta = 14; g_vars->scene04_dynamicPhaseIndex = 14; g_vars->scene04_var20 = 0; } - v4 = __OFSUB__(g_vars->scene04_var06, v2); - v3 = g_vars->scene04_var06 - v2 < 0; + if (g_vars->scene04_bottleWeight > newdelta) + g_vars->scene04_var20++; - if (g_vars->scene04_var06 > v2) { - ++var20; - v4 = __OFSUB__(g_vars->scene04_var06, v2); - v3 = g_vars->scene04_var06 - v2 < 0; - g_vars->scene04_var20 = var20; - } - - if (v3 ^ v4) { - --var20; - g_vars->scene04_var20 = var20; - } - - if (oldDynIndex <= g_vars->scene04_var06) - if (v2 <= g_vars->scene04_var06) - goto LABEL_16; - } else if (v2 > g_vars->scene04_var06) { - goto LABEL_16; - } + if (g_vars->scene04_bottleWeight < newdelta) + g_vars->scene04_var20--; - g_vars->scene04_var25++; + if ((oldDynIndex > g_vars->scene04_bottleWeight && newdelta > g_vars->scene04_bottleWeight) || newdelta <= g_vars->scene04_bottleWeight) { + g_vars->scene04_var25++; - if (var20 && g_vars->scene04_var25 > 1) { - g_vars->scene04_var25 = 0; - g_vars->scene04_var20--; + if (g_vars->scene04_var20 && g_vars->scene04_var25 > 1) { + g_vars->scene04_var25 = 0; + g_vars->scene04_var20 = g_vars->scene04_var20 - g_vars->scene04_var20 / abs(g_vars->scene04_var20); + } } - LABEL_16: Common::Point point; - int curdelta = g_vars->scene04_spring->getCurrDimensions(&point)->y - g_vars->scene04_dynamicPhaseIndex; - if (g_vars->scene04_dynamicPhaseIndex) { if (!g_vars->scene04_spring->_movement) g_vars->scene04_spring->startAnim(MV_SPR_LOWER, 0, -1); @@ -506,24 +649,13 @@ void sceneHandler04_sub4() { } if (g_vars->scene04_dynamicPhaseIndex != oldDynIndex) - sceneHandler04_bottleUpdateObjects(curdelta - (g_vars->scene04_spring->getCurrDimensions(&point)->y - g_vars->scene04_dynamicPhaseIndex)); -#endif - - warning("STUB: sceneHandler04_sub4()"); + sceneHandler04_bottleUpdateObjects(oldDynIndex - g_vars->scene04_dynamicPhaseIndex); } void sceneHandler04_sub5() { warning("STUB: sceneHandler04_sub5()"); } -void sceneHandler04_bottleUpdateObjects(int off) { - for (Common::List<GameObject *>::iterator it = g_vars->scene04_bottleObjList.begin(); it != g_vars->scene04_bottleObjList.end(); ++it) { - GameObject *obj = *it; - - obj->setOXY(obj->_field_8 + 20, off + obj->_field_8 + 24); - } -} - void sceneHandler04_liftBottle() { int newy = g_vars->scene04_bottleY + g_vars->scene04_spring->_oy; @@ -540,7 +672,7 @@ void sceneHandler04_liftBottle() { g_vars->scene04_var12 = 0; g_vars->scene04_var09 = 0; g_vars->scene04_var19 = 1; - g_vars->scene04_var06 = 2; + g_vars->scene04_bottleWeight = 2; g_vars->scene04_var20 = 10; g_vars->scene04_var02 = 0; @@ -600,7 +732,7 @@ void sceneHandler04_sub9(StaticANIObject *ani) { g_vars->scene04_bottleObjList.push_back(ani); g_vars->scene04_kozyawkiAni.push_back(ani); - g_vars->scene04_var06 += 2; + g_vars->scene04_bottleWeight += 2; g_vars->scene04_walkingKozyawka = 0; g_vars->scene04_var24 = 0; @@ -618,7 +750,7 @@ void sceneHandler04_sub9(StaticANIObject *ani) { void sceneHandler04_sub17() { StaticANIObject *ball = g_fullpipe->_currentScene->getStaticANIObject1ById(ANI_BIGBALL, -1); - if (g_vars->scene04_needJumping + if (g_vars->scene04_dudeOnLadder && (!ball || !(ball->_flags & 4)) && g_vars->scene04_ladder->collisionDetection(g_fullpipe->_aniMan) > 3) { @@ -664,7 +796,7 @@ void sceneHandler04_takeKozyawka() { break; } - g_vars->scene04_var06 -= 2; + g_vars->scene04_bottleWeight -= 2; } } } @@ -828,7 +960,7 @@ int sceneHandler04(ExCommand *ex) { g_fullpipe->_aniMan2 = g_fullpipe->_aniMan; } - sceneHandler04_sub4(); + sceneHandler04_springWobble(); if (g_vars->scene04_var07 && !g_vars->scene04_var09) sceneHandler04_sub5(); @@ -845,7 +977,7 @@ int sceneHandler04(ExCommand *ex) { if (g_vars->scene04_coinPut && g_vars->scene04_var18 && !g_vars->scene04_var09 && !g_vars->scene04_soundPlaying) sceneHandler04_goClock(); - if (g_vars->scene04_needJumping) { + if (g_vars->scene04_dudeOnLadder) { if (!g_vars->scene04_soundPlaying) { g_fullpipe->startSceneTrack(); @@ -905,7 +1037,7 @@ int sceneHandler04(ExCommand *ex) { sceneHandler04_clickPlank(); ex->_messageKind = 0; - } else if (g_vars->scene04_needJumping) { + } else if (g_vars->scene04_dudeOnLadder) { sceneHandler04_sub8(ex); } else if (!ani || !canInteractAny(g_fullpipe->_aniMan, ani, ex->_keyCode)) { PictureObject *pic = g_fullpipe->_currentScene->getPictureObjectById(picid, 0); @@ -913,7 +1045,7 @@ int sceneHandler04(ExCommand *ex) { if (!pic || !canInteractAny(g_fullpipe->_aniMan, pic,ex->_keyCode)) { if ((g_fullpipe->_sceneRect.right - ex->_sceneClickX < 47 && g_fullpipe->_sceneRect.right < g_fullpipe->_sceneWidth - 1) || (ex->_sceneClickX - g_fullpipe->_sceneRect.left < 47 && g_fullpipe->_sceneRect.left > 0)) - sceneHandlers_sub01(ex); + g_fullpipe->processArcade(ex); } } } diff --git a/engines/fullpipe/statics.cpp b/engines/fullpipe/statics.cpp index 8324e0f322..12c56fe429 100644 --- a/engines/fullpipe/statics.cpp +++ b/engines/fullpipe/statics.cpp @@ -27,6 +27,7 @@ #include "fullpipe/statics.h" #include "fullpipe/messages.h" #include "fullpipe/interaction.h" +#include "fullpipe/motion.h" #include "fullpipe/constants.h" #include "fullpipe/objectnames.h" @@ -880,7 +881,23 @@ MessageQueue *StaticANIObject::changeStatics1(int msgNum) { } void StaticANIObject::changeStatics2(int objId) { - warning("STUB: StaticANIObject::changeStatics2(%d)", objId); + _animExFlag = 0; + + deleteFromGlobalMessageQueue(); + + if (_movement || _statics) { + g_fullpipe->_mgm->addItem(_id); + g_fullpipe->_mgm->updateAnimStatics(this, objId); + } else { + _statics = getStaticsById(objId); + } + + if (_messageQueueId) { + if (g_fullpipe->_globalMessageQueueList->getMessageQueueById(_messageQueueId)) + g_fullpipe->_globalMessageQueueList->deleteQueueById(_messageQueueId); + + _messageQueueId = 0; + } } void StaticANIObject::hide() { @@ -1570,7 +1587,7 @@ void Movement::removeFirstPhase() { _updateFlag1 = 0; } -bool Movement::gotoNextFrame(int callback1, void (*callback2)(int *)) { +bool Movement::gotoNextFrame(void (*callback1)(int, Common::Point *point, int, int), void (*callback2)(int *)) { debug(8, "Movement::gotoNextFrame()"); if (!callback2) { @@ -1622,7 +1639,7 @@ bool Movement::gotoNextFrame(int callback1, void (*callback2)(int *)) { if (_currMovement->_framePosOffsets) { if (callback1) { point = *_currMovement->_framePosOffsets[_currDynamicPhaseIndex]; - //callback1(_currDynamicPhaseIndex, &point, _ox, _oy); + callback1(_currDynamicPhaseIndex, &point, _ox, _oy); _ox += deltax - point.x; _oy += point.y; @@ -1664,7 +1681,7 @@ bool Movement::gotoNextFrame(int callback1, void (*callback2)(int *)) { point.x = _framePosOffsets[_currDynamicPhaseIndex]->x; point.y = _framePosOffsets[_currDynamicPhaseIndex]->y; - //callback1(_currDynamicPhaseIndex, &point, _ox, _oy); + callback1(_currDynamicPhaseIndex, &point, _ox, _oy); _ox += point.x; _oy += point.y; } else if (oldDynIndex >= _currDynamicPhaseIndex) { diff --git a/engines/fullpipe/statics.h b/engines/fullpipe/statics.h index 15de4ab3be..c8537dfa97 100644 --- a/engines/fullpipe/statics.h +++ b/engines/fullpipe/statics.h @@ -155,7 +155,7 @@ class Movement : public GameObject { int calcDuration(); void removeFirstPhase(); - bool gotoNextFrame(int callback1, void (*callback2)(int *)); + bool gotoNextFrame(void (*_callback1)(int, Common::Point *point, int, int), void (*callback2)(int *)); bool gotoPrevFrame(); void gotoFirstFrame(); void gotoLastFrame(); @@ -174,7 +174,7 @@ class StaticANIObject : public GameObject { int16 _field_32; int _field_34; int _initialCounter; - int _callback1; + void (*_callback1)(int, Common::Point *point, int, int); void (*_callback2)(int *); PtrList _movements; PtrList _staticsList; diff --git a/engines/lastexpress/entities/abbot.cpp b/engines/lastexpress/entities/abbot.cpp index 406b017d3a..cdd9d8e712 100644 --- a/engines/lastexpress/entities/abbot.cpp +++ b/engines/lastexpress/entities/abbot.cpp @@ -57,42 +57,42 @@ Abbot::Abbot(LastExpressEngine *engine) : Entity(engine, kEntityAbbot) { ADD_CALLBACK_FUNCTION(Abbot, chapter1); ADD_CALLBACK_FUNCTION(Abbot, chapter2); ADD_CALLBACK_FUNCTION(Abbot, chapter3); - ADD_CALLBACK_FUNCTION(Abbot, chapter3Handler); - ADD_CALLBACK_FUNCTION(Abbot, conversationWithBoutarel); + ADD_CALLBACK_FUNCTION(Abbot, inKitchen); + ADD_CALLBACK_FUNCTION(Abbot, openCompartment); ADD_CALLBACK_FUNCTION(Abbot, readPaper); ADD_CALLBACK_FUNCTION(Abbot, goToLunch); ADD_CALLBACK_FUNCTION(Abbot, haveLunch); - ADD_CALLBACK_FUNCTION(Abbot, function23); - ADD_CALLBACK_FUNCTION(Abbot, function24); - ADD_CALLBACK_FUNCTION(Abbot, function25); - ADD_CALLBACK_FUNCTION(Abbot, function26); - ADD_CALLBACK_FUNCTION(Abbot, function27); - ADD_CALLBACK_FUNCTION(Abbot, function28); - ADD_CALLBACK_FUNCTION(Abbot, function29); - ADD_CALLBACK_FUNCTION(Abbot, function30); - ADD_CALLBACK_FUNCTION(Abbot, function31); - ADD_CALLBACK_FUNCTION(Abbot, function32); - ADD_CALLBACK_FUNCTION(Abbot, function33); - ADD_CALLBACK_FUNCTION(Abbot, function34); - ADD_CALLBACK_FUNCTION(Abbot, function35); - ADD_CALLBACK_FUNCTION(Abbot, function36); - ADD_CALLBACK_FUNCTION(Abbot, function37); - ADD_CALLBACK_FUNCTION(Abbot, function38); + ADD_CALLBACK_FUNCTION(Abbot, leaveLunch); + ADD_CALLBACK_FUNCTION(Abbot, closedCompartment); + ADD_CALLBACK_FUNCTION(Abbot, goSalon1); + ADD_CALLBACK_FUNCTION(Abbot, inSalon1); + ADD_CALLBACK_FUNCTION(Abbot, goCompartment); + ADD_CALLBACK_FUNCTION(Abbot, openCompartment2); + ADD_CALLBACK_FUNCTION(Abbot, goWander); + ADD_CALLBACK_FUNCTION(Abbot, goSalon2); + ADD_CALLBACK_FUNCTION(Abbot, inSalon2); + ADD_CALLBACK_FUNCTION(Abbot, goCompartment3); + ADD_CALLBACK_FUNCTION(Abbot, openCompartment3); + ADD_CALLBACK_FUNCTION(Abbot, goSalon3); + ADD_CALLBACK_FUNCTION(Abbot, inSalon3); + ADD_CALLBACK_FUNCTION(Abbot, withAugust); + ADD_CALLBACK_FUNCTION(Abbot, goCompartment4); + ADD_CALLBACK_FUNCTION(Abbot, inCompartment4); ADD_CALLBACK_FUNCTION(Abbot, chapter4); - ADD_CALLBACK_FUNCTION(Abbot, function40); + ADD_CALLBACK_FUNCTION(Abbot, doWalkSearchingForCath); ADD_CALLBACK_FUNCTION(Abbot, chapter4Handler); - ADD_CALLBACK_FUNCTION(Abbot, function42); - ADD_CALLBACK_FUNCTION(Abbot, function43); + ADD_CALLBACK_FUNCTION(Abbot, leaveDinner); + ADD_CALLBACK_FUNCTION(Abbot, inCompartment); ADD_CALLBACK_FUNCTION(Abbot, function44); - ADD_CALLBACK_FUNCTION(Abbot, function45); - ADD_CALLBACK_FUNCTION(Abbot, function46); - ADD_CALLBACK_FUNCTION(Abbot, drinkAfterDefuse); - ADD_CALLBACK_FUNCTION(Abbot, function48); - ADD_CALLBACK_FUNCTION(Abbot, pickBomb); + ADD_CALLBACK_FUNCTION(Abbot, conferring); + ADD_CALLBACK_FUNCTION(Abbot, goSalon4); + ADD_CALLBACK_FUNCTION(Abbot, beforeBomb); + ADD_CALLBACK_FUNCTION(Abbot, afterBomb); + ADD_CALLBACK_FUNCTION(Abbot, catchCath); ADD_CALLBACK_FUNCTION(Abbot, chapter5); ADD_CALLBACK_FUNCTION(Abbot, chapter5Handler); ADD_CALLBACK_FUNCTION(Abbot, function52); - ADD_CALLBACK_FUNCTION(Abbot, function53); + ADD_CALLBACK_FUNCTION(Abbot, runningTrain); } ////////////////////////////////////////////////////////////////////////// @@ -196,7 +196,7 @@ IMPLEMENT_FUNCTION(17, Abbot, chapter3) break; case kActionNone: - setup_chapter3Handler(); + setup_inKitchen(); break; case kActionDefault: @@ -213,7 +213,7 @@ IMPLEMENT_FUNCTION(17, Abbot, chapter3) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(18, Abbot, chapter3Handler) +IMPLEMENT_FUNCTION(18, Abbot, inKitchen) switch (savepoint.action) { default: break; @@ -259,7 +259,7 @@ IMPLEMENT_FUNCTION(18, Abbot, chapter3Handler) getData()->entityPosition = kPosition_6470; getData()->location = kLocationInsideCompartment; - setup_conversationWithBoutarel(); + setup_openCompartment(); break; } break; @@ -272,7 +272,7 @@ IMPLEMENT_FUNCTION(18, Abbot, chapter3Handler) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(19, Abbot, conversationWithBoutarel) +IMPLEMENT_FUNCTION(19, Abbot, openCompartment) switch (savepoint.action) { default: break; @@ -419,7 +419,7 @@ IMPLEMENT_FUNCTION(22, Abbot, haveLunch) if (getState()->time > kTime1989000 && getEntities()->isSomebodyInsideRestaurantOrSalon()) { getData()->inventoryItem = kItemNone; - setup_function23(); + setup_leaveLunch(); } break; @@ -456,7 +456,7 @@ IMPLEMENT_FUNCTION(22, Abbot, haveLunch) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(23, Abbot, function23) +IMPLEMENT_FUNCTION(23, Abbot, leaveLunch) switch (savepoint.action) { default: break; @@ -500,7 +500,7 @@ IMPLEMENT_FUNCTION(23, Abbot, function23) case 4: getData()->location = kLocationInsideCompartment; - setup_function24(); + setup_closedCompartment(); break; } break; @@ -508,7 +508,7 @@ IMPLEMENT_FUNCTION(23, Abbot, function23) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(24, Abbot, function24) +IMPLEMENT_FUNCTION(24, Abbot, closedCompartment) switch (savepoint.action) { default: break; @@ -517,7 +517,7 @@ IMPLEMENT_FUNCTION(24, Abbot, function24) if (!Entity::updateParameter(params->param1, getState()->time, 900)) break; - setup_function25(); + setup_goSalon1(); break; case kActionKnock: @@ -561,7 +561,7 @@ IMPLEMENT_FUNCTION(24, Abbot, function24) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(25, Abbot, function25) +IMPLEMENT_FUNCTION(25, Abbot, goSalon1) switch (savepoint.action) { default: break; @@ -602,7 +602,7 @@ IMPLEMENT_FUNCTION(25, Abbot, function25) getData()->location = kLocationInsideCompartment; getScenes()->loadSceneFromItemPosition(kItem3); - setup_function26(); + setup_inSalon1(); break; } break; @@ -610,7 +610,7 @@ IMPLEMENT_FUNCTION(25, Abbot, function25) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(26, Abbot, function26) +IMPLEMENT_FUNCTION(26, Abbot, inSalon1) switch (savepoint.action) { default: break; @@ -620,7 +620,7 @@ IMPLEMENT_FUNCTION(26, Abbot, function26) break; if (getEntities()->isSomebodyInsideRestaurantOrSalon()) - setup_function27(); + setup_goCompartment(); break; case kActionDefault: @@ -636,7 +636,7 @@ IMPLEMENT_FUNCTION(26, Abbot, function26) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(27, Abbot, function27) +IMPLEMENT_FUNCTION(27, Abbot, goCompartment) switch (savepoint.action) { default: break; @@ -677,7 +677,7 @@ IMPLEMENT_FUNCTION(27, Abbot, function27) getData()->entityPosition = kPosition_6470; getData()->location = kLocationInsideCompartment; - setup_function28(); + setup_openCompartment2(); break; } break; @@ -685,13 +685,13 @@ IMPLEMENT_FUNCTION(27, Abbot, function27) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(28, Abbot, function28) +IMPLEMENT_FUNCTION(28, Abbot, openCompartment2) switch (savepoint.action) { default: break; case kActionNone: - Entity::timeCheckCallback(kTime2052000, params->param1, 1, WRAP_SETUP_FUNCTION(Abbot, setup_function29)); + Entity::timeCheckCallback(kTime2052000, params->param1, 1, WRAP_SETUP_FUNCTION(Abbot, setup_goWander)); break; case kActionDefault: @@ -708,12 +708,12 @@ IMPLEMENT_FUNCTION(28, Abbot, function28) break; case kAction222609266: - setup_function30(); + setup_goSalon2(); } IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(29, Abbot, function29) +IMPLEMENT_FUNCTION(29, Abbot, goWander) switch (savepoint.action) { default: break; @@ -778,7 +778,7 @@ IMPLEMENT_FUNCTION(29, Abbot, function29) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(30, Abbot, function30) +IMPLEMENT_FUNCTION(30, Abbot, goSalon2) switch (savepoint.action) { default: break; @@ -826,7 +826,7 @@ switch (savepoint.action) { getScenes()->loadSceneFromItemPosition(kItem3); getData()->location = kLocationInsideCompartment; - setup_function31(); + setup_inSalon2(); break; } break; @@ -834,7 +834,7 @@ switch (savepoint.action) { IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(31, Abbot, function31) +IMPLEMENT_FUNCTION(31, Abbot, inSalon2) switch (savepoint.action) { default: break; @@ -936,7 +936,7 @@ IMPLEMENT_FUNCTION(31, Abbot, function31) break; case 7: - setup_function32(); + setup_goCompartment3(); break; } break; @@ -944,7 +944,7 @@ IMPLEMENT_FUNCTION(31, Abbot, function31) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(32, Abbot, function32) +IMPLEMENT_FUNCTION(32, Abbot, goCompartment3) switch (savepoint.action) { default: break; @@ -972,7 +972,7 @@ IMPLEMENT_FUNCTION(32, Abbot, function32) getData()->location = kLocationInsideCompartment; getSavePoints()->push(kEntityAbbot, kEntityBoutarel, kAction122358304); - setup_function33(); + setup_openCompartment3(); break; } break; @@ -980,7 +980,7 @@ IMPLEMENT_FUNCTION(32, Abbot, function32) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(33, Abbot, function33) +IMPLEMENT_FUNCTION(33, Abbot, openCompartment3) switch (savepoint.action) { default: break; @@ -1012,13 +1012,13 @@ IMPLEMENT_FUNCTION(33, Abbot, function33) break; case kAction123712592: - setup_function34(); + setup_goSalon3(); break; } IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(34, Abbot, function34) +IMPLEMENT_FUNCTION(34, Abbot, goSalon3) switch (savepoint.action) { default: break; @@ -1066,7 +1066,7 @@ IMPLEMENT_FUNCTION(34, Abbot, function34) getScenes()->loadSceneFromItemPosition(kItem3); getData()->location = kLocationInsideCompartment; - setup_function35(); + setup_inSalon3(); break; } break; @@ -1074,7 +1074,7 @@ IMPLEMENT_FUNCTION(34, Abbot, function34) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(35, Abbot, function35) +IMPLEMENT_FUNCTION(35, Abbot, inSalon3) switch (savepoint.action) { default: break; @@ -1128,7 +1128,7 @@ IMPLEMENT_FUNCTION(35, Abbot, function35) getInventory()->setLocationAndProcess(kItem3, kObjectLocation1); getData()->location = kLocationInsideCompartment; - setup_function36(); + setup_withAugust(); break; } break; @@ -1136,7 +1136,7 @@ IMPLEMENT_FUNCTION(35, Abbot, function35) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(36, Abbot, function36) +IMPLEMENT_FUNCTION(36, Abbot, withAugust) switch (savepoint.action) { default: break; @@ -1198,14 +1198,14 @@ IMPLEMENT_FUNCTION(36, Abbot, function36) case kActionCallback: if (getCallback() == 1) { getEntities()->updatePositionExit(kEntityAbbot, kCarRestaurant, 57); - setup_function37(); + setup_goCompartment4(); } break; } IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(37, Abbot, function37) +IMPLEMENT_FUNCTION(37, Abbot, goCompartment4) switch (savepoint.action) { default: break; @@ -1233,7 +1233,7 @@ IMPLEMENT_FUNCTION(37, Abbot, function37) getData()->location = kLocationInsideCompartment; getSavePoints()->push(kEntityAbbot, kEntityBoutarel, kAction122358304); - setup_function38(); + setup_inCompartment4(); break; } break; @@ -1241,7 +1241,7 @@ IMPLEMENT_FUNCTION(37, Abbot, function37) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(38, Abbot, function38) +IMPLEMENT_FUNCTION(38, Abbot, inCompartment4) switch (savepoint.action) { default: break; @@ -1283,7 +1283,7 @@ IMPLEMENT_FUNCTION(39, Abbot, chapter4) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION_II(40, Abbot, function40, CarIndex, EntityPosition) +IMPLEMENT_FUNCTION_II(40, Abbot, doWalkSearchingForCath, CarIndex, EntityPosition) switch (savepoint.action) { default: break; @@ -1327,7 +1327,7 @@ IMPLEMENT_FUNCTION(41, Abbot, chapter4Handler) Entity::timeCheckSavepoint(kTime2358000, params->param1, kEntityAbbot, kEntityServers0, kAction218128129); if (getState()->time > kTime2389500 && getEntities()->isSomebodyInsideRestaurantOrSalon()) - setup_function42(); + setup_leaveDinner(); break; @@ -1348,7 +1348,7 @@ IMPLEMENT_FUNCTION(41, Abbot, chapter4Handler) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(42, Abbot, function42) +IMPLEMENT_FUNCTION(42, Abbot, leaveDinner) switch (savepoint.action) { default: break; @@ -1392,7 +1392,7 @@ IMPLEMENT_FUNCTION(42, Abbot, function42) getData()->location = kLocationInsideCompartment; getEntities()->clearSequences(kEntityAbbot); - setup_function43(); + setup_inCompartment(); break; } break; @@ -1400,7 +1400,7 @@ IMPLEMENT_FUNCTION(42, Abbot, function42) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(43, Abbot, function43) +IMPLEMENT_FUNCTION(43, Abbot, inCompartment) switch (savepoint.action) { default: break; @@ -1531,13 +1531,13 @@ IMPLEMENT_FUNCTION(44, Abbot, function44) break; case kAction104060776: - setup_function45(); + setup_conferring(); break; } IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(45, Abbot, function45) +IMPLEMENT_FUNCTION(45, Abbot, conferring) switch (savepoint.action) { default: break; @@ -1570,7 +1570,7 @@ IMPLEMENT_FUNCTION(45, Abbot, function45) getEntities()->exitCompartment(kEntityAbbot, kObjectCompartmentC, true); getSavePoints()->push(kEntityAbbot, kEntityVerges, kAction125233040); - setup_function46(); + setup_goSalon4(); break; } break; @@ -1578,7 +1578,7 @@ IMPLEMENT_FUNCTION(45, Abbot, function45) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(46, Abbot, function46) +IMPLEMENT_FUNCTION(46, Abbot, goSalon4) switch (savepoint.action) { default: break; @@ -1587,18 +1587,18 @@ IMPLEMENT_FUNCTION(46, Abbot, function46) getData()->entityPosition = kPosition_6471; setCallback(1); - setup_function40(kCarRestaurant, kPosition_850); + setup_doWalkSearchingForCath(kCarRestaurant, kPosition_850); break; case kActionCallback: if (getCallback() == 1) - setup_drinkAfterDefuse(); + setup_beforeBomb(); break; } IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(47, Abbot, drinkAfterDefuse) +IMPLEMENT_FUNCTION(47, Abbot, beforeBomb) switch (savepoint.action) { default: break; @@ -1642,7 +1642,7 @@ IMPLEMENT_FUNCTION(47, Abbot, drinkAfterDefuse) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(48, Abbot, function48) +IMPLEMENT_FUNCTION(48, Abbot, afterBomb) switch (savepoint.action) { default: break; @@ -1749,7 +1749,7 @@ IMPLEMENT_FUNCTION(48, Abbot, function48) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(49, Abbot, pickBomb) +IMPLEMENT_FUNCTION(49, Abbot, catchCath) switch (savepoint.action) { default: break; @@ -1791,7 +1791,7 @@ IMPLEMENT_FUNCTION(49, Abbot, pickBomb) break; case 1: - getAction()->playAnimation(getObjects()->get(kObjectCompartment2).location2 < kObjectLocation2 ? kEventAbbotWrongCompartmentBed : kEventAbbotWrongCompartment); + getAction()->playAnimation(getObjects()->get(kObjectCompartment2).model < kObjectModel2 ? kEventAbbotWrongCompartmentBed : kEventAbbotWrongCompartment); getEntities()->updateEntity(kEntityAbbot, kCarRedSleeping, kPosition_6470); getSound()->playSound(kEntityPlayer, "LIB015"); getScenes()->loadSceneFromObject(kObjectCompartment2, true); @@ -1810,7 +1810,7 @@ IMPLEMENT_FUNCTION(49, Abbot, pickBomb) getEntities()->clearSequences(kEntityAbbot); getObjects()->update(kObjectCompartmentC, kEntityAbbot, kObjectLocation1, kCursorHandKnock, kCursorHand); - setup_function43(); + setup_inCompartment(); break; } break; @@ -1860,13 +1860,13 @@ IMPLEMENT_FUNCTION(52, Abbot, function52) break; case kAction135600432: - setup_function53(); + setup_runningTrain(); break; } IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(53, Abbot, function53) +IMPLEMENT_FUNCTION(53, Abbot, runningTrain) switch (savepoint.action) { default: break; diff --git a/engines/lastexpress/entities/abbot.h b/engines/lastexpress/entities/abbot.h index dc3e86db54..ba993fdbc9 100644 --- a/engines/lastexpress/entities/abbot.h +++ b/engines/lastexpress/entities/abbot.h @@ -155,27 +155,27 @@ public: /** * Handle Chapter 3 events */ - DECLARE_FUNCTION(chapter3Handler) - DECLARE_FUNCTION(conversationWithBoutarel) + DECLARE_FUNCTION(inKitchen) + DECLARE_FUNCTION(openCompartment) DECLARE_FUNCTION(readPaper) DECLARE_FUNCTION(goToLunch) DECLARE_FUNCTION(haveLunch) - DECLARE_FUNCTION(function23) - DECLARE_FUNCTION(function24) - DECLARE_FUNCTION(function25) - DECLARE_FUNCTION(function26) - DECLARE_FUNCTION(function27) - DECLARE_FUNCTION(function28) - DECLARE_FUNCTION(function29) - DECLARE_FUNCTION(function30) - DECLARE_FUNCTION(function31) - DECLARE_FUNCTION(function32) - DECLARE_FUNCTION(function33) - DECLARE_FUNCTION(function34) - DECLARE_FUNCTION(function35) - DECLARE_FUNCTION(function36) - DECLARE_FUNCTION(function37) - DECLARE_FUNCTION(function38) + DECLARE_FUNCTION(leaveLunch) + DECLARE_FUNCTION(closedCompartment) + DECLARE_FUNCTION(goSalon1) + DECLARE_FUNCTION(inSalon1) + DECLARE_FUNCTION(goCompartment) + DECLARE_FUNCTION(openCompartment2) + DECLARE_FUNCTION(goWander) + DECLARE_FUNCTION(goSalon2) + DECLARE_FUNCTION(inSalon2) + DECLARE_FUNCTION(goCompartment3) + DECLARE_FUNCTION(openCompartment3) + DECLARE_FUNCTION(goSalon3) + DECLARE_FUNCTION(inSalon3) + DECLARE_FUNCTION(withAugust) + DECLARE_FUNCTION(goCompartment4) + DECLARE_FUNCTION(inCompartment4) /** * Setup Chapter 4 @@ -183,25 +183,25 @@ public: DECLARE_FUNCTION(chapter4) /** - * ??? + * Search Cath by walking around * * @param car The car * @param entityPosition The entity position */ - DECLARE_FUNCTION_2(function40, CarIndex car, EntityPosition position) + DECLARE_FUNCTION_2(doWalkSearchingForCath, CarIndex car, EntityPosition position) /** * Handle Chapter 4 events */ DECLARE_FUNCTION(chapter4Handler) - DECLARE_FUNCTION(function42) - DECLARE_FUNCTION(function43) + DECLARE_FUNCTION(leaveDinner) + DECLARE_FUNCTION(inCompartment) DECLARE_FUNCTION(function44) - DECLARE_FUNCTION(function45) - DECLARE_FUNCTION(function46) - DECLARE_FUNCTION(drinkAfterDefuse) - DECLARE_FUNCTION(function48) - DECLARE_FUNCTION(pickBomb) + DECLARE_FUNCTION(conferring) + DECLARE_FUNCTION(goSalon4) + DECLARE_FUNCTION(beforeBomb) + DECLARE_FUNCTION(afterBomb) + DECLARE_FUNCTION(catchCath) /** * Setup Chapter 5 @@ -213,7 +213,7 @@ public: */ DECLARE_FUNCTION(chapter5Handler) DECLARE_FUNCTION(function52) - DECLARE_FUNCTION(function53) + DECLARE_FUNCTION(runningTrain) }; } // End of namespace LastExpress diff --git a/engines/lastexpress/entities/alexei.cpp b/engines/lastexpress/entities/alexei.cpp index 115c890f6f..b8ae62e7c4 100644 --- a/engines/lastexpress/entities/alexei.cpp +++ b/engines/lastexpress/entities/alexei.cpp @@ -48,40 +48,40 @@ Alexei::Alexei(LastExpressEngine *engine) : Entity(engine, kEntityAlexei) { ADD_CALLBACK_FUNCTION(Alexei, updateEntity); ADD_CALLBACK_FUNCTION(Alexei, draw2); ADD_CALLBACK_FUNCTION(Alexei, callbackActionRestaurantOrSalon); - ADD_CALLBACK_FUNCTION(Alexei, function13); - ADD_CALLBACK_FUNCTION(Alexei, function14); - ADD_CALLBACK_FUNCTION(Alexei, function15); - ADD_CALLBACK_FUNCTION(Alexei, function16); + ADD_CALLBACK_FUNCTION(Alexei, enterComparment); + ADD_CALLBACK_FUNCTION(Alexei, exitCompartment); + ADD_CALLBACK_FUNCTION(Alexei, pacingAtWindow); + ADD_CALLBACK_FUNCTION(Alexei, compartmentLogic); ADD_CALLBACK_FUNCTION(Alexei, chapter1); - ADD_CALLBACK_FUNCTION(Alexei, chapter1Handler); - ADD_CALLBACK_FUNCTION(Alexei, function19); - ADD_CALLBACK_FUNCTION(Alexei, function20); - ADD_CALLBACK_FUNCTION(Alexei, function21); - ADD_CALLBACK_FUNCTION(Alexei, function22); - ADD_CALLBACK_FUNCTION(Alexei, function23); - ADD_CALLBACK_FUNCTION(Alexei, function24); - ADD_CALLBACK_FUNCTION(Alexei, function25); + ADD_CALLBACK_FUNCTION(Alexei, atDinner); + ADD_CALLBACK_FUNCTION(Alexei, returnCompartment); + ADD_CALLBACK_FUNCTION(Alexei, goSalon); + ADD_CALLBACK_FUNCTION(Alexei, sitting); + ADD_CALLBACK_FUNCTION(Alexei, standingAtWindow); + ADD_CALLBACK_FUNCTION(Alexei, waitingForTatiana); + ADD_CALLBACK_FUNCTION(Alexei, upset); + ADD_CALLBACK_FUNCTION(Alexei, returnCompartmentNight); ADD_CALLBACK_FUNCTION(Alexei, function26); ADD_CALLBACK_FUNCTION(Alexei, function27); ADD_CALLBACK_FUNCTION(Alexei, chapter2); - ADD_CALLBACK_FUNCTION(Alexei, chapter2Handler); - ADD_CALLBACK_FUNCTION(Alexei, function30); - ADD_CALLBACK_FUNCTION(Alexei, function31); + ADD_CALLBACK_FUNCTION(Alexei, inCompartment2); + ADD_CALLBACK_FUNCTION(Alexei, atBreakfast); + ADD_CALLBACK_FUNCTION(Alexei, returnCompartment2); ADD_CALLBACK_FUNCTION(Alexei, chapter3); - ADD_CALLBACK_FUNCTION(Alexei, chapter3Handler); - ADD_CALLBACK_FUNCTION(Alexei, function34); - ADD_CALLBACK_FUNCTION(Alexei, function35); - ADD_CALLBACK_FUNCTION(Alexei, function36); + ADD_CALLBACK_FUNCTION(Alexei, playingChess); + ADD_CALLBACK_FUNCTION(Alexei, inPart3); + ADD_CALLBACK_FUNCTION(Alexei, pacing3); + ADD_CALLBACK_FUNCTION(Alexei, goSalon3); ADD_CALLBACK_FUNCTION(Alexei, chapter4); - ADD_CALLBACK_FUNCTION(Alexei, chapter4Handler); - ADD_CALLBACK_FUNCTION(Alexei, function39); - ADD_CALLBACK_FUNCTION(Alexei, function40); - ADD_CALLBACK_FUNCTION(Alexei, function41); - ADD_CALLBACK_FUNCTION(Alexei, function42); - ADD_CALLBACK_FUNCTION(Alexei, function43); - ADD_CALLBACK_FUNCTION(Alexei, function44); - ADD_CALLBACK_FUNCTION(Alexei, function45); - ADD_CALLBACK_FUNCTION(Alexei, function46); + ADD_CALLBACK_FUNCTION(Alexei, inCompartment4); + ADD_CALLBACK_FUNCTION(Alexei, meetTatiana); + ADD_CALLBACK_FUNCTION(Alexei, leavePlatform); + ADD_CALLBACK_FUNCTION(Alexei, inCompartmentAgain); + ADD_CALLBACK_FUNCTION(Alexei, goSalon4); + ADD_CALLBACK_FUNCTION(Alexei, pacing); + ADD_CALLBACK_FUNCTION(Alexei, goToPlatform); + ADD_CALLBACK_FUNCTION(Alexei, returnCompartment4); + ADD_CALLBACK_FUNCTION(Alexei, bombPlanB); ADD_CALLBACK_FUNCTION(Alexei, function47); ADD_CALLBACK_FUNCTION(Alexei, chapter5); } @@ -169,7 +169,7 @@ IMPLEMENT_FUNCTION(12, Alexei, callbackActionRestaurantOrSalon) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(13, Alexei, function13) +IMPLEMENT_FUNCTION(13, Alexei, enterComparment) switch (savepoint.action) { default: break; @@ -216,7 +216,7 @@ IMPLEMENT_FUNCTION(13, Alexei, function13) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(14, Alexei, function14) +IMPLEMENT_FUNCTION(14, Alexei, exitCompartment) switch (savepoint.action) { default: break; @@ -245,7 +245,7 @@ IMPLEMENT_FUNCTION(14, Alexei, function14) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(15, Alexei, function15) +IMPLEMENT_FUNCTION(15, Alexei, pacingAtWindow) switch (savepoint.action) { default: break; @@ -297,7 +297,7 @@ IMPLEMENT_FUNCTION(15, Alexei, function15) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION_IS(16, Alexei, function16, TimeValue) +IMPLEMENT_FUNCTION_IS(16, Alexei, compartmentLogic, TimeValue) switch (savepoint.action) { default: break; @@ -446,7 +446,7 @@ IMPLEMENT_FUNCTION(17, Alexei, chapter1) break; case kActionNone: - Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Alexei, setup_chapter1Handler)); + Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Alexei, setup_atDinner)); break; case kActionDefault: @@ -462,7 +462,7 @@ IMPLEMENT_FUNCTION(17, Alexei, chapter1) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(18, Alexei, chapter1Handler) +IMPLEMENT_FUNCTION(18, Alexei, atDinner) switch (savepoint.action) { default: break; @@ -519,7 +519,7 @@ IMPLEMENT_FUNCTION(18, Alexei, chapter1Handler) case 1: getEntities()->updatePositionExit(kEntityAlexei, kCarRestaurant, 63); - setup_function19(); + setup_returnCompartment(); break; case 2: @@ -533,7 +533,7 @@ IMPLEMENT_FUNCTION(18, Alexei, chapter1Handler) getInventory()->get(kItem17)->location = kObjectLocation1; getScenes()->loadSceneFromPosition(kCarRestaurant, 63); - setup_function19(); + setup_returnCompartment(); break; } break; @@ -553,7 +553,7 @@ IMPLEMENT_FUNCTION(18, Alexei, chapter1Handler) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(19, Alexei, function19) +IMPLEMENT_FUNCTION(19, Alexei, returnCompartment) switch (savepoint.action) { default: break; @@ -620,7 +620,7 @@ IMPLEMENT_FUNCTION(19, Alexei, function19) case 9: setCallback(10); - setup_function13(); + setup_enterComparment(); break; case 10: @@ -628,11 +628,11 @@ IMPLEMENT_FUNCTION(19, Alexei, function19) getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49); setCallback(11); - setup_function16(kTime1098000, "411"); + setup_compartmentLogic(kTime1098000, "411"); break; case 11: - setup_function20(); + setup_goSalon(); break; } break; @@ -640,14 +640,14 @@ IMPLEMENT_FUNCTION(19, Alexei, function19) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(20, Alexei, function20) +IMPLEMENT_FUNCTION(20, Alexei, goSalon) switch (savepoint.action) { default: break; case kActionDefault: setCallback(1); - setup_function14(); + setup_exitCompartment(); break; case kActionCallback: @@ -683,7 +683,7 @@ IMPLEMENT_FUNCTION(20, Alexei, function20) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(21, Alexei, function21) +IMPLEMENT_FUNCTION(21, Alexei, sitting) switch (savepoint.action) { default: break; @@ -720,7 +720,7 @@ IMPLEMENT_FUNCTION(21, Alexei, function21) case 1: getData()->location = kLocationInsideCompartment; - setup_function22(); + setup_standingAtWindow(); break; case 2: @@ -745,7 +745,7 @@ IMPLEMENT_FUNCTION(21, Alexei, function21) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(22, Alexei, function22) +IMPLEMENT_FUNCTION(22, Alexei, standingAtWindow) switch (savepoint.action) { default: break; @@ -779,7 +779,7 @@ IMPLEMENT_FUNCTION(22, Alexei, function22) getData()->inventoryItem = kItemNone; - setup_function23(); + setup_waitingForTatiana(); break; case kAction1: @@ -801,7 +801,7 @@ IMPLEMENT_FUNCTION(22, Alexei, function22) case 1: getData()->location = kLocationInsideCompartment; - setup_function21(); + setup_sitting(); break; case 2: @@ -821,7 +821,7 @@ IMPLEMENT_FUNCTION(22, Alexei, function22) getEntities()->updatePositionExit(kEntityAlexei, kCarRestaurant, 52); getData()->location = kLocationInsideCompartment; - setup_function21(); + setup_standingAtWindow(); break; } break; @@ -829,7 +829,7 @@ IMPLEMENT_FUNCTION(22, Alexei, function22) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(23, Alexei, function23) +IMPLEMENT_FUNCTION(23, Alexei, waitingForTatiana) switch (savepoint.action) { default: break; @@ -861,7 +861,7 @@ IMPLEMENT_FUNCTION(23, Alexei, function23) getEntities()->drawSequenceLeft(kEntityAlexei, "103F"); getScenes()->processScene(); - setup_function24(); + setup_upset(); break; case 2: @@ -879,18 +879,18 @@ IMPLEMENT_FUNCTION(23, Alexei, function23) setCallback(1); setup_savegame(kSavegameTypeEvent, kEventAlexeiSalonVassili); } else { - setup_function24(); + setup_upset(); } break; case kAction188784532: - setup_function24(); + setup_upset(); break; } IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(24, Alexei, function24) +IMPLEMENT_FUNCTION(24, Alexei, upset) switch (savepoint.action) { default: break; @@ -917,11 +917,11 @@ IMPLEMENT_FUNCTION(24, Alexei, function24) getData()->entityPosition = kPosition_9460; getEntities()->clearSequences(kEntityAlexei); getScenes()->loadSceneFromPosition(kCarRestaurant, 55); - setup_function25(); + setup_returnCompartmentNight(); break; case 2: - setup_function25(); + setup_returnCompartmentNight(); break; } break; @@ -935,14 +935,14 @@ IMPLEMENT_FUNCTION(24, Alexei, function24) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(25, Alexei, function25) +IMPLEMENT_FUNCTION(25, Alexei, returnCompartmentNight) switch (savepoint.action) { default: break; case kActionDefault: setCallback(1); - setup_function13(); + setup_enterComparment(); break; case kActionCallback: @@ -955,12 +955,12 @@ IMPLEMENT_FUNCTION(25, Alexei, function25) getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49); setCallback(2); - setup_function16(kTime1179000, "411"); + setup_compartmentLogic(kTime1179000, "411"); break; case 2: setCallback(3); - setup_function16(kTime1323000, "412"); + setup_compartmentLogic(kTime1323000, "412"); break; case 3: @@ -1017,7 +1017,7 @@ IMPLEMENT_FUNCTION(28, Alexei, chapter2) break; case kActionNone: - setup_chapter2Handler(); + setup_inCompartment2(); break; case kActionDefault: @@ -1037,14 +1037,14 @@ IMPLEMENT_FUNCTION(28, Alexei, chapter2) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(29, Alexei, chapter2Handler) +IMPLEMENT_FUNCTION(29, Alexei, inCompartment2) switch (savepoint.action) { default: break; case kActionDefault: setCallback(1); - setup_function16(kTime1791000, "411"); + setup_compartmentLogic(kTime1791000, "411"); break; case kActionCallback: @@ -1054,7 +1054,7 @@ IMPLEMENT_FUNCTION(29, Alexei, chapter2Handler) case 1: setCallback(2); - setup_function14(); + setup_exitCompartment(); break; case 2: @@ -1085,7 +1085,7 @@ IMPLEMENT_FUNCTION(29, Alexei, chapter2Handler) case 6: getEntities()->updatePositionExit(kEntityAlexei, kCarRestaurant, 63); getSavePoints()->push(kEntityAlexei, kEntityTatiana, kAction290869168); - setup_function30(); + setup_atBreakfast(); break; } break; @@ -1093,7 +1093,7 @@ IMPLEMENT_FUNCTION(29, Alexei, chapter2Handler) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(30, Alexei, function30) +IMPLEMENT_FUNCTION(30, Alexei, atBreakfast) switch (savepoint.action) { default: break; @@ -1134,7 +1134,7 @@ IMPLEMENT_FUNCTION(30, Alexei, function30) case 3: getEntities()->updatePositionExit(kEntityAlexei, kCarRestaurant, 63); - setup_function31(); + setup_returnCompartment2(); break; } break; @@ -1154,7 +1154,7 @@ IMPLEMENT_FUNCTION(30, Alexei, function30) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(31, Alexei, function31) +IMPLEMENT_FUNCTION(31, Alexei, returnCompartment2) switch (savepoint.action) { default: break; @@ -1175,7 +1175,7 @@ IMPLEMENT_FUNCTION(31, Alexei, function31) case 1: setCallback(2); - setup_function13(); + setup_enterComparment(); break; case 2: @@ -1183,7 +1183,7 @@ IMPLEMENT_FUNCTION(31, Alexei, function31) getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49); setCallback(3); - setup_function16(kTimeEnd, "411"); + setup_compartmentLogic(kTimeEnd, "411"); break; } break; @@ -1197,7 +1197,7 @@ IMPLEMENT_FUNCTION(32, Alexei, chapter3) break; case kActionNone: - setup_chapter3Handler(); + setup_playingChess(); break; case kActionDefault: @@ -1216,14 +1216,14 @@ IMPLEMENT_FUNCTION(32, Alexei, chapter3) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(33, Alexei, chapter3Handler) +IMPLEMENT_FUNCTION(33, Alexei, playingChess) switch (savepoint.action) { default: break; case kActionCallback: if (getCallback() == 1) - setup_function34(); + setup_inPart3(); break; case kAction122288808: @@ -1232,7 +1232,7 @@ IMPLEMENT_FUNCTION(33, Alexei, chapter3Handler) getData()->car = kCarRedSleeping; setCallback(1); - setup_function13(); + setup_enterComparment(); break; case kAction122358304: @@ -1242,7 +1242,7 @@ IMPLEMENT_FUNCTION(33, Alexei, chapter3Handler) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(34, Alexei, function34) +IMPLEMENT_FUNCTION(34, Alexei, inPart3) switch (savepoint.action) { default: break; @@ -1252,7 +1252,7 @@ IMPLEMENT_FUNCTION(34, Alexei, function34) getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49); setCallback(1); - setup_function16(kTime2083500, "411"); + setup_compartmentLogic(kTime2083500, "411"); break; case kActionCallback: @@ -1262,7 +1262,7 @@ IMPLEMENT_FUNCTION(34, Alexei, function34) case 1: setCallback(2); - setup_function14(); + setup_exitCompartment(); break; case 2: @@ -1285,12 +1285,12 @@ IMPLEMENT_FUNCTION(34, Alexei, function34) case 5: setCallback(6); - setup_function35(); + setup_pacing3(); break; case 6: setCallback(7); - setup_function13(); + setup_enterComparment(); break; case 7: @@ -1299,17 +1299,17 @@ IMPLEMENT_FUNCTION(34, Alexei, function34) getScenes()->loadSceneFromPosition(kCarGreenSleeping, 66); setCallback(8); - setup_function16(kTime2124000, "NONE"); + setup_compartmentLogic(kTime2124000, "NONE"); break; case 8: setCallback(9); - setup_function14(); + setup_exitCompartment(); break; case 9: setCallback(10); - setup_function36(); + setup_goSalon3(); break; case 10: @@ -1318,7 +1318,7 @@ IMPLEMENT_FUNCTION(34, Alexei, function34) getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49); setCallback(11); - setup_function16(kTime16451100, "411"); + setup_compartmentLogic(kTime16451100, "411"); break; } break; @@ -1326,7 +1326,7 @@ IMPLEMENT_FUNCTION(34, Alexei, function34) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(35, Alexei, function35) +IMPLEMENT_FUNCTION(35, Alexei, pacing3) switch (savepoint.action) { default: break; @@ -1345,7 +1345,7 @@ IMPLEMENT_FUNCTION(35, Alexei, function35) if (Entity::updateParameter(params->param3, getState()->time, params->param1)) { if (getEntities()->isSomebodyInsideRestaurantOrSalon()) { setCallback(3); - setup_function15(); + setup_pacingAtWindow(); break; } } @@ -1392,7 +1392,7 @@ label_callback_3: IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(36, Alexei, function36) +IMPLEMENT_FUNCTION(36, Alexei, goSalon3) switch (savepoint.action) { default: break; @@ -1457,7 +1457,7 @@ IMPLEMENT_FUNCTION(36, Alexei, function36) case kAction122288808: setCallback(4); - setup_function13(); + setup_enterComparment(); break; case kAction122358304: @@ -1474,7 +1474,7 @@ IMPLEMENT_FUNCTION(37, Alexei, chapter4) break; case kActionNone: - setup_chapter4Handler(); + setup_inCompartment4(); break; case kActionDefault: @@ -1493,25 +1493,25 @@ IMPLEMENT_FUNCTION(37, Alexei, chapter4) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(38, Alexei, chapter4Handler) +IMPLEMENT_FUNCTION(38, Alexei, inCompartment4) switch (savepoint.action) { default: break; case kActionDefault: setCallback(1); - setup_function16(kTime2354400, "411"); + setup_compartmentLogic(kTime2354400, "411"); break; case kActionCallback: if (getCallback() == 1) - setup_function39(); + setup_meetTatiana(); break; } IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(39, Alexei, function39) +IMPLEMENT_FUNCTION(39, Alexei, meetTatiana) switch (savepoint.action) { default: break; @@ -1547,7 +1547,7 @@ IMPLEMENT_FUNCTION(39, Alexei, function39) getScenes()->loadSceneFromPosition(kCarGreenSleeping, 72); } - setup_function40(); + setup_leavePlatform(); } break; @@ -1571,7 +1571,7 @@ IMPLEMENT_FUNCTION(39, Alexei, function39) break; } - setup_function40(); + setup_leavePlatform(); } break; @@ -1616,7 +1616,7 @@ IMPLEMENT_FUNCTION(39, Alexei, function39) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(40, Alexei, function40) +IMPLEMENT_FUNCTION(40, Alexei, leavePlatform) switch (savepoint.action) { default: break; @@ -1653,7 +1653,7 @@ IMPLEMENT_FUNCTION(40, Alexei, function40) getData()->location = kLocationInsideCompartment; getEntities()->clearSequences(kEntityAlexei); - setup_function41(); + setup_inCompartmentAgain(); break; } break; @@ -1661,7 +1661,7 @@ IMPLEMENT_FUNCTION(40, Alexei, function40) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(41, Alexei, function41) +IMPLEMENT_FUNCTION(41, Alexei, inCompartmentAgain) switch (savepoint.action) { default: break; @@ -1671,25 +1671,25 @@ IMPLEMENT_FUNCTION(41, Alexei, function41) getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49); setCallback(1); - setup_function16(kTime2403000, "411"); + setup_compartmentLogic(kTime2403000, "411"); break; case kActionCallback: if (getCallback() == 1) - setup_function42(); + setup_goSalon4(); break; } IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(42, Alexei, function42) +IMPLEMENT_FUNCTION(42, Alexei, goSalon4) switch (savepoint.action) { default: break; case kActionDefault: setCallback(1); - setup_function14(); + setup_exitCompartment(); break; case kActionCallback: @@ -1711,7 +1711,7 @@ IMPLEMENT_FUNCTION(42, Alexei, function42) case 3: getData()->location = kLocationInsideCompartment; - setup_function43(); + setup_pacing(); break; } break; @@ -1719,7 +1719,7 @@ IMPLEMENT_FUNCTION(42, Alexei, function42) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(43, Alexei, function43) +IMPLEMENT_FUNCTION(43, Alexei, pacing) switch (savepoint.action) { default: break; @@ -1731,7 +1731,7 @@ IMPLEMENT_FUNCTION(43, Alexei, function43) if (getEntities()->isSomebodyInsideRestaurantOrSalon()) { setCallback(1); - setup_function15(); + setup_pacingAtWindow(); break; } } @@ -1768,7 +1768,7 @@ label_callback_1: break; case 3: - setup_function44(); + setup_goToPlatform(); break; } break; @@ -1776,7 +1776,7 @@ label_callback_1: IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(44, Alexei, function44) +IMPLEMENT_FUNCTION(44, Alexei, goToPlatform) switch (savepoint.action) { default: break; @@ -1794,7 +1794,7 @@ IMPLEMENT_FUNCTION(44, Alexei, function44) if (getEntities()->isPlayerPosition(kCarGreenSleeping, 62)) getScenes()->loadSceneFromPosition(kCarGreenSleeping, 72); - setup_function45(); + setup_returnCompartment4(); } } break; @@ -1843,14 +1843,14 @@ IMPLEMENT_FUNCTION(44, Alexei, function44) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(45, Alexei, function45) +IMPLEMENT_FUNCTION(45, Alexei, returnCompartment4) switch (savepoint.action) { default: break; case kActionDefault: setCallback(1); - setup_function13(); + setup_enterComparment(); break; case kActionCallback: @@ -1859,10 +1859,10 @@ IMPLEMENT_FUNCTION(45, Alexei, function45) getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49); if (getInventory()->hasItem(kItemBomb)) { - setup_function46(); + setup_bombPlanB(); } else { setCallback(2); - setup_function16(kTimeEnd, "412"); + setup_compartmentLogic(kTimeEnd, "412"); } } break; @@ -1870,7 +1870,7 @@ IMPLEMENT_FUNCTION(45, Alexei, function45) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(46, Alexei, function46) +IMPLEMENT_FUNCTION(46, Alexei, bombPlanB) switch (savepoint.action) { default: break; @@ -1899,12 +1899,12 @@ IMPLEMENT_FUNCTION(46, Alexei, function46) } setCallback(4); - setup_function13(); + setup_enterComparment(); break; case kActionDefault: setCallback(1); - setup_function16(kTime2488500, "411"); + setup_compartmentLogic(kTime2488500, "411"); break; case kActionCallback: @@ -1914,7 +1914,7 @@ IMPLEMENT_FUNCTION(46, Alexei, function46) case 1: setCallback(2); - setup_function14(); + setup_exitCompartment(); break; case 2: @@ -1927,7 +1927,7 @@ IMPLEMENT_FUNCTION(46, Alexei, function46) getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49); setCallback(5); - setup_function16(kTime2507400, "412"); + setup_compartmentLogic(kTime2507400, "412"); break; case 5: diff --git a/engines/lastexpress/entities/alexei.h b/engines/lastexpress/entities/alexei.h index 9792385863..9a316ec574 100644 --- a/engines/lastexpress/entities/alexei.h +++ b/engines/lastexpress/entities/alexei.h @@ -123,9 +123,9 @@ public: */ DECLARE_FUNCTION(callbackActionRestaurantOrSalon) - DECLARE_FUNCTION(function13) - DECLARE_FUNCTION(function14) - DECLARE_FUNCTION(function15) + DECLARE_FUNCTION(enterComparment) + DECLARE_FUNCTION(exitCompartment) + DECLARE_FUNCTION(pacingAtWindow) /** * ??? @@ -133,7 +133,7 @@ public: * @param timeValue The time value * @param sequence The sequence to draw */ - DECLARE_FUNCTION_2(function16, TimeValue timeValue, const char *sequence) + DECLARE_FUNCTION_2(compartmentLogic, TimeValue timeValue, const char *sequence) /** * Setup Chapter 1 @@ -143,14 +143,14 @@ public: /** * Handle Chapter 1 events */ - DECLARE_FUNCTION(chapter1Handler) - DECLARE_FUNCTION(function19) - DECLARE_FUNCTION(function20) - DECLARE_FUNCTION(function21) - DECLARE_FUNCTION(function22) - DECLARE_FUNCTION(function23) - DECLARE_FUNCTION(function24) - DECLARE_FUNCTION(function25) + DECLARE_FUNCTION(atDinner) + DECLARE_FUNCTION(returnCompartment) + DECLARE_FUNCTION(goSalon) + DECLARE_FUNCTION(sitting) + DECLARE_FUNCTION(standingAtWindow) + DECLARE_FUNCTION(waitingForTatiana) + DECLARE_FUNCTION(upset) + DECLARE_FUNCTION(returnCompartmentNight) DECLARE_FUNCTION(function26) DECLARE_FUNCTION(function27) @@ -162,9 +162,9 @@ public: /** * Handle Chapter 2 events */ - DECLARE_FUNCTION(chapter2Handler) - DECLARE_FUNCTION(function30) - DECLARE_FUNCTION(function31) + DECLARE_FUNCTION(inCompartment2) + DECLARE_FUNCTION(atBreakfast) + DECLARE_FUNCTION(returnCompartment2) /** * Setup Chapter 3 @@ -174,10 +174,10 @@ public: /** * Handle Chapter 3 events */ - DECLARE_FUNCTION(chapter3Handler) - DECLARE_FUNCTION(function34) - DECLARE_FUNCTION(function35) - DECLARE_FUNCTION(function36) + DECLARE_FUNCTION(playingChess) + DECLARE_FUNCTION(inPart3) + DECLARE_FUNCTION(pacing3) + DECLARE_FUNCTION(goSalon3) /** * Setup Chapter 4 @@ -187,15 +187,15 @@ public: /** * Handle Chapter 4 events */ - DECLARE_FUNCTION(chapter4Handler) - DECLARE_FUNCTION(function39) - DECLARE_FUNCTION(function40) - DECLARE_FUNCTION(function41) - DECLARE_FUNCTION(function42) - DECLARE_FUNCTION(function43) - DECLARE_FUNCTION(function44) - DECLARE_FUNCTION(function45) - DECLARE_FUNCTION(function46) + DECLARE_FUNCTION(inCompartment4) + DECLARE_FUNCTION(meetTatiana) + DECLARE_FUNCTION(leavePlatform) + DECLARE_FUNCTION(inCompartmentAgain) + DECLARE_FUNCTION(goSalon4) + DECLARE_FUNCTION(pacing) + DECLARE_FUNCTION(goToPlatform) + DECLARE_FUNCTION(returnCompartment4) + DECLARE_FUNCTION(bombPlanB) DECLARE_FUNCTION(function47) /** diff --git a/engines/lastexpress/entities/alouan.cpp b/engines/lastexpress/entities/alouan.cpp index e834e1f7cb..86d5512cb9 100644 --- a/engines/lastexpress/entities/alouan.cpp +++ b/engines/lastexpress/entities/alouan.cpp @@ -38,10 +38,10 @@ Alouan::Alouan(LastExpressEngine *engine) : Entity(engine, kEntityAlouan) { ADD_CALLBACK_FUNCTION(Alouan, playSound); ADD_CALLBACK_FUNCTION(Alouan, updateFromTime); ADD_CALLBACK_FUNCTION(Alouan, updateEntity); - ADD_CALLBACK_FUNCTION(Alouan, compartment6); - ADD_CALLBACK_FUNCTION(Alouan, compartment8); - ADD_CALLBACK_FUNCTION(Alouan, compartment6to8); - ADD_CALLBACK_FUNCTION(Alouan, compartment8to6); + ADD_CALLBACK_FUNCTION(Alouan, peekF); + ADD_CALLBACK_FUNCTION(Alouan, peekH); + ADD_CALLBACK_FUNCTION(Alouan, goFtoH); + ADD_CALLBACK_FUNCTION(Alouan, goHtoF); ADD_CALLBACK_FUNCTION(Alouan, chapter1); ADD_CALLBACK_FUNCTION(Alouan, chapter1Handler); ADD_CALLBACK_FUNCTION(Alouan, function12); @@ -55,7 +55,7 @@ Alouan::Alouan(LastExpressEngine *engine) : Entity(engine, kEntityAlouan) { ADD_CALLBACK_FUNCTION(Alouan, chapter5); ADD_CALLBACK_FUNCTION(Alouan, chapter5Handler); ADD_CALLBACK_FUNCTION(Alouan, function22); - ADD_CALLBACK_FUNCTION(Alouan, function23); + ADD_CALLBACK_FUNCTION(Alouan, hiding); ADD_NULL_FUNCTION(); } @@ -85,22 +85,22 @@ IMPLEMENT_FUNCTION_II(5, Alouan, updateEntity, CarIndex, EntityPosition) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(6, Alouan, compartment6) +IMPLEMENT_FUNCTION(6, Alouan, peekF) Entity::goToCompartment(savepoint, kObjectCompartment6, kPosition_4070, "621Cf", "621Df"); IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(7, Alouan, compartment8) +IMPLEMENT_FUNCTION(7, Alouan, peekH) Entity::goToCompartment(savepoint, kObjectCompartment8, kPosition_2740, "621Ch", "621Dh"); IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(8, Alouan, compartment6to8) +IMPLEMENT_FUNCTION(8, Alouan, goFtoH) Entity::goToCompartmentFromCompartment(savepoint, kObjectCompartment6, kPosition_4070, "621Bf", kObjectCompartment8, kPosition_2740, "621Ah"); IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(9, Alouan, compartment8to6) +IMPLEMENT_FUNCTION(9, Alouan, goHtoF) Entity::goToCompartmentFromCompartment(savepoint, kObjectCompartment8, kPosition_2740, "621Bh", kObjectCompartment6, kPosition_4070, "621Af"); IMPLEMENT_FUNCTION_END @@ -131,7 +131,7 @@ IMPLEMENT_FUNCTION(11, Alouan, chapter1Handler) case kActionNone: - if (Entity::timeCheckCallback(kTime1096200, params->param1, 1, WRAP_SETUP_FUNCTION(Alouan, setup_compartment8to6))) + if (Entity::timeCheckCallback(kTime1096200, params->param1, 1, WRAP_SETUP_FUNCTION(Alouan, setup_goHtoF))) break; label_callback1: @@ -146,7 +146,7 @@ label_callback1: getSavePoints()->push(kEntityAlouan, kEntityTrain, kAction191070912, kPosition_4840); setCallback(2); - setup_compartment6to8(); + setup_goFtoH(); } break; @@ -215,9 +215,9 @@ IMPLEMENT_FUNCTION(14, Alouan, chapter2Handler) setCallback(params->param1 ? 1 : 2); if (params->param1) - setup_compartment8(); + setup_peekH(); else - setup_compartment6(); + setup_peekF(); break; case kActionDefault: @@ -249,7 +249,7 @@ IMPLEMENT_FUNCTION(14, Alouan, chapter2Handler) case kAction189489753: setCallback(3); - setup_compartment8to6(); + setup_goHtoF(); break; } IMPLEMENT_FUNCTION_END @@ -282,12 +282,12 @@ IMPLEMENT_FUNCTION(16, Alouan, chapter3Handler) break; case kActionNone: - if (Entity::timeCheckCallback(kTimeCitySalzbourg, params->param1, 1, WRAP_SETUP_FUNCTION(Alouan, setup_compartment8to6))) + if (Entity::timeCheckCallback(kTimeCitySalzbourg, params->param1, 1, WRAP_SETUP_FUNCTION(Alouan, setup_goHtoF))) break; label_callback1: if (params->param2 != kTimeInvalid && getState()->time > kTime1989000) { - if (Entity::timeCheckCar(kTime2119500, params->param5, 5, WRAP_SETUP_FUNCTION(Alouan, setup_compartment8))) + if (Entity::timeCheckCar(kTime2119500, params->param5, 5, WRAP_SETUP_FUNCTION(Alouan, setup_peekH))) break; } @@ -296,12 +296,12 @@ label_callback2: break; label_callback3: - if (Entity::timeCheckCallback(kTime2133000, params->param4, 4, WRAP_SETUP_FUNCTION(Alouan, setup_compartment6to8))) + if (Entity::timeCheckCallback(kTime2133000, params->param4, 4, WRAP_SETUP_FUNCTION(Alouan, setup_goFtoH))) break; label_callback4: if (params->param5 != kTimeInvalid && getState()->time > kTime2151000) { - if (Entity::timeCheckCar(kTime2241000, params->param5, 5, WRAP_SETUP_FUNCTION(Alouan, setup_compartment8))) + if (Entity::timeCheckCar(kTime2241000, params->param5, 5, WRAP_SETUP_FUNCTION(Alouan, setup_peekH))) break; } break; @@ -361,12 +361,12 @@ IMPLEMENT_FUNCTION(18, Alouan, chapter4Handler) case kActionNone: if (params->param1 != kTimeInvalid) { - if (Entity::timeCheckCar(kTime2443500, params->param1, 1, WRAP_SETUP_FUNCTION(Alouan, setup_compartment8))) + if (Entity::timeCheckCar(kTime2443500, params->param1, 1, WRAP_SETUP_FUNCTION(Alouan, setup_peekH))) break; } label_callback1: - if (Entity::timeCheckCallback(kTime2455200, params->param2, 2, WRAP_SETUP_FUNCTION(Alouan, setup_compartment8to6))) + if (Entity::timeCheckCallback(kTime2455200, params->param2, 2, WRAP_SETUP_FUNCTION(Alouan, setup_goHtoF))) break; label_callback2: @@ -375,7 +375,7 @@ label_callback2: getSavePoints()->push(kEntityAlouan, kEntityTrain, kAction191070912, kPosition_4840); setCallback(3); - setup_compartment6to8(); + setup_goFtoH(); } break; @@ -452,7 +452,7 @@ IMPLEMENT_FUNCTION(22, Alouan, function22) if (!Entity::updateParameter(params->param1, getState()->time, 2700)) break; - setup_function23(); + setup_hiding(); break; case kActionDefault: @@ -463,13 +463,13 @@ IMPLEMENT_FUNCTION(22, Alouan, function22) case kActionDrawScene: if (getEntities()->isInsideTrainCar(kEntityPlayer, kCarGreenSleeping)) - setup_function23(); + setup_hiding(); break; } IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(23, Alouan, function23) +IMPLEMENT_FUNCTION(23, Alouan, hiding) switch (savepoint.action) { default: break; diff --git a/engines/lastexpress/entities/alouan.h b/engines/lastexpress/entities/alouan.h index 91254a449a..371e4f20d9 100644 --- a/engines/lastexpress/entities/alouan.h +++ b/engines/lastexpress/entities/alouan.h @@ -69,10 +69,10 @@ public: */ DECLARE_FUNCTION_2(updateEntity, CarIndex car, EntityPosition entityPosition) - DECLARE_FUNCTION(compartment6) - DECLARE_FUNCTION(compartment8) - DECLARE_FUNCTION(compartment6to8) - DECLARE_FUNCTION(compartment8to6) + DECLARE_FUNCTION(peekF) + DECLARE_FUNCTION(peekH) + DECLARE_FUNCTION(goFtoH) + DECLARE_FUNCTION(goHtoF) /** * Setup Chapter 1 @@ -126,7 +126,7 @@ public: */ DECLARE_FUNCTION(chapter5Handler) DECLARE_FUNCTION(function22) - DECLARE_FUNCTION(function23) + DECLARE_FUNCTION(hiding) DECLARE_NULL_FUNCTION() }; diff --git a/engines/lastexpress/entities/anna.cpp b/engines/lastexpress/entities/anna.cpp index f8768032b5..4889f66c69 100644 --- a/engines/lastexpress/entities/anna.cpp +++ b/engines/lastexpress/entities/anna.cpp @@ -51,76 +51,76 @@ Anna::Anna(LastExpressEngine *engine) : Entity(engine, kEntityAnna) { ADD_CALLBACK_FUNCTION(Anna, savegame); ADD_CALLBACK_FUNCTION(Anna, updateEntity); ADD_CALLBACK_FUNCTION(Anna, updateFromTime); - ADD_CALLBACK_FUNCTION(Anna, function12); + ADD_CALLBACK_FUNCTION(Anna, practiceMusic); ADD_CALLBACK_FUNCTION(Anna, draw2); ADD_CALLBACK_FUNCTION(Anna, updateFromTicks); - ADD_CALLBACK_FUNCTION(Anna, function15); + ADD_CALLBACK_FUNCTION(Anna, compartmentLogic); ADD_CALLBACK_FUNCTION(Anna, chapter1); - ADD_CALLBACK_FUNCTION(Anna, function17); - ADD_CALLBACK_FUNCTION(Anna, function18); - ADD_CALLBACK_FUNCTION(Anna, chapter1Handler); - ADD_CALLBACK_FUNCTION(Anna, function20); - ADD_CALLBACK_FUNCTION(Anna, function21); + ADD_CALLBACK_FUNCTION(Anna, doWalkP1); + ADD_CALLBACK_FUNCTION(Anna, diningLogic); + ADD_CALLBACK_FUNCTION(Anna, fleeTyler); + ADD_CALLBACK_FUNCTION(Anna, waitDinner); + ADD_CALLBACK_FUNCTION(Anna, goDinner); ADD_CALLBACK_FUNCTION(Anna, function22); - ADD_CALLBACK_FUNCTION(Anna, function23); - ADD_CALLBACK_FUNCTION(Anna, function24); - ADD_CALLBACK_FUNCTION(Anna, function25); - ADD_CALLBACK_FUNCTION(Anna, function26); - ADD_CALLBACK_FUNCTION(Anna, function27); - ADD_CALLBACK_FUNCTION(Anna, function28); - ADD_CALLBACK_FUNCTION(Anna, function29); + ADD_CALLBACK_FUNCTION(Anna, waitingDinner); + ADD_CALLBACK_FUNCTION(Anna, waitingDinner2); + ADD_CALLBACK_FUNCTION(Anna, eatingDinner); + ADD_CALLBACK_FUNCTION(Anna, leaveDinner); + ADD_CALLBACK_FUNCTION(Anna, freshenUp); + ADD_CALLBACK_FUNCTION(Anna, goSalon); + ADD_CALLBACK_FUNCTION(Anna, waitAugust); ADD_CALLBACK_FUNCTION(Anna, function30); - ADD_CALLBACK_FUNCTION(Anna, function31); - ADD_CALLBACK_FUNCTION(Anna, function32); - ADD_CALLBACK_FUNCTION(Anna, function33); - ADD_CALLBACK_FUNCTION(Anna, function34); - ADD_CALLBACK_FUNCTION(Anna, function35); - ADD_CALLBACK_FUNCTION(Anna, function36); + ADD_CALLBACK_FUNCTION(Anna, leaveAugust); + ADD_CALLBACK_FUNCTION(Anna, returnCompartment); + ADD_CALLBACK_FUNCTION(Anna, readyForBed); + ADD_CALLBACK_FUNCTION(Anna, asleep); + ADD_CALLBACK_FUNCTION(Anna, wakeNight); + ADD_CALLBACK_FUNCTION(Anna, goVassili); ADD_CALLBACK_FUNCTION(Anna, function37); - ADD_CALLBACK_FUNCTION(Anna, function38); - ADD_CALLBACK_FUNCTION(Anna, function39); - ADD_CALLBACK_FUNCTION(Anna, function40); - ADD_CALLBACK_FUNCTION(Anna, function41); + ADD_CALLBACK_FUNCTION(Anna, speakTatiana); + ADD_CALLBACK_FUNCTION(Anna, doWalk1019); + ADD_CALLBACK_FUNCTION(Anna, leaveTatiana); + ADD_CALLBACK_FUNCTION(Anna, goBackToSleep); ADD_CALLBACK_FUNCTION(Anna, chapter2); - ADD_CALLBACK_FUNCTION(Anna, chapter2Handler); + ADD_CALLBACK_FUNCTION(Anna, inPart2); ADD_CALLBACK_FUNCTION(Anna, chapter3); - ADD_CALLBACK_FUNCTION(Anna, function45); - ADD_CALLBACK_FUNCTION(Anna, chapter3Handler); - ADD_CALLBACK_FUNCTION(Anna, function47); - ADD_CALLBACK_FUNCTION(Anna, function48); + ADD_CALLBACK_FUNCTION(Anna, exitCompartment); + ADD_CALLBACK_FUNCTION(Anna, practicing); + ADD_CALLBACK_FUNCTION(Anna, goLunch); + ADD_CALLBACK_FUNCTION(Anna, lunch); ADD_CALLBACK_FUNCTION(Anna, leaveTableWithAugust); - ADD_CALLBACK_FUNCTION(Anna, function50); - ADD_CALLBACK_FUNCTION(Anna, function51); - ADD_CALLBACK_FUNCTION(Anna, function52); - ADD_CALLBACK_FUNCTION(Anna, function53); - ADD_CALLBACK_FUNCTION(Anna, function54); - ADD_CALLBACK_FUNCTION(Anna, function55); - ADD_CALLBACK_FUNCTION(Anna, function56); - ADD_CALLBACK_FUNCTION(Anna, function57); - ADD_CALLBACK_FUNCTION(Anna, function58); - ADD_CALLBACK_FUNCTION(Anna, function59); - ADD_CALLBACK_FUNCTION(Anna, function60); - ADD_CALLBACK_FUNCTION(Anna, function61); + ADD_CALLBACK_FUNCTION(Anna, leaveLunch); + ADD_CALLBACK_FUNCTION(Anna, afterLunch); + ADD_CALLBACK_FUNCTION(Anna, returnCompartment3); + ADD_CALLBACK_FUNCTION(Anna, dressing); + ADD_CALLBACK_FUNCTION(Anna, giveMaxToConductor2); + ADD_CALLBACK_FUNCTION(Anna, goConcert); + ADD_CALLBACK_FUNCTION(Anna, concert); + ADD_CALLBACK_FUNCTION(Anna, leaveConcert); + ADD_CALLBACK_FUNCTION(Anna, leaveConcertCathInCompartment); + ADD_CALLBACK_FUNCTION(Anna, afterConcert); + ADD_CALLBACK_FUNCTION(Anna, giveMaxBack); + ADD_CALLBACK_FUNCTION(Anna, goBaggageCompartment); ADD_CALLBACK_FUNCTION(Anna, function62); - ADD_CALLBACK_FUNCTION(Anna, function63); - ADD_CALLBACK_FUNCTION(Anna, baggage); - ADD_CALLBACK_FUNCTION(Anna, function65); + ADD_CALLBACK_FUNCTION(Anna, deadBaggageCompartment); + ADD_CALLBACK_FUNCTION(Anna, baggageFight); + ADD_CALLBACK_FUNCTION(Anna, prepareVienna); ADD_CALLBACK_FUNCTION(Anna, chapter4); - ADD_CALLBACK_FUNCTION(Anna, chapter4Handler); - ADD_CALLBACK_FUNCTION(Anna, function68); - ADD_CALLBACK_FUNCTION(Anna, function69); - ADD_CALLBACK_FUNCTION(Anna, function70); - ADD_CALLBACK_FUNCTION(Anna, function71); - ADD_CALLBACK_FUNCTION(Anna, function72); - ADD_CALLBACK_FUNCTION(Anna, function73); + ADD_CALLBACK_FUNCTION(Anna, reading); + ADD_CALLBACK_FUNCTION(Anna, sulking); + ADD_CALLBACK_FUNCTION(Anna, goSalon4); + ADD_CALLBACK_FUNCTION(Anna, returnCompartment4); + ADD_CALLBACK_FUNCTION(Anna, enterCompartmentCathFollowsAnna); + ADD_CALLBACK_FUNCTION(Anna, doWalkCathFollowsAnna); + ADD_CALLBACK_FUNCTION(Anna, letDownHair); ADD_CALLBACK_FUNCTION(Anna, chapter5); - ADD_CALLBACK_FUNCTION(Anna, chapter5Handler); + ADD_CALLBACK_FUNCTION(Anna, tiedUp); ADD_CALLBACK_FUNCTION(Anna, function76); - ADD_CALLBACK_FUNCTION(Anna, function77); - ADD_CALLBACK_FUNCTION(Anna, function78); - ADD_CALLBACK_FUNCTION(Anna, function79); - ADD_CALLBACK_FUNCTION(Anna, function80); + ADD_CALLBACK_FUNCTION(Anna, readyToScore); + ADD_CALLBACK_FUNCTION(Anna, kidnapped); + ADD_CALLBACK_FUNCTION(Anna, waiting); ADD_CALLBACK_FUNCTION(Anna, finalSequence); + ADD_CALLBACK_FUNCTION(Anna, openFirebird); } ////////////////////////////////////////////////////////////////////////// @@ -188,7 +188,7 @@ IMPLEMENT_FUNCTION_I(11, Anna, updateFromTime, uint32) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(12, Anna, function12) +IMPLEMENT_FUNCTION(12, Anna, practiceMusic) switch (savepoint.action) { default: break; @@ -411,7 +411,7 @@ IMPLEMENT_FUNCTION_I(14, Anna, updateFromTicks, uint32) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION_IS(15, Anna, function15, TimeValue) +IMPLEMENT_FUNCTION_IS(15, Anna, compartmentLogic, TimeValue) switch (savepoint.action) { default: break; @@ -547,7 +547,7 @@ IMPLEMENT_FUNCTION(16, Anna, chapter1) break; case kActionNone: - Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Anna, setup_chapter1Handler)); + Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Anna, setup_fleeTyler)); break; case kActionDefault: @@ -567,7 +567,7 @@ IMPLEMENT_FUNCTION(16, Anna, chapter1) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION_II(17, Anna, function17, uint32, uint32) +IMPLEMENT_FUNCTION_II(17, Anna, doWalkP1, uint32, uint32) switch (savepoint.action) { default: break; @@ -656,7 +656,7 @@ IMPLEMENT_FUNCTION_II(17, Anna, function17, uint32, uint32) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION_I(18, Anna, function18, TimeValue) +IMPLEMENT_FUNCTION_I(18, Anna, diningLogic, TimeValue) switch (savepoint.action) { default: break; @@ -764,7 +764,7 @@ IMPLEMENT_FUNCTION_I(18, Anna, function18, TimeValue) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(19, Anna, chapter1Handler) +IMPLEMENT_FUNCTION(19, Anna, fleeTyler) switch (savepoint.action) { default: break; @@ -797,7 +797,7 @@ IMPLEMENT_FUNCTION(19, Anna, chapter1Handler) getData()->entityPosition = kPosition_4070; getData()->location = kLocationInsideCompartment; - setup_function20(); + setup_waitDinner(); break; } break; @@ -805,14 +805,14 @@ IMPLEMENT_FUNCTION(19, Anna, chapter1Handler) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(20, Anna, function20) +IMPLEMENT_FUNCTION(20, Anna, waitDinner) switch (savepoint.action) { default: break; case kActionDefault: setCallback(1); - setup_function15(kTime1093500, "NONE"); + setup_compartmentLogic(kTime1093500, "NONE"); break; case kActionCallback: @@ -828,7 +828,7 @@ IMPLEMENT_FUNCTION(20, Anna, function20) case 2: getData()->location = kLocationOutsideCompartment; getSavePoints()->push(kEntityAnna, kEntityMax, kAction71277948); - setup_function21(); + setup_goDinner(); break; } break; @@ -836,14 +836,14 @@ IMPLEMENT_FUNCTION(20, Anna, function20) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(21, Anna, function21) +IMPLEMENT_FUNCTION(21, Anna, goDinner) switch (savepoint.action) { default: break; case kActionDefault: setCallback(1); - setup_function17(kCarRestaurant, kPosition_850); + setup_doWalkP1(kCarRestaurant, kPosition_850); break; case kActionCallback: @@ -894,13 +894,13 @@ IMPLEMENT_FUNCTION(22, Anna, function22) case kAction157370960: getData()->location = kLocationInsideCompartment; - setup_function23(); + setup_waitingDinner(); break; } IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(23, Anna, function23) +IMPLEMENT_FUNCTION(23, Anna, waitingDinner) switch (savepoint.action) { default: break; @@ -911,7 +911,7 @@ IMPLEMENT_FUNCTION(23, Anna, function23) getSavePoints()->push(kEntityAnna, kEntityTables0, kAction136455232); setCallback(1); - setup_function18(kTimeNone); + setup_diningLogic(kTimeNone); break; case kActionCallback: @@ -932,7 +932,7 @@ IMPLEMENT_FUNCTION(23, Anna, function23) case 3: getSavePoints()->push(kEntityAnna, kEntityServers0, kAction203859488); - setup_function24(); + setup_waitingDinner2(); break; } break; @@ -940,7 +940,7 @@ IMPLEMENT_FUNCTION(23, Anna, function23) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(24, Anna, function24) +IMPLEMENT_FUNCTION(24, Anna, waitingDinner2) switch (savepoint.action) { default: break; @@ -949,7 +949,7 @@ IMPLEMENT_FUNCTION(24, Anna, function24) getEntities()->drawSequenceLeft(kEntityAnna, "001G"); setCallback(1); - setup_function18(kTimeNone); + setup_diningLogic(kTimeNone); break; case kActionCallback: @@ -965,7 +965,7 @@ IMPLEMENT_FUNCTION(24, Anna, function24) case 2: getSavePoints()->push(kEntityAnna, kEntityServers0, kAction136702400); - setup_function25(); + setup_eatingDinner(); break; } break; @@ -973,7 +973,7 @@ IMPLEMENT_FUNCTION(24, Anna, function24) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(25, Anna, function25) +IMPLEMENT_FUNCTION(25, Anna, eatingDinner) switch (savepoint.action) { default: break; @@ -983,7 +983,7 @@ IMPLEMENT_FUNCTION(25, Anna, function25) getProgress().field_28 = 1; setCallback(1); - setup_function18(kTimeNone); + setup_diningLogic(kTimeNone); break; case kActionCallback: @@ -996,7 +996,7 @@ IMPLEMENT_FUNCTION(25, Anna, function25) break; case 3: - setup_function26(); + setup_leaveDinner(); break; } break; @@ -1008,13 +1008,13 @@ IMPLEMENT_FUNCTION(25, Anna, function25) case kAction201437056: getEntities()->drawSequenceLeft(kEntityAnna, "001J"); setCallback(2); - setup_function18(kTime1138500); + setup_diningLogic(kTime1138500); break; } IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(26, Anna, function26) +IMPLEMENT_FUNCTION(26, Anna, leaveDinner) switch (savepoint.action) { default: break; @@ -1046,7 +1046,7 @@ IMPLEMENT_FUNCTION(26, Anna, function26) case 2: setCallback(3); - setup_function17(kCarRedSleeping, kPosition_4070); + setup_doWalkP1(kCarRedSleeping, kPosition_4070); break; case 3: @@ -1059,7 +1059,7 @@ IMPLEMENT_FUNCTION(26, Anna, function26) getData()->entityPosition = kPosition_4070; getData()->location = kLocationInsideCompartment; - setup_function27(); + setup_freshenUp(); break; } break; @@ -1067,7 +1067,7 @@ IMPLEMENT_FUNCTION(26, Anna, function26) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(27, Anna, function27) +IMPLEMENT_FUNCTION(27, Anna, freshenUp) switch (savepoint.action) { default: break; @@ -1075,7 +1075,7 @@ IMPLEMENT_FUNCTION(27, Anna, function27) case kActionDefault: getSavePoints()->push(kEntityAnna, kEntityMax, kAction101687594); setCallback(1); - setup_function15(kTime1156500, "NONE"); + setup_compartmentLogic(kTime1156500, "NONE"); break; case kActionCallback: @@ -1088,7 +1088,7 @@ IMPLEMENT_FUNCTION(27, Anna, function27) if (getProgress().field_14 == 29) { params->param1 = (uint)(getState()->time + 900); setCallback(2); - setup_function15((TimeValue)params->param1, "NONE"); + setup_compartmentLogic((TimeValue)params->param1, "NONE"); } else { setCallback(3); setup_enterExitCompartment("618Bf", kObjectCompartmentF); @@ -1098,7 +1098,7 @@ IMPLEMENT_FUNCTION(27, Anna, function27) case 3: getData()->location = kLocationOutsideCompartment; getSavePoints()->push(kEntityAnna, kEntityMax, kAction71277948); - setup_function28(); + setup_goSalon(); break; } break; @@ -1106,14 +1106,14 @@ IMPLEMENT_FUNCTION(27, Anna, function27) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(28, Anna, function28) +IMPLEMENT_FUNCTION(28, Anna, goSalon) switch (savepoint.action) { default: break; case kActionDefault: setCallback(1); - setup_function17(kCarRestaurant, kPosition_850); + setup_doWalkP1(kCarRestaurant, kPosition_850); break; case kActionCallback: @@ -1137,7 +1137,7 @@ IMPLEMENT_FUNCTION(28, Anna, function28) case 3: getData()->location = kLocationInsideCompartment; - setup_function29(); + setup_waitAugust(); break; } break; @@ -1145,7 +1145,7 @@ IMPLEMENT_FUNCTION(28, Anna, function28) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(29, Anna, function29) +IMPLEMENT_FUNCTION(29, Anna, waitAugust) switch (savepoint.action) { default: break; @@ -1268,7 +1268,7 @@ IMPLEMENT_FUNCTION(30, Anna, function30) if (getState()->time > kTime1192500) { params->param4 = kTimeInvalid; - setup_function30(); + setup_leaveAugust(); break; } @@ -1277,7 +1277,7 @@ IMPLEMENT_FUNCTION(30, Anna, function30) if (params->param4 < getState()->time) { params->param4 = kTimeInvalid; - setup_function30(); + setup_leaveAugust(); break; } } @@ -1308,7 +1308,7 @@ IMPLEMENT_FUNCTION(30, Anna, function30) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(31, Anna, function31) +IMPLEMENT_FUNCTION(31, Anna, leaveAugust) switch (savepoint.action) { default: break; @@ -1343,7 +1343,7 @@ IMPLEMENT_FUNCTION(31, Anna, function31) getInventory()->setLocationAndProcess(kItem3, kObjectLocation1); getSavePoints()->push(kEntityAnna, kEntityAugust, kAction159332865); - setup_function32(); + setup_returnCompartment(); break; } break; @@ -1351,14 +1351,14 @@ IMPLEMENT_FUNCTION(31, Anna, function31) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(32, Anna, function32) +IMPLEMENT_FUNCTION(32, Anna, returnCompartment) switch (savepoint.action) { default: break; case kActionDefault: setCallback(1); - setup_function17(kCarRedSleeping, kPosition_4070); + setup_doWalkP1(kCarRedSleeping, kPosition_4070); break; case kActionCallback: @@ -1377,7 +1377,7 @@ IMPLEMENT_FUNCTION(32, Anna, function32) getData()->entityPosition = kPosition_4070; getData()->location = kLocationInsideCompartment; - setup_function33(); + setup_readyForBed(); break; } break; @@ -1385,7 +1385,7 @@ IMPLEMENT_FUNCTION(32, Anna, function32) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(33, Anna, function33) +IMPLEMENT_FUNCTION(33, Anna, readyForBed) switch (savepoint.action) { default: break; @@ -1395,20 +1395,20 @@ IMPLEMENT_FUNCTION(33, Anna, function33) params->param1 = (uint)(getState()->time + 4500); setCallback(1); - setup_function15((TimeValue)params->param1, "NONE"); + setup_compartmentLogic((TimeValue)params->param1, "NONE"); break; case kActionCallback: if (getCallback() == 1) { - getObjects()->updateLocation2(kObjectCompartmentF, kObjectLocation1); - setup_function34(); + getObjects()->updateModel(kObjectCompartmentF, kObjectModel1); + setup_asleep(); } break; } IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(34, Anna, function34) +IMPLEMENT_FUNCTION(34, Anna, asleep) switch (savepoint.action) { default: break; @@ -1423,7 +1423,7 @@ IMPLEMENT_FUNCTION(34, Anna, function34) } label_callback_1: - Entity::timeCheck(kTime1489500, params->param3, WRAP_SETUP_FUNCTION(Anna, setup_function35)); + Entity::timeCheck(kTime1489500, params->param3, WRAP_SETUP_FUNCTION(Anna, setup_wakeNight)); break; case kActionKnock: @@ -1480,7 +1480,7 @@ label_callback_1: IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(35, Anna, function35) +IMPLEMENT_FUNCTION(35, Anna, wakeNight) switch (savepoint.action) { default: break; @@ -1561,11 +1561,11 @@ IMPLEMENT_FUNCTION(35, Anna, function35) getSavePoints()->push(kEntityAnna, kEntityCoudert, kAction339669520); getSavePoints()->push(kEntityAnna, kEntityMax, kAction71277948); - setup_function36(); + setup_goVassili(); break; case 2: - setup_function36(); + setup_goVassili(); break; } break; @@ -1585,7 +1585,7 @@ IMPLEMENT_FUNCTION(35, Anna, function35) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(36, Anna, function36) +IMPLEMENT_FUNCTION(36, Anna, goVassili) switch (savepoint.action) { default: break; @@ -1634,13 +1634,13 @@ IMPLEMENT_FUNCTION(37, Anna, function37) break; case kAction191477936: - setup_function38(); + setup_speakTatiana(); break; } IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(38, Anna, function38) +IMPLEMENT_FUNCTION(38, Anna, speakTatiana) switch (savepoint.action) { default: break; @@ -1655,14 +1655,14 @@ IMPLEMENT_FUNCTION(38, Anna, function38) case kActionCallback: if (getCallback() == 1) { getSound()->playSound(kEntityPlayer, "MUS043"); - setup_function40(); + setup_leaveTatiana(); } break; } IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION_II(39, Anna, function39, CarIndex, EntityPosition) +IMPLEMENT_FUNCTION_II(39, Anna, doWalk1019, CarIndex, EntityPosition) switch (savepoint.action) { default: break; @@ -1708,7 +1708,7 @@ IMPLEMENT_FUNCTION_II(39, Anna, function39, CarIndex, EntityPosition) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(40, Anna, function40) +IMPLEMENT_FUNCTION(40, Anna, leaveTatiana) switch (savepoint.action) { default: break; @@ -1727,7 +1727,7 @@ IMPLEMENT_FUNCTION(40, Anna, function40) getData()->location = kLocationOutsideCompartment; setCallback(2); - setup_function39(kCarRedSleeping, kPosition_4070); + setup_doWalk1019(kCarRedSleeping, kPosition_4070); break; case 2: @@ -1752,7 +1752,7 @@ IMPLEMENT_FUNCTION(40, Anna, function40) getData()->location = kLocationOutsideCompartment; setCallback(6); - setup_function39(kCarRedSleeping, kPosition_7500); + setup_doWalk1019(kCarRedSleeping, kPosition_7500); break; case 6: @@ -1777,7 +1777,7 @@ IMPLEMENT_FUNCTION(40, Anna, function40) getData()->location = kLocationOutsideCompartment; setCallback(10); - setup_function39(kCarRedSleeping, kPosition_4070); + setup_doWalk1019(kCarRedSleeping, kPosition_4070); break; case 10: @@ -1790,7 +1790,7 @@ IMPLEMENT_FUNCTION(40, Anna, function40) getData()->location = kLocationInsideCompartment; getData()->entityPosition = kPosition_4070; - setup_function41(); + setup_goBackToSleep(); break; } break; @@ -1798,7 +1798,7 @@ IMPLEMENT_FUNCTION(40, Anna, function40) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(41, Anna, function41) +IMPLEMENT_FUNCTION(41, Anna, goBackToSleep) switch (savepoint.action) { default: break; @@ -1875,7 +1875,7 @@ IMPLEMENT_FUNCTION(42, Anna, chapter2) break; case kActionNone: - setup_chapter2Handler(); + setup_inPart2(); break; case kActionDefault: @@ -1892,7 +1892,7 @@ IMPLEMENT_FUNCTION(42, Anna, chapter2) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(43, Anna, chapter2Handler) +IMPLEMENT_FUNCTION(43, Anna, inPart2) switch (savepoint.action) { default: break; @@ -1901,7 +1901,7 @@ IMPLEMENT_FUNCTION(43, Anna, chapter2Handler) getObjects()->update(kObjectOutsideAnnaCompartment, kEntityPlayer, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue); setCallback(1); - setup_function12(); + setup_practiceMusic(); break; case kActionCallback: @@ -1911,27 +1911,27 @@ IMPLEMENT_FUNCTION(43, Anna, chapter2Handler) case 1: setCallback(2); - setup_function15(kTime1786500, "418C"); + setup_compartmentLogic(kTime1786500, "418C"); break; case 2: setCallback(3); - setup_function12(); + setup_practiceMusic(); break; case 3: setCallback(4); - setup_function15(kTime1818000, "418C"); + setup_compartmentLogic(kTime1818000, "418C"); break; case 4: setCallback(5); - setup_function12(); + setup_practiceMusic(); break; case 5: setCallback(6); - setup_function15(kTimeEnd, "418C"); + setup_compartmentLogic(kTimeEnd, "418C"); break; } break; @@ -1945,7 +1945,7 @@ IMPLEMENT_FUNCTION(44, Anna, chapter3) break; case kActionNone: - setup_chapter3Handler(); + setup_practicing(); break; case kActionDefault: @@ -1965,7 +1965,7 @@ IMPLEMENT_FUNCTION(44, Anna, chapter3) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION_I(45, Anna, function45, bool) +IMPLEMENT_FUNCTION_I(45, Anna, exitCompartment, bool) switch (savepoint.action) { default: break; @@ -2004,7 +2004,7 @@ IMPLEMENT_FUNCTION_I(45, Anna, function45, bool) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(46, Anna, chapter3Handler) +IMPLEMENT_FUNCTION(46, Anna, practicing) switch (savepoint.action) { default: break; @@ -2014,16 +2014,16 @@ IMPLEMENT_FUNCTION(46, Anna, chapter3Handler) getScenes()->loadSceneFromPosition(kCarRedSleeping, 49); setCallback(1); - setup_function12(); + setup_practiceMusic(); break; case kActionCallback: if (getCallback() == 1 || getCallback() == 2) { if (ENTITY_PARAM(0, 1)) { - setup_function47(); + setup_goLunch(); } else { setCallback(2); - setup_function15((TimeValue)(getState()->time + 4500), "418C"); + setup_compartmentLogic((TimeValue) (getState()->time + 4500), "418C"); } } break; @@ -2031,7 +2031,7 @@ IMPLEMENT_FUNCTION(46, Anna, chapter3Handler) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(47, Anna, function47) +IMPLEMENT_FUNCTION(47, Anna, goLunch) switch (savepoint.action) { default: break; @@ -2080,7 +2080,7 @@ IMPLEMENT_FUNCTION(47, Anna, function47) case 5: getEntities()->drawSequenceLeft(kEntityAugust, "BLANK"); - setup_function48(); + setup_lunch(); break; } break; @@ -2088,7 +2088,7 @@ IMPLEMENT_FUNCTION(47, Anna, function47) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(48, Anna, function48) +IMPLEMENT_FUNCTION(48, Anna, lunch) switch (savepoint.action) { default: break; @@ -2121,7 +2121,7 @@ label_callback_4: params->param4 = kTimeInvalid; - setup_function50(); + setup_leaveLunch(); } } break; @@ -2213,7 +2213,7 @@ IMPLEMENT_FUNCTION(49, Anna, leaveTableWithAugust) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(50, Anna, function50) +IMPLEMENT_FUNCTION(50, Anna, leaveLunch) switch (savepoint.action) { default: break; @@ -2240,7 +2240,7 @@ IMPLEMENT_FUNCTION(50, Anna, function50) break; case 3: - setup_function51(); + setup_afterLunch(); break; } break; @@ -2248,7 +2248,7 @@ IMPLEMENT_FUNCTION(50, Anna, function50) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(51, Anna, function51) +IMPLEMENT_FUNCTION(51, Anna, afterLunch) switch (savepoint.action) { default: break; @@ -2291,7 +2291,7 @@ IMPLEMENT_FUNCTION(51, Anna, function51) case 2: getSavePoints()->push(kEntityAnna, kEntityAugust, kAction122288808); - setup_function52(); + setup_returnCompartment3(); break; case 3: @@ -2348,7 +2348,7 @@ IMPLEMENT_FUNCTION(51, Anna, function51) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(52, Anna, function52) +IMPLEMENT_FUNCTION(52, Anna, returnCompartment3) switch (savepoint.action) { default: break; @@ -2360,7 +2360,7 @@ IMPLEMENT_FUNCTION(52, Anna, function52) getEntities()->clearSequences(kEntityAnna); - setup_function53(); + setup_dressing(); break; case kActionDefault: @@ -2385,7 +2385,7 @@ IMPLEMENT_FUNCTION(52, Anna, function52) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(53, Anna, function53) +IMPLEMENT_FUNCTION(53, Anna, dressing) switch (savepoint.action) { default: break; @@ -2393,7 +2393,7 @@ IMPLEMENT_FUNCTION(53, Anna, function53) case kActionNone: if (getProgress().field_48 && params->param5 != kTimeInvalid) { if (Entity::updateParameterTime(kTime2065500, !getEntities()->isPlayerInCar(kCarRedSleeping), params->param5, 150)) { - setup_function54(); + setup_giveMaxToConductor2(); break; } } @@ -2537,14 +2537,14 @@ IMPLEMENT_FUNCTION(53, Anna, function53) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(54, Anna, function54) +IMPLEMENT_FUNCTION(54, Anna, giveMaxToConductor2) switch (savepoint.action) { default: break; case kActionNone: if (params->param3) { - if (Entity::timeCheck(kTime2079000, params->param5, WRAP_SETUP_FUNCTION(Anna, setup_function55))) + if (Entity::timeCheck(kTime2079000, params->param5, WRAP_SETUP_FUNCTION(Anna, setup_goConcert))) break; if (Entity::updateParameter(params->param6, getState()->time, 9000)) { @@ -2702,7 +2702,7 @@ IMPLEMENT_FUNCTION(54, Anna, function54) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(55, Anna, function55) +IMPLEMENT_FUNCTION(55, Anna, goConcert) switch (savepoint.action) { default: break; @@ -2718,7 +2718,7 @@ IMPLEMENT_FUNCTION(55, Anna, function55) getInventory()->setLocationAndProcess(kItemKey, kObjectLocation1); setCallback(1); - setup_function45(true); + setup_exitCompartment(true); break; case kActionCallback: @@ -2733,7 +2733,7 @@ IMPLEMENT_FUNCTION(55, Anna, function55) break; case 2: - setup_function56(); + setup_concert(); break; } break; @@ -2741,7 +2741,7 @@ IMPLEMENT_FUNCTION(55, Anna, function55) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(56, Anna, function56) +IMPLEMENT_FUNCTION(56, Anna, concert) switch (savepoint.action) { default: break; @@ -2754,13 +2754,13 @@ IMPLEMENT_FUNCTION(56, Anna, function56) break; case kAction191668032: - setup_function57(); + setup_leaveConcert(); break; } IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(57, Anna, function57) +IMPLEMENT_FUNCTION(57, Anna, leaveConcert) switch (savepoint.action) { default: break; @@ -2820,7 +2820,7 @@ IMPLEMENT_FUNCTION(57, Anna, function57) getEntities()->exitCompartment(kEntityAnna, kObjectCompartmentF, true); getSavePoints()->push(kEntityAnna, kEntityAugust, kAction122288808); - setup_function59(); + setup_afterConcert(); break; } break; @@ -2841,7 +2841,7 @@ IMPLEMENT_FUNCTION(57, Anna, function57) if (getEntities()->isInsideCompartment(kEntityPlayer, kCarRedSleeping, kPosition_4070) || getEntities()->isInsideCompartment(kEntityPlayer, kCarRedSleeping, kPosition_4455)) { getEntities()->exitCompartment(kEntityAnna, kObjectCompartmentF, true); - setup_function58(); + setup_leaveConcertCathInCompartment(); } else { setCallback(3); setup_enterExitCompartment("625Ff", kObjectCompartmentF); @@ -2851,7 +2851,7 @@ IMPLEMENT_FUNCTION(57, Anna, function57) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(58, Anna, function58) +IMPLEMENT_FUNCTION(58, Anna, leaveConcertCathInCompartment) switch (savepoint.action) { default: break; @@ -2868,14 +2868,14 @@ IMPLEMENT_FUNCTION(58, Anna, function58) getScenes()->loadSceneFromPosition(kCarRedSleeping, 8); getSound()->playSound(kEntityAnna, "lib015"); getSavePoints()->push(kEntityAnna, kEntityAugust, kAction122288808); - setup_function59(); + setup_afterConcert(); } break; } IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(59, Anna, function59) +IMPLEMENT_FUNCTION(59, Anna, afterConcert) switch (savepoint.action) { default: break; @@ -2884,7 +2884,7 @@ IMPLEMENT_FUNCTION(59, Anna, function59) if (getInventory()->hasItem(kItemKey) && params->param4 != kTimeInvalid && getState()->time > kTime2218500) { if (getState()->time > kTime2248200) { params->param4 = kTimeInvalid; - setup_function61(); + setup_goBaggageCompartment(); break; } @@ -2897,7 +2897,7 @@ IMPLEMENT_FUNCTION(59, Anna, function59) if (params->param4 < getState()->time) { params->param4 = kTimeInvalid; - setup_function61(); + setup_goBaggageCompartment(); break; } } @@ -2996,7 +2996,7 @@ IMPLEMENT_FUNCTION(59, Anna, function59) case kAction156622016: if (params->param3) { setCallback(8); - setup_function60(); + setup_giveMaxBack(); } break; @@ -3017,7 +3017,7 @@ IMPLEMENT_FUNCTION(59, Anna, function59) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(60, Anna, function60) +IMPLEMENT_FUNCTION(60, Anna, giveMaxBack) switch (savepoint.action) { default: break; @@ -3063,7 +3063,7 @@ IMPLEMENT_FUNCTION(60, Anna, function60) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(61, Anna, function61) +IMPLEMENT_FUNCTION(61, Anna, goBaggageCompartment) switch (savepoint.action) { default: break; @@ -3084,7 +3084,7 @@ IMPLEMENT_FUNCTION(61, Anna, function61) getObjects()->update(kObject53, kEntityPlayer, kObjectLocation1, kCursorHandKnock, kCursorHand); setCallback(2); - setup_function45(false); + setup_exitCompartment(false); break; case 2: @@ -3135,7 +3135,7 @@ IMPLEMENT_FUNCTION(62, Anna, function62) if (getState()->time > kTime2259000 && !params->param2) { params->param2 = 1; getSavePoints()->push(kEntityAnna, kEntityVesna, kAction189299008); - setup_function63(); + setup_deadBaggageCompartment(); } break; @@ -3151,7 +3151,7 @@ IMPLEMENT_FUNCTION(62, Anna, function62) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(63, Anna, function63) +IMPLEMENT_FUNCTION(63, Anna, deadBaggageCompartment) switch (savepoint.action) { default: break; @@ -3180,7 +3180,7 @@ IMPLEMENT_FUNCTION(63, Anna, function63) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(64, Anna, baggage) +IMPLEMENT_FUNCTION(64, Anna, baggageFight) switch (savepoint.action) { default: break; @@ -3224,7 +3224,7 @@ IMPLEMENT_FUNCTION(64, Anna, baggage) getProgress().field_54 = 0; getState()->time = kTime2266200; - setup_function65(); + setup_prepareVienna(); break; } break; @@ -3232,7 +3232,7 @@ IMPLEMENT_FUNCTION(64, Anna, baggage) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(65, Anna, function65) +IMPLEMENT_FUNCTION(65, Anna, prepareVienna) if (savepoint.action == kActionDefault) { getData()->entityPosition = kPosition_4070; getData()->location = kLocationInsideCompartment; @@ -3243,7 +3243,7 @@ IMPLEMENT_FUNCTION(65, Anna, function65) getObjects()->update(kObjectOutsideAnnaCompartment, kEntityPlayer, kObjectLocation1, kCursorKeepValue, kCursorKeepValue); setCallback(1); - setup_function15(kTimeEnd, "NONE"); + setup_compartmentLogic(kTimeEnd, "NONE"); } IMPLEMENT_FUNCTION_END @@ -3254,7 +3254,7 @@ IMPLEMENT_FUNCTION(66, Anna, chapter4) break; case kActionNone: - setup_chapter4Handler(); + setup_reading(); break; case kActionDefault: @@ -3271,7 +3271,7 @@ IMPLEMENT_FUNCTION(66, Anna, chapter4) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(67, Anna, chapter4Handler) +IMPLEMENT_FUNCTION(67, Anna, reading) switch (savepoint.action) { default: break; @@ -3344,7 +3344,7 @@ label_next: getSound()->playSound(kEntityPlayer, "LIB015"); getScenes()->loadSceneFromPosition(kCarRedSleeping, 8); - setup_function68(); + setup_sulking(); break; case 2: @@ -3369,7 +3369,7 @@ label_next: getObjects()->update(kObjectCompartmentF, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand); getData()->inventoryItem = kItemNone; - setup_function69(); + setup_goSalon4(); break; case kAction219971920: @@ -3379,7 +3379,7 @@ label_next: IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(68, Anna, function68) +IMPLEMENT_FUNCTION(68, Anna, sulking) switch (savepoint.action) { default: break; @@ -3387,7 +3387,7 @@ IMPLEMENT_FUNCTION(68, Anna, function68) case kActionNone: if (!params->param1) { setCallback(1); - setup_function15(kTime2511900, "NONE"); + setup_compartmentLogic(kTime2511900, "NONE"); } break; @@ -3402,7 +3402,7 @@ IMPLEMENT_FUNCTION(68, Anna, function68) case kAction191001984: getObjects()->update(kObjectCompartmentF, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand); - setup_function69(); + setup_goSalon4(); break; case kAction201431954: @@ -3412,7 +3412,7 @@ IMPLEMENT_FUNCTION(68, Anna, function68) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(69, Anna, function69) +IMPLEMENT_FUNCTION(69, Anna, goSalon4) switch (savepoint.action) { default: break; @@ -3426,7 +3426,7 @@ IMPLEMENT_FUNCTION(69, Anna, function69) getData()->entityPosition = kPosition_9270; getData()->location = kLocationOutsideCompartment; - setup_function70(); + setup_returnCompartment4(); break; } @@ -3448,7 +3448,7 @@ IMPLEMENT_FUNCTION(69, Anna, function69) getData()->entityPosition = kPosition_8200; getData()->location = kLocationOutsideCompartment; - setup_function70(); + setup_returnCompartment4(); } break; @@ -3484,7 +3484,7 @@ IMPLEMENT_FUNCTION(69, Anna, function69) break; case 5: - setup_function70(); + setup_returnCompartment4(); break; } break; @@ -3506,14 +3506,14 @@ IMPLEMENT_FUNCTION(69, Anna, function69) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(70, Anna, function70) +IMPLEMENT_FUNCTION(70, Anna, returnCompartment4) switch (savepoint.action) { default: break; case kActionDefault: setCallback(1); - setup_function72(kCarRedSleeping, kPosition_4070); + setup_doWalkCathFollowsAnna(kCarRedSleeping, kPosition_4070); break; case kActionCallback: @@ -3523,13 +3523,13 @@ IMPLEMENT_FUNCTION(70, Anna, function70) case 1: setCallback(2); - setup_function71(); + setup_enterCompartmentCathFollowsAnna(); break; case 2: getData()->location = kLocationOutsideCompartment; getEntities()->clearSequences(kEntityAnna); - setup_function73(); + setup_letDownHair(); break; } break; @@ -3537,7 +3537,7 @@ IMPLEMENT_FUNCTION(70, Anna, function70) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(71, Anna, function71) +IMPLEMENT_FUNCTION(71, Anna, enterCompartmentCathFollowsAnna) switch (savepoint.action) { default: break; @@ -3589,7 +3589,7 @@ IMPLEMENT_FUNCTION(71, Anna, function71) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION_II(72, Anna, function72, CarIndex, EntityPosition) +IMPLEMENT_FUNCTION_II(72, Anna, doWalkCathFollowsAnna, CarIndex, EntityPosition) switch (savepoint.action) { default: break; @@ -3631,7 +3631,7 @@ IMPLEMENT_FUNCTION_II(72, Anna, function72, CarIndex, EntityPosition) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(73, Anna, function73) +IMPLEMENT_FUNCTION(73, Anna, letDownHair) switch (savepoint.action) { default: break; @@ -3712,7 +3712,7 @@ IMPLEMENT_FUNCTION(74, Anna, chapter5) break; case kActionNone: - setup_chapter5Handler(); + setup_tiedUp(); break; case kActionDefault: @@ -3731,7 +3731,7 @@ IMPLEMENT_FUNCTION(74, Anna, chapter5) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(75, Anna, chapter5Handler) +IMPLEMENT_FUNCTION(75, Anna, tiedUp) switch (savepoint.action) { default: break; @@ -3758,11 +3758,11 @@ IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// IMPLEMENT_FUNCTION(76, Anna, function76) if (savepoint.action == kAction158480160) - setup_function77(); + setup_readyToScore(); IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(77, Anna, function77) +IMPLEMENT_FUNCTION(77, Anna, readyToScore) switch (savepoint.action) { default: break; @@ -3818,7 +3818,7 @@ IMPLEMENT_FUNCTION(77, Anna, function77) break; case 3: - setup_function78(); + setup_kidnapped(); break; } break; @@ -3826,14 +3826,14 @@ IMPLEMENT_FUNCTION(77, Anna, function77) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(78, Anna, function78) +IMPLEMENT_FUNCTION(78, Anna, kidnapped) switch (savepoint.action) { default: break; case kActionDrawScene: if ((getEntities()->isInRestaurant(kEntityPlayer) || getEntities()->isInSalon(kEntityPlayer)) && getInventory()->hasItem(kItemFirebird)) { - setup_function80(); + setup_finalSequence(); break; } @@ -3857,7 +3857,7 @@ IMPLEMENT_FUNCTION(78, Anna, function78) getAction()->playAnimation(kEventKronosHostageAnna); getScenes()->loadSceneFromPosition(kCarRestaurant, 61); getSound()->playSound(kEntityAnna, "Mus024", kFlagDefault); - setup_function79(); + setup_waiting(); break; } break; @@ -3865,7 +3865,7 @@ IMPLEMENT_FUNCTION(78, Anna, function78) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(79, Anna, function79) +IMPLEMENT_FUNCTION(79, Anna, waiting) switch (savepoint.action) { default: break; @@ -3878,7 +3878,7 @@ IMPLEMENT_FUNCTION(79, Anna, function79) case kActionDrawScene: if (getEntities()->isInRestaurant(kEntityPlayer) && getInventory()->hasItem(kItemFirebird)) { - setup_function80(); + setup_finalSequence(); break; } @@ -3918,7 +3918,7 @@ IMPLEMENT_FUNCTION(79, Anna, function79) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(80, Anna, function80) +IMPLEMENT_FUNCTION(80, Anna, finalSequence) switch (savepoint.action) { default: break; @@ -3973,7 +3973,7 @@ IMPLEMENT_FUNCTION(80, Anna, function80) getAction()->playAnimation(kEventKronosOpenFirebird); getScenes()->loadSceneFromPosition(kCarRestaurant, 3); - setup_finalSequence(); + setup_openFirebird(); break; } break; @@ -3988,7 +3988,7 @@ IMPLEMENT_FUNCTION(80, Anna, function80) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(81, Anna, finalSequence) +IMPLEMENT_FUNCTION(81, Anna, openFirebird) switch (savepoint.action) { default: break; diff --git a/engines/lastexpress/entities/anna.h b/engines/lastexpress/entities/anna.h index 205ff9d42c..de79ccb826 100644 --- a/engines/lastexpress/entities/anna.h +++ b/engines/lastexpress/entities/anna.h @@ -113,7 +113,7 @@ public: */ DECLARE_FUNCTION_1(updateFromTime, uint32 time) - DECLARE_FUNCTION(function12) + DECLARE_FUNCTION(practiceMusic) /** * Draws the entity along with another one @@ -131,43 +131,43 @@ public: */ DECLARE_FUNCTION_1(updateFromTicks, uint32 ticks) - DECLARE_FUNCTION_2(function15, TimeValue timeValue, const char *sequence) + DECLARE_FUNCTION_2(compartmentLogic, TimeValue timeValue, const char *sequence) /** * Setup Chapter 1 */ DECLARE_FUNCTION(chapter1) - DECLARE_FUNCTION_2(function17, uint32, uint32) + DECLARE_FUNCTION_2(doWalkP1, uint32, uint32) - DECLARE_FUNCTION_1(function18, TimeValue timeValue) + DECLARE_FUNCTION_1(diningLogic, TimeValue timeValue) /** * Handle Chapter 1 events */ - DECLARE_FUNCTION(chapter1Handler) - DECLARE_FUNCTION(function20) - DECLARE_FUNCTION(function21) + DECLARE_FUNCTION(fleeTyler) + DECLARE_FUNCTION(waitDinner) + DECLARE_FUNCTION(goDinner) DECLARE_FUNCTION(function22) - DECLARE_FUNCTION(function23) - DECLARE_FUNCTION(function24) - DECLARE_FUNCTION(function25) - DECLARE_FUNCTION(function26) - DECLARE_FUNCTION(function27) - DECLARE_FUNCTION(function28) - DECLARE_FUNCTION(function29) + DECLARE_FUNCTION(waitingDinner) + DECLARE_FUNCTION(waitingDinner2) + DECLARE_FUNCTION(eatingDinner) + DECLARE_FUNCTION(leaveDinner) + DECLARE_FUNCTION(freshenUp) + DECLARE_FUNCTION(goSalon) + DECLARE_FUNCTION(waitAugust) DECLARE_FUNCTION(function30) - DECLARE_FUNCTION(function31) - DECLARE_FUNCTION(function32) - DECLARE_FUNCTION(function33) - DECLARE_FUNCTION(function34) - DECLARE_FUNCTION(function35) - DECLARE_FUNCTION(function36) + DECLARE_FUNCTION(leaveAugust) + DECLARE_FUNCTION(returnCompartment) + DECLARE_FUNCTION(readyForBed) + DECLARE_FUNCTION(asleep) + DECLARE_FUNCTION(wakeNight) + DECLARE_FUNCTION(goVassili) DECLARE_FUNCTION(function37) - DECLARE_FUNCTION(function38) - DECLARE_FUNCTION_2(function39, CarIndex car, EntityPosition entityPosition) - DECLARE_FUNCTION(function40) - DECLARE_FUNCTION(function41) + DECLARE_FUNCTION(speakTatiana) + DECLARE_FUNCTION_2(doWalk1019, CarIndex car, EntityPosition entityPosition) + DECLARE_FUNCTION(leaveTatiana) + DECLARE_FUNCTION(goBackToSleep) /** * Setup Chapter 2 @@ -177,37 +177,37 @@ public: /** * Handle Chapter 2 events */ - DECLARE_FUNCTION(chapter2Handler) + DECLARE_FUNCTION(inPart2) /** * Setup Chapter 3 */ DECLARE_FUNCTION(chapter3) - DECLARE_FUNCTION_1(function45, bool useAction1) /** * Handle Chapter 3 events */ - DECLARE_FUNCTION(chapter3Handler) - DECLARE_FUNCTION(function47) - DECLARE_FUNCTION(function48) + DECLARE_FUNCTION_1(exitCompartment, bool useAction1) + DECLARE_FUNCTION(practicing) + DECLARE_FUNCTION(goLunch) + DECLARE_FUNCTION(lunch) DECLARE_FUNCTION(leaveTableWithAugust) - DECLARE_FUNCTION(function50) - DECLARE_FUNCTION(function51) - DECLARE_FUNCTION(function52) - DECLARE_FUNCTION(function53) - DECLARE_FUNCTION(function54) - DECLARE_FUNCTION(function55) - DECLARE_FUNCTION(function56) - DECLARE_FUNCTION(function57) - DECLARE_FUNCTION(function58) - DECLARE_FUNCTION(function59) - DECLARE_FUNCTION(function60) - DECLARE_FUNCTION(function61) + DECLARE_FUNCTION(leaveLunch) + DECLARE_FUNCTION(afterLunch) + DECLARE_FUNCTION(returnCompartment3) + DECLARE_FUNCTION(dressing) + DECLARE_FUNCTION(giveMaxToConductor2) + DECLARE_FUNCTION(goConcert) + DECLARE_FUNCTION(concert) + DECLARE_FUNCTION(leaveConcert) + DECLARE_FUNCTION(leaveConcertCathInCompartment) + DECLARE_FUNCTION(afterConcert) + DECLARE_FUNCTION(giveMaxBack) + DECLARE_FUNCTION(goBaggageCompartment) DECLARE_FUNCTION(function62) - DECLARE_FUNCTION(function63) - DECLARE_FUNCTION(baggage) - DECLARE_FUNCTION(function65) + DECLARE_FUNCTION(deadBaggageCompartment) + DECLARE_FUNCTION(baggageFight) + DECLARE_FUNCTION(prepareVienna) /** * Setup Chapter 4 @@ -217,14 +217,13 @@ public: /** * Handle Chapter 4 events */ - DECLARE_FUNCTION(chapter4Handler) - - DECLARE_FUNCTION(function68) - DECLARE_FUNCTION(function69) - DECLARE_FUNCTION(function70) - DECLARE_FUNCTION(function71) - DECLARE_FUNCTION_2(function72, CarIndex car, EntityPosition entityPosition) - DECLARE_FUNCTION(function73) + DECLARE_FUNCTION(reading) + DECLARE_FUNCTION(sulking) + DECLARE_FUNCTION(goSalon4) + DECLARE_FUNCTION(returnCompartment4) + DECLARE_FUNCTION(enterCompartmentCathFollowsAnna) + DECLARE_FUNCTION_2(doWalkCathFollowsAnna, CarIndex car, EntityPosition entityPosition) + DECLARE_FUNCTION(letDownHair) /** * Setup Chapter 5 @@ -234,13 +233,13 @@ public: /** * Handle Chapter 5 events */ - DECLARE_FUNCTION(chapter5Handler) + DECLARE_FUNCTION(tiedUp) DECLARE_FUNCTION(function76) - DECLARE_FUNCTION(function77) - DECLARE_FUNCTION(function78) - DECLARE_FUNCTION(function79) - DECLARE_FUNCTION(function80) + DECLARE_FUNCTION(readyToScore) + DECLARE_FUNCTION(kidnapped) + DECLARE_FUNCTION(waiting) DECLARE_FUNCTION(finalSequence) + DECLARE_FUNCTION(openFirebird) }; } // End of namespace LastExpress diff --git a/engines/lastexpress/entities/august.cpp b/engines/lastexpress/entities/august.cpp index b0bc0732d4..11f72ecfe8 100644 --- a/engines/lastexpress/entities/august.cpp +++ b/engines/lastexpress/entities/august.cpp @@ -640,7 +640,7 @@ label_continue: break; case 6: - getAction()->playAnimation(getObjects()->get(kObjectCompartment3).location2 == kObjectLocation1 ? kEventMeetAugustHisCompartmentBed : kEventMeetAugustHisCompartment); + getAction()->playAnimation(getObjects()->get(kObjectCompartment3).model == kObjectModel1 ? kEventMeetAugustHisCompartmentBed : kEventMeetAugustHisCompartment); getProgress().eventMetAugust = true; getObjects()->update(kObjectCompartment3, kEntityAugust, kObjectLocation1, kCursorNormal, kCursorNormal); @@ -840,11 +840,11 @@ label_callback_9: if (CURRENT_PARAM(1, 1) >= getState()->timeTicks) break; - if (getObjects()->get(kObjectCompartment1).location == kObjectLocation1) { + if (getObjects()->get(kObjectCompartment1).status == kObjectLocation1) { if (!Entity::updateParameter(CURRENT_PARAM(1, 2), getState()->timeTicks, 75)) break; - getObjects()->update(kObjectCompartment1, kEntityAugust, getObjects()->get(kObjectCompartment1).location, kCursorNormal, kCursorNormal); + getObjects()->update(kObjectCompartment1, kEntityAugust, getObjects()->get(kObjectCompartment1).status, kCursorNormal, kCursorNormal); params->param6++; @@ -866,7 +866,7 @@ label_callback_9: params->param8++; if (params->param8 >= 3) { - getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).location, kCursorHandKnock, kCursorHand); + getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).status, kCursorHandKnock, kCursorHand); callbackAction(); break; } @@ -874,12 +874,12 @@ label_callback_9: params->param6 = 0; } - getObjects()->update(kObjectCompartment1, kEntityAugust, getObjects()->get(kObjectCompartment1).location, params->param4 ? kCursorNormal : kCursorTalk, kCursorHand); + getObjects()->update(kObjectCompartment1, kEntityAugust, getObjects()->get(kObjectCompartment1).status, params->param4 ? kCursorNormal : kCursorTalk, kCursorHand); CURRENT_PARAM(1, 2) = 0; } else { if (getProgress().eventCorpseMovedFromFloor && getProgress().jacket != kJacketBlood) { - params->param7 = (getObjects()->get(kObjectCompartment1).location2 == kObjectLocation1) ? 8 : 7; + params->param7 = (getObjects()->get(kObjectCompartment1).model == kObjectModel1) ? 8 : 7; getObjects()->update(kObjectOutsideTylerCompartment, kEntityPlayer, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue); setCallback(4); @@ -900,7 +900,7 @@ label_callback_9: setCallback(15); setup_playSound("LIB012"); } else if (!params->param4) { - getObjects()->update(kObjectCompartment1, kEntityAugust, getObjects()->get(kObjectCompartment1).location, kCursorNormal, kCursorNormal); + getObjects()->update(kObjectCompartment1, kEntityAugust, getObjects()->get(kObjectCompartment1).status, kCursorNormal, kCursorNormal); setCallback(17); setup_playSound("AUG1002A"); @@ -912,9 +912,9 @@ label_callback_9: if (params->param3) { getData()->location = kLocationInsideCompartment; - params->param7 = (getObjects()->get(kObjectCompartment1).location2 == kObjectLocation1) ? kEventMeetAugustHisCompartmentBed : kEventMeetAugustHisCompartment; + params->param7 = (getObjects()->get(kObjectCompartment1).model == kObjectModel1) ? kEventMeetAugustHisCompartmentBed : kEventMeetAugustHisCompartment; } else { - params->param7 = (getObjects()->get(kObjectCompartment1).location2 == kObjectLocation1) ? kEventMeetAugustTylerCompartmentBed : kEventMeetAugustTylerCompartment; + params->param7 = (getObjects()->get(kObjectCompartment1).model == kObjectModel1) ? kEventMeetAugustTylerCompartmentBed : kEventMeetAugustTylerCompartment; } setCallback(14); @@ -931,14 +931,14 @@ label_callback_9: if (getEntities()->isInsideCompartment(kEntityPlayer, kCarGreenSleeping, kPosition_8200) || getEntities()->isInsideCompartment(kEntityPlayer, kCarGreenSleeping, kPosition_7850) || getEntities()->isOutsideAlexeiWindow()) { - getObjects()->update(kObjectCompartment1, kEntityAugust, getObjects()->get(kObjectCompartment1).location, kCursorNormal, kCursorNormal); + getObjects()->update(kObjectCompartment1, kEntityAugust, getObjects()->get(kObjectCompartment1).status, kCursorNormal, kCursorNormal); if (getEntities()->isOutsideAlexeiWindow()) getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49); getSound()->playSound(kEntityPlayer, "LIB012"); - getObjects()->update(kObjectCompartment1, kEntityAugust, getObjects()->get(kObjectCompartment1).location, kCursorTalk, kCursorHand); + getObjects()->update(kObjectCompartment1, kEntityAugust, getObjects()->get(kObjectCompartment1).status, kCursorTalk, kCursorHand); params->param2 = 1; } else { @@ -996,7 +996,7 @@ label_callback_9: case 6: case 7: - getObjects()->update(kObjectCompartment1, kEntityAugust, getObjects()->get(kObjectCompartment1).location, params->param4 ? kCursorNormal : kCursorTalk, kCursorHand); + getObjects()->update(kObjectCompartment1, kEntityAugust, getObjects()->get(kObjectCompartment1).status, params->param4 ? kCursorNormal : kCursorTalk, kCursorHand); ENTITY_PARAM(1, 2) = 0; break; @@ -1032,7 +1032,7 @@ label_callback_9: break; case 13: - getSound()->playSound(kEntityPlayer, getObjects()->get(kObjectCompartment1).location == kObjectLocation1 ? "LIB032" : "LIB014"); + getSound()->playSound(kEntityPlayer, getObjects()->get(kObjectCompartment1).status == kObjectLocation1 ? "LIB032" : "LIB014"); getAction()->playAnimation(kEventAugustFindCorpse); if (getEvent(kEventDinerAugustOriginalJacket)) @@ -1045,7 +1045,7 @@ label_callback_9: case 14: if (!params->param2) - getSound()->playSound(kEntityPlayer, getObjects()->get(kObjectCompartment1).location == kObjectLocation1 ? "LIB032" : "LIB014"); + getSound()->playSound(kEntityPlayer, getObjects()->get(kObjectCompartment1).status == kObjectLocation1 ? "LIB032" : "LIB014"); getObjects()->update(kObjectCompartment1, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand); getObjects()->update(kObjectOutsideTylerCompartment, kEntityPlayer, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue); @@ -1070,7 +1070,7 @@ label_callback_9: case 17: params->param4 = 1; - getObjects()->update(kObjectCompartment1, kEntityAugust, getObjects()->get(kObjectCompartment1).location, kCursorNormal, kCursorHand); + getObjects()->update(kObjectCompartment1, kEntityAugust, getObjects()->get(kObjectCompartment1).status, kCursorNormal, kCursorHand); break; } break; @@ -3249,7 +3249,7 @@ IMPLEMENT_FUNCTION(63, August, function63) case kAction1: if (getEntities()->isInSalon(kEntityAlexei)) { - RESET_ENTITY_STATE(kEntityAlexei, Alexei, setup_function44); + RESET_ENTITY_STATE(kEntityAlexei, Alexei, setup_goToPlatform); } getData()->inventoryItem = kItemNone; diff --git a/engines/lastexpress/entities/chapters.cpp b/engines/lastexpress/entities/chapters.cpp index d373432710..6c8f7ca41c 100644 --- a/engines/lastexpress/entities/chapters.cpp +++ b/engines/lastexpress/entities/chapters.cpp @@ -221,7 +221,7 @@ IMPLEMENT_FUNCTION(6, Chapters, chapter1End) RESET_ENTITY_STATE(kEntityKronos, Kronos, setup_function10); RESET_ENTITY_STATE(kEntityKahina, Kahina, setup_function13); - RESET_ENTITY_STATE(kEntityAnna, Anna, setup_function34); + RESET_ENTITY_STATE(kEntityAnna, Anna, setup_asleep); RESET_ENTITY_STATE(kEntityAugust, August, setup_function34); RESET_ENTITY_STATE(kEntityTatiana, Tatiana, setup_function24); RESET_ENTITY_STATE(kEntityVassili, Vassili, setup_function7); @@ -349,19 +349,19 @@ IMPLEMENT_FUNCTION(7, Chapters, chapter1Init) getObjects()->update(kObjectOutsideTylerCompartment, kEntityPlayer, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue); for (uint i = kObjectCompartment1; i <= kObjectCompartment8; i++) { - getObjects()->updateLocation2((ObjectIndex)i, kObjectLocation2); + getObjects()->updateModel((ObjectIndex) i, kObjectModel2); } for (uint i = kObjectCompartmentA; i <= kObjectCompartmentH; i++) { - getObjects()->updateLocation2((ObjectIndex)i, kObjectLocation2); + getObjects()->updateModel((ObjectIndex) i, kObjectModel2); } params->param1 = 40; - getObjects()->updateLocation2(kObject25, kObjectLocation1); - getObjects()->updateLocation2(kObjectTrainTimeTable, kObjectLocation1); - getObjects()->updateLocation2(kObject98, kObjectLocation1); - getObjects()->updateLocation2(kObjectRestaurantCar, kObjectLocation1); + getObjects()->updateModel(kObject25, kObjectModel1); + getObjects()->updateModel(kObjectTrainTimeTable, kObjectModel1); + getObjects()->updateModel(kObject98, kObjectModel1); + getObjects()->updateModel(kObjectRestaurantCar, kObjectModel1); getObjects()->update(kObject25, kEntityPlayer, kObjectLocationNone, kCursorNormal, kCursorForward); getObjects()->update(kObjectTrainTimeTable, kEntityPlayer, kObjectLocationNone, kCursorNormal, kCursorForward); @@ -792,11 +792,11 @@ IMPLEMENT_FUNCTION(11, Chapters, chapter2Init) getInventory()->setLocationAndProcess(kItem3, kObjectLocation1); for (uint i = 1; i < 9; i++) { - getObjects()->updateLocation2((ObjectIndex)i, kObjectLocation2); + getObjects()->updateModel((ObjectIndex) i, kObjectModel2); } for (uint i = 33; i < 40; i++) { - getObjects()->updateLocation2((ObjectIndex)i, kObjectLocation2); + getObjects()->updateModel((ObjectIndex) i, kObjectModel2); } params->param1 = 40; @@ -893,7 +893,7 @@ IMPLEMENT_FUNCTION(14, Chapters, chapter3Init) getObjects()->update(kObjectHandleOutsideRight, kEntityPlayer, kObjectLocation1, kCursorNormal, kCursorHand); getInventory()->setLocationAndProcess(kItemBriefcase, kObjectLocation1); getInventory()->setLocationAndProcess(kItem3, kObjectLocation1); - getObjects()->updateLocation2(kObjectCompartment1, kObjectLocation2); + getObjects()->updateModel(kObjectCompartment1, kObjectModel2); getObjects()->update(kObject107, kEntityPlayer, kObjectLocation3, kCursorKeepValue, kCursorKeepValue); if (ENTITY_PARAM(0, 2) || ENTITY_PARAM(0, 3)) { @@ -1204,7 +1204,7 @@ IMPLEMENT_FUNCTION(18, Chapters, chapter4Init) if (getInventory()->get(kItemBeetle)->location == kObjectLocation3) getScenes()->loadSceneFromItemPosition(kItemBeetle); - getObjects()->updateLocation2(kObject25, kObjectLocation2); + getObjects()->updateModel(kObject25, kObjectModel2); getObjects()->update(kObject107, kEntityPlayer, kObjectLocation3, kCursorKeepValue, kCursorKeepValue); if (ENTITY_PARAM(0, 2) || ENTITY_PARAM(0, 3)) { @@ -1265,7 +1265,7 @@ label_exitPozsony: break; label_enterGalanta: - if (getObjects()->get(kObjectCompartment1).location2 == kObjectLocation1) { + if (getObjects()->get(kObjectCompartment1).model == kObjectModel1) { if (getState()->time > kTime2403000 && !CURRENT_PARAM(1, 2)) { CURRENT_PARAM(1, 2) = 1; getProgress().field_18 = 2; @@ -1440,7 +1440,7 @@ label_callback_4: case 10: getAction()->playAnimation(kEventDefuseBomb); - RESET_ENTITY_STATE(kEntityAbbot, Abbot, setup_function48); + RESET_ENTITY_STATE(kEntityAbbot, Abbot, setup_afterBomb); getSavePoints()->push(kEntityChapters, kEntityAnna, kAction191001984); getSavePoints()->push(kEntityChapters, kEntityCoudert, kAction191001984); getScenes()->loadSceneFromItemPosition(kItem2); @@ -1514,7 +1514,7 @@ label_callback_4: if (getInventory()->hasItem(kItemBomb)) { RESET_ENTITY_STATE(kEntityAlexei, Alexei, setup_function47); - RESET_ENTITY_STATE(kEntityAnna, Anna, setup_function68); + RESET_ENTITY_STATE(kEntityAnna, Anna, setup_sulking); RESET_ENTITY_STATE(kEntityAugust, August, setup_function65); RESET_ENTITY_STATE(kEntityMertens, Mertens, setup_function48); RESET_ENTITY_STATE(kEntityCoudert, Coudert, setup_function53); @@ -1675,8 +1675,8 @@ IMPLEMENT_FUNCTION(21, Chapters, chapter5Init) getObjects()->update(kObject94, kEntityPlayer, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue); getObjects()->update(kObject101, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand); - getObjects()->updateLocation2(kObject98, kObjectLocation2); - getObjects()->updateLocation2(kObjectRestaurantCar, kObjectLocation2); + getObjects()->updateModel(kObject98, kObjectModel2); + getObjects()->updateModel(kObjectRestaurantCar, kObjectModel2); if (ENTITY_PARAM(0, 2) || ENTITY_PARAM(0, 3)) { getSoundQueue()->removeFromQueue(kEntityChapters); diff --git a/engines/lastexpress/entities/coudert.cpp b/engines/lastexpress/entities/coudert.cpp index b604277903..ebe2a930a5 100644 --- a/engines/lastexpress/entities/coudert.cpp +++ b/engines/lastexpress/entities/coudert.cpp @@ -915,7 +915,7 @@ IMPLEMENT_FUNCTION_II(20, Coudert, function20, ObjectIndex, ObjectIndex) if (!Entity::updateParameter(CURRENT_PARAM(1, 4), getState()->time, 900)) break; - getObjects()->updateLocation2((ObjectIndex)params->param1, kObjectLocation1); + getObjects()->updateModel((ObjectIndex) params->param1, kObjectModel1); if (params->param4 != kObjectLocation2) getObjects()->update((ObjectIndex)params->param1, (EntityIndex)params->param3, (ObjectLocation)params->param4, (CursorStyle)params->param5, (CursorStyle)params->param6); @@ -938,15 +938,15 @@ IMPLEMENT_FUNCTION_II(20, Coudert, function20, ObjectIndex, ObjectIndex) case kActionDefault: params->param3 = getObjects()->get((ObjectIndex)params->param1).entity; - params->param4 = getObjects()->get((ObjectIndex)params->param1).location; - params->param5 = getObjects()->get((ObjectIndex)params->param1).cursor; - params->param6 = getObjects()->get((ObjectIndex)params->param1).cursor2; + params->param4 = getObjects()->get((ObjectIndex)params->param1).status; + params->param5 = getObjects()->get((ObjectIndex)params->param1).windowCursor; + params->param6 = getObjects()->get((ObjectIndex)params->param1).handleCursor; if (params->param2) { params->param7 = getObjects()->get((ObjectIndex)params->param2).entity; - params->param8 = getObjects()->get((ObjectIndex)params->param2).location; - CURRENT_PARAM(1, 1) = getObjects()->get((ObjectIndex)params->param2).cursor; - CURRENT_PARAM(1, 2) = getObjects()->get((ObjectIndex)params->param2).cursor2; + params->param8 = getObjects()->get((ObjectIndex)params->param2).status; + CURRENT_PARAM(1, 1) = getObjects()->get((ObjectIndex)params->param2).windowCursor; + CURRENT_PARAM(1, 2) = getObjects()->get((ObjectIndex)params->param2).handleCursor; getObjects()->update((ObjectIndex)params->param2, kEntityCoudert, kObjectLocation1, kCursorHandKnock, kCursorHand); } @@ -1580,7 +1580,7 @@ IMPLEMENT_FUNCTION_I(30, Coudert, function30, ObjectIndex) case 2: if (getEntities()->checkFields19(kEntityPlayer, kCarRedSleeping, (EntityPosition)parameters->param3) || ((parameters->param1 == kObjectCompartmentE || parameters->param1 == kObjectCompartmentF) && getEntities()->isOutsideAnnaWindow())) { - getObjects()->update((ObjectIndex)parameters->param1, kEntityPlayer, getObjects()->get((ObjectIndex)parameters->param1).location, kCursorNormal, kCursorNormal); + getObjects()->update((ObjectIndex)parameters->param1, kEntityPlayer, getObjects()->get((ObjectIndex)parameters->param1).status, kCursorNormal, kCursorNormal); parameters->param5 = true; } @@ -1598,7 +1598,7 @@ IMPLEMENT_FUNCTION_I(30, Coudert, function30, ObjectIndex) case 4: if (parameters->param5) - getObjects()->update((ObjectIndex)parameters->param1, kEntityPlayer, getObjects()->get((ObjectIndex)parameters->param1).location, kCursorHandKnock, kCursorHand); + getObjects()->update((ObjectIndex)parameters->param1, kEntityPlayer, getObjects()->get((ObjectIndex)parameters->param1).status, kCursorHandKnock, kCursorHand); getEntities()->exitCompartment(kEntityCoudert, (ObjectIndex)parameters->param1, true); @@ -1991,7 +1991,7 @@ IMPLEMENT_FUNCTION(36, Coudert, chapter1) getData()->location = kLocationOutsideCompartment; getData()->car = kCarRedSleeping; - getObjects()->updateLocation2(kObject111, kObjectLocation1); + getObjects()->updateModel(kObject111, kObjectModel1); break; case kActionCallback: @@ -2294,9 +2294,9 @@ label_callback_10: if (!ENTITY_PARAM(0, 2)) break; - timeCheckObject(kTime1107000, params->param4, kObject111, kObjectLocation2); - timeCheckObject(kTime1161000, params->param5, kObject111, kObjectLocation3); - timeCheckObject(kTime1206000, params->param6, kObject111, kObjectLocation4); + timeCheckObject(kTime1107000, params->param4, kObject111, kObjectModel2); + timeCheckObject(kTime1161000, params->param5, kObject111, kObjectModel3); + timeCheckObject(kTime1206000, params->param6, kObject111, kObjectModel4); break; case kAction1: @@ -2577,7 +2577,7 @@ IMPLEMENT_FUNCTION(42, Coudert, chapter2) ENTITY_PARAM(2, 4) = 0; - getObjects()->updateLocation2(kObject111, kObjectLocation5); + getObjects()->updateModel(kObject111, kObjectModel5); break; case kActionCallback: @@ -2716,7 +2716,7 @@ IMPLEMENT_FUNCTION(44, Coudert, chapter3) ENTITY_PARAM(2, 4) = 0; ENTITY_PARAM(2, 5) = 0; - getObjects()->updateLocation2(kObject111, kObjectLocation6); + getObjects()->updateModel(kObject111, kObjectModel6); break; case kActionCallback: @@ -2850,9 +2850,9 @@ label_callback_18: label_callback_19: if (ENTITY_PARAM(0, 2)) { - timeCheckObject(kTime2025000, params->param7, kObject111, kObjectLocation7); - timeCheckObject(kTime2133000, params->param8, kObject111, kObjectLocation8); - timeCheckObject(kTime2173500, CURRENT_PARAM(1, 1), kObject111, kObjectLocation9); + timeCheckObject(kTime2025000, params->param7, kObject111, kObjectModel7); + timeCheckObject(kTime2133000, params->param8, kObject111, kObjectModel8); + timeCheckObject(kTime2173500, CURRENT_PARAM(1, 1), kObject111, kObjectModel9); } break; @@ -3498,7 +3498,7 @@ IMPLEMENT_FUNCTION(52, Coudert, chapter4) ENTITY_PARAM(2, 3) = 0; ENTITY_PARAM(2, 4) = 0; - getObjects()->updateLocation2(kObject111, kObjectLocation10); + getObjects()->updateModel(kObject111, kObjectModel10); break; case kActionCallback: @@ -3523,14 +3523,14 @@ IMPLEMENT_FUNCTION(53, Coudert, function53) params->param1 = 1; - getObjects()->updateLocation2(kObjectCompartmentA, kObjectLocation1); - getObjects()->updateLocation2(kObjectCompartmentB, kObjectLocation1); - getObjects()->updateLocation2(kObjectCompartmentC, kObjectLocation1); - getObjects()->updateLocation2(kObjectCompartmentD, kObjectLocation1); - getObjects()->updateLocation2(kObjectCompartmentE, kObjectLocation1); - getObjects()->updateLocation2(kObjectCompartmentF, kObjectLocation1); - getObjects()->updateLocation2(kObjectCompartmentG, kObjectLocation1); - getObjects()->updateLocation2(kObjectCompartmentH, kObjectLocation1); + getObjects()->updateModel(kObjectCompartmentA, kObjectModel1); + getObjects()->updateModel(kObjectCompartmentB, kObjectModel1); + getObjects()->updateModel(kObjectCompartmentC, kObjectModel1); + getObjects()->updateModel(kObjectCompartmentD, kObjectModel1); + getObjects()->updateModel(kObjectCompartmentE, kObjectModel1); + getObjects()->updateModel(kObjectCompartmentF, kObjectModel1); + getObjects()->updateModel(kObjectCompartmentG, kObjectModel1); + getObjects()->updateModel(kObjectCompartmentH, kObjectModel1); ENTITY_PARAM(2, 3) = 0; diff --git a/engines/lastexpress/entities/entity.cpp b/engines/lastexpress/entities/entity.cpp index dad5e67392..b2fc30829f 100644 --- a/engines/lastexpress/entities/entity.cpp +++ b/engines/lastexpress/entities/entity.cpp @@ -943,10 +943,10 @@ void Entity::timeCheckSavepoint(TimeValue timeValue, uint ¶meter, EntityInde } } -void Entity::timeCheckObject(TimeValue timeValue, uint ¶meter, ObjectIndex object, ObjectLocation location) const { +void Entity::timeCheckObject(TimeValue timeValue, uint ¶meter, ObjectIndex object, ObjectModel model) const { if (getState()->time > timeValue && !parameter) { parameter = 1; - getObjects()->updateLocation2(object, location); + getObjects()->updateModel(object, model); } } diff --git a/engines/lastexpress/entities/entity.h b/engines/lastexpress/entities/entity.h index f3b57e7464..634c854d05 100644 --- a/engines/lastexpress/entities/entity.h +++ b/engines/lastexpress/entities/entity.h @@ -1095,7 +1095,7 @@ protected: bool timeCheckCallbackInventory(TimeValue timeValue, uint ¶meter, byte callback, Common::Functor0<void> *function); bool timeCheckCar(TimeValue timeValue, uint ¶meter, byte callback, Common::Functor0<void> *function); void timeCheckSavepoint(TimeValue timeValue, uint ¶meter, EntityIndex entity1, EntityIndex entity2, ActionIndex action) const; - void timeCheckObject(TimeValue timeValue, uint ¶meter, ObjectIndex index, ObjectLocation location) const; + void timeCheckObject(TimeValue timeValue, uint ¶meter, ObjectIndex index, ObjectModel model) const; bool timeCheckCallbackAction(TimeValue timeValue, uint ¶meter); bool timeCheckPlaySoundUpdatePosition(TimeValue timeValue, uint ¶meter, byte callback, const char* sound, EntityPosition position); diff --git a/engines/lastexpress/entities/francois.cpp b/engines/lastexpress/entities/francois.cpp index d2bbc9854c..12ce16a32b 100644 --- a/engines/lastexpress/entities/francois.cpp +++ b/engines/lastexpress/entities/francois.cpp @@ -44,22 +44,22 @@ Francois::Francois(LastExpressEngine *engine) : Entity(engine, kEntityFrancois) ADD_CALLBACK_FUNCTION(Francois, enterExitCompartment2); ADD_CALLBACK_FUNCTION(Francois, playSound); ADD_CALLBACK_FUNCTION(Francois, savegame); - ADD_CALLBACK_FUNCTION(Francois, updateEntity); - ADD_CALLBACK_FUNCTION(Francois, function9); - ADD_CALLBACK_FUNCTION(Francois, function10); - ADD_CALLBACK_FUNCTION(Francois, function11); - ADD_CALLBACK_FUNCTION(Francois, function12); - ADD_CALLBACK_FUNCTION(Francois, function13); - ADD_CALLBACK_FUNCTION(Francois, function14); - ADD_CALLBACK_FUNCTION(Francois, function15); - ADD_CALLBACK_FUNCTION(Francois, function16); + ADD_CALLBACK_FUNCTION(Francois, doWalk); + ADD_CALLBACK_FUNCTION(Francois, exitCompartment); + ADD_CALLBACK_FUNCTION(Francois, enterCompartment); + ADD_CALLBACK_FUNCTION(Francois, rampage); + ADD_CALLBACK_FUNCTION(Francois, takeWalk); + ADD_CALLBACK_FUNCTION(Francois, haremVisit); + ADD_CALLBACK_FUNCTION(Francois, chaseBeetle); + ADD_CALLBACK_FUNCTION(Francois, findCath); + ADD_CALLBACK_FUNCTION(Francois, letsGo); ADD_CALLBACK_FUNCTION(Francois, chapter1); ADD_CALLBACK_FUNCTION(Francois, chapter1Handler); - ADD_CALLBACK_FUNCTION(Francois, function19); + ADD_CALLBACK_FUNCTION(Francois, inCompartment); ADD_CALLBACK_FUNCTION(Francois, function20); ADD_CALLBACK_FUNCTION(Francois, chapter2); - ADD_CALLBACK_FUNCTION(Francois, chapter2Handler); - ADD_CALLBACK_FUNCTION(Francois, function23); + ADD_CALLBACK_FUNCTION(Francois, atBreakfast); + ADD_CALLBACK_FUNCTION(Francois, withMama); ADD_CALLBACK_FUNCTION(Francois, chapter3); ADD_CALLBACK_FUNCTION(Francois, chapter3Handler); ADD_CALLBACK_FUNCTION(Francois, chapter4); @@ -106,7 +106,7 @@ IMPLEMENT_FUNCTION_II(7, Francois, savegame, SavegameType, uint32) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION_II(8, Francois, updateEntity, CarIndex, EntityPosition) +IMPLEMENT_FUNCTION_II(8, Francois, doWalk, CarIndex, EntityPosition) switch (savepoint.action) { default: break; @@ -196,13 +196,13 @@ IMPLEMENT_FUNCTION_II(8, Francois, updateEntity, CarIndex, EntityPosition) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(9, Francois, function9) +IMPLEMENT_FUNCTION(9, Francois, exitCompartment) switch (savepoint.action) { default: break; case kActionDefault: - if (getObjects()->get(kObjectCompartmentD).location == kObjectLocation2) { + if (getObjects()->get(kObjectCompartmentD).status == kObjectLocation2) { getObjects()->update(kObjectCompartmentD, kEntityPlayer, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue); getSavePoints()->push(kEntityFrancois, kEntityMmeBoutarel, kAction134289824); setCallback(1); @@ -232,13 +232,13 @@ IMPLEMENT_FUNCTION(9, Francois, function9) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(10, Francois, function10) +IMPLEMENT_FUNCTION(10, Francois, enterCompartment) switch (savepoint.action) { default: break; case kActionDefault: - if (getObjects()->get(kObjectCompartmentD).location == kObjectLocation2) { + if (getObjects()->get(kObjectCompartmentD).status == kObjectLocation2) { getObjects()->update(kObjectCompartmentD, kEntityPlayer, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue); setCallback(1); setup_enterExitCompartment2("605Bd", kObjectCompartmentD); @@ -270,7 +270,7 @@ IMPLEMENT_FUNCTION(10, Francois, function10) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION_I(11, Francois, function11, TimeValue) +IMPLEMENT_FUNCTION_I(11, Francois, rampage, TimeValue) switch (savepoint.action) { default: break; @@ -375,7 +375,7 @@ label_callback: getSoundQueue()->processEntry(kEntityFrancois); setCallback(4); - setup_updateEntity(kCarRedSleeping, kPosition_5790); + setup_doWalk(kCarRedSleeping, kPosition_5790); } break; @@ -400,7 +400,7 @@ label_callback: case kActionDefault: setCallback(1); - setup_function9(); + setup_exitCompartment(); break; case kActionCallback: @@ -437,7 +437,7 @@ label_callback: case 4: setCallback(5); - setup_function10(); + setup_enterCompartment(); break; case 5: @@ -477,14 +477,14 @@ label_callback: IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(12, Francois, function12) +IMPLEMENT_FUNCTION(12, Francois, takeWalk) switch (savepoint.action) { default: break; case kActionDefault: setCallback(1); - setup_function9(); + setup_exitCompartment(); break; case kActionCallback: @@ -494,7 +494,7 @@ IMPLEMENT_FUNCTION(12, Francois, function12) case 1: setCallback(2); - setup_updateEntity(kCarRedSleeping, kPosition_9460); + setup_doWalk(kCarRedSleeping, kPosition_9460); break; case 2: @@ -504,7 +504,7 @@ IMPLEMENT_FUNCTION(12, Francois, function12) case 3: setCallback(4); - setup_updateEntity(kCarRedSleeping, kPosition_540); + setup_doWalk(kCarRedSleeping, kPosition_540); break; case 4: @@ -514,12 +514,12 @@ IMPLEMENT_FUNCTION(12, Francois, function12) case 5: setCallback(6); - setup_updateEntity(kCarRedSleeping, kPosition_5790); + setup_doWalk(kCarRedSleeping, kPosition_5790); break; case 6: setCallback(7); - setup_function10(); + setup_enterCompartment(); break; case 7: @@ -531,14 +531,14 @@ IMPLEMENT_FUNCTION(12, Francois, function12) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(13, Francois, function13) +IMPLEMENT_FUNCTION(13, Francois, haremVisit) switch (savepoint.action) { default: break; case kActionDefault: setCallback(1); - setup_function9(); + setup_exitCompartment(); break; case kActionCallback: @@ -548,12 +548,12 @@ IMPLEMENT_FUNCTION(13, Francois, function13) case 1: setCallback(2); - setup_updateEntity(kCarRedSleeping, kPosition_540); + setup_doWalk(kCarRedSleeping, kPosition_540); break; case 2: setCallback(3); - setup_updateEntity(kCarGreenSleeping, kPosition_4070); + setup_doWalk(kCarGreenSleeping, kPosition_4070); break; case 3: @@ -577,13 +577,13 @@ IMPLEMENT_FUNCTION(13, Francois, function13) getData()->location = kLocationOutsideCompartment; setCallback(7); - setup_updateEntity(kCarGreenSleeping, kPosition_4840); + setup_doWalk(kCarGreenSleeping, kPosition_4840); break; case 7: if (getInventory()->hasItem(kItemWhistle) || getInventory()->get(kItemWhistle)->location == kObjectLocation3) { setCallback(10); - setup_updateEntity(kCarGreenSleeping, kPosition_5790); + setup_doWalk(kCarGreenSleeping, kPosition_5790); break; } @@ -599,12 +599,12 @@ IMPLEMENT_FUNCTION(13, Francois, function13) getEntities()->exitCompartment(kEntityFrancois, kObjectCompartmentE, true); setCallback(10); - setup_updateEntity(kCarGreenSleeping, kPosition_5790); + setup_doWalk(kCarGreenSleeping, kPosition_5790); break; case 10: setCallback(11); - setup_function10(); + setup_enterCompartment(); break; case 11: @@ -621,7 +621,7 @@ IMPLEMENT_FUNCTION(13, Francois, function13) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION_IIS(14, Francois, function14, ObjectIndex, EntityPosition) +IMPLEMENT_FUNCTION_IIS(14, Francois, chaseBeetle, ObjectIndex, EntityPosition) // Expose parameters as IISS and ignore the default exposed parameters EntityData::EntityParametersIISS *parameters = (EntityData::EntityParametersIISS*)_data->getCurrentParameters(); @@ -634,7 +634,7 @@ IMPLEMENT_FUNCTION_IIS(14, Francois, function14, ObjectIndex, EntityPosition) strcat((char *)¶meters->seq2, (char *)¶meters->seq1); setCallback(1); - setup_function9(); + setup_exitCompartment(); break; case kActionCallback: @@ -644,7 +644,7 @@ IMPLEMENT_FUNCTION_IIS(14, Francois, function14, ObjectIndex, EntityPosition) case 1: setCallback(2); - setup_updateEntity(kCarRedSleeping, (EntityPosition)parameters->param2); + setup_doWalk(kCarRedSleeping, (EntityPosition)parameters->param2); break; case 2: @@ -657,10 +657,10 @@ IMPLEMENT_FUNCTION_IIS(14, Francois, function14, ObjectIndex, EntityPosition) } else { if (parameters->param2 >= kPosition_5790) { setCallback(10); - setup_updateEntity(kCarRedSleeping, kPosition_9460); + setup_doWalk(kCarRedSleeping, kPosition_9460); } else { setCallback(9); - setup_updateEntity(kCarRedSleeping, kPosition_540); + setup_doWalk(kCarRedSleeping, kPosition_540); } } break; @@ -688,7 +688,7 @@ IMPLEMENT_FUNCTION_IIS(14, Francois, function14, ObjectIndex, EntityPosition) case 9: setCallback(10); - setup_updateEntity(kCarRedSleeping, kPosition_9460); + setup_doWalk(kCarRedSleeping, kPosition_9460); break; case 10: @@ -698,12 +698,12 @@ IMPLEMENT_FUNCTION_IIS(14, Francois, function14, ObjectIndex, EntityPosition) case 11: setCallback(12); - setup_updateEntity(kCarRedSleeping, kPosition_5790); + setup_doWalk(kCarRedSleeping, kPosition_5790); break; case 12: setCallback(13); - setup_function10(); + setup_enterCompartment(); break; case 13: @@ -715,14 +715,14 @@ IMPLEMENT_FUNCTION_IIS(14, Francois, function14, ObjectIndex, EntityPosition) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(15, Francois, function15) +IMPLEMENT_FUNCTION(15, Francois, findCath) switch (savepoint.action) { default: break; case kActionDefault: setCallback(1); - setup_function9(); + setup_exitCompartment(); break; case kActionCallback: @@ -733,10 +733,10 @@ IMPLEMENT_FUNCTION(15, Francois, function15) case 1: if (getData()->entityPosition >= getEntityData(kEntityPlayer)->entityPosition) { setCallback(3); - setup_updateEntity(kCarRedSleeping, kPosition_540); + setup_doWalk(kCarRedSleeping, kPosition_540); } else { setCallback(2); - setup_updateEntity(kCarRedSleeping, kPosition_9460); + setup_doWalk(kCarRedSleeping, kPosition_9460); } break; @@ -748,12 +748,12 @@ IMPLEMENT_FUNCTION(15, Francois, function15) case 4: setCallback(5); - setup_updateEntity(kCarRedSleeping, kPosition_5790); + setup_doWalk(kCarRedSleeping, kPosition_5790); break; case 5: setCallback(6); - setup_function10(); + setup_enterCompartment(); break; case 6: @@ -780,7 +780,7 @@ IMPLEMENT_FUNCTION(15, Francois, function15) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(16, Francois, function16) +IMPLEMENT_FUNCTION(16, Francois, letsGo) switch (savepoint.action) { default: break; @@ -809,7 +809,7 @@ IMPLEMENT_FUNCTION(16, Francois, function16) getSavePoints()->push(kEntityFrancois, kEntityMmeBoutarel, kAction101107728); setCallback(2); - setup_updateEntity(kCarRestaurant, kPosition_850); + setup_doWalk(kCarRestaurant, kPosition_850); break; case 2: @@ -836,7 +836,7 @@ IMPLEMENT_FUNCTION(16, Francois, function16) case kAction100901266: setCallback(3); - setup_updateEntity(kCarRedSleeping, kPosition_5790); + setup_doWalk(kCarRedSleeping, kPosition_5790); break; } IMPLEMENT_FUNCTION_END @@ -871,24 +871,24 @@ IMPLEMENT_FUNCTION(18, Francois, chapter1Handler) case kActionCallback: if (getCallback() == 1) - setup_function19(); + setup_inCompartment(); break; } IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(19, Francois, function19) +IMPLEMENT_FUNCTION(19, Francois, inCompartment) switch (savepoint.action) { default: break; case kActionNone: - Entity::timeCheckCallback(kTime1161000, params->param1, 2, WRAP_SETUP_FUNCTION(Francois, setup_function12)); + Entity::timeCheckCallback(kTime1161000, params->param1, 2, WRAP_SETUP_FUNCTION(Francois, setup_takeWalk)); break; case kAction101107728: setCallback(1); - setup_function16(); + setup_letsGo(); break; } IMPLEMENT_FUNCTION_END @@ -911,7 +911,7 @@ IMPLEMENT_FUNCTION(21, Francois, chapter2) break; case kActionNone: - setup_chapter2Handler(); + setup_atBreakfast(); break; case kActionDefault: @@ -927,7 +927,7 @@ IMPLEMENT_FUNCTION(21, Francois, chapter2) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(22, Francois, chapter2Handler) +IMPLEMENT_FUNCTION(22, Francois, atBreakfast) switch (savepoint.action) { default: break; @@ -948,20 +948,20 @@ IMPLEMENT_FUNCTION(22, Francois, chapter2Handler) getData()->entityPosition = kPosition_5790; getData()->location = kLocationInsideCompartment; getEntities()->clearSequences(kEntityFrancois); - setup_function23(); + setup_withMama(); break; } break; case kAction100901266: setCallback(1); - setup_updateEntity(kCarRedSleeping, kPosition_5790); + setup_doWalk(kCarRedSleeping, kPosition_5790); break; } IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(23, Francois, function23) +IMPLEMENT_FUNCTION(23, Francois, withMama) switch (savepoint.action) { default: break; @@ -973,7 +973,7 @@ IMPLEMENT_FUNCTION(23, Francois, function23) if (ENTITY_PARAM(0, 1) && getEntities()->isPlayerInCar(kCarRedSleeping)) { setCallback(1); - setup_function15(); + setup_findCath(); break; } @@ -982,7 +982,7 @@ label_callback_1: break; label_callback_2: - if (Entity::timeCheckCallback(kTime1800000, params->param2, 3, WRAP_SETUP_FUNCTION(Francois, setup_function13))) + if (Entity::timeCheckCallback(kTime1800000, params->param2, 3, WRAP_SETUP_FUNCTION(Francois, setup_haremVisit))) break; label_callback_3: @@ -1085,36 +1085,36 @@ IMPLEMENT_FUNCTION(25, Francois, chapter3Handler) if (ENTITY_PARAM(0, 1) && getEntities()->isPlayerInCar(kCarRedSleeping)) { setCallback(2); - setup_function15(); + setup_findCath(); break; } label_callback_2: - if (Entity::timeCheckCallback(kTime2025000, params->param3, 3, WRAP_SETUP_FUNCTION(Francois, setup_function12))) + if (Entity::timeCheckCallback(kTime2025000, params->param3, 3, WRAP_SETUP_FUNCTION(Francois, setup_takeWalk))) break; label_callback_3: - if (Entity::timeCheckCallback(kTime2052000, params->param4, 4, WRAP_SETUP_FUNCTION(Francois, setup_function12))) + if (Entity::timeCheckCallback(kTime2052000, params->param4, 4, WRAP_SETUP_FUNCTION(Francois, setup_takeWalk))) break; label_callback_4: - if (Entity::timeCheckCallback(kTime2079000, params->param5, 5, WRAP_SETUP_FUNCTION(Francois, setup_function12))) + if (Entity::timeCheckCallback(kTime2079000, params->param5, 5, WRAP_SETUP_FUNCTION(Francois, setup_takeWalk))) break; label_callback_5: - if (Entity::timeCheckCallback(kTime2092500, params->param6, 6, WRAP_SETUP_FUNCTION(Francois, setup_function12))) + if (Entity::timeCheckCallback(kTime2092500, params->param6, 6, WRAP_SETUP_FUNCTION(Francois, setup_takeWalk))) break; label_callback_6: - if (Entity::timeCheckCallback(kTime2173500, params->param7, 7, WRAP_SETUP_FUNCTION(Francois, setup_function12))) + if (Entity::timeCheckCallback(kTime2173500, params->param7, 7, WRAP_SETUP_FUNCTION(Francois, setup_takeWalk))) break; label_callback_7: - if (Entity::timeCheckCallback(kTime2182500, params->param8, 8, WRAP_SETUP_FUNCTION(Francois, setup_function12))) + if (Entity::timeCheckCallback(kTime2182500, params->param8, 8, WRAP_SETUP_FUNCTION(Francois, setup_takeWalk))) break; label_callback_8: - if (Entity::timeCheckCallback(kTime2241000, CURRENT_PARAM(1, 1), 9, WRAP_SETUP_FUNCTION(Francois, setup_function12))) + if (Entity::timeCheckCallback(kTime2241000, CURRENT_PARAM(1, 1), 9, WRAP_SETUP_FUNCTION(Francois, setup_takeWalk))) break; label_callback_9: @@ -1208,7 +1208,7 @@ label_callback_14: case kAction101107728: setCallback(1); - setup_function16(); + setup_letsGo(); break; case kAction189872836: @@ -1246,7 +1246,7 @@ IMPLEMENT_FUNCTION_END IMPLEMENT_FUNCTION(27, Francois, chapter4Handler) if (savepoint.action == kAction101107728) { setCallback(1); - setup_function16(); + setup_letsGo(); } IMPLEMENT_FUNCTION_END @@ -1314,7 +1314,7 @@ bool Francois::timeCheckCallbackCompartment(TimeValue timeValue, uint ¶meter if (getState()->time > timeValue && !parameter) { parameter = 1; setCallback(callback); - setup_function14(compartment, position, sequenceSuffix); + setup_chaseBeetle(compartment, position, sequenceSuffix); return true; } @@ -1326,7 +1326,7 @@ bool Francois::timeCheckCallback(TimeValue timeValue, uint ¶meter, byte call if (getState()->time > timeValue && !parameter) { parameter = 1; setCallback(callback); - setup_function11(timeValue2); + setup_rampage(timeValue2); return true; } diff --git a/engines/lastexpress/entities/francois.h b/engines/lastexpress/entities/francois.h index 51270fa4b6..3118faf867 100644 --- a/engines/lastexpress/entities/francois.h +++ b/engines/lastexpress/entities/francois.h @@ -85,21 +85,21 @@ public: DECLARE_FUNCTION_2(savegame, SavegameType savegameType, uint32 param) /** - * Updates the entity + * Walk * * @param car The car * @param entityPosition The entity position */ - DECLARE_FUNCTION_2(updateEntity, CarIndex car, EntityPosition entityPosition) + DECLARE_FUNCTION_2(doWalk, CarIndex car, EntityPosition entityPosition) - DECLARE_FUNCTION(function9) - DECLARE_FUNCTION(function10) - DECLARE_FUNCTION_1(function11, TimeValue timeValue) - DECLARE_FUNCTION(function12) - DECLARE_FUNCTION(function13) - DECLARE_FUNCTION_3(function14, ObjectIndex compartment, EntityPosition entityPosition, const char *str) - DECLARE_FUNCTION(function15) - DECLARE_FUNCTION(function16) + DECLARE_FUNCTION(exitCompartment) + DECLARE_FUNCTION(enterCompartment) + DECLARE_FUNCTION_1(rampage, TimeValue timeValue) + DECLARE_FUNCTION(takeWalk) + DECLARE_FUNCTION(haremVisit) + DECLARE_FUNCTION_3(chaseBeetle, ObjectIndex compartment, EntityPosition entityPosition, const char *str) + DECLARE_FUNCTION(findCath) + DECLARE_FUNCTION(letsGo) /** * Setup Chapter 1 @@ -110,8 +110,7 @@ public: * Handle Chapter 1 events */ DECLARE_FUNCTION(chapter1Handler) - - DECLARE_FUNCTION(function19) + DECLARE_FUNCTION(inCompartment) DECLARE_FUNCTION(function20) /** @@ -122,9 +121,8 @@ public: /** * Handle Chapter 2 events */ - DECLARE_FUNCTION(chapter2Handler) - - DECLARE_FUNCTION(function23) + DECLARE_FUNCTION(atBreakfast) + DECLARE_FUNCTION(withMama) /** * Setup Chapter 3 @@ -155,7 +153,6 @@ public: * Handle Chapter 5 events */ DECLARE_FUNCTION(chapter5Handler) - DECLARE_FUNCTION(function30) DECLARE_NULL_FUNCTION() diff --git a/engines/lastexpress/entities/gendarmes.cpp b/engines/lastexpress/entities/gendarmes.cpp index a912fa4ecb..2ff34ef4c9 100644 --- a/engines/lastexpress/entities/gendarmes.cpp +++ b/engines/lastexpress/entities/gendarmes.cpp @@ -250,7 +250,7 @@ IMPLEMENT_FUNCTION_III(10, Gendarmes, function10, CarIndex, EntityPosition, Obje if (!params->param5) params->param5 = getState()->timeTicks + 75; - if (!getEntities()->isOutsideAlexeiWindow() && getObjects()->get((ObjectIndex)params->param3).location != kObjectLocation1) { + if (!getEntities()->isOutsideAlexeiWindow() && getObjects()->get((ObjectIndex)params->param3).status != kObjectLocation1) { setCallback(2); setup_savegame(kSavegameTypeEvent, kEventGendarmesArrestation); break; @@ -284,7 +284,7 @@ IMPLEMENT_FUNCTION_III(10, Gendarmes, function10, CarIndex, EntityPosition, Obje break; case kActionKnock: - getObjects()->update((ObjectIndex)params->param3, kEntityGendarmes, getObjects()->get((ObjectIndex)params->param3).location, kCursorNormal, kCursorNormal); + getObjects()->update((ObjectIndex)params->param3, kEntityGendarmes, getObjects()->get((ObjectIndex)params->param3).status, kCursorNormal, kCursorNormal); setCallback(5); setup_arrestPlaysound16("POL1046B"); @@ -296,7 +296,7 @@ IMPLEMENT_FUNCTION_III(10, Gendarmes, function10, CarIndex, EntityPosition, Obje break; case kActionDefault: - getObjects()->update((ObjectIndex)params->param3, kEntityGendarmes, getObjects()->get((ObjectIndex)params->param3).location, kCursorNormal, kCursorNormal); + getObjects()->update((ObjectIndex)params->param3, kEntityGendarmes, getObjects()->get((ObjectIndex)params->param3).status, kCursorNormal, kCursorNormal); setCallback(1); setup_arrestPlaysound16("POL1046"); @@ -308,7 +308,7 @@ IMPLEMENT_FUNCTION_III(10, Gendarmes, function10, CarIndex, EntityPosition, Obje break; case 1: - getObjects()->update((ObjectIndex)params->param3, kEntityGendarmes, getObjects()->get((ObjectIndex)params->param3).location, kCursorTalk, kCursorNormal); + getObjects()->update((ObjectIndex)params->param3, kEntityGendarmes, getObjects()->get((ObjectIndex)params->param3).status, kCursorTalk, kCursorNormal); break; case 2: @@ -334,7 +334,7 @@ IMPLEMENT_FUNCTION_III(10, Gendarmes, function10, CarIndex, EntityPosition, Obje break; case 5: - getObjects()->update((ObjectIndex)params->param3, kEntityGendarmes, getObjects()->get((ObjectIndex)params->param3).location, kCursorNormal, kCursorHand); + getObjects()->update((ObjectIndex)params->param3, kEntityGendarmes, getObjects()->get((ObjectIndex)params->param3).status, kCursorNormal, kCursorHand); break; case 6: diff --git a/engines/lastexpress/entities/kahina.cpp b/engines/lastexpress/entities/kahina.cpp index 467c8d8b3c..29e9a90d41 100644 --- a/engines/lastexpress/entities/kahina.cpp +++ b/engines/lastexpress/entities/kahina.cpp @@ -503,16 +503,16 @@ IMPLEMENT_FUNCTION(15, Kahina, function15) getData()->location = kLocationInsideCompartment; getEntities()->clearSequences(kEntityKahina); - getObjects()->update(kObjectCompartmentC, kEntityPlayer, getObjects()->get(kObjectCompartmentC).location, kCursorNormal, kCursorNormal); - getObjects()->update(kObject50, kEntityPlayer, getObjects()->get(kObject50).location, kCursorNormal, kCursorNormal); + getObjects()->update(kObjectCompartmentC, kEntityPlayer, getObjects()->get(kObjectCompartmentC).status, kCursorNormal, kCursorNormal); + getObjects()->update(kObject50, kEntityPlayer, getObjects()->get(kObject50).status, kCursorNormal, kCursorNormal); setCallback(13); setup_updateFromTime(900); break; case 13: - getObjects()->update(kObjectCompartmentC, kEntityPlayer, getObjects()->get(kObjectCompartmentC).location, kCursorHandKnock, kCursorHand); - getObjects()->update(kObject50, kEntityPlayer, getObjects()->get(kObject50).location, kCursorHandKnock, kCursorHand); + getObjects()->update(kObjectCompartmentC, kEntityPlayer, getObjects()->get(kObjectCompartmentC).status, kCursorHandKnock, kCursorHand); + getObjects()->update(kObject50, kEntityPlayer, getObjects()->get(kObject50).status, kCursorHandKnock, kCursorHand); setCallback(14); setup_enterExitCompartment("616Bc", kObjectCompartmentC); @@ -1088,16 +1088,16 @@ IMPLEMENT_FUNCTION(23, Kahina, function23) getData()->location = kLocationInsideCompartment; getEntities()->clearSequences(kEntityKahina); - getObjects()->update(kObjectCompartmentF, kEntityPlayer, getObjects()->get(kObjectCompartmentF).location, kCursorNormal, kCursorNormal); - getObjects()->update(kObject53, kEntityPlayer, getObjects()->get(kObject53).location, kCursorNormal, kCursorNormal); + getObjects()->update(kObjectCompartmentF, kEntityPlayer, getObjects()->get(kObjectCompartmentF).status, kCursorNormal, kCursorNormal); + getObjects()->update(kObject53, kEntityPlayer, getObjects()->get(kObject53).status, kCursorNormal, kCursorNormal); setCallback(3); setup_updateFromTime(900); break; case 3: - getObjects()->update(kObjectCompartmentF, kEntityPlayer, getObjects()->get(kObjectCompartmentF).location, kCursorHandKnock, kCursorHand); - getObjects()->update(kObject53, kEntityPlayer, getObjects()->get(kObject53).location, kCursorHandKnock, kCursorHand); + getObjects()->update(kObjectCompartmentF, kEntityPlayer, getObjects()->get(kObjectCompartmentF).status, kCursorHandKnock, kCursorHand); + getObjects()->update(kObject53, kEntityPlayer, getObjects()->get(kObject53).status, kCursorHandKnock, kCursorHand); setCallback(4); setup_enterExitCompartment("616Df", kObjectCompartmentF); @@ -1436,16 +1436,16 @@ IMPLEMENT_FUNCTION(26, Kahina, function26) getData()->location = kLocationInsideCompartment; getEntities()->clearSequences(kEntityKahina); - getObjects()->update(kObjectCompartmentA, kEntityPlayer, getObjects()->get(kObjectCompartmentA).location, kCursorNormal, kCursorNormal); - getObjects()->update(kObject48, kEntityPlayer, getObjects()->get(kObject48).location, kCursorNormal, kCursorNormal); + getObjects()->update(kObjectCompartmentA, kEntityPlayer, getObjects()->get(kObjectCompartmentA).status, kCursorNormal, kCursorNormal); + getObjects()->update(kObject48, kEntityPlayer, getObjects()->get(kObject48).status, kCursorNormal, kCursorNormal); setCallback(7); setup_updateFromTime(900); break; case 7: - getObjects()->update(kObjectCompartmentA, kEntityPlayer, getObjects()->get(kObjectCompartmentA).location, kCursorHandKnock, kCursorHand); - getObjects()->update(kObject48, kEntityPlayer, getObjects()->get(kObject48).location, kCursorHandKnock, kCursorHand); + getObjects()->update(kObjectCompartmentA, kEntityPlayer, getObjects()->get(kObjectCompartmentA).status, kCursorHandKnock, kCursorHand); + getObjects()->update(kObject48, kEntityPlayer, getObjects()->get(kObject48).status, kCursorHandKnock, kCursorHand); if (getInventory()->get(kItemFirebird)->location == kObjectLocation1 || getInventory()->get(kItemFirebird)->location == kObjectLocation2) { getScenes()->loadSceneFromItemPosition(kItemFirebird); diff --git a/engines/lastexpress/entities/kronos.cpp b/engines/lastexpress/entities/kronos.cpp index 26ce3ca424..38a685ec19 100644 --- a/engines/lastexpress/entities/kronos.cpp +++ b/engines/lastexpress/entities/kronos.cpp @@ -399,7 +399,7 @@ IMPLEMENT_FUNCTION(18, Kronos, function18) case kActionNone: if (getState()->time > kTime2079000 && !params->param2) { - getObjects()->updateLocation2(kObjectCompartmentKronos, kObjectLocation3); + getObjects()->updateModel(kObjectCompartmentKronos, kObjectModel3); getObjects()->update(kObjectCompartmentKronos, kEntityPlayer, kObjectLocation3, kCursorHandKnock, kCursorHand); params->param1 = 1; params->param2 = 1; @@ -462,7 +462,7 @@ IMPLEMENT_FUNCTION(19, Kronos, function19) RESET_ENTITY_STATE(kEntityRebecca, Rebecca, setup_function39); RESET_ENTITY_STATE(kEntitySophie, Sophie, setup_chaptersHandler); RESET_ENTITY_STATE(kEntityAugust, August, setup_function50); - RESET_ENTITY_STATE(kEntityAnna, Anna, setup_function56); + RESET_ENTITY_STATE(kEntityAnna, Anna, setup_concert); RESET_ENTITY_STATE(kEntityTatiana, Tatiana, setup_function35); setup_function20(); diff --git a/engines/lastexpress/entities/mertens.cpp b/engines/lastexpress/entities/mertens.cpp index 97dd293793..f484d00a2c 100644 --- a/engines/lastexpress/entities/mertens.cpp +++ b/engines/lastexpress/entities/mertens.cpp @@ -1067,7 +1067,7 @@ IMPLEMENT_FUNCTION_II(21, Mertens, function21, ObjectIndex, ObjectIndex) break; // Update objects - getObjects()->updateLocation2((ObjectIndex)params->param1, kObjectLocation1); + getObjects()->updateModel((ObjectIndex)params->param1, kObjectModel1); if (params->param5 != kObjectLocation2) getObjects()->update((ObjectIndex)params->param1, (EntityIndex)params->param4, (ObjectLocation)params->param5, (CursorStyle)params->param6, (CursorStyle)params->param7); @@ -1090,15 +1090,15 @@ IMPLEMENT_FUNCTION_II(21, Mertens, function21, ObjectIndex, ObjectIndex) case kActionDefault: params->param3 = 1; params->param4 = getObjects()->get((ObjectIndex)params->param1).entity; - params->param5 = getObjects()->get((ObjectIndex)params->param1).location; - params->param6 = getObjects()->get((ObjectIndex)params->param1).cursor; - params->param7 = getObjects()->get((ObjectIndex)params->param1).cursor2; + params->param5 = getObjects()->get((ObjectIndex)params->param1).status; + params->param6 = getObjects()->get((ObjectIndex)params->param1).windowCursor; + params->param7 = getObjects()->get((ObjectIndex)params->param1).handleCursor; if (params->param2) { - params->param8 = getObjects()->get((ObjectIndex)params->param2).entity; - CURRENT_PARAM(1, 1) = getObjects()->get((ObjectIndex)params->param2).location; - CURRENT_PARAM(1, 2) = getObjects()->get((ObjectIndex)params->param2).cursor; - CURRENT_PARAM(1, 3) = getObjects()->get((ObjectIndex)params->param2).cursor2; + params->param8 = getObjects()->get((ObjectIndex)params->param2).entity; + CURRENT_PARAM(1, 1) = getObjects()->get((ObjectIndex)params->param2).status; + CURRENT_PARAM(1, 2) = getObjects()->get((ObjectIndex)params->param2).windowCursor; + CURRENT_PARAM(1, 3) = getObjects()->get((ObjectIndex)params->param2).handleCursor; getObjects()->update((ObjectIndex)params->param2, kEntityMertens, kObjectLocation1, kCursorHandKnock, kCursorHand); } @@ -1506,7 +1506,7 @@ IMPLEMENT_FUNCTION_I(26, Mertens, function26, bool) getData()->location = kLocationInsideCompartment; getEntities()->clearSequences(kEntityMertens); - getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).location, kCursorNormal, kCursorNormal); + getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).status, kCursorNormal, kCursorNormal); setCallback(3); setup_playSound16("ZNU1001"); @@ -1522,14 +1522,14 @@ IMPLEMENT_FUNCTION_I(26, Mertens, function26, bool) break; case 1: - getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).location, kCursorNormal, kCursorNormal); + getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).status, kCursorNormal, kCursorNormal); setCallback(2); setup_playSound16("CON1062"); break; case 2: - getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).location, kCursorHandKnock, kCursorHand); + getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).status, kCursorHandKnock, kCursorHand); callbackAction(); break; @@ -1617,7 +1617,7 @@ IMPLEMENT_FUNCTION_I(27, Mertens, tylerCompartment, MertensActionType) } if (Entity::updateParameter(params->param2, getState()->timeTicks, 150)) { - getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).location, kCursorNormal, kCursorNormal); + getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).status, kCursorNormal, kCursorNormal); setCallback(10); setup_playSound16("CON1018A"); @@ -1683,7 +1683,7 @@ label_callback11: } else { params->param3 = kTimeInvalid; - if (getObjects()->get(kObjectCompartment1).location == kObjectLocation1) { + if (getObjects()->get(kObjectCompartment1).status == kObjectLocation1) { getObjects()->update(kObjectCompartment1, kEntityPlayer, kObjectLocation1, kCursorNormal, kCursorNormal); setCallback(11); @@ -1742,11 +1742,11 @@ label_callback11: case kActionKnock: if (params->param1) { - getObjects()->update(kObjectCompartment1, kEntityMertens, getObjects()->get(kObjectCompartment1).location, kCursorNormal, kCursorNormal); + getObjects()->update(kObjectCompartment1, kEntityMertens, getObjects()->get(kObjectCompartment1).status, kCursorNormal, kCursorNormal); switch (params->param1) { default: - getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).location, kCursorHandKnock, kCursorHand); + getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).status, kCursorHandKnock, kCursorHand); callbackAction(); break; @@ -1774,7 +1774,7 @@ label_callback11: break; case kActionOpenDoor: - getSound()->playSound(kEntityPlayer, getObjects()->get(kObjectCompartment1).location == kObjectLocation1 ? "LIB012" : "LIB014"); + getSound()->playSound(kEntityPlayer, getObjects()->get(kObjectCompartment1).status == kObjectLocation1 ? "LIB012" : "LIB014"); if (getProgress().eventCorpseMovedFromFloor) { @@ -1828,7 +1828,7 @@ label_callback11: if (getEntities()->isInsideCompartment(kEntityPlayer, kCarGreenSleeping, kPosition_8200) || getEntities()->isInsideCompartment(kEntityPlayer, kCarGreenSleeping, kPosition_7850) || getEntities()->isOutsideAlexeiWindow()) { - getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).location, kCursorNormal, kCursorNormal); + getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).status, kCursorNormal, kCursorNormal); if (getEntities()->isOutsideAlexeiWindow()) getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49); @@ -1920,15 +1920,15 @@ label_callback11: case 8: case 9: - getObjects()->update(kObjectCompartment1, kEntityMertens, getObjects()->get(kObjectCompartment1).location, kCursorTalk, kCursorHand); + getObjects()->update(kObjectCompartment1, kEntityMertens, getObjects()->get(kObjectCompartment1).status, kCursorTalk, kCursorHand); break; case 10: - getObjects()->update(kObjectCompartment1, kEntityMertens, getObjects()->get(kObjectCompartment1).location, kCursorTalk, kCursorHand); + getObjects()->update(kObjectCompartment1, kEntityMertens, getObjects()->get(kObjectCompartment1).status, kCursorTalk, kCursorHand); goto label_callback10; case 11: - getObjects()->update(kObjectCompartment1, kEntityMertens, getObjects()->get(kObjectCompartment1).location, kCursorTalk, kCursorHand); + getObjects()->update(kObjectCompartment1, kEntityMertens, getObjects()->get(kObjectCompartment1).status, kCursorTalk, kCursorHand); goto label_callback11; case 13: @@ -1971,20 +1971,20 @@ label_callback11: case 23: getProgress().eventMertensAugustWaiting = true; - getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).location, kCursorHandKnock, kCursorHand); + getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).status, kCursorHandKnock, kCursorHand); callbackAction(); break; case 24: getProgress().eventMertensKronosInvitation = true; - getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).location, kCursorHandKnock, kCursorHand); + getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).status, kCursorHandKnock, kCursorHand); callbackAction(); break; case 25: - getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).location, kCursorHandKnock, kCursorHand); + getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).status, kCursorHandKnock, kCursorHand); callbackAction(); break; @@ -2182,7 +2182,7 @@ IMPLEMENT_FUNCTION_I(30, Mertens, function30, MertensActionType) case 2: if (getEntities()->isInsideCompartment(kEntityPlayer, kCarGreenSleeping, kPosition_7500)) { - getObjects()->update(kObjectCompartment2, kEntityPlayer, getObjects()->get(kObjectCompartment2).location, kCursorNormal, kCursorNormal); + getObjects()->update(kObjectCompartment2, kEntityPlayer, getObjects()->get(kObjectCompartment2).status, kCursorNormal, kCursorNormal); params->param3 = 1; } @@ -2192,7 +2192,7 @@ IMPLEMENT_FUNCTION_I(30, Mertens, function30, MertensActionType) case 3: if (getEntities()->isInsideCompartment(kEntityPlayer, kCarGreenSleeping, kPosition_6470)) { - getObjects()->update(kObjectCompartment3, kEntityPlayer, getObjects()->get(kObjectCompartment3).location, kCursorNormal, kCursorNormal); + getObjects()->update(kObjectCompartment3, kEntityPlayer, getObjects()->get(kObjectCompartment3).status, kCursorNormal, kCursorNormal); params->param3 = 1; } @@ -2220,7 +2220,7 @@ IMPLEMENT_FUNCTION_I(30, Mertens, function30, MertensActionType) case 5: if (params->param3) - getObjects()->update(kObjectCompartment2, kEntityPlayer, getObjects()->get(kObjectCompartment2).location, kCursorHandKnock, kCursorHand); + getObjects()->update(kObjectCompartment2, kEntityPlayer, getObjects()->get(kObjectCompartment2).status, kCursorHandKnock, kCursorHand); getEntities()->exitCompartment(kEntityMertens, kObjectCompartment2); @@ -2241,7 +2241,7 @@ IMPLEMENT_FUNCTION_I(30, Mertens, function30, MertensActionType) case 7: if (params->param3) - getObjects()->update(kObjectCompartment3, kEntityPlayer, getObjects()->get(kObjectCompartment3).location, kCursorHandKnock, kCursorHand); + getObjects()->update(kObjectCompartment3, kEntityPlayer, getObjects()->get(kObjectCompartment3).status, kCursorHandKnock, kCursorHand); getEntities()->exitCompartment(kEntityMertens, kObjectCompartment3); @@ -3688,9 +3688,9 @@ IMPLEMENT_FUNCTION(48, Mertens, function48) if (ENTITY_PARAM(2, 3)) { params->param1 = 1; - getObjects()->updateLocation2(kObjectCompartment2, kObjectLocation1); - getObjects()->updateLocation2(kObjectCompartment3, kObjectLocation1); - getObjects()->updateLocation2(kObjectCompartment4, kObjectLocation1); + getObjects()->updateModel(kObjectCompartment2, kObjectModel1); + getObjects()->updateModel(kObjectCompartment3, kObjectModel1); + getObjects()->updateModel(kObjectCompartment4, kObjectModel1); ENTITY_PARAM(1, 4) = 0; ENTITY_PARAM(1, 5) = 0; diff --git a/engines/lastexpress/entities/milos.cpp b/engines/lastexpress/entities/milos.cpp index 519a613497..76dc0aa0a0 100644 --- a/engines/lastexpress/entities/milos.cpp +++ b/engines/lastexpress/entities/milos.cpp @@ -433,16 +433,16 @@ IMPLEMENT_FUNCTION(14, Milos, function14) if (CURRENT_PARAM(1, 1) < getState()->timeTicks) { - if (getObjects()->get(kObjectCompartment1).location == kObjectLocation1) { + if (getObjects()->get(kObjectCompartment1).status == kObjectLocation1) { if (!Entity::updateParameter(CURRENT_PARAM(1, 2), getState()->timeTicks, 75)) break; - getObjects()->update(kObjectCompartment1, kEntityMilos, getObjects()->get(kObjectCompartment1).location, kCursorNormal, kCursorNormal); + getObjects()->update(kObjectCompartment1, kEntityMilos, getObjects()->get(kObjectCompartment1).status, kCursorNormal, kCursorNormal); ++params->param5; switch (params->param5) { default: - getObjects()->update(kObjectCompartment1, kEntityMilos, getObjects()->get(kObjectCompartment1).location, params->param3 < 1 ? kCursorTalk : kCursorNormal, kCursorHand); + getObjects()->update(kObjectCompartment1, kEntityMilos, getObjects()->get(kObjectCompartment1).status, params->param3 < 1 ? kCursorTalk : kCursorNormal, kCursorHand); CURRENT_PARAM(1, 2) = 0; break; @@ -466,19 +466,19 @@ IMPLEMENT_FUNCTION(14, Milos, function14) if (params->param7 < 3) { params->param5 = 1; - getObjects()->update(kObjectCompartment1, kEntityMilos, getObjects()->get(kObjectCompartment1).location, params->param3 < 1 ? kCursorTalk : kCursorNormal, kCursorHand); + getObjects()->update(kObjectCompartment1, kEntityMilos, getObjects()->get(kObjectCompartment1).status, params->param3 < 1 ? kCursorTalk : kCursorNormal, kCursorHand); CURRENT_PARAM(1, 2) = 0; break; } - getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).location, kCursorHandKnock, kCursorHand); + getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).status, kCursorHandKnock, kCursorHand); callbackAction(); break; } } else { if (getProgress().eventCorpseMovedFromFloor && getProgress().jacket != kJacketBlood) { - params->param6 = (getObjects()->get(kObjectCompartment1).location2 == kObjectLocation1) ? kEventMilosTylerCompartmentBedVisit : kEventMilosTylerCompartmentVisit; + params->param6 = (getObjects()->get(kObjectCompartment1).model == kObjectModel1) ? kEventMilosTylerCompartmentBedVisit : kEventMilosTylerCompartmentVisit; setCallback(3); setup_savegame(kSavegameTypeEvent, kEventMilosTylerCompartmentVisit); @@ -538,7 +538,7 @@ label_callback_12: setCallback(20); setup_playSound("LIB012"); } else if (!params->param3) { - getObjects()->update(kObjectCompartment1, kEntityMilos, getObjects()->get(kObjectCompartment1).location, kCursorNormal, kCursorNormal); + getObjects()->update(kObjectCompartment1, kEntityMilos, getObjects()->get(kObjectCompartment1).status, kCursorNormal, kCursorNormal); setCallback(22); setup_playSound16("MIL1032"); @@ -549,9 +549,9 @@ label_callback_12: if (getProgress().eventCorpseMovedFromFloor && getProgress().jacket != kJacketBlood) { if (params->param2) { getEntityData(kEntityPlayer)->location = kLocationInsideCompartment; - params->param6 = (getObjects()->get(kObjectCompartment1).location2 == kObjectLocation1) ? kEventMilosTylerCompartmentBed : kEventMilosTylerCompartment; + params->param6 = (getObjects()->get(kObjectCompartment1).model == kObjectModel1) ? kEventMilosTylerCompartmentBed : kEventMilosTylerCompartment; } else { - params->param6 = (getObjects()->get(kObjectCompartment1).location2 == kObjectLocation1) ? kEventMilosTylerCompartmentBedVisit : kEventMilosTylerCompartmentVisit; + params->param6 = (getObjects()->get(kObjectCompartment1).model == kObjectModel1) ? kEventMilosTylerCompartmentBedVisit : kEventMilosTylerCompartmentVisit; } setCallback(17); @@ -568,14 +568,14 @@ label_callback_12: if (getEntities()->isInsideCompartment(kEntityPlayer, kCarGreenSleeping, kPosition_8200) || getEntities()->isInsideCompartment(kEntityPlayer, kCarGreenSleeping, kPosition_7850) || getEntities()->isOutsideAlexeiWindow()) { - getObjects()->update(kObjectCompartment1, kEntityMilos, getObjects()->get(kObjectCompartment1).location, kCursorNormal, kCursorNormal); + getObjects()->update(kObjectCompartment1, kEntityMilos, getObjects()->get(kObjectCompartment1).status, kCursorNormal, kCursorNormal); if (getEntities()->isOutsideAlexeiWindow()) getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49); getSound()->playSound(kEntityPlayer, "LIB012"); - getObjects()->update(kObjectCompartment1, kEntityMilos, getObjects()->get(kObjectCompartment1).location, kCursorTalk, kCursorHand); + getObjects()->update(kObjectCompartment1, kEntityMilos, getObjects()->get(kObjectCompartment1).status, kCursorTalk, kCursorHand); params->param1 = 1; } else { @@ -644,7 +644,7 @@ label_callback_12: case 7: case 9: case 11: - getObjects()->update(kObjectCompartment1, kEntityMilos, getObjects()->get(kObjectCompartment1).location, params->param3 < 1 ? kCursorTalk : kCursorNormal, kCursorHand); + getObjects()->update(kObjectCompartment1, kEntityMilos, getObjects()->get(kObjectCompartment1).status, params->param3 < 1 ? kCursorTalk : kCursorNormal, kCursorHand); CURRENT_PARAM(1, 2) = 0; break; @@ -682,13 +682,13 @@ label_callback_12: break; case 16: - getSound()->playSound(kEntityPlayer, getObjects()->get(kObjectCompartment1).location == kObjectLocation1 ? "LIB032" : "LIB014"); + getSound()->playSound(kEntityPlayer, getObjects()->get(kObjectCompartment1).status == kObjectLocation1 ? "LIB032" : "LIB014"); getAction()->playAnimation(kEventMilosCorpseFloor); getLogic()->gameOver(kSavegameTypeIndex, 1, getProgress().eventCorpseMovedFromFloor ? kSceneGameOverBloodJacket : kSceneGameOverPolice1, true); break; case 17: - getSound()->playSound(kEntityPlayer, getObjects()->get(kObjectCompartment1).location == kObjectLocation1 ? "LIB032" : "LIB014"); + getSound()->playSound(kEntityPlayer, getObjects()->get(kObjectCompartment1).status == kObjectLocation1 ? "LIB032" : "LIB014"); getObjects()->update(kObjectCompartment1, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand); getObjects()->update(kObjectOutsideTylerCompartment, kEntityPlayer, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue); getAction()->playAnimation((EventIndex)params->param6); @@ -708,7 +708,7 @@ label_callback_12: case 22: params->param3 = 1; - getObjects()->update(kObjectCompartment1, kEntityMilos, getObjects()->get(kObjectCompartment1).location, kCursorNormal, kCursorHand); + getObjects()->update(kObjectCompartment1, kEntityMilos, getObjects()->get(kObjectCompartment1).status, kCursorNormal, kCursorHand); break; } break; diff --git a/engines/lastexpress/entities/rebecca.cpp b/engines/lastexpress/entities/rebecca.cpp index 5bcb6aef85..8c779baeba 100644 --- a/engines/lastexpress/entities/rebecca.cpp +++ b/engines/lastexpress/entities/rebecca.cpp @@ -665,7 +665,7 @@ IMPLEMENT_FUNCTION(21, Rebecca, chapter1) getObjects()->update(kObject52, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand); getObjects()->update(kObjectOutsideBetweenCompartments, kEntityPlayer, kObjectLocationNone, kCursorKeepValue, kCursorKeepValue); - getObjects()->updateLocation2(kObject110, kObjectLocation1); + getObjects()->updateModel(kObject110, kObjectModel1); getData()->entityPosition = kPosition_2830; getData()->location = kLocationInsideCompartment; @@ -1051,7 +1051,7 @@ IMPLEMENT_FUNCTION(28, Rebecca, chapter2) getObjects()->update(kObjectCompartmentE, kEntityPlayer, kObjectLocation1, kCursorHandKnock, kCursorHand); getObjects()->update(kObject52, kEntityPlayer, kObjectLocation1, kCursorHandKnock, kCursorHand); - getObjects()->updateLocation2(kObject110, kObjectLocation2); + getObjects()->updateModel(kObject110, kObjectModel2); ENTITY_PARAM(0, 2) = 1; break; @@ -1574,7 +1574,7 @@ IMPLEMENT_FUNCTION(42, Rebecca, chapter4) getData()->clothes = kClothesDefault; getData()->inventoryItem = kItemNone; - getObjects()->updateLocation2(kObject110, kObjectLocation3); + getObjects()->updateModel(kObject110, kObjectModel3); ENTITY_PARAM(0, 1) = 0; ENTITY_PARAM(0, 2) = 1; @@ -1750,7 +1750,7 @@ IMPLEMENT_FUNCTION(46, Rebecca, chapter5) getData()->car = kCarRestaurant; getData()->inventoryItem = kItemNone; - getObjects()->updateLocation2(kObject110, kObjectLocation4); + getObjects()->updateModel(kObject110, kObjectModel4); break; } IMPLEMENT_FUNCTION_END diff --git a/engines/lastexpress/entities/tatiana.cpp b/engines/lastexpress/entities/tatiana.cpp index 432def6253..d6bf4479e9 100644 --- a/engines/lastexpress/entities/tatiana.cpp +++ b/engines/lastexpress/entities/tatiana.cpp @@ -835,7 +835,7 @@ IMPLEMENT_FUNCTION(27, Tatiana, function27) break; case 1: - RESET_ENTITY_STATE(kEntityAlexei, Alexei, setup_function30); + RESET_ENTITY_STATE(kEntityAlexei, Alexei, setup_atBreakfast); getAction()->playAnimation(kEventTatianaBreakfastAlexei); getInventory()->addItem(kItemParchemin); getInventory()->setLocationAndProcess(kItem11, kObjectLocation1); @@ -843,7 +843,7 @@ IMPLEMENT_FUNCTION(27, Tatiana, function27) break; case 2: - RESET_ENTITY_STATE(kEntityAlexei, Alexei, setup_function30); + RESET_ENTITY_STATE(kEntityAlexei, Alexei, setup_atBreakfast); getAction()->playAnimation(kEventTatianaBreakfast); if (getInventory()->hasItem(kItemParchemin)) { getAction()->playAnimation(kEventTatianaBreakfastGivePoem); @@ -1917,7 +1917,7 @@ IMPLEMENT_FUNCTION(47, Tatiana, function47) case 3: case 4: - if (ENTITY_PARAM(0, 1) && getObjects()->get(kObjectCompartment1).location2 == kObjectLocation1) { + if (ENTITY_PARAM(0, 1) && getObjects()->get(kObjectCompartment1).model == kObjectModel1) { setup_function48(); } else { setCallback(4); @@ -1940,7 +1940,7 @@ IMPLEMENT_FUNCTION(48, Tatiana, function48) if (!getEvent(kEventTatianaTylerCompartment) && getEntities()->isInsideCompartment(kEntityPlayer, kCarGreenSleeping, kPosition_8200)) { params->param1 = 1; getProgress().field_E4 = 1; - getObjects()->update(kObjectCompartment1, kEntityTatiana, getObjects()->get(kObjectCompartment1).location, kCursorNormal, kCursorHand); + getObjects()->update(kObjectCompartment1, kEntityTatiana, getObjects()->get(kObjectCompartment1).status, kCursorNormal, kCursorHand); } if (!params->param1) @@ -1948,7 +1948,7 @@ IMPLEMENT_FUNCTION(48, Tatiana, function48) } if (!getEntities()->checkFields19(kEntityPlayer, kCarGreenSleeping, kPosition_7850)) { - getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).location, kCursorHandKnock, kCursorHand); + getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).status, kCursorHandKnock, kCursorHand); params->param1 = 0; } @@ -1964,7 +1964,7 @@ IMPLEMENT_FUNCTION(48, Tatiana, function48) label_end: if (getEvent(kEventTatianaTylerCompartment) || getState()->time > kTime2475000) { if (params->param1) - getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).location, kCursorHandKnock, kCursorHand); + getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).status, kCursorHandKnock, kCursorHand); getProgress().field_E4 = 0; getEntities()->exitCompartment(kEntityTatiana, kObjectCompartment2, true); @@ -2040,7 +2040,7 @@ label_end: case kAction238790488: params->param1 = 0; - getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).location, kCursorHandKnock, kCursorHand); + getObjects()->update(kObjectCompartment1, kEntityPlayer, getObjects()->get(kObjectCompartment1).status, kCursorHandKnock, kCursorHand); getEntities()->exitCompartment(kEntityTatiana, kObjectCompartment2, true); getEntities()->clearSequences(kEntityTatiana); diff --git a/engines/lastexpress/entities/vassili.cpp b/engines/lastexpress/entities/vassili.cpp index 4695f8831f..67135c426f 100644 --- a/engines/lastexpress/entities/vassili.cpp +++ b/engines/lastexpress/entities/vassili.cpp @@ -112,7 +112,7 @@ IMPLEMENT_FUNCTION(5, Vassili, chapter1Handler) break; } - if (!params->param2 && getObjects()->get(kObjectCompartmentA).location == kObjectLocation1) { + if (!params->param2 && getObjects()->get(kObjectCompartmentA).status == kObjectLocation1) { params->param2 = 1; getEntities()->drawSequenceLeft(kEntityVassili, "303A"); getObjects()->update(kObjectCompartmentA, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand); @@ -289,7 +289,7 @@ IMPLEMENT_FUNCTION(9, Vassili, function9) case kActionDefault: case kActionDrawScene: - if ((getObjects()->get(kObjectCompartmentA).location == kObjectLocation2 && getEntities()->isPlayerPosition(kCarRedSleeping, 17)) + if ((getObjects()->get(kObjectCompartmentA).status == kObjectLocation2 && getEntities()->isPlayerPosition(kCarRedSleeping, 17)) || getEntities()->isPlayerPosition(kCarRedSleeping, 18) || getEntities()->isPlayerPosition(kCarRedSleeping, 37) || getEntities()->isPlayerPosition(kCarRedSleeping, 38) @@ -388,7 +388,7 @@ IMPLEMENT_FUNCTION(12, Vassili, chapter2) getData()->inventoryItem = kItemNone; getObjects()->update(kObjectCompartmentA, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand); - getObjects()->updateLocation2(kObjectCompartmentA, kObjectLocation1); + getObjects()->updateModel(kObjectCompartmentA, kObjectModel1); break; } IMPLEMENT_FUNCTION_END @@ -532,7 +532,7 @@ IMPLEMENT_FUNCTION(16, Vassili, chapter4) getData()->inventoryItem = kItemNone; getObjects()->update(kObjectCompartmentA, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand); - getObjects()->updateLocation2(kObjectCompartmentA, kObjectLocation1); + getObjects()->updateModel(kObjectCompartmentA, kObjectModel1); break; } IMPLEMENT_FUNCTION_END diff --git a/engines/lastexpress/entities/verges.cpp b/engines/lastexpress/entities/verges.cpp index 68c0813013..f1e980842e 100644 --- a/engines/lastexpress/entities/verges.cpp +++ b/engines/lastexpress/entities/verges.cpp @@ -1816,7 +1816,7 @@ IMPLEMENT_FUNCTION(41, Verges, askPassengersToStayInCompartments) break; case kActionDefault: - getObjects()->updateLocation2(kObjectRestaurantCar, kObjectLocation3); + getObjects()->updateModel(kObjectRestaurantCar, kObjectModel3); getData()->car = kCarRedSleeping; getData()->entityPosition = kPosition_9460; getData()->location = kLocationInsideCompartment; diff --git a/engines/lastexpress/entities/yasmin.cpp b/engines/lastexpress/entities/yasmin.cpp index 1d280f51e0..67963e50f6 100644 --- a/engines/lastexpress/entities/yasmin.cpp +++ b/engines/lastexpress/entities/yasmin.cpp @@ -39,22 +39,22 @@ Yasmin::Yasmin(LastExpressEngine *engine) : Entity(engine, kEntityYasmin) { ADD_CALLBACK_FUNCTION(Yasmin, playSound); ADD_CALLBACK_FUNCTION(Yasmin, updateFromTime); ADD_CALLBACK_FUNCTION(Yasmin, updateEntity); - ADD_CALLBACK_FUNCTION(Yasmin, function6); - ADD_CALLBACK_FUNCTION(Yasmin, function7); + ADD_CALLBACK_FUNCTION(Yasmin, goEtoG); + ADD_CALLBACK_FUNCTION(Yasmin, goGtoE); ADD_CALLBACK_FUNCTION(Yasmin, chapter1); - ADD_CALLBACK_FUNCTION(Yasmin, chapter1Handler); + ADD_CALLBACK_FUNCTION(Yasmin, part1); ADD_CALLBACK_FUNCTION(Yasmin, function10); ADD_CALLBACK_FUNCTION(Yasmin, chapter2); - ADD_CALLBACK_FUNCTION(Yasmin, chapter2Handler); + ADD_CALLBACK_FUNCTION(Yasmin, part2); ADD_CALLBACK_FUNCTION(Yasmin, chapter3); - ADD_CALLBACK_FUNCTION(Yasmin, chapter3Handler); + ADD_CALLBACK_FUNCTION(Yasmin, part3); ADD_CALLBACK_FUNCTION(Yasmin, chapter4); - ADD_CALLBACK_FUNCTION(Yasmin, chapter4Handler); + ADD_CALLBACK_FUNCTION(Yasmin, part4); ADD_CALLBACK_FUNCTION(Yasmin, function17); ADD_CALLBACK_FUNCTION(Yasmin, chapter5); - ADD_CALLBACK_FUNCTION(Yasmin, chapter5Handler); + ADD_CALLBACK_FUNCTION(Yasmin, part5); ADD_CALLBACK_FUNCTION(Yasmin, function20); - ADD_CALLBACK_FUNCTION(Yasmin, function21); + ADD_CALLBACK_FUNCTION(Yasmin, hiding); ADD_NULL_FUNCTION(); } @@ -98,7 +98,7 @@ IMPLEMENT_FUNCTION_II(5, Yasmin, updateEntity, CarIndex, EntityPosition) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(6, Yasmin, function6) +IMPLEMENT_FUNCTION(6, Yasmin, goEtoG) switch (savepoint.action) { default: break; @@ -138,7 +138,7 @@ IMPLEMENT_FUNCTION(6, Yasmin, function6) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(7, Yasmin, function7) +IMPLEMENT_FUNCTION(7, Yasmin, goGtoE) switch (savepoint.action) { default: break; @@ -184,7 +184,7 @@ IMPLEMENT_FUNCTION(8, Yasmin, chapter1) break; case kActionNone: - Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Yasmin, setup_chapter1Handler)); + Entity::timeCheck(kTimeChapter1, params->param1, WRAP_SETUP_FUNCTION(Yasmin, setup_part1)); break; case kActionDefault: @@ -196,16 +196,16 @@ IMPLEMENT_FUNCTION(8, Yasmin, chapter1) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(9, Yasmin, chapter1Handler) +IMPLEMENT_FUNCTION(9, Yasmin, part1) switch (savepoint.action) { default: break; case kActionNone: - if (Entity::timeCheckCallback(kTime1093500, params->param1, 1, WRAP_SETUP_FUNCTION(Yasmin, setup_function6))) + if (Entity::timeCheckCallback(kTime1093500, params->param1, 1, WRAP_SETUP_FUNCTION(Yasmin, setup_goEtoG))) break; - if (Entity::timeCheckCallback(kTime1161000, params->param2, 3, WRAP_SETUP_FUNCTION(Yasmin, setup_function7))) + if (Entity::timeCheckCallback(kTime1161000, params->param2, 3, WRAP_SETUP_FUNCTION(Yasmin, setup_goGtoE))) break; if (Entity::timeCheckPlaySoundUpdatePosition(kTime1162800, params->param3, 4, "Har1102", kPosition_4070)) @@ -217,7 +217,7 @@ IMPLEMENT_FUNCTION(9, Yasmin, chapter1Handler) if (Entity::timeCheckCallback(kTime1174500, params->param5, 6, "Har1106", WRAP_SETUP_FUNCTION_S(Yasmin, setup_playSound))) break; - Entity::timeCheckCallback(kTime1183500, params->param6, 7, WRAP_SETUP_FUNCTION(Yasmin, setup_function6)); + Entity::timeCheckCallback(kTime1183500, params->param6, 7, WRAP_SETUP_FUNCTION(Yasmin, setup_goEtoG)); break; case kActionCallback: @@ -232,7 +232,7 @@ IMPLEMENT_FUNCTION(9, Yasmin, chapter1Handler) break; case 2: - if (Entity::timeCheckCallback(kTime1161000, params->param2, 3, WRAP_SETUP_FUNCTION(Yasmin, setup_function7))) + if (Entity::timeCheckCallback(kTime1161000, params->param2, 3, WRAP_SETUP_FUNCTION(Yasmin, setup_goGtoE))) break; // Fallback to case 3 @@ -252,7 +252,7 @@ IMPLEMENT_FUNCTION(9, Yasmin, chapter1Handler) // Fallback to case 6 case 6: - Entity::timeCheckCallback(kTime1183500, params->param6, 7, WRAP_SETUP_FUNCTION(Yasmin, setup_function6)); + Entity::timeCheckCallback(kTime1183500, params->param6, 7, WRAP_SETUP_FUNCTION(Yasmin, setup_goEtoG)); break; } break; @@ -282,18 +282,18 @@ IMPLEMENT_FUNCTION(11, Yasmin, chapter2) getData()->clothes = kClothesDefault; getData()->inventoryItem = kItemNone; - setup_chapter2Handler(); + setup_part2(); } IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(12, Yasmin, chapter2Handler) +IMPLEMENT_FUNCTION(12, Yasmin, part2) switch (savepoint.action) { default: break; case kActionNone: - if (Entity::timeCheckCallback(kTime1759500, params->param1, 1, WRAP_SETUP_FUNCTION(Yasmin, setup_function7))) + if (Entity::timeCheckCallback(kTime1759500, params->param1, 1, WRAP_SETUP_FUNCTION(Yasmin, setup_goGtoE))) break; if (getState()->time > kTime1800000 && !params->param2) { @@ -327,7 +327,7 @@ IMPLEMENT_FUNCTION(13, Yasmin, chapter3) break; case kActionNone: - setup_chapter3Handler(); + setup_part3(); break; case kActionDefault: @@ -341,19 +341,19 @@ IMPLEMENT_FUNCTION(13, Yasmin, chapter3) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(14, Yasmin, chapter3Handler) +IMPLEMENT_FUNCTION(14, Yasmin, part3) switch (savepoint.action) { default: break; case kActionNone: - if (Entity::timeCheckCallback(kTime2062800, params->param1, 1, WRAP_SETUP_FUNCTION(Yasmin, setup_function6))) + if (Entity::timeCheckCallback(kTime2062800, params->param1, 1, WRAP_SETUP_FUNCTION(Yasmin, setup_goEtoG))) break; - if (Entity::timeCheckCallback(kTime2106000, params->param2, 2, WRAP_SETUP_FUNCTION(Yasmin, setup_function7))) + if (Entity::timeCheckCallback(kTime2106000, params->param2, 2, WRAP_SETUP_FUNCTION(Yasmin, setup_goGtoE))) break; - Entity::timeCheckCallback(kTime2160000, params->param3, 3, WRAP_SETUP_FUNCTION(Yasmin, setup_function6)); + Entity::timeCheckCallback(kTime2160000, params->param3, 3, WRAP_SETUP_FUNCTION(Yasmin, setup_goEtoG)); break; case kActionCallback: @@ -362,12 +362,12 @@ IMPLEMENT_FUNCTION(14, Yasmin, chapter3Handler) break; case 1: - if (Entity::timeCheckCallback(kTime2106000, params->param2, 2, WRAP_SETUP_FUNCTION(Yasmin, setup_function7))) + if (Entity::timeCheckCallback(kTime2106000, params->param2, 2, WRAP_SETUP_FUNCTION(Yasmin, setup_goGtoE))) break; // Fallback to case 2 case 2: - Entity::timeCheckCallback(kTime2160000, params->param3, 3, WRAP_SETUP_FUNCTION(Yasmin, setup_function6)); + Entity::timeCheckCallback(kTime2160000, params->param3, 3, WRAP_SETUP_FUNCTION(Yasmin, setup_goEtoG)); break; } break; @@ -381,7 +381,7 @@ IMPLEMENT_FUNCTION(15, Yasmin, chapter4) break; case kActionNone: - setup_chapter4Handler(); + setup_part4(); break; case kActionDefault: @@ -393,16 +393,16 @@ IMPLEMENT_FUNCTION(15, Yasmin, chapter4) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(16, Yasmin, chapter4Handler) +IMPLEMENT_FUNCTION(16, Yasmin, part4) switch (savepoint.action) { default: break; case kActionNone: - if (Entity::timeCheckCallback(kTime2457000, params->param1, 1, WRAP_SETUP_FUNCTION(Yasmin, setup_function7))) + if (Entity::timeCheckCallback(kTime2457000, params->param1, 1, WRAP_SETUP_FUNCTION(Yasmin, setup_goGtoE))) break; - Entity::timeCheckCallback(kTime2479500, params->param2, 3, WRAP_SETUP_FUNCTION(Yasmin, setup_function6)); + Entity::timeCheckCallback(kTime2479500, params->param2, 3, WRAP_SETUP_FUNCTION(Yasmin, setup_goEtoG)); break; case kActionCallback: @@ -417,7 +417,7 @@ IMPLEMENT_FUNCTION(16, Yasmin, chapter4Handler) break; case 2: - Entity::timeCheckCallback(kTime2479500, params->param2, 3, WRAP_SETUP_FUNCTION(Yasmin, setup_function6)); + Entity::timeCheckCallback(kTime2479500, params->param2, 3, WRAP_SETUP_FUNCTION(Yasmin, setup_goEtoG)); break; } break; @@ -437,7 +437,7 @@ IMPLEMENT_FUNCTION(18, Yasmin, chapter5) break; case kActionNone: - setup_chapter5Handler(); + setup_part5(); break; case kActionDefault: @@ -453,7 +453,7 @@ IMPLEMENT_FUNCTION(18, Yasmin, chapter5) IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(19, Yasmin, chapter5Handler) +IMPLEMENT_FUNCTION(19, Yasmin, part5) if (savepoint.action == kActionProceedChapter5) setup_function20(); IMPLEMENT_FUNCTION_END @@ -468,7 +468,7 @@ IMPLEMENT_FUNCTION(20, Yasmin, function20) if (!Entity::updateParameter(params->param1, getState()->time, 2700)) break; - setup_function21(); + setup_hiding(); break; case kActionDefault: @@ -479,14 +479,14 @@ IMPLEMENT_FUNCTION(20, Yasmin, function20) case kActionDrawScene: if (getEntities()->isInsideTrainCar(kEntityPlayer, kCarGreenSleeping)) { - setup_function21(); + setup_hiding(); } break; } IMPLEMENT_FUNCTION_END ////////////////////////////////////////////////////////////////////////// -IMPLEMENT_FUNCTION(21, Yasmin, function21) +IMPLEMENT_FUNCTION(21, Yasmin, hiding) switch (savepoint.action) { default: break; diff --git a/engines/lastexpress/entities/yasmin.h b/engines/lastexpress/entities/yasmin.h index b1413f5c2f..8fa8c10bb1 100644 --- a/engines/lastexpress/entities/yasmin.h +++ b/engines/lastexpress/entities/yasmin.h @@ -70,8 +70,8 @@ public: */ DECLARE_FUNCTION_2(updateEntity, CarIndex car, EntityPosition entityPosition) - DECLARE_FUNCTION(function6) - DECLARE_FUNCTION(function7) + DECLARE_FUNCTION(goEtoG) + DECLARE_FUNCTION(goGtoE) /** * Setup Chapter 1 @@ -81,7 +81,7 @@ public: /** * Handle Chapter 1 events */ - DECLARE_FUNCTION(chapter1Handler) + DECLARE_FUNCTION(part1) DECLARE_FUNCTION(function10) @@ -93,7 +93,7 @@ public: /** * Handle Chapter 2 events */ - DECLARE_FUNCTION(chapter2Handler) + DECLARE_FUNCTION(part2) /** * Setup Chapter 3 @@ -103,7 +103,7 @@ public: /** * Handle Chapter 3 events */ - DECLARE_FUNCTION(chapter3Handler) + DECLARE_FUNCTION(part3) /** * Setup Chapter 4 @@ -113,7 +113,7 @@ public: /** * Handle Chapter 4 events */ - DECLARE_FUNCTION(chapter4Handler) + DECLARE_FUNCTION(part4) DECLARE_FUNCTION(function17) @@ -125,10 +125,10 @@ public: /** * Handle Chapter 5 events */ - DECLARE_FUNCTION(chapter5Handler) + DECLARE_FUNCTION(part5) DECLARE_FUNCTION(function20) - DECLARE_FUNCTION(function21) + DECLARE_FUNCTION(hiding) DECLARE_NULL_FUNCTION() }; diff --git a/engines/lastexpress/fight/fight.cpp b/engines/lastexpress/fight/fight.cpp index 49a9b85657..944b1cb4ac 100644 --- a/engines/lastexpress/fight/fight.cpp +++ b/engines/lastexpress/fight/fight.cpp @@ -222,7 +222,7 @@ Fight::FightEndType Fight::setup(FightType type) { break; case kFightMilos: - sceneIndex = (getObjects()->get(kObjectCompartment1).location2 < kObjectLocation3) ? kSceneFightMilos : kSceneFightMilosBedOpened; + sceneIndex = (getObjects()->get(kObjectCompartment1).model < kObjectModel3) ? kSceneFightMilos : kSceneFightMilosBedOpened; break; case kFightAnna: diff --git a/engines/lastexpress/game/action.cpp b/engines/lastexpress/game/action.cpp index 796abf2ce7..c6ea6f6c8a 100644 --- a/engines/lastexpress/game/action.cpp +++ b/engines/lastexpress/game/action.cpp @@ -351,42 +351,42 @@ Action::Action(LastExpressEngine *engine) : _engine(engine) { ADD_ACTION(savePoint); ADD_ACTION(playSound); ADD_ACTION(playMusic); - ADD_ACTION(knock); + ADD_ACTION(knock); // 5 ADD_ACTION(compartment); ADD_ACTION(playSounds); ADD_ACTION(playAnimation); ADD_ACTION(openCloseObject); - ADD_ACTION(updateObjetLocation2); - ADD_ACTION(setItemLocation); - ADD_ACTION(knockNoSound); + ADD_ACTION(setModel); // 10 + ADD_ACTION(setItem); + ADD_ACTION(knockInside); ADD_ACTION(pickItem); ADD_ACTION(dropItem); - ADD_ACTION(dummy); + ADD_ACTION(dummy); // 15 ADD_ACTION(enterCompartment); ADD_ACTION(dummy); - ADD_ACTION(getOutsideTrain); - ADD_ACTION(slip); - ADD_ACTION(getInsideTrain); - ADD_ACTION(climbUpTrain); + ADD_ACTION(leanOutWindow); + ADD_ACTION(almostFall); + ADD_ACTION(climbInWindow); // 20 + ADD_ACTION(climbLadder); ADD_ACTION(climbDownTrain); - ADD_ACTION(jumpUpDownTrain); - ADD_ACTION(unbound); - ADD_ACTION(25); - ADD_ACTION(26); + ADD_ACTION(kronosSanctum); + ADD_ACTION(escapeBaggage); + ADD_ACTION(enterBaggage); // 25 + ADD_ACTION(bombPuzzle); ADD_ACTION(27); - ADD_ACTION(concertSitCough); + ADD_ACTION(kronosConcert); ADD_ACTION(29); - ADD_ACTION(catchBeetle); + ADD_ACTION(catchBeetle); // 30 ADD_ACTION(exitCompartment); - ADD_ACTION(32); - ADD_ACTION(useWhistle); + ADD_ACTION(outsideTrain); + ADD_ACTION(firebirdPuzzle); ADD_ACTION(openMatchBox); - ADD_ACTION(openBed); + ADD_ACTION(openBed); // 35 ADD_ACTION(dummy); ADD_ACTION(dialog); ADD_ACTION(eggBox); ADD_ACTION(39); - ADD_ACTION(bed); + ADD_ACTION(bed); // 40 ADD_ACTION(playMusicChapter); ADD_ACTION(playMusicChapterSetupTrain); ADD_ACTION(switchChapter); @@ -521,7 +521,7 @@ IMPLEMENT_ACTION(compartment) return kSceneNone; } - ObjectLocation location = getObjects()->get(compartment).location; + ObjectLocation location = getObjects()->get(compartment).status; if (location == kObjectLocation1 || location == kObjectLocation3 || getEntities()->checkFields2(compartment)) { if (location != kObjectLocation1 || getEntities()->checkFields2(compartment) @@ -625,14 +625,14 @@ IMPLEMENT_ACTION(openCloseObject) ////////////////////////////////////////////////////////////////////////// // Action 10 -IMPLEMENT_ACTION(updateObjetLocation2) +IMPLEMENT_ACTION(setModel) ObjectIndex object = (ObjectIndex)hotspot.param1; - ObjectLocation location = (ObjectLocation)hotspot.param2; + ObjectModel model = (ObjectModel)hotspot.param2; if (object >= kObjectMax) return kSceneInvalid; - getObjects()->updateLocation2(object, location); + getObjects()->updateModel(object, model); if (object != kObject112 || getSoundQueue()->isBuffered("LIB096")) { if (object == 1) @@ -646,13 +646,13 @@ IMPLEMENT_ACTION(updateObjetLocation2) ////////////////////////////////////////////////////////////////////////// // Action 11 -IMPLEMENT_ACTION(setItemLocation) +IMPLEMENT_ACTION(setItem) InventoryItem item = (InventoryItem)hotspot.param1; if (item >= kPortraitOriginal) return kSceneInvalid; Inventory::InventoryEntry *entry = getInventory()->get(item); - if (entry->isPresent) + if (entry->inPocket) return kSceneInvalid; entry->location = (ObjectLocation)hotspot.param2; @@ -667,7 +667,7 @@ IMPLEMENT_ACTION(setItemLocation) ////////////////////////////////////////////////////////////////////////// // Action 12 -IMPLEMENT_ACTION(knockNoSound) +IMPLEMENT_ACTION(knockInside) ObjectIndex object = (ObjectIndex)hotspot.param1; if (object >= kObjectMax) return kSceneInvalid; @@ -726,7 +726,7 @@ IMPLEMENT_ACTION(pickItem) break; case kItemBomb: - RESET_ENTITY_STATE(kEntityAbbot, Abbot, setup_pickBomb); + RESET_ENTITY_STATE(kEntityAbbot, Abbot, setup_catchCath); break; case kItemBriefcase: @@ -808,7 +808,7 @@ IMPLEMENT_ACTION(dropItem) ////////////////////////////////////////////////////////////////////////// // Action 16 IMPLEMENT_ACTION(enterCompartment) - if (getObjects()->get(kObjectCompartment1).location == kObjectLocation1 || getObjects()->get(kObjectCompartment1).location == kObjectLocation3 || getInventory()->getSelectedItem() == kItemKey) + if (getObjects()->get(kObjectCompartment1).status == kObjectLocation1 || getObjects()->get(kObjectCompartment1).status == kObjectLocation3 || getInventory()->getSelectedItem() == kItemKey) return action_compartment(hotspot); if (getProgress().eventCorpseFound) { @@ -842,12 +842,12 @@ IMPLEMENT_ACTION(enterCompartment) ////////////////////////////////////////////////////////////////////////// // Action 18 -IMPLEMENT_ACTION(getOutsideTrain) +IMPLEMENT_ACTION(leanOutWindow) ObjectIndex object = (ObjectIndex)hotspot.param1; - if ((getEvent(kEventCathLookOutsideWindowDay) || getEvent(kEventCathLookOutsideWindowNight) || getObjects()->get(kObjectCompartment1).location2 == kObjectLocation1) + if ((getEvent(kEventCathLookOutsideWindowDay) || getEvent(kEventCathLookOutsideWindowNight) || getObjects()->get(kObjectCompartment1).model == kObjectModel1) && getProgress().isTrainRunning - && (object != kObjectOutsideAnnaCompartment || (!getEntities()->isInsideCompartment(kEntityRebecca, kCarRedSleeping, kPosition_4840) && getObjects()->get(kObjectOutsideBetweenCompartments).location == kObjectLocation2)) + && (object != kObjectOutsideAnnaCompartment || (!getEntities()->isInsideCompartment(kEntityRebecca, kCarRedSleeping, kPosition_4840) && getObjects()->get(kObjectOutsideBetweenCompartments).status == kObjectLocation2)) && getInventory()->getSelectedItem() != kItemFirebird && getInventory()->getSelectedItem() != kItemBriefcase) { @@ -887,7 +887,7 @@ IMPLEMENT_ACTION(getOutsideTrain) ////////////////////////////////////////////////////////////////////////// // Action 19 -IMPLEMENT_ACTION(slip) +IMPLEMENT_ACTION(almostFall) switch((ObjectIndex)hotspot.param1) { default: return kSceneInvalid; @@ -911,7 +911,7 @@ IMPLEMENT_ACTION(slip) ////////////////////////////////////////////////////////////////////////// // Action 20 -IMPLEMENT_ACTION(getInsideTrain) +IMPLEMENT_ACTION(climbInWindow) switch ((ObjectIndex)hotspot.param1) { default: return kSceneInvalid; @@ -937,7 +937,7 @@ IMPLEMENT_ACTION(getInsideTrain) ////////////////////////////////////////////////////////////////////////// // Action 21 -IMPLEMENT_ACTION(climbUpTrain) +IMPLEMENT_ACTION(climbLadder) byte action = hotspot.param1; if (action != 1 && action != 2) @@ -999,7 +999,7 @@ IMPLEMENT_ACTION(climbDownTrain) ////////////////////////////////////////////////////////////////////////// // Action 23 -IMPLEMENT_ACTION(jumpUpDownTrain) +IMPLEMENT_ACTION(kronosSanctum) switch (hotspot.param1) { default: break; @@ -1038,7 +1038,7 @@ IMPLEMENT_ACTION(jumpUpDownTrain) ////////////////////////////////////////////////////////////////////////// // Action 24 -IMPLEMENT_ACTION(unbound) +IMPLEMENT_ACTION(escapeBaggage) byte action = hotspot.param1; switch (action) { @@ -1086,7 +1086,7 @@ IMPLEMENT_ACTION(unbound) ////////////////////////////////////////////////////////////////////////// // Action 25 -IMPLEMENT_ACTION(25) +IMPLEMENT_ACTION(enterBaggage) switch(hotspot.param1) { default: break; @@ -1103,7 +1103,7 @@ IMPLEMENT_ACTION(25) case 3: getSound()->playSoundEvent(kEntityPlayer, 43); if (!getInventory()->hasItem(kItemKey) && !getEvent(kEventAnnaBaggageArgument)) { - RESET_ENTITY_STATE(kEntityAnna, Anna, setup_baggage); + RESET_ENTITY_STATE(kEntityAnna, Anna, setup_baggageFight); return kSceneNone; } break; @@ -1114,7 +1114,7 @@ IMPLEMENT_ACTION(25) ////////////////////////////////////////////////////////////////////////// // Action 26 -IMPLEMENT_ACTION(26) +IMPLEMENT_ACTION(bombPuzzle) switch(hotspot.param1) { default: return kSceneInvalid; @@ -1168,7 +1168,7 @@ IMPLEMENT_ACTION(27) ////////////////////////////////////////////////////////////////////////// // Action 28 -IMPLEMENT_ACTION(concertSitCough) +IMPLEMENT_ACTION(kronosConcert) switch(hotspot.param1) { default: return kSceneInvalid; @@ -1224,7 +1224,7 @@ IMPLEMENT_ACTION(exitCompartment) getProgress().field_30 = 1; } - getObjects()->updateLocation2(kObjectCompartment1, (ObjectLocation)hotspot.param2); + getObjects()->updateModel(kObjectCompartment1, (ObjectModel)hotspot.param2); // fall to case enterCompartment action return action_enterCompartment(hotspot); @@ -1232,7 +1232,7 @@ IMPLEMENT_ACTION(exitCompartment) ////////////////////////////////////////////////////////////////////////// // Action 32 -IMPLEMENT_ACTION(32) +IMPLEMENT_ACTION(outsideTrain) switch(hotspot.param1) { default: break; @@ -1273,7 +1273,7 @@ IMPLEMENT_ACTION(32) ////////////////////////////////////////////////////////////////////////// // Action 33 -IMPLEMENT_ACTION(useWhistle) +IMPLEMENT_ACTION(firebirdPuzzle) EventIndex evt = kEventNone; SceneIndex sceneIndex = kSceneInvalid; @@ -1335,7 +1335,7 @@ IMPLEMENT_ACTION(useWhistle) IMPLEMENT_ACTION(openMatchBox) // If the match is already in the inventory, do nothing if (!getInventory()->get(kItemMatch)->location - || getInventory()->get(kItemMatch)->isPresent) + || getInventory()->get(kItemMatch)->inPocket) return kSceneInvalid; getInventory()->addItem(kItemMatch); @@ -1392,7 +1392,7 @@ IMPLEMENT_ACTION(39) IMPLEMENT_ACTION(bed) getSound()->playSoundEvent(kEntityPlayer, 85); // falls to case knockNoSound - return action_knockNoSound(hotspot); + return action_knockInside(hotspot); } ////////////////////////////////////////////////////////////////////////// @@ -1724,7 +1724,7 @@ bool Action::handleOtherCompartment(ObjectIndex object, bool doPlaySound, bool d } void Action::playCompartmentSoundEvents(ObjectIndex object) const { - if (getObjects()->get(object).location == kObjectLocation1 || getObjects()->get(object).location == kObjectLocation3 || getEntities()->checkFields2(object)) { + if (getObjects()->get(object).status == kObjectLocation1 || getObjects()->get(object).status == kObjectLocation3 || getEntities()->checkFields2(object)) { getSound()->playSoundEvent(kEntityPlayer, 13); } else { getSound()->playSoundEvent(kEntityPlayer, 14); @@ -1757,7 +1757,7 @@ CursorStyle Action::getCursor(const SceneHotspot &hotspot) const { if (object >= kObjectMax) return kCursorNormal; else - return (CursorStyle)getObjects()->get(object).cursor; + return (CursorStyle)getObjects()->get(object).windowCursor; case SceneHotspot::kAction12: debugC(2, kLastExpressDebugScenes, "================================= OBJECT %03d =================================", object); @@ -1765,7 +1765,7 @@ CursorStyle Action::getCursor(const SceneHotspot &hotspot) const { return kCursorNormal; if (getObjects()->get(object).entity) - return (CursorStyle)getObjects()->get(object).cursor; + return (CursorStyle)getObjects()->get(object).windowCursor; else return kCursorNormal; @@ -1774,7 +1774,7 @@ CursorStyle Action::getCursor(const SceneHotspot &hotspot) const { if (object >= kObjectCompartmentA) return kCursorNormal; - if ((!getInventory()->getSelectedItem() || getInventory()->getSelectedEntry()->manualSelect) + if ((!getInventory()->getSelectedItem() || getInventory()->getSelectedEntry()->floating) && (object != kObject21 || getProgress().eventCorpseMovedFromFloor)) return kCursorHand; else @@ -1806,8 +1806,8 @@ CursorStyle Action::getCursor(const SceneHotspot &hotspot) const { return kCursorNormal; case SceneHotspot::kActionEnterCompartment: - if ((getInventory()->getSelectedItem() != kItemKey || getObjects()->get(kObjectCompartment1).location) - && (getObjects()->get(kObjectCompartment1).location != 1 || !getInventory()->hasItem(kItemKey) + if ((getInventory()->getSelectedItem() != kItemKey || getObjects()->get(kObjectCompartment1).status) + && (getObjects()->get(kObjectCompartment1).status != 1 || !getInventory()->hasItem(kItemKey) || (getInventory()->getSelectedItem() != kItemFirebird && getInventory()->getSelectedItem() != kItemBriefcase))) goto LABEL_KEY; @@ -1817,13 +1817,13 @@ CursorStyle Action::getCursor(const SceneHotspot &hotspot) const { if (getProgress().jacket != kJacketGreen) return kCursorNormal; - if ((getEvent(kEventCathLookOutsideWindowDay) || getEvent(kEventCathLookOutsideWindowNight) || getObjects()->get(kObjectCompartment1).location2 == kObjectLocation1) + if ((getEvent(kEventCathLookOutsideWindowDay) || getEvent(kEventCathLookOutsideWindowNight) || getObjects()->get(kObjectCompartment1).model == kObjectModel1) && getProgress().isTrainRunning - && (object != kObjectOutsideAnnaCompartment || (getEntities()->isInsideCompartment(kEntityRebecca, kCarRedSleeping, kPosition_4840) && getObjects()->get(kObjectOutsideBetweenCompartments).location == 2)) + && (object != kObjectOutsideAnnaCompartment || (getEntities()->isInsideCompartment(kEntityRebecca, kCarRedSleeping, kPosition_4840) && getObjects()->get(kObjectOutsideBetweenCompartments).status == 2)) && getInventory()->getSelectedItem() != kItemBriefcase && getInventory()->getSelectedItem() != kItemFirebird) return kCursorForward; - return (getObjects()->get(kObjectCompartment1).location2 < kObjectLocation2) ? kCursorNormal : kCursorMagnifier; + return (getObjects()->get(kObjectCompartment1).model < kObjectModel2) ? kCursorNormal : kCursorMagnifier; case SceneHotspot::kActionSlip: return (getProgress().field_C8 < 1) ? kCursorNormal : kCursorLeft; @@ -1841,7 +1841,7 @@ CursorStyle Action::getCursor(const SceneHotspot &hotspot) const { if (object != kObjectCompartment1) return kCursorNormal; - return (getObjects()->get(kObjectCeiling).location < kObjectLocation1) ? kCursorHand : kCursorNormal; + return (getObjects()->get(kObjectCeiling).status < kObjectLocation1) ? kCursorHand : kCursorNormal; case SceneHotspot::kActionUnbound: if (hotspot.param2 != 2) @@ -1904,11 +1904,11 @@ LABEL_KEY: if (getInventory()->getSelectedItem() != kItemKey || getObjects()->get(object).entity - || getObjects()->get(object).location != 1 - || !getObjects()->get(object).cursor2 + || getObjects()->get(object).status != 1 + || !getObjects()->get(object).handleCursor || getEntities()->isInsideCompartments(kEntityPlayer) || getEntities()->checkFields2(object)) - return (CursorStyle)getObjects()->get(object).cursor2; + return (CursorStyle)getObjects()->get(object).handleCursor; else return (CursorStyle)getInventory()->get(kItemKey)->cursor; } diff --git a/engines/lastexpress/game/action.h b/engines/lastexpress/game/action.h index e1a4a53224..3dad51d0d3 100644 --- a/engines/lastexpress/game/action.h +++ b/engines/lastexpress/game/action.h @@ -82,28 +82,28 @@ private: DECLARE_ACTION(playSounds); DECLARE_ACTION(playAnimation); DECLARE_ACTION(openCloseObject); - DECLARE_ACTION(updateObjetLocation2); - DECLARE_ACTION(setItemLocation); - DECLARE_ACTION(knockNoSound); + DECLARE_ACTION(setModel); + DECLARE_ACTION(setItem); + DECLARE_ACTION(knockInside); DECLARE_ACTION(pickItem); DECLARE_ACTION(dropItem); DECLARE_ACTION(enterCompartment); - DECLARE_ACTION(getOutsideTrain); - DECLARE_ACTION(slip); - DECLARE_ACTION(getInsideTrain); - DECLARE_ACTION(climbUpTrain); + DECLARE_ACTION(leanOutWindow); + DECLARE_ACTION(almostFall); + DECLARE_ACTION(climbInWindow); + DECLARE_ACTION(climbLadder); DECLARE_ACTION(climbDownTrain); - DECLARE_ACTION(jumpUpDownTrain); - DECLARE_ACTION(unbound); - DECLARE_ACTION(25); - DECLARE_ACTION(26); + DECLARE_ACTION(kronosSanctum); + DECLARE_ACTION(escapeBaggage); + DECLARE_ACTION(enterBaggage); + DECLARE_ACTION(bombPuzzle); DECLARE_ACTION(27); - DECLARE_ACTION(concertSitCough); + DECLARE_ACTION(kronosConcert); DECLARE_ACTION(29); DECLARE_ACTION(catchBeetle); DECLARE_ACTION(exitCompartment); - DECLARE_ACTION(32); - DECLARE_ACTION(useWhistle); + DECLARE_ACTION(outsideTrain); + DECLARE_ACTION(firebirdPuzzle); DECLARE_ACTION(openMatchBox); DECLARE_ACTION(openBed); DECLARE_ACTION(dialog); diff --git a/engines/lastexpress/game/inventory.cpp b/engines/lastexpress/game/inventory.cpp index 2f1b0a8e76..11a76a77f0 100644 --- a/engines/lastexpress/game/inventory.cpp +++ b/engines/lastexpress/game/inventory.cpp @@ -97,19 +97,19 @@ void Inventory::init() { _entries[kItemPassengerList].isSelectable = true; // Auto selection - _entries[kItem2].manualSelect = false; - _entries[kItem3].manualSelect = false; - _entries[kItem5].manualSelect = false; - _entries[kItem7].manualSelect = false; - _entries[kItem9].manualSelect = false; - _entries[kItem11].manualSelect = false; - _entries[kItemBeetle].manualSelect = false; - _entries[kItem17].manualSelect = false; - _entries[kItemFirebird].manualSelect = false; - _entries[kItemBriefcase].manualSelect = false; - _entries[kItemCorpse].manualSelect = false; - _entries[kItemGreenJacket].manualSelect = false; - _entries[kItem22].manualSelect = false; + _entries[kItem2].floating = false; + _entries[kItem3].floating = false; + _entries[kItem5].floating = false; + _entries[kItem7].floating = false; + _entries[kItem9].floating = false; + _entries[kItem11].floating = false; + _entries[kItemBeetle].floating = false; + _entries[kItem17].floating = false; + _entries[kItemFirebird].floating = false; + _entries[kItemBriefcase].floating = false; + _entries[kItemCorpse].floating = false; + _entries[kItemGreenJacket].floating = false; + _entries[kItem22].floating = false; // Scene _entries[kItemMatchBox].scene = kSceneMatchbox; @@ -123,8 +123,8 @@ void Inventory::init() { _entries[kItemBriefcase].scene = kSceneBriefcase; // Has item - _entries[kItemTelegram].isPresent = true; - _entries[kItemArticle].isPresent = true; + _entries[kItemTelegram].inPocket = true; + _entries[kItemArticle].inPocket = true; _selectedItem = kItemNone; } @@ -298,7 +298,7 @@ void Inventory::handleMouseEvent(const Common::Event &ev) { getScenes()->loadScene(entry.scene); } - if (entry.field_2) + if (entry.usable) selectItem((InventoryItem)index); else drawSelectedItem(); @@ -346,7 +346,7 @@ void Inventory::handleMouseEvent(const Common::Event &ev) { if (!getProgress().field_84 && getEntityData(kEntityPlayer)->location != kLocationOutsideTrain && getProgress().field_18 != 4 - && (_selectedItem == kItemNone || get(_selectedItem)->manualSelect || getState()->sceneUseBackup)) { + && (_selectedItem == kItemNone || get(_selectedItem)->floating || getState()->sceneUseBackup)) { // Draw inventory contents when clicking on portrait if (ev.type == Common::EVENT_LBUTTONDOWN) { @@ -363,7 +363,7 @@ void Inventory::handleMouseEvent(const Common::Event &ev) { close(); // Select item - if (_selectedItem == kItemNone || get(_selectedItem)->manualSelect) { + if (_selectedItem == kItemNone || get(_selectedItem)->floating) { _selectedItem = getFirstExaminableItem(); if (_selectedItem != kItemNone) @@ -447,11 +447,11 @@ void Inventory::addItem(InventoryItem item) { if (item >= kPortraitOriginal) return; - get(item)->isPresent = true; + get(item)->inPocket = true; get(item)->location = kObjectLocationNone; // Auto-select item if necessary - if (get(item)->cursor && !get(item)->manualSelect) { + if (get(item)->cursor && !get(item)->floating) { _selectedItem = item; drawItem(get(_selectedItem)->cursor, 44, 0); askForRedraw(); @@ -462,7 +462,7 @@ void Inventory::removeItem(InventoryItem item, ObjectLocation newLocation) { if (item >= kPortraitOriginal) return; - get(item)->isPresent = false; + get(item)->inPocket = false; get(item)->location = newLocation; if (get(item)->cursor == get(_selectedItem)->cursor) { @@ -473,7 +473,7 @@ void Inventory::removeItem(InventoryItem item, ObjectLocation newLocation) { } bool Inventory::hasItem(InventoryItem item) { - if (get(item)->isPresent && item < kPortraitOriginal) + if (get(item)->inPocket && item < kPortraitOriginal) return true; return false; @@ -537,7 +537,7 @@ InventoryItem Inventory::getFirstExaminableItem() const { int index = 0; InventoryEntry entry = _entries[index]; - while (!entry.isPresent || !entry.cursor || entry.manualSelect) { + while (!entry.inPocket || !entry.cursor || entry.floating) { index++; entry = _entries[index]; @@ -676,7 +676,7 @@ void Inventory::drawItem(CursorStyle id, uint16 x, uint16 y, int16 brightnessInd void Inventory::drawSelectedItem() { // Draw the selected item if any - if (!_selectedItem || get(_selectedItem)->manualSelect) { + if (!_selectedItem || get(_selectedItem)->floating) { _selectedItem = getFirstExaminableItem(); if (_selectedItem) { @@ -703,10 +703,10 @@ void Inventory::open() { // Draw at most 11 items in the inventory _itemsShown = 0; for (int i = 1; i < ARRAYSIZE(_entries); i++) { - if (!_entries[i].isPresent) + if (!_entries[i].inPocket) continue; - if (!_entries[i].manualSelect) + if (!_entries[i].floating) continue; if (_itemsShown < 11) { @@ -747,10 +747,10 @@ uint32 Inventory::getItemIndex(uint32 currentIndex) const { uint32 count = 0; for (uint32 i = 1; i < ARRAYSIZE(_entries); i++) { - if (!_entries[i].isPresent) + if (!_entries[i].inPocket) continue; - if (!_entries[i].manualSelect) + if (!_entries[i].floating) continue; if (count < 11) { diff --git a/engines/lastexpress/game/inventory.h b/engines/lastexpress/game/inventory.h index b1019a43c6..242dfc30cc 100644 --- a/engines/lastexpress/game/inventory.h +++ b/engines/lastexpress/game/inventory.h @@ -56,33 +56,33 @@ public: struct InventoryEntry : Common::Serializable { CursorStyle cursor; SceneIndex scene; - byte field_2; + byte usable; bool isSelectable; - bool isPresent; - bool manualSelect; + bool inPocket; + bool floating; ObjectLocation location; InventoryEntry() { cursor = kCursorNormal; scene = kSceneNone; - field_2 = 0; + usable = 0; isSelectable = false; - isPresent = false; - manualSelect = true; + inPocket = false; + floating = true; location = kObjectLocationNone; } Common::String toString() { - return Common::String::format("{ %d - %d - %d - %d - %d - %d - %d }", cursor, scene, field_2, isSelectable, isPresent, manualSelect, location); + return Common::String::format("{ %d - %d - %d - %d - %d - %d - %d }", cursor, scene, usable, isSelectable, inPocket, floating, location); } void saveLoadWithSerializer(Common::Serializer &s) { s.syncAsByte(cursor); s.syncAsByte(scene); - s.syncAsByte(field_2); + s.syncAsByte(usable); s.syncAsByte(isSelectable); - s.syncAsByte(isPresent); - s.syncAsByte(manualSelect); + s.syncAsByte(inPocket); + s.syncAsByte(floating); s.syncAsByte(location); } }; diff --git a/engines/lastexpress/game/logic.cpp b/engines/lastexpress/game/logic.cpp index d24fb9b598..1a9c6b4123 100644 --- a/engines/lastexpress/game/logic.cpp +++ b/engines/lastexpress/game/logic.cpp @@ -468,7 +468,7 @@ void Logic::switchChapter() const { case kChapter3: getInventory()->get(kItemFirebird)->location = kObjectLocation4; - getInventory()->get(kItemFirebird)->isPresent = false; + getInventory()->get(kItemFirebird)->inPocket = false; getInventory()->get(kItem11)->location = kObjectLocation1; getInventory()->addItem(kItemWhistle); getInventory()->addItem(kItemKey); diff --git a/engines/lastexpress/game/object.cpp b/engines/lastexpress/game/object.cpp index 2fcdde12b9..ad13a65199 100644 --- a/engines/lastexpress/game/object.cpp +++ b/engines/lastexpress/game/object.cpp @@ -32,7 +32,7 @@ namespace LastExpress { Common::String Objects::Object::toString() { - return Common::String::format("{ %s - %d - %d - %d - %d }", ENTITY_NAME(entity), location, cursor, cursor2, location2); + return Common::String::format("{ %s - %d - %d - %d - %d }", ENTITY_NAME(entity), status, windowCursor, handleCursor, model); } Objects::Objects(LastExpressEngine *engine) : _engine(engine) {} @@ -44,24 +44,24 @@ const Objects::Object Objects::get(ObjectIndex index) const { return _objects[index]; } -void Objects::update(ObjectIndex index, EntityIndex entity, ObjectLocation location, CursorStyle cursor, CursorStyle cursor2) { +void Objects::update(ObjectIndex index, EntityIndex entity, ObjectLocation status, CursorStyle windowCursor, CursorStyle handleCursor) { if (index >= kObjectMax) return; Object *object = &_objects[index]; // Store original location - ObjectLocation original_location = object->location; + ObjectLocation original_status = object->status; // Update entity object->entity = entity; - object->location = location; + object->status = status; - if (cursor != kCursorKeepValue || cursor2 != kCursorKeepValue) { - if (cursor != kCursorKeepValue) - object->cursor = cursor; - if (cursor2 != kCursorKeepValue) - object->cursor2 = cursor2; + if (windowCursor != kCursorKeepValue || handleCursor != kCursorKeepValue) { + if (windowCursor != kCursorKeepValue) + object->windowCursor = windowCursor; + if (handleCursor != kCursorKeepValue) + object->handleCursor = handleCursor; getLogic()->updateCursor(); } @@ -69,7 +69,7 @@ void Objects::update(ObjectIndex index, EntityIndex entity, ObjectLocation locat getFlags()->flag_3 = true; // Compartments - if (original_location != location && (original_location == kObjectLocation2 || location == kObjectLocation2)) { + if (original_status != status && (original_status == kObjectLocation2 || status == kObjectLocation2)) { if ((index >= kObjectCompartment1 && index <= kObjectCompartment8) || (index >= kObjectCompartmentA && index <= kObjectCompartmentF)) { getScenes()->updateDoorsAndClock(); @@ -77,11 +77,11 @@ void Objects::update(ObjectIndex index, EntityIndex entity, ObjectLocation locat } } -void Objects::updateLocation2(ObjectIndex index, ObjectLocation location2) { +void Objects::updateModel(ObjectIndex index, ObjectModel model) { if (index >= kObjectMax) return; - _objects[index].location2 = location2; + _objects[index].model = model; } ////////////////////////////////////////////////////////////////////////// diff --git a/engines/lastexpress/game/object.h b/engines/lastexpress/game/object.h index 87c9d7d407..be9d63d6c5 100644 --- a/engines/lastexpress/game/object.h +++ b/engines/lastexpress/game/object.h @@ -37,17 +37,17 @@ public: struct Object : Common::Serializable { // All fields should be saved as bytes EntityIndex entity; - ObjectLocation location; - CursorStyle cursor; - CursorStyle cursor2; - ObjectLocation location2; + ObjectLocation status; + CursorStyle windowCursor; + CursorStyle handleCursor; + ObjectModel model; Object() { entity = kEntityPlayer; - location = kObjectLocationNone; - cursor = kCursorHandKnock; - cursor2 = kCursorHandKnock; - location2 = kObjectLocationNone; + status = kObjectLocationNone; + windowCursor = kCursorHandKnock; + handleCursor = kCursorHandKnock; + model = kObjectModelNone; } Common::String toString(); @@ -55,18 +55,18 @@ public: // Serializable void saveLoadWithSerializer(Common::Serializer &s) { s.syncAsByte(entity); - s.syncAsByte(location); - s.syncAsByte(cursor); - s.syncAsByte(cursor2); - s.syncAsByte(location2); + s.syncAsByte(status); + s.syncAsByte(windowCursor); + s.syncAsByte(handleCursor); + s.syncAsByte(model); } }; Objects(LastExpressEngine *engine); const Object get(ObjectIndex index) const; - void update(ObjectIndex index, EntityIndex entity, ObjectLocation location, CursorStyle cursor, CursorStyle cursor2); - void updateLocation2(ObjectIndex index, ObjectLocation location2); + void update(ObjectIndex index, EntityIndex entity, ObjectLocation status, CursorStyle cursor, CursorStyle cursor2); + void updateModel(ObjectIndex index, ObjectModel model); // Serializable void saveLoadWithSerializer(Common::Serializer &s); diff --git a/engines/lastexpress/game/savegame.h b/engines/lastexpress/game/savegame.h index 257c005e4a..7e8095fde1 100644 --- a/engines/lastexpress/game/savegame.h +++ b/engines/lastexpress/game/savegame.h @@ -40,32 +40,32 @@ Game data Format ----------------- - uint32 {4} - entity - uint32 {4} - current time - uint32 {4} - time delta (how much a tick is in "real" time) - uint32 {4} - time ticks - uint32 {4} - scene Index max: 2500 - byte {1} - use backup scene - uint32 {4} - backup Scene Index 1 max: 2500 - uint32 {4} - backup Scene Index 2 max: 2500 - uint32 {4} - selected inventory item max: 32 - uint32 {4*100*10} - positions (by car) - uint32 {4*16} - compartments - uint32 {4*16} - compartments ?? - uint32 {4*128} - game progress - byte {512} - game events - byte {7*32} - inventory - byte {5*128} - objects - byte {1262*40} - entities (characters and train entities) - - uint32 {4} - sound queue state - uint32 {4} - ?? - uint32 {4} - number of sound entries - byte {count*68} - sound entries - - byte {16*128} - save point data - uint32 {4} - number of save points (max: 128) - byte {count*16} - save points + uint32 {4} - entity + uint32 {4} - current time + uint32 {4} - time delta (how much a tick is in "real" time) + uint32 {4} - time ticks + uint32 {4} - scene Index max: 2500 + byte {1} - use backup scene + uint32 {4} - backup Scene Index 1 max: 2500 + uint32 {4} - backup Scene Index 2 max: 2500 + uint32 {4} - selected inventory item max: 32 + uint32 {4*100*10} - positions by car(BlockedView) + uint32 {4*16} - compartments (BlockedX) + uint32 {4*16} - compartments? (SoftBlockedX) + uint32 {4*128} - game progress + byte {512} - game events + byte {7*32} - inventory + byte {5*128} - objects + byte {1262*40} - entities (characters and train entities) + + uint32 {4} - sound queue state + uint32 {4} - ?? + uint32 {4} - number of sound entries + byte {count*68} - sound entries + + byte {16*128} - save point data + uint32 {4} - number of save points (max: 128) + byte {count*16} - save points ... more unknown stuff diff --git a/engines/lastexpress/game/scenes.cpp b/engines/lastexpress/game/scenes.cpp index 82688fff2e..0d8f51af6e 100644 --- a/engines/lastexpress/game/scenes.cpp +++ b/engines/lastexpress/game/scenes.cpp @@ -579,7 +579,7 @@ void SceneManager::updateDoorsAndClock() { for (ObjectIndex index = firstIndex; index < (ObjectIndex)(firstIndex + 8); index = (ObjectIndex)(index + 1)) { // Doors is not open, nothing to do - if (getObjects()->get(index).location != kObjectLocation2) + if (getObjects()->get(index).status != kObjectLocation2) continue; // Load door sequence @@ -842,11 +842,11 @@ void SceneManager::preProcessScene(SceneIndex *index) { if (object >= kObjectMax) break; - if (getObjects()->get(object).location == kObjectLocationNone) + if (getObjects()->get(object).status == kObjectLocationNone) break; for (Common::Array<SceneHotspot *>::iterator it = scene->getHotspots()->begin(); it != scene->getHotspots()->end(); ++it) { - if (getObjects()->get(object).location != (*it)->location) + if (getObjects()->get(object).status != (*it)->location) continue; PROCESS_HOTSPOT_SCENE(*it, index); @@ -920,7 +920,7 @@ void SceneManager::preProcessScene(SceneIndex *index) { int location = kObjectLocationNone; - if (getObjects()->get(object).location == kObjectLocation2) + if (getObjects()->get(object).status == kObjectLocation2) location = kObjectLocation1; if (getInventory()->get(item)->location != kObjectLocationNone) @@ -933,7 +933,7 @@ void SceneManager::preProcessScene(SceneIndex *index) { if (location != (*it)->location) continue; - if (getObjects()->get(object).location != (*it)->param1) + if (getObjects()->get(object).status != (*it)->param1) continue; if (getInventory()->get(item)->location != (*it)->param2) @@ -994,7 +994,7 @@ void SceneManager::preProcessScene(SceneIndex *index) { bool found = false; for (Common::Array<SceneHotspot *>::iterator it = scene->getHotspots()->begin(); it != scene->getHotspots()->end(); ++it) { - if (getObjects()->get(object).location2 != (*it)->location) + if (getObjects()->get(object).model != (*it)->location) continue; PROCESS_HOTSPOT_SCENE(*it, index); diff --git a/engines/lastexpress/shared.h b/engines/lastexpress/shared.h index 56cf730e24..dae7928043 100644 --- a/engines/lastexpress/shared.h +++ b/engines/lastexpress/shared.h @@ -755,7 +755,7 @@ enum ClothesIndex { }; ////////////////////////////////////////////////////////////////////////// -// Location of objects +// Objects (doors) ////////////////////////////////////////////////////////////////////////// enum ObjectLocation { kObjectLocationNone = 0, @@ -763,13 +763,27 @@ enum ObjectLocation { kObjectLocation2 = 2, // Bed ? kObjectLocation3 = 3, kObjectLocation4 = 4, // Window ? - kObjectLocation5 = 5, - kObjectLocation6 = 6, - kObjectLocation7 = 7, - kObjectLocation8 = 8, - kObjectLocation9 = 9, - kObjectLocation10 = 10, - kObjectLocation18 = 18 + kObjectLocation5 = 5, + kObjectLocation6 = 6, + kObjectLocation7 = 7, + kObjectLocation8 = 8, + kObjectLocation9 = 9, + kObjectLocation10 = 10, + kObjectLocation18 = 18 +}; + +enum ObjectModel { + kObjectModelNone = 0, + kObjectModel1 = 1, + kObjectModel2 = 2, + kObjectModel3 = 3, + kObjectModel4 = 4, + kObjectModel5 = 5, + kObjectModel6 = 6, + kObjectModel7 = 7, + kObjectModel8 = 8, + kObjectModel9 = 9, + kObjectModel10 = 10 }; ////////////////////////////////////////////////////////////////////////// diff --git a/engines/lastexpress/sound/sound.cpp b/engines/lastexpress/sound/sound.cpp index 319f7cd4f4..ad61c2e0d9 100644 --- a/engines/lastexpress/sound/sound.cpp +++ b/engines/lastexpress/sound/sound.cpp @@ -1323,7 +1323,7 @@ void SoundManager::playLoopingSound(int param) { break; if (getEntities()->isInsideCompartment(kEntityPlayer, getEntityData(kEntityPlayer)->car, positions[pos])) { numLoops[0] = 1; - partNumber = (getObjects()->get((ObjectIndex)objNum).location - 2) < 1 ? 6 : 1; + partNumber = (getObjects()->get((ObjectIndex)objNum).status - 2) < 1 ? 6 : 1; } objNum++; } diff --git a/engines/pegasus/neighborhood/mars/mars.cpp b/engines/pegasus/neighborhood/mars/mars.cpp index 775221589a..435bcd4c9e 100644 --- a/engines/pegasus/neighborhood/mars/mars.cpp +++ b/engines/pegasus/neighborhood/mars/mars.cpp @@ -2011,7 +2011,7 @@ void Mars::dropItemIntoRoom(Item *item, Hotspot *dropSpot) { void Mars::robotTiredOfWaiting() { if (GameState.getCurrentRoomAndView() == MakeRoomView(kMars48, kEast)) { - if (_attackingItem) { + if (!_attackingItem) { startExtraSequence(kMars48RobotKillsPlayer, kExtraCompletedFlag, kFilterNoInput); loadLoopSound2(""); } else { diff --git a/engines/sci/detection_tables.h b/engines/sci/detection_tables.h index 05af2ff78c..bdba75dfa5 100644 --- a/engines/sci/detection_tables.h +++ b/engines/sci/detection_tables.h @@ -4005,6 +4005,18 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"ressci.000", 0, "118f9bec04bfe17c4f87bbb5ddb43c18", 56126981}, AD_LISTEND}, Common::FR_FRA, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) }, + + // Torin's Passage - English Macintosh + {"torin", "", { + {"Data1", 0, "63887e33cc282c92dc1f916f54aea8eb", 700786}, + {"Data2", 0, "da2f13be2819a7333fee372d38b8d1a2", 122485}, + {"Data3", 0, "e9fda4f1714ddb443545ba8a2d58ef18", 7299126}, + {"Data4", 0, "59b432ec35b24a216432a556e25087ef", 7209309}, + {"Data5", 0, "189e809f24aee83c707dea03a543c7c4", 6615563}, + {"Data6", 0, "b639487c83d1dae0e001e700f3631566", 7594881}, + {"Data7", 0, "2afd9b5434102b89610916b904c3f73a", 7627374}, + AD_LISTEND}, + Common::EN_ANY, Common::kPlatformMacintosh, ADGF_MACRESFORK | ADGF_UNSTABLE, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) }, #endif // ENABLE_SCI32 // SCI Fanmade Games diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp index e4b3028bcd..79ab2d138b 100644 --- a/engines/sci/engine/kgraphics.cpp +++ b/engines/sci/engine/kgraphics.cpp @@ -185,7 +185,8 @@ static reg_t kSetCursorSci11(EngineState *s, int argc, reg_t *argv) { hotspot = new Common::Point(argv[3].toSint16(), argv[4].toSint16()); // Fallthrough case 3: - if (g_sci->getPlatform() == Common::kPlatformMacintosh) { + if (g_sci->getPlatform() == Common::kPlatformMacintosh && g_sci->getGameId() != GID_TORIN) { + // Torin Mac seems to be the only game that uses view cursors delete hotspot; // Mac cursors have their own hotspot, so ignore any we get here g_sci->_gfxCursor->kernelSetMacCursor(argv[0].toUint16(), argv[1].toUint16(), argv[2].toUint16()); } else { diff --git a/engines/sci/graphics/portrait.cpp b/engines/sci/graphics/portrait.cpp index d5227126e2..7217af51f7 100644 --- a/engines/sci/graphics/portrait.cpp +++ b/engines/sci/graphics/portrait.cpp @@ -21,6 +21,7 @@ */ #include "common/archive.h" +#include "common/file.h" // for DumpFile #include "common/system.h" #include "sci/sci.h" @@ -39,6 +40,7 @@ Portrait::Portrait(ResourceManager *resMan, EventManager *event, GfxScreen *scre } Portrait::~Portrait() { + delete[] _lipSyncDataOffsetTable; delete[] _bitmaps; delete[] _fileData; } @@ -51,7 +53,7 @@ void Portrait::init() { // 2 bytes main height (should be the same as first bitmap header height) // 2 bytes animation count // 2 bytes unknown - // 2 bytes unknown + // 2 bytes lip sync ID count // 4 bytes paletteSize (base 1) // -> 17 bytes // paletteSize bytes paletteData @@ -81,6 +83,8 @@ void Portrait::init() { _width = READ_LE_UINT16(_fileData + 3); _height = READ_LE_UINT16(_fileData + 5); _bitmapCount = READ_LE_UINT16(_fileData + 7); + _lipSyncIDCount = READ_LE_UINT16(_fileData + 11); + _bitmaps = new PortraitBitmap[_bitmapCount]; uint16 portraitPaletteSize = READ_LE_UINT16(_fileData + 13); @@ -128,7 +132,48 @@ void Portrait::init() { } data += offsetTableSize; - // raw lip-sync data follows + // raw lip-sync ID table follows + uint32 lipSyncIDTableSize; + + lipSyncIDTableSize = READ_LE_UINT32(data); + data += 4; + assert( lipSyncIDTableSize == (_lipSyncIDCount * 4) ); + _lipSyncIDTable = data; + data += lipSyncIDTableSize; + + // raw lip-sync frame table follows + uint32 lipSyncDataTableSize; + uint32 lipSyncDataTableLastOffset; + byte lipSyncData; + uint16 lipSyncDataNr; + uint16 lipSyncCurOffset; + + lipSyncDataTableSize = READ_LE_UINT32(data); + data += 4; + assert( lipSyncDataTableSize == 0x220 ); // always this size, just a safety-check + + _lipSyncData = data; + lipSyncDataTableLastOffset = lipSyncDataTableSize - 1; + _lipSyncDataOffsetTable = new uint16[ _lipSyncIDCount ]; + + lipSyncDataNr = 0; + lipSyncCurOffset = 0; + while ( (lipSyncCurOffset < lipSyncDataTableSize) && (lipSyncDataNr < _lipSyncIDCount) ) { + // We are currently at the start of ID-frame data + _lipSyncDataOffsetTable[lipSyncDataNr] = lipSyncCurOffset; + + // Look for end of ID-frame data + lipSyncData = *data++; lipSyncCurOffset++; + while ( (lipSyncData != 0xFF) && (lipSyncCurOffset < lipSyncDataTableLastOffset) ) { + // Either terminator (0xFF) or frame-data (1 byte tick count and 1 byte bitmap ID) + data++; + lipSyncData = *data++; + lipSyncCurOffset += 2; + } + lipSyncDataNr++; + } + _lipSyncDataOffsetTableEnd = data; + // last 4 bytes seem to be garbage } void Portrait::doit(Common::Point position, uint16 resourceId, uint16 noun, uint16 verb, uint16 cond, uint16 seq) { @@ -136,9 +181,40 @@ void Portrait::doit(Common::Point position, uint16 resourceId, uint16 noun, uint // Now init audio and sync resource uint32 audioNumber = ((noun & 0xff) << 24) | ((verb & 0xff) << 16) | ((cond & 0xff) << 8) | (seq & 0xff); - ResourceId syncResourceId = ResourceId(kResourceTypeSync36, resourceId, noun, verb, cond, seq); - Resource *syncResource = _resMan->findResource(syncResourceId, true); + //ResourceId syncResourceId = ResourceId(kResourceTypeSync36, resourceId, noun, verb, cond, seq); + //Resource *syncResource = _resMan->findResource(syncResourceId, true); + ResourceId raveResourceId = ResourceId(kResourceTypeRave, resourceId, noun, verb, cond, seq); + Resource *raveResource = _resMan->findResource(raveResourceId, true); + +#if 0 uint syncOffset = 0; +#endif + + // TODO: play through the game if this is 100% accurate + // TODO: maybe try to create the missing sync resources for low-res KQ6 out of the rave resources + + uint raveOffset = 0; + +#if 0 + // Dump the sync resources to disk + Common::DumpFile *outFile = new Common::DumpFile(); + Common::String outName = syncResourceId.toPatchNameBase36() + ".sync36"; + outFile->open(outName); + syncResource->writeToStream(outFile); + outFile->finalize(); + outFile->close(); + + ResourceId raveResourceId = ResourceId(kResourceTypeRave, resourceId, noun, verb, cond, seq); + Resource *raveResource = _resMan->findResource(raveResourceId, true); + outName = raveResourceId.toPatchNameBase36() + ".rave"; + outFile->open(outName); + raveResource->writeToStream(outFile); + outFile->finalize(); + outFile->close(); + _resMan->unlockResource(raveResource); + + delete outFile; +#endif // Set the portrait palette _palette->set(&_portraitPalette, false, true); @@ -150,7 +226,92 @@ void Portrait::doit(Common::Point position, uint16 resourceId, uint16 noun, uint // Start playing audio... _audio->stopAudio(); _audio->startAudio(resourceId, audioNumber); + + if (!raveResource) { + warning("kPortrait: no rave resource %d %X", resourceId, audioNumber); + return; + } + + // Do animation depending on rave resource till audio is done playing + int16 raveTicks; + uint16 raveID; + byte *raveLipSyncData; + byte raveLipSyncTicks; + byte raveLipSyncBitmapNr; + int timerPosition = 0; + int timerPositionWithin = 0; + int curPosition; + SciEvent curEvent; + bool userAbort = false; + + while ((raveOffset < raveResource->size) && (!userAbort)) { + // rave string starts with tick count, followed by lipSyncID, tick count and so on + raveTicks = raveGetTicks(raveResource, &raveOffset); + if (raveTicks < 0) + break; + + // get lipSyncID + raveID = raveGetID(raveResource, &raveOffset); + if (raveID) { + raveLipSyncData = raveGetLipSyncData(raveID); + } else { + raveLipSyncData = NULL; + } + + timerPosition += raveTicks; + + // Wait till syncTime passed, then show specific animation bitmap + if (timerPosition > 0) { + do { + g_sci->getEngineState()->wait(1); + curEvent = _event->getSciEvent(SCI_EVENT_ANY); + if (curEvent.type == SCI_EVENT_MOUSE_PRESS || + (curEvent.type == SCI_EVENT_KEYBOARD && curEvent.data == SCI_KEY_ESC) || + g_sci->getEngineState()->abortScriptProcessing == kAbortQuitGame) + userAbort = true; + curPosition = _audio->getAudioPosition(); + } while ((curPosition != -1) && (curPosition < timerPosition) && (!userAbort)); + } + + if (raveLipSyncData) { + // lip sync data is + // Tick:Byte, Bitmap-Nr:BYTE + // Tick = 0xFF is the terminator for the data + timerPositionWithin = timerPosition; + raveLipSyncTicks = *raveLipSyncData++; + while ( (raveLipSyncData < _lipSyncDataOffsetTableEnd) && (raveLipSyncTicks != 0xFF) ) { + timerPositionWithin += raveLipSyncTicks; + do { + g_sci->getEngineState()->wait(1); + curEvent = _event->getSciEvent(SCI_EVENT_ANY); + if (curEvent.type == SCI_EVENT_MOUSE_PRESS || + (curEvent.type == SCI_EVENT_KEYBOARD && curEvent.data == SCI_KEY_ESC) || + g_sci->getEngineState()->abortScriptProcessing == kAbortQuitGame) + userAbort = true; + curPosition = _audio->getAudioPosition(); + } while ((curPosition != -1) && (curPosition < timerPositionWithin) && (!userAbort)); + + raveLipSyncBitmapNr = *raveLipSyncData++; + + // bitmap nr within sync data is base 1, we need base 0 + raveLipSyncBitmapNr--; + + if (raveLipSyncBitmapNr < _bitmapCount) { + drawBitmap(0); + drawBitmap(raveLipSyncBitmapNr); + bitsShow(); + } else { + warning("kPortrait: rave lip sync data tried to draw non-existent bitmap %d", raveLipSyncBitmapNr); + } + + raveLipSyncTicks = *raveLipSyncData++; + } + } + } + +// old sync resource code +#if 0 if (!syncResource) { // Getting the book in the book shop calls kPortrait where no sync exists // TODO: find out what to do then @@ -197,6 +358,7 @@ void Portrait::doit(Common::Point position, uint16 resourceId, uint16 noun, uint } } } +#endif if (userAbort) { // Reset the portrait bitmap to "closed mouth" state, when skipping dialogs @@ -205,7 +367,81 @@ void Portrait::doit(Common::Point position, uint16 resourceId, uint16 noun, uint _audio->stopAudio(); } + _resMan->unlockResource(raveResource); + +#if 0 _resMan->unlockResource(syncResource); +#endif +} + +// returns ASCII ticks from lip sync string as uint16 +int16 Portrait::raveGetTicks(Resource *resource, uint *offset) { + uint curOffset = *offset; + byte *curData = resource->data + curOffset; + byte curByte; + uint16 curValue = 0; + + if (curOffset >= resource->size) + return -1; + + while (curOffset < resource->size) { + curByte = *curData++; curOffset++; + if ( curByte == ' ' ) + break; + if ( (curByte >= '0') && (curByte <= '9') ) { + curValue = curValue * 10 + ( curByte - '0' ); + } else { + // no number -> assume there is an ID at current offset + return 0; + } + } + *offset = curOffset; + return curValue; +} + +// returns ASCII ID from lip sync string as uint16 +uint16 Portrait::raveGetID(Resource *resource, uint *offset) { + uint curOffset = *offset; + byte *curData = resource->data + curOffset; + byte curByte = 0; + uint16 curValue = 0; + + while (curOffset < resource->size) { + curByte = *curData++; curOffset++; + if ( curByte == ' ' ) + break; + if (!curValue) { + curValue = curByte << 8; + } else { + curValue |= curByte; + } + } + + *offset = curOffset; + return curValue; +} + +// Searches for a specific lip sync ID and returns pointer to lip sync data or NULL in case ID was not found +byte *Portrait::raveGetLipSyncData(uint16 raveID) { + uint lipSyncIDNr = 0; + byte *lipSyncIDPtr = _lipSyncIDTable; + byte lipSyncIDByte1, lipSyncIDByte2; + uint16 lipSyncID; + + lipSyncIDPtr++; // skip over first byte + while (lipSyncIDNr < _lipSyncIDCount) { + lipSyncIDByte1 = *lipSyncIDPtr++; + lipSyncIDByte2 = *lipSyncIDPtr++; + lipSyncID = ( lipSyncIDByte1 << 8 ) | lipSyncIDByte2; + + if ( lipSyncID == raveID ) { + return _lipSyncData + _lipSyncDataOffsetTable[lipSyncIDNr]; + } + + lipSyncIDNr++; + lipSyncIDPtr += 2; // ID is every 4 bytes + } + return NULL; } void Portrait::drawBitmap(uint16 bitmapNr) { diff --git a/engines/sci/graphics/portrait.h b/engines/sci/graphics/portrait.h index 75baa9a56b..de0dbffb3f 100644 --- a/engines/sci/graphics/portrait.h +++ b/engines/sci/graphics/portrait.h @@ -52,6 +52,10 @@ private: void drawBitmap(uint16 bitmapNr); void bitsShow(); + int16 raveGetTicks(Resource *resource, uint *offset); + uint16 raveGetID(Resource *resource, uint *offset); + byte *raveGetLipSyncData(uint16 raveID); + ResourceManager *_resMan; EventManager *_event; GfxPalette *_palette; @@ -68,6 +72,13 @@ private: Common::String _resourceName; byte *_fileData; + + uint32 _lipSyncIDCount; + byte *_lipSyncIDTable; + + byte *_lipSyncData; + uint16 *_lipSyncDataOffsetTable; + byte *_lipSyncDataOffsetTableEnd; Common::Point _position; }; diff --git a/engines/sci/resource.cpp b/engines/sci/resource.cpp index d14c965ebb..52155cd09a 100644 --- a/engines/sci/resource.cpp +++ b/engines/sci/resource.cpp @@ -112,11 +112,12 @@ static const char *const s_resourceTypeNames[] = { "audio", "sync", "message", "map", "heap", "audio36", "sync36", "xlate", "robot", "vmd", "chunk", "animation", "etc", "duck", "clut", - "tga", "zzz", "macibin", "macibis", "macpict" + "tga", "zzz", "macibin", "macibis", "macpict", + "rave" }; // Resource type suffixes. Note that the -// suffic of SCI3 scripts has been changed from +// suffix of SCI3 scripts has been changed from // scr to csc static const char *const s_resourceTypeSuffixes[] = { "v56", "p56", "scr", "tex", "snd", @@ -125,7 +126,7 @@ static const char *const s_resourceTypeSuffixes[] = { "msg", "map", "hep", "", "", "trn", "rbt", "vmd", "chk", "", "etc", "duk", "clu", "tga", "zzz", - "", "", "" + "", "", "", "" }; const char *getResourceTypeName(ResourceType restype) { @@ -141,7 +142,7 @@ static const ResourceType s_resTypeMapSci0[] = { kResourceTypeCursor, kResourceTypePatch, kResourceTypeBitmap, kResourceTypePalette, // 0x08-0x0B kResourceTypeCdAudio, kResourceTypeAudio, kResourceTypeSync, kResourceTypeMessage, // 0x0C-0x0F kResourceTypeMap, kResourceTypeHeap, kResourceTypeAudio36, kResourceTypeSync36, // 0x10-0x13 - kResourceTypeTranslation // 0x14 + kResourceTypeTranslation, kResourceTypeRave // 0x14 }; // TODO: 12 should be "Wave", but SCI seems to just store it in Audio resources @@ -207,7 +208,7 @@ void Resource::unalloc() { } void Resource::writeToStream(Common::WriteStream *stream) const { - stream->writeByte(getType() | 0x80); // 0x80 is required by old sierra sci, otherwise it wont accept the patch file + stream->writeByte(getType() | 0x80); // 0x80 is required by old Sierra SCI, otherwise it wont accept the patch file stream->writeByte(_headerSize); if (_headerSize > 0) stream->write(_header, _headerSize); @@ -383,42 +384,13 @@ void PatchResourceSource::loadResource(ResourceManager *resMan, Resource *res) { static Common::Array<uint32> resTypeToMacTags(ResourceType type); -static Common::String intToBase36(uint32 number, int minChar) { - // Convert from an integer to a base36 string - Common::String string; - - while (minChar--) { - int character = number % 36; - string = ((character < 10) ? (character + '0') : (character + 'A' - 10)) + string; - number /= 36; - } - - return string; -} - -static Common::String constructPatchNameBase36(ResourceId resId) { - // Convert from a resource ID to a base36 patch name - Common::String output; - - output += (resId.getType() == kResourceTypeAudio36) ? '@' : '#'; // Identifier - output += intToBase36(resId.getNumber(), 3); // Map - output += intToBase36(resId.getTuple() >> 24, 2); // Noun - output += intToBase36((resId.getTuple() >> 16) & 0xff, 2); // Verb - output += '.'; // Separator - output += intToBase36((resId.getTuple() >> 8) & 0xff, 2); // Cond - output += intToBase36(resId.getTuple() & 0xff, 1); // Seq - - assert(output.size() == 12); // We should always get 12 characters in the end - return output; -} - void MacResourceForkResourceSource::loadResource(ResourceManager *resMan, Resource *res) { ResourceType type = res->getType(); Common::SeekableReadStream *stream = 0; if (type == kResourceTypeAudio36 || type == kResourceTypeSync36) { // Handle audio36/sync36, convert back to audio/sync - stream = _macResMan->getResource(constructPatchNameBase36(res->_id)); + stream = _macResMan->getResource(res->_id.toPatchNameBase36()); } else { // Plain resource handling Common::Array<uint32> tagArray = resTypeToMacTags(type); diff --git a/engines/sci/resource.h b/engines/sci/resource.h index 6fa51754a4..c4c8e543b2 100644 --- a/engines/sci/resource.h +++ b/engines/sci/resource.h @@ -112,6 +112,8 @@ enum ResourceType { kResourceTypeMacIconBarPictS, // IBIS resources (icon bar, selected) kResourceTypeMacPict, // PICT resources (inventory) + kResourceTypeRave, // KQ6 hires RAVE (special sync) resources + kResourceTypeInvalid }; @@ -143,6 +145,19 @@ class ResourceId { uint16 _number; uint32 _tuple; // Only used for audio36 and sync36 + static Common::String intToBase36(uint32 number, int minChar) { + // Convert from an integer to a base36 string + Common::String string; + + while (minChar--) { + int character = number % 36; + string = ((character < 10) ? (character + '0') : (character + 'A' - 10)) + string; + number /= 36; + } + + return string; + } + public: ResourceId() : _type(kResourceTypeInvalid), _number(0), _tuple(0) { } @@ -169,6 +184,22 @@ public: return retStr; } + // Convert from a resource ID to a base36 patch name + Common::String toPatchNameBase36() { + Common::String output; + + output += (getType() == kResourceTypeAudio36) ? '@' : '#'; // Identifier + output += intToBase36(getNumber(), 3); // Map + output += intToBase36(getTuple() >> 24, 2); // Noun + output += intToBase36((getTuple() >> 16) & 0xff, 2); // Verb + output += '.'; // Separator + output += intToBase36((getTuple() >> 8) & 0xff, 2); // Cond + output += intToBase36(getTuple() & 0xff, 1); // Seq + + assert(output.size() == 12); // We should always get 12 characters in the end + return output; + } + inline ResourceType getType() const { return _type; } inline uint16 getNumber() const { return _number; } inline uint32 getTuple() const { return _tuple; } diff --git a/engines/sci/resource_audio.cpp b/engines/sci/resource_audio.cpp index 744f05f2b9..268180b531 100644 --- a/engines/sci/resource_audio.cpp +++ b/engines/sci/resource_audio.cpp @@ -101,32 +101,34 @@ bool Resource::loadFromAudioVolumeSCI11(Common::SeekableReadStream *file) { } file->seek(-4, SEEK_CUR); - ResourceType type = _resMan->convertResType(file->readByte()); - if (((getType() == kResourceTypeAudio || getType() == kResourceTypeAudio36) && (type != kResourceTypeAudio)) - || ((getType() == kResourceTypeSync || getType() == kResourceTypeSync36) && (type != kResourceTypeSync))) { - warning("Resource type mismatch loading %s", _id.toString().c_str()); - unalloc(); - return false; - } - - _headerSize = file->readByte(); - - if (type == kResourceTypeAudio) { - if (_headerSize != 7 && _headerSize != 11 && _headerSize != 12) { - warning("Unsupported audio header"); + // Rave-resources (King's Quest 6) don't have any header at all + if (getType() != kResourceTypeRave) { + ResourceType type = _resMan->convertResType(file->readByte()); + if (((getType() == kResourceTypeAudio || getType() == kResourceTypeAudio36) && (type != kResourceTypeAudio)) + || ((getType() == kResourceTypeSync || getType() == kResourceTypeSync36) && (type != kResourceTypeSync))) { + warning("Resource type mismatch loading %s", _id.toString().c_str()); unalloc(); return false; } + + _headerSize = file->readByte(); + + if (type == kResourceTypeAudio) { + if (_headerSize != 7 && _headerSize != 11 && _headerSize != 12) { + warning("Unsupported audio header"); + unalloc(); + return false; + } - if (_headerSize != 7) { // Size is defined already from the map - // Load sample size - file->seek(7, SEEK_CUR); - size = file->readUint32LE(); - // Adjust offset to point at the header data again - file->seek(-11, SEEK_CUR); + if (_headerSize != 7) { // Size is defined already from the map + // Load sample size + file->seek(7, SEEK_CUR); + size = file->readUint32LE(); + // Adjust offset to point at the header data again + file->seek(-11, SEEK_CUR); + } } } - return loadPatch(file); } @@ -395,15 +397,22 @@ int ResourceManager::readAudioMapSCI11(ResourceSource *map) { syncSize = READ_LE_UINT16(ptr); ptr += 2; + // FIXME: The sync36 resource seems to be two bytes too big in KQ6CD + // (bytes taken from the RAVE resource right after it) if (syncSize > 0) addResource(ResourceId(kResourceTypeSync36, map->_volumeNumber, n & 0xffffff3f), src, offset, syncSize); } if (n & 0x40) { // This seems to define the size of raw lipsync data (at least - // in kq6), may also just be general appended data. - syncSize += READ_LE_UINT16(ptr); + // in KQ6 CD Windows). + int kq6HiresSyncSize = READ_LE_UINT16(ptr); ptr += 2; + + if (kq6HiresSyncSize > 0) { + addResource(ResourceId(kResourceTypeRave, map->_volumeNumber, n & 0xffffff3f), src, offset + syncSize, kq6HiresSyncSize); + syncSize += kq6HiresSyncSize; + } } addResource(ResourceId(kResourceTypeAudio36, map->_volumeNumber, n & 0xffffff3f), src, offset + syncSize); @@ -856,6 +865,7 @@ void AudioVolumeResourceSource::loadResource(ResourceManager *resMan, Resource * switch (res->getType()) { case kResourceTypeSync: case kResourceTypeSync36: + case kResourceTypeRave: // we should already have a (valid) size break; default: diff --git a/engines/sci/sci.cpp b/engines/sci/sci.cpp index ae1d3ebdc5..ff804af4b4 100644 --- a/engines/sci/sci.cpp +++ b/engines/sci/sci.cpp @@ -137,7 +137,7 @@ SciEngine::SciEngine(OSystem *syst, const ADGameDescription *desc, SciGameId gam SearchMan.addSubDirectoryMatching(gameDataDir, "duk"); // Duck movie files in Phantasmagoria 2 SearchMan.addSubDirectoryMatching(gameDataDir, "Robot Folder"); // Mac robot files SearchMan.addSubDirectoryMatching(gameDataDir, "Sound Folder"); // Mac audio files - SearchMan.addSubDirectoryMatching(gameDataDir, "Voices Folder"); // Mac audio36 files + SearchMan.addSubDirectoryMatching(gameDataDir, "Voices Folder", 0, 2, true); // Mac audio36 files (recursive for Torin) SearchMan.addSubDirectoryMatching(gameDataDir, "Voices"); // Mac audio36 files SearchMan.addSubDirectoryMatching(gameDataDir, "VMD Folder"); // Mac VMD files diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index adb5e7f8a8..39072f0329 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -2253,18 +2253,18 @@ Scene1337::Scene1337() { _shuffleEndedFl = false; _currentPlayerNumb = 0; - _field4240 = 0; - _field4242 = 0; + _actionIdx1 = 0; + _actionIdx2 = 0; _showPlayerTurn = false; - _field4246 = false; - _field424A = 0; + _displayHelpFl = false; + _winnerId = 0; _instructionsDisplayedFl = false; _instructionsWaitCount = 0; - _unkFctPtr412 = nullptr; - _discardCard = nullptr; - _field3EF4 = nullptr; - _field3EF8 = nullptr; + _delayedFunction = nullptr; + _actionCard1 = nullptr; + _actionCard2 = nullptr; + _actionCard3 = nullptr; _cursorCurRes = 0; _cursorCurStrip = 0; @@ -3373,7 +3373,7 @@ void Scene1337::Action3::signal() { scene->_currentPlayerNumb = 0; R2_GLOBALS._sceneObjects->draw(); scene->actionDisplay(1330, 0, 159, 10, 1, 200, 0, 7, 0, 154, 154); - scene->subC20F9(); + scene->handleNextTurn(); } else if (_actionIndex >= 1) { scene->_availableCardsPile[scene->_cardsAvailableNumb] = 0; scene->_cardsAvailableNumb--; @@ -3388,7 +3388,7 @@ void Scene1337::Action4::signal() { switch (_actionIndex++) { case 0: - if ((scene->_gameBoardSide[scene->_currentPlayerNumb]._handCard[0]._cardId == 0) && (scene->subC264B(scene->_gameBoardSide[scene->_currentPlayerNumb]._delayCard._cardId))) { + if ((scene->_gameBoardSide[scene->_currentPlayerNumb]._handCard[0]._cardId == 0) && (!scene->subC264B(scene->_gameBoardSide[scene->_currentPlayerNumb]._delayCard._cardId))) { if (scene->_cardsAvailableNumb < 0) scene->shuffleCards(); scene->_animatedCard._card.setPosition(Common::Point(162, 95), 0); @@ -3425,7 +3425,7 @@ void Scene1337::Action4::signal() { scene->setAnimationInfo(&scene->_gameBoardSide[scene->_currentPlayerNumb]._handCard[0]); scene->_animatedCard._card.hide(); - if ((scene->_gameBoardSide[scene->_currentPlayerNumb]._handCard[0]._cardId == 0) && (scene->subC264B(scene->_gameBoardSide[scene->_currentPlayerNumb]._delayCard._cardId == 0))) { + if ((scene->_gameBoardSide[scene->_currentPlayerNumb]._handCard[0]._cardId == 0) && (!scene->subC264B(scene->_gameBoardSide[scene->_currentPlayerNumb]._delayCard._cardId))) { if (scene->_cardsAvailableNumb < 0) scene->shuffleCards(); scene->_animatedCard._card.setPosition(Common::Point(162, 95)); @@ -3460,7 +3460,7 @@ void Scene1337::Action4::signal() { scene->setAnimationInfo(&scene->_gameBoardSide[scene->_currentPlayerNumb]._handCard[1]); scene->_animatedCard._card.hide(); - if ((scene->_gameBoardSide[scene->_currentPlayerNumb]._handCard[2]._cardId == 0) && (scene->subC264B(scene->_gameBoardSide[scene->_currentPlayerNumb]._delayCard._cardId == 0))) { + if ((scene->_gameBoardSide[scene->_currentPlayerNumb]._handCard[2]._cardId == 0) && (!scene->subC264B(scene->_gameBoardSide[scene->_currentPlayerNumb]._delayCard._cardId))) { if (scene->_cardsAvailableNumb < 0) scene->shuffleCards(); scene->_animatedCard._card.setPosition(Common::Point(162, 95)); @@ -3495,7 +3495,7 @@ void Scene1337::Action4::signal() { scene->setAnimationInfo(&scene->_gameBoardSide[scene->_currentPlayerNumb]._handCard[2]); scene->_animatedCard._card.hide(); - if ((scene->_gameBoardSide[scene->_currentPlayerNumb]._handCard[3]._cardId == 0) && (scene->subC264B(scene->_gameBoardSide[scene->_currentPlayerNumb]._delayCard._cardId == 0))) { + if ((scene->_gameBoardSide[scene->_currentPlayerNumb]._handCard[3]._cardId == 0) && (!scene->subC264B(scene->_gameBoardSide[scene->_currentPlayerNumb]._delayCard._cardId))) { if (scene->_cardsAvailableNumb < 0) scene->shuffleCards(); scene->_animatedCard._card.setPosition(Common::Point(162, 95)); @@ -3532,16 +3532,16 @@ void Scene1337::Action4::signal() { scene->_animatedCard._card.hide(); switch (scene->_currentPlayerNumb) { case 0: - scene->subCF979(); + scene->handlePlayer0(); break; case 1: - scene->subCF31D(); + scene->handlePlayer1(); break; case 2: - scene->subD0281(); + scene->handlePlayer2(); break; case 3: - scene->subC2C2F(); + scene->handlePlayer3(); break; default: break; @@ -3560,7 +3560,7 @@ void Scene1337::Action5::signal() { switch (_actionIndex++) { case 0: { - scene->_availableCardsPile[scene->_currentDiscardIndex] = scene->_discardCard->_cardId; + scene->_availableCardsPile[scene->_currentDiscardIndex] = scene->_actionCard1->_cardId; scene->_currentDiscardIndex--; if (!g_globals->_sceneObjects->contains(&scene->_discardPile._card)) { // The first discarded card makes the pile appear @@ -3571,15 +3571,15 @@ void Scene1337::Action5::signal() { scene->_discardPile._card.fixPriority(170); } - scene->_discardPile._cardId = scene->_discardCard->_cardId; - scene->_discardCard->_cardId = 0; - scene->_discardCard->_card.remove(); + scene->_discardPile._cardId = scene->_actionCard1->_cardId; + scene->_actionCard1->_cardId = 0; + scene->_actionCard1->_card.remove(); - if (scene->_discardCard == &scene->_selectedCard) { + if (scene->_actionCard1 == &scene->_selectedCard) { scene->setCursorData(5, 1, 4); scene->subC4CEC(); } - scene->_animatedCard._card.setPosition(scene->_discardCard->_stationPos, 0); + scene->_animatedCard._card.setPosition(scene->_actionCard1->_stationPos, 0); scene->_animatedCard._card.show(); Common::Point pt(128, 95); NpcMover *mover = new NpcMover(); @@ -3590,44 +3590,47 @@ void Scene1337::Action5::signal() { scene->_animatedCard._card.hide(); scene->setAnimationInfo(&scene->_discardPile); scene->_aSound2.play(61); - scene->subC20F9(); + scene->handleNextTurn(); break; default: break; } } +/** + * Animations for playing a card + */ void Scene1337::Action6::signal() { Scene1337 *scene = (Scene1337 *)R2_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: { - scene->_field3EF4->_cardId = 1; - scene->_field3EF4->_card.postInit(); - scene->_field3EF4->_card.hide(); - scene->_field3EF4->_card.setVisage(1332); - scene->_field3EF4->_card.setPosition(scene->_field3EF4->_stationPos); - scene->_field3EF4->_card.fixPriority(170); + scene->_actionCard2->_cardId = 1; + scene->_actionCard2->_card.postInit(); + scene->_actionCard2->_card.hide(); + scene->_actionCard2->_card.setVisage(1332); + scene->_actionCard2->_card.setPosition(scene->_actionCard2->_stationPos); + scene->_actionCard2->_card.fixPriority(170); - scene->_discardCard->_cardId = 0; - scene->_discardCard->_card.remove(); + scene->_actionCard1->_cardId = 0; + scene->_actionCard1->_card.remove(); - scene->_animatedCard._card.setPosition(scene->_discardCard->_stationPos); + scene->_animatedCard._card.setPosition(scene->_actionCard1->_stationPos); scene->_animatedCard._card.show(); NpcMover *mover = new NpcMover(); - scene->_animatedCard._card.addMover(mover, &scene->_field3EF4->_stationPos, this); + scene->_animatedCard._card.addMover(mover, &scene->_actionCard2->_stationPos, this); } break; case 1: scene->_animatedCard._card.hide(); - scene->setAnimationInfo(scene->_field3EF4); + scene->setAnimationInfo(scene->_actionCard2); scene->_aSound1.play(59); - if (scene->_discardCard == &scene->_selectedCard) { + if (scene->_actionCard1 == &scene->_selectedCard) { scene->setCursorData(5, 1, 4); scene->subC4CEC(); } - scene->subC20F9(); + scene->handleNextTurn(); break; default: break; @@ -3639,26 +3642,26 @@ void Scene1337::Action7::signal() { switch (_actionIndex++) { case 0: { - scene->_field3EF4->_cardId = scene->_discardCard->_cardId; + scene->_actionCard2->_cardId = scene->_actionCard1->_cardId; - scene->_discardCard->_cardId = 0; - scene->_discardCard->_card.remove(); + scene->_actionCard1->_cardId = 0; + scene->_actionCard1->_card.remove(); - scene->_animatedCard._card.setPosition(scene->_discardCard->_stationPos, 0); + scene->_animatedCard._card.setPosition(scene->_actionCard1->_stationPos, 0); scene->_animatedCard._card.show(); NpcMover *mover = new NpcMover(); - scene->_animatedCard._card.addMover(mover, &scene->_field3EF4->_stationPos, this); + scene->_animatedCard._card.addMover(mover, &scene->_actionCard2->_stationPos, this); } break; case 1: - if (scene->_discardCard == &scene->_selectedCard) { + if (scene->_actionCard1 == &scene->_selectedCard) { scene->setCursorData(5, 1, 4); scene->subC4CEC(); } - scene->setAnimationInfo(scene->_field3EF4); + scene->setAnimationInfo(scene->_actionCard2); scene->_aSound1.play(59); scene->_item5._cardId = 1; - scene->_item5._stationPos = scene->_field3EF4->_stationPos; + scene->_item5._stationPos = scene->_actionCard2->_stationPos; scene->_item5._card.postInit(); scene->_item5._card.hide(); scene->_item5._card._flags = OBJFLAG_HIDING; @@ -3675,109 +3678,111 @@ void Scene1337::Action8::signal() { switch (_actionIndex++) { case 0: { - scene->_availableCardsPile[scene->_currentDiscardIndex] = scene->_field3EF4->_cardId; + scene->_availableCardsPile[scene->_currentDiscardIndex] = scene->_actionCard2->_cardId; scene->_currentDiscardIndex--; - scene->_field3EF4->_cardId = scene->_discardCard->_cardId; - scene->_discardCard->_card.remove(); + scene->_actionCard2->_cardId = scene->_actionCard1->_cardId; + scene->_actionCard1->_card.remove(); - scene->_animatedCard._card.setPosition(scene->_discardCard->_stationPos, 0); + scene->_animatedCard._card.setPosition(scene->_actionCard1->_stationPos, 0); scene->_animatedCard._card.show(); NpcMover *mover = new NpcMover(); - scene->_animatedCard._card.addMover(mover, &scene->_field3EF4->_stationPos, this); + scene->_animatedCard._card.addMover(mover, &scene->_actionCard2->_stationPos, this); } break; case 1: scene->_animatedCard._card.hide(); - if (scene->_discardCard == &scene->_selectedCard) { + if (scene->_actionCard1 == &scene->_selectedCard) { scene->setCursorData(5, 1, 4); scene->subC4CEC(); } - scene->setAnimationInfo(scene->_field3EF4); + scene->setAnimationInfo(scene->_actionCard2); scene->_aSound1.play(58); - scene->discardCard(scene->_field3EF4); + scene->discardCard(scene->_actionCard2); break; default: break; } } +// Play delay card void Scene1337::Action9::signal() { Scene1337 *scene = (Scene1337 *)R2_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: { - scene->_field3EF4->_cardId = scene->_discardCard->_cardId; - scene->_field3EF4->_card.postInit(); - scene->_field3EF4->_card.hide(); - scene->_field3EF4->_card.setVisage(1332); - scene->_field3EF4->_card.setPosition(scene->_field3EF4->_stationPos, 0); - scene->_field3EF4->_card.fixPriority(170); + scene->_actionCard2->_cardId = scene->_actionCard1->_cardId; + scene->_actionCard2->_card.postInit(); + scene->_actionCard2->_card.hide(); + scene->_actionCard2->_card.setVisage(1332); + scene->_actionCard2->_card.setPosition(scene->_actionCard2->_stationPos, 0); + scene->_actionCard2->_card.fixPriority(170); - scene->_discardCard->_cardId = 0; - scene->_discardCard->_card.remove(); + scene->_actionCard1->_cardId = 0; + scene->_actionCard1->_card.remove(); - scene->_animatedCard._card.setPosition(scene->_discardCard->_stationPos, 0); + scene->_animatedCard._card.setPosition(scene->_actionCard1->_stationPos, 0); scene->_animatedCard._card.show(); NpcMover *mover = new NpcMover(); - scene->_animatedCard._card.addMover(mover, &scene->_field3EF4->_stationPos, this); + scene->_animatedCard._card.addMover(mover, &scene->_actionCard2->_stationPos, this); } break; case 1: scene->_animatedCard._card.hide(); - scene->setAnimationInfo(scene->_field3EF4); + scene->setAnimationInfo(scene->_actionCard2); scene->_aSound1.play(57); - if (scene->_discardCard == &scene->_selectedCard) { + if (scene->_actionCard1 == &scene->_selectedCard) { scene->setCursorData(5, 1, 4); scene->subC4CEC(); } - scene->subC20F9(); + scene->handleNextTurn(); break; default: break; } } +// Counter a trick with a card void Scene1337::Action10::signal() { Scene1337 *scene = (Scene1337 *)R2_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: { - scene->_field3EF8->_card.postInit(); - scene->_field3EF8->_card.hide(); - scene->_field3EF8->_card.setVisage(1332); - scene->_field3EF8->_card.setPosition(scene->_field3EF8->_stationPos, 0); - scene->_field3EF8->_card.fixPriority(170); - scene->_field3EF8->_cardId = scene->_discardCard->_cardId; + scene->_actionCard3->_card.postInit(); + scene->_actionCard3->_card.hide(); + scene->_actionCard3->_card.setVisage(1332); + scene->_actionCard3->_card.setPosition(scene->_actionCard3->_stationPos, 0); + scene->_actionCard3->_card.fixPriority(170); + scene->_actionCard3->_cardId = scene->_actionCard1->_cardId; - scene->_discardCard->_cardId = 0; - scene->_discardCard->_card.remove(); + scene->_actionCard1->_cardId = 0; + scene->_actionCard1->_card.remove(); - if (scene->_discardCard == &scene->_selectedCard) { + if (scene->_actionCard1 == &scene->_selectedCard) { scene->setCursorData(5, 1, 4); scene->subC4CEC(); } - scene->_animatedCard._card.setPosition(scene->_discardCard->_stationPos, 0); + scene->_animatedCard._card.setPosition(scene->_actionCard1->_stationPos, 0); scene->_animatedCard._card.show(); NpcMover *mover = new NpcMover(); - scene->_animatedCard._card.addMover(mover, &scene->_field3EF8->_stationPos, this); + scene->_animatedCard._card.addMover(mover, &scene->_actionCard3->_stationPos, this); } break; case 1: { scene->_animatedCard._card.hide(); - scene->setAnimationInfo(scene->_field3EF8); + scene->setAnimationInfo(scene->_actionCard3); scene->_aSound1.play(57); bool found = false; int indexFound = -1; - switch (scene->_field4240) { + switch (scene->_actionIdx1) { case 0: for (indexFound = 0; indexFound < 3; indexFound++) { if (scene->_gameBoardSide[0]._handCard[indexFound]._cardId == 29) { @@ -3817,13 +3822,13 @@ void Scene1337::Action10::signal() { bool found2 = false; if (found) { - switch (scene->_field4240) { + switch (scene->_actionIdx1) { case 0: - scene->subC51A0(&scene->_gameBoardSide[0]._handCard[indexFound], scene->_field3EF8); + scene->subC51A0(&scene->_gameBoardSide[0]._handCard[indexFound], scene->_actionCard3); found2 = true; break; case 1: - scene->subC51A0(&scene->_gameBoardSide[1]._handCard[indexFound], scene->_field3EF8); + scene->subC51A0(&scene->_gameBoardSide[1]._handCard[indexFound], scene->_actionCard3); found2 = true; break; case 2: @@ -3831,12 +3836,12 @@ void Scene1337::Action10::signal() { if (MessageDialog::show(USE_INTERCEPTOR, NO_MSG, YES_MSG) == 0) scene->subC4CEC(); else { - scene->subC51A0(&scene->_gameBoardSide[2]._handCard[indexFound], scene->_field3EF8); + scene->subC51A0(&scene->_gameBoardSide[2]._handCard[indexFound], scene->_actionCard3); found2 = true; } break; case 3: - scene->subC51A0(&scene->_gameBoardSide[3]._handCard[indexFound], scene->_field3EF8); + scene->subC51A0(&scene->_gameBoardSide[3]._handCard[indexFound], scene->_actionCard3); found2 = true; break; default: @@ -3847,7 +3852,7 @@ void Scene1337::Action10::signal() { if (!found2) break; - if (scene->_field4240 == 2) { + if (scene->_actionIdx1 == 2) { int j = 0; for (int i = 0; i <= 7; i++) { if (scene->_gameBoardSide[2]._outpostStation[i]._cardId != 0) @@ -3857,7 +3862,7 @@ void Scene1337::Action10::signal() { if (j <= 1) { for (int i = 0; i <= 7; i++) { if (scene->_gameBoardSide[2]._outpostStation[i]._cardId != 0) { - scene->_field3EF4 = &scene->_gameBoardSide[2]._outpostStation[i]; + scene->_actionCard2 = &scene->_gameBoardSide[2]._outpostStation[i]; break; } } @@ -3880,7 +3885,7 @@ void Scene1337::Action10::signal() { for (int i = 0; i <= 7; i++) { if (scene->_gameBoardSide[2]._outpostStation[i].isIn(scene->_selectedCard._stationPos) && (scene->_gameBoardSide[2]._outpostStation[i]._cardId != 0)) { - scene->_field3EF4 = &scene->_gameBoardSide[2]._outpostStation[0]; + scene->_actionCard2 = &scene->_gameBoardSide[2]._outpostStation[0]; found2 = true; break; } @@ -3890,27 +3895,28 @@ void Scene1337::Action10::signal() { } } - scene->_availableCardsPile[scene->_currentDiscardIndex] = scene->_field3EF4->_cardId; + scene->_availableCardsPile[scene->_currentDiscardIndex] = scene->_actionCard2->_cardId; scene->_currentDiscardIndex--; - scene->_field3EF4->_cardId = 0; - scene->_field3EF4->_card.remove(); + scene->_actionCard2->_cardId = 0; + scene->_actionCard2->_card.remove(); - scene->_animatedCard._card.setPosition(scene->_field3EF4->_stationPos, 0); + scene->_animatedCard._card.setPosition(scene->_actionCard2->_stationPos, 0); scene->_animatedCard._card.show(); NpcMover *mover = new NpcMover(); - scene->_animatedCard._card.addMover(mover, &scene->_field3EF8->_stationPos, this); + scene->_animatedCard._card.addMover(mover, &scene->_actionCard3->_stationPos, this); } break; case 2: scene->_animatedCard._card.hide(); - scene->discardCard(scene->_field3EF8); + scene->discardCard(scene->_actionCard3); break; default: break; } } +// Use trick (card #25 - thieft ?) and pick a card from the opponent void Scene1337::Action11::signal() { Scene1337 *scene = (Scene1337 *)R2_GLOBALS._sceneManager._scene; @@ -3918,36 +3924,36 @@ void Scene1337::Action11::signal() { switch (_actionIndex++) { case 0: { - scene->_field3EF4->_card.postInit(); - scene->_field3EF4->_card.hide(); - scene->_field3EF4->_card.setVisage(1332); - scene->_field3EF4->_card.setPosition(scene->_field3EF4->_stationPos, 0); - scene->_field3EF4->_card.fixPriority(170); - scene->_field3EF4->_cardId = 25; - - if (scene->_field4240 == 2) { - scene->_animatedCard._card.setPosition(scene->_field3EF4->_stationPos, 0); + scene->_actionCard2->_card.postInit(); + scene->_actionCard2->_card.hide(); + scene->_actionCard2->_card.setVisage(1332); + scene->_actionCard2->_card.setPosition(scene->_actionCard2->_stationPos, 0); + scene->_actionCard2->_card.fixPriority(170); + scene->_actionCard2->_cardId = 25; + + if (scene->_actionIdx1 == 2) { + scene->_animatedCard._card.setPosition(scene->_actionCard2->_stationPos, 0); scene->setCursorData(5, 1, 4); } else { - scene->_discardCard->_cardId = 0; - scene->_discardCard->_card.remove(); - scene->_animatedCard._card.setPosition(scene->_discardCard->_stationPos, 0); + scene->_actionCard1->_cardId = 0; + scene->_actionCard1->_card.remove(); + scene->_animatedCard._card.setPosition(scene->_actionCard1->_stationPos, 0); } scene->_animatedCard._card.show(); NpcMover *mover = new NpcMover(); - scene->_animatedCard._card.addMover(mover, &scene->_field3EF4->_stationPos, this); + scene->_animatedCard._card.addMover(mover, &scene->_actionCard2->_stationPos, this); } break; case 1: { scene->_animatedCard._card.hide(); - scene->setAnimationInfo(scene->_field3EF4); + scene->setAnimationInfo(scene->_actionCard2); scene->_aSound1.play(57); bool found = false; int i = -1; - switch (scene->_field4242) { + switch (scene->_actionIdx2) { case 0: for (i = 0; i <= 3; i++) { if (scene->_gameBoardSide[0]._handCard[i]._cardId == 27) { @@ -3956,12 +3962,12 @@ void Scene1337::Action11::signal() { } } - if ((found) && (scene->subC3E92(scene->_field4240) != -1)) { - scene->_discardCard = &scene->_gameBoardSide[0]._handCard[i]; - scene->_field3EF4 = &scene->_gameBoardSide[0]._emptyStationPos; - if (scene->_field4240 != 0) { - int tmpVal = scene->subC3E92(scene->_field4240); - scene->_field3EF8 = &scene->_gameBoardSide[scene->_field4240]._handCard[tmpVal]; + if ((found) && (scene->getFreeHandCard(scene->_actionIdx1) != -1)) { + scene->_actionCard1 = &scene->_gameBoardSide[0]._handCard[i]; + scene->_actionCard2 = &scene->_gameBoardSide[0]._emptyStationPos; + if (scene->_actionIdx1 != 0) { + int tmpVal = scene->getFreeHandCard(scene->_actionIdx1); + scene->_actionCard3 = &scene->_gameBoardSide[scene->_actionIdx1]._handCard[tmpVal]; } scene->_item1.setAction(&scene->_action12); noAction = false; @@ -3975,12 +3981,12 @@ void Scene1337::Action11::signal() { } } - if ((found) && (scene->subC3E92(scene->_field4240) != -1)) { - scene->_discardCard = &scene->_gameBoardSide[1]._handCard[i]; - scene->_field3EF4 = &scene->_gameBoardSide[1]._emptyStationPos; - if (scene->_field4240 != 1) { - int tmpVal = scene->subC3E92(scene->_field4240); - scene->_field3EF8 = &scene->_gameBoardSide[scene->_field4240]._handCard[tmpVal]; + if ((found) && (scene->getFreeHandCard(scene->_actionIdx1) != -1)) { + scene->_actionCard1 = &scene->_gameBoardSide[1]._handCard[i]; + scene->_actionCard2 = &scene->_gameBoardSide[1]._emptyStationPos; + if (scene->_actionIdx1 != 1) { + int tmpVal = scene->getFreeHandCard(scene->_actionIdx1); + scene->_actionCard3 = &scene->_gameBoardSide[scene->_actionIdx1]._handCard[tmpVal]; } scene->_item1.setAction(&scene->_action12); noAction = false; @@ -3994,17 +4000,17 @@ void Scene1337::Action11::signal() { } } - if ((found) && (scene->subC3E92(scene->_field4240) != -1)) { + if ((found) && (scene->getFreeHandCard(scene->_actionIdx1) != -1)) { scene->subC4CD2(); if (MessageDialog::show(USE_DOUBLE_AGENT, NO_MSG, YES_MSG) == 0) scene->subC4CEC(); else { scene->subC4CEC(); - scene->_discardCard = &scene->_gameBoardSide[2]._handCard[i]; - scene->_field3EF4 = &scene->_gameBoardSide[2]._emptyStationPos; - if (scene->_field4240 != 2) { - int tmpVal = scene->subC3E92(scene->_field4240); - scene->_field3EF8 = &scene->_gameBoardSide[scene->_field4240]._handCard[tmpVal]; + scene->_actionCard1 = &scene->_gameBoardSide[2]._handCard[i]; + scene->_actionCard2 = &scene->_gameBoardSide[2]._emptyStationPos; + if (scene->_actionIdx1 != 2) { + int tmpVal = scene->getFreeHandCard(scene->_actionIdx1); + scene->_actionCard3 = &scene->_gameBoardSide[scene->_actionIdx1]._handCard[tmpVal]; } scene->_item1.setAction(&scene->_action12); noAction = false; @@ -4019,12 +4025,12 @@ void Scene1337::Action11::signal() { } } - if ((found) && (scene->subC3E92(scene->_field4240) != -1)) { - scene->_discardCard = &scene->_gameBoardSide[3]._handCard[i]; - scene->_field3EF4 = &scene->_gameBoardSide[3]._emptyStationPos; - if (scene->_field4240 != 3) { - int tmpVal = scene->subC3E92(scene->_field4240); - scene->_field3EF8 = &scene->_gameBoardSide[scene->_field4240]._handCard[tmpVal]; + if ((found) && (scene->getFreeHandCard(scene->_actionIdx1) != -1)) { + scene->_actionCard1 = &scene->_gameBoardSide[3]._handCard[i]; + scene->_actionCard2 = &scene->_gameBoardSide[3]._emptyStationPos; + if (scene->_actionIdx1 != 3) { + int tmpVal = scene->getFreeHandCard(scene->_actionIdx1); + scene->_actionCard3 = &scene->_gameBoardSide[scene->_actionIdx1]._handCard[tmpVal]; } scene->_item1.setAction(&scene->_action12); noAction = false; @@ -4037,11 +4043,11 @@ void Scene1337::Action11::signal() { if (!noAction) return; - if (scene->_field4240 == 2) { + if (scene->_actionIdx1 == 2) { int count = 0; - if (scene->_field4242 != 2) { + if (scene->_actionIdx2 != 2) { for (i = 0; i <= 3; i++) { - if (scene->_gameBoardSide[scene->_field4242]._handCard[i]._cardId == 0) + if (scene->_gameBoardSide[scene->_actionIdx2]._handCard[i]._cardId == 0) ++count; } } @@ -4051,7 +4057,7 @@ void Scene1337::Action11::signal() { found = false; while (!found) { - switch (scene->_field4242) { + switch (scene->_actionIdx2) { case 0: scene->actionDisplay(1330, 131, 159, 10, 1, 200, 0, 7, 0, 154, 154); break; @@ -4076,73 +4082,74 @@ void Scene1337::Action11::signal() { found = false; - if (scene->_field4242 != 2) { + if (scene->_actionIdx2 != 2) { for (i = 0; i <= 3; i++) { - if (scene->_gameBoardSide[scene->_field4242]._handCard[i].isIn(scene->_selectedCard._stationPos) && (scene->_gameBoardSide[scene->_field4242]._handCard[i]._cardId != 0)) { - scene->_field3EF8 = &scene->_gameBoardSide[scene->_field4242]._handCard[i]; + if (scene->_gameBoardSide[scene->_actionIdx2]._handCard[i].isIn(scene->_selectedCard._stationPos) && (scene->_gameBoardSide[scene->_actionIdx2]._handCard[i]._cardId != 0)) { + scene->_actionCard3 = &scene->_gameBoardSide[scene->_actionIdx2]._handCard[i]; found = true; break; } } } } // while - scene->_field4246 = true; + scene->_displayHelpFl = true; scene->subC4CEC(); } else { - if (scene->_field4242 != 2) { - int tmpVal = scene->subC3E92(scene->_field4242); - scene->_field3EF8 = &scene->_gameBoardSide[scene->_field4242]._handCard[tmpVal]; + if (scene->_actionIdx2 != 2) { + int tmpVal = scene->getFreeHandCard(scene->_actionIdx2); + scene->_actionCard3 = &scene->_gameBoardSide[scene->_actionIdx2]._handCard[tmpVal]; } } } - scene->_discardCard->_card.postInit(); - scene->_discardCard->_card.hide(); - scene->_discardCard->_card.setVisage(1332); - scene->_discardCard->_card.setPosition(scene->_discardCard->_stationPos, 0); - scene->_discardCard->_card.fixPriority(170); - scene->_discardCard->_card.setStrip2(1); - scene->_discardCard->_cardId = scene->_field3EF8->_cardId; + scene->_actionCard1->_card.postInit(); + scene->_actionCard1->_card.hide(); + scene->_actionCard1->_card.setVisage(1332); + scene->_actionCard1->_card.setPosition(scene->_actionCard1->_stationPos, 0); + scene->_actionCard1->_card.fixPriority(170); + scene->_actionCard1->_card.setStrip2(1); + scene->_actionCard1->_cardId = scene->_actionCard3->_cardId; - scene->_field3EF8->_cardId = 0; - scene->_field3EF8->_card.remove(); + scene->_actionCard3->_cardId = 0; + scene->_actionCard3->_card.remove(); - scene->_animatedCard._card.setPosition(scene->_field3EF8->_stationPos, 0); + scene->_animatedCard._card.setPosition(scene->_actionCard3->_stationPos, 0); scene->_animatedCard._card.show(); NpcMover *mover = new NpcMover(); - scene->_animatedCard._card.addMover(mover, &scene->_discardCard->_stationPos, this); + scene->_animatedCard._card.addMover(mover, &scene->_actionCard1->_stationPos, this); } break; case 2: scene->_animatedCard._card.hide(); - switch (scene->_field4240) { + switch (scene->_actionIdx1) { case 0: - scene->_discardCard->_card.setFrame2(2); - scene->_discardCard->_card.show(); + scene->_actionCard1->_card.setFrame2(2); + scene->_actionCard1->_card.show(); break; case 1: - scene->_discardCard->_card.setFrame2(4); - scene->_discardCard->_card.show(); + scene->_actionCard1->_card.setFrame2(4); + scene->_actionCard1->_card.show(); break; case 3: - scene->_discardCard->_card.setFrame2(3); - scene->_discardCard->_card.show(); + scene->_actionCard1->_card.setFrame2(3); + scene->_actionCard1->_card.show(); break; default: - scene->setAnimationInfo(scene->_discardCard); + scene->setAnimationInfo(scene->_actionCard1); break; } scene->_currentPlayerNumb--; scene->_showPlayerTurn = false; - scene->discardCard(scene->_field3EF4); + scene->discardCard(scene->_actionCard2); break; default: break; } } +// Pick a card in opponent hand void Scene1337::Action12::signal() { Scene1337 *scene = (Scene1337 *)R2_GLOBALS._sceneManager._scene; @@ -4151,26 +4158,26 @@ void Scene1337::Action12::signal() { signal(); break; case 1: { - scene->_availableCardsPile[scene->_currentDiscardIndex] = scene->_field3EF4->_cardId; + scene->_availableCardsPile[scene->_currentDiscardIndex] = scene->_actionCard2->_cardId; scene->_currentDiscardIndex++; - scene->_field3EF4->_cardId = scene->_discardCard->_cardId; - scene->_discardCard->_cardId = 0; - scene->_discardCard->_card.remove(); - scene->_animatedCard._card.setPosition(scene->_discardCard->_stationPos, 0); + scene->_actionCard2->_cardId = scene->_actionCard1->_cardId; + scene->_actionCard1->_cardId = 0; + scene->_actionCard1->_card.remove(); + scene->_animatedCard._card.setPosition(scene->_actionCard1->_stationPos, 0); scene->_animatedCard._card.show(); NpcMover *mover = new NpcMover(); - scene->_animatedCard._card.addMover(mover, &scene->_field3EF4->_stationPos, this); + scene->_animatedCard._card.addMover(mover, &scene->_actionCard2->_stationPos, this); } break; case 2: scene->_animatedCard._card.hide(); - scene->setAnimationInfo(scene->_field3EF4); + scene->setAnimationInfo(scene->_actionCard2); scene->_aSound1.play(58); - if (scene->_field4242 == 2) { + if (scene->_actionIdx2 == 2) { int count = 0; int i = -1; - switch (scene->_field4240) { + switch (scene->_actionIdx1) { case 0: for (i = 0; i <= 3; i++) { if (scene->_gameBoardSide[0]._handCard[i]._cardId != 0) @@ -4179,7 +4186,8 @@ void Scene1337::Action12::signal() { break; case 1: for (i = 0; i <= 3; i++) { - if (scene->_gameBoardSide[3]._handCard[i]._cardId != 0) + // The original game was counting in the hand of player 3, which is obviously wrong + if (scene->_gameBoardSide[1]._handCard[i]._cardId != 0) ++count; } break; @@ -4199,7 +4207,7 @@ void Scene1337::Action12::signal() { bool found = false; while (!found) { - switch (scene->_field4240) { + switch (scene->_actionIdx1) { case 0: scene->actionDisplay(1330, 131, 159, 10, 1, 200, 0, 7, 0, 154, 154); break; @@ -4222,31 +4230,31 @@ void Scene1337::Action12::signal() { scene->_selectedCard._stationPos = event.mousePos; - if (scene->_field4240 == 0) { + if (scene->_actionIdx1 == 0) { for (i = 0; i <= 3; i++) { if (scene->_gameBoardSide[0]._handCard[i].isIn(scene->_selectedCard._stationPos) && (scene->_gameBoardSide[0]._handCard[i]._cardId != 0)) { found = true; - scene->_field3EF8 = &scene->_gameBoardSide[0]._handCard[i]; + scene->_actionCard3 = &scene->_gameBoardSide[0]._handCard[i]; break; } } } - if (scene->_field4240 == 3) { + if (scene->_actionIdx1 == 3) { for (i = 0; i <= 3; i++) { if (scene->_gameBoardSide[3]._handCard[i].isIn(scene->_selectedCard._stationPos) && (scene->_gameBoardSide[3]._handCard[i]._cardId != 0)) { found = true; - scene->_field3EF8 = &scene->_gameBoardSide[3]._handCard[i]; + scene->_actionCard3 = &scene->_gameBoardSide[3]._handCard[i]; break; } } } - if (scene->_field4240 == 1) { + if (scene->_actionIdx1 == 1) { for (i = 0; i <= 3; i++) { if (scene->_gameBoardSide[1]._handCard[i].isIn(scene->_selectedCard._stationPos) && (scene->_gameBoardSide[1]._handCard[i]._cardId != 0)) { found = true; - scene->_field3EF8 = &scene->_gameBoardSide[1]._handCard[i]; + scene->_actionCard3 = &scene->_gameBoardSide[1]._handCard[i]; break; } } @@ -4254,61 +4262,61 @@ void Scene1337::Action12::signal() { } scene->subC4CEC(); } else { - if (scene->_field4240 != 1) { - switch (scene->_field4240) { + if (scene->_actionIdx1 != 1) { + switch (scene->_actionIdx1) { case 0: - scene->_field3EF8 = &scene->_gameBoardSide[0]._handCard[scene->subC3E92(0)]; + scene->_actionCard3 = &scene->_gameBoardSide[0]._handCard[scene->getFreeHandCard(0)]; break; case 3: - scene->_field3EF8 = &scene->_gameBoardSide[3]._handCard[scene->subC3E92(3)]; + scene->_actionCard3 = &scene->_gameBoardSide[3]._handCard[scene->getFreeHandCard(3)]; break; default: break; } } else { - scene->_field3EF8 = &scene->_gameBoardSide[1]._handCard[scene->subC3E92(1)]; + scene->_actionCard3 = &scene->_gameBoardSide[1]._handCard[scene->getFreeHandCard(1)]; } } - scene->_discardCard->_card.postInit(); - scene->_discardCard->_card.hide(); - scene->_discardCard->_card.setVisage(1332); - scene->_discardCard->_card.setPosition(scene->_discardCard->_stationPos); - scene->_discardCard->_card.fixPriority(170); - scene->_discardCard->_card.setStrip2(1); - scene->_discardCard->_cardId = scene->_field3EF8->_cardId; + scene->_actionCard1->_card.postInit(); + scene->_actionCard1->_card.hide(); + scene->_actionCard1->_card.setVisage(1332); + scene->_actionCard1->_card.setPosition(scene->_actionCard1->_stationPos); + scene->_actionCard1->_card.fixPriority(170); + scene->_actionCard1->_card.setStrip2(1); + scene->_actionCard1->_cardId = scene->_actionCard3->_cardId; - scene->_field3EF8->_cardId = 0; - scene->_field3EF8->_card.remove(); + scene->_actionCard3->_cardId = 0; + scene->_actionCard3->_card.remove(); - scene->_animatedCard._card.setPosition(scene->_field3EF8->_stationPos); + scene->_animatedCard._card.setPosition(scene->_actionCard3->_stationPos); scene->_animatedCard._card.show(); scene->_aSound1.play(57); NpcMover *mover = new NpcMover(); - scene->_animatedCard._card.addMover(mover, &scene->_discardCard->_stationPos, this); + scene->_animatedCard._card.addMover(mover, &scene->_actionCard1->_stationPos, this); } break; case 3: scene->_animatedCard._card.hide(); - switch (scene->_field4242) { + switch (scene->_actionIdx2) { case 0: - scene->_discardCard->_card.setFrame2(2); - scene->_discardCard->_card.show(); + scene->_actionCard1->_card.setFrame2(2); + scene->_actionCard1->_card.show(); break; case 1: - scene->_discardCard->_card.setFrame2(4); - scene->_discardCard->_card.show(); + scene->_actionCard1->_card.setFrame2(4); + scene->_actionCard1->_card.show(); break; case 3: - scene->_discardCard->_card.setFrame2(3); - scene->_discardCard->_card.show(); + scene->_actionCard1->_card.setFrame2(3); + scene->_actionCard1->_card.show(); break; default: - scene->setAnimationInfo(scene->_discardCard); + scene->setAnimationInfo(scene->_actionCard1); break; } - scene->discardCard(scene->_field3EF4); + scene->discardCard(scene->_actionCard2); break; default: break; @@ -4320,29 +4328,29 @@ void Scene1337::Action13::signal() { switch (_actionIndex++) { case 0: { - scene->_availableCardsPile[scene->_currentDiscardIndex] = scene->_field3EF4->_cardId; + scene->_availableCardsPile[scene->_currentDiscardIndex] = scene->_actionCard2->_cardId; scene->_currentDiscardIndex--; - scene->_field3EF4->_cardId = scene->_discardCard->_cardId; + scene->_actionCard2->_cardId = scene->_actionCard1->_cardId; - scene->_discardCard->_cardId = 0; - scene->_discardCard->_card.remove(); + scene->_actionCard1->_cardId = 0; + scene->_actionCard1->_card.remove(); - scene->_animatedCard._card.setPosition(scene->_discardCard->_stationPos, 0); + scene->_animatedCard._card.setPosition(scene->_actionCard1->_stationPos, 0); scene->_animatedCard._card.show(); NpcMover *mover = new NpcMover(); - scene->_animatedCard._card.addMover(mover, &scene->_field3EF4->_stationPos, this); + scene->_animatedCard._card.addMover(mover, &scene->_actionCard2->_stationPos, this); } break; case 1: scene->_animatedCard._card.hide(); - scene->setAnimationInfo(scene->_field3EF4); + scene->setAnimationInfo(scene->_actionCard2); scene->_aSound1.play(58); signal(); break; case 2: - scene->discardCard(scene->_field3EF4); + scene->discardCard(scene->_actionCard2); break; default: break; @@ -4359,15 +4367,17 @@ void Scene1337::postInit(SceneObjectList *OwnerList) { // Hide the user interface BF_GLOBALS._interfaceY = SCREEN_HEIGHT; + R2_GLOBALS._uiElements._visible = false; R2_GLOBALS._player.enableControl(); R2_GLOBALS._player._canWalk = false; + R2_GLOBALS._player._uiEnabled = false; - _unkFctPtr412 = NULL; + _delayedFunction = nullptr; - _discardCard = nullptr; - _field3EF4 = nullptr; - _field3EF8 = nullptr; + _actionCard1 = nullptr; + _actionCard2 = nullptr; + _actionCard3 = nullptr; _gameBoardSide[2]._handCard[0]._stationPos = Common::Point(10, 174); _gameBoardSide[2]._handCard[1]._stationPos = Common::Point(37, 174); @@ -4485,17 +4495,17 @@ void Scene1337::process(Event &event) { if (event.btnState != BTNSHIFT_RIGHT) { updateCursorId(R2_GLOBALS._mouseCursorId, true); event.handled = true; - } else if (_unkFctPtr412) { - FunctionPtrType tmpFctPtr = _unkFctPtr412; - _unkFctPtr412 = NULL; + } else if (_delayedFunction) { + FunctionPtrType tmpFctPtr = _delayedFunction; + _delayedFunction = nullptr; (this->*tmpFctPtr)(); event.handled = true; } } else if (event.eventType == EVENT_KEYPRESS) { if (event.kbd.keycode == Common::KEYCODE_SPACE) { - if (_unkFctPtr412) { - FunctionPtrType tmpFctPtr = _unkFctPtr412; - _unkFctPtr412 = NULL; + if (_delayedFunction) { + FunctionPtrType tmpFctPtr = _delayedFunction; + _delayedFunction = nullptr; (this->*tmpFctPtr)(); event.handled = true; } @@ -4534,24 +4544,24 @@ void Scene1337::actionDisplay(int resNum, int lineNum, int x, int y, int keepOnS SET_EXT_FGCOLOR, colFGExt, LIST_END); } -void Scene1337::setAnimationInfo(Card *subObj) { - if (!subObj) +void Scene1337::setAnimationInfo(Card *card) { + if (!card) return; - if (subObj->_cardId > 9) { - if (subObj->_cardId > 25) { - subObj->_card.setStrip2(4); - subObj->_card.setFrame(subObj->_cardId - 25); + if (card->_cardId > 9) { + if (card->_cardId > 25) { + card->_card.setStrip2(4); + card->_card.setFrame(card->_cardId - 25); } else { - subObj->_card.setStrip2(3); - subObj->_card.setFrame(subObj->_cardId - 9); + card->_card.setStrip2(3); + card->_card.setFrame(card->_cardId - 9); } } else { - subObj->_card.setStrip2(2); - subObj->_card.setFrame(subObj->_cardId); + card->_card.setStrip2(2); + card->_card.setFrame(card->_cardId); } - subObj->_card.show(); + card->_card.show(); R2_GLOBALS._sceneObjects->draw(); } @@ -4559,11 +4569,11 @@ void Scene1337::subC20E5() { subC2586(); } -void Scene1337::subC20F9() { - switch (_field424A) { +void Scene1337::handleNextTurn() { + switch (_winnerId) { case -1: ++_currentPlayerNumb; - if (_currentPlayerNumb == 3) + if (_currentPlayerNumb > 3) _currentPlayerNumb = 0; if (_showPlayerTurn) { @@ -4588,7 +4598,7 @@ void Scene1337::subC20F9() { } if (!_autoplay) - _unkFctPtr412 = &Scene1337::subC20E5; + _delayedFunction = &Scene1337::subC20E5; else subC20E5(); } else { @@ -4631,7 +4641,7 @@ void Scene1337::subC20F9() { break; } - if (_field424A != -1) + if (_winnerId != -1) R2_GLOBALS._sceneManager.changeScene(125); } @@ -4643,9 +4653,9 @@ void Scene1337::subC2586() { switch (_currentPlayerNumb) { case 2: subC4CD2(); - if (_field4246) + if (_displayHelpFl) actionDisplay(1330, 114, 159, 10, 1, 200, 0, 7, 0, 154, 154); - _field4246 = false; + _displayHelpFl = false; // No break on purpose case 0: // No break on purpose @@ -4661,8 +4671,8 @@ void Scene1337::subC2586() { } -bool Scene1337::subC264B(int arg1) { - switch (arg1) { +bool Scene1337::subC264B(int cardId) { + switch (cardId) { case 10: // No break on purpose case 12: @@ -4684,8 +4694,8 @@ bool Scene1337::subC264B(int arg1) { } } -bool Scene1337::subC2687(int arg1) { - switch (arg1) { +bool Scene1337::subC2687(int cardId) { + switch (cardId) { case 11: // No break on purpose case 14: @@ -4699,26 +4709,25 @@ bool Scene1337::subC2687(int arg1) { } } -int Scene1337::subC26CB(int arg1, int arg2) { - if ((_gameBoardSide[arg1]._handCard[arg2]._cardId > 1) && (_gameBoardSide[arg1]._handCard[arg2]._cardId <= 9)) { - return arg2; - } +int Scene1337::subC26CB(int playerId, int handCardId) { + if ((_gameBoardSide[playerId]._handCard[handCardId]._cardId > 1) && (_gameBoardSide[playerId]._handCard[handCardId]._cardId <= 9)) + return handCardId; return -1; } -int Scene1337::subC2719(int arg1) { +int Scene1337::findNormalCardInHand(int playerId) { for (int i = 0; i <= 3; i++) { - if (_gameBoardSide[arg1]._handCard[i]._cardId == 1) + if (_gameBoardSide[playerId]._handCard[i]._cardId == 1) return i; } return -1; } -int Scene1337::subC274D(int arg1) { +int Scene1337::subC274D(int playerId) { for (int i = 0; i <= 3; i++) { - if (_gameBoardSide[arg1]._handCard[i]._cardId == 13) + if (_gameBoardSide[playerId]._handCard[i]._cardId == 13) return i; } @@ -4751,8 +4760,8 @@ int Scene1337::subC27B5(int arg1) { } } -int Scene1337::subC27F9(int arg1) { - switch (arg1) { +int Scene1337::isSlowCard(int cardId) { + switch (cardId) { case 10: // No break on purpose case 12: @@ -4768,7 +4777,7 @@ int Scene1337::subC27F9(int arg1) { case 20: // No break on purpose case 21: - return arg1; + return cardId; default: return -1; } @@ -4780,7 +4789,7 @@ void Scene1337::subC2835(int arg1) { switch (arg1) { case 0: for (i = 0; i <= 3; i++) { - if (subC27F9(_gameBoardSide[arg1]._handCard[i]._cardId) != -1) { + if (isSlowCard(_gameBoardSide[arg1]._handCard[i]._cardId) != -1) { found = true; break; } @@ -4878,7 +4887,7 @@ void Scene1337::subC2835(int arg1) { break; for (i = 0; i <= 3; i++) { - if (subC27F9(_gameBoardSide[arg1]._handCard[i]._cardId) != -1) { + if (isSlowCard(_gameBoardSide[arg1]._handCard[i]._cardId) != -1) { found = true; break; } @@ -4922,205 +4931,21 @@ void Scene1337::subC2835(int arg1) { discardCard(&_gameBoardSide[arg1]._handCard[i]); } -void Scene1337::subC2C2F() { - bool found = true; - - if (_gameBoardSide[3]._delayCard._cardId != 0) { - switch (_gameBoardSide[3]._delayCard._cardId) { - case 10: - // No break on purpose - case 12: - // No break on purpose - case 15: - // No break on purpose - case 17: - // No break on purpose - case 18: - // No break on purpose - case 19: - // No break on purpose - case 20: - // No break on purpose - case 21: - discardCard(&_gameBoardSide[3]._delayCard); - found = false; - break; - default: - found = false; - int i; - for (i = 0; i <= 3; i++) { - if (subC3386(_gameBoardSide[3]._delayCard._cardId, _gameBoardSide[3]._handCard[i]._cardId)) { - found = true; - break; - } - } - - if (found) { - found = false; - subC34A1(&_gameBoardSide[3]._handCard[i], &_gameBoardSide[3]._delayCard); - } - break; - } - } - - if (!found) - return; - - int randIndx = R2_GLOBALS._randomSource.getRandomNumber(3); - - if (_gameBoardSide[3]._handCard[randIndx]._cardId == 1) { - found = false; - - for (int i = 0; i <= 7; i++) { - if ((_gameBoardSide[3]._outpostStation[i]._cardId == 0) && (!subC2687(_gameBoardSide[3]._delayCard._cardId))) { - subC340B(&_gameBoardSide[3]._handCard[randIndx], &_gameBoardSide[3]._outpostStation[i]); - found = true; - break; - } - } - - if (found) { - return; - } - } else if (_gameBoardSide[3]._handCard[randIndx]._cardId <= 9) { - found = false; - - for (int i = 0; i <= 7; i++) { - if (_gameBoardSide[3]._outpostStation[i]._cardId == _gameBoardSide[3]._handCard[randIndx]._cardId) { - found = true; - break; - } - } - - if (!found) { - for (int i = 0; i <= 7; i++) { - if ((_gameBoardSide[3]._outpostStation[i]._cardId == 1) && (!subC2687(_gameBoardSide[3]._delayCard._cardId))) { - int tmpVal = 0; - - for (int j = 0; j <= 7; j++) { - if ((_gameBoardSide[3]._outpostStation[j]._cardId > 1) && (_gameBoardSide[3]._outpostStation[j]._cardId <= 9)) - ++tmpVal; - } - - if (tmpVal == 7) - _field424A = 3; - - subC33C0(&_gameBoardSide[3]._handCard[randIndx], &_gameBoardSide[3]._outpostStation[i]); - found = true; - break; - } - } - if (found) - return; - } - } else if (_gameBoardSide[3]._handCard[randIndx]._cardId == 13) { - int tmpVal = subC331B(3); - - if (tmpVal != -1) { - subC358E(&_gameBoardSide[3]._handCard[randIndx], tmpVal); - return; - } - } else if (_gameBoardSide[3]._handCard[randIndx]._cardId == 25) { - int tmpVal = -1; - found = false; - int tmpRandIndx = R2_GLOBALS._randomSource.getRandomNumber(3); - - for (int i = 0; i <= 3; i++) { - if ( (tmpRandIndx != 3) - && ( (_gameBoardSide[tmpRandIndx]._handCard[0]._cardId != 0) - || (_gameBoardSide[tmpRandIndx]._handCard[1]._cardId != 0) - || (_gameBoardSide[tmpRandIndx]._handCard[2]._cardId != 0) - || (_gameBoardSide[tmpRandIndx]._handCard[3]._cardId != 0) )) { - tmpVal = tmpRandIndx; - break; - } - - ++tmpRandIndx; - if (tmpRandIndx > 3) - tmpRandIndx = 0; - } - - if (tmpVal != -1) { - subC318B(3, &_gameBoardSide[3]._handCard[randIndx], tmpVal); - return; - } - } else { - switch (_gameBoardSide[3]._handCard[randIndx]._cardId) { - case 10: - // No break on purpose - case 11: - // No break on purpose - case 12: - // No break on purpose - case 14: - // No break on purpose - case 15: - // No break on purpose - case 16: - // No break on purpose - case 17: - // No break on purpose - case 18: - // No break on purpose - case 19: - // No break on purpose - case 20: - // No break on purpose - case 21: - // No break on purpose - case 24: { - int tmpVal = -1; - int tmpRandIndx = R2_GLOBALS._randomSource.getRandomNumber(3); - - for (int i = 0; i <= 3; i++) { - if (tmpRandIndx != 3) { - // The variables 'i' and 'j' are not used in the inner code of the loop. - // It's understandable for 'i', which helps making sure that tmpVal is used properly, - // but it's suspect for j - for (int j = 0; j <= 7; j++) { - if ((_gameBoardSide[tmpRandIndx]._delayCard._cardId == 0) && (subC32B1(tmpRandIndx, _gameBoardSide[3]._handCard[randIndx]._cardId))) { - tmpVal = j; - } - } - } - - ++tmpRandIndx; - if (tmpRandIndx > 3) - tmpRandIndx = 0; - - if (tmpVal != -1) - break; - } - - if (tmpVal != -1) { - // Useless second identical check skipped - subC3456(&_gameBoardSide[3]._handCard[randIndx], &_gameBoardSide[tmpVal]._delayCard); - return; - } - } - default: - break; - } - } - - discardCard(&_gameBoardSide[3]._handCard[randIndx]); -} - -void Scene1337::subC318B(int arg1, Card *subObj1, int arg3) { - _field4240 = arg1; - _field4242 = arg3; +void Scene1337::playThieftCard(int playerId, Card *card, int victimId) { + _actionIdx1 = playerId; + _actionIdx2 = victimId; int randIndx; for (;;) { randIndx = R2_GLOBALS._randomSource.getRandomNumber(3); - if (_gameBoardSide[arg3]._handCard[randIndx]._cardId != 0) + if (_gameBoardSide[victimId]._handCard[randIndx]._cardId != 0) break; } - _discardCard = subObj1; - _field3EF4 = &_gameBoardSide[arg3]._emptyStationPos; - _field3EF8 = &_gameBoardSide[arg3]._handCard[randIndx]; + _actionCard1 = card; + _actionCard2 = &_gameBoardSide[victimId]._emptyStationPos; + _actionCard3 = &_gameBoardSide[victimId]._handCard[randIndx]; _item1.setAction(&_action11); } @@ -5163,8 +4988,7 @@ int Scene1337::subC3257(int arg1) { bool Scene1337::subC32B1(int arg1, int arg2) { for (int i = 0; i <= 7; i++) { if (_gameBoardSide[arg1]._outpostStation[i]._cardId != 0) { - int tmpVal = subC3257(arg2); - if (tmpVal == _gameBoardSide[arg1]._outpostStation[i]._cardId) + if (subC3257(arg2) == _gameBoardSide[arg1]._outpostStation[i]._cardId) return false; } } @@ -5196,92 +5020,85 @@ int Scene1337::subC331B(int arg1) { return -1; } -bool Scene1337::subC3386(int arg1, int arg2) { - if ((arg1 == 11) && (arg2 == 26)) +bool Scene1337::checkAntiDelayCard(int delayCardId, int cardId) { + if ((delayCardId == 11) && (cardId == 26)) return true; - if ((arg1 == 14) && (arg2 == 30)) + if ((delayCardId == 14) && (cardId == 30)) return true; - if ((arg1 == 16) && (arg2 == 32)) + if ((delayCardId == 16) && (cardId == 32)) return true; - if ((arg1 == 24) && (arg2 == 28)) + if ((delayCardId == 24) && (cardId == 28)) return true; return false; } void Scene1337::subC33C0(Card *subObj1, Card *subObj2) { - _field3EF4 = subObj2; - _discardCard = subObj1; + _actionCard1 = subObj1; + _actionCard2 = subObj2; _item1.setAction(&_action7); } -int Scene1337::subC3E92(int arg1) { - if ( (_gameBoardSide[arg1]._handCard[0]._cardId == 0) - && (_gameBoardSide[arg1]._handCard[1]._cardId == 0) - && (_gameBoardSide[arg1]._handCard[2]._cardId == 0) - && (_gameBoardSide[arg1]._handCard[3]._cardId == 0)) +int Scene1337::getFreeHandCard(int playerId) { + if ( (_gameBoardSide[playerId]._handCard[0]._cardId == 0) + && (_gameBoardSide[playerId]._handCard[1]._cardId == 0) + && (_gameBoardSide[playerId]._handCard[2]._cardId == 0) + && (_gameBoardSide[playerId]._handCard[3]._cardId == 0)) return -1; int randIndx; for (;;) { randIndx = R2_GLOBALS._randomSource.getRandomNumber(3); - if (_gameBoardSide[arg1]._handCard[randIndx]._cardId == 0) + if (_gameBoardSide[playerId]._handCard[randIndx]._cardId == 0) break; } return randIndx; } -void Scene1337::subC340B(Card *subObj1, Card *subObj2) { - _discardCard = subObj1; - _field3EF4 = subObj2; +void Scene1337::playCard(Card *card, Card *dest) { + _actionCard1 = card; + _actionCard2 = dest; _item1.setAction(&_action6); } -void Scene1337::subC3456(Card *subObj1, Card *subObj2) { - _discardCard = subObj1; - _field3EF4 = subObj2; +void Scene1337::playDelayCard(Card *card, Card *dest) { + _actionCard1 = card; + _actionCard2 = dest; _item1.setAction(&_action9); } -void Scene1337::subC34A1(Card *subObj1, Card *subObj2) { - _discardCard = subObj1; - _field3EF4 = subObj2; +void Scene1337::playAntiDelayCard(Card *card, Card *dest) { + _actionCard1 = card; + _actionCard2 = dest; _item1.setAction(&_action8); } Scene1337::Card *Scene1337::subC34EC(int arg1) { for (int i = 0; i <= 7; i++) { - if (_gameBoardSide[arg1]._outpostStation[i]._cardId == 1) { - return &_gameBoardSide[arg1]._outpostStation[i]; - } - } - - for (int i = 0; i <= 7; i++) { - if ((_gameBoardSide[arg1]._outpostStation[i]._cardId != 0) && (_gameBoardSide[arg1]._outpostStation[i]._cardId < 10)) { + if ((_gameBoardSide[arg1]._outpostStation[i]._cardId > 0) && (_gameBoardSide[arg1]._outpostStation[i]._cardId < 10)) return &_gameBoardSide[arg1]._outpostStation[i]; - } } - return NULL; + return nullptr; } -void Scene1337::subC358E(Card *subObj1, int arg2) { - _discardCard = subObj1; - _field3EF4 = subC34EC(arg2); - _field3EF8 = &_gameBoardSide[arg2]._emptyStationPos; - _field4240 = arg2; +void Scene1337::playCounterTrickCard(Card *card, int playerId) { + _actionCard1 = card; + _actionCard2 = subC34EC(playerId); + _actionCard3 = &_gameBoardSide[playerId]._emptyStationPos; + _actionIdx1 = playerId; _item1.setAction(&_action10); } void Scene1337::discardCard(Card *card) { - _discardCard = card; + _actionCard1 = card; _item1.setAction(&_action5); } @@ -5301,8 +5118,8 @@ void Scene1337::subC4CEC() { } void Scene1337::subC51A0(Card *subObj1, Card *subObj2) { - _discardCard = subObj1; - _field3EF4 = subObj2; + _actionCard1 = subObj1; + _actionCard2 = subObj2; _item1.setAction(&_action13); } @@ -5550,8 +5367,8 @@ void Scene1337::subPostInit() { _currentPlayerArrow.hide(); _showPlayerTurn = true; - _field4246 = false; - _field424A = -1; + _displayHelpFl = false; + _winnerId = -1; _helpIcon.postInit(); _helpIcon.setup(9531, 1, 1); @@ -5947,7 +5764,260 @@ void Scene1337::handleClick(int arg1, Common::Point pt) { } } -void Scene1337::subCF31D() { +void Scene1337::handlePlayer0() { + bool found = true; + + if (_gameBoardSide[0]._delayCard._cardId != 0) { + switch (_gameBoardSide[0]._delayCard._cardId) { + case 10: + //No break on purpose + case 12: + //No break on purpose + case 15: + //No break on purpose + case 17: + //No break on purpose + case 18: + //No break on purpose + case 19: + //No break on purpose + case 20: + //No break on purpose + case 21: + discardCard(&_gameBoardSide[0]._delayCard); + found = false; + break; + default: + int i; + found = false; + + for (i = 0; i <= 3; i++) { + if (checkAntiDelayCard(_gameBoardSide[0]._delayCard._cardId, _gameBoardSide[0]._handCard[i]._cardId)) { + found = true; + break; + } + } + + if (found) { + found = false; + playAntiDelayCard(&_gameBoardSide[0]._handCard[i], &_gameBoardSide[0]._delayCard); + } + break; + } + } + + if (found) + return; + + int tmpVal; + found = false; + for (int i = 0; i <= 3; i++) { + tmpVal = subC26CB(0, i); + + if (tmpVal != -1) { + bool flag = false; + for (int j = 0; j <= 7; j++) { + if (_gameBoardSide[0]._outpostStation[j]._cardId == _gameBoardSide[0]._handCard[tmpVal]._cardId) { + flag = true; + break; + } + } + + if (!flag) { + for (int j = 0; j <= 7; j++) { + if ((_gameBoardSide[0]._outpostStation[j]._cardId == 1) && (!subC2687(_gameBoardSide[0]._delayCard._cardId))) { + int count = 0; + for (int k = 0; k <= 7; k++) { + if ((_gameBoardSide[0]._outpostStation[k]._cardId > 1) && (_gameBoardSide[0]._outpostStation[k]._cardId <= 9)) { + ++count; + } + } + + if (count == 7) + _winnerId = 0; + + subC33C0(&_gameBoardSide[0]._handCard[tmpVal], &_gameBoardSide[0]._outpostStation[j]); + found = true; + } + } + } + } + + if (found) + break; + } + + if (found) + return; + + found = false; + tmpVal = findNormalCardInHand(0); + + if (tmpVal != -1) { + for (int i = 0; i <= 7; i++) { + if ((_gameBoardSide[0]._outpostStation[i]._cardId == 0) && (!subC2687(_gameBoardSide[0]._delayCard._cardId))) { + playCard(&_gameBoardSide[0]._handCard[tmpVal], &_gameBoardSide[0]._outpostStation[i]); + found = true; + break; + } + } + } + + if (found) + return; + + tmpVal = subC274D(0); + if (tmpVal != -1) { + for (int i = 0; i <= 7; i++) { + if (_gameBoardSide[2]._outpostStation[i]._cardId != 0) { + playCounterTrickCard(&_gameBoardSide[0]._handCard[tmpVal], 2); + found = true; + break; + } + } + } + + if (found) + return; + + tmpVal = subC2781(0); + if (tmpVal != -1) { + if ( (_gameBoardSide[2]._handCard[0]._cardId != 0) + || (_gameBoardSide[2]._handCard[1]._cardId != 0) + || (_gameBoardSide[2]._handCard[2]._cardId != 0) + || (_gameBoardSide[2]._handCard[3]._cardId != 0) ) { + playThieftCard(0, &_gameBoardSide[0]._handCard[tmpVal], 2); + found = true; + } + } + + if (found) + return; + + for (int i = 0; i <= 3; i++) { + if (subC27B5(_gameBoardSide[0]._handCard[i]._cardId) != -1) { + // The variable 'j' is not used in the inner code of the loop. It's suspect + for (int j = 0; j <= 7; j++) { + if ((_gameBoardSide[2]._delayCard._cardId == 0) && (subC32B1(2, _gameBoardSide[0]._handCard[i]._cardId))) { + playDelayCard(&_gameBoardSide[0]._handCard[i], &_gameBoardSide[2]._delayCard); + found = true; + break; + } + } + + if (found) + break; + } + } + + if (found) + return; + + for (int i = 0; i <= 3; i++) { + if (isSlowCard(_gameBoardSide[0]._handCard[i]._cardId) != -1) { + // The variable 'j' is not used in the inner code of the loop. It's suspect + for (int j = 0; j <= 7; j++) { + if ((_gameBoardSide[2]._delayCard._cardId == 0) && (subC32B1(2, _gameBoardSide[0]._handCard[i]._cardId))) { + playDelayCard(&_gameBoardSide[0]._handCard[i], &_gameBoardSide[2]._delayCard); + found = true; + } + } + + if (found) + break; + } + } + + if (found) + return; + + tmpVal = subC274D(0); + int tmpVal2 = subC331B(0); + + if ((tmpVal != -1) && (tmpVal2 != -1)) { + playCounterTrickCard(&_gameBoardSide[0]._handCard[tmpVal], tmpVal2); + found = true; + } + + if (found) + return; + + tmpVal = subC2781(0); + if (tmpVal != -1) { + if ( (_gameBoardSide[1]._handCard[0]._cardId != 0) + || (_gameBoardSide[1]._handCard[1]._cardId != 0) + || (_gameBoardSide[1]._handCard[2]._cardId != 0) + || (_gameBoardSide[1]._handCard[3]._cardId != 0) ) { + playThieftCard(0, &_gameBoardSide[0]._handCard[tmpVal], 1); + found = true; + } + } + + if (found) + return; + + for (int i = 0; i <= 3; i++) { + tmpVal = isSlowCard(_gameBoardSide[0]._handCard[i]._cardId); + if (tmpVal != -1) { + // The variable 'j' is not used in the inner code of the loop. It's suspect. + for (int j = 0; j <= 7; j++) { + if ((_gameBoardSide[1]._delayCard._cardId == 0) && (subC32B1(1, _gameBoardSide[0]._handCard[i]._cardId))) { + playDelayCard(&_gameBoardSide[0]._handCard[i], &_gameBoardSide[1]._delayCard); + found = true; + } + } + + if (!found) { + // The variable 'j' is not used in the inner code of the loop. It's suspect. + for (int j = 0; j <= 7; j++) { + if ((_gameBoardSide[3]._delayCard._cardId == 0) && (subC32B1(3, _gameBoardSide[0]._handCard[i]._cardId))) { + playDelayCard(&_gameBoardSide[0]._handCard[i], &_gameBoardSide[3]._delayCard); + found = true; + } + } + } + + if (found) + break; + } + } + + if (found) + return; + + for (int i = 0; i <= 3; i++) { + tmpVal = subC27B5(_gameBoardSide[0]._handCard[i]._cardId); + if (tmpVal != -1) { + // The variable 'j' is not used in the inner code of the loop. It's suspect. + for (int j = 0; j <= 7; j++) { + if ((_gameBoardSide[1]._delayCard._cardId == 0) && (subC32B1(1, _gameBoardSide[0]._handCard[i]._cardId))) { + playDelayCard(&_gameBoardSide[0]._handCard[i], &_gameBoardSide[1]._delayCard); + found = true; + } + } + + if (!found) { + // The variable 'j' is not used in the inner code of the loop. It's suspect. + for (int j = 0; j <= 7; j++) { + if ((_gameBoardSide[3]._delayCard._cardId == 0) && (subC32B1(3, _gameBoardSide[0]._handCard[i]._cardId))) { + playDelayCard(&_gameBoardSide[0]._handCard[i], &_gameBoardSide[3]._delayCard); + found = true; + } + } + } + + if (found) + break; + } + } + + if (found) + return; + + subC2835(0); +} + +void Scene1337::handlePlayer1() { int tmpVal = 1; bool found; int count; @@ -5955,19 +6025,19 @@ void Scene1337::subCF31D() { if (this->_gameBoardSide[1]._delayCard._cardId != 0) { switch (_gameBoardSide[1]._delayCard._cardId) { case 10: - // No break on purpose + // No break on purpose case 12: - // No break on purpose + // No break on purpose case 15: - // No break on purpose + // No break on purpose case 17: - // No break on purpose + // No break on purpose case 18: - // No break on purpose + // No break on purpose case 19: - // No break on purpose + // No break on purpose case 20: - // No break on purpose + // No break on purpose case 21: tmpVal = 0; discardCard(&_gameBoardSide[1]._delayCard); @@ -5976,7 +6046,7 @@ void Scene1337::subCF31D() { found = false; int i; for (i = 0; i <= 3; i++) { - if (subC3386(_gameBoardSide[1]._delayCard._cardId, _gameBoardSide[1]._handCard[i]._cardId)) { + if (checkAntiDelayCard(_gameBoardSide[1]._delayCard._cardId, _gameBoardSide[1]._handCard[i]._cardId)) { found = true; break; } @@ -5984,7 +6054,7 @@ void Scene1337::subCF31D() { if (found) { tmpVal = 0; - subC34A1(&_gameBoardSide[1]._handCard[i], &_gameBoardSide[1]._delayCard); + playAntiDelayCard(&_gameBoardSide[1]._handCard[i], &_gameBoardSide[1]._delayCard); } } } @@ -6010,21 +6080,19 @@ void Scene1337::subCF31D() { break; for (int j = 0; j <= 7; j++) { - if (_gameBoardSide[1]._outpostStation[j]._cardId == 1) { - if (!subC2687(_gameBoardSide[1]._delayCard._cardId)) { - count = 0; - for (int k = 0; k <= 7; k++) { - if ((_gameBoardSide[1]._outpostStation[k]._cardId > 1) && (_gameBoardSide[1]._outpostStation[k]._cardId <= 9)) - ++count; - } + if ((_gameBoardSide[1]._outpostStation[j]._cardId == 1) && !subC2687(_gameBoardSide[1]._delayCard._cardId)) { + count = 0; + for (int k = 0; k <= 7; k++) { + if ((_gameBoardSide[1]._outpostStation[k]._cardId > 1) && (_gameBoardSide[1]._outpostStation[k]._cardId <= 9)) + ++count; + } - if (count == 7) - _field424A = 1; + if (count == 7) + _winnerId = 1; - subC33C0(&_gameBoardSide[1]._handCard[tmpIndx], &_gameBoardSide[1]._outpostStation[j]); - found = true; - break; - } + subC33C0(&_gameBoardSide[1]._handCard[tmpIndx], &_gameBoardSide[1]._outpostStation[j]); + found = true; + break; } } } @@ -6032,11 +6100,11 @@ void Scene1337::subCF31D() { if (found) return; - tmpVal = subC2719(1); + tmpVal = findNormalCardInHand(1); if (tmpVal != -1) { for (int i = 0; i <= 7; i++) { if ((_gameBoardSide[1]._outpostStation[i]._cardId == 0) && (!subC2687(_gameBoardSide[1]._delayCard._cardId))) { - subC340B(&_gameBoardSide[1]._handCard[tmpVal], &_gameBoardSide[1]._outpostStation[i]); + playCard(&_gameBoardSide[1]._handCard[tmpVal], &_gameBoardSide[1]._outpostStation[i]); found = true; break; } @@ -6050,7 +6118,7 @@ void Scene1337::subCF31D() { int tmpVal2 = subC331B(1); if ((tmpVal != -1) && ( tmpVal2 != -1)) { - subC358E(&_gameBoardSide[1]._handCard[tmpVal], tmpVal2); + playCounterTrickCard(&_gameBoardSide[1]._handCard[tmpVal], tmpVal2); found = true; } @@ -6064,11 +6132,11 @@ void Scene1337::subCF31D() { for (int i = 0; i <= 3; i++) { if (rndVal != 1) { if ( (_gameBoardSide[rndVal]._handCard[0]._cardId != 0) - || (_gameBoardSide[rndVal]._handCard[1]._cardId != 0) - || (_gameBoardSide[rndVal]._handCard[2]._cardId != 0) - || (_gameBoardSide[rndVal]._handCard[3]._cardId == 0)) { - count = rndVal; - break; + || (_gameBoardSide[rndVal]._handCard[1]._cardId != 0) + || (_gameBoardSide[rndVal]._handCard[2]._cardId != 0) + || (_gameBoardSide[rndVal]._handCard[3]._cardId == 0)) { + count = rndVal; + break; } // CHECKME: inside the check on rndVal? rndVal--; @@ -6078,7 +6146,7 @@ void Scene1337::subCF31D() { } if (count != -1) { - subC318B(1, &_gameBoardSide[1]._handCard[tmpVal], count); + playThieftCard(1, &_gameBoardSide[1]._handCard[tmpVal], count); found = true; } } @@ -6122,11 +6190,11 @@ void Scene1337::subCF31D() { } if (found) - subC3456(&_gameBoardSide[1]._handCard[i], &_gameBoardSide[count]._delayCard); + playDelayCard(&_gameBoardSide[1]._handCard[i], &_gameBoardSide[count]._delayCard); else { int j; for (j = 0; j <= 3; j++) { - if (subC27F9(_gameBoardSide[1]._handCard[j]._cardId) != -1) { + if (isSlowCard(_gameBoardSide[1]._handCard[j]._cardId) != -1) { count = -1; int rndVal = R2_GLOBALS._randomSource.getRandomNumber(3); for (int l = 0; l <= 3; l++) { @@ -6154,42 +6222,41 @@ void Scene1337::subCF31D() { } if (found) - subC3456(&_gameBoardSide[1]._handCard[j], &_gameBoardSide[count]._delayCard); + playDelayCard(&_gameBoardSide[1]._handCard[j], &_gameBoardSide[count]._delayCard); else subC2835(1); } } -void Scene1337::subCF979() { +void Scene1337::handlePlayer3() { bool found = true; - if (_gameBoardSide[0]._delayCard._cardId != 0) { - switch (_gameBoardSide[0]._delayCard._cardId) { + if (_gameBoardSide[3]._delayCard._cardId != 0) { + switch (_gameBoardSide[3]._delayCard._cardId) { case 10: - //No break on purpose + // No break on purpose case 12: - //No break on purpose + // No break on purpose case 15: - //No break on purpose + // No break on purpose case 17: - //No break on purpose + // No break on purpose case 18: - //No break on purpose + // No break on purpose case 19: - //No break on purpose + // No break on purpose case 20: - //No break on purpose + // No break on purpose case 21: - discardCard(&_gameBoardSide[0]._delayCard); + discardCard(&_gameBoardSide[3]._delayCard); found = false; break; default: - int i; found = false; - + int i; for (i = 0; i <= 3; i++) { - if (subC3386(_gameBoardSide[0]._delayCard._cardId, _gameBoardSide[0]._handCard[i]._cardId)) { + if (checkAntiDelayCard(_gameBoardSide[3]._delayCard._cardId, _gameBoardSide[3]._handCard[i]._cardId)) { found = true; break; } @@ -6197,230 +6264,156 @@ void Scene1337::subCF979() { if (found) { found = false; - subC34A1(&_gameBoardSide[0]._handCard[i], &_gameBoardSide[0]._delayCard); + playAntiDelayCard(&_gameBoardSide[3]._handCard[i], &_gameBoardSide[3]._delayCard); } break; } } - if (found) + if (!found) return; - int tmpVal; - found = false; - for (int i = 0; i <= 3; i++) { - tmpVal = subC26CB(0, i); - - if (tmpVal != -1) { - bool flag = false; - for (int j = 0; j <= 7; j++) { - if (_gameBoardSide[0]._outpostStation[j]._cardId == _gameBoardSide[0]._handCard[tmpVal]._cardId) { - flag = true; - break; - } - } - - if (!flag) { - for (int j = 0; j <= 7; j++) { - if ((_gameBoardSide[0]._outpostStation[j]._cardId == 1) && (!subC2687(_gameBoardSide[0]._delayCard._cardId))) { - int count = 0; - for (int k = 0; k <= 7; k++) { - if ((_gameBoardSide[0]._outpostStation[k]._cardId > 1) && (_gameBoardSide[0]._outpostStation[k]._cardId <= 9)) { - ++count; - } - } - - if (count == 7) - _field424A = 0; - - subC33C0(&_gameBoardSide[0]._handCard[tmpVal], &_gameBoardSide[0]._outpostStation[j]); - found = true; - } - } - } - } - - if (found) - break; - } - - if (found) - return; + int randIndx = R2_GLOBALS._randomSource.getRandomNumber(3); - found = false; - tmpVal = subC2719(0); + if (_gameBoardSide[3]._handCard[randIndx]._cardId == 1) { + found = false; - if (tmpVal != -1) { for (int i = 0; i <= 7; i++) { - if ((_gameBoardSide[0]._outpostStation[i]._cardId == 0) && (!subC2687(_gameBoardSide[0]._delayCard._cardId))) { - subC340B(&_gameBoardSide[0]._handCard[tmpVal], &_gameBoardSide[0]._outpostStation[i]); + if ((_gameBoardSide[3]._outpostStation[i]._cardId == 0) && (!subC2687(_gameBoardSide[3]._delayCard._cardId))) { + playCard(&_gameBoardSide[3]._handCard[randIndx], &_gameBoardSide[3]._outpostStation[i]); found = true; break; } } - } - if (found) - return; + if (found) { + return; + } + } else if (_gameBoardSide[3]._handCard[randIndx]._cardId <= 9) { + found = false; - tmpVal = subC274D(0); - if (tmpVal != -1) { for (int i = 0; i <= 7; i++) { - if (_gameBoardSide[2]._outpostStation[i]._cardId != 0) { - subC358E(&_gameBoardSide[0]._handCard[tmpVal], 2); + if (_gameBoardSide[3]._outpostStation[i]._cardId == _gameBoardSide[3]._handCard[randIndx]._cardId) { found = true; break; } } - } - if (found) - return; + if (!found) { + for (int i = 0; i <= 7; i++) { + if ((_gameBoardSide[3]._outpostStation[i]._cardId == 1) && (!subC2687(_gameBoardSide[3]._delayCard._cardId))) { + int tmpVal = 0; - tmpVal = subC2781(0); - if (tmpVal != -1) { - if ( (_gameBoardSide[2]._handCard[0]._cardId != 0) - || (_gameBoardSide[2]._handCard[1]._cardId != 0) - || (_gameBoardSide[2]._handCard[2]._cardId != 0) - || (_gameBoardSide[2]._handCard[3]._cardId != 0) ) { - subC318B(0, &_gameBoardSide[0]._handCard[tmpVal], 2); - found = true; - } - } + for (int j = 0; j <= 7; j++) { + if ((_gameBoardSide[3]._outpostStation[j]._cardId > 1) && (_gameBoardSide[3]._outpostStation[j]._cardId <= 9)) + ++tmpVal; + } - if (found) - return; + if (tmpVal == 7) + _winnerId = 3; - for (int i = 0; i <= 3; i++) { - if (subC27B5(_gameBoardSide[0]._handCard[i]._cardId) != -1) { - // The variable 'j' is not used in the inner code of the loop. It's suspect - for (int j = 0; j <= 7; j++) { - if ((_gameBoardSide[2]._delayCard._cardId == 0) && (subC32B1(2, _gameBoardSide[0]._handCard[i]._cardId))) { - subC3456(&_gameBoardSide[0]._handCard[i], &_gameBoardSide[2]._delayCard); + subC33C0(&_gameBoardSide[3]._handCard[randIndx], &_gameBoardSide[3]._outpostStation[i]); found = true; break; } } - if (found) - break; + return; } - } - - if (found) - return; - - for (int i = 0; i <= 3; i++) { - if (subC27F9(_gameBoardSide[0]._handCard[i]._cardId) != -1) { - // The variable 'j' is not used in the inner code of the loop. It's suspect - for (int j = 0; j <= 7; j++) { - if ((_gameBoardSide[2]._delayCard._cardId == 0) && (subC32B1(2, _gameBoardSide[0]._handCard[i]._cardId))) { - subC3456(&_gameBoardSide[0]._handCard[i], &_gameBoardSide[2]._delayCard); - found = true; - } - } + } else if (_gameBoardSide[3]._handCard[randIndx]._cardId == 13) { + int tmpVal = subC331B(3); - if (found) - break; + if (tmpVal != -1) { + playCounterTrickCard(&_gameBoardSide[3]._handCard[randIndx], tmpVal); + return; } - } - - if (found) - return; - - tmpVal = subC274D(0); - int tmpVal2 = subC331B(0); - - if ((tmpVal != -1) && (tmpVal2 != -1)) { - subC358E(&_gameBoardSide[0]._handCard[tmpVal], tmpVal2); - found = true; - } + } else if (_gameBoardSide[3]._handCard[randIndx]._cardId == 25) { + int tmpVal = -1; + found = false; + int tmpRandIndx = R2_GLOBALS._randomSource.getRandomNumber(3); - if (found) - return; + for (int i = 0; i <= 3; i++) { + if ( (tmpRandIndx != 3) + && ( (_gameBoardSide[tmpRandIndx]._handCard[0]._cardId != 0) + || (_gameBoardSide[tmpRandIndx]._handCard[1]._cardId != 0) + || (_gameBoardSide[tmpRandIndx]._handCard[2]._cardId != 0) + || (_gameBoardSide[tmpRandIndx]._handCard[3]._cardId != 0) )) { + tmpVal = tmpRandIndx; + break; + } - tmpVal = subC2781(0); - if (tmpVal != -1) { - if ( (_gameBoardSide[1]._handCard[0]._cardId != 0) - || (_gameBoardSide[1]._handCard[1]._cardId != 0) - || (_gameBoardSide[1]._handCard[2]._cardId != 0) - || (_gameBoardSide[1]._handCard[3]._cardId != 0) ) { - subC318B(0, &_gameBoardSide[0]._handCard[tmpVal], 1); - found = true; + ++tmpRandIndx; + if (tmpRandIndx > 3) + tmpRandIndx = 0; } - } - - if (found) - return; - for (int i = 0; i <= 3; i++) { - tmpVal = subC27F9(_gameBoardSide[0]._handCard[i]._cardId); if (tmpVal != -1) { - // The variable 'j' is not used in the inner code of the loop. It's suspect. - for (int j = 0; j <= 7; j++) { - if ((_gameBoardSide[1]._delayCard._cardId == 0) && (subC32B1(1, _gameBoardSide[0]._handCard[i]._cardId))) { - subC3456(&_gameBoardSide[0]._handCard[i], &_gameBoardSide[1]._delayCard); - found = true; - } - } + playThieftCard(3, &_gameBoardSide[3]._handCard[randIndx], tmpVal); + return; + } + } else { + switch (_gameBoardSide[3]._handCard[randIndx]._cardId) { + case 10: + // No break on purpose + case 11: + // No break on purpose + case 12: + // No break on purpose + case 14: + // No break on purpose + case 15: + // No break on purpose + case 16: + // No break on purpose + case 17: + // No break on purpose + case 18: + // No break on purpose + case 19: + // No break on purpose + case 20: + // No break on purpose + case 21: + // No break on purpose + case 24: { + int tmpVal = -1; + int tmpRandIndx = R2_GLOBALS._randomSource.getRandomNumber(3); - if (!found) { - // The variable 'j' is not used in the inner code of the loop. It's suspect. - for (int j = 0; j <= 7; j++) { - if ((_gameBoardSide[3]._delayCard._cardId == 0) && (subC32B1(3, _gameBoardSide[0]._handCard[i]._cardId))) { - subC3456(&_gameBoardSide[0]._handCard[i], &_gameBoardSide[3]._delayCard); - found = true; + for (int i = 0; i <= 3; i++) { + if (tmpRandIndx != 3) { + // The variable 'j' is not used in the inner code of the loop, which is suspicious. + // 'i' is used indirectly to increment tmpRandIndx. + for (int j = 0; j <= 7; j++) { + if ((_gameBoardSide[tmpRandIndx]._delayCard._cardId == 0) && subC32B1(tmpRandIndx, _gameBoardSide[3]._handCard[randIndx]._cardId)) + tmpVal = tmpRandIndx; } } - } - if (found) - break; - } - } - - if (found) - return; + ++tmpRandIndx; + if (tmpRandIndx > 3) + tmpRandIndx = 0; - for (int i = 0; i <= 3; i++) { - tmpVal = subC27B5(_gameBoardSide[0]._handCard[i]._cardId); - if (tmpVal != -1) { - // The variable 'j' is not used in the inner code of the loop. It's suspect. - for (int j = 0; j <= 7; j++) { - if ((_gameBoardSide[1]._delayCard._cardId == 0) && (subC32B1(1, _gameBoardSide[0]._handCard[i]._cardId))) { - subC3456(&_gameBoardSide[0]._handCard[i], &_gameBoardSide[1]._delayCard); - found = true; - } + if (tmpVal != -1) + break; } - if (!found) { - // The variable 'j' is not used in the inner code of the loop. It's suspect. - for (int j = 0; j <= 7; j++) { - if ((_gameBoardSide[3]._delayCard._cardId == 0) && (subC32B1(3, _gameBoardSide[0]._handCard[i]._cardId))) { - subC3456(&_gameBoardSide[0]._handCard[i], &_gameBoardSide[3]._delayCard); - found = true; - } - } + if (tmpVal != -1) { + // Useless second identical check skipped + playDelayCard(&_gameBoardSide[tmpVal]._handCard[randIndx], &_gameBoardSide[tmpVal]._delayCard); + return; } - - if (found) - break; + } + default: + break; } } - if (found) - return; - - subC2835(0); -} - -void Scene1337::subD026D() { - subD02CA(); + discardCard(&_gameBoardSide[3]._handCard[randIndx]); } -void Scene1337::subD0281() { - if (subC27F9(this->_gameBoardSide[2]._delayCard._cardId) == -1) - _unkFctPtr412 = &Scene1337::subD026D; +void Scene1337::handlePlayer2() { + if (isSlowCard(this->_gameBoardSide[2]._delayCard._cardId) == -1) + _delayedFunction = &Scene1337::subD02CA; else discardCard(&_gameBoardSide[2]._delayCard); } @@ -6497,7 +6490,7 @@ void Scene1337::subD02CA() { if (i == 4) { handleClick(1, _selectedCard._stationPos); - subD0281(); + handlePlayer2(); return; } else { setCursorData(1332, _selectedCard._card._strip, _selectedCard._card._frame); @@ -6506,14 +6499,14 @@ void Scene1337::subD02CA() { } else if (R2_GLOBALS._v57810 == 300) { // Eye handleClick(3, _selectedCard._stationPos); - subD0281(); + handlePlayer2(); return; } else { // The original code is calling a function full of dead code. // Only this message remains after a cleanup. MessageDialog::show(WRONG_ANSWER_MSG, OK_BTN_STRING); // - subD0281(); + handlePlayer2(); return; } @@ -6540,7 +6533,7 @@ void Scene1337::subD02CA() { found = true; _currentPlayerNumb--; _showPlayerTurn = false; - subC20F9(); + handleNextTurn(); } else { actionDisplay(1330, 127, 159, 10, 1, 200, 0, 7, 0, 154, 154); found_di = true; @@ -6568,7 +6561,7 @@ void Scene1337::subD02CA() { if (subC27B5(_gameBoardSide[2]._delayCard._cardId) != -1) { actionDisplay(1330, 55, 159, 10, 1, 200, 0, 7, 0, 154, 154); } else { - subC340B(&_selectedCard, &_gameBoardSide[2]._outpostStation[i]); + playCard(&_selectedCard, &_gameBoardSide[2]._outpostStation[i]); return; } } else { @@ -6592,12 +6585,21 @@ void Scene1337::subD02CA() { } } if (foundVar4) { + // This station is already in place actionDisplay(1330, 34, 159, 10, 1, 200, 0, 7, 0, 154, 154); } else if (subC27B5(_gameBoardSide[2]._delayCard._cardId) != -1) { + // You must eliminate your delay before you can play a station actionDisplay(1330, 35, 159, 10, 1, 200, 0, 7, 0, 154, 154); } else { - if (j == 7) - _field424A = 2; + int tmpVal = 0; + + for (int j = 0; j <= 7; j++) { + if ((_gameBoardSide[2]._outpostStation[j]._cardId > 1) && (_gameBoardSide[2]._outpostStation[j]._cardId <= 9)) + ++tmpVal; + } + + if (tmpVal == 7) + _winnerId = 2; subC33C0(&_selectedCard, &_gameBoardSide[2]._outpostStation[i]); return; @@ -6609,7 +6611,7 @@ void Scene1337::subD02CA() { if ((_selectedCard._cardId == 26) || (_selectedCard._cardId == 30) ||(_selectedCard._cardId == 32) || (_selectedCard._cardId == 28)) { if (_gameBoardSide[2]._delayCard.isIn(Common::Point(_selectedCard._stationPos.x + 12, _selectedCard._stationPos.y + 12))) { actionDisplay(1330, 42, 159, 10, 1, 200, 0, 7, 0, 154, 154); - } else if (!subC3386(_gameBoardSide[2]._delayCard._cardId, _selectedCard._cardId)) { + } else if (!checkAntiDelayCard(_gameBoardSide[2]._delayCard._cardId, _selectedCard._cardId)) { if (_gameBoardSide[2]._delayCard._cardId != 0) { switch (_gameBoardSide[2]._delayCard._cardId) { case 11: @@ -6631,17 +6633,17 @@ void Scene1337::subD02CA() { actionDisplay(1330, 41, 159, 10, 1, 200, 0, 7, 0, 154, 154); } } else { - subC34A1(&_selectedCard, &_gameBoardSide[2]._delayCard); + playAntiDelayCard(&_selectedCard, &_gameBoardSide[2]._delayCard); return; } } else { - if ((subC27F9(_selectedCard._cardId) == -1) && (subC27B5(_selectedCard._cardId) == -1)) { + if ((isSlowCard(_selectedCard._cardId) == -1) && (subC27B5(_selectedCard._cardId) == -1)) { if (_selectedCard._cardId == 13) { if (_gameBoardSide[0]._emptyStationPos.isIn(Common::Point(_selectedCard._stationPos.x + 12, _selectedCard._stationPos.y + 12))) { for (int k = 0; k <= 7; k++) { if (_gameBoardSide[0]._outpostStation[k]._cardId != 0) { found = true; - subC358E(&_selectedCard, 0); + playCounterTrickCard(&_selectedCard, 0); } } @@ -6651,7 +6653,7 @@ void Scene1337::subD02CA() { for (int k = 0; k <= 7; k++) { if (_gameBoardSide[3]._outpostStation[k]._cardId != 0) { found = true; - subC358E(&_selectedCard, 3); + playCounterTrickCard(&_selectedCard, 3); } } if (!found) @@ -6660,7 +6662,7 @@ void Scene1337::subD02CA() { for (int k = 0; k <= 7; k++) { if (_gameBoardSide[1]._outpostStation[k]._cardId == 0) { found = true; - subC358E(&_selectedCard, 1); + playCounterTrickCard(&_selectedCard, 1); } } if (!found) @@ -6679,7 +6681,7 @@ void Scene1337::subD02CA() { if (_gameBoardSide[2]._handCard[k]._cardId == 0) break; } - subC318B(2, &_gameBoardSide[2]._handCard[k], 0); + playThieftCard(2, &_gameBoardSide[2]._handCard[k], 0); return; } else { actionDisplay(1330, 99, 159, 10, 1, 200, 0, 7, 0, 154, 154); @@ -6693,7 +6695,7 @@ void Scene1337::subD02CA() { if (_gameBoardSide[2]._handCard[k]._cardId == 0) break; } - subC318B(2, &_gameBoardSide[2]._handCard[k], 1); + playThieftCard(2, &_gameBoardSide[2]._handCard[k], 1); return; } else { actionDisplay(1330, 99, 159, 10, 1, 200, 0, 7, 0, 154, 154); @@ -6709,7 +6711,7 @@ void Scene1337::subD02CA() { if (_gameBoardSide[2]._handCard[k]._cardId == 0) break; } - subC318B(2, &_gameBoardSide[2]._handCard[k], 3); + playThieftCard(2, &_gameBoardSide[2]._handCard[k], 3); return; } else { actionDisplay(1330, 99, 159, 10, 1, 200, 0, 7, 0, 154, 154); @@ -6756,7 +6758,7 @@ void Scene1337::subD02CA() { break; } } else { - subC3456(&_selectedCard, &_gameBoardSide[0]._delayCard); + playDelayCard(&_selectedCard, &_gameBoardSide[0]._delayCard); found = true; } } else if (_gameBoardSide[3]._delayCard.isIn(Common::Point(_selectedCard._stationPos.x + 12, _selectedCard._stationPos.y + 12))) { @@ -6792,7 +6794,7 @@ void Scene1337::subD02CA() { break; } } else { - subC3456(&_selectedCard, &_gameBoardSide[3]._delayCard); + playDelayCard(&_selectedCard, &_gameBoardSide[3]._delayCard); found = true; } } else if (_gameBoardSide[1]._delayCard.isIn(Common::Point(_selectedCard._stationPos.x + 12, _selectedCard._stationPos.y + 12))) { @@ -6828,7 +6830,7 @@ void Scene1337::subD02CA() { break; } } else { - subC3456(&_selectedCard, &_gameBoardSide[1]._delayCard); + playDelayCard(&_selectedCard, &_gameBoardSide[1]._delayCard); found = true; } } else { @@ -6847,6 +6849,8 @@ void Scene1337::subD02CA() { R2_GLOBALS._sceneObjects->draw(); g_globals->_events.delay(g_globals->_sceneHandler->_delayTicks); } + + g_globals->_sceneObjects->recurse(SceneHandler::dispatchObject); } } @@ -6908,7 +6912,6 @@ void Scene1337::setCursorData(int resNum, int rlbNum, int frameNum) { } void Scene1337::subD18F5() { - warning("subD18F5 - %d", R2_GLOBALS._v57709); if (R2_GLOBALS._v57709 == 0) R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); @@ -6916,7 +6919,6 @@ void Scene1337::subD18F5() { } void Scene1337::subD1917() { - warning("subD1917 - %d", R2_GLOBALS._v57709); if (R2_GLOBALS._v57709 != 0) { R2_GLOBALS._v57709--; if (R2_GLOBALS._v57709 != 0) { diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index c62dd941cf..6cbc617578 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -271,7 +271,7 @@ class Scene1337 : public SceneExt { }; public: typedef void (Scene1337::*FunctionPtrType)(); - FunctionPtrType _unkFctPtr412; + FunctionPtrType _delayedFunction; ASound _aSound1; ASound _aSound2; @@ -302,20 +302,20 @@ public: // Discarded cards are put in the available cards pile, with an higher index so there no conflict int _currentDiscardIndex; int _availableCardsPile[100]; - Card *_discardCard; - Card *_field3EF4; - Card *_field3EF8; + Card *_actionCard1; + Card *_actionCard2; + Card *_actionCard3; Card _item5; Card _selectedCard; Card _discardPile; Card _stockCard; bool _shuffleEndedFl; int _currentPlayerNumb; - int _field4240; - int _field4242; + int _actionIdx1; + int _actionIdx2; bool _showPlayerTurn; - bool _field4246; - int _field424A; + bool _displayHelpFl; + int _winnerId; bool _instructionsDisplayedFl; int _instructionsWaitCount; int _cursorCurRes; @@ -329,32 +329,31 @@ public: virtual void synchronize(Serializer &s); void actionDisplay(int resNum, int lineNum, int x, int y, int keepOnScreen, int width, int textMode, int fontNum, int colFG, int colBGExt, int colFGExt); - void setAnimationInfo(Card *subObj); + void setAnimationInfo(Card *card); void subC20E5(); - void subC20F9(); + void handleNextTurn(); void subC2586(); - bool subC264B(int arg1); - bool subC2687(int arg1); - int subC26CB(int arg1, int arg2); - int subC2719(int arg1); + bool subC264B(int cardId); + bool subC2687(int cardId); + int subC26CB(int playerId, int handCardId); + int findNormalCardInHand(int playerId); int subC274D(int arg1); int subC2781(int arg1); int subC27B5(int arg1); - int subC27F9(int arg1); + int isSlowCard(int cardId); void subC2835(int arg1); - void subC2C2F(); - void subC318B(int arg1, Card *subObj2, int arg3); + void playThieftCard(int playerId, Card *card, int victimId); int subC3257(int arg1); bool subC32B1(int arg1, int arg2); int subC331B(int arg1); - bool subC3386(int arg1, int arg2); + bool checkAntiDelayCard(int delayCardId, int cardId); void subC33C0(Card *subObj1, Card *subObj2); - void subC3456(Card *subObj1, Card *subObj2); - void subC340B(Card *subObj1, Card *subObj2); - void subC34A1(Card *subObj1, Card *subObj2); + void playDelayCard(Card *card, Card *dest); + void playCard(Card *card, Card *dest); + void playAntiDelayCard(Card *card, Card *dest); Card *subC34EC(int arg1); - void subC358E(Card *subObj1, int arg2); - int subC3E92(int arg1); + void playCounterTrickCard(Card *card, int playerId); + int getFreeHandCard(int playerId); void discardCard(Card *card); void subC4CD2(); void subC4CEC(); @@ -367,10 +366,10 @@ public: void dealCards(); void subCD193(); void handleClick(int arg1, Common::Point pt); - void subCF31D(); - void subCF979(); - void subD026D(); - void subD0281(); + void handlePlayer0(); + void handlePlayer1(); + void handlePlayer2(); + void handlePlayer3(); void subD02CA(); void updateCursorId(int arg1, bool arg2); void setCursorData(int resNum, int rlbNum, int frameNum); |