aboutsummaryrefslogtreecommitdiff
path: root/engines/tsage/ringworld_logic.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/tsage/ringworld_logic.cpp')
-rw-r--r--engines/tsage/ringworld_logic.cpp150
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