diff options
Diffstat (limited to 'engines/tsage/ringworld_logic.cpp')
-rw-r--r-- | engines/tsage/ringworld_logic.cpp | 150 |
1 files changed, 105 insertions, 45 deletions
diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index c0cfe3a938..95c9da9fe7 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -18,9 +18,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * $URL$ - * $Id$ - * */ #include "common/config-manager.h" @@ -42,10 +39,7 @@ namespace tSage { -Scene *SceneFactory::createScene(int sceneNumber) { - if (_vm->getFeatures() & GF_DEMO) - return new RingworldDemoScene(); - +Scene *RingworldGame::createScene(int sceneNumber) { switch (sceneNumber) { /* Scene group 1 */ // Kziniti Palace (Introduction) @@ -307,7 +301,7 @@ void SceneArea::wait() { g_system->delayMillis(10); } - SynchronisedList<SceneItem *>::iterator ii; + SynchronizedList<SceneItem *>::iterator ii; for (ii = _globals->_sceneItems.begin(); ii != _globals->_sceneItems.end(); ++ii) { SceneItem *sceneItem = *ii; if (sceneItem->contains(event.mousePos)) { @@ -319,14 +313,17 @@ void SceneArea::wait() { _globals->_events.setCursor(CURSOR_ARROW); } -void SceneArea::synchronise(Serialiser &s) { +void SceneArea::synchronize(Serializer &s) { + if (s.getVersion() >= 2) + SavedObject::synchronize(s); + s.syncAsSint16LE(_pt.x); s.syncAsSint16LE(_pt.y); s.syncAsSint32LE(_resNum); s.syncAsSint32LE(_rlbNum); s.syncAsSint32LE(_subNum); s.syncAsSint32LE(_actionId); - _bounds.synchronise(s); + _bounds.synchronize(s); } /*--------------------------------------------------------------------------*/ @@ -393,18 +390,18 @@ void SpeakerPOR::setText(const Common::String &msg) { _object1.postInit(&_objectList); _object1.setVisage(7223); _object1.setStrip2(2); - _object1.setPosition(Common::Point(191, 166), 0); - _object1.animate(ANIM_MODE_7, 0, 0); + _object1.setPosition(Common::Point(191, 166)); + _object1.animate(ANIM_MODE_7, 0, NULL); _object2.postInit(&_objectList); _object2.setVisage(7223); - _object2.setPosition(Common::Point(159, 86), 0); - _object2.setAction(&_speakerAction, 0); + _object2.setPosition(Common::Point(159, 86)); + _object2.setAction(&_speakerAction, NULL); _object3.postInit(&_objectList); _object3.setVisage(7223); _object3.setStrip(3); - _object3.setPosition(Common::Point(119, 107), 0); + _object3.setPosition(Common::Point(119, 107)); _object3.fixPriority(199); _object3.setAction(&_action2); @@ -428,8 +425,8 @@ void SpeakerOR::setText(const Common::String &msg) { _object1.fixPriority(255); _object1.changeZoom(100); _object1._frame = 1; - _object1.setPosition(Common::Point(202, 147), 0); - _object1.animate(ANIM_MODE_7, 0, 0); + _object1.setPosition(Common::Point(202, 147)); + _object1.animate(ANIM_MODE_7, 0, NULL); _object2.postInit(&_objectList); _object2.setVisage(9431); @@ -437,8 +434,8 @@ void SpeakerOR::setText(const Common::String &msg) { _object2.fixPriority(255); _object2.setZoom(100); _object2._frame = 1; - _object2.setPosition(Common::Point(199, 85), 0); - _object2.setAction(&_speakerAction, 0); + _object2.setPosition(Common::Point(199, 85)); + _object2.setAction(&_speakerAction, NULL); Speaker::setText(msg); } @@ -515,7 +512,7 @@ SpeakerEText::SpeakerEText() { /*--------------------------------------------------------------------------*/ -SpeakerGR::SpeakerGR() { +SpeakerGR::SpeakerGR() : AnimatedSpeaker() { _speakerName = "GR"; _newSceneNumber = 9220; _textWidth = 136; @@ -523,6 +520,19 @@ SpeakerGR::SpeakerGR() { _color1 = 14; } +void SpeakerGR::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(9221); + _object1.setStrip2(2); + _object1.fixPriority(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(101, 70)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + Speaker::setText(msg); +} + /*--------------------------------------------------------------------------*/ SpeakerHText::SpeakerHText() { @@ -538,7 +548,7 @@ SpeakerSKText::SpeakerSKText() : ScreenSpeaker() { _speakerName = "SKTEXT"; _textWidth = 240; _textMode = ALIGN_CENTER; - _color1 = 5; + _color1 = 9; _hideObjects = false; } @@ -597,16 +607,16 @@ SpeakerSKL::SpeakerSKL() : AnimatedSpeaker() { _speakerName = "SKL"; _newSceneNumber = 7011; _textPos = Common::Point(10, 30); - _color1 = 10; + _color1 = 9; } void SpeakerSKL::setText(const Common::String &msg) { _object1.postInit(&_objectList); _object1.setVisage(7013); _object1.setStrip2(2); - _object1._frame = 1; _object1.fixPriority(255); _object1.changeZoom(100); + _object1._frame = 1; _object1.setPosition(Common::Point(203, 120)); _object1.animate(ANIM_MODE_7, 0, NULL); @@ -657,6 +667,7 @@ void SpeakerQL::setText(const Common::String &msg) { /*--------------------------------------------------------------------------*/ SpeakerSR::SpeakerSR() { + // TODO: check initialization of object3 _speakerName = "SR"; _newSceneNumber = 2811; _textPos = Common::Point(10, 30); @@ -733,7 +744,7 @@ SpeakerQR::SpeakerQR() { _speakerName = "QR"; _newSceneNumber = 2611; _textPos = Common::Point(10, 30); - _color1 = 13; + _color1 = 35; _textMode = ALIGN_CENTER; } @@ -776,8 +787,8 @@ void SpeakerQU::setText(const Common::String &msg) { _object1.fixPriority(255); _object1.changeZoom(100); _object1._frame = 1; - _object1.setPosition(Common::Point(116, 120), 0); - _object1.animate(ANIM_MODE_7, 0, 0); + _object1.setPosition(Common::Point(116, 120)); + _object1.animate(ANIM_MODE_7, 0, NULL); _object2.postInit(&_objectList); _object2.setVisage(7021); @@ -785,8 +796,8 @@ void SpeakerQU::setText(const Common::String &msg) { _object2.fixPriority(255); _object2.changeZoom(100); _object2._frame = 1; - _object2.setPosition(Common::Point(111, 84), 0); - _object2.setAction(&_speakerAction, 0); + _object2.setPosition(Common::Point(111, 84)); + _object2.setAction(&_speakerAction, NULL); Speaker::setText(msg); } @@ -823,7 +834,7 @@ void SpeakerCR::setText(const Common::String &msg) { SpeakerMR::SpeakerMR() { _speakerName = "MR"; _newSceneNumber = 2711; - _textPos = Common::Point(40, 10); + _textPos = Common::Point(10, 40); _color1 = 22; } @@ -841,6 +852,7 @@ void SpeakerMR::setText(const Common::String &msg) { _object2.setVisage(2713); _object2.setStrip2(1); _object2.fixPriority(255); + _object2.changeZoom(100); _object2._frame = 1; _object2.setPosition(Common::Point(215, 99)); _object2.setAction(&_speakerAction, NULL); @@ -872,6 +884,7 @@ void SpeakerSAL::setText(const Common::String &msg) { _object2.setVisage(2853); _object2.setStrip2(1); _object2.fixPriority(255); + _object2.changeZoom(100); _object2._frame = 1; _object2.setPosition(Common::Point(170, 92)); _object2.setAction(&_speakerAction, NULL); @@ -902,6 +915,7 @@ void SpeakerML::setText(const Common::String &msg) { _object2.setVisage(2712); _object2.setStrip2(1); _object2.fixPriority(255); + _object2.changeZoom(100); _object2._frame = 1; _object2.setPosition(Common::Point(105, 99)); _object2.setAction(&_speakerAction, NULL); @@ -932,6 +946,7 @@ void SpeakerCHFL::setText(const Common::String &msg) { _object2.setVisage(4113); _object2.setStrip2(1); _object2.fixPriority(255); + _object2.changeZoom(100); _object2._frame = 1; _object2.setPosition(Common::Point(202, 71)); _object2.setAction(&_speakerAction, NULL); @@ -962,6 +977,7 @@ void SpeakerCHFR::setText(const Common::String &msg) { _object2.setVisage(4112); _object2.setStrip2(1); _object2.fixPriority(255); + _object2.changeZoom(100); _object2._frame = 1; _object2.setPosition(Common::Point(106, 71)); _object2.setAction(&_speakerAction, NULL); @@ -992,6 +1008,7 @@ void SpeakerPL::setText(const Common::String &msg) { _object2.setVisage(4062); _object2.setStrip2(1); _object2.fixPriority(200); + _object2.changeZoom(100); _object2._frame = 1; _object2.setPosition(Common::Point(105, 62)); _object2.setAction(&_speakerAction, NULL); @@ -1000,6 +1017,7 @@ void SpeakerPL::setText(const Common::String &msg) { _object3.setVisage(4062); _object3.setStrip2(3); _object3.fixPriority(255); + _object3.changeZoom(100); _object3._frame = 1; _object3.setPosition(Common::Point(105, 59)); _object3.setAction(&_speakerAction2, NULL); @@ -1264,7 +1282,7 @@ void RingworldGame::restartGame() { } void RingworldGame::saveGame() { - if (_globals->getFlag(50)) + if (!_vm->canSaveGameStateCurrently()) MessageDialog::show(SAVING_NOT_ALLOWED_MSG, OK_BTN_STRING); else { // Show the save dialog @@ -1273,7 +1291,7 @@ void RingworldGame::saveGame() { } void RingworldGame::restoreGame() { - if (_globals->getFlag(50)) + if (!_vm->canLoadGameStateCurrently()) MessageDialog::show(RESTORING_NOT_ALLOWED_MSG, OK_BTN_STRING); else { // Show the load dialog @@ -1304,10 +1322,9 @@ void RingworldGame::handleSaveLoad(bool saveFlag, int &saveSlot, Common::String } void RingworldGame::start() { - // Set some default flags and cursor + // Set some default flags _globals->setFlag(12); _globals->setFlag(34); - _globals->_events.setCursor(CURSOR_WALK); // Set the screen to scroll in response to the player moving off-screen _globals->_scrollFollower = &_globals->_player; @@ -1317,8 +1334,12 @@ void RingworldGame::start() { RING_INVENTORY._scanner._sceneNumber = 1; RING_INVENTORY._ring._sceneNumber = 1; - // Switch to the title screen - _globals->_sceneManager.setNewScene(1000); + + if (ConfMan.hasKey("save_slot")) + _globals->_sceneHandler._loadGameSlot = ConfMan.getInt("save_slot"); + else + // Switch to the title screen + _globals->_sceneManager.setNewScene(1000); _globals->_events.showCursor(); } @@ -1392,11 +1413,14 @@ void RingworldGame::endGame(int resNum, int lineNum) { // Savegames exist, so prompt for Restore/Restart bool breakFlag; do { - if (MessageDialog::show(msg, RESTART_BTN_STRING, RESTORE_BTN_STRING) == 0) { + if (_vm->shouldQuit()) { + breakFlag = true; + } else if (MessageDialog::show(msg, RESTART_BTN_STRING, RESTORE_BTN_STRING) == 0) { + restart(); breakFlag = true; } else { handleSaveLoad(false, _globals->_sceneHandler._loadGameSlot, _globals->_sceneHandler._saveName); - breakFlag = _globals->_sceneHandler._loadGameSlot > 0; + breakFlag = _globals->_sceneHandler._loadGameSlot >= 0; } } while (!breakFlag); } @@ -1404,16 +1428,52 @@ void RingworldGame::endGame(int resNum, int lineNum) { _globals->_events.setCursorFromFlag(); } -/*--------------------------------------------------------------------------*/ +void RingworldGame::processEvent(Event &event) { + if (event.eventType == EVENT_KEYPRESS) { + switch (event.kbd.keycode) { + case Common::KEYCODE_F1: + // F1 - Help + MessageDialog::show(HELP_MSG, OK_BTN_STRING); + break; -void RingworldDemoGame::start() { - // Start the demo's single scene - _globals->_sceneManager.changeScene(1); - - _globals->_events.setCursor(CURSOR_NONE); -} + case Common::KEYCODE_F2: { + // F2 - Sound Options + ConfigDialog *dlg = new ConfigDialog(); + dlg->runModal(); + delete dlg; + _globals->_events.setCursorFromFlag(); + break; + } + + case Common::KEYCODE_F3: + // F3 - Quit + quitGame(); + event.handled = false; + break; -void RingworldDemoGame::restart() { + case Common::KEYCODE_F4: + // F4 - Restart + restartGame(); + _globals->_events.setCursorFromFlag(); + break; + + case Common::KEYCODE_F7: + // F7 - Restore + restoreGame(); + _globals->_events.setCursorFromFlag(); + break; + + case Common::KEYCODE_F10: + // F10 - Pause + GfxDialog::setPalette(); + MessageDialog::show(GAME_PAUSED_MSG, OK_BTN_STRING); + _globals->_events.setCursorFromFlag(); + break; + + default: + break; + } + } } } // End of namespace tSage |