diff options
| -rw-r--r-- | engines/illusions/actor.cpp | 47 | ||||
| -rw-r--r-- | engines/illusions/actor.h | 4 | ||||
| -rw-r--r-- | engines/illusions/duckman/illusions_duckman.cpp | 4 | ||||
| -rw-r--r-- | engines/illusions/duckman/menusystem_duckman.cpp | 5 | ||||
| -rw-r--r-- | engines/illusions/duckman/scriptopcodes_duckman.cpp | 4 | ||||
| -rw-r--r-- | engines/illusions/menusystem.cpp | 2 | 
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); | 
