aboutsummaryrefslogtreecommitdiff
path: root/engines/illusions/bbdou
diff options
context:
space:
mode:
authorjohndoe1232018-05-18 21:15:33 +1000
committerEugene Sandulenko2018-07-20 06:43:33 +0000
commit94fdd597d985cba1436aea7c6be67982de220199 (patch)
tree22c0dd9e3a012c688f8f054993e6413f7657fff0 /engines/illusions/bbdou
parent54dd3814414d7ef5de09cda197b1065655ee9242 (diff)
downloadscummvm-rg350-94fdd597d985cba1436aea7c6be67982de220199.tar.gz
scummvm-rg350-94fdd597d985cba1436aea7c6be67982de220199.tar.bz2
scummvm-rg350-94fdd597d985cba1436aea7c6be67982de220199.zip
ILLUSIONS: BBDOU: Add menu system class, adjust existing code (actual menus not done yet)
(cherry picked from commit 03b0ca1)
Diffstat (limited to 'engines/illusions/bbdou')
-rw-r--r--engines/illusions/bbdou/bbdou_menukeys.cpp60
-rw-r--r--engines/illusions/bbdou/bbdou_menukeys.h53
-rw-r--r--engines/illusions/bbdou/illusions_bbdou.cpp16
-rw-r--r--engines/illusions/bbdou/illusions_bbdou.h5
-rw-r--r--engines/illusions/bbdou/menusystem_bbdou.cpp172
-rw-r--r--engines/illusions/bbdou/menusystem_bbdou.h74
-rw-r--r--engines/illusions/bbdou/scriptopcodes_bbdou.cpp40
7 files changed, 408 insertions, 12 deletions
diff --git a/engines/illusions/bbdou/bbdou_menukeys.cpp b/engines/illusions/bbdou/bbdou_menukeys.cpp
new file mode 100644
index 0000000000..aadd9fec35
--- /dev/null
+++ b/engines/illusions/bbdou/bbdou_menukeys.cpp
@@ -0,0 +1,60 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "illusions/bbdou/illusions_bbdou.h"
+#include "illusions/bbdou/bbdou_menukeys.h"
+#include "illusions/bbdou/menusystem_bbdou.h"
+#include "illusions/input.h"
+#include "illusions/screen.h"
+
+namespace Illusions {
+
+// BBDOUMenuKeys
+
+BBDOUMenuKeys::BBDOUMenuKeys(IllusionsEngine_BBDOU *vm)
+ : _vm(vm) {
+}
+
+BBDOUMenuKeys::~BBDOUMenuKeys() {
+
+}
+
+void BBDOUMenuKeys::addMenuKey(uint bitMask, uint32 threadId) {
+ MenuKey menuKey;
+ menuKey.bitMask = bitMask;
+ menuKey.threadId = threadId;
+ _menuKeys.push_back(menuKey);
+}
+
+void BBDOUMenuKeys::update() {
+ if (_vm->_screen->isDisplayOn() && !_vm->_menuSystem->isActive()) {
+ for (MenuKeys::iterator it = _menuKeys.begin(); it != _menuKeys.end(); ++it) {
+ const MenuKey &menuKey = *it;
+ if (_vm->_input->pollButton(menuKey.bitMask)) {
+ _vm->startScriptThread(menuKey.threadId, 0, 0, 0, 0);
+ break;
+ }
+ }
+ }
+}
+
+} // End of namespace Illusions
diff --git a/engines/illusions/bbdou/bbdou_menukeys.h b/engines/illusions/bbdou/bbdou_menukeys.h
new file mode 100644
index 0000000000..e26f1f0261
--- /dev/null
+++ b/engines/illusions/bbdou/bbdou_menukeys.h
@@ -0,0 +1,53 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef ILLUSIONS_BBDOU_BBDOU_MENUKEYS_H
+#define ILLUSIONS_BBDOU_BBDOU_MENUKEYS_H
+
+#include "illusions/specialcode.h"
+#include "illusions/thread.h"
+#include "common/array.h"
+
+namespace Illusions {
+
+class IllusionsEngine_BBDOU;
+
+struct MenuKey {
+ uint bitMask;
+ uint32 threadId;
+};
+
+class BBDOUMenuKeys {
+public:
+ BBDOUMenuKeys(IllusionsEngine_BBDOU *vm);
+ ~BBDOUMenuKeys();
+ void addMenuKey(uint bitMask, uint32 threadId);
+ void update();
+protected:
+ typedef Common::Array<MenuKey> MenuKeys;
+ IllusionsEngine_BBDOU *_vm;
+ MenuKeys _menuKeys;
+};
+
+} // End of namespace Illusions
+
+#endif // ILLUSIONS_BBDOU_BBDOU_MENUKEYS_H
diff --git a/engines/illusions/bbdou/illusions_bbdou.cpp b/engines/illusions/bbdou/illusions_bbdou.cpp
index 247a00fbed..7c129f12b6 100644
--- a/engines/illusions/bbdou/illusions_bbdou.cpp
+++ b/engines/illusions/bbdou/illusions_bbdou.cpp
@@ -21,7 +21,9 @@
*/
#include "illusions/bbdou/illusions_bbdou.h"
+#include "illusions/bbdou/bbdou_menukeys.h"
#include "illusions/bbdou/bbdou_videoplayer.h"
+#include "illusions/bbdou/menusystem_bbdou.h"
#include "illusions/actor.h"
#include "illusions/camera.h"
#include "illusions/cursor.h"
@@ -167,7 +169,9 @@ Common::Error IllusionsEngine_BBDOU::run() {
_threads = new ThreadList(this);
_updateFunctions = new UpdateFunctions();
_soundMan = new SoundMan(this);
+ _menuSystem = new BBDOUMenuSystem(this);
_videoPlayer = new BBDOUVideoPlayer(this);
+ _menuKeys = new BBDOUMenuKeys(this);
_screen->setColorKey1(0xF81F);
@@ -217,7 +221,9 @@ Common::Error IllusionsEngine_BBDOU::run() {
delete _stack;
delete _scriptOpcodes;
+ delete _menuKeys;
delete _videoPlayer;
+ delete _menuSystem;
delete _soundMan;
delete _updateFunctions;
delete _threads;
@@ -280,6 +286,7 @@ void IllusionsEngine_BBDOU::initInput() {
void IllusionsEngine_BBDOU::initUpdateFunctions() {
UPDATEFUNCTION(30, 0, updateScript);
UPDATEFUNCTION(50, 0, updateActors);
+ UPDATEFUNCTION(60, 0, updateMenuKeys);
UPDATEFUNCTION(60, 0, updateSequences);
UPDATEFUNCTION(70, 0, updateGraphics);
UPDATEFUNCTION(70, 0, updateVideoPlayer);
@@ -291,7 +298,12 @@ void IllusionsEngine_BBDOU::initUpdateFunctions() {
int IllusionsEngine_BBDOU::updateScript(uint flags) {
_threads->updateThreads();
- return 1;
+ return kUFNext;
+}
+
+int IllusionsEngine_BBDOU::updateMenuKeys(uint flags) {
+ _menuKeys->update();
+ return kUFNext;
}
bool IllusionsEngine_BBDOU::causeIsDeclared(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId) {
@@ -436,7 +448,7 @@ void IllusionsEngine_BBDOU::cursorControlRoutine(Control *control, uint32 deltaT
// Unused nullsub_1(control);
break;
case 3:
- // TODO _vm->_shellMgr->handleMouse(control);
+ _menuSystem->update(control);
break;
}
}
diff --git a/engines/illusions/bbdou/illusions_bbdou.h b/engines/illusions/bbdou/illusions_bbdou.h
index 9bdfc6d2b1..2bad993041 100644
--- a/engines/illusions/bbdou/illusions_bbdou.h
+++ b/engines/illusions/bbdou/illusions_bbdou.h
@@ -34,6 +34,8 @@ class Dictionary;
class ScriptMan;
class ScriptStack;
class BBDOUVideoPlayer;
+class BBDOUMenuKeys;
+class BBDOUMenuSystem;
struct ActiveScene {
uint32 _sceneId;
@@ -73,7 +75,9 @@ public:
uint32 _theThreadId;
uint32 _globalSceneId;
+ BBDOUMenuSystem *_menuSystem;
BBDOUVideoPlayer *_videoPlayer;
+ BBDOUMenuKeys *_menuKeys;
bool _walkthroughStarted;
@@ -81,6 +85,7 @@ public:
void initUpdateFunctions();
int updateScript(uint flags);
+ int updateMenuKeys(uint flags);
bool causeIsDeclared(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId);
void causeDeclare(uint32 verbId, uint32 objectId2, uint32 objectId, TriggerFunctionCallback *callback);
diff --git a/engines/illusions/bbdou/menusystem_bbdou.cpp b/engines/illusions/bbdou/menusystem_bbdou.cpp
new file mode 100644
index 0000000000..9d1b7188db
--- /dev/null
+++ b/engines/illusions/bbdou/menusystem_bbdou.cpp
@@ -0,0 +1,172 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "illusions/illusions.h"
+#include "illusions/actor.h"
+#include "illusions/cursor.h"
+#include "illusions/bbdou/illusions_bbdou.h"
+#include "illusions/bbdou/menusystem_bbdou.h"
+
+namespace Illusions {
+
+// BBDOUMenuSystem
+
+BBDOUMenuSystem::BBDOUMenuSystem(IllusionsEngine_BBDOU *vm)
+ : BaseMenuSystem(vm), _vm(vm) {
+ clearMenus();
+}
+
+BBDOUMenuSystem::~BBDOUMenuSystem() {
+ freeMenus();
+}
+
+void BBDOUMenuSystem::runMenu(MenuChoiceOffsets menuChoiceOffsets, int16 *menuChoiceOffset,
+ uint32 menuId, uint32 duration, uint timeOutMenuChoiceIndex, uint32 menuCallerThreadId) {
+
+ debug(0, "BBDOUMenuSystem::runMenu(%08X)", menuId);
+
+ setTimeOutDuration(duration, timeOutMenuChoiceIndex);
+ setMenuCallerThreadId(menuCallerThreadId);
+ setMenuChoiceOffsets(menuChoiceOffsets, menuChoiceOffset);
+
+ int rootMenuId = convertRootMenuId(menuId);
+ BaseMenu *rootMenu = getMenuById(rootMenuId);
+ openMenu(rootMenu);
+
+}
+
+void BBDOUMenuSystem::clearMenus() {
+ for (int i = 0; i < kBBDOULastMenuIndex; ++i)
+ _menus[i] = 0;
+}
+
+void BBDOUMenuSystem::freeMenus() {
+ for (int i = 0; i < kBBDOULastMenuIndex; ++i)
+ delete _menus[i];
+}
+
+BaseMenu *BBDOUMenuSystem::getMenuById(int menuId) {
+ if (!_menus[menuId])
+ _menus[menuId] = createMenuById(menuId);
+ return _menus[menuId];
+}
+
+BaseMenu *BBDOUMenuSystem::createMenuById(int menuId) {
+ switch (menuId) {
+ case kBBDOUMainMenu:
+ return createMainMenu();
+ case kBBDOUPauseMenu:
+ return createPauseMenu();
+ // TODO Other menus
+ default:
+ error("BBDOUMenuSystem::createMenuById() Invalid menu id %d", menuId);
+ }
+}
+
+BaseMenu *BBDOUMenuSystem::createMainMenu() {
+ return 0; // TODO
+}
+
+BaseMenu *BBDOUMenuSystem::createLoadGameMenu() {
+ return 0; // TODO
+}
+
+BaseMenu *BBDOUMenuSystem::createOptionsMenu() {
+ return 0; // TODO
+}
+
+BaseMenu *BBDOUMenuSystem::createPauseMenu() {
+ BaseMenu *menu = new BaseMenu(this, 0x00120003, 218, 150, 80, 20, 1);
+ menu->addText(" Game Paused");
+ menu->addText("-------------------");
+ menu->addMenuItem(new MenuItem("Resume", new MenuActionReturnChoice(this, 1)));
+ // menu->addMenuItem(new MenuItem("Load Game", new MenuActionLoadGame(this, 1)));
+ // TODO menu->addMenuItem(new MenuItem("Save Game", new MenuActionSaveGame(this, 11)));
+ // TODO menu->addMenuItem(new MenuItem("Restart Game", new MenuActionEnterQueryMenu(this, kDuckmanQueryRestartMenu, 2)));
+ // TODO menu->addMenuItem(new MenuItem("Options", new MenuActionEnterMenu(this, kDuckmanOptionsMenu)));
+ // menu->addMenuItem(new MenuItem("Quit Game", new MenuActionEnterQueryMenu(this, kDuckmanQueryQuitMenu, 23)));
+ return menu;
+}
+
+int BBDOUMenuSystem::convertRootMenuId(uint32 menuId) {
+ switch (menuId) {
+ case 0x1C0001:
+ return kBBDOUMainMenu;
+ case 0x1C0002:
+ return kBBDOUPauseMenu;
+ case 0x1C0006:
+ return kBBDOULoadGameMenu;
+ case 0x1C0007:
+ return kBBDOUSaveGameMenu;
+ case 0x1C0008:
+ return kBBDOUGameSavedMenu;
+ case 0x1C0009:
+ return kBBDOUSaveFailedMenu;
+ case 0x1C000A:
+ return kBBDOULoadFailedMenu;
+ /* Unused/unimplemented debug menus
+ case 0x1C0003: debugStartMenu
+ case 0x1C0004: debugPauseMenu
+ case 0x1C0005: unitTestsMenu
+ */
+ default:
+ error("BBDOUMenuSystem() Menu ID %08X not found", menuId);
+ }
+}
+
+bool BBDOUMenuSystem::initMenuCursor() {
+ bool cursorInitialVisibleFlag = false;
+ Control *cursorControl = _vm->getObjectControl(0x40004);
+ if (cursorControl) {
+ if (cursorControl->_flags & 1) {
+ cursorInitialVisibleFlag = false;
+ } else {
+ cursorInitialVisibleFlag = true;
+ cursorControl->appearActor();
+ }
+ } else {
+ Common::Point pos = _vm->getNamedPointPosition(0x70023);
+ _vm->_controls->placeActor(0x50001, pos, 0x60001, 0x40004, 0);
+ cursorControl = _vm->getObjectControl(0x40004);
+ }
+ return cursorInitialVisibleFlag;
+}
+
+int BBDOUMenuSystem::getGameState() {
+ return _vm->_cursor->_status;
+}
+
+void BBDOUMenuSystem::setMenuCursorNum(int cursorNum) {
+ Control *mouseCursor = _vm->getObjectControl(0x40004);
+ _vm->_cursor->setActorIndex(5, cursorNum, 0);
+ mouseCursor->startSequenceActor(0x60001, 2, 0);
+}
+
+void BBDOUMenuSystem::setGameState(int gameState) {
+ _vm->_cursor->_status = gameState;
+}
+
+void BBDOUMenuSystem::playSoundEffect(int sfxId) {
+ // TODO
+}
+
+} // End of namespace Illusions
diff --git a/engines/illusions/bbdou/menusystem_bbdou.h b/engines/illusions/bbdou/menusystem_bbdou.h
new file mode 100644
index 0000000000..1c98b28b2f
--- /dev/null
+++ b/engines/illusions/bbdou/menusystem_bbdou.h
@@ -0,0 +1,74 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef ILLUSIONS_BBDOU_MENUSYSTEM_BBDOU_H
+#define ILLUSIONS_BBDOU_MENUSYSTEM_BBDOU_H
+
+#include "illusions/menusystem.h"
+
+namespace Illusions {
+
+enum {
+ kBBDOUMainMenu,
+ kBBDOUPauseMenu,
+ kBBDOULoadGameMenu,
+ kBBDOUSaveGameMenu,
+ kBBDOUGameSavedMenu,
+ kBBDOUSaveFailedMenu,
+ kBBDOULoadFailedMenu,
+ kBBDOULastMenuIndex
+};
+
+class IllusionsEngine_BBDOU;
+
+class BBDOUMenuSystem : public BaseMenuSystem {
+public:
+ BBDOUMenuSystem(IllusionsEngine_BBDOU *vm);
+ ~BBDOUMenuSystem();
+ void runMenu(MenuChoiceOffsets menuChoiceOffsets, int16 *menuChoiceOffset,
+ uint32 menuId, uint32 duration, uint timeOutMenuChoiceIndex, uint32 menuCallerThreadId);
+public://protected:
+ IllusionsEngine_BBDOU *_vm;
+ BaseMenu *_menus[kBBDOULastMenuIndex];
+ void clearMenus();
+ void freeMenus();
+ BaseMenu *getMenuById(int menuId);
+ BaseMenu *createMenuById(int menuId);
+ BaseMenu *createMainMenu();
+ BaseMenu *createPauseMenu();
+ BaseMenu *createLoadGameMenu();
+ BaseMenu *createSaveGameMenu();
+ BaseMenu *createGameSavedMenu();
+ BaseMenu *createSaveFailedMenu();
+ BaseMenu *createLoadFailedMenu();
+ BaseMenu *createOptionsMenu();
+ int convertRootMenuId(uint32 menuId);
+ virtual bool initMenuCursor();
+ virtual int getGameState();
+ virtual void setGameState(int gameState);
+ virtual void setMenuCursorNum(int cursorNum);
+ virtual void playSoundEffect(int sfxId);
+};
+
+} // End of namespace Illusions
+
+#endif // ILLUSIONS_BBDOU_MENUSYSTEM_BBDOU_H
diff --git a/engines/illusions/bbdou/scriptopcodes_bbdou.cpp b/engines/illusions/bbdou/scriptopcodes_bbdou.cpp
index f0e406ed19..1c8d4009dd 100644
--- a/engines/illusions/bbdou/scriptopcodes_bbdou.cpp
+++ b/engines/illusions/bbdou/scriptopcodes_bbdou.cpp
@@ -22,6 +22,8 @@
#include "illusions/bbdou/illusions_bbdou.h"
#include "illusions/bbdou/scriptopcodes_bbdou.h"
+#include "illusions/bbdou/bbdou_menukeys.h"
+#include "illusions/bbdou/menusystem_bbdou.h"
#include "illusions/actor.h"
#include "illusions/camera.h"
#include "illusions/dictionary.h"
@@ -311,12 +313,12 @@ void ScriptOpcodes_BBDOU::opUnloadActiveScenes(ScriptThread *scriptThread, OpCal
//uint32 dsceneId = 0x00010017, dthreadId = 0x0002001C;//Dorms int
//uint32 dsceneId = 0x0001000D, dthreadId = 0x00020012;//Food minigame
//uint32 dsceneId = 0x00010067, dthreadId = 0x0002022A;
-//uint32 dsceneId = 0x0001000C, dthreadId = 0x00020011;//Cafeteria
+uint32 dsceneId = 0x0001000C, dthreadId = 0x00020011;//Cafeteria
//uint32 dsceneId = 0x0001000B, dthreadId = 0x00020010;
//uint32 dsceneId = 0x0001001A, dthreadId = 0x0002001F;
//uint32 dsceneId = 0x00010047, dthreadId = 0x0002005F;
//uint32 dsceneId = 0x0001007D, dthreadId = 0x000203B9;
-uint32 dsceneId = 0x0001000D, dthreadId = 0x00020012;
+// uint32 dsceneId = 0x0001000D, dthreadId = 0x00020012; // Food minigame
void ScriptOpcodes_BBDOU::opChangeScene(ScriptThread *scriptThread, OpCall &opCall) {
ARG_SKIP(2);
@@ -691,17 +693,34 @@ void ScriptOpcodes_BBDOU::opAddMenuChoice(ScriptThread *scriptThread, OpCall &op
}
void ScriptOpcodes_BBDOU::opDisplayMenu(ScriptThread *scriptThread, OpCall &opCall) {
- ARG_INT16(unk1);
+ ARG_INT16(timeoutChoiceOfs);
ARG_UINT32(menuId);
- ARG_UINT32(unk2);
- // TODO _vm->_shellMgr->displayMenu(_vm->_stack->topPtr(), &_vm->_menuChoiceOfs, menuId, unk1, unk2, opCall._callerThreadId);
- // Remove menu choices from the stack
+ ARG_UINT32(timeOutDuration);
+
+ MenuChoiceOffsets menuChoiceOffsets;
+
+ // Load menu choices from the stack
do {
- _vm->_stack->pop();
+ int16 choiceOffs = _vm->_stack->pop();
+ menuChoiceOffsets.push_back(choiceOffs);
} while (_vm->_stack->pop() == 0);
- //DEBUG Resume calling thread, later done by the video player
- _vm->notifyThreadId(opCall._callerThreadId);
+ // TODO DBEUG Start menu not yet implemented, fake selection of "Start game"
+ if (menuId == 0x001C0001) {
+ _vm->_menuChoiceOfs = 88;
+ _vm->notifyThreadId(opCall._callerThreadId);
+ return;
+ }
+
+ // Duckman has the timeout choice offset on the stack and the index as parameter
+ // BBDOU instead has only the choice offset as parameter
+ // So we just add the timeout choice offset and use its index.
+ menuChoiceOffsets.push_back(timeoutChoiceOfs);
+ uint timeOutMenuChoiceIndex = menuChoiceOffsets.size() - 1;
+
+ _vm->_menuSystem->runMenu(menuChoiceOffsets, &_vm->_menuChoiceOfs,
+ menuId, timeOutDuration, timeOutMenuChoiceIndex,
+ opCall._callerThreadId);
}
@@ -918,7 +937,8 @@ void ScriptOpcodes_BBDOU::opAddMenuKey(ScriptThread *scriptThread, OpCall &opCal
ARG_SKIP(2);
ARG_UINT32(key);
ARG_UINT32(threadId);
- // TODO _vm->addMenuKey(key, threadId);
+ debug("addMenuKey(%08X; %08X)", key, threadId);
+ _vm->_menuKeys->addMenuKey(key, threadId);
}
void ScriptOpcodes_BBDOU::opChangeSceneAll(ScriptThread *scriptThread, OpCall &opCall) {