aboutsummaryrefslogtreecommitdiff
path: root/engines/tsage/globals.cpp
diff options
context:
space:
mode:
authorMatthew Hoops2011-12-12 15:25:28 -0500
committerMatthew Hoops2011-12-12 15:25:28 -0500
commit00279659b22cbd5db739d5351e83a9fc2a2ae408 (patch)
tree497f06f46820043cbdf1725652b8f0073223e24a /engines/tsage/globals.cpp
parentd932df79bed5aac97e17c0920a5e75cb5ce733ee (diff)
parentd1628feb761acc9f4607f64de3eb620fea53bcc9 (diff)
downloadscummvm-rg350-00279659b22cbd5db739d5351e83a9fc2a2ae408.tar.gz
scummvm-rg350-00279659b22cbd5db739d5351e83a9fc2a2ae408.tar.bz2
scummvm-rg350-00279659b22cbd5db739d5351e83a9fc2a2ae408.zip
Merge remote branch 'upstream/master' into pegasus
Conflicts: video/qt_decoder.cpp
Diffstat (limited to 'engines/tsage/globals.cpp')
-rw-r--r--engines/tsage/globals.cpp186
1 files changed, 168 insertions, 18 deletions
diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp
index 788ab71b76..769ad4c054 100644
--- a/engines/tsage/globals.cpp
+++ b/engines/tsage/globals.cpp
@@ -25,6 +25,7 @@
#include "tsage/blue_force/blueforce_logic.h"
#include "tsage/ringworld/ringworld_demo.h"
#include "tsage/ringworld/ringworld_logic.h"
+#include "tsage/ringworld2/ringworld2_logic.h"
namespace TsAGE {
@@ -75,6 +76,17 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface
_fontColors.background = 88;
_fontColors.foreground = 92;
_dialogCenter.y = 140;
+ } else if (g_vm->getGameID() == GType_Ringworld2) {
+ // Return to Ringworld
+ _gfxFontNumber = 50;
+ _gfxColors.background = 0;
+ _gfxColors.foreground = 59;
+ _fontColors.background = 4;
+ _fontColors.foreground = 15;
+ _color1 = 59;
+ _color2 = 15;
+ _color3 = 4;
+ _dialogCenter.y = 100;
} else if ((g_vm->getGameID() == GType_Ringworld) && (g_vm->getFeatures() & GF_CD)) {
_gfxFontNumber = 50;
_gfxColors.background = 53;
@@ -85,6 +97,7 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface
_color2 = 18;
_color3 = 18;
} else {
+ // Ringworld
_gfxFontNumber = 50;
_gfxColors.background = 53;
_gfxColors.foreground = 18;
@@ -124,6 +137,12 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface
_inventory = new BlueForce::BlueForceInvObjectList();
_sceneHandler = new BlueForce::SceneHandlerExt();
break;
+
+ case GType_Ringworld2:
+ _inventory = new Ringworld2::Ringworld2InvObjectList();
+ _game = new Ringworld2::Ringworld2Game();
+ _sceneHandler = new Ringworld2::SceneHandlerExt();
+ break;
}
}
@@ -136,7 +155,7 @@ Globals::~Globals() {
}
void Globals::reset() {
- Common::set_to(&_flags[0], &_flags[MAX_FLAGS], false);
+ Common::fill(&_flags[0], &_flags[MAX_FLAGS], false);
g_saver->addFactory(classFactoryProc);
}
@@ -169,6 +188,9 @@ void Globals::synchronize(Serializer &s) {
s.syncAsSint16LE(_prevSceneOffset.x); s.syncAsSint16LE(_prevSceneOffset.y);
SYNC_POINTER(_scrollFollower);
s.syncAsSint32LE(_stripNum);
+
+ if (s.getVersion() >= 8)
+ _walkRegions.synchronize(s);
}
void Globals::dispatchSound(ASound *obj) {
@@ -181,38 +203,71 @@ void Globals::dispatchSounds() {
/*--------------------------------------------------------------------------*/
+void TsAGE2Globals::reset() {
+ Globals::reset();
+
+ // Reset the inventory
+ T2_GLOBALS._uiElements.updateInventory();
+ T2_GLOBALS._uiElements._scoreValue = 0;
+ T2_GLOBALS._uiElements._active = false;
+}
+
+void TsAGE2Globals::synchronize(Serializer &s) {
+ Globals::synchronize(s);
+
+ s.syncAsSint16LE(_interfaceY);
+}
+
+/*--------------------------------------------------------------------------*/
+
namespace BlueForce {
-BlueForceGlobals::BlueForceGlobals(): Globals() {
+BlueForceGlobals::BlueForceGlobals(): TsAGE2Globals() {
}
void BlueForceGlobals::synchronize(Serializer &s) {
- Globals::synchronize(s);
+ TsAGE2Globals::synchronize(s);
s.syncAsSint16LE(_dayNumber);
- s.syncAsSint16LE(_v4CEA4);
+ if (s.getVersion() < 9) {
+ int tmpVar = 0;
+ s.syncAsSint16LE(tmpVar);
+ }
+ s.syncAsSint16LE(_tonyDialogCtr);
s.syncAsSint16LE(_marinaWomanCtr);
+ s.syncAsSint16LE(_kateDialogCtr);
s.syncAsSint16LE(_v4CEB6);
s.syncAsSint16LE(_safeCombination);
- s.syncAsSint16LE(_v4CEC0);
- s.syncAsSint16LE(_v4CEC2);
+ s.syncAsSint16LE(_gateStatus);
+ s.syncAsSint16LE(_greenDay5TalkCtr);
s.syncAsSint16LE(_v4CEC4);
s.syncAsSint16LE(_v4CEC8);
+ s.syncAsSint16LE(_v4CECA);
+ s.syncAsSint16LE(_v4CECC);
+ for (int i = 0; i < 18; i++)
+ s.syncAsByte(_breakerBoxStatusArr[i]);
+ s.syncAsSint16LE(_hiddenDoorStatus);
+ s.syncAsSint16LE(_v4CEE2);
+ s.syncAsSint16LE(_v4CEE4);
+ s.syncAsSint16LE(_v4CEE6);
+ s.syncAsSint16LE(_v4CEE8);
s.syncAsSint16LE(_deziTopic);
s.syncAsSint16LE(_deathReason);
s.syncAsSint16LE(_driveFromScene);
s.syncAsSint16LE(_driveToScene);
+ s.syncAsSint16LE(_v501F8);
+ s.syncAsSint16LE(_v501FA);
s.syncAsSint16LE(_v501FC);
+ s.syncAsSint16LE(_v5020C);
s.syncAsSint16LE(_v50696);
- s.syncAsSint16LE(_v5098C);
- s.syncAsSint16LE(_v5098D);
+ s.syncAsSint16LE(_subFlagBitArr1);
+ s.syncAsSint16LE(_subFlagBitArr2);
s.syncAsSint16LE(_v50CC2);
s.syncAsSint16LE(_v50CC4);
s.syncAsSint16LE(_v50CC6);
s.syncAsSint16LE(_v50CC8);
s.syncAsSint16LE(_v51C42);
s.syncAsSint16LE(_v51C44);
- s.syncAsSint16LE(_interfaceY);
s.syncAsSint16LE(_bookmark);
s.syncAsSint16LE(_mapLocationId);
s.syncAsSint16LE(_clip1Bullets);
@@ -220,7 +275,7 @@ void BlueForceGlobals::synchronize(Serializer &s) {
}
void BlueForceGlobals::reset() {
- Globals::reset();
+ TsAGE2Globals::reset();
_scenePalette.clearListeners();
_scrollFollower = &_player;
@@ -228,29 +283,56 @@ void BlueForceGlobals::reset() {
// Reset the inventory
((BlueForceInvObjectList *)_inventory)->reset();
- BF_GLOBALS._uiElements.updateInventory();
- BF_GLOBALS._uiElements._scoreValue = 0;
_mapLocationId = 1;
_driveFromScene = 300;
_driveToScene = 0;
- _interfaceY = BF_INTERFACE_Y;
+ _interfaceY = UI_INTERFACE_Y;
_dayNumber = 0;
- _v4CEA4 = 0;
+ _tonyDialogCtr = 0;
_marinaWomanCtr = 0;
+ _kateDialogCtr = 0;
_v4CEB6 = 0;
_safeCombination = 0;
- _v4CEC0 = 0;
- _v4CEC2 = 0;
+ _gateStatus = 0;
+ _greenDay5TalkCtr = 0;
_v4CEC4 = 0;
_v4CEC8 = 1;
+ _v4CECA = 0;
+ _v4CECC = 0;
+ _breakerBoxStatusArr[0] = 2;
+ _breakerBoxStatusArr[1] = 2;
+ _breakerBoxStatusArr[2] = 2;
+ _breakerBoxStatusArr[3] = 1;
+ _breakerBoxStatusArr[4] = 2;
+ _breakerBoxStatusArr[5] = 2;
+ _breakerBoxStatusArr[6] = 2;
+ _breakerBoxStatusArr[7] = 2;
+ _breakerBoxStatusArr[8] = 2;
+ _breakerBoxStatusArr[9] = 2;
+ _breakerBoxStatusArr[10] = 2;
+ _breakerBoxStatusArr[11] = 2;
+ _breakerBoxStatusArr[12] = 1;
+ _breakerBoxStatusArr[13] = 1;
+ _breakerBoxStatusArr[14] = 2;
+ _breakerBoxStatusArr[15] = 2;
+ _breakerBoxStatusArr[16] = 3;
+ _breakerBoxStatusArr[17] = 0;
+ _hiddenDoorStatus = 0;
+ _v4CEE2 = 0;
+ _v4CEE4 = 0;
+ _v4CEE6 = 0;
+ _v4CEE8 = 0;
_deziTopic = 0;
_deathReason = 0;
+ _v501F8 = 0;
+ _v501FA = 0;
_v501FC = 0;
+ _v5020C = 0;
_v50696 = 0;
- _v5098C = 0;
- _v5098D = 0;
+ _subFlagBitArr1 = 0;
+ _subFlagBitArr2 = 0;
_v50CC2 = 0;
_v50CC4 = 0;
_v50CC6 = 0;
@@ -282,4 +364,72 @@ bool BlueForceGlobals::removeFlag(int flagNum) {
} // end of namespace BlueForce
+namespace Ringworld2 {
+
+void Ringworld2Globals::reset() {
+ Globals::reset();
+
+ // Reset the inventory
+ R2_INVENTORY.reset();
+ T2_GLOBALS._uiElements.updateInventory();
+ T2_GLOBALS._uiElements._active = false;
+
+ // Reset fields
+ _v5657C = 0;
+ _v565F5 = 0;
+ _v565AE = 0;
+ for (int i = 0; i < 14; i++)
+ _v56605[i] = 0;
+ _v57C2C = 0;
+ _v58CE2 = 0;
+ Common::fill(&_v565F1[0], &_v565F1[MAX_CHARACTERS], 0);
+ _speechSubtitles = SPEECH_VOICE | SPEECH_TEXT;
+ _insetUp = 0;
+
+ Common::fill(&_v565F1[0], &_v565F1[MAX_CHARACTERS], 0);
+ Common::fill(&_stripManager_lookupList[0], &_stripManager_lookupList[12], 0);
+ _stripManager_lookupList[0] = 1;
+ _stripManager_lookupList[1] = 1;
+ _stripManager_lookupList[2] = 1;
+ _stripManager_lookupList[3] = 1;
+ _stripManager_lookupList[4] = 1;
+ _stripManager_lookupList[5] = 1;
+ _stripManager_lookupList[8] = 1;
+ _stripManager_lookupList[9] = 1;
+ _stripManager_lookupList[10] = 1;
+ _stripManager_lookupList[11] = 1;
+
+ // Reset fields stored in the player class
+ _player._characterIndex = R2_QUINN;
+ _player._characterScene[1] = 100;
+ _player._characterScene[2] = 300;
+ _player._characterScene[3] = 300;
+}
+
+void Ringworld2Globals::synchronize(Serializer &s) {
+ TsAGE2Globals::synchronize(s);
+ int i;
+
+ s.syncAsSint16LE(_v5657C);
+ s.syncAsSint16LE(_v565F5);
+ s.syncAsSint16LE(_v57C2C);
+ s.syncAsSint16LE(_v58CE2);
+ s.syncAsSint16LE(_speechSubtitles);
+
+ for (i = 0; i < MAX_CHARACTERS; ++i)
+ s.syncAsSint16LE(_v565F1[i]);
+
+ s.syncAsByte(_v565AE);
+
+ for (i = 0; i < 14; ++i)
+ s.syncAsByte(_v56605[i]);
+
+ for (i = 0; i < 12; ++i)
+ s.syncAsByte(_stripManager_lookupList[i]);
+
+ s.syncAsSint16LE(_insetUp);
+}
+
+} // end of namespace Ringworld2
+
} // end of namespace TsAGE