aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/savegame.cfsml
diff options
context:
space:
mode:
authorJordi Vilalta Prat2009-02-23 00:14:51 +0000
committerJordi Vilalta Prat2009-02-23 00:14:51 +0000
commit81c6da565846a2132f75c3daa43b5b1faa26a7e4 (patch)
tree99e58343fa9474493b9b463c34a1d5cfe3ba40f9 /engines/sci/engine/savegame.cfsml
parent506e49b123d5183426d9aca92e5d1f9633d66b7a (diff)
downloadscummvm-rg350-81c6da565846a2132f75c3daa43b5b1faa26a7e4.tar.gz
scummvm-rg350-81c6da565846a2132f75c3daa43b5b1faa26a7e4.tar.bz2
scummvm-rg350-81c6da565846a2132f75c3daa43b5b1faa26a7e4.zip
SCI: Fix saving/loading (regression introduced in r38767)
svn-id: r38799
Diffstat (limited to 'engines/sci/engine/savegame.cfsml')
-rw-r--r--engines/sci/engine/savegame.cfsml24
1 files changed, 22 insertions, 2 deletions
diff --git a/engines/sci/engine/savegame.cfsml b/engines/sci/engine/savegame.cfsml
index 8aac3e5aa8..274b1a63db 100644
--- a/engines/sci/engine/savegame.cfsml
+++ b/engines/sci/engine/savegame.cfsml
@@ -211,6 +211,9 @@ int read_int_hash_map_node_tp(Common::SeekableReadStream *fh, int_hash_map_t::no
int read_song_tp(Common::SeekableReadStream *fh, song_t **foo, const char *lastval, int *line, int *hiteof);
+void write_SegManagerPtr(Common::WriteStream *fh, SegManager **foo);
+int read_SegManagerPtr(Common::SeekableReadStream *fh, SegManager **foo, const char *lastval, int *line, int *hiteof);
+
typedef mem_obj_t *mem_obj_ptr;
// Unused types
@@ -226,6 +229,7 @@ RECORD synonym_t "synonym_t" {
%CFSML
+TYPE bool "bool" LIKE int;
TYPE byte "byte" LIKE int;
TYPE seg_id_t "seg_id_t" LIKE int;
TYPE sci_version_t "sci_version_t" USING write_sci_version read_sci_version;
@@ -240,6 +244,7 @@ TYPE songlib_t "songlib_t" USING write_songlib_t read_songlib_t;
TYPE song_tp "song_t *" USING write_song_tp read_song_tp;
TYPE song_iterator_t "song_iterator_t" USING write_song_iterator_t read_song_iterator_t;
TYPE song_handle_t "song_handle_t" LIKE int;
+TYPE SegManagerPtr "SegManager *" USING write_SegManagerPtr read_SegManagerPtr;
RECORD song_t "song_t" {
song_handle_t handle;
@@ -291,7 +296,6 @@ RECORD SegManager "SegManager" {
int heap_size;
int reserved_id;
int exports_wide;
- int isSci1_1;
int gc_mark_bits;
size_t mem_allocated;
seg_id_t clones_seg_id;
@@ -325,7 +329,7 @@ RECORD EngineState "EngineState" {
menubar_tp menubar;
int status_bar_foreground;
int status_bar_background;
- SegManager seg_manager;
+ SegManagerPtr seg_manager;
int classtable_size;
class_t classtable[DYNAMIC classtable_size];
sfx_state_t sound;
@@ -709,6 +713,22 @@ int read_mem_obj_tp(Common::SeekableReadStream *fh, mem_obj_t **foo, const char
return 0;
}
+void write_SegManagerPtr(Common::WriteStream *fh, SegManager **foo) {
+ %CFSMLWRITE bool &((*foo)->isSci1_1) INTO fh;
+ %CFSMLWRITE SegManager *foo INTO fh;
+}
+
+int read_SegManagerPtr(Common::SeekableReadStream *fh, SegManager **foo, const char *lastval, int *line, int *hiteof) {
+ char *token;
+ int assignment;
+ bool sci11;
+ %CFSMLREAD bool (&sci11) FROM fh ERRVAR *hiteof FIRSTTOKEN token LINECOUNTER *line;
+ *foo = new SegManager(sci11);
+ token = _cfsml_get_identifier(fh, line, hiteof, &assignment);
+ %CFSMLREAD SegManager (*foo) FROM fh ERRVAR *hiteof FIRSTTOKEN token LINECOUNTER *line;
+ return 0;
+}
+
// This function is called to undo some strange stuff done in preparation
// to writing a gamestate to disk