diff options
| author | Paul Gilbert | 2011-03-04 23:46:23 +1100 | 
|---|---|---|
| committer | Paul Gilbert | 2011-03-04 23:46:23 +1100 | 
| commit | d74cc379cc40318da7c55a53a30136e1a1517ce8 (patch) | |
| tree | b21cacc2d8ebc2a80d637b3f5b251bf9ec52d1c5 | |
| parent | ad2aa17a0654634ac658668c32cca9692f4c3cbe (diff) | |
| download | scummvm-rg350-d74cc379cc40318da7c55a53a30136e1a1517ce8.tar.gz scummvm-rg350-d74cc379cc40318da7c55a53a30136e1a1517ce8.tar.bz2 scummvm-rg350-d74cc379cc40318da7c55a53a30136e1a1517ce8.zip  | |
TSAGE: Implemented all the action classes for Scene 2100
| -rw-r--r-- | engines/tsage/ringworld_scenes3.cpp | 831 | ||||
| -rw-r--r-- | engines/tsage/ringworld_scenes3.h | 10 | 
2 files changed, 832 insertions, 9 deletions
diff --git a/engines/tsage/ringworld_scenes3.cpp b/engines/tsage/ringworld_scenes3.cpp index b115015336..cadfaba820 100644 --- a/engines/tsage/ringworld_scenes3.cpp +++ b/engines/tsage/ringworld_scenes3.cpp @@ -485,55 +485,839 @@ void Scene2000::stripCallback(int v) {   *--------------------------------------------------------------------------*/  void Scene2100::Action1::signal() { +	Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + +	switch (_actionIndex++) { +	case 0: +		_globals->_player.disableControl(); +		if (!scene->_field1800) +			setDelay(1); +		else { +			setAction(&scene->_sequenceManager, this, 2102, &_globals->_player, NULL); +			scene->_field1800 = 0; +		} +		break; +	case 1: { +		Common::Point pt(157, 62); +		PlayerMover *mover = new PlayerMover(); +		_globals->_player.addMover(mover, &pt, this); +		break; +	} +	case 2: +		scene->_soundHandler.startSound(162); +		scene->_object8.animate(ANIM_MODE_5, this); +		break; +	case 3: { +		Common::Point pt(157, 56); +		NpcMover *mover = new NpcMover(); +		_globals->_player.addMover(mover, &pt, this); +		break; +	} +	case 4: +		_globals->_player._strip = 3; +		setDelay(3); +		break; +	case 5: +		_globals->_player.setPriority2(1); +		scene->_area1.display(); +		scene->_area2.display(); +		scene->_area3.display(); +		scene->_area4.display(); + +		scene->_area1.draw(true); +		_state = 0; +		_globals->_events.setCursor(CURSOR_USE); + +		while (!_state && !_vm->getEventManager()->shouldQuit()) { +			// Wait for an event +			Event event; +			if (!_globals->_events.getEvent(event)) { +				g_system->updateScreen(); +				g_system->delayMillis(10); +				continue; +			} + +			if (scene->_area1._bounds.contains(event.mousePos)) { +				scene->_area1.draw(true); +				_state = scene->_area1._actionId; +			} +			if (scene->_area2._bounds.contains(event.mousePos)) { +				scene->_area1.draw(false); +				scene->_area2.draw(true); +				_state = scene->_area2._actionId; +			} +			if (scene->_area3._bounds.contains(event.mousePos)) { +				scene->_area1.draw(false); +				scene->_area3.draw(true); +				_state = scene->_area3._actionId; +			} +		} + +		scene->_soundHandler.startSound(161); +		scene->_area1.restore(); +		scene->_area2.restore(); +		scene->_area3.restore(); +		scene->_area4.restore(); +		if (_state == 2100) { +			setDelay(1); +		} else { +			scene->_soundHandler.startSound(162); +			scene->_object8.animate(ANIM_MODE_6, this); +		} +		 + +		//TODO +		break; +	case 6: +		if (_state == 2100) { +			Common::Point pt(157, 65); +			NpcMover *mover = new NpcMover(); +			_globals->_player.addMover(mover, &pt, this); +			break; +		} else { +			_globals->_sceneManager.changeScene(_state); +		} +		break; +	case 7: +		_globals->_player.setPriority2(-1); +		scene->_soundHandler.startSound(162); +		scene->_object8.animate(ANIM_MODE_6, this); +		break; +	case 8: +		_globals->_player.enableControl(); +		remove(); +		break; +	}  }  void Scene2100::Action2::signal() { +	Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + +	switch (_actionIndex++) { +	case 0: +		scene->_object10._numFrames = 5; +		setDelay(_globals->_randomSource.getRandomNumber(59)); +		break; +	case 1: +		scene->_object10.animate(ANIM_MODE_5, this); +		break; +	case 2: +		setDelay(_globals->_randomSource.getRandomNumber(59)); +		break; +	case 3: +		scene->_object10.animate(ANIM_MODE_6, this); +		_actionIndex = 0; +		break; +	}  }  void Scene2100::Action3::signal() { +	Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + +	switch (_actionIndex++) { +	case 0: +	case 2: +		setDelay(_globals->_randomSource.getRandomNumber(119)); +		break; +	case 1: +		scene->_object9.animate(ANIM_MODE_5, this); +		break; +	case 3: +		scene->_object9.animate(ANIM_MODE_6, this); +		_actionIndex = 0; +		break; +	}  }  void Scene2100::Action4::signal() { +	Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + +	switch (_actionIndex++) { +	case 0: +		_globals->_player.disableControl(); +		if (!scene->_field1800) +			setDelay(1); +		else +			setAction(&scene->_sequenceManager, this, 2102, &_globals->_player, NULL); +		break; +	case 1: { +		Common::Point pt(80, 66); +		PlayerMover *mover = new PlayerMover(); +		_globals->_player.addMover(mover, &pt, NULL); +		break; +	} +	case 2: +		_globals->_player.setVisage(2109); +		_globals->_player._frame = 1; +		_globals->_player._strip = 2; +		_globals->_player.animate(ANIM_MODE_5, this); +		break; +	case 3: +		_globals->_sceneManager.changeScene(2120); +		break; +	}  }  void Scene2100::Action5::signal() { +	Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + +	switch (_actionIndex++) { +	case 0: +		setDelay(30); +		break; +	case 1: +		setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, &scene->_object8, NULL); +		break; +	case 2: { +		Common::Point pt(272, 127); +		NpcMover *mover = new NpcMover(); +		_globals->_player.addMover(mover, &pt, this); +		break; +	} +	case 3: +		_globals->_player.checkAngle(&scene->_object10); +		setDelay(30); +		break; +	case 4: +		_globals->_sceneManager.changeScene(3700); +		break; +	}  }  void Scene2100::Action6::signal() { +	Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + +	switch (_actionIndex++) { +	case 0: { +		scene->_object9.setVisage(2806); +		scene->_object9.setStrip(1); +		scene->_object9.setStrip2(-1); +		scene->_object9.changeZoom(-1); +		scene->_object9.setPosition(Common::Point(155, 116)); +		scene->_object9.setObjectWrapper(new SceneObjectWrapper()); +		scene->_object9.setAction(NULL); +		scene->_object9.animate(ANIM_MODE_1, NULL); + +		Common::Point pt(130, 116); +		NpcMover *mover = new NpcMover(); +		scene->_object9.addMover(mover, &pt, NULL); +		break; +	} +	case 1: { +		scene->_object9.setPriority2(-1); +		Common::Point pt(153, 67); +		NpcMover *mover = new NpcMover(); +		scene->_object9.addMover(mover, &pt, NULL); +		break; +	} +	case 2: +		remove(); +		break; +	}  }  void Scene2100::Action7::signal() { +	Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + +	switch (_actionIndex++) { +	case 0: +		setDelay(60); +		break; +	case 1: +		setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, &scene->_object8, NULL); +		break; +	case 2: +		setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, NULL); +		break; +	case 3: +		_globals->_sceneManager.changeScene(8100); +		break; +	}  }  void Scene2100::Action8::signal() { +	Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + +	switch (_actionIndex++) { +	case 0: +		setDelay(60); +		break; +	case 1: +		setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, &scene->_object8, NULL); +		break; +	case 2: { +		Common::Point pt(200, 174); +		PlayerMover *mover = new PlayerMover(); +		_globals->_player.addMover(mover, &pt, this); +		break; +	} +	case 3: +		_globals->_player.checkAngle(&scene->_object10); +		scene->_stripManager.start((_globals->_inventory._translator._sceneNumber == 1) ? 7720 : 7710, this); +		break; +	case 4: +		if (_globals->_inventory._translator._sceneNumber != 1) +			_globals->_sceneManager.changeScene(7600); +		else { +			_globals->setFlag(24); +			_globals->_player.enableControl(); +			remove(); +		} +		break; +	}  }  void Scene2100::Action9::signal() { +	Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + +	switch (_actionIndex++) { +	case 0: +		setDelay(60); +		break; +	case 1: +		scene->_stripManager.start(6050, this); +		break; +	case 2: +		scene->_soundHandler.startSound(99); +		scene->_object11.unflag100(); +		scene->_object11.animate(ANIM_MODE_5, this); +		break; +	case 3: +		scene->_soundHandler.startSound(12); +		scene->_object11.setStrip(2); +		scene->_stripManager.start(6051, this, scene); +		break; +	case 4: +		scene->_soundHandler.proc1(false); +		scene->_object11.setStrip(1); +		scene->_object11.setFrame(scene->_object11.getFrameCount()); +		scene->_object11.animate(ANIM_MODE_6, this); +		break; +	case 5: +		scene->_object11.flag100(); +		_globals->_events.setCursor(CURSOR_WALK); +		scene->_stripManager.start(6010, this); +		break; +	case 6: +		if (scene->_stripManager._field2E8 != 165) +			setAction(&scene->_action10); +		else +			setAction(&scene->_action11); +		break; +	}  }  void Scene2100::Action10::signal() { +	Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + +	switch (_actionIndex++) { +	case 0: +		setDelay(60); +		break; +	case 1: +		setAction(&scene->_sequenceManager, this, 2102, &_globals->_player, NULL); +		break; +	case 2: { +		_globals->_player.disableControl(); +		Common::Point pt(155, 64); +		PlayerMover *mover = new PlayerMover(); +		_globals->_player.addMover(mover, &pt, this); +		break; +	} +	case 3: +		scene->_object10.setVisage(2105); +		scene->_object10.setStrip(2); +		scene->_object10.setFrame(1); +		scene->_object10._numFrames = 10; +		scene->_object10.setAction(NULL); +		scene->_object10.animate(ANIM_MODE_5, this); +		break; +	case 4: { +		scene->_object10.setVisage(2705); +		scene->_object10.setStrip2(-1); +		scene->_object10.changeZoom(-1); +		scene->_object10.setPriority2(-1); +		scene->_object10.setPosition(Common::Point(260, 156)); +		scene->_object10.setObjectWrapper(new SceneObjectWrapper()); +		scene->_object10.animate(ANIM_MODE_1, NULL); + +		Common::Point pt(166, 64); +		PlayerMover *mover = new PlayerMover(); +		scene->_object10.addMover(mover, &pt, this); + +		setAction(&scene->_action6, NULL); +		break; +	}		 +	case 5: +		scene->_soundHandler.startSound(162); +		scene->_object8.animate(ANIM_MODE_5, this); +		break; +	case 6: { +		_globals->_player.setPriority2(1); +		Common::Point pt(144, 54); +		NpcMover *mover = new NpcMover(); +		_globals->_player.addMover(mover, &pt, this); +		break; +	} +	case 7: { +		scene->_object10.setPriority2(2); +		Common::Point pt1(163, 55); +		NpcMover *mover1 = new NpcMover(); +		scene->_object10.addMover(mover1, &pt1, NULL); +		 +		scene->_object9.setPriority2(2); +		Common::Point pt2(158, 55); +		NpcMover *mover2 = new NpcMover(); +		scene->_object9.addMover(mover2, &pt2, this); +		break; +	} +	case 8: +		_globals->_player.setPriority2(1); +		_globals->_player.setStrip(1); +		scene->_object10.setPriority2(1); +		scene->_object10.setStrip(2); +		scene->_object9.setPriority2(2); +		scene->_object9.setStrip(3); +		 +		setDelay(45); +		break; +	case 9: +		scene->_soundHandler.startSound(162); +		scene->_object8.animate(ANIM_MODE_6, this); +		break; +	case 10: +		_globals->setFlag(70); +		_globals->_stripNum = 2101; +		_globals->_sceneManager.changeScene(2320); +		break; +	}  }  void Scene2100::Action11::signal() { +	Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + +	switch (_actionIndex++) { +	case 0: +		setDelay(60); +		break; +	case 1: +		scene->_object10._numFrames = 10; +		scene->_object10.setAction(NULL); +		scene->_object10.setVisage(2105); +		scene->_object10.setStrip(2); +		scene->_object10.setFrame(1); +		scene->_object10.animate(ANIM_MODE_5, this); +		break; +	case 2: { +		scene->_object10.setVisage(2705); +		scene->_object10.setStrip2(-1); +		scene->_object10.changeZoom(-1); +		scene->_object10.setPriority2(-1); +		scene->_object10.setPosition(Common::Point(260, 156)); +		scene->_object10.setObjectWrapper(new SceneObjectWrapper()); +		scene->_object10.animate(ANIM_MODE_1, NULL); + +		Common::Point pt(158, 62); +		PlayerMover *mover = new PlayerMover(); +		scene->_object10.addMover(mover, &pt, this); + +		setAction(&scene->_action6, NULL); +		break; +	} +	case 3: +		scene->_soundHandler.startSound(162); +		scene->_object8.animate(ANIM_MODE_5, this); +		break; +	case 4: { +		scene->_object10.setPriority2(1); +		Common::Point pt1(163, 55); +		NpcMover *mover1 = new NpcMover(); +		scene->_object10.addMover(mover1, &pt1, NULL); + +		scene->_object9.setPriority2(1); +		Common::Point pt2(158, 55); +		NpcMover *mover2 = new NpcMover(); +		scene->_object9.addMover(mover2, &pt2, this); +		break; +	} +	case 5: +		scene->_object10.setStrip(2); +		scene->_object9.setStrip(3); +		setDelay(45); +		break; +	case 6: +		scene->_soundHandler.startSound(162); +		scene->_object8.animate(ANIM_MODE_6, this); +		break; +	case 7: +		scene->_object10.remove(); +		scene->_object9.remove(); +		_globals->setFlag(70); +		_globals->_stripNum = 2102; +		_globals->_player.enableControl(); +		_globals->_player._canWalk = false; +		break; +	}  }  void Scene2100::Action12::signal() { +	Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + +	switch (_actionIndex++) { +	case 0: +		setDelay(10); +		break; +	case 1: +		scene->_stripManager.start(6000, this); +		break; +	case 2: +		scene->_soundHandler.startSound(162); +		scene->_object8.animate(ANIM_MODE_5, this); +		break; +	case 3: { +		Common::Point pt1(158, 74); +		NpcMover *mover1 = new NpcMover(); +		_globals->_player.addMover(mover1, &pt1, this); + +		Common::Point pt2(158, 68); +		NpcMover *mover2 = new NpcMover(); +		scene->_object9.addMover(mover2, &pt2, NULL); +		break; +	} +	case 4: { +		scene->_soundHandler.startSound(162); +		scene->_object8.animate(ANIM_MODE_6, NULL); + +		_globals->_player.setPriority2(-1); +		Common::Point pt1(277, 84); +		PlayerMover *mover1 = new PlayerMover(); +		_globals->_player.addMover(mover1, &pt1, this); + +		scene->_object9.setPriority2(-1); +		Common::Point pt2(255, 76); +		PlayerMover *mover2 = new PlayerMover(); +		scene->_object9.addMover(mover2, &pt2, this); +		break; +	} +	case 6: +		_globals->_player.setStrip(4); +		scene->_object9.setStrip(4); +		setDelay(60); +		break; +	case 7: +		_globals->_events.setCursor(CURSOR_WALK); +		scene->_stripManager.start(6052, this); +		break; +	case 8: +		if (scene->_stripManager._field2E8 == 320) +			_globals->setFlag(74); +		setDelay(30); +		break; +	case 9: +		_globals->_events.setCursor(OBJECT_STUNNER); +		scene->_object9.setAction(&scene->_action13); +		setDelay(60); +		break; +	case 10: +		if (_globals->getFlag(74)) +			setDelay(1); +		break; +	case 11: +		scene->_stripManager.start(2170, this); +		break; +	case 12: +		setDelay(5); +		break; +	case 13: +		scene->_stripManager.start(_globals->getFlag(74) ? 2172 : 2174, this); +		break; +	case 14: +		if (_globals->getFlag(74)) { +			_globals->_stripNum = 6100; +			_globals->_sceneManager.changeScene(2320); +		} else { +			_globals->_sceneManager.changeScene(6100); +		} +		remove(); +		break; +	}  }  void Scene2100::Action13::signal() { +	Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + +	switch (_actionIndex++) { +	case 0: +		setDelay(6); +		break; +	case 1: { +		scene->_object9.setPriority2(113); +		Common::Point pt(178, 116); +		PlayerMover *mover = new PlayerMover(); +		scene->_object9.addMover(mover, &pt, this); +		break; +	} +	case 2: { +		Common::Point pt(150, 116); +		NpcMover *mover = new NpcMover(); +		scene->_object9.addMover(mover, &pt, this); +		break; +	} +	case 3: +		scene->_object9.setVisage(2108); +		scene->_object9._strip = 3; +		scene->_object9.setPosition(Common::Point(150, 100)); +		scene->_object9.animate(ANIM_MODE_NONE, NULL); +		scene->_object9.changeZoom(100); +		scene->_object9.setAction(&scene->_action3); +		setDelay(15); +		break; +	case 4: +		remove(); +		break; +	}  }  void Scene2100::Action14::signal() { +	Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + +	switch (_actionIndex++) { +	case 0: +		setDelay(6); +		break; +	case 1: +		setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, &scene->_object8, NULL); +		break; +	case 2: +		setAction(&scene->_sequenceManager, this, 2101, &_globals->_player, NULL); +		break; +	case 3: +		scene->_stripManager.start(6008, this); +		break; +	case 4: +		scene->_soundHandler.startSound(99); +		scene->_object11.unflag100(); +		scene->_object11.animate(ANIM_MODE_5, this); +		break; +	case 5: +		scene->_object11.setStrip(2); +		scene->_stripManager.start(6009, this, scene); +		break; +	case 6: +		scene->_soundHandler.proc1(false); +		scene->_object11.setStrip(1); +		scene->_object11.setFrame(scene->_object11.getFrameCount()); +		scene->_object11.animate(ANIM_MODE_6, this); +		break; +	case 7: +		scene->_stripManager.start(6060, this); +		break; +	case 8: +		scene->_object10._numFrames = 10; +		scene->_object10.setAction(NULL); +		scene->_object10.setVisage(2105); +		scene->_object10.setStrip(2); +		scene->_object10.setFrame(1); +		scene->_object10.animate(ANIM_MODE_5, this); +		break; +	case 9: { +		scene->_object10.setVisage(2705); +		scene->_object10.setStrip2(-1); +		scene->_object10.changeZoom(-1); +		scene->_object10.setPriority2(-1); +		scene->_object10.setPosition(Common::Point(260, 156)); +		scene->_object10.setObjectWrapper(new SceneObjectWrapper()); +		scene->_object10.animate(ANIM_MODE_1, NULL); + +		Common::Point pt(157, 65); +		PlayerMover *mover = new PlayerMover(); +		scene->_object10.addMover(mover, &pt, this); +		break; +	} +	case 10: +		scene->_soundHandler.startSound(162); +		scene->_object8.animate(ANIM_MODE_5, this); +		break; +	case 11: { +		Common::Point pt(159, 51); +		NpcMover *mover = new NpcMover(); +		scene->_object10.addMover(mover, &pt, this); +		break; +	} +	case 12: +		scene->_object10.setStrip(2); +		setDelay(30); +	case 13: +		scene->_object10.setPriority2(1); +		scene->_soundHandler.startSound(162); +		scene->_object8.animate(ANIM_MODE_6, this); +		break; +	case 14: +		setDelay(90); +		break; +	case 15: +		_globals->_sceneManager.changeScene(7000); +		remove(); +		break; +	}  }  void Scene2100::Action15::signal() { +	Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + +	switch (_actionIndex++) { +	case 0: +		setDelay(6); +		break; +	case 1: +		scene->_object10.postInit(); +		scene->_object10.setVisage(2705); +		scene->_object10.animate(ANIM_MODE_1, NULL); +		scene->_object10.setObjectWrapper(new SceneObjectWrapper()); +		scene->_object10.setPosition(Common::Point(157, 56)); +		scene->_object10.setPriority2(1); +		scene->_object10.changeZoom(-1); + +		scene->_soundHandler.startSound(162); +		scene->_object8.animate(ANIM_MODE_5, this); +		break; +	case 2: { +		scene->_object10.setPriority2(-1); +		Common::Point pt(177, 68); +		NpcMover *mover = new NpcMover(); +		scene->_object10.addMover(mover, &pt, this); +		break; +	} +	case 3: { +		scene->_soundHandler.startSound(162); +		scene->_object8.animate(ANIM_MODE_6, this); +		 +		Common::Point pt(272, 140); +		NpcMover *mover = new NpcMover(); +		scene->_object10.addMover(mover, &pt, this); +		break; +	} +	case 4: { +		Common::Point pt(266, 150); +		NpcMover *mover = new NpcMover(); +		scene->_object10.addMover(mover, &pt, this); +		break; +	} +	case 5: { +		scene->_object10.setPriority2(156); + +		Common::Point pt(260, 156); +		NpcMover *mover = new NpcMover(); +		scene->_object10.addMover(mover, &pt, this); +		break; +	} +	case 6: +		scene->_object10.setVisage(2105); +		scene->_object10._strip = 1; +		scene->_object10._frame = 1; +		scene->_object10.setPosition(Common::Point(256, 156)); +		scene->_object10.animate(ANIM_MODE_5, this); +		scene->_object10.changeZoom(100); + +		scene->_object3.animate(ANIM_MODE_NONE, NULL); +		break; +	case 7: +		remove(); +		break; +	}  }  void Scene2100::Action16::signal() { +	Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + +	switch (_actionIndex++) { +	case 0: +	case 4: +		setDelay(3); +		break; +	case 1: +		scene->_stripManager.start(7001, this); +		break; +	case 2: +		setAction(&scene->_sequenceManager, this, 2102, &_globals->_player, NULL); +		break; +	case 3: { +		_globals->_player.disableControl(); +		Common::Point pt(155, 63); +		PlayerMover *mover = new PlayerMover(); +		_globals->_player.addMover(mover, &pt, this); +		break; +	} +	case 5: +		scene->_soundHandler.startSound(162); +		scene->_object8.animate(ANIM_MODE_5, this); +		break; +	case 6: { +		Common::Point pt(160, 54); +		NpcMover *mover = new NpcMover(); +		_globals->_player.addMover(mover, &pt, this); +		break; +	} +	case 7: +		_globals->_player.setPriority2(1); +		_globals->_player.setStrip(3); +		setDelay(45); +		break; +	case 8: +		scene->_soundHandler.startSound(162); +		scene->_object8.animate(ANIM_MODE_6, this); +		break; +	case 9: +		_globals->setFlag(15); +		_globals->setFlag(36); +		_globals->_sceneManager.changeScene(7000); +		remove(); +		break; +	}  }  void Scene2100::Action17::signal() { +	Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; + +	switch (_actionIndex++) { +	case 0: +		setDelay(60); +		break; +	case 1: +		setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, &scene->_object8, NULL); +		break; +	case 2: +		setAction(&scene->_sequenceManager, this, 2101, &_globals->_player, NULL); +		break; +	case 3: +		scene->_stripManager.start(7070, this); +		break; +	case 4: +		scene->_soundHandler.startSound(99); +		scene->_object11.unflag100(); +		scene->_object11.animate(ANIM_MODE_5, this); +		break; +	case 5: +		scene->_soundHandler.startSound(12); +		scene->_object11.setStrip(2); +		scene->_stripManager.start(7071, this, scene); +		break; +	case 6: +		scene->_soundHandler.proc1(NULL); +		scene->_object11.setStrip(1); +		scene->_object11.setFrame(scene->_object11.getFrameCount()); +		scene->_object11.animate(ANIM_MODE_6, this); +		break; +	case 7: +		scene->_stripManager.start(7072, this); +		break; +	case 8: +		_globals->_inventory._stasisNegator._sceneNumber = 1; +		_globals->_sceneManager.changeScene(9100); +		remove(); +		break; +	}  }  /*--------------------------------------------------------------------------*/ @@ -576,12 +1360,11 @@ void Scene2100::SceneArea::setup(int resNum, int rlbNum, int subNum, int actionI  	_rlbNum = rlbNum;  	_subNum = subNum;  	_actionId = actionId; -	_field20 = 0;  	_surface = surfaceFromRes(resNum, rlbNum, subNum);  } -void Scene2100::SceneArea::draw() { +void Scene2100::SceneArea::draw2() {  	_surface.draw(Common::Point(_bounds.left, _bounds.top));	  } @@ -592,14 +1375,41 @@ void Scene2100::SceneArea::display() {  	_bounds.setHeight(_surface.getBounds().height());  	_savedArea = Surface_getArea(_globals->_gfxManagerInstance.getSurface(), _bounds); -	draw(); +	draw2(); +} + +void Scene2100::SceneArea::restore() { +	assert(_savedArea); +	_savedArea->draw(Common::Point(_bounds.left, _bounds.top)); +	delete _savedArea; +	_savedArea = NULL;  } -void Scene2100::SceneArea::draw2(bool flag) { +void Scene2100::SceneArea::draw(bool flag) {  	_surface = surfaceFromRes(_resNum, _rlbNum, flag ? _subNum + 1 : _subNum);  	_surface.draw(Common::Point(_bounds.left, _bounds.top));  } +void Scene2100::SceneArea::wait() { +	// Wait until a mouse or keypress +	Event event; +	while (!_vm->getEventManager()->shouldQuit() && !_globals->_events.getEvent(event)) { +		g_system->updateScreen(); +		g_system->delayMillis(10); +	} + +	List<SceneItem *>::iterator ii; +	for (ii = _globals->_sceneItems.begin(); ii != _globals->_sceneItems.end(); ++ii) { +		SceneItem *sceneItem = *ii; +		if (sceneItem->contains(event.mousePos)) { +			sceneItem->doAction(_actionId); +			break; +		} +	} + +	_globals->_events.setCursor(CURSOR_ARROW); +} +  void Scene2100::SceneArea::synchronise(Serialiser &s) {  	s.syncAsSint16LE(_pt.x);  	s.syncAsSint16LE(_pt.y); @@ -608,7 +1418,6 @@ void Scene2100::SceneArea::synchronise(Serialiser &s) {  	s.syncAsSint32LE(_subNum);  	s.syncAsSint32LE(_actionId);  	_bounds.synchronise(s); -	s.syncAsSint32LE(_field20);  }  /*--------------------------------------------------------------------------*/ @@ -982,6 +1791,18 @@ void Scene2100::postInit(SceneObjectList *OwnerList) {  	_globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;  } +void Scene2100::stripCallback(int v) { +	switch (v) { +	case 1: +		_object11._numFrames = 4; +		_object11.animate(ANIM_MODE_7, NULL); +		break; +	case 2: +		_object11.animate(ANIM_MODE_NONE, NULL); +		break; +	} +} +  void Scene2100::signal() {  	switch (_sceneMode) {  	case 2101: diff --git a/engines/tsage/ringworld_scenes3.h b/engines/tsage/ringworld_scenes3.h index bdafd972e3..ff093b912e 100644 --- a/engines/tsage/ringworld_scenes3.h +++ b/engines/tsage/ringworld_scenes3.h @@ -127,7 +127,7 @@ public:  class Scene2100: public Scene {  	/* Actions */ -	class Action1: public Action { +	class Action1: public Action2 {  	public:  		virtual void signal();  	}; @@ -213,17 +213,18 @@ class Scene2100: public Scene {  		int _subNum;  		int _actionId;  		Rect _bounds; -		int _field20;  	public:  		SceneArea();  		~SceneArea();  		void setup(int resNum, int rlbNum, int subNum, int actionId); -		void draw(); +		void draw2();  		void display(); -		void draw2(bool flag); +		void restore();  		virtual void synchronise(Serialiser &s); +		virtual void draw(bool flag); +		virtual void wait();  	};  public:  	SequenceManager _sequenceManager; @@ -267,6 +268,7 @@ public:  	Scene2100();  	virtual void postInit(SceneObjectList *OwnerList = NULL); +	virtual void stripCallback(int v);  	virtual void signal();  };  | 
