Skip to content

Commit

Permalink
TSAGE: Added framework for playing the Ringworld demo
Browse files Browse the repository at this point in the history
  • Loading branch information
dreammaster committed Apr 25, 2011
1 parent d014227 commit c686415
Show file tree
Hide file tree
Showing 21 changed files with 729 additions and 523 deletions.
228 changes: 8 additions & 220 deletions engines/tsage/core.cpp
Expand Up @@ -24,10 +24,7 @@
*/

#include "common/system.h"
#include "common/config-manager.h"
#include "common/translation.h"
#include "engines/engine.h"
#include "gui/saveload.h"
#include "tsage/tsage.h"
#include "tsage/core.h"
#include "tsage/dialogs.h"
Expand Down Expand Up @@ -71,76 +68,7 @@ void InvObject::setCursor() {

/*--------------------------------------------------------------------------*/

InvObjectList::InvObjectList() :
_stunner(2280, 1, 2, OBJECT_STUNNER, "This is your stunner."),
_scanner(1, 1, 3, OBJECT_SCANNER, "A combination scanner comm unit."),
_stasisBox(5200, 1, 4, OBJECT_STASIS_BOX, "A stasis box."),
_infoDisk(40, 1, 1, OBJECT_INFODISK, "The infodisk you took from the assassin."),
_stasisNegator(0, 2, 2, OBJECT_STASIS_NEGATOR, "The stasis field negator."),
_keyDevice(4250, 1, 6, OBJECT_KEY_DEVICE, "A magnetic key device."),
_medkit(2280, 1, 7, OBJECT_MEDKIT, "Your medkit."),
_ladder(4100, 1, 8, OBJECT_LADDER, "The chief's ladder."),
_rope(4150, 1, 9, OBJECT_ROPE, "The chief's rope."),
_key(7700, 1, 11, OBJECT_KEY, "A key."),
_translator(7700, 1, 13, OBJECT_TRANSLATOR, "The dolphin translator box."),
_ale(2150, 1, 10, OBJECT_ALE, "A bottle of ale."),
_paper(7700, 1, 12, OBJECT_PAPER, "A slip of paper with the numbers 2,4, and 3 written on it."),
_waldos(0, 1, 14, OBJECT_WALDOS, "A pair of waldos from the ruined probe."),
_stasisBox2(8100, 1, 4, OBJECT_STASIS_BOX2, "A stasis box."),
_ring(8100, 2, 5, OBJECT_RING, "This is a signet ring sent to you by Louis Wu."),
_cloak(9850, 2, 6, OBJECT_CLOAK, "A fine silk cloak."),
_tunic(9450, 2, 7, OBJECT_TUNIC, "The patriarch's soiled tunic."),
_candle(9500, 2, 8, OBJECT_CANDLE, "A tallow candle."),
_straw(9400, 2, 9, OBJECT_STRAW, "Clean, dry straw."),
_scimitar(9850, 1, 18, OBJECT_SCIMITAR, "A scimitar from the Patriarch's closet."),
_sword(9850, 1, 17, OBJECT_SWORD, "A short sword from the Patriarch's closet."),
_helmet(9500, 2, 4, OBJECT_HELMET, "Some type of helmet."),
_items(4300, 2, 10, OBJECT_ITEMS, "Two interesting items from the Tnuctipun vessel."),
_concentrator(4300, 2, 11, OBJECT_CONCENTRATOR, "The Tnuctipun anti-matter concentrator contained in a stasis field."),
_nullifier(5200, 2, 12, OBJECT_NULLIFIER, "A purported neural wave nullifier."),
_peg(4045, 2, 16, OBJECT_PEG, "A peg with a symbol."),
_vial(5100, 2, 17, OBJECT_VIAL, "A vial of the bat creatures anti-pheromone drug."),
_jacket(9850, 3, 1, OBJECT_JACKET, "A natty padded jacket."),
_tunic2(9850, 3, 2, OBJECT_TUNIC2, "A very hairy tunic."),
_bone(5300, 3, 5, OBJECT_BONE, "A very sharp bone."),
_jar(7700, 3, 4, OBJECT_JAR, "An jar filled with a green substance."),
_emptyJar(7700, 3, 3, OBJECT_EMPTY_JAR, "An empty jar.") {

// Add the items to the list
_itemList.push_back(&_stunner);
_itemList.push_back(&_scanner);
_itemList.push_back(&_stasisBox);
_itemList.push_back(&_infoDisk);
_itemList.push_back(&_stasisNegator);
_itemList.push_back(&_keyDevice);
_itemList.push_back(&_medkit);
_itemList.push_back(&_ladder);
_itemList.push_back(&_rope);
_itemList.push_back(&_key);
_itemList.push_back(&_translator);
_itemList.push_back(&_ale);
_itemList.push_back(&_paper);
_itemList.push_back(&_waldos);
_itemList.push_back(&_stasisBox2);
_itemList.push_back(&_ring);
_itemList.push_back(&_cloak);
_itemList.push_back(&_tunic);
_itemList.push_back(&_candle);
_itemList.push_back(&_straw);
_itemList.push_back(&_scimitar);
_itemList.push_back(&_sword);
_itemList.push_back(&_helmet);
_itemList.push_back(&_items);
_itemList.push_back(&_concentrator);
_itemList.push_back(&_nullifier);
_itemList.push_back(&_peg);
_itemList.push_back(&_vial);
_itemList.push_back(&_jacket);
_itemList.push_back(&_tunic2);
_itemList.push_back(&_bone);
_itemList.push_back(&_jar);
_itemList.push_back(&_emptyJar);

InvObjectList::InvObjectList() {
_selectedItem = NULL;
}

Expand Down Expand Up @@ -3376,7 +3304,7 @@ GameHandler::GameHandler() : EventHandler() {

GameHandler::~GameHandler() {
if (_globals)
_globals->_game.removeHandler(this);
_globals->_game->removeHandler(this);
}

void GameHandler::execute() {
Expand All @@ -3402,7 +3330,7 @@ SceneHandler::SceneHandler() {

void SceneHandler::registerHandler() {
postInit();
_globals->_game.addHandler(this);
_globals->_game->addHandler(this);
}

void SceneHandler::postInit(SceneObjectList *OwnerList) {
Expand All @@ -3414,21 +3342,7 @@ void SceneHandler::postInit(SceneObjectList *OwnerList) {
// TODO: Bunch of other scene related setup goes here
_globals->_soundManager.postInit();

// Set some default flags and cursor
_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;

// Set the object's that will be in the player's inventory by default
_globals->_inventory._stunner._sceneNumber = 1;
_globals->_inventory._scanner._sceneNumber = 1;
_globals->_inventory._ring._sceneNumber = 1;

// Switch to the title screen
_globals->_sceneManager.setNewScene(1000);
_globals->_game->start();
}

void SceneHandler::process(Event &event) {
Expand All @@ -3452,19 +3366,19 @@ void SceneHandler::process(Event &event) {

case Common::KEYCODE_F3:
// F3 - Quit
_globals->_game.quitGame();
_globals->_game->quitGame();
event.handled = false;
break;

case Common::KEYCODE_F4:
// F4 - Restart
_globals->_game.restartGame();
_globals->_game->restartGame();
_globals->_events.setCursorFromFlag();
break;

case Common::KEYCODE_F7:
// F7 - Restore
_globals->_game.restoreGame();
_globals->_game->restoreGame();
_globals->_events.setCursorFromFlag();
break;

Expand Down Expand Up @@ -3501,7 +3415,7 @@ void SceneHandler::process(Event &event) {
// Separate check for F5 - Save key
if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_F5)) {
// F5 - Save
_globals->_game.saveGame();
_globals->_game->saveGame();
event.handled = true;
_globals->_events.setCursorFromFlag();
}
Expand Down Expand Up @@ -3618,130 +3532,4 @@ void Game::execute() {
} while (activeFlag && !_vm->getEventManager()->shouldQuit());
}

void Game::restartGame() {
if (MessageDialog::show(RESTART_MSG, CANCEL_BTN_STRING, RESTART_BTN_STRING) == 1)
_globals->_game.restart();
}

void Game::saveGame() {
if (_globals->getFlag(50))
MessageDialog::show(SAVING_NOT_ALLOWED_MSG, OK_BTN_STRING);
else {
// Show the save dialog
handleSaveLoad(true, _globals->_sceneHandler._saveGameSlot, _globals->_sceneHandler._saveName);
}
}

void Game::restoreGame() {
if (_globals->getFlag(50))
MessageDialog::show(RESTORING_NOT_ALLOWED_MSG, OK_BTN_STRING);
else {
// Show the load dialog
handleSaveLoad(false, _globals->_sceneHandler._loadGameSlot, _globals->_sceneHandler._saveName);
}
}

void Game::quitGame() {
if (MessageDialog::show(QUIT_CONFIRM_MSG, CANCEL_BTN_STRING, QUIT_BTN_STRING) == 1)
_vm->quitGame();
}

void Game::handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName) {
const EnginePlugin *plugin = 0;
EngineMan.findGame(_vm->getGameId(), &plugin);
GUI::SaveLoadChooser *dialog;
if (saveFlag)
dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"));
else
dialog = new GUI::SaveLoadChooser(_("Load game:"), _("Load"));

dialog->setSaveMode(saveFlag);

saveSlot = dialog->runModalWithPluginAndTarget(plugin, ConfMan.getActiveDomainName());
saveName = dialog->getResultString();

delete dialog;
}

void Game::restart() {
_globals->_scenePalette.clearListeners();
_globals->_soundHandler.proc3();

// Reset the flags
_globals->reset();
_globals->setFlag(34);

// Clear save/load slots
_globals->_sceneHandler._saveGameSlot = -1;
_globals->_sceneHandler._loadGameSlot = -1;

_globals->_stripNum = 0;
_globals->_events.setCursor(CURSOR_WALK);

// Reset item properties
_globals->_inventory._stunner._sceneNumber = 1;
_globals->_inventory._scanner._sceneNumber = 1;
_globals->_inventory._stasisBox._sceneNumber = 5200;
_globals->_inventory._infoDisk._sceneNumber = 40;
_globals->_inventory._stasisNegator._sceneNumber = 0;
_globals->_inventory._keyDevice._sceneNumber = 0;
_globals->_inventory._medkit._sceneNumber = 2280;
_globals->_inventory._ladder._sceneNumber = 4100;
_globals->_inventory._rope._sceneNumber = 4150;
_globals->_inventory._key._sceneNumber = 7700;
_globals->_inventory._translator._sceneNumber = 2150;
_globals->_inventory._paper._sceneNumber = 7700;
_globals->_inventory._waldos._sceneNumber = 0;
_globals->_inventory._ring._sceneNumber = 1;
_globals->_inventory._stasisBox2._sceneNumber = 8100;
_globals->_inventory._cloak._sceneNumber = 9850;
_globals->_inventory._tunic._sceneNumber = 9450;
_globals->_inventory._candle._sceneNumber = 9500;
_globals->_inventory._straw._sceneNumber = 9400;
_globals->_inventory._scimitar._sceneNumber = 9850;
_globals->_inventory._sword._sceneNumber = 9850;
_globals->_inventory._helmet._sceneNumber = 9500;
_globals->_inventory._items._sceneNumber = 4300;
_globals->_inventory._concentrator._sceneNumber = 4300;
_globals->_inventory._nullifier._sceneNumber = 4300;
_globals->_inventory._peg._sceneNumber = 4045;
_globals->_inventory._vial._sceneNumber = 5100;
_globals->_inventory._jacket._sceneNumber = 9850;
_globals->_inventory._tunic2._sceneNumber = 9850;
_globals->_inventory._bone._sceneNumber = 5300;
_globals->_inventory._jar._sceneNumber = 7700;
_globals->_inventory._emptyJar._sceneNumber = 7700;
_globals->_inventory._selectedItem = NULL;

// Change to the first game scene
_globals->_sceneManager.changeScene(30);
}

void Game::endGame(int resNum, int lineNum) {
_globals->_events.setCursor(CURSOR_WALK);
Common::String msg = _resourceManager->getMessage(resNum, lineNum);
bool savesExist = _saver->savegamesExist();

if (!savesExist) {
// No savegames exist, so prompt the user to restart or quit
if (MessageDialog::show(msg, QUIT_BTN_STRING, RESTART_BTN_STRING) == 0)
_vm->quitGame();
else
restart();
} else {
// Savegames exist, so prompt for Restore/Restart
bool breakFlag;
do {
if (MessageDialog::show(msg, RESTART_BTN_STRING, RESTORE_BTN_STRING) == 0) {
breakFlag = true;
} else {
handleSaveLoad(false, _globals->_sceneHandler._loadGameSlot, _globals->_sceneHandler._saveName);
breakFlag = _globals->_sceneHandler._loadGameSlot > 0;
}
} while (!breakFlag);
}

_globals->_events.setCursorFromFlag();
}

} // End of namespace tSage
53 changes: 10 additions & 43 deletions engines/tsage/core.h
Expand Up @@ -73,43 +73,9 @@ class InvObject : public SavedObject {

class InvObjectList : public SavedObject {
public:
InvObject _stunner;
InvObject _scanner;
InvObject _stasisBox;
InvObject _infoDisk;
InvObject _stasisNegator;
InvObject _keyDevice;
InvObject _medkit;
InvObject _ladder;
InvObject _rope;
InvObject _key;
InvObject _translator;
InvObject _ale;
InvObject _paper;
InvObject _waldos;
InvObject _stasisBox2;
InvObject _ring;
InvObject _cloak;
InvObject _tunic;
InvObject _candle;
InvObject _straw;
InvObject _scimitar;
InvObject _sword;
InvObject _helmet;
InvObject _items;
InvObject _concentrator;
InvObject _nullifier;
InvObject _peg;
InvObject _vial;
InvObject _jacket;
InvObject _tunic2;
InvObject _bone;
InvObject _jar;
InvObject _emptyJar;

SynchronisedList<InvObject *> _itemList;
InvObject *_selectedItem;
public:

InvObjectList();

virtual Common::String getClassName() { return "InvObjectList"; }
Expand Down Expand Up @@ -942,22 +908,23 @@ class SceneHandler : public GameHandler {
/*--------------------------------------------------------------------------*/

class Game {
private:
protected:
SynchronisedList<GameHandler *> _handlers;

static bool notLockedFn(GameHandler *g);
void restart();
void handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName);
virtual void handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName) {}
public:
void addHandler(GameHandler *entry) { _handlers.push_back(entry); }
void removeHandler(GameHandler *entry) { _handlers.remove(entry); }

void execute();
void restartGame();
void saveGame();
void restoreGame();
void quitGame();
void endGame(int resNum, int lineNum);
virtual void start() = 0;
virtual void restart() {}
virtual void restartGame() {}
virtual void saveGame() {}
virtual void restoreGame() {}
virtual void quitGame() {}
virtual void endGame(int resNum, int lineNum) {}
};

} // End of namespace tSage
Expand Down

0 comments on commit c686415

Please sign in to comment.