[Scummvm-cvs-logs] scummvm master -> c68641584b8fb45d53307040f0b18d39fe42cf24

dreammaster dreammaster at scummvm.org
Mon Apr 25 11:41:24 CEST 2011


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
c68641584b TSAGE: Added framework for playing the Ringworld demo


Commit: c68641584b8fb45d53307040f0b18d39fe42cf24
    https://github.com/scummvm/scummvm/commit/c68641584b8fb45d53307040f0b18d39fe42cf24
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2011-04-25T02:39:45-07:00

Commit Message:
TSAGE: Added framework for playing the Ringworld demo

Changed paths:
  A engines/tsage/ringworld_demo.cpp
  A engines/tsage/ringworld_demo.h
    engines/tsage/core.cpp
    engines/tsage/core.h
    engines/tsage/debugger.cpp
    engines/tsage/detection.cpp
    engines/tsage/detection_tables.h
    engines/tsage/dialogs.cpp
    engines/tsage/globals.cpp
    engines/tsage/globals.h
    engines/tsage/graphics.cpp
    engines/tsage/ringworld_logic.cpp
    engines/tsage/ringworld_logic.h
    engines/tsage/ringworld_scenes1.cpp
    engines/tsage/ringworld_scenes10.cpp
    engines/tsage/ringworld_scenes3.cpp
    engines/tsage/ringworld_scenes5.cpp
    engines/tsage/ringworld_scenes6.cpp
    engines/tsage/ringworld_scenes8.cpp
    engines/tsage/tsage.cpp
    engines/tsage/tsage.h



diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp
index 5aa33b5..776e449 100644
--- a/engines/tsage/core.cpp
+++ b/engines/tsage/core.cpp
@@ -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"
@@ -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;
 }
 
@@ -3376,7 +3304,7 @@ GameHandler::GameHandler() : EventHandler() {
 
 GameHandler::~GameHandler() {
 	if (_globals)
-		_globals->_game.removeHandler(this);
+		_globals->_game->removeHandler(this);
 }
 
 void GameHandler::execute() {
@@ -3402,7 +3330,7 @@ SceneHandler::SceneHandler() {
 
 void SceneHandler::registerHandler() {
 	postInit();
-	_globals->_game.addHandler(this);
+	_globals->_game->addHandler(this);
 }
 
 void SceneHandler::postInit(SceneObjectList *OwnerList) {
@@ -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) {
@@ -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;
 
@@ -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();
 		}
@@ -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
diff --git a/engines/tsage/core.h b/engines/tsage/core.h
index c18984f..51af41e 100644
--- a/engines/tsage/core.h
+++ b/engines/tsage/core.h
@@ -73,43 +73,9 @@ public:
 
 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"; }
@@ -942,22 +908,23 @@ public:
 /*--------------------------------------------------------------------------*/
 
 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
diff --git a/engines/tsage/debugger.cpp b/engines/tsage/debugger.cpp
index ad4e76f..e8f0215 100644
--- a/engines/tsage/debugger.cpp
+++ b/engines/tsage/debugger.cpp
@@ -28,7 +28,7 @@
 #include "common/endian.h"
 #include "tsage/globals.h"
 #include "tsage/graphics.h"
-
+#include "tsage/ringworld_logic.h"
 
 namespace tSage {
 
@@ -276,103 +276,103 @@ bool Debugger::Cmd_MoveObject(int argc, const char **argv) {
 
 	switch (objNum) {
 	case OBJECT_STUNNER:
-		_globals->_inventory._stunner._sceneNumber = sceneNum;
+		RING_INVENTORY._stunner._sceneNumber = sceneNum;
 		break;
 	case OBJECT_SCANNER:
-		_globals->_inventory._scanner._sceneNumber = sceneNum;
+		RING_INVENTORY._scanner._sceneNumber = sceneNum;
 		break;
 	case OBJECT_STASIS_BOX:
-		_globals->_inventory._stasisBox._sceneNumber = sceneNum;
+		RING_INVENTORY._stasisBox._sceneNumber = sceneNum;
 		break;
 	case OBJECT_INFODISK:
-		_globals->_inventory._infoDisk._sceneNumber = sceneNum;
+		RING_INVENTORY._infoDisk._sceneNumber = sceneNum;
 		break;
 	case OBJECT_STASIS_NEGATOR:
-		_globals->_inventory._stasisNegator._sceneNumber = sceneNum;
+		RING_INVENTORY._stasisNegator._sceneNumber = sceneNum;
 		break;
 	case OBJECT_KEY_DEVICE:
-		_globals->_inventory._keyDevice._sceneNumber = sceneNum;
+		RING_INVENTORY._keyDevice._sceneNumber = sceneNum;
 		break;
 	case OBJECT_MEDKIT:
-		_globals->_inventory._medkit._sceneNumber = sceneNum;
+		RING_INVENTORY._medkit._sceneNumber = sceneNum;
 		break;
 	case OBJECT_LADDER:
-		_globals->_inventory._ladder._sceneNumber = sceneNum;
+		RING_INVENTORY._ladder._sceneNumber = sceneNum;
 		break;
 	case OBJECT_ROPE:
-		_globals->_inventory._rope._sceneNumber = sceneNum;
+		RING_INVENTORY._rope._sceneNumber = sceneNum;
 		break;
 	case OBJECT_KEY:
-		_globals->_inventory._key._sceneNumber = sceneNum;
+		RING_INVENTORY._key._sceneNumber = sceneNum;
 		break;
 	case OBJECT_TRANSLATOR:
-		_globals->_inventory._translator._sceneNumber = sceneNum;
+		RING_INVENTORY._translator._sceneNumber = sceneNum;
 		break;
 	case OBJECT_ALE:
-		_globals->_inventory._ale._sceneNumber = sceneNum;
+		RING_INVENTORY._ale._sceneNumber = sceneNum;
 		break;
 	case OBJECT_PAPER:
-		_globals->_inventory._paper._sceneNumber = sceneNum;
+		RING_INVENTORY._paper._sceneNumber = sceneNum;
 		break;
 	case OBJECT_WALDOS:
-		_globals->_inventory._waldos._sceneNumber = sceneNum;
+		RING_INVENTORY._waldos._sceneNumber = sceneNum;
 		break;
 	case OBJECT_STASIS_BOX2:
-		_globals->_inventory._stasisBox2._sceneNumber = sceneNum;
+		RING_INVENTORY._stasisBox2._sceneNumber = sceneNum;
 		break;
 	case OBJECT_RING:
-		_globals->_inventory._ring._sceneNumber = sceneNum;
+		RING_INVENTORY._ring._sceneNumber = sceneNum;
 		break;
 	case OBJECT_CLOAK:
-		_globals->_inventory._cloak._sceneNumber = sceneNum;
+		RING_INVENTORY._cloak._sceneNumber = sceneNum;
 		break;
 	case OBJECT_TUNIC:
-		_globals->_inventory._tunic._sceneNumber = sceneNum;
+		RING_INVENTORY._tunic._sceneNumber = sceneNum;
 		break;
 	case OBJECT_CANDLE:
-		_globals->_inventory._candle._sceneNumber = sceneNum;
+		RING_INVENTORY._candle._sceneNumber = sceneNum;
 		break;
 	case OBJECT_STRAW:
-		_globals->_inventory._straw._sceneNumber = sceneNum;
+		RING_INVENTORY._straw._sceneNumber = sceneNum;
 		break;
 	case OBJECT_SCIMITAR:
-		_globals->_inventory._scimitar._sceneNumber = sceneNum;
+		RING_INVENTORY._scimitar._sceneNumber = sceneNum;
 		break;
 	case OBJECT_SWORD:
-		_globals->_inventory._sword._sceneNumber = sceneNum;
+		RING_INVENTORY._sword._sceneNumber = sceneNum;
 		break;
 	case OBJECT_HELMET:
-		_globals->_inventory._helmet._sceneNumber = sceneNum;
+		RING_INVENTORY._helmet._sceneNumber = sceneNum;
 		break;
 	case OBJECT_ITEMS:
-		_globals->_inventory._items._sceneNumber = sceneNum;
+		RING_INVENTORY._items._sceneNumber = sceneNum;
 		break;
 	case OBJECT_CONCENTRATOR:
-		_globals->_inventory._concentrator._sceneNumber = sceneNum;
+		RING_INVENTORY._concentrator._sceneNumber = sceneNum;
 		break;
 	case OBJECT_NULLIFIER:
-		_globals->_inventory._nullifier._sceneNumber = sceneNum;
+		RING_INVENTORY._nullifier._sceneNumber = sceneNum;
 		break;
 	case OBJECT_PEG:
-		_globals->_inventory._peg._sceneNumber = sceneNum;
+		RING_INVENTORY._peg._sceneNumber = sceneNum;
 		break;
 	case OBJECT_VIAL:
-		_globals->_inventory._vial._sceneNumber = sceneNum;
+		RING_INVENTORY._vial._sceneNumber = sceneNum;
 		break;
 	case OBJECT_JACKET:
-		_globals->_inventory._jacket._sceneNumber = sceneNum;
+		RING_INVENTORY._jacket._sceneNumber = sceneNum;
 		break;
 	case OBJECT_TUNIC2:
-		_globals->_inventory._tunic2._sceneNumber = sceneNum;
+		RING_INVENTORY._tunic2._sceneNumber = sceneNum;
 		break;
 	case OBJECT_BONE:
-		_globals->_inventory._bone._sceneNumber = sceneNum;
+		RING_INVENTORY._bone._sceneNumber = sceneNum;
 		break;
 	case OBJECT_EMPTY_JAR:
-		_globals->_inventory._emptyJar._sceneNumber = sceneNum;
+		RING_INVENTORY._emptyJar._sceneNumber = sceneNum;
 		break;
 	case OBJECT_JAR:
-		_globals->_inventory._jar._sceneNumber = sceneNum;
+		RING_INVENTORY._jar._sceneNumber = sceneNum;
 		break;
 	default:
 		DebugPrintf("Invlid object Id %s\n", argv[1]);
@@ -385,7 +385,7 @@ bool Debugger::Cmd_MoveObject(int argc, const char **argv) {
  * Give a specified item to the player
  */
 bool Debugger::Cmd_Item(int argc, const char **argv) {
-	_globals->_inventory._infoDisk._sceneNumber = 1;
+	RING_INVENTORY._infoDisk._sceneNumber = 1;
 	return true;
 }
 
diff --git a/engines/tsage/detection.cpp b/engines/tsage/detection.cpp
index 371166d..5d34037 100644
--- a/engines/tsage/detection.cpp
+++ b/engines/tsage/detection.cpp
@@ -54,6 +54,10 @@ uint32 TSageEngine::getFeatures() const {
 	return _gameDescription->features;
 }
 
+Common::String TSageEngine::getPrimaryFilename() const {
+	return Common::String(_gameDescription->desc.filesDescriptions[0].fileName);
+}
+
 } // End of namespace tSage
 
 static const PlainGameDescriptor tSageGameTitles[] = {
diff --git a/engines/tsage/detection_tables.h b/engines/tsage/detection_tables.h
index 952671b..df3814d 100644
--- a/engines/tsage/detection_tables.h
+++ b/engines/tsage/detection_tables.h
@@ -83,6 +83,20 @@ static const tSageGameDescription gameDescriptions[] = {
 		GType_Ringworld,
 		GF_FLOPPY | GF_DEMO
 	},
+	// Ringworld English Floppy Demo Alt version
+	{
+		{
+			"ring",
+			"Floppy Demo",
+			AD_ENTRY1s("tsage.rlb", "bf4e8525d0cab84b08b57126092eeacd", 833453),
+			Common::EN_ANY,
+			Common::kPlatformPC,
+			ADGF_DEMO,
+			Common::GUIO_NONE
+		},
+		GType_Ringworld,
+		GF_FLOPPY | GF_DEMO
+	},
 
 	// Blue Force
 	{
diff --git a/engines/tsage/dialogs.cpp b/engines/tsage/dialogs.cpp
index c73263c..ba3a11f 100644
--- a/engines/tsage/dialogs.cpp
+++ b/engines/tsage/dialogs.cpp
@@ -31,6 +31,7 @@
 #include "tsage/core.h"
 #include "tsage/staticres.h"
 #include "tsage/globals.h"
+#include "tsage/ringworld_logic.h"
 
 namespace tSage {
 
@@ -383,7 +384,7 @@ void InventoryDialog::show() {
 	// Determine how many items are in the player's inventory
 	int itemCount = 0;
 	SynchronisedList<InvObject *>::iterator i;
-	for (i = _globals->_inventory._itemList.begin(); i != _globals->_inventory._itemList.end(); ++i) {
+	for (i = RING_INVENTORY._itemList.begin(); i != RING_INVENTORY._itemList.end(); ++i) {
 		if ((*i)->inInventory())
 			++itemCount;
 	}
@@ -404,7 +405,7 @@ InventoryDialog::InventoryDialog() {
 	int imgWidth = 0, imgHeight = 0;
 
 	SynchronisedList<InvObject *>::iterator i;
-	for (i = _globals->_inventory._itemList.begin(); i != _globals->_inventory._itemList.end(); ++i) {
+	for (i = RING_INVENTORY._itemList.begin(); i != RING_INVENTORY._itemList.end(); ++i) {
 		InvObject *invObject = *i;
 		if (invObject->inInventory()) {
 			// Get the image for the item
@@ -459,8 +460,8 @@ InventoryDialog::InventoryDialog() {
 }
 
 void InventoryDialog::execute() {
-	if ((_globals->_inventory._selectedItem) && _globals->_inventory._selectedItem->inInventory())
-		_globals->_inventory._selectedItem->setCursor();
+	if ((RING_INVENTORY._selectedItem) && RING_INVENTORY._selectedItem->inInventory())
+		RING_INVENTORY._selectedItem->setCursor();
 
 	GfxElement *hiliteObj;
 	bool lookFlag = false;
@@ -519,7 +520,7 @@ void InventoryDialog::execute() {
 			if (lookFlag) {
 				_globals->_screenSurface.displayText(invObject->_description);
 			} else {
-				_globals->_inventory._selectedItem = invObject;
+				RING_INVENTORY._selectedItem = invObject;
 				invObject->setCursor();
 			}
 		}
@@ -543,15 +544,15 @@ void OptionsDialog::show() {
 		}
 	} else if (btn == &dlg->_btnRestart) {
 		// Restart game
-		_globals->_game.restartGame();
+		_globals->_game->restartGame();
 	} else if (btn == &dlg->_btnSound) {
 		// Sound dialog
 	} else if (btn == &dlg->_btnSave) {
 		// Save button
-		_globals->_game.saveGame();
+		_globals->_game->saveGame();
 	} else if (btn == &dlg->_btnRestore) {
 		// Restore button
-		_globals->_game.restoreGame();
+		_globals->_game->restoreGame();
 	}
 
 	dlg->remove();
diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp
index 808806b..00444f3 100644
--- a/engines/tsage/globals.cpp
+++ b/engines/tsage/globals.cpp
@@ -25,6 +25,7 @@
 
 #include "tsage/globals.h"
 #include "tsage/tsage.h"
+#include "tsage/ringworld_logic.h"
 
 namespace tSage {
 
@@ -53,7 +54,7 @@ Globals::Globals() :
 		_gfxManagerInstance(_screenSurface) {
 	reset();
 	_stripNum = 0;
-	_gfxFontNumber = 50;
+	_gfxFontNumber = (_vm->getFeatures() & GF_DEMO) ? 0 : 50;
 	_gfxColors.background = 53;
 	_gfxColors.foreground = 18;
 	_fontColors.background = 51;
@@ -68,6 +69,16 @@ Globals::Globals() :
 	_prevSceneOffset = Common::Point(-1, -1);
 	_sceneListeners.push_back(&_soundHandler);
 	_sceneListeners.push_back(&_sequenceManager._soundHandler);
+
+	_scrollFollower = NULL;
+	_inventory = NULL;
+
+	if (!(_vm->getFeatures() & GF_DEMO)) {
+		_inventory = new RingworldInvObjectList();
+		_game = new RingworldGame();
+	} else {
+		_game = new RingworldDemoGame();
+	}
 }
 
 Globals::~Globals() {
diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h
index b8ff441..9e9ddd5 100644
--- a/engines/tsage/globals.h
+++ b/engines/tsage/globals.h
@@ -41,7 +41,7 @@ public:
 	GfxManager _gfxManagerInstance;
 	Common::List<GfxManager *> _gfxManagers;
 	SceneHandler _sceneHandler;
-	Game _game;
+	Game *_game;
 	EventsClass _events;
 	SceneManager _sceneManager;
 	ScenePalette _scenePalette;
@@ -61,7 +61,7 @@ public:
 	bool _flags[256];
 	Player _player;
 	SoundHandler _soundHandler;
-	InvObjectList _inventory;
+	InvObjectList *_inventory;
 	Region _paneRegions[2];
 	int _paneRefreshFlag[2];
 	Common::Point _sceneOffset;
diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp
index b99fcb6..f9f9e4b 100644
--- a/engines/tsage/graphics.cpp
+++ b/engines/tsage/graphics.cpp
@@ -1109,7 +1109,7 @@ int GfxManager::getAngle(const Common::Point &p1, const Common::Point &p2) {
 
 
 GfxFont::GfxFont() {
-	_fontNumber = 50;
+	_fontNumber = (_vm->getFeatures() & GF_DEMO) ? 0 : 50;
 	_numChars = 0;
 	_bpp = 0;
 	_fontData = NULL;
diff --git a/engines/tsage/ringworld_demo.cpp b/engines/tsage/ringworld_demo.cpp
new file mode 100644
index 0000000..3f87e8d
--- /dev/null
+++ b/engines/tsage/ringworld_demo.cpp
@@ -0,0 +1,58 @@
+/* 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.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "tsage/ringworld_demo.h"
+#include "tsage/scenes.h"
+#include "tsage/tsage.h"
+#include "tsage/staticres.h"
+
+namespace tSage {
+
+/*--------------------------------------------------------------------------
+ * Ringworld Demo scene
+ *
+ *--------------------------------------------------------------------------*/
+
+void RingworldDemoScene::postInit(SceneObjectList *OwnerList) {
+	signal();
+}
+
+void RingworldDemoScene::signal() {
+	_soundHandler.startSound(4);
+	_actor1.postInit();
+	_actor2.postInit();
+	_actor1.postInit();
+	_actor4.postInit();
+	_actor5.postInit();
+	_actor6.postInit();
+	
+	setAction(&_sequenceManager, this, 22, &_actor1, &_actor2, &_actor3, &_actor4, &_actor5, &_actor6, NULL);
+}
+
+void RingworldDemoScene::process(Event &event) {
+	
+}
+
+} // End of namespace tSage
diff --git a/engines/tsage/ringworld_demo.h b/engines/tsage/ringworld_demo.h
new file mode 100644
index 0000000..63ffe56
--- /dev/null
+++ b/engines/tsage/ringworld_demo.h
@@ -0,0 +1,52 @@
+/* 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.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef TSAGE_RINGWORLD_DEMO_H
+#define TSAGE_RINGWORLD_DEMO_H
+
+#include "common/scummsys.h"
+#include "tsage/events.h"
+#include "tsage/core.h"
+#include "tsage/scenes.h"
+#include "tsage/globals.h"
+
+namespace tSage {
+
+
+class RingworldDemoScene: public Scene {
+public:
+	SequenceManager _sequenceManager;
+	SceneObject _actor1, _actor2, _actor3;
+	SceneObject _actor4, _actor5, _actor6;
+	SoundHandler _soundHandler;
+
+	virtual void postInit(SceneObjectList *OwnerList = NULL);
+	virtual void process(Event &event);
+	virtual void signal();
+};
+
+} // End of namespace tSage
+
+#endif
diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp
index 6c3a40a..0a2220c 100644
--- a/engines/tsage/ringworld_logic.cpp
+++ b/engines/tsage/ringworld_logic.cpp
@@ -23,10 +23,14 @@
  *
  */
 
+#include "common/config-manager.h"
+#include "common/translation.h"
+#include "gui/saveload.h"
 #include "tsage/ringworld_logic.h"
 #include "tsage/scenes.h"
 #include "tsage/tsage.h"
 #include "tsage/staticres.h"
+#include "tsage/ringworld_demo.h"
 #include "tsage/ringworld_scenes1.h"
 #include "tsage/ringworld_scenes2.h"
 #include "tsage/ringworld_scenes3.h"
@@ -39,6 +43,9 @@
 namespace tSage {
 
 Scene *SceneFactory::createScene(int sceneNumber) {
+	if (_vm->getFeatures() & GF_DEMO)
+		return new RingworldDemoScene();
+
 	switch (sceneNumber) {
 	/* Scene group 1 */
 	// Kziniti Palace (Introduction)
@@ -1174,4 +1181,235 @@ void SpeakerBatR::setText(const Common::String &msg) {
 	Speaker::setText(msg);
 }
 
+/*--------------------------------------------------------------------------*/
+
+RingworldInvObjectList::RingworldInvObjectList() :
+		_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);
+
+	_selectedItem = NULL;
+}
+
+/*--------------------------------------------------------------------------*/
+
+void RingworldGame::restartGame() {
+	if (MessageDialog::show(RESTART_MSG, CANCEL_BTN_STRING, RESTART_BTN_STRING) == 1)
+		_globals->_game->restart();
+}
+
+void RingworldGame::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 RingworldGame::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 RingworldGame::quitGame() {
+	if (MessageDialog::show(QUIT_CONFIRM_MSG, CANCEL_BTN_STRING, QUIT_BTN_STRING) == 1)
+		_vm->quitGame();
+}
+
+void RingworldGame::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 RingworldGame::start() {
+	// 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
+	RING_INVENTORY._stunner._sceneNumber = 1;
+	RING_INVENTORY._scanner._sceneNumber = 1;
+	RING_INVENTORY._ring._sceneNumber = 1;
+
+	// Switch to the title screen
+	_globals->_sceneManager.setNewScene(1000);
+}
+
+void RingworldGame::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
+	RING_INVENTORY._stunner._sceneNumber = 1;
+	RING_INVENTORY._scanner._sceneNumber = 1;
+	RING_INVENTORY._stasisBox._sceneNumber = 5200;
+	RING_INVENTORY._infoDisk._sceneNumber = 40;
+	RING_INVENTORY._stasisNegator._sceneNumber = 0;
+	RING_INVENTORY._keyDevice._sceneNumber = 0;
+	RING_INVENTORY._medkit._sceneNumber = 2280;
+	RING_INVENTORY._ladder._sceneNumber = 4100;
+	RING_INVENTORY._rope._sceneNumber = 4150;
+	RING_INVENTORY._key._sceneNumber = 7700;
+	RING_INVENTORY._translator._sceneNumber = 2150;
+	RING_INVENTORY._paper._sceneNumber = 7700;
+	RING_INVENTORY._waldos._sceneNumber = 0;
+	RING_INVENTORY._ring._sceneNumber = 1;
+	RING_INVENTORY._stasisBox2._sceneNumber = 8100;
+	RING_INVENTORY._cloak._sceneNumber = 9850;
+	RING_INVENTORY._tunic._sceneNumber = 9450;
+	RING_INVENTORY._candle._sceneNumber = 9500;
+	RING_INVENTORY._straw._sceneNumber = 9400;
+	RING_INVENTORY._scimitar._sceneNumber = 9850;
+	RING_INVENTORY._sword._sceneNumber = 9850;
+	RING_INVENTORY._helmet._sceneNumber = 9500;
+	RING_INVENTORY._items._sceneNumber = 4300;
+	RING_INVENTORY._concentrator._sceneNumber = 4300;
+	RING_INVENTORY._nullifier._sceneNumber = 4300;
+	RING_INVENTORY._peg._sceneNumber = 4045;
+	RING_INVENTORY._vial._sceneNumber = 5100;
+	RING_INVENTORY._jacket._sceneNumber = 9850;
+	RING_INVENTORY._tunic2._sceneNumber = 9850;
+	RING_INVENTORY._bone._sceneNumber = 5300;
+	RING_INVENTORY._jar._sceneNumber = 7700;
+	RING_INVENTORY._emptyJar._sceneNumber = 7700;
+	RING_INVENTORY._selectedItem = NULL;
+
+	// Change to the first game scene
+	_globals->_sceneManager.changeScene(30);
+}
+
+void RingworldGame::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();
+}
+
+/*--------------------------------------------------------------------------*/
+
+void RingworldDemoGame::start() {
+	// Start the demo's single scene
+	_globals->_sceneManager.changeScene(1);
+}
+
+void RingworldDemoGame::restart() {
+}
+
 } // End of namespace tSage
diff --git a/engines/tsage/ringworld_logic.h b/engines/tsage/ringworld_logic.h
index 66c7bff..eb395d5 100644
--- a/engines/tsage/ringworld_logic.h
+++ b/engines/tsage/ringworld_logic.h
@@ -397,6 +397,77 @@ public:
 	virtual void setText(const Common::String &msg);
 };
 
+/*--------------------------------------------------------------------------*/
+
+class RingworldInvObjectList : public InvObjectList {
+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;
+public:
+	RingworldInvObjectList();
+
+	virtual Common::String getClassName() { return "RingworldInvObjectList"; }
+};
+
+#define RING_INVENTORY (*((RingworldInvObjectList *)_globals->_inventory))
+
+class RingworldGame: public Game {
+protected:
+	virtual void handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName);
+public:
+	virtual void start();
+	virtual void restart();
+	virtual void restartGame();
+	virtual void saveGame();
+	virtual void restoreGame();
+	virtual void quitGame();
+	virtual void endGame(int resNum, int lineNum);
+};
+
+class RingworldDemoGame: public Game {
+protected:
+	virtual void restart();
+public:
+	virtual void start();
+	virtual void restartGame() {}
+	virtual void saveGame() {}
+	virtual void restoreGame() {}
+	virtual void quitGame() {}
+	virtual void endGame(int resNum, int lineNum) {}
+};
+
+
 } // End of namespace tSage
 
 #endif
diff --git a/engines/tsage/ringworld_scenes1.cpp b/engines/tsage/ringworld_scenes1.cpp
index 506d8bd..6fd12ce 100644
--- a/engines/tsage/ringworld_scenes1.cpp
+++ b/engines/tsage/ringworld_scenes1.cpp
@@ -512,7 +512,7 @@ void Scene20::Action4::signal() {
 		scene->_sound.startSound(77, this, 127);
 		break;
 	case 8:
-		_globals->_game.endGame(20, 0);
+		_globals->_game->endGame(20, 0);
 		break;
 	default:
 		break;
@@ -844,7 +844,7 @@ void Scene30::KzinObject::doAction(int action) {
 		display2(30, 11);
 		break;
 	case OBJECT_RING:
-		_globals->_inventory._ring._sceneNumber = 30;
+		RING_INVENTORY._ring._sceneNumber = 30;
 		scene->setAction(&scene->_ringAction);
 		break;
 	case CURSOR_LOOK:
@@ -1063,7 +1063,7 @@ void Scene40::Action1::signal() {
 		_globals->_soundHandler.startSound(77, this);
 		break;
 	case 17:
-		_globals->_game.endGame(40, 20);
+		_globals->_game->endGame(40, 20);
 		remove();
 		break;
 	}
@@ -1107,7 +1107,7 @@ void Scene40::Action2::signal() {
 		scene->_assassin._frame = 1;
 		scene->_assassin.animate(ANIM_MODE_5, this);
 		scene->_soundHandler.startSound(29);
-		_globals->_inventory._infoDisk._sceneNumber = 40;
+		RING_INVENTORY._infoDisk._sceneNumber = 40;
 		break;
 	case 4:
 		_globals->_player.animate(ANIM_MODE_6, this);
@@ -1174,7 +1174,7 @@ void Scene40::Action3::signal() {
 	case 2:
 		scene->_assassin.setStrip(2);
 		scene->_assassin.setFrame(1);
-		_globals->_inventory._infoDisk._sceneNumber = 1;
+		RING_INVENTORY._infoDisk._sceneNumber = 1;
 		_globals->_player.animate(ANIM_MODE_6, this);
 		break;
 	case 3:
@@ -1328,7 +1328,7 @@ void Scene40::Action8::signal() {
 		_globals->_soundHandler.startSound(77, this);
 		break;
 	case 4:
-		_globals->_game.endGame(40, 45);
+		_globals->_game->endGame(40, 45);
 		remove();
 		break;
 	}
@@ -1378,12 +1378,12 @@ void Scene40::Assassin::doAction(int action) {
 		if (scene->_assassin._visage != 44)
 			SceneItem::display2(40, 13);
 		else
-			SceneItem::display2(40, (_globals->_inventory._infoDisk._sceneNumber == 1) ? 19 : 14);
+			SceneItem::display2(40, (RING_INVENTORY._infoDisk._sceneNumber == 1) ? 19 : 14);
 		break;
 	case CURSOR_USE:
 		if (scene->_assassin._visage != 44)
 			SceneItem::display2(40, 15);
-		else if (_globals->_inventory._infoDisk._sceneNumber == 1)
+		else if (RING_INVENTORY._infoDisk._sceneNumber == 1)
 			SceneItem::display2(40, 19);
 		else {
 			_globals->_player.disableControl();
@@ -1534,7 +1534,7 @@ void Scene40::postInit(SceneObjectList *OwnerList) {
 		_assassin.setPosition(Common::Point(230, 187));
 		_assassin.setAction(&_action8);
 
-		if (_globals->_inventory._infoDisk._sceneNumber == 40) {
+		if (RING_INVENTORY._infoDisk._sceneNumber == 40) {
 			_assassin.setStrip(1);
 			_assassin.setFrame(_assassin.getFrameCount());
 		} else {
@@ -1952,7 +1952,7 @@ void Scene60::Action1::signal() {
 		break;
 	case 9:
 		_globals->_player._uiEnabled = false;
-		_globals->_inventory._infoDisk._sceneNumber = 1;
+		RING_INVENTORY._infoDisk._sceneNumber = 1;
 
 		if (_globals->_sceneObjects->contains(&scene->_message))
 			scene->_message.remove();
@@ -2226,7 +2226,7 @@ void Scene60::Item1::doAction(int action) {
 
 	switch (action) {
 	case OBJECT_INFODISK:
-		_globals->_inventory._infoDisk._sceneNumber = 60;
+		RING_INVENTORY._infoDisk._sceneNumber = 60;
 		_globals->setFlag(!_globals->_stripNum ? 118 : 121);
 		scene->_sceneMode = 0;
 		scene->setAction(&scene->_action1);
@@ -2235,7 +2235,7 @@ void Scene60::Item1::doAction(int action) {
 		SceneItem::display2(60, 10);
 		break;
 	case CURSOR_USE:
-		if (_globals->_inventory._infoDisk._sceneNumber == 60) {
+		if (RING_INVENTORY._infoDisk._sceneNumber == 60) {
 			if (_globals->getFlag(118) && !_globals->_stripNum) {
 				_globals->clearFlag(118);
 				scene->setAction(&scene->_action1);
@@ -2248,7 +2248,7 @@ void Scene60::Item1::doAction(int action) {
 				scene->_action1.setActionIndex(9);
 				scene->_action1.setDelay(1);
 			}
-		} else if (_globals->_inventory._infoDisk._sceneNumber == 1) {
+		} else if (RING_INVENTORY._infoDisk._sceneNumber == 1) {
 			scene->_sceneMode = 0;
 			setAction(&scene->_sequenceManager, scene, 62, NULL);
 		} else {
@@ -2674,7 +2674,7 @@ void Scene90::signal() {
 		break;
 	case 92:
 		_globals->_scenePalette.clearListeners();
-		_globals->_game.endGame(90, 6);
+		_globals->_game->endGame(90, 6);
 		break;
 	case 96:
 		_globals->_player.enableControl();
diff --git a/engines/tsage/ringworld_scenes10.cpp b/engines/tsage/ringworld_scenes10.cpp
index ecfb1f3..0035f10 100644
--- a/engines/tsage/ringworld_scenes10.cpp
+++ b/engines/tsage/ringworld_scenes10.cpp
@@ -429,7 +429,7 @@ void Scene9200::postInit(SceneObjectList *OwnerList) {
 	switch (_globals->_sceneManager._previousScene) {
 	case 9500:
 		if (_globals->getFlag(85)) {
-			if (_globals->_inventory._helmet._sceneNumber == 1) {
+			if (RING_INVENTORY._helmet._sceneNumber == 1) {
 				_globals->setFlag(86);
 				_sceneState = 9210;
 				setAction(&_sequenceManager, this, 9210, &_globals->_player, &_object2, &_object3, 0);
@@ -438,7 +438,7 @@ void Scene9200::postInit(SceneObjectList *OwnerList) {
 				setAction(&_sequenceManager, this, 9212, &_globals->_player, &_object2, &_object3, 0);
 			}
 		} else {
-			if (_globals->_inventory._helmet._sceneNumber == 1) {
+			if (RING_INVENTORY._helmet._sceneNumber == 1) {
 				_sceneState = 9211;
 				setAction(&_sequenceManager, this, 9211, &_globals->_player, &_object2, &_object3, 0);
 			} else {
@@ -711,7 +711,7 @@ Scene9400::Scene9400() {
 void Scene9400::SceneHotspot7::doAction(int action) {
 	Scene9400 *scene = (Scene9400 *)_globals->_sceneManager._scene;
 
-	if ((action == CURSOR_USE) && (_globals->_inventory._straw._sceneNumber != 1)) {
+	if ((action == CURSOR_USE) && (RING_INVENTORY._straw._sceneNumber != 1)) {
 		scene->_sceneState = 1;
 		scene->setAction(&scene->_sequenceManager, scene, 9408, &_globals->_player, 0);
 	} else {
@@ -869,13 +869,13 @@ void Scene9450::Hotspot3::doAction(int action) {
 		break;
 	case CURSOR_USE:
 	case CURSOR_TALK:
-		if (_globals->_inventory._tunic._sceneNumber == 9450) {
+		if (RING_INVENTORY._tunic._sceneNumber == 9450) {
 			if (scene->_object2._action)
 				scene->_object2._action->remove();
 			scene->_sceneMode = 9459;
 			_globals->_player.disableControl();
 			setAction(&scene->_sequenceManager1, scene, 9459, &scene->_object2, &scene->_object1, &scene->_object3, &_globals->_player, 0);
-		} else if ((_globals->_inventory._cloak._sceneNumber != 1) && (_globals->_inventory._jacket._sceneNumber != 1) && (_globals->_inventory._tunic2._sceneNumber != 1)) {
+		} else if ((RING_INVENTORY._cloak._sceneNumber != 1) && (RING_INVENTORY._jacket._sceneNumber != 1) && (RING_INVENTORY._tunic2._sceneNumber != 1)) {
 			SceneItem::display(9450, 38, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
 		} else {
 			scene->_sceneMode = 9460;
@@ -962,7 +962,7 @@ void Scene9450::postInit(SceneObjectList *OwnerList) {
 	setAction(&_sequenceManager1, this, 9451, &_globals->_player, 0);
 
 	if (_globals->getFlag(87)) {
-		if (_globals->_inventory._tunic._sceneNumber == 1) {
+		if (RING_INVENTORY._tunic._sceneNumber == 1) {
 			_object2.signal();
 		} else {
 			_object2.setPosition(Common::Point(184, 144), 0);
@@ -977,7 +977,7 @@ void Scene9450::postInit(SceneObjectList *OwnerList) {
 		_object3.setAction(&_sequenceManager2, 0, 9455, &_object2, &_object1, 0);
 	}
 
-	if (_globals->_inventory._tunic._sceneNumber != 1)
+	if (RING_INVENTORY._tunic._sceneNumber != 1)
 		_hotspot1.setup(123, 139, 138, 170, 9450, 37, -1);
 
 	_hotspot2.setup(153, 102, 176, 141, 9450, 39, 40);
@@ -1007,7 +1007,7 @@ void Scene9500::Hotspot1::doAction(int action) {
 	if (action == OBJECT_SWORD) {
 		scene->_sceneMode = 9510;
 		_globals->setFlag(92);
-		_globals->_inventory._sword._sceneNumber = 9500;
+		RING_INVENTORY._sword._sceneNumber = 9500;
 		_globals->_player.disableControl();
 		_globals->_sceneItems.remove(this);
 		scene->_hotspot2.setup(87, 294, 104, 314, 9400, 17, -1);
@@ -1033,7 +1033,7 @@ void Scene9500::Hotspot2::doAction(int action) {
 void Scene9500::Hotspot3::doAction(int action) {
 	Scene9500 *scene = (Scene9500 *)_globals->_sceneManager._scene;
 
-	if ((action == CURSOR_USE) && (_globals->_inventory._candle._sceneNumber != 1)){
+	if ((action == CURSOR_USE) && (RING_INVENTORY._candle._sceneNumber != 1)){
 		scene->_sceneMode = 9505;
 		_globals->_player.disableControl();
 		_globals->_sceneItems.remove(this);
@@ -1048,12 +1048,12 @@ void Scene9500::Hotspot4::doAction(int action) {
 
 	if (action == OBJECT_CANDLE) {
 		_globals->_player.disableControl();
-		if (_globals->_inventory._straw._sceneNumber == 9500) {
+		if (RING_INVENTORY._straw._sceneNumber == 9500) {
 			scene->_sceneMode = 9506;
 			_globals->_sceneItems.remove(&scene->_hotspot5);
 			_globals->_sceneItems.remove(this);
 			scene->setAction(&scene->_sequenceManager, scene, 9506, &_globals->_player, &scene->_object3, 0);
-			_globals->_inventory._candle._sceneNumber = 9850;
+			RING_INVENTORY._candle._sceneNumber = 9850;
 		} else {
 			scene->_sceneMode = 9507;
 			scene->setAction(&scene->_sequenceManager, scene, 9507, &_globals->_player, &scene->_object3, 0);
@@ -1061,7 +1061,7 @@ void Scene9500::Hotspot4::doAction(int action) {
 	} else if (action == OBJECT_STRAW) {
 		scene->_sceneMode = 9512;
 		_globals->_player.disableControl();
-		_globals->_inventory._straw._sceneNumber = 9500;
+		RING_INVENTORY._straw._sceneNumber = 9500;
 		scene->setAction(&scene->_sequenceManager, scene, 9512, &_globals->_player, &scene->_object3, 0);
 	} else {
 		NamedHotspot::doAction(action);
@@ -1135,14 +1135,14 @@ void Scene9500::postInit(SceneObjectList *OwnerList) {
 	_candle.setStrip(1);
 	_candle.animate(ANIM_MODE_2);
 	_candle.setPosition(Common::Point(30, 105), 0);
-	if (_globals->_inventory._candle._sceneNumber != 9500)
+	if (RING_INVENTORY._candle._sceneNumber != 9500)
 		_candle.setStrip(2);
 
 	_object3.postInit(0);
 	_object3.hide();
 	_object3.setPriority2(150);
 	_object3.setPosition(Common::Point(166, 133));
-	if (_globals->_inventory._straw._sceneNumber == 9500) {
+	if (RING_INVENTORY._straw._sceneNumber == 9500) {
 		_object3.show();
 		_object3.setVisage(5);
 		_object3._strip = 2;
@@ -1165,7 +1165,7 @@ void Scene9500::postInit(SceneObjectList *OwnerList) {
 		_object2.setFrame(_object2.getFrameCount());
 		_object2.setPosition(Common::Point(303, 130));
 		_object2.setPriority2(132);
-		if (_globals->_inventory._helmet._sceneNumber == 1) {
+		if (RING_INVENTORY._helmet._sceneNumber == 1) {
 			_hotspot2.setup(87, 294, 104, 314, 9400, 17, -1);
 		} else {
 			_object2.setStrip(2);
@@ -1203,10 +1203,10 @@ void Scene9500::postInit(SceneObjectList *OwnerList) {
 
 	if ((_globals->_sceneManager._previousScene == 9200) || (_globals->_sceneManager._previousScene != 9850)) {
 		_sceneMode = 0;
-		if (_globals->_inventory._helmet._sceneNumber != 1) {
+		if (RING_INVENTORY._helmet._sceneNumber != 1) {
 			setAction(&_sequenceManager, this, 9501, &_globals->_player, &_candle, 0);
 		} else {
-			_globals->_inventory._helmet._sceneNumber = 9500;
+			RING_INVENTORY._helmet._sceneNumber = 9500;
 			_hotspot2.setup(87, 294, 104, 314, 9400, 17, -1);
 			setAction(&_sequenceManager, this, 9513, &_globals->_player, &_object2, 0);
 		}
@@ -1248,7 +1248,7 @@ void Scene9700::process(Event &event) {
 			_globals->_sceneManager.changeScene(9200);
 		} else if (_globals->_events._currentCursor == OBJECT_SCANNER) {
 			event.handled = true;
-			if (_globals->_inventory._helmet._sceneNumber == 1) {
+			if (RING_INVENTORY._helmet._sceneNumber == 1) {
 				_globals->_player.disableControl();
 				_sceneMode = 9704;
 				setAction(&_sequenceManager, this, 9704, &_globals->_player, &_object1, 0);
@@ -1332,7 +1332,7 @@ void Scene9850::Object6::doAction(int action) {
 		if (action == CURSOR_LOOK) {
 			SceneItem::display(9850, 27, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
 		} else if (action == CURSOR_USE) {
-			_globals->_inventory._scimitar._sceneNumber = 1;
+			RING_INVENTORY._scimitar._sceneNumber = 1;
 			hide();
 		} else {
 			SceneHotspot::doAction(action);
@@ -1344,7 +1344,7 @@ void Scene9850::Object7::doAction(int action) {
 		if (action == CURSOR_LOOK) {
 			SceneItem::display(9850, 28, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
 		} else if (action == CURSOR_USE) {
-			_globals->_inventory._sword._sceneNumber = 1;
+			RING_INVENTORY._sword._sceneNumber = 1;
 			hide();
 		} else {
 			SceneHotspot::doAction(action);
@@ -1357,18 +1357,18 @@ void Scene9850::Hotspot12::doAction(int action) {
 	Scene9850 *scene = (Scene9850 *)_globals->_sceneManager._scene;
 
 	if (action == CURSOR_USE) {
-		if (_globals->_inventory._tunic2._sceneNumber != 1) {
-			_globals->_inventory._tunic2._sceneNumber = 1;
+		if (RING_INVENTORY._tunic2._sceneNumber != 1) {
+			RING_INVENTORY._tunic2._sceneNumber = 1;
 			_globals->_player.disableControl();
 			scene->_sceneMode = 9858;
 			setAction(&scene->_sequenceManager, scene, 9858, &_globals->_player, &scene->_objTunic2, 0);
 		} else {
-			_globals->_inventory._tunic2._sceneNumber = 9850;
+			RING_INVENTORY._tunic2._sceneNumber = 9850;
 			_globals->_player.disableControl();
 			scene->_sceneMode = 9861;
 			setAction(&scene->_sequenceManager, scene, 9861, &_globals->_player, &scene->_objTunic2, 0);
 		}
-	} else if ((action != CURSOR_LOOK) || (_globals->_inventory._tunic2._sceneNumber != 1)) {
+	} else if ((action != CURSOR_LOOK) || (RING_INVENTORY._tunic2._sceneNumber != 1)) {
 		NamedHotspot::doAction(action);
 	} else {
 		SceneItem::display(9850, 30, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
@@ -1379,18 +1379,18 @@ void Scene9850::Hotspot14::doAction(int action) {
 	Scene9850 *scene = (Scene9850 *)_globals->_sceneManager._scene;
 
 	if (action == CURSOR_USE) {
-		if (_globals->_inventory._jacket._sceneNumber != 1) {
-			_globals->_inventory._jacket._sceneNumber = 1;
+		if (RING_INVENTORY._jacket._sceneNumber != 1) {
+			RING_INVENTORY._jacket._sceneNumber = 1;
 			_globals->_player.disableControl();
 			scene->_sceneMode = 9857;
 			setAction(&scene->_sequenceManager, scene, 9857, &_globals->_player, &scene->_objJacket, 0);
 		} else {
-			_globals->_inventory._jacket._sceneNumber = 9850;
+			RING_INVENTORY._jacket._sceneNumber = 9850;
 			_globals->_player.disableControl();
 			scene->_sceneMode = 9860;
 			setAction(&scene->_sequenceManager, scene, 9860, &_globals->_player, &scene->_objJacket, 0);
 		}
-	} else if ((action != CURSOR_LOOK) || (_globals->_inventory._jacket._sceneNumber != 1)) {
+	} else if ((action != CURSOR_LOOK) || (RING_INVENTORY._jacket._sceneNumber != 1)) {
 		NamedHotspot::doAction(action);
 	} else {
 		SceneItem::display(9850, 30, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
@@ -1401,18 +1401,18 @@ void Scene9850::Hotspot16::doAction(int action) {
 	Scene9850 *scene = (Scene9850 *)_globals->_sceneManager._scene;
 
 	if (action == CURSOR_USE) {
-		if (_globals->_inventory._cloak._sceneNumber != 1) {
-			_globals->_inventory._cloak._sceneNumber = 1;
+		if (RING_INVENTORY._cloak._sceneNumber != 1) {
+			RING_INVENTORY._cloak._sceneNumber = 1;
 			_globals->_player.disableControl();
 			scene->_sceneMode = 9862;
 			setAction(&scene->_sequenceManager, scene, 9862, &_globals->_player, &scene->_objCloak, 0);
 		} else {
-			_globals->_inventory._cloak._sceneNumber = 9850;
+			RING_INVENTORY._cloak._sceneNumber = 9850;
 			_globals->_player.disableControl();
 			scene->_sceneMode = 9859;
 			setAction(&scene->_sequenceManager, scene, 9859, &_globals->_player, &scene->_objCloak, 0);
 		}
-	} else if ((action != CURSOR_LOOK) || (_globals->_inventory._cloak._sceneNumber != 1)) {
+	} else if ((action != CURSOR_LOOK) || (RING_INVENTORY._cloak._sceneNumber != 1)) {
 		NamedHotspot::doAction(action);
 	} else {
 		SceneItem::display(9850, 30, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
@@ -1462,9 +1462,9 @@ void Scene9850::Hotspot20::doAction(int action) {
 	if (action == CURSOR_USE) {
 		_globals->_player.disableControl();
 		if (scene->_objSword._state == 0) {
-			if (_globals->_inventory._scimitar._sceneNumber == 9850)
+			if (RING_INVENTORY._scimitar._sceneNumber == 9850)
 				scene->_objScimitar.show();
-			if (_globals->_inventory._sword._sceneNumber == 9850)
+			if (RING_INVENTORY._sword._sceneNumber == 9850)
 				scene->_objSword.show();
 			scene->_sceneMode = 11;
 			setAction(&scene->_sequenceManager, scene, 9853, &_globals->_player, &scene->_objDoor, &scene->_objLever, 0);
@@ -1482,9 +1482,9 @@ void Scene9850::signal() {
 	switch (_sceneMode ++) {
 	case 10:
 		// Hidden closet closed
-		if (_globals->_inventory._scimitar._sceneNumber == 9850)
+		if (RING_INVENTORY._scimitar._sceneNumber == 9850)
 			_objScimitar.hide();
-		if (_globals->_inventory._sword._sceneNumber == 9850)
+		if (RING_INVENTORY._sword._sceneNumber == 9850)
 			_objSword.hide();
 		_globals->_sceneItems.remove(&_objScimitar);
 		_globals->_sceneItems.remove(&_objSword);
@@ -1493,9 +1493,9 @@ void Scene9850::signal() {
 		break;
 	case 11:
 		// Hidden closet opened
-		if (_globals->_inventory._scimitar._sceneNumber == 9850)
+		if (RING_INVENTORY._scimitar._sceneNumber == 9850)
 			_globals->_sceneItems.addItems(&_objScimitar, NULL);
-		if (_globals->_inventory._sword._sceneNumber == 9850)
+		if (RING_INVENTORY._sword._sceneNumber == 9850)
 			_globals->_sceneItems.addItems(&_objSword, NULL);
 		_globals->_sceneItems.remove(&_hotspot19);
 		_globals->_player.enableControl();
@@ -1559,7 +1559,7 @@ void Scene9850::postInit(SceneObjectList *OwnerList) {
 	_objCloak.setFrame(1);
 	_objCloak.setPriority2(90);
 	_objCloak.setPosition(Common::Point(157, 81), 0);
-	if (_globals->_inventory._cloak._sceneNumber != 9850)
+	if (RING_INVENTORY._cloak._sceneNumber != 9850)
 		_objCloak.hide();
 
 	_objJacket.postInit();
@@ -1568,7 +1568,7 @@ void Scene9850::postInit(SceneObjectList *OwnerList) {
 	_objJacket.setFrame(2);
 	_objJacket.setPriority2(90);
 	_objJacket.setPosition(Common::Point(201, 84));
-	if (_globals->_inventory._jacket._sceneNumber != 9850)
+	if (RING_INVENTORY._jacket._sceneNumber != 9850)
 		_objJacket.hide();
 
 	_objTunic2.postInit();
@@ -1577,10 +1577,10 @@ void Scene9850::postInit(SceneObjectList *OwnerList) {
 	_objTunic2.setFrame(3);
 	_objTunic2.setPriority2(90);
 	_objTunic2.setPosition(Common::Point(295, 90));
-	if (_globals->_inventory._tunic2._sceneNumber != 9850)
+	if (RING_INVENTORY._tunic2._sceneNumber != 9850)
 		_objTunic2.hide();
 
-	if (_globals->_inventory._scimitar._sceneNumber == 9850) {
+	if (RING_INVENTORY._scimitar._sceneNumber == 9850) {
 		_objScimitar.postInit();
 		_objScimitar.setVisage(9850);
 		_objScimitar.setStrip(2);
@@ -1590,7 +1590,7 @@ void Scene9850::postInit(SceneObjectList *OwnerList) {
 		_objScimitar.hide();
 	}
 
-	if (_globals->_inventory._sword._sceneNumber == 9850) {
+	if (RING_INVENTORY._sword._sceneNumber == 9850) {
 		_objSword.postInit();
 		_objSword.setVisage(9850);
 		_objSword.setStrip(3);
@@ -1789,7 +1789,7 @@ void Scene9900::strAction3::signal() {
 		_globals->_scenePalette.addFader(_palette2._palette, 256, 5, this);
 		break;
 	case 4:
-		_globals->_game.endGame(9900, 61);
+		_globals->_game->endGame(9900, 61);
 		remove();
 	default:
 		break;
@@ -1842,7 +1842,7 @@ void Scene9900::signal() {
 		break;
 	case 162:
 		warning("TBC: shutdown();");
-		_globals->_game.quitGame();
+		_globals->_game->quitGame();
 		break;
 	case 9901:
 		_globals->_player.disableControl();
@@ -1933,7 +1933,7 @@ void Scene9900::process(Event &event) {
 	if (_sceneMode != 9906) {
 		if ((event.eventType == EVENT_BUTTON_DOWN) && (_globals->_events.getCursor() == OBJECT_ITEMS)) {
 			_object8._state = 1;
-			_globals->_inventory._items._sceneNumber = 9900;
+			RING_INVENTORY._items._sceneNumber = 9900;
 			_globals->_events.setCursor(CURSOR_USE);
 		}
 	}
@@ -1960,10 +1960,10 @@ void Scene9900::postInit(SceneObjectList *OwnerList) {
 
 	_object8._state = 0;
 
-	_globals->_inventory._concentrator._sceneNumber = 9900;
-	_globals->_inventory._items._rlbNum = 3;
-	_globals->_inventory._items._cursorNum = 6;
-	_globals->_inventory._items._description = Common::String("One of the items from the stasis ship. The other is on the Lance's bridge.");
+	RING_INVENTORY._concentrator._sceneNumber = 9900;
+	RING_INVENTORY._items._rlbNum = 3;
+	RING_INVENTORY._items._cursorNum = 6;
+	RING_INVENTORY._items._description = Common::String("One of the items from the stasis ship. The other is on the Lance's bridge.");
 
 	_stripManager.addSpeaker(&_speakerMR);
 	_globals->_player.disableControl();
diff --git a/engines/tsage/ringworld_scenes3.cpp b/engines/tsage/ringworld_scenes3.cpp
index 26cddc9..4ed2d98 100644
--- a/engines/tsage/ringworld_scenes3.cpp
+++ b/engines/tsage/ringworld_scenes3.cpp
@@ -752,10 +752,10 @@ void Scene2100::Action8::signal() {
 	}
 	case 3:
 		_globals->_player.checkAngle(&scene->_object3);
-		scene->_stripManager.start((_globals->_inventory._translator._sceneNumber == 1) ? 7720 : 7710, this);
+		scene->_stripManager.start((RING_INVENTORY._translator._sceneNumber == 1) ? 7720 : 7710, this);
 		break;
 	case 4:
-		if (_globals->_inventory._translator._sceneNumber != 1)
+		if (RING_INVENTORY._translator._sceneNumber != 1)
 			_globals->_sceneManager.changeScene(7600);
 		else {
 			_globals->setFlag(24);
@@ -1311,7 +1311,7 @@ void Scene2100::Action17::signal() {
 		scene->_stripManager.start(7072, this);
 		break;
 	case 8:
-		_globals->_inventory._stasisNegator._sceneNumber = 1;
+		RING_INVENTORY._stasisNegator._sceneNumber = 1;
 		_globals->_sceneManager.changeScene(9100);
 		remove();
 		break;
@@ -1814,14 +1814,14 @@ void Scene2100::postInit(SceneObjectList *OwnerList) {
 		_object4.setPosition(Common::Point(160, 199));
 		_object4.hide();
 
-		_globals->_inventory._stasisBox._sceneNumber = 0;
+		RING_INVENTORY._stasisBox._sceneNumber = 0;
 		setAction(&_action9);
 		break;
 	case 7000:
 		_globals->_soundHandler.startSound(160);
 		_globals->_soundHandler.proc5(true);
 
-		if (_globals->_inventory._stasisBox2._sceneNumber == 1) {
+		if (RING_INVENTORY._stasisBox2._sceneNumber == 1) {
 			_globals->_player.setPriority2(1);
 			_globals->_player.setPosition(Common::Point(157, 56));
 
@@ -2318,7 +2318,7 @@ void Scene2150::Action2::signal() {
 		break;
 	case 3:
 		_globals->_events.setCursor(CURSOR_WALK);
-		scene->_stripManager.start((_globals->_inventory._ale._sceneNumber == 2150) ? 2151 : 2152, this);
+		scene->_stripManager.start((RING_INVENTORY._ale._sceneNumber == 2150) ? 2151 : 2152, this);
 		break;
 	case 4:
 		scene->_hotspot14.postInit();
@@ -2328,7 +2328,7 @@ void Scene2150::Action2::signal() {
 
 		if (scene->_stripManager._field2E8 == 15) {
 			scene->_hotspot14.setFrame(5);
-			_globals->_inventory._ale._sceneNumber = 1;
+			RING_INVENTORY._ale._sceneNumber = 1;
 		} else {
 			scene->_hotspot14.setFrame(scene->_stripManager._field2E8 - 5);
 		}
@@ -2948,7 +2948,7 @@ void Scene2200::postInit(SceneObjectList *OwnerList) {
 		break;
 	case 2310:
 	default:
-		_globals->_inventory._infoDisk._sceneNumber = 1;
+		RING_INVENTORY._infoDisk._sceneNumber = 1;
 
 		_hotspot3.postInit();
 		_hotspot3.setVisage(2215);
@@ -3925,11 +3925,11 @@ void Scene2280::Action4::signal() {
 		switch (_state) {
 		case 1:
 			scene->_hotspot18.remove();
-			_globals->_inventory._scanner._sceneNumber = 1;
+			RING_INVENTORY._scanner._sceneNumber = 1;
 			break;
 		case 6:
 			scene->_hotspot17.remove();
-			_globals->_inventory._medkit._sceneNumber = 1;
+			RING_INVENTORY._medkit._sceneNumber = 1;
 			break;
 		case 50:
 			scene->_hotspot17.postInit();
@@ -3941,7 +3941,7 @@ void Scene2280::Action4::signal() {
 			scene->_hotspot17.changeZoom(100);
 			scene->_hotspot17.setPriority2(1);
 
-			_globals->_inventory._medkit._sceneNumber = 2280;
+			RING_INVENTORY._medkit._sceneNumber = 2280;
 			_globals->_sceneItems.push_front(&scene->_hotspot17);
 			break;
 		case 51:
@@ -3954,7 +3954,7 @@ void Scene2280::Action4::signal() {
 			scene->_hotspot18.changeZoom(100);
 			scene->_hotspot18.setPriority2(1);
 
-			_globals->_inventory._scanner._sceneNumber = 2280;
+			RING_INVENTORY._scanner._sceneNumber = 2280;
 			_globals->_sceneItems.push_front(&scene->_hotspot18);
 			break;
 		}
@@ -4223,7 +4223,7 @@ void Scene2280::postInit(SceneObjectList *OwnerList) {
 	_hotspot16.setPosition(Common::Point(208, 90));
 	_hotspot16.setPriority2(80);
 
-	if (_globals->_inventory._medkit._sceneNumber == 2280) {
+	if (RING_INVENTORY._medkit._sceneNumber == 2280) {
 		_hotspot17.postInit();
 		_hotspot17.setVisage(2161);
 		_hotspot17._strip = 2;
@@ -4233,7 +4233,7 @@ void Scene2280::postInit(SceneObjectList *OwnerList) {
 		_globals->_sceneItems.push_back(&_hotspot17);
 	}
 
-	if (_globals->_inventory._scanner._sceneNumber == 2280) {
+	if (RING_INVENTORY._scanner._sceneNumber == 2280) {
 		_hotspot18.postInit();
 		_hotspot18.setVisage(2161);
 		_hotspot18._strip = 2;
@@ -4422,7 +4422,7 @@ void Scene2300::Action1::signal() {
 		_globals->_soundHandler.startSound(77, this);
 		break;
 	case 8:
-		_globals->_game.endGame(2300, 0);
+		_globals->_game->endGame(2300, 0);
 		break;
 	case 9:
 		if (scene->_hotspot5._mover)
@@ -4711,8 +4711,8 @@ void Scene2300::postInit(SceneObjectList *OwnerList) {
 	_stripManager.addSpeaker(&_speakerQText);
 	_stripManager.addSpeaker(&_speakerSText);
 
-	_globals->_inventory._stunner._sceneNumber = 1;
-	_globals->_inventory._infoDisk._sceneNumber = 1;
+	RING_INVENTORY._stunner._sceneNumber = 1;
+	RING_INVENTORY._infoDisk._sceneNumber = 1;
 
 	_hotspot8.postInit();
 	_hotspot8.setVisage(2301);
@@ -5333,7 +5333,7 @@ void Scene2320::Action5::signal() {
 			_globals->_sceneManager.changeScene(7000);
 		else if (_globals->getFlag(59))
 			_globals->_sceneManager.changeScene(5000);
-		else if (!_globals->getFlag(43) || (_globals->_inventory._ale._sceneNumber != 1))
+		else if (!_globals->getFlag(43) || (RING_INVENTORY._ale._sceneNumber != 1))
 			setDelay(10);
 		else {
 			scene->_hotspot11.setAction(NULL);
@@ -5477,7 +5477,7 @@ void Scene2320::Action7::signal() {
 		break;
 	case 12:
 		_globals->_player.enableControl();
-		_globals->_inventory._stasisBox._sceneNumber = 2320;
+		RING_INVENTORY._stasisBox._sceneNumber = 2320;
 		break;
 	}
 }
@@ -5507,7 +5507,7 @@ void Scene2320::Action8::signal() {
 			_globals->_player.enableControl();
 		break;
 	case 5:
-		_globals->_inventory._stasisBox._sceneNumber = 2320;
+		RING_INVENTORY._stasisBox._sceneNumber = 2320;
 		scene->_sceneMode = 2326;
 		scene->_speakerGameText.setTextPos(Common::Point(_globals->_sceneManager._scene->_sceneBounds.left + 30, 10));
 		scene->setAction(&scene->_sequenceManager1, scene, 2326, &_globals->_player, &scene->_hotspot11, NULL);
@@ -5622,12 +5622,12 @@ void Scene2320::Hotspot11::doAction(int action) {
 		} else {
 			scene->_sceneMode = 2329;
 
-			if (_globals->_inventory._ale._sceneNumber == 1) {
+			if (RING_INVENTORY._ale._sceneNumber == 1) {
 				scene->setAction(&scene->_sequenceManager1, scene, 2329, NULL);
 			} else if (!_globals->getFlag(110)) {
 				_globals->setFlag(110);
 				scene->setAction(&scene->_sequenceManager1, scene, 2330, NULL);
-			} else if (_globals->_inventory._peg._sceneNumber != 1) {
+			} else if (RING_INVENTORY._peg._sceneNumber != 1) {
 				scene->setAction(&scene->_sequenceManager1, scene, 2331, NULL);
 			} else if (!_state) {
 				++_state;
@@ -5683,7 +5683,7 @@ void Scene2320::Hotspot14::doAction(int action) {
 			scene->_hotspot8.hide();
 
 			_globals->_sceneItems.push_front(&scene->_hotspot8);
-			_globals->_inventory._waldos._sceneNumber = 2320;
+			RING_INVENTORY._waldos._sceneNumber = 2320;
 
 			scene->_hotspot9.postInit();
 			scene->_hotspot9.setVisage(2345);
@@ -5705,7 +5705,7 @@ void Scene2320::Hotspot14::doAction(int action) {
 			SceneItem::display2(2320, 24);
 		} else if (!_globals->getFlag(76)) {
 			SceneItem::display2(2320, 28);
-		} else if (!_globals->_inventory._waldos._sceneNumber) {
+		} else if (!RING_INVENTORY._waldos._sceneNumber) {
 			SceneItem::display2(2320, 27);
 		} else {
 			SceneItem::display2(2320, 29);
@@ -5787,7 +5787,7 @@ void Scene2320::postInit(SceneObjectList *OwnerList) {
 	_hotspot12.animate(ANIM_MODE_8, 0, NULL);
 	_hotspot12.setPosition(Common::Point(412, 46));
 
-	if (_globals->_inventory._waldos._sceneNumber == 2320) {
+	if (RING_INVENTORY._waldos._sceneNumber == 2320) {
 		_hotspot8.postInit();
 		_hotspot8.setVisage(2345);
 		_hotspot8.setStrip(5);
@@ -6022,13 +6022,13 @@ void Scene2320::signal() {
 		break;
 	case 2326:
 		_globals->clearFlag(70);
-		_globals->_inventory._nullifier._sceneNumber = 1;
+		RING_INVENTORY._nullifier._sceneNumber = 1;
 		_globals->_stripNum = 2321;
 		_globals->_sceneManager.changeScene(2100);
 		break;
 	case 2336:
 		_globals->setFlag(77);
-		_globals->_inventory._waldos._sceneNumber = 1;
+		RING_INVENTORY._waldos._sceneNumber = 1;
 		_hotspot8.remove();
 		break;
 	case 5000:
diff --git a/engines/tsage/ringworld_scenes5.cpp b/engines/tsage/ringworld_scenes5.cpp
index a72396c..910a35e 100644
--- a/engines/tsage/ringworld_scenes5.cpp
+++ b/engines/tsage/ringworld_scenes5.cpp
@@ -52,7 +52,7 @@ void Scene4000::Action1::signal() {
 		NpcMover *mover = new NpcMover();
 		scene->_hotspot5.addMover(mover, &pt, this);
 
-		_globals->_inventory._ale._sceneNumber = 0;
+		RING_INVENTORY._ale._sceneNumber = 0;
 		_globals->clearFlag(42);
 		_globals->clearFlag(36);
 		_globals->clearFlag(43);
@@ -222,7 +222,7 @@ void Scene4000::Action4::signal() {
 		scene->_rope.setFrame(3);
 		scene->_rope.setPosition(Common::Point(268, 44));
 
-		_globals->_inventory._rope._sceneNumber = 4000;
+		RING_INVENTORY._rope._sceneNumber = 4000;
 		_globals->_events.setCursor(CURSOR_USE);
 		_globals->_player.animate(ANIM_MODE_6, this);
 		break;
@@ -292,7 +292,7 @@ void Scene4000::Action6::signal() {
 
 		if (!_globals->getFlag(36))
 			ADD_PLAYER_MOVER_NULL(scene->_miranda, 280, 150);
-		_globals->_inventory._ale._sceneNumber = 4100;
+		RING_INVENTORY._ale._sceneNumber = 4100;
 		break;
 	case 5:
 		_globals->_sceneManager.changeScene(4100);
@@ -359,7 +359,7 @@ void Scene4000::Action8::signal() {
 		_globals->_soundHandler.startSound(77, this);
 		break;
 	case 5:
-		_globals->_game.endGame(4000, 15);
+		_globals->_game->endGame(4000, 15);
 		remove();
 		break;
 	}
@@ -552,7 +552,7 @@ void Scene4000::Hotspot8::doAction(int action) {
 		SceneItem::display2(4000, 25);
 		break;
 	case CURSOR_TALK:
-		if (_globals->_inventory._peg._sceneNumber == 1)
+		if (RING_INVENTORY._peg._sceneNumber == 1)
 			SceneItem::display2(4000, 34);
 		else {
 			switch (_ctr) {
@@ -837,7 +837,7 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
 	_smoke2.setPosition(Common::Point(299, 59));
 	_smoke2.animate(ANIM_MODE_2, NULL);
 
-	if (_globals->_inventory._ladder._sceneNumber != 4000) {
+	if (RING_INVENTORY._ladder._sceneNumber != 4000) {
 	// if ladder is not in the scene, activate the hotspot on the wall
 		_hotspot8.postInit();
 		_hotspot8.setVisage(4018);
@@ -891,7 +891,7 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
 	case 2320:
 		_globals->_soundHandler.startSound(155);
 
-		if (_globals->_inventory._ale._sceneNumber == 1) {
+		if (RING_INVENTORY._ale._sceneNumber == 1) {
 			_guardRock.postInit();
 			_guardRock.setVisage(4001);
 			_guardRock.animate(ANIM_MODE_1, NULL);
@@ -934,7 +934,7 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
 		break;
 
 	case 4025:
-		if (_globals->_inventory._ladder._sceneNumber == 4000)
+		if (RING_INVENTORY._ladder._sceneNumber == 4000)
 			_hotspot8.remove();
 
 		_globals->_player.setPosition(Common::Point(260, 185));
@@ -989,7 +989,7 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
 	case 4045:
 		_globals->_player.enableControl();
 
-		if (_globals->_inventory._ladder._sceneNumber != 4000) {
+		if (RING_INVENTORY._ladder._sceneNumber != 4000) {
 			_hotspot8.postInit();
 			_hotspot8.setVisage(4017);
 			_hotspot8.animate(ANIM_MODE_1, NULL);
@@ -1046,7 +1046,7 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
 			_globals->_player.enableControl();
 		}
 
-		if (_globals->_inventory._ladder._sceneNumber != 4000)
+		if (RING_INVENTORY._ladder._sceneNumber != 4000)
 			_hotspot8.remove();
 		break;
 
@@ -1054,7 +1054,7 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
 		_globals->_player.enableControl();
 		_globals->_player.setPosition(Common::Point(270, 155));
 
-		if (_globals->getFlag(42) && (_globals->_inventory._ladder._sceneNumber != 4000)) {
+		if (_globals->getFlag(42) && (RING_INVENTORY._ladder._sceneNumber != 4000)) {
 			_hotspot8.setVisage(4017);
 			_hotspot8.animate(ANIM_MODE_1, NULL);
 			_hotspot8.setPosition(Common::Point(244, 151));
@@ -1087,8 +1087,8 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
 			_guardRock.setPosition(Common::Point(255, 153));
 
 			setAction(&_action11);
-			_globals->_inventory._ladder._sceneNumber = 4100;
-			_globals->_inventory._rope._sceneNumber = 4150;
+			RING_INVENTORY._ladder._sceneNumber = 4100;
+			RING_INVENTORY._rope._sceneNumber = 4150;
 
 			_soundHandler1.startSound(156);
 
@@ -1114,7 +1114,7 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
 		break;
 	}
 
-	if (_globals->_inventory._ladder._sceneNumber == 4000) {
+	if (RING_INVENTORY._ladder._sceneNumber == 4000) {
 		_ladder.postInit();
 		_ladder.setVisage(4000);
 		_ladder.setStrip(5);
@@ -1123,7 +1123,7 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
 		_globals->_sceneItems.push_back(&_ladder);
 	}
 
-	if (_globals->_inventory._rope._sceneNumber == 4000) {
+	if (RING_INVENTORY._rope._sceneNumber == 4000) {
 		_rope.postInit();
 		_rope.setVisage(4000);
 		_rope.setStrip(7);
@@ -1149,7 +1149,7 @@ void Scene4000::signal() {
 		setAction(&_sequenceManager1, this, 4014, &_globals->_player, &_hotspot5, NULL);
 		break;
 	case 4004:
-		_globals->_inventory._ladder._sceneNumber = 4000;
+		RING_INVENTORY._ladder._sceneNumber = 4000;
 		// Deliberate fall-through
 	case 4007:
 		_globals->_player._uiEnabled = true;
@@ -1226,7 +1226,7 @@ void Scene4000::dispatch() {
 	}
 
 	if (!_action) {
-		if ((_globals->_inventory._peg._sceneNumber == 1) && _globals->getFlag(34) &&
+		if ((RING_INVENTORY._peg._sceneNumber == 1) && _globals->getFlag(34) &&
 				_globals->getFlag(37) && !_globals->getFlag(40)) {
 			_globals->_player.disableControl();
 			_soundHandler1.startSound(177);
@@ -1444,7 +1444,7 @@ void Scene4025::Hole::doAction(int action) {
 		if (!scene->_pegPtr2) {
 			_globals->_player.disableControl();
 			_globals->_events.setCursor(CURSOR_USE);
-			_globals->_inventory._peg._sceneNumber = 4025;
+			RING_INVENTORY._peg._sceneNumber = 4025;
 
 			scene->_pegPtr = &scene->_peg5;
 			scene->_holePtr = this;
@@ -1627,8 +1627,8 @@ void Scene4025::process(Event &event) {
 	Scene::process(event);
 
 	if (_gfxButton.process(event)) {
-		if (_globals->_inventory._peg._sceneNumber == 4025)
-			_globals->_inventory._peg._sceneNumber = 1;
+		if (RING_INVENTORY._peg._sceneNumber == 4025)
+			RING_INVENTORY._peg._sceneNumber = 1;
 
 		_globals->_sceneManager.changeScene(4000);
 	}
@@ -1805,7 +1805,7 @@ void Scene4045::Necklace::doAction(int action) {
 	case CURSOR_USE:
 		if (_globals->_player._position.y < 135) {
 			SceneItem::display2(4045, 16);
-			_globals->_inventory._peg._sceneNumber = 1;
+			RING_INVENTORY._peg._sceneNumber = 1;
 			_globals->_events.setCursor(CURSOR_WALK);
 			remove();
 		} else {
@@ -1884,7 +1884,7 @@ void Scene4045::postInit(SceneObjectList *OwnerList) {
 
 		_olloFace.setPosition(Common::Point(177, 40));
 
-		if (_globals->_inventory._peg._sceneNumber == 4045) {
+		if (RING_INVENTORY._peg._sceneNumber == 4045) {
 			_necklace.postInit();
 			_necklace.setVisage(4045);
 			_necklace.setStrip(2);
@@ -1917,7 +1917,7 @@ void Scene4045::postInit(SceneObjectList *OwnerList) {
 
 			_olloFace.setPosition(Common::Point(177, 40));
 
-			if (_globals->_inventory._peg._sceneNumber == 4045) {
+			if (RING_INVENTORY._peg._sceneNumber == 4045) {
 				_necklace.postInit();
 				_necklace.setVisage(4045);
 				_necklace.setStrip(2);
@@ -2451,15 +2451,15 @@ void Scene4100::Action5::signal() {
 		ADD_PLAYER_MOVER(58, 151);
 		break;
 	case 1:
-		if (_globals->_inventory._ladder._sceneNumber == 4100) {
-			_globals->_inventory._ladder._sceneNumber = 1;
+		if (RING_INVENTORY._ladder._sceneNumber == 4100) {
+			RING_INVENTORY._ladder._sceneNumber = 1;
 			scene->_ladder.remove();
 		} else {
 			scene->_ladder.postInit();
 			scene->_ladder.setVisage(4101);
 			scene->_ladder.setPosition(Common::Point(49, 144));
 
-			_globals->_inventory._ladder._sceneNumber = 4100;
+			RING_INVENTORY._ladder._sceneNumber = 4100;
 			_globals->_sceneItems.push_front(&scene->_ladder);
 		}
 
@@ -2506,7 +2506,7 @@ void Scene4100::Hotspot1::doAction(int action)  {
 		SceneItem::display2(4100, 22);
 		break;
 	case CURSOR_TALK:
-		if (_globals->_inventory._peg._sceneNumber == 1) {
+		if (RING_INVENTORY._peg._sceneNumber == 1) {
 			_globals->_player.disableControl();
 			scene->_sceneMode = 4109;
 			scene->setAction(&scene->_sequenceManager, scene, 4109, NULL);
@@ -2670,7 +2670,7 @@ void Scene4100::postInit(SceneObjectList *OwnerList) {
 		_globals->_sceneItems.push_back(&_miranda);
 	}
 
-	if (_globals->_inventory._ladder._sceneNumber == 4100) {
+	if (RING_INVENTORY._ladder._sceneNumber == 4100) {
 		_ladder.postInit();
 		_ladder.setVisage(4101);
 		_ladder.setPosition(Common::Point(49, 144));
@@ -2710,7 +2710,7 @@ void Scene4100::postInit(SceneObjectList *OwnerList) {
 		_globals->_player.setPosition(Common::Point(252, 139));
 		_globals->_player.setStrip(2);
 	} else {
-		if ((_globals->_inventory._ale._sceneNumber == 4100) && !_globals->getFlag(42)) {
+		if ((RING_INVENTORY._ale._sceneNumber == 4100) && !_globals->getFlag(42)) {
 			_globals->_player.disableControl();
 			setAction(&_action3);
 		}
@@ -2884,15 +2884,15 @@ void Scene4150::Action3::signal() {
 	case 1:
 		_globals->_player.checkAngle(&scene->_hotspot3);
 
-		if (_globals->_inventory._rope._sceneNumber == 1) {
+		if (RING_INVENTORY._rope._sceneNumber == 1) {
 			scene->_hotspot3.postInit();
 			scene->_hotspot3.setVisage(4150);
 			scene->_hotspot3.setPosition(Common::Point(175, 70));
 
-			_globals->_inventory._rope._sceneNumber = 4150;
+			RING_INVENTORY._rope._sceneNumber = 4150;
 			_globals->_sceneItems.push_front(&scene->_hotspot3);
 		} else {
-			_globals->_inventory._rope._sceneNumber = 1;
+			RING_INVENTORY._rope._sceneNumber = 1;
 			scene->_hotspot3.remove();
 		}
 
@@ -3026,7 +3026,7 @@ void Scene4150::postInit(SceneObjectList *OwnerList) {
 		_globals->setFlag(44);
 	}
 
-	if (_globals->_inventory._rope._sceneNumber == 4150) {
+	if (RING_INVENTORY._rope._sceneNumber == 4150) {
 		_hotspot3.postInit();
 		_hotspot3.setVisage(4150);
 		_hotspot3.setPosition(Common::Point(175, 70));
@@ -3213,7 +3213,7 @@ void Scene4250::Action4::signal() {
 		break;
 	case 1:
 		_globals->_player.addMover(NULL);
-		scene->_stripManager.start((_globals->_inventory._helmet._sceneNumber == 4250) ? 4259 : 4256, this);
+		scene->_stripManager.start((RING_INVENTORY._helmet._sceneNumber == 4250) ? 4259 : 4256, this);
 		break;
 	case 2:
 		ADD_PLAYER_MOVER(_globals->_player._position.x + 5, _globals->_player._position.y);
@@ -3262,7 +3262,7 @@ void Scene4250::Hotspot1::doAction(int action) {
 
 	switch (action) {
 	case CURSOR_LOOK:
-		SceneItem::display2(4250, (_globals->_inventory._helmet._sceneNumber == 4250) ? 19 : 14);
+		SceneItem::display2(4250, (RING_INVENTORY._helmet._sceneNumber == 4250) ? 19 : 14);
 		break;
 	case CURSOR_TALK:
 		_globals->_player.disableControl();
@@ -3270,7 +3270,7 @@ void Scene4250::Hotspot1::doAction(int action) {
 			scene->setAction(&scene->_action3);
 		} else {
 			scene->_sceneMode = 4260;
-			if (_globals->_inventory._helmet._sceneNumber == 4250) {
+			if (RING_INVENTORY._helmet._sceneNumber == 4250) {
 				scene->_sceneMode = 4265;
 				scene->setAction(&scene->_sequenceManager, scene, 4265, this, NULL);
 			} else {
@@ -3280,13 +3280,13 @@ void Scene4250::Hotspot1::doAction(int action) {
 		}
 		break;
 	case OBJECT_SCANNER:
-		if (_globals->_inventory._helmet._sceneNumber == 4250)
+		if (RING_INVENTORY._helmet._sceneNumber == 4250)
 			SceneItem::display2(4250, 21);
 		else
 			SceneHotspot::doAction(action);
 		break;
 	case OBJECT_STUNNER:
-		if (_globals->_inventory._helmet._sceneNumber == 4250)
+		if (RING_INVENTORY._helmet._sceneNumber == 4250)
 			SceneItem::display2(4250, 22);
 		else
 			SceneHotspot::doAction(action);
@@ -3331,16 +3331,16 @@ void Scene4250::Hotspot4::doAction(int action) {
 
 	switch (action) {
 	case CURSOR_LOOK:
-		SceneItem::display2(4250, (_globals->_inventory._helmet._sceneNumber == 4250) ? 18 : 5);
+		SceneItem::display2(4250, (RING_INVENTORY._helmet._sceneNumber == 4250) ? 18 : 5);
 		break;
 	case OBJECT_SCANNER:
-		if (_globals->_inventory._helmet._sceneNumber == 4250)
+		if (RING_INVENTORY._helmet._sceneNumber == 4250)
 			SceneItem::display2(4250, 21);
 		else
 			SceneHotspot::doAction(action);
 		break;
 	case OBJECT_STUNNER:
-		if (_globals->_inventory._helmet._sceneNumber == 4250)
+		if (RING_INVENTORY._helmet._sceneNumber == 4250)
 			SceneItem::display2(4250, 22);
 		else
 			SceneHotspot::doAction(action);
@@ -3353,12 +3353,12 @@ void Scene4250::Hotspot4::doAction(int action) {
 		} else {
 			scene->_sceneMode = 4254;
 
-			if (_globals->_inventory._helmet._sceneNumber == 4250) {
+			if (RING_INVENTORY._helmet._sceneNumber == 4250) {
 				scene->_sceneMode = 4266;
 				scene->setAction(&scene->_sequenceManager, scene, 4266, this, NULL);
 			} else {
 				scene->setAction(&scene->_sequenceManager, scene,
-					(_globals->_inventory._concentrator._sceneNumber == 1) ? 4255 : 4254, NULL);
+					(RING_INVENTORY._concentrator._sceneNumber == 1) ? 4255 : 4254, NULL);
 			}
 		}
 		break;
@@ -3373,20 +3373,20 @@ void Scene4250::Hotspot6::doAction(int action) {
 
 	switch (action) {
 	case CURSOR_LOOK:
-		SceneItem::display2(4250, (_globals->_inventory._helmet._sceneNumber == 4250) ? 7 : 6);
+		SceneItem::display2(4250, (RING_INVENTORY._helmet._sceneNumber == 4250) ? 7 : 6);
 		break;
 	case OBJECT_SCANNER:
-		SceneItem::display2(4250, (_globals->_inventory._helmet._sceneNumber == 4250) ? 1 : 2);
+		SceneItem::display2(4250, (RING_INVENTORY._helmet._sceneNumber == 4250) ? 1 : 2);
 		break;
 	case OBJECT_STUNNER:
-		SceneItem::display2(4250, (_globals->_inventory._helmet._sceneNumber == 4250) ? 20 : 3);
+		SceneItem::display2(4250, (RING_INVENTORY._helmet._sceneNumber == 4250) ? 20 : 3);
 		break;
 	case OBJECT_HELMET:
 		_globals->_soundHandler.startSound(354);
 		_globals->_player.disableControl();
-		_globals->_inventory._helmet._sceneNumber = 4250;
+		RING_INVENTORY._helmet._sceneNumber = 4250;
 
-		if (_globals->_inventory._concentrator._sceneNumber == 1) {
+		if (RING_INVENTORY._concentrator._sceneNumber == 1) {
 			if (_globals->getFlag(115)) {
 				scene->_sceneMode = 4269;
 				scene->setAction(&scene->_sequenceManager, scene, 4269, this, NULL);
@@ -3395,10 +3395,10 @@ void Scene4250::Hotspot6::doAction(int action) {
 				_globals->_events.setCursor(CURSOR_WALK);
 				scene->setAction(&scene->_sequenceManager, scene, 4256, this, NULL);
 			}
-		} else if (_globals->_inventory._keyDevice._sceneNumber == 1) {
+		} else if (RING_INVENTORY._keyDevice._sceneNumber == 1) {
 			scene->_sceneMode = 4267;
 			scene->setAction(&scene->_sequenceManager, scene, 4267, this, NULL);
-		} else if (_globals->_inventory._keyDevice._sceneNumber == 4300) {
+		} else if (RING_INVENTORY._keyDevice._sceneNumber == 4300) {
 			scene->_sceneMode = 4268;
 			scene->setAction(&scene->_sequenceManager, scene, 4268, this, NULL);
 		} else {
@@ -3409,10 +3409,10 @@ void Scene4250::Hotspot6::doAction(int action) {
 		}
 		break;
 	case OBJECT_NULLIFIER:
-		if (_globals->_inventory._helmet._sceneNumber == 4250) {
+		if (RING_INVENTORY._helmet._sceneNumber == 4250) {
 			_globals->_soundHandler.startSound(353);
 			_globals->_player.disableControl();
-			_globals->_inventory._helmet._sceneNumber = 1;
+			RING_INVENTORY._helmet._sceneNumber = 1;
 
 			scene->_sceneMode = 4257;
 			scene->setAction(&scene->_sequenceManager, scene, 4257, &_globals->_player, this, NULL);
@@ -3421,7 +3421,7 @@ void Scene4250::Hotspot6::doAction(int action) {
 		}
 		break;
 	case CURSOR_TALK:
-		if (_globals->_inventory._helmet._sceneNumber == 4250)
+		if (RING_INVENTORY._helmet._sceneNumber == 4250)
 			doAction(OBJECT_HELMET);
 		else {
 			_globals->_player.disableControl();
@@ -3430,11 +3430,11 @@ void Scene4250::Hotspot6::doAction(int action) {
 		}
 		break;
 	case CURSOR_USE:
-		if (_globals->_inventory._helmet._sceneNumber == 4250)
+		if (RING_INVENTORY._helmet._sceneNumber == 4250)
 			doAction(OBJECT_HELMET);
 		else {
 			_globals->_player.disableControl();
-			if ((_globals->_inventory._items._sceneNumber != 1) || (_globals->_inventory._concentrator._sceneNumber != 1)) {
+			if ((RING_INVENTORY._items._sceneNumber != 1) || (RING_INVENTORY._concentrator._sceneNumber != 1)) {
 				scene->_sceneMode = 4258;
 				scene->setAction(&scene->_sequenceManager, scene, 4258, this, NULL);
 			} else {
@@ -3473,7 +3473,7 @@ void Scene4250::Hotspot8::doAction(int action) {
 		_globals->_player.disableControl();
 		scene->_sceneMode = 4270;
 		scene->setAction(&scene->_sequenceManager, scene,
-			(_globals->_inventory._helmet._sceneNumber == 4250) ? 4270 : 4271, NULL);
+			(RING_INVENTORY._helmet._sceneNumber == 4250) ? 4270 : 4271, NULL);
 		break;
 	default:
 		SceneHotspot::doAction(action);
@@ -3555,7 +3555,7 @@ void Scene4250::postInit(tSage::SceneObjectList *OwnerList) {
 		_hotspot6.setPriority2(70);
 		_hotspot6.setPosition(Common::Point(261, 175));
 
-		if (_globals->_inventory._helmet._sceneNumber == 4250) {
+		if (RING_INVENTORY._helmet._sceneNumber == 4250) {
 			_hotspot6.setStrip(6);
 			_hotspot6.setFrame(_hotspot6.getFrameCount());
 		}
@@ -3658,7 +3658,7 @@ void Scene4250::signal() {
 		_globals->_sceneManager.changeScene(9900);
 		break;
 	case 4261:
-		_globals->_inventory._keyDevice._sceneNumber = 1;
+		RING_INVENTORY._keyDevice._sceneNumber = 1;
 		_globals->_player.enableControl();
 		break;
 	}
@@ -3804,7 +3804,7 @@ void Scene4300::Hotspot8::doAction(int action) {
 		SceneItem::display2(4300, 19);
 		break;
 	case OBJECT_KEY_DEVICE:
-		_globals->_inventory._keyDevice._sceneNumber = 4300;
+		RING_INVENTORY._keyDevice._sceneNumber = 4300;
 		_globals->_scenePalette.addRotation(240, 254, -1);
 		animate(ANIM_MODE_5, NULL);
 
@@ -3820,15 +3820,15 @@ void Scene4300::Hotspot8::doAction(int action) {
 void Scene4300::Hotspot9::doAction(int action) {
 	switch (action) {
 	case CURSOR_LOOK:
-		if ((_globals->_inventory._stasisBox2._sceneNumber == 4300) ||
-			(_globals->_inventory._concentrator._sceneNumber == 1))
+		if ((RING_INVENTORY._stasisBox2._sceneNumber == 4300) ||
+			(RING_INVENTORY._concentrator._sceneNumber == 1))
 			SceneItem::display2(4300, 7);
 		else
 			SceneItem::display2(4300, 1);
 		break;
 	case CURSOR_USE:
-		if ((_globals->_inventory._stasisBox2._sceneNumber == 4300) ||
-			(_globals->_inventory._concentrator._sceneNumber == 1))
+		if ((RING_INVENTORY._stasisBox2._sceneNumber == 4300) ||
+			(RING_INVENTORY._concentrator._sceneNumber == 1))
 			SceneItem::display2(4300, 7);
 		else
 			SceneItem::display2(4300, 3);
@@ -3837,8 +3837,8 @@ void Scene4300::Hotspot9::doAction(int action) {
 		SceneItem::display2(4300, 24);
 		break;
 	case OBJECT_SCANNER:
-		if ((_globals->_inventory._stasisBox2._sceneNumber == 4300) ||
-			(_globals->_inventory._concentrator._sceneNumber != 1))
+		if ((RING_INVENTORY._stasisBox2._sceneNumber == 4300) ||
+			(RING_INVENTORY._concentrator._sceneNumber != 1))
 			SceneItem::display2(4300, 22);
 		else
 			SceneItem::display2(4300, 23);
@@ -3884,8 +3884,8 @@ void Scene4300::Hotspot15::signal() {
 	scene->_soundHandler2.startSound(345);
 
 	_strip = (_globals->_randomSource.getRandomNumber(6) < 2) ? 2 : 1;
-	if ((_globals->_inventory._stasisBox2._sceneNumber == 4300) ||
-			(_globals->_inventory._concentrator._sceneNumber == 1)) {
+	if ((RING_INVENTORY._stasisBox2._sceneNumber == 4300) ||
+			(RING_INVENTORY._concentrator._sceneNumber == 1)) {
 		setStrip(1);
 		setFrame(1);
 		animate(ANIM_MODE_NONE, NULL);
@@ -3902,8 +3902,8 @@ void Scene4300::Hotspot16::doAction(int action) {
 		SceneItem::display2(4300, 8);
 		break;
 	case CURSOR_USE:
-		if ((_globals->_inventory._stasisBox2._sceneNumber != 4300) &&
-				(_globals->_inventory._concentrator._sceneNumber != 4300)) {
+		if ((RING_INVENTORY._stasisBox2._sceneNumber != 4300) &&
+				(RING_INVENTORY._concentrator._sceneNumber != 4300)) {
 			SceneItem::display2(4300, 16);
 		} else {
 			scene->_sceneMode = 4302;
@@ -3927,17 +3927,17 @@ void Scene4300::Hotspot17::doAction(int action) {
 
 	switch (action) {
 	case CURSOR_LOOK:
-		SceneItem::display2(4300, (_globals->_inventory._stasisBox2._sceneNumber == 4300) ? 17 : 11);
+		SceneItem::display2(4300, (RING_INVENTORY._stasisBox2._sceneNumber == 4300) ? 17 : 11);
 		break;
 	case CURSOR_USE:
-		if (_globals->_inventory._stasisBox2._sceneNumber != 4300)
+		if (RING_INVENTORY._stasisBox2._sceneNumber != 4300)
 			SceneItem::display2(4300, 13);
 		else {
 			_globals->_scenePalette.clearListeners();
 			remove();
 
 			SceneItem::display2(4300, 12);
-			_globals->_inventory._concentrator._sceneNumber = 1;
+			RING_INVENTORY._concentrator._sceneNumber = 1;
 		}
 		break;
 	case OBJECT_SCANNER:
@@ -3968,8 +3968,8 @@ void Scene4300::Hotspot19::doAction(int action) {
 		SceneItem::display2(4300, 24);
 		break;
 	case CURSOR_USE:
-		if ((_globals->_inventory._stasisBox2._sceneNumber != 4300) &&
-				(_globals->_inventory._concentrator._sceneNumber != 4300))
+		if ((RING_INVENTORY._stasisBox2._sceneNumber != 4300) &&
+				(RING_INVENTORY._concentrator._sceneNumber != 4300))
 			SceneItem::display2(4300, 10);
 		else
 			SceneItem::display2(4300, 29);
@@ -4019,14 +4019,14 @@ void Scene4300::postInit(SceneObjectList *OwnerList) {
 		_globals->_sceneItems.push_back(&_hotspot8);
 	}
 
-	if (_globals->_inventory._concentrator._sceneNumber == 4300) {
+	if (RING_INVENTORY._concentrator._sceneNumber == 4300) {
 		_hotspot17.postInit();
 		_hotspot17.setVisage(4300);
 		_hotspot17.setStrip(6);
 		_hotspot17.setPriority2(1);
 		_hotspot17.setPosition(Common::Point(200, 69));
 
-		if (_globals->_inventory._stasisBox2._sceneNumber == 4300)
+		if (RING_INVENTORY._stasisBox2._sceneNumber == 4300)
 			_hotspot17.setFrame(_hotspot17.getFrameCount());
 
 		_globals->_sceneItems.push_back(&_hotspot17);
@@ -4056,7 +4056,7 @@ void Scene4300::postInit(SceneObjectList *OwnerList) {
 		_hotspot13.animate(ANIM_MODE_8, 0, NULL);
 	}
 
-	if (_globals->_inventory._items._sceneNumber == 4300) {
+	if (RING_INVENTORY._items._sceneNumber == 4300) {
 		_hotspot16.postInit();
 		_hotspot16.setVisage(4300);
 		_hotspot16.setPosition(Common::Point(169, 141));
@@ -4137,12 +4137,12 @@ void Scene4300::remove() {
 void Scene4300::signal() {
 	switch (_sceneMode) {
 	case 4302:
-		_globals->_inventory._items._sceneNumber = 1;
+		RING_INVENTORY._items._sceneNumber = 1;
 		_hotspot16.remove();
 		_globals->_player.enableControl();
 		break;
 	case 4303:
-		_globals->_inventory._stasisBox2._sceneNumber = 4300;
+		RING_INVENTORY._stasisBox2._sceneNumber = 4300;
 		_hotspot15.setStrip(1);
 		_hotspot15.setFrame(1);
 		_hotspot15.animate(ANIM_MODE_NONE, NULL);
@@ -4372,7 +4372,7 @@ void Scene4301::postInit(SceneObjectList *OwnerList) {
 	setZoomPercents(0, 100, 200, 100);
 
 	_field68E = false;
-	_globals->_inventory._stasisBox2._sceneNumber = 1;
+	RING_INVENTORY._stasisBox2._sceneNumber = 1;
 	_hotspot4.setup(76, 97, 102, 127, 4300, 5, 6);
 
 	_hotspot1.postInit();
diff --git a/engines/tsage/ringworld_scenes6.cpp b/engines/tsage/ringworld_scenes6.cpp
index 5fdb097..d748640 100644
--- a/engines/tsage/ringworld_scenes6.cpp
+++ b/engines/tsage/ringworld_scenes6.cpp
@@ -1158,7 +1158,7 @@ void Scene5100::postInit(SceneObjectList *OwnerList) {
 		}
 	}
 
-	if (_globals->getFlag(60) && (_globals->_inventory._stasisBox._sceneNumber == 1) &&
+	if (_globals->getFlag(60) && (RING_INVENTORY._stasisBox._sceneNumber == 1) &&
 			_globals->getFlag(107) && _globals->getFlag(67)) {
 		_hotspot8.postInit();
 		_hotspot8.setVisage(2806);
@@ -1256,7 +1256,7 @@ void Scene5100::postInit(SceneObjectList *OwnerList) {
 			_hotspot6.setStrip(6);
 			_hotspot6.setFrame(1);
 			_globals->_sceneItems.push_back(&_hotspot6);
-		} else if (_globals->_inventory._vial._sceneNumber != 5100) {
+		} else if (RING_INVENTORY._vial._sceneNumber != 5100) {
 			_hotspot6.postInit();
 			_hotspot6.setVisage(5362);
 			_hotspot6.setPosition(Common::Point(1152, 70));
@@ -1312,7 +1312,7 @@ void Scene5100::signal() {
 	case 5108:
 		if (!_globals->getFlag(60))
 			_globals->_player.enableControl();
-		else if (_globals->_inventory._stasisBox._sceneNumber == 1)
+		else if (RING_INVENTORY._stasisBox._sceneNumber == 1)
 			setAction(&_action2);
 		else
 			setAction(&_action5);
@@ -1329,7 +1329,7 @@ void Scene5100::signal() {
 		_globals->_player.setPriority2(-1);
 		_globals->_player.animate(ANIM_MODE_1, NULL);
 
-		if ((_globals->_inventory._vial._sceneNumber != 5100) && !_globals->getFlag(108)) {
+		if ((RING_INVENTORY._vial._sceneNumber != 5100) && !_globals->getFlag(108)) {
 			_globals->setFlag(108);
 			_sceneMode = 5130;
 			_globals->_player.disableControl();
@@ -1344,7 +1344,7 @@ void Scene5100::signal() {
 		break;
 	case 5116:
 		_globals->setFlag(105);
-		_globals->_inventory._bone._sceneNumber = 0;
+		RING_INVENTORY._bone._sceneNumber = 0;
 
 		_globals->_player.setObjectWrapper(new SceneObjectWrapper());
 		_globals->_player.setVisage(0);
@@ -1388,7 +1388,7 @@ void Scene5100::dispatch() {
 		_sceneMode = 5150;
 		_soundHandler.startSound(208);
 
-		if (_globals->_inventory._vial._sceneNumber == 5100) {
+		if (RING_INVENTORY._vial._sceneNumber == 5100) {
 			_globals->_player.addMover(NULL);
 			_globals->_player.disableControl();
 			SceneItem::display2(5100, 39);
@@ -1462,7 +1462,7 @@ void Scene5200::Action2::signal() {
 		scene->_soundHandler.proc3();
 		scene->_hotspot14.remove();
 
-		_globals->_inventory._stasisBox._sceneNumber = 1;
+		RING_INVENTORY._stasisBox._sceneNumber = 1;
 		_globals->_player.animate(ANIM_MODE_5, this);
 		break;
 	case 3:
@@ -1611,7 +1611,7 @@ void Scene5200::postInit(SceneObjectList *OwnerList) {
 	_speakerFLText._textPos.x = 160;
 	_speakerQText._textPos.x = 20;
 
-	if (_globals->_inventory._stasisBox._sceneNumber == 5200) {
+	if (RING_INVENTORY._stasisBox._sceneNumber == 5200) {
 		_soundHandler.startSound(216);
 		_soundHandler.proc5(true);
 
@@ -1762,7 +1762,7 @@ void Scene5300::Action1::signal() {
 		scene->_stripManager.start(5316, this);
 		break;
 	case 5:
-		if (!_globals->getFlag(106) || !_globals->getFlag(107) || (_globals->_inventory._stasisBox._sceneNumber != 1)) {
+		if (!_globals->getFlag(106) || !_globals->getFlag(107) || (RING_INVENTORY._stasisBox._sceneNumber != 1)) {
 			_globals->_player.enableControl();
 			remove();
 		} else {
@@ -1793,7 +1793,7 @@ void Scene5300::Action2::signal() {
 		scene->_stripManager.start(5328, this);
 		break;
 	case 2:
-		if (_globals->_inventory._stasisBox._sceneNumber == 1) {
+		if (RING_INVENTORY._stasisBox._sceneNumber == 1) {
 			_globals->_stripNum = 5303;
 			setDelay(5);
 		} else {
@@ -1871,7 +1871,7 @@ void Scene5300::Hotspot2::doAction(int action) {
 		} else {
 			_globals->_player.disableControl();
 
-			if (_globals->_inventory._stasisBox._sceneNumber != 1) {
+			if (RING_INVENTORY._stasisBox._sceneNumber != 1) {
 				scene->setAction(&scene->_sequenceManager, scene, 5316, NULL);
 			} else {
 				_globals->setFlag(60);
@@ -1898,7 +1898,7 @@ void Scene5300::Hotspot2::doAction(int action) {
 		if (_globals->getFlag(107)) {
 			SceneItem::display2(5300, 8);
 		} else {
-			_globals->_inventory._vial._sceneNumber = 5300;
+			RING_INVENTORY._vial._sceneNumber = 5300;
 			_globals->setFlag(107);
 			_globals->_player.disableControl();
 			scene->_sceneMode = 5304;
@@ -1920,7 +1920,7 @@ void Scene5300::Hotspot5::doAction(int action) {
 		SceneItem::display2(5300, 27);
 		break;
 	case CURSOR_USE:
-		_globals->_inventory._bone._sceneNumber = 1;
+		RING_INVENTORY._bone._sceneNumber = 1;
 		_globals->_player.disableControl();
 
 		scene->_sceneMode = 5309;
@@ -1937,20 +1937,20 @@ void Scene5300::Hotspot6::doAction(int action) {
 
 	switch (action) {
 	case CURSOR_LOOK:
-		if (!_globals->getFlag(105) || (_globals->_inventory._vial._sceneNumber == 1))
+		if (!_globals->getFlag(105) || (RING_INVENTORY._vial._sceneNumber == 1))
 			SceneItem::display2(5300, 4);
 		else
 			SceneItem::display2(5300, 26);
 		break;
 	case CURSOR_USE:
-		if (!_globals->getFlag(105) || (_globals->_inventory._vial._sceneNumber != 5100)) {
+		if (!_globals->getFlag(105) || (RING_INVENTORY._vial._sceneNumber != 5100)) {
 			_globals->_player.disableControl();
 			scene->_sceneMode = 5301;
 			scene->setAction(&scene->_sequenceManager, scene, 5301, &_globals->_player, NULL);
 		} else {
 			_globals->_player.disableControl();
 			scene->_sceneMode = 5307;
-			_globals->_inventory._vial._sceneNumber = 1;
+			RING_INVENTORY._vial._sceneNumber = 1;
 
 			scene->setAction(&scene->_sequenceManager, scene, 5307, &scene->_hotspot1, &_globals->_player,
 				&scene->_hotspot4, NULL);
@@ -2091,7 +2091,7 @@ void Scene5300::postInit(SceneObjectList *OwnerList) {
 	}
 
 	_field1B0A = 1;
-	if (_globals->_inventory._bone._sceneNumber == 5300) {
+	if (RING_INVENTORY._bone._sceneNumber == 5300) {
 		_hotspot5.postInit();
 		_hotspot5.setVisage(5301);
 		_hotspot5.setStrip(2);
@@ -2143,7 +2143,7 @@ void Scene5300::signal() {
 		_globals->clearFlag(67);
 		_globals->_player.setStrip2(-1);
 
-		if ((_globals->_inventory._vial._sceneNumber == 1) || (_globals->_inventory._vial._sceneNumber == 5300))
+		if ((RING_INVENTORY._vial._sceneNumber == 1) || (RING_INVENTORY._vial._sceneNumber == 5300))
 			_stripManager.start(5303, this);
 		else
 			_stripManager.start(5302, this);
diff --git a/engines/tsage/ringworld_scenes8.cpp b/engines/tsage/ringworld_scenes8.cpp
index 35db3cd..651f8f7 100644
--- a/engines/tsage/ringworld_scenes8.cpp
+++ b/engines/tsage/ringworld_scenes8.cpp
@@ -353,9 +353,9 @@ void Scene7000::Object1::doAction(int action) {
 	switch (action) {
 	case OBJECT_TRANSLATOR:
 		_globals->_player.disableControl();
-		_globals->_inventory._translator._sceneNumber = 7000;
-		if (_globals->_inventory._waldos._sceneNumber == 7000) {
-			if (_globals->_inventory._jar._sceneNumber == 7000) {
+		RING_INVENTORY._translator._sceneNumber = 7000;
+		if (RING_INVENTORY._waldos._sceneNumber == 7000) {
+			if (RING_INVENTORY._jar._sceneNumber == 7000) {
 				scene->_sceneMode = 7012;
 				scene->setAction(&scene->_sequenceManager, scene, 7010, &_globals->_player, &scene->_object1, 0, 0);
 			} else {
@@ -363,7 +363,7 @@ void Scene7000::Object1::doAction(int action) {
 				scene->setAction(&scene->_sequenceManager, scene, 7017, &_globals->_player, 0, 0);
 			}
 		} else {
-			if (_globals->_inventory._jar._sceneNumber == 7000) {
+			if (RING_INVENTORY._jar._sceneNumber == 7000) {
 				scene->_sceneMode = 7011;
 				scene->setAction(&scene->_sequenceManager, scene, 7010, &_globals->_player, &scene->_object1, 0, 0);
 			} else {
@@ -374,9 +374,9 @@ void Scene7000::Object1::doAction(int action) {
 		break;
 	case OBJECT_WALDOS:
 		_globals->_player.disableControl();
-		_globals->_inventory._waldos._sceneNumber = 7000;
-		if (_globals->_inventory._translator._sceneNumber == 7000) {
-			if (_globals->_inventory._jar._sceneNumber == 7000) {
+		RING_INVENTORY._waldos._sceneNumber = 7000;
+		if (RING_INVENTORY._translator._sceneNumber == 7000) {
+			if (RING_INVENTORY._jar._sceneNumber == 7000) {
 				scene->_sceneMode = 7015;
 				scene->setAction(&scene->_sequenceManager, scene, 7015, &_globals->_player, 0, 0);
 			} else {
@@ -390,9 +390,9 @@ void Scene7000::Object1::doAction(int action) {
 		break;
 	case OBJECT_JAR:
 		_globals->_player.disableControl();
-		_globals->_inventory._jar._sceneNumber = 7000;
-		if (_globals->_inventory._translator._sceneNumber == 7000) {
-			if (_globals->_inventory._waldos._sceneNumber == 7000) {
+		RING_INVENTORY._jar._sceneNumber = 7000;
+		if (RING_INVENTORY._translator._sceneNumber == 7000) {
+			if (RING_INVENTORY._waldos._sceneNumber == 7000) {
 				scene->_sceneMode = 7007;
 				scene->setAction(&scene->_sequenceManager, scene, 7007, &_globals->_player, &scene->_object1, 0, 0);
 			} else {
@@ -412,7 +412,7 @@ void Scene7000::Object1::doAction(int action) {
 		break;
 	case CURSOR_USE:
 		if (_globals->getFlag(81)) {
-			_globals->_inventory._stasisBox._sceneNumber = 1;
+			RING_INVENTORY._stasisBox._sceneNumber = 1;
 			_globals->_player.disableControl();
 			scene->setAction(&scene->_action5);
 		} else {
@@ -421,7 +421,7 @@ void Scene7000::Object1::doAction(int action) {
 		break;
 	case CURSOR_TALK:
 		if (_globals->getFlag(81)) {
-			_globals->_inventory._stasisBox._sceneNumber = 1;
+			RING_INVENTORY._stasisBox._sceneNumber = 1;
 			_globals->_player.disableControl();
 			scene->setAction(&scene->_action5);
 		} else if (_globals->getFlag(52)) {
@@ -1316,7 +1316,7 @@ void Scene7300::Action1::signal() {
 		_globals->_player.setStrip(3);
 		_globals->_player._numFrames = 5;
 		_globals->_player.animate(ANIM_MODE_2, this);
-		if (_globals->_inventory._translator._sceneNumber == 1)
+		if (RING_INVENTORY._translator._sceneNumber == 1)
 			scene->_stripManager.start(7310, this);
 		else
 			scene->_stripManager.start(7305, this);
@@ -1755,10 +1755,10 @@ void Scene7700::SceneHotspot3::doAction(int action) {
 	switch (action) {
 	case OBJECT_KEY:
 		SceneItem::display(7702, 3, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
-		_globals->_inventory._key._sceneNumber = 7700;
+		RING_INVENTORY._key._sceneNumber = 7700;
 		break;
 	case CURSOR_LOOK:
-		if (_globals->_inventory._key._sceneNumber == 7700)
+		if (RING_INVENTORY._key._sceneNumber == 7700)
 			scene->setAction(&scene->_action4, 0);
 		else
 			SceneItem::display(7700, 53, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
@@ -1767,7 +1767,7 @@ void Scene7700::SceneHotspot3::doAction(int action) {
 		if (!_globals->getFlag(78)) {
 			scene->_sceneMode = 7712;
 			scene->setAction(&scene->_sequenceManager, scene, 7715, 0);
-		} else if (_globals->_inventory._key._sceneNumber == 7700) {
+		} else if (RING_INVENTORY._key._sceneNumber == 7700) {
 			_globals->_player.disableControl();
 			scene->_sceneMode = 7705;
 			scene->setAction(&scene->_sequenceManager, scene, 7705, &_globals->_player, 0);
@@ -1809,7 +1809,7 @@ void Scene7700::SceneHotspot5::doAction(int action) {
 		break;
 	case CURSOR_USE:
 		if (_globals->getFlag(78)) {
-			if (_globals->_inventory._paper._sceneNumber == 7700) {
+			if (RING_INVENTORY._paper._sceneNumber == 7700) {
 				_globals->_player.disableControl();
 				scene->_sceneMode = 7708;
 				scene->setAction(&scene->_sequenceManager, scene, 7708, &_globals->_player, 0);
@@ -2156,8 +2156,8 @@ void Scene7700::Object11::doAction(int action) {
 			}
 			break;
 		case OBJECT_EMPTY_JAR:
-			_globals->_inventory._emptyJar._sceneNumber = 0;
-			_globals->_inventory._jar._sceneNumber = 1;
+			RING_INVENTORY._emptyJar._sceneNumber = 0;
+			RING_INVENTORY._jar._sceneNumber = 1;
 			_globals->_player.disableControl();
 			scene->_sceneMode = 7710;
 			scene->setAction(&scene->_sequenceManager, scene, 7710, &_globals->_player, NULL);
@@ -2217,7 +2217,7 @@ void Scene7700::signal() {
 		break;
 	case 7705:
 	case 7708:
-		_globals->_inventory._key._sceneNumber = 1;
+		RING_INVENTORY._key._sceneNumber = 1;
 		_globals->_player.enableControl();
 		break;
 	case 7709:
@@ -2229,7 +2229,7 @@ void Scene7700::signal() {
 		break;
 	case 7713:
 		_emptyJar.remove();
-		_globals->_inventory._emptyJar._sceneNumber = 1;
+		RING_INVENTORY._emptyJar._sceneNumber = 1;
 		break;
 	default:
 		break;
@@ -2387,7 +2387,7 @@ void Scene7700::postInit(SceneObjectList *OwnerList) {
 	if (_globals->getFlag(49))
 		_cork.setFrame(_cork.getFrameCount());
 
-	if (_globals->_inventory._emptyJar._sceneNumber == 7700) {
+	if (RING_INVENTORY._emptyJar._sceneNumber == 7700) {
 		_emptyJar.postInit();
 		_emptyJar.setVisage(7700);
 		_emptyJar.setStrip(8);
diff --git a/engines/tsage/tsage.cpp b/engines/tsage/tsage.cpp
index ba88a0b..16756f5 100644
--- a/engines/tsage/tsage.cpp
+++ b/engines/tsage/tsage.cpp
@@ -73,7 +73,8 @@ void TSageEngine::initialise() {
 	// Set up the resource manager
 	_resourceManager = new ResourceManager();
 	if (_vm->getFeatures() & GF_DEMO) {
-		_resourceManager->addLib("DEMORING.RLB");
+		// Add the single library file associated with the demo
+		_resourceManager->addLib(getPrimaryFilename());
 	} else {
 		_resourceManager->addLib("RING.RLB");
 		_resourceManager->addLib("TSAGE.RLB");
@@ -96,7 +97,7 @@ Common::Error TSageEngine::run() {
 	_globals->_events.showCursor();
 
 	_globals->_sceneHandler.registerHandler();
-	_globals->_game.execute();
+	_globals->_game->execute();
 
 	deinitialise();
 	return Common::kNoError;
diff --git a/engines/tsage/tsage.h b/engines/tsage/tsage.h
index 7be171c..e5b92e0 100644
--- a/engines/tsage/tsage.h
+++ b/engines/tsage/tsage.h
@@ -78,6 +78,7 @@ public:
 	const char *getGameId() const;
 	uint32 getGameID() const;
 	uint32 getFeatures() const;
+	Common::String getPrimaryFilename() const;
 
 	virtual Common::Error init();
 	virtual Common::Error run();






More information about the Scummvm-git-logs mailing list