aboutsummaryrefslogtreecommitdiff
path: root/engines/lastexpress/game/state.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/lastexpress/game/state.h')
-rw-r--r--engines/lastexpress/game/state.h172
1 files changed, 39 insertions, 133 deletions
diff --git a/engines/lastexpress/game/state.h b/engines/lastexpress/game/state.h
index 07c1844efa..469f7a0ea2 100644
--- a/engines/lastexpress/game/state.h
+++ b/engines/lastexpress/game/state.h
@@ -28,6 +28,7 @@
#include "lastexpress/shared.h"
+#include "common/serializer.h"
#include "common/system.h"
namespace LastExpress {
@@ -40,7 +41,7 @@ class SavePoints;
class State {
public:
- struct GameProgress {
+ struct GameProgress : public Common::Serializable {
uint32 field_0;
JacketType jacket;
bool eventCorpseMovedFromFloor;
@@ -313,7 +314,15 @@ public:
* @return true if equal, false if not.
*/
bool isEqual(uint index, uint val) {
- #define EXPOSE_VALUE(idx, name) case idx: return ((uint)name == val);
+ return getValueName(index) == val;
+ }
+
+ uint32 getValueName(uint index, Common::String *name = NULL) {
+ #define EXPOSE_VALUE(idx, entryName) \
+ case idx: { \
+ if (name) (*name) = "" #entryName; \
+ return (uint32)entryName; \
+ }
switch (index) {
default:
@@ -452,144 +461,26 @@ public:
}
Common::String toString() {
-#define PRINT_VALUE(idx, name) ret += Common::String::printf("(%03d) " #name " = %d\n", idx, name);
-
Common::String ret = "";
- PRINT_VALUE(0, field_0);
- PRINT_VALUE(1, jacket);
- PRINT_VALUE(2, eventCorpseMovedFromFloor);
- PRINT_VALUE(3, field_C);
- PRINT_VALUE(4, eventCorpseFound);
- PRINT_VALUE(5, field_14);
- PRINT_VALUE(6, field_18);
- PRINT_VALUE(7, portrait);
- PRINT_VALUE(8, eventCorpseThrown);
- PRINT_VALUE(9, field_24);
- PRINT_VALUE(10, field_28);
- PRINT_VALUE(11, chapter);
- PRINT_VALUE(12, field_30);
- PRINT_VALUE(13, eventMetAugust);
- PRINT_VALUE(14, isNightTime);
- PRINT_VALUE(15, field_3C);
- PRINT_VALUE(16, field_40);
- PRINT_VALUE(17, field_44);
- PRINT_VALUE(18, field_48);
- PRINT_VALUE(19, field_4C);
- PRINT_VALUE(20, isTrainRunning);
- PRINT_VALUE(21, field_54);
- PRINT_VALUE(22, field_58);
- PRINT_VALUE(23, field_5C);
- PRINT_VALUE(24, field_60);
- PRINT_VALUE(25, field_64);
- PRINT_VALUE(26, field_68);
- PRINT_VALUE(27, eventMertensAugustWaiting);
- PRINT_VALUE(28, eventMertensKronosInvitation);
- PRINT_VALUE(29, isEggOpen);
- PRINT_VALUE(30, field_78);
- PRINT_VALUE(31, field_7C);
- PRINT_VALUE(32, field_80);
- PRINT_VALUE(33, field_84);
- PRINT_VALUE(34, field_88);
- PRINT_VALUE(35, field_8C);
- PRINT_VALUE(36, field_90);
- PRINT_VALUE(37, field_94);
- PRINT_VALUE(38, field_98);
- PRINT_VALUE(39, field_9C);
- PRINT_VALUE(40, field_A0);
- PRINT_VALUE(41, field_A4);
- PRINT_VALUE(42, field_A8);
- PRINT_VALUE(43, field_AC);
- PRINT_VALUE(44, field_B0);
- PRINT_VALUE(45, field_B4);
- PRINT_VALUE(46, field_B8);
- PRINT_VALUE(47, field_BC);
- PRINT_VALUE(48, field_C0);
- PRINT_VALUE(49, field_C4);
- PRINT_VALUE(50, field_C8);
- PRINT_VALUE(51, field_CC);
- PRINT_VALUE(52, eventMetBoutarel);
- PRINT_VALUE(53, eventMetHadija);
- PRINT_VALUE(54, eventMetYasmin);
- PRINT_VALUE(55, field_DC);
- PRINT_VALUE(56, field_E0);
- PRINT_VALUE(57, field_E4);
- PRINT_VALUE(58, field_E8);
- PRINT_VALUE(59, field_EC);
- PRINT_VALUE(60, field_F0);
- PRINT_VALUE(61, field_F4);
- PRINT_VALUE(62, field_F8);
- PRINT_VALUE(63, field_FC);
- PRINT_VALUE(64, field_100);
- PRINT_VALUE(65, field_104);
- PRINT_VALUE(66, field_108);
- PRINT_VALUE(67, field_10C);
- PRINT_VALUE(68, field_110);
- PRINT_VALUE(69, field_114);
- PRINT_VALUE(70, field_118);
- PRINT_VALUE(71, field_11C);
- PRINT_VALUE(72, field_120);
- PRINT_VALUE(73, field_124);
- PRINT_VALUE(74, field_128);
- PRINT_VALUE(75, field_12C);
- PRINT_VALUE(76, field_130);
- PRINT_VALUE(77, field_134);
- PRINT_VALUE(78, field_138);
- PRINT_VALUE(79, field_13C);
- PRINT_VALUE(80, field_140);
- PRINT_VALUE(81, field_144);
- PRINT_VALUE(82, field_148);
- PRINT_VALUE(83, field_14C);
- PRINT_VALUE(84, field_150);
- PRINT_VALUE(85, field_154);
- PRINT_VALUE(86, field_158);
- PRINT_VALUE(87, field_15C);
- PRINT_VALUE(88, field_160);
- PRINT_VALUE(89, field_164);
- PRINT_VALUE(90, field_168);
- PRINT_VALUE(91, field_16C);
- PRINT_VALUE(92, field_170);
- PRINT_VALUE(93, field_174);
- PRINT_VALUE(94, field_178);
- PRINT_VALUE(95, field_17C);
- PRINT_VALUE(96, field_180);
- PRINT_VALUE(97, field_184);
- PRINT_VALUE(98, field_188);
- PRINT_VALUE(99, field_18C);
- PRINT_VALUE(100, field_190);
- PRINT_VALUE(101, field_194);
- PRINT_VALUE(102, field_198);
- PRINT_VALUE(103, field_19C);
- PRINT_VALUE(104, field_1A0);
- PRINT_VALUE(105, field_1A4);
- PRINT_VALUE(106, field_1A8);
- PRINT_VALUE(107, field_1AC);
- PRINT_VALUE(108, field_1B0);
- PRINT_VALUE(109, field_1B4);
- PRINT_VALUE(110, field_1B8);
- PRINT_VALUE(111, field_1BC);
- PRINT_VALUE(112, field_1C0);
- PRINT_VALUE(113, field_1C4);
- PRINT_VALUE(114, field_1C8);
- PRINT_VALUE(115, field_1CC);
- PRINT_VALUE(116, field_1D0);
- PRINT_VALUE(117, field_1D4);
- PRINT_VALUE(118, field_1D8);
- PRINT_VALUE(119, field_1DC);
- PRINT_VALUE(120, field_1E0);
- PRINT_VALUE(121, field_1E4);
- PRINT_VALUE(122, field_1E8);
- PRINT_VALUE(123, field_1EC);
- PRINT_VALUE(124, field_1F0);
- PRINT_VALUE(125, field_1F4);
- PRINT_VALUE(126, field_1F8);
- PRINT_VALUE(127, field_1FC);
+ for (uint i = 0; i < 128; i++) {
+ Common::String name = "";
+ uint val = getValueName(i, &name);
+ ret += Common::String::printf("(%03d) %s = %d\n", i, name.c_str(), val);
+ }
return ret;
}
+
+ void saveLoadWithSerializer(Common::Serializer &s) {
+ for (uint i = 0; i < 128; i++) {
+ uint32 val = getValueName(i);
+ s.syncAsUint32LE(val);
+ }
+ }
};
- struct GameState {
+ struct GameState : public Common::Serializable {
// Header
uint32 brightness;
uint32 volume;
@@ -642,6 +533,21 @@ public:
return ret;
}
+
+ void saveLoadWithSerializer(Common::Serializer &s) {
+ s.syncAsUint32LE(time);
+ s.syncAsUint32LE(timeDelta);
+ s.syncAsUint32LE(timeTicks);
+ s.syncAsUint32LE(scene);
+ s.syncAsByte(sceneUseBackup);
+ s.syncAsUint32LE(sceneBackup);
+ s.syncAsUint32LE(sceneBackup2);
+ }
+
+ void saveEvents(Common::Serializer &s) {
+ for (uint i = 0; i < ARRAYSIZE(events); i++)
+ s.syncAsByte(events[i]);
+ }
};
struct Flags {