diff options
author | Strangerke | 2011-11-24 08:17:37 +0100 |
---|---|---|
committer | Strangerke | 2011-11-24 08:17:37 +0100 |
commit | 7c78fe0d2261b337055fff327f8542b1e87ff903 (patch) | |
tree | 924bc17ce8f847d429b26b98e909c5a57603f459 /engines/tsage | |
parent | f19401b14caa1e73931f2de94c055b278e48d257 (diff) | |
download | scummvm-rg350-7c78fe0d2261b337055fff327f8542b1e87ff903.tar.gz scummvm-rg350-7c78fe0d2261b337055fff327f8542b1e87ff903.tar.bz2 scummvm-rg350-7c78fe0d2261b337055fff327f8542b1e87ff903.zip |
TSAGE: R2R - Partial implementation of scene 2000
Diffstat (limited to 'engines/tsage')
-rw-r--r-- | engines/tsage/events.h | 2 | ||||
-rw-r--r-- | engines/tsage/globals.cpp | 6 | ||||
-rw-r--r-- | engines/tsage/globals.h | 1 | ||||
-rw-r--r-- | engines/tsage/module.mk | 1 | ||||
-rw-r--r-- | engines/tsage/ringworld2/ringworld2_logic.cpp | 3 | ||||
-rw-r--r-- | engines/tsage/ringworld2/ringworld2_scenes2.cpp | 686 | ||||
-rw-r--r-- | engines/tsage/ringworld2/ringworld2_scenes2.h | 88 |
7 files changed, 785 insertions, 2 deletions
diff --git a/engines/tsage/events.h b/engines/tsage/events.h index 541da00147..f17923a4fa 100644 --- a/engines/tsage/events.h +++ b/engines/tsage/events.h @@ -93,7 +93,7 @@ enum CursorType { R2_50 = 50, R2_51 = 51, R2_52 = 52, // Ringworld 2 cursors - CURSOR_3 = 3, CURSOR_9 = 9, CURSOR_10 = 10, + CURSOR_3 = 3, CURSOR_7 = 7, CURSOR_8 = 8, CURSOR_9 = 9, CURSOR_10 = 10, // Cursors CURSOR_WALK = 0x100, CURSOR_LOOK = 0x200, CURSOR_700 = 700, CURSOR_USE = 0x400, CURSOR_TALK = 0x800, diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 3400c0fa68..ad1ae04be2 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -377,6 +377,8 @@ void Ringworld2Globals::reset() { // Reset fields _v5657C = 0; _v565F5 = 0; + for (int i = 0; i < 14; i++) + _v56605[i] = 0; _v57C2C = 0; _v58CE2 = 0; Common::fill(&_v565F1[0], &_v565F1[MAX_CHARACTERS], 0); @@ -415,6 +417,10 @@ void Ringworld2Globals::synchronize(Serializer &s) { for (i = 0; i < MAX_CHARACTERS; ++i) s.syncAsSint16LE(_v565F1[i]); + + for (i = 0; i < 14; ++i) + s.syncAsByte(_v56605[i]); + for (i = 0; i < 12; ++i) s.syncAsByte(_stripManager_lookupList[i]); diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 93b1c53b12..e3c6f5cbc7 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -247,6 +247,7 @@ public: int _insetUp; int _v565F5; int _v5657C; + byte _v56605[14]; int _v57C2C; int _v58CE2; int _speechSubtitles; diff --git a/engines/tsage/module.mk b/engines/tsage/module.mk index 99aa12a249..44f808ba8e 100644 --- a/engines/tsage/module.mk +++ b/engines/tsage/module.mk @@ -38,6 +38,7 @@ MODULE_OBJS := \ ringworld2/ringworld2_dialogs.o \ ringworld2/ringworld2_logic.o \ ringworld2/ringworld2_scenes0.o \ + ringworld2/ringworld2_scenes2.o \ ringworld2/ringworld2_speakers.o \ saveload.o \ scenes.o \ diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 942d1e451f..36744c099a 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -27,6 +27,7 @@ #include "tsage/ringworld2/ringworld2_logic.h" #include "tsage/ringworld2/ringworld2_dialogs.h" #include "tsage/ringworld2/ringworld2_scenes0.h" +#include "tsage/ringworld2/ringworld2_scenes2.h" namespace TsAGE { @@ -93,7 +94,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { error("Missing scene %d from group 1", sceneNumber); /* Scene group #2 */ // - case 2000: + case 2000: return new Scene2000(); case 2350: case 2400: case 2425: diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp new file mode 100644 index 0000000000..1d6f620b70 --- /dev/null +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -0,0 +1,686 @@ +/* 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 "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/staticres.h" +#include "tsage/ringworld2/ringworld2_scenes2.h" + +namespace TsAGE { + +namespace Ringworld2 { + +/*-------------------------------------------------------------------------- + * Scene 2000 - + * + *--------------------------------------------------------------------------*/ +void Scene2000::Action1::signal() { + Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; + + switch (_actionIndex) { + case 0: { + _actionIndex = 1; + Common::Point pt(-20, 127); + warning("TODO: Check sub_22D26"); + NpcMover *mover = new NpcMover(); + scene->_objList1[_state].addMover(mover, &pt, scene); + break; + } + case 1: + scene->_objList1[_state].setPosition(Common::Point(340, 127)); + --R2_GLOBALS._v56605[4 + _state]; + _actionIndex = 0; + switch (_state - 1) { + case 0: + if (R2_GLOBALS._v56605[4] == 1) + _actionIndex = 10; + break; + case 2: + if (R2_GLOBALS._v56605[6] == 7) + _actionIndex = 10; + break; + case 4: + if (R2_GLOBALS._v56605[8] == 14) + _actionIndex = 10; + break; + case 6: + if (R2_GLOBALS._v56605[10] == 19) + _actionIndex = 10; + break; + case 7: + if (R2_GLOBALS._v56605[11] == 23) + _actionIndex = 10; + break; + default: + break; + } + + if (R2_GLOBALS._v56605[3 + _state] == R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) + scene->_objList1[_state].show(); + else + scene->_objList1[_state].hide(); + + signal(); + break; + case 5: { + _actionIndex = 6; + Common::Point pt(340, 127); + warning("TODO: Check sub_22D26"); + NpcMover *mover = new NpcMover(); + scene->_objList1[_state].addMover(mover, &pt, this); + break; + } + case 6: + scene->_objList1[_state].setPosition(Common::Point(-20, 127)); + ++R2_GLOBALS._v56605[3 + _state]; + _actionIndex = 5; + switch (_state - 1) { + case 0: + if (R2_GLOBALS._v56605[4] == 5) + _actionIndex = 15; + break; + case 2: + if (R2_GLOBALS._v56605[6] == 13) + _actionIndex = 15; + break; + case 4: + if (R2_GLOBALS._v56605[8] == 16) + _actionIndex = 15; + break; + case 6: + if (R2_GLOBALS._v56605[10] == 22) + _actionIndex = 15; + break; + case 7: + if (R2_GLOBALS._v56605[11] == 27) + _actionIndex = 15; + break; + default: + break; + } + + if (R2_GLOBALS._v56605[3 + _state] == R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) + scene->_objList1[_state].show(); + else + scene->_objList1[_state].hide(); + + signal(); + break; + case 10: { + Common::Point pt(290, 127); + warning("TODO: Check sub_22D26"); + NpcMover *mover = new NpcMover(); + scene->_objList1[_state].addMover(mover, &pt, this); + _actionIndex = 11; + break; + } + case 11: + if (_state == 1) + scene->_objList1[0].setStrip(1); + else if (_state == 5) + scene->_objList1[4].setStrip(1); + setDelay(600); + _actionIndex = 12; + break; + case 12: + if (_state == 1) + scene->_objList1[0].setStrip(2); + else if (_state == 5) + scene->_objList1[4].setStrip(2); + scene->_objList1[_state].setStrip(1); + _actionIndex = 5; + signal(); + break; + case 15: + if ((R2_GLOBALS._v56605[3 + _state] == 13) || (R2_GLOBALS._v56605[3 + _state] == 22) || (R2_GLOBALS._v56605[3 + _state] == 27)) { + Common::Point pt(30, 127); + warning("TODO: Check sub_22D26"); + NpcMover *mover = new NpcMover(); + scene->_objList1[_state].addMover(mover, &pt, this); + _actionIndex = 16; + } else { + Common::Point pt(120, 127); + warning("TODO: Check sub_22D26"); + NpcMover *mover = new NpcMover(); + scene->_objList1[_state].addMover(mover, &pt, this); + _actionIndex = 16; + } + break; + case 16: + if (_state == 1) + scene->_objList1[2].setStrip(2); + else if (_state == 8) + scene->_objList1[9].setStrip(2); + setDelay(600); + _actionIndex = 17; + break; + case 17: + if (_state == 1) + scene->_objList1[2].setStrip(1); + else if (_state == 8) + scene->_objList1[9].setStrip(1); + scene->_objList1[_state].setStrip(2); + _actionIndex = 0; + break; + case 99: + error("99"); + break; + default: + break; + } +} + +void Scene2000::Exit1::changeScene() { + Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; + + scene->_field412 = 1; + scene->_sceneMode = 0; + R2_GLOBALS._player.disableControl(); + warning("DisableControl, with argements?"); + scene->_sceneMode = 10; + + warning("TODO: Check sub_22D26"); + Common::Point pt(-10, 129); + NpcMover *mover = new NpcMover(); + BF_GLOBALS._player.addMover(mover, &pt, scene); + + scene->setAction(&scene->_sequenceManager, scene, 206, &R2_GLOBALS._player, NULL); +} + +void Scene2000::Exit2::changeScene() { + Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; + + scene->_field412 = 1; + scene->_sceneMode = 0; + R2_GLOBALS._player.disableControl(); + warning("DisableControl, with argements?"); + scene->_sceneMode = 11; + + warning("TODO: Check sub_22D26"); + Common::Point pt(330, 129); + NpcMover *mover = new NpcMover(); + BF_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene2000::Exit3::changeScene() { + Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; + + scene->_field412 = 1; + scene->_sceneMode = 0; + R2_GLOBALS._player.disableControl(); + warning("DisableControl, with argements?"); + scene->_sceneMode = 12; + + switch (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) { + case 2: + scene->_field414 = 4; + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 8; + break; + case 11: + scene->_field414 = 6; + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 17; + break; + case 15: + scene->_field414 = 8; + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 24; + break; + case 20: + scene->_field414 = 4; + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 30; + break; + case 26: + scene->_field414 = 6; + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 32; + break; + case 29: + scene->_field414 = 11; + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 29; + break; + default: + break; + } + + switch (scene->_field414) { + case 4: + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2003, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2023, &R2_GLOBALS._player, NULL); + break; + case 6: + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2007, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2027, &R2_GLOBALS._player, NULL); + break; + case 8: + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2011, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2031, &R2_GLOBALS._player, NULL); + break; + case 11: + if (R2_GLOBALS._player._characterIndex == 1) + scene->_sceneMode = 2039; + else + scene->_sceneMode = 2041; + scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &R2_GLOBALS._player, NULL); + break; + + default: + break; + } +} +void Scene2000::Exit4::changeScene() { + Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; + + scene->_field412 = 1; + scene->_sceneMode = 0; + R2_GLOBALS._player.disableControl(); + warning("DisableControl, with argements?"); + scene->_sceneMode = 13; + + switch (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) { + case 8: + scene->_field414 = 5; + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 2; + break; + case 17: + scene->_field414 = 7; + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 11; + break; + case 24: + scene->_field414 = 9; + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 15; + break; + case 30: + scene->_field414 = 5; + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 20; + break; + case 32: + scene->_field414 = 7; + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 26; + break; + default: + break; + } + + switch (scene->_field414) { + case 5: + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2006, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2026, &R2_GLOBALS._player, NULL); + break; + case 7: + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2010, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2030, &R2_GLOBALS._player, NULL); + break; + case 9: + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2014, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2034, &R2_GLOBALS._player, NULL); + break; + default: + break; + } +} + +void Scene2000::Exit5::changeScene() { + Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; + + scene->_sceneMode = 0; + R2_GLOBALS._player.disableControl(); + warning("DisableControl, with argements?"); + scene->_sceneMode = 14; + + switch (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) { + case 3: + scene->_field414 = 1; + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2015, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2035, &R2_GLOBALS._player, NULL); + break; + case 4: + scene->_field414 = 7; + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2017, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2037, &R2_GLOBALS._player, NULL); + break; + case 10: + scene->_field414 = 8; + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2015, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2035, &R2_GLOBALS._player, NULL); + break; + case 12: + scene->_field414 = 3; + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2017, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2037, &R2_GLOBALS._player, NULL); + break; + case 16: + scene->_field414 = 4; + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2015, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2035, &R2_GLOBALS._player, NULL); + break; + case 21: + scene->_field414 = 5; + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2015, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2035, &R2_GLOBALS._player, NULL); + break; + case 25: + scene->_field414 = 2; + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2017, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2037, &R2_GLOBALS._player, NULL); + break; + case 34: + scene->_field414 = 6; + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2017, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2037, &R2_GLOBALS._player, NULL); + break; + default: + break; + } +} + +void Scene2000::postInit(SceneObjectList *OwnerList) { + SceneExt::postInit(); + loadScene(2000); + + if (R2_GLOBALS._sceneManager._previousScene != -1) { + R2_GLOBALS._v56605[1] = 21; + R2_GLOBALS._v56605[2] = 21; + } + if ((R2_GLOBALS._player._characterScene[R2_GLOBALS._player._characterIndex] != R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex]) && (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] != 2350)) { + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 0; + } + _field412 = 0; + + _exit1.setDetails(Rect(0, 100, 14, 140), CURSOR_9, 2000); + _exit1.setDest(Common::Point(14, 129)); + _exit2.setDetails(Rect(305, 100, 320, 140), CURSOR_10, 2000); + _exit2.setDest(Common::Point(315, 129)); + _exit3.setDetails(Rect(71, 130, 154, 168), CURSOR_8, 2000); + _exit3.setDest(Common::Point(94, 129)); + _exit4.setDetails(Rect(138, 83, 211, 125), CURSOR_7, 2000); + _exit4.setDest(Common::Point(188, 128)); + _exit5.setDetails(Rect(61, 68, 90, 125), CURSOR_9, 2000); + _exit5.setDest(Common::Point(92, 129)); + + R2_GLOBALS._sound1.play(200); + warning("STUB: sub_D2676"); + g_globals->_sceneManager._fadeMode = FADEMODE_IMMEDIATE; + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + + if (R2_GLOBALS._player._characterIndex == 1) { + R2_GLOBALS._player.setup(2008, 3, 1); + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + } else { + R2_GLOBALS._player.setup(20, 3, 1); + R2_GLOBALS._player._moveDiff = Common::Point(5, 3); + } + + _action1._state = 8; + _action2._state = 1; + _action3._state = 5; + _action4._state = 7; + _action5._state = 3; + + for (int i = 0; i < 11; i++) + _objList1[i].postInit(); + + _objList1[0].setVisage(2000); + _objList1[0].setStrip(2); + _objList1[0].setDetails(2001, 0, -1, -1, 1, NULL); + + _objList1[1].setVisage(2001); + _objList1[1].setStrip(2); + _objList1[1].setDetails(2001, 0, -1, -1, 1, NULL); + + _objList1[2].setVisage(2003); + _objList1[2].setStrip(1); + _objList1[2].setDetails(2001, 0, -1, -1, 1, NULL); + + _objList1[3].setVisage(2007); + _objList1[3].setStrip(2); + _objList1[3].setDetails(2001, 12, -1, -1, 1, NULL); + + _objList1[4].setVisage(2004); + _objList1[4].setStrip(2); + _objList1[4].setDetails(2001, 19, -1, -1, 1, NULL); + + _objList1[5].setVisage(2003); + _objList1[5].setStrip(2); + _objList1[5].setDetails(2001, 0, -1, -1, 1, NULL); + + _objList1[6].setVisage(2000); + _objList1[6].setStrip(1); + _objList1[6].setDetails(2001, 0, -1, -1, 1, NULL); + + _objList1[7].setVisage(2000); + _objList1[7].setStrip(2); + _objList1[7].setDetails(2001, 0, -1, -1, 1, NULL); + + _objList1[8].setVisage(2000); + _objList1[8].setStrip(2); + _objList1[8].setDetails(2001, 0, -1, -1, 1, NULL); + + _objList1[9].setVisage(2006); + _objList1[9].setStrip(1); + _objList1[9].setDetails(2001, 6, -1, -1, 1, NULL); + + _objList1[10].setVisage(2007); + _objList1[10].setStrip(1); + _objList1[10].setDetails(2001, 12, -1, -1, 1, NULL); + + for (int i = 0; i < 11; i++) { + _objList1[i].animate(ANIM_MODE_1, NULL); + _objList1[i]._moveDiff.x = 3; + _objList1[i]._moveRate = 8; + _objList1[i].hide(); + switch (i - 1) { + case 0: + if (R2_GLOBALS._v56605[3 + i] == 1) + ++R2_GLOBALS._v56605[3 + i]; + else if (R2_GLOBALS._v56605[3 + i] == 5) + --R2_GLOBALS._v56605[3 + i]; + break; + case 2: + if (R2_GLOBALS._v56605[3 + i] == 7) + ++R2_GLOBALS._v56605[3 + i]; + else if (R2_GLOBALS._v56605[3 + i] == 13) + --R2_GLOBALS._v56605[3 + i]; + break; + case 4: + if (R2_GLOBALS._v56605[3 + i] == 14) + ++R2_GLOBALS._v56605[3 + i]; + else if (R2_GLOBALS._v56605[3 + i] == 16) + --R2_GLOBALS._v56605[3 + i]; + break; + case 6: + if (R2_GLOBALS._v56605[3 + i] == 19) + ++R2_GLOBALS._v56605[3 + i]; + else if (R2_GLOBALS._v56605[3 + i] == 22) + --R2_GLOBALS._v56605[3 + i]; + break; + case 8: + if (R2_GLOBALS._v56605[3 + i] == 23) + ++R2_GLOBALS._v56605[3 + i]; + else if (R2_GLOBALS._v56605[3 + i] == 27) + --R2_GLOBALS._v56605[3 + i]; + break; + default: + break; + } + switch (R2_GLOBALS._v56605[3 + i] - 1) { + case 0: + case 6: + case 13: + case 18: + case 22: + case 27: + case 30: + _objList1[i].setPosition(Common::Point(265, 127)); + break; + case 5: + case 12: + case 17: + case 21: + case 26: + _objList1[i].setPosition(Common::Point(55, 127)); + break; + default: + _objList1[i].setPosition(Common::Point(160, 127)); + break; + } + } + _objList1[1].setAction(&_action2); + _objList1[3].setAction(&_action5); + _objList1[5].setAction(&_action4); + _objList1[8].setAction(&_action1); + + warning("STUB: sub_D2FBA"); + + _item1.setDetails(Rect(0, 0, 320, 200), 2000, 0, -1, 23, 1, NULL); +} + +void Scene2000::remove() { + R2_GLOBALS._sound1.fadeOut(NULL); + SceneExt::remove(); +} + +void Scene2000::signal() { + switch (_sceneMode) { + case 10: + if (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] == 6) + g_globals->_sceneManager.changeScene(1900); + else { + _field414 = 1; + --R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]; + warning("STUB: sub_D2676"); + warning("STUB: sub_D2FBA"); + } + break; + case 11: + switch (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) { + case 5: + g_globals->_sceneManager.changeScene(1900); + break; + case 30: + g_globals->_sceneManager.changeScene(2500); + break; + case 34: + g_globals->_sceneManager.changeScene(2350); + break; + default: + _field414 = 2; + ++R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]; + warning("STUB: sub_D2676"); + warning("STUB: sub_D2FBA"); + break; + } + break; + case 12: + case 13: + warning("STUB: sub_D2676"); + warning("STUB: sub_D2FBA"); + break; + case 14: + switch (_field414 - 1) { + case 0: + g_globals->_sceneManager.changeScene(2450); + break; + case 1: + g_globals->_sceneManager.changeScene(2440); + break; + case 2: + g_globals->_sceneManager.changeScene(2435); + break; + case 3: + g_globals->_sceneManager.changeScene(2430); + break; + case 4: + g_globals->_sceneManager.changeScene(2425); + break; + case 5: + g_globals->_sceneManager.changeScene(2525); + break; + case 6: + g_globals->_sceneManager.changeScene(2530); + break; + case 7: + g_globals->_sceneManager.changeScene(2535); + break; + default: + break; + } + break; + case 2039: + case 2041: + g_globals->_sceneManager.changeScene(2350); + break; + default: + break; + } +} + +void Scene2000::process(Event &event) { + if ((R2_GLOBALS._player._canWalk) && (event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == CURSOR_3)) { + warning("TODO: Check sub_22D26"); + + Common::Point pt(event.mousePos.x, 129); + PlayerMover *mover = new PlayerMover(); + BF_GLOBALS._player.addMover(mover, &pt, this); + + event.handled = true; + } + Scene::process(event); +} + +void Scene2000::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field412); + s.syncAsSint16LE(_field414); +} + + +} // End of namespace Ringworld2 +} // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h new file mode 100644 index 0000000000..6f57db5943 --- /dev/null +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -0,0 +1,88 @@ +/* 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 TSAGE_RINGWORLD2_SCENES2_H +#define TSAGE_RINGWORLD2_SCENES2_H + +#include "common/scummsys.h" +#include "tsage/converse.h" +#include "tsage/events.h" +#include "tsage/core.h" +#include "tsage/scenes.h" +#include "tsage/globals.h" +#include "tsage/sound.h" +#include "tsage/ringworld2/ringworld2_logic.h" + +namespace TsAGE { + +namespace Ringworld2 { + +using namespace TsAGE; + +class Scene2000: public SceneExt { + class Action1 : public ActionExt { + public: + virtual void signal(); + }; + + class Exit1 : public SceneExit { + virtual void changeScene(); + }; + class Exit2 : public SceneExit { + virtual void changeScene(); + }; + class Exit3 : public SceneExit { + virtual void changeScene(); + }; + class Exit4 : public SceneExit { + virtual void changeScene(); + }; + class Exit5 : public SceneExit { + virtual void changeScene(); + }; +public: + int _field412; + int _field414; + + NamedHotspot _item1; + SceneActor _object1; + SceneActor _objList1[11]; + Exit1 _exit1; + Exit2 _exit2; + Exit3 _exit3; + Exit4 _exit4; + Exit5 _exit5; + Action1 _action1, _action2, _action3, _action4, _action5; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); + virtual void process(Event &event); + virtual void synchronize(Serializer &s); +}; + + +} // End of namespace Ringworld2 +} // End of namespace TsAGE + +#endif |