aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Fry2018-06-16 14:41:37 +1000
committerEugene Sandulenko2018-07-20 06:43:33 +0000
commit0303b83ead46346cd74a9649384d8a2dde0e145b (patch)
tree4bdcf38fb86a4f60036b5cbdf49216b1ae2a5769
parentced1ff2356391f24c70f9bb4c514733aeadfc38b (diff)
downloadscummvm-rg350-0303b83ead46346cd74a9649384d8a2dde0e145b.tar.gz
scummvm-rg350-0303b83ead46346cd74a9649384d8a2dde0e145b.tar.bz2
scummvm-rg350-0303b83ead46346cd74a9649384d8a2dde0e145b.zip
ILLUSIONS: Pause actors when entering menu
-rw-r--r--engines/illusions/actor.cpp47
-rw-r--r--engines/illusions/actor.h4
-rw-r--r--engines/illusions/duckman/illusions_duckman.cpp4
-rw-r--r--engines/illusions/duckman/menusystem_duckman.cpp5
-rw-r--r--engines/illusions/duckman/scriptopcodes_duckman.cpp4
-rw-r--r--engines/illusions/menusystem.cpp2
6 files changed, 62 insertions, 4 deletions
diff --git a/engines/illusions/actor.cpp b/engines/illusions/actor.cpp
index 74d57d32b7..10f57446b0 100644
--- a/engines/illusions/actor.cpp
+++ b/engines/illusions/actor.cpp
@@ -1305,7 +1305,7 @@ bool Controls::getOverlappedObject(Control *control, Common::Point pt, Control *
foundControl = testControl;
foundPriority = testPriority;
}
- }
+ }
}
}
@@ -1504,4 +1504,49 @@ void Controls::destroyControlInternal(Control *control) {
delete control;
}
+void Controls::disappearActors() {
+ for (ItemsIterator it = _controls.begin(); it != _controls.end(); ++it) {
+ Control *control = *it;
+ if (control->_flags & 4 && control->_pauseCtr == 0) {
+ control->disappearActor();
+ }
+ }
+ Control *control = _vm->_dict->getObjectControl(0x40148);
+ if (control) {
+ control->disappearActor();
+ }
+}
+
+void Controls::appearActors() {
+ for (ItemsIterator it = _controls.begin(); it != _controls.end(); ++it) {
+ Control *control = *it;
+ if (control->_flags & 4 && control->_pauseCtr == 0) {
+ control->appearActor();
+ }
+ }
+ Control *control = _vm->_dict->getObjectControl(0x40148);
+ if (control) {
+ control->appearActor();
+ }
+}
+
+void Controls::pauseActors(uint32 objectId) {
+ for (ItemsIterator it = _controls.begin(); it != _controls.end(); ++it) {
+ Control *control = *it;
+ if (control->_actor && control->_objectId != objectId) {
+ control->_actor->pause();
+ }
+ }
+}
+
+void Controls::unpauseActors(uint32 objectId) {
+ for (ItemsIterator it = _controls.begin(); it != _controls.end(); ++it) {
+ Control *control = *it;
+ if (control->_actor && control->_objectId != objectId) {
+ control->_actor->unpause();
+ }
+ }
+}
+
+
} // End of namespace Illusions
diff --git a/engines/illusions/actor.h b/engines/illusions/actor.h
index 51f930be11..5a4dd4f389 100644
--- a/engines/illusions/actor.h
+++ b/engines/illusions/actor.h
@@ -276,6 +276,10 @@ public:
bool findNamedPoint(uint32 namedPointId, Common::Point &pt);
void actorControlRoutine(Control *control, uint32 deltaTime);
void dialogItemControlRoutine(Control *control, uint32 deltaTime);
+ void disappearActors();
+ void appearActors();
+ void pauseActors(uint32 objectId);
+ void unpauseActors(uint32 objectId);
public:
typedef Common::List<Control*> Items;
typedef Items::iterator ItemsIterator;
diff --git a/engines/illusions/duckman/illusions_duckman.cpp b/engines/illusions/duckman/illusions_duckman.cpp
index c427293b59..a93ec274b5 100644
--- a/engines/illusions/duckman/illusions_duckman.cpp
+++ b/engines/illusions/duckman/illusions_duckman.cpp
@@ -942,13 +942,13 @@ void IllusionsEngine_Duckman::pause(uint32 callerThreadId) {
_threads->pauseThreads(callerThreadId);
_camera->pause();
pauseFader();
- // TODO largeObj_pauseControlActor(Illusions::CURSOR_OBJECT_ID);
+ _controls->pauseActors(Illusions::CURSOR_OBJECT_ID);
}
}
void IllusionsEngine_Duckman::unpause(uint32 callerThreadId) {
if (--_pauseCtr == 0) {
- // TODO largeObj_unpauseControlActor(Illusions::CURSOR_OBJECT_ID);
+ _controls->unpauseActors(Illusions::CURSOR_OBJECT_ID);
unpauseFader();
_camera->unpause();
_threads->unpauseThreads(callerThreadId);
diff --git a/engines/illusions/duckman/menusystem_duckman.cpp b/engines/illusions/duckman/menusystem_duckman.cpp
index 554be9aac5..7cadd7ebf5 100644
--- a/engines/illusions/duckman/menusystem_duckman.cpp
+++ b/engines/illusions/duckman/menusystem_duckman.cpp
@@ -107,7 +107,7 @@ BaseMenu *DuckmanMenuSystem::createLoadGameMenu() {
}
BaseMenu *DuckmanMenuSystem::createOptionsMenu() {
- BaseMenu *menu = new BaseMenu(this, 0x00120003, 12, 17, 11, 27, 1);
+ BaseMenu *menu = new BaseMenu(this, 0x00120003, 12, 17, 11, 27, 6);
menu->addText(" GAME OPTIONS @@@@");
menu->addText("--------------------------------------");
MenuActionUpdateSlider *action = new MenuActionUpdateSlider(this, menu);
@@ -130,6 +130,9 @@ BaseMenu *DuckmanMenuSystem::createOptionsMenu() {
action->setMenuItem(menuItem);
menu->addMenuItem(menuItem);
+ menu->addMenuItem(new MenuItem("Restore Defaults", new MenuActionLeaveMenu(this)));
+
+ menu->addMenuItem(new MenuItem("Back", new MenuActionLeaveMenu(this)));
return menu;
}
diff --git a/engines/illusions/duckman/scriptopcodes_duckman.cpp b/engines/illusions/duckman/scriptopcodes_duckman.cpp
index 9ac0b9a0ad..66b45ad151 100644
--- a/engines/illusions/duckman/scriptopcodes_duckman.cpp
+++ b/engines/illusions/duckman/scriptopcodes_duckman.cpp
@@ -350,11 +350,15 @@ void ScriptOpcodes_Duckman::opEnterDebugger(ScriptThread *scriptThread, OpCall &
// Used for debugging purposes in the original engine
// This is not supported and only reachable by code not implemented here!
//error("ScriptOpcodes_Duckman::opEnterDebugger() Debugger function called");
+ _vm->_controls->disappearActors();
+ // TODO more logic needed here
}
void ScriptOpcodes_Duckman::opLeaveDebugger(ScriptThread *scriptThread, OpCall &opCall) {
// See opEnterDebugger
//error("ScriptOpcodes_Duckman::opLeaveDebugger() Debugger function called");
+ _vm->_controls->appearActors();
+ // TODO more logic needed here
}
void ScriptOpcodes_Duckman::opDumpCurrentSceneFiles(ScriptThread *scriptThread, OpCall &opCall) {
diff --git a/engines/illusions/menusystem.cpp b/engines/illusions/menusystem.cpp
index fbb52ee862..9131d58801 100644
--- a/engines/illusions/menusystem.cpp
+++ b/engines/illusions/menusystem.cpp
@@ -474,6 +474,7 @@ void BaseMenuSystem::update(Control *cursorControl) {
setMouseCursorToMenuItem(_hoveredMenuItemIndex);
_hoveredMenuItemIndex2 = _hoveredMenuItemIndex;
updateActorHoverBackground();
+ playSoundEffect(0xC);
} else if (_vm->_input->pollEvent(kEventDown)) {
// TODO handleDownKey();
if (_hoveredMenuItemIndex == _activeMenu->getMenuItemsCount()) {
@@ -484,6 +485,7 @@ void BaseMenuSystem::update(Control *cursorControl) {
setMouseCursorToMenuItem(_hoveredMenuItemIndex);
_hoveredMenuItemIndex2 = _hoveredMenuItemIndex;
updateActorHoverBackground();
+ playSoundEffect(0xC);
}
updateTimeOut(resetTimeOut);