aboutsummaryrefslogtreecommitdiff
path: root/engines/tsage
diff options
context:
space:
mode:
authorstrangerke2011-04-24 18:28:47 +0200
committerstrangerke2011-04-24 18:28:47 +0200
commit06ef66cd35b9185305cf2244108d51eff4859bff (patch)
treea9558d7d7a93facd8fafebd35e4abb3e73e54db4 /engines/tsage
parent9b47a42ebdfb9d56463fba552a30d0749b1f131e (diff)
downloadscummvm-rg350-06ef66cd35b9185305cf2244108d51eff4859bff.tar.gz
scummvm-rg350-06ef66cd35b9185305cf2244108d51eff4859bff.tar.bz2
scummvm-rg350-06ef66cd35b9185305cf2244108d51eff4859bff.zip
TSAGE: Implement missing Scene4050::signal() and Scene4050::dispatch(), fix several bugs.
It's now possible to complete scene group 5 despite a couple of glitches in scene 4000 and 4045
Diffstat (limited to 'engines/tsage')
-rw-r--r--engines/tsage/ringworld_scenes5.cpp35
1 files changed, 30 insertions, 5 deletions
diff --git a/engines/tsage/ringworld_scenes5.cpp b/engines/tsage/ringworld_scenes5.cpp
index 0ad37ab601..a72396c26c 100644
--- a/engines/tsage/ringworld_scenes5.cpp
+++ b/engines/tsage/ringworld_scenes5.cpp
@@ -47,7 +47,10 @@ void Scene4000::Action1::signal() {
scene->_hotspot5.animate(ANIM_MODE_1, NULL);
scene->_hotspot5.setPosition(Common::Point(116, 160));
- ADD_PLAYER_MOVER_NULL(scene->_hotspot5, 208, 169);
+// ADD_PLAYER_MOVER_NULL(scene->_hotspot5, 208, 169);
+ Common::Point pt(208, 169);
+ NpcMover *mover = new NpcMover();
+ scene->_hotspot5.addMover(mover, &pt, this);
_globals->_inventory._ale._sceneNumber = 0;
_globals->clearFlag(42);
@@ -62,6 +65,7 @@ void Scene4000::Action1::signal() {
scene->_guardRock.animate(ANIM_MODE_1, NULL);
scene->_guardRock.setObjectWrapper(new SceneObjectWrapper());
scene->_guardRock.setPosition(Common::Point(314, 132));
+ scene->_guardRock._moveDiff = Common::Point(4, 2);
ADD_PLAYER_MOVER_NULL(scene->_guardRock, 288, 167);
@@ -80,7 +84,9 @@ void Scene4000::Action1::signal() {
scene->_miranda._moveDiff = Common::Point(4, 2);
scene->_miranda.setPosition(Common::Point(300, 135));
- ADD_PLAYER_MOVER_NULL(_globals->_player, 266, 169);
+ ADD_PLAYER_MOVER_THIS(scene->_miranda, 266, 169);
+
+ ADD_PLAYER_MOVER_NULL(_globals->_player, 241, 155);
break;
}
case 2:
@@ -203,7 +209,7 @@ void Scene4000::Action4::signal() {
ADD_MOVER(_globals->_player, 257, 57);
break;
case 1:
- _globals->_player.setVisage(4000);
+ _globals->_player.setVisage(4008);
_globals->_player.setPosition(Common::Point(258, 83));
_globals->_player._frame = 1;
_globals->_player._strip = 3;
@@ -295,6 +301,7 @@ void Scene4000::Action6::signal() {
}
void Scene4000::Action7::signal() {
+ // Climb down left Chimney using a rope
Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
@@ -649,6 +656,7 @@ void Scene4000::TheTech::doAction(int action) {
}
void Scene4000::Hotspot13::doAction(int action) {
+ // Rock
Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene;
switch (action) {
@@ -709,6 +717,7 @@ void Scene4000::Hotspot::doAction(int action) {
}
void Scene4000::Hotspot17::doAction(int action) {
+ // Left Chimney
Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene;
switch (action) {
@@ -728,6 +737,7 @@ void Scene4000::Hotspot17::doAction(int action) {
}
void Scene4000::Hotspot18::doAction(int action) {
+ // Right Chimney
Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene;
switch (action) {
@@ -875,6 +885,8 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
_globals->_sceneItems.push_back(&_miranda);
}
+ _globals->clearFlag(40);
+
switch (_globals->_sceneManager._previousScene) {
case 2320:
_globals->_soundHandler.startSound(155);
@@ -1896,6 +1908,7 @@ void Scene4045::postInit(SceneObjectList *OwnerList) {
}
if (_globals->getFlag(31)) {
+ // Olo asleep
_olloStand.setVisage(4051);
_olloStand.setStrip(5);
_olloStand.setPosition(Common::Point(173, 99));
@@ -2051,7 +2064,6 @@ void Scene4050::Action2::signal() {
_globals->_player.setPosition(Common::Point(210, 185));
_globals->_player.setPriority2(-1);
_globals->_player.enableControl();
-
remove();
break;
}
@@ -2222,6 +2234,7 @@ void Scene4050::postInit(SceneObjectList *OwnerList) {
switch (_globals->_sceneManager._previousScene) {
case 4000:
if (_globals->getFlag(41)) {
+ // Using a rope
_hotspot15.postInit();
_hotspot15.setVisage(4054);
_hotspot15.setPosition(Common::Point(206, 103));
@@ -2236,6 +2249,7 @@ void Scene4050::postInit(SceneObjectList *OwnerList) {
setAction(&_action2);
_globals->_soundHandler.startSound(175);
} else {
+ // Without the rope
_globals->_player.setVisage(5315);
_globals->_player.setPosition(Common::Point(189, 83));
_globals->_player.changeZoom(130);
@@ -2293,11 +2307,22 @@ void Scene4050::postInit(SceneObjectList *OwnerList) {
}
void Scene4050::signal() {
-
+ if (_sceneMode == 4050)
+ _globals->_sceneManager.changeScene(4045);
}
void Scene4050::dispatch() {
+ if (!_action) {
+ if ((_globals->_player._canWalk) && (_globals->_player._position.y > 196)) {
+ _sceneMode = 4050;
+ _globals->_player.disableControl();
+ Common::Point pt(160, 275);
+ NpcMover *mover = new NpcMover();
+ _globals->_player.addMover(mover, &pt, this);
+ }
+ }
+ Scene::dispatch();
}
/*--------------------------------------------------------------------------