aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/savegame.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/engine/savegame.cpp')
-rw-r--r--engines/sci/engine/savegame.cpp87
1 files changed, 49 insertions, 38 deletions
diff --git a/engines/sci/engine/savegame.cpp b/engines/sci/engine/savegame.cpp
index 2fd439bf4f..76ef6f7710 100644
--- a/engines/sci/engine/savegame.cpp
+++ b/engines/sci/engine/savegame.cpp
@@ -1269,8 +1269,8 @@ _cfsml_write_SegManager(Common::WriteStream *fh, SegManager* save_struc)
WSprintf(fh, "exports_wide = ");
_cfsml_write_int(fh, (int*) &(save_struc->exports_wide));
WSprintf(fh, "\n");
- WSprintf(fh, "sci1_1 = ");
- _cfsml_write_int(fh, (int*) &(save_struc->sci1_1));
+ WSprintf(fh, "isSci1_1 = ");
+ _cfsml_write_int(fh, (int*) &(save_struc->isSci1_1));
WSprintf(fh, "\n");
WSprintf(fh, "gc_mark_bits = ");
_cfsml_write_int(fh, (int*) &(save_struc->gc_mark_bits));
@@ -1399,10 +1399,10 @@ _cfsml_read_SegManager(Common::SeekableReadStream *fh, SegManager* save_struc, c
return CFSML_FAILURE;
}
} else
- if (!strcmp(token, "sci1_1")) {
+ if (!strcmp(token, "isSci1_1")) {
#line 690 "engines/sci/engine/savegame.cfsml"
- if (_cfsml_read_int(fh, (int*) &(save_struc->sci1_1), value, line, hiteof)) {
- _cfsml_error("Token expected by _cfsml_read_int() for sci1_1 at line %d\n", *line);
+ if (_cfsml_read_int(fh, (int*) &(save_struc->isSci1_1), value, line, hiteof)) {
+ _cfsml_error("Token expected by _cfsml_read_int() for isSci1_1 at line %d\n", *line);
return CFSML_FAILURE;
}
} else
@@ -4348,11 +4348,13 @@ void write_mem_obj_t(Common::WriteStream *fh, mem_obj_t *foo) {
// End of auto-generated CFSML data writer code
#line 643 "engines/sci/engine/savegame.cfsml"
break;
+ default:
+ break;
}
}
int read_mem_obj_t(Common::SeekableReadStream *fh, mem_obj_t *foo, const char *lastval, int *line, int *hiteof) {
- foo->type = mem_obj_string_to_enum(lastval);
+ foo->type = (memObjType)mem_obj_string_to_enum(lastval);
if (foo->type < 0) {
sciprintf("Unknown mem_obj_t type %s on line %d\n", lastval, *line);
return 1;
@@ -4381,7 +4383,7 @@ int read_mem_obj_t(Common::SeekableReadStream *fh, mem_obj_t *foo, const char *l
}
}
// End of auto-generated CFSML data reader code
-#line 655 "engines/sci/engine/savegame.cfsml"
+#line 657 "engines/sci/engine/savegame.cfsml"
switch (foo->type) {
case MEM_OBJ_SCRIPT:
// Auto-generated CFSML data reader code
@@ -4407,7 +4409,7 @@ int read_mem_obj_t(Common::SeekableReadStream *fh, mem_obj_t *foo, const char *l
}
}
// End of auto-generated CFSML data reader code
-#line 658 "engines/sci/engine/savegame.cfsml"
+#line 660 "engines/sci/engine/savegame.cfsml"
break;
case MEM_OBJ_CLONES:
// Auto-generated CFSML data reader code
@@ -4433,7 +4435,7 @@ int read_mem_obj_t(Common::SeekableReadStream *fh, mem_obj_t *foo, const char *l
}
}
// End of auto-generated CFSML data reader code
-#line 661 "engines/sci/engine/savegame.cfsml"
+#line 663 "engines/sci/engine/savegame.cfsml"
break;
case MEM_OBJ_LOCALS:
// Auto-generated CFSML data reader code
@@ -4459,7 +4461,7 @@ int read_mem_obj_t(Common::SeekableReadStream *fh, mem_obj_t *foo, const char *l
}
}
// End of auto-generated CFSML data reader code
-#line 664 "engines/sci/engine/savegame.cfsml"
+#line 666 "engines/sci/engine/savegame.cfsml"
break;
case MEM_OBJ_SYS_STRINGS:
// Auto-generated CFSML data reader code
@@ -4485,7 +4487,7 @@ int read_mem_obj_t(Common::SeekableReadStream *fh, mem_obj_t *foo, const char *l
}
}
// End of auto-generated CFSML data reader code
-#line 667 "engines/sci/engine/savegame.cfsml"
+#line 669 "engines/sci/engine/savegame.cfsml"
break;
case MEM_OBJ_LISTS:
// Auto-generated CFSML data reader code
@@ -4511,7 +4513,7 @@ int read_mem_obj_t(Common::SeekableReadStream *fh, mem_obj_t *foo, const char *l
}
}
// End of auto-generated CFSML data reader code
-#line 670 "engines/sci/engine/savegame.cfsml"
+#line 672 "engines/sci/engine/savegame.cfsml"
break;
case MEM_OBJ_NODES:
// Auto-generated CFSML data reader code
@@ -4537,7 +4539,7 @@ int read_mem_obj_t(Common::SeekableReadStream *fh, mem_obj_t *foo, const char *l
}
}
// End of auto-generated CFSML data reader code
-#line 673 "engines/sci/engine/savegame.cfsml"
+#line 675 "engines/sci/engine/savegame.cfsml"
break;
case MEM_OBJ_STACK:
// Auto-generated CFSML data reader code
@@ -4563,7 +4565,7 @@ int read_mem_obj_t(Common::SeekableReadStream *fh, mem_obj_t *foo, const char *l
}
}
// End of auto-generated CFSML data reader code
-#line 676 "engines/sci/engine/savegame.cfsml"
+#line 678 "engines/sci/engine/savegame.cfsml"
foo->data.stack.entries = (reg_t *)sci_calloc(foo->data.stack.nr, sizeof(reg_t));
break;
case MEM_OBJ_HUNK:
@@ -4593,8 +4595,10 @@ int read_mem_obj_t(Common::SeekableReadStream *fh, mem_obj_t *foo, const char *l
}
}
// End of auto-generated CFSML data reader code
-#line 683 "engines/sci/engine/savegame.cfsml"
+#line 685 "engines/sci/engine/savegame.cfsml"
break;
+ default:
+ break;
}
return *hiteof;
@@ -4607,7 +4611,7 @@ void write_mem_obj_tp(Common::WriteStream *fh, mem_obj_t **foo) {
write_mem_obj_t(fh, (*foo));
WSprintf(fh, "\n");
// End of auto-generated CFSML data writer code
-#line 692 "engines/sci/engine/savegame.cfsml"
+#line 696 "engines/sci/engine/savegame.cfsml"
} else { // Nothing to write
WSprintf(fh, "\\null\\");
}
@@ -4640,7 +4644,7 @@ int read_mem_obj_tp(Common::SeekableReadStream *fh, mem_obj_t **foo, const char
}
}
// End of auto-generated CFSML data reader code
-#line 703 "engines/sci/engine/savegame.cfsml"
+#line 707 "engines/sci/engine/savegame.cfsml"
return *hiteof;
}
return 0;
@@ -4694,13 +4698,13 @@ int gamestate_save(EngineState *s, Common::WriteStream *fh, const char* savename
_cfsml_write_SavegameMetadata(fh, meta);
WSprintf(fh, "\n");
// End of auto-generated CFSML data writer code
-#line 752 "engines/sci/engine/savegame.cfsml"
+#line 756 "engines/sci/engine/savegame.cfsml"
#line 814 "engines/sci/engine/savegame.cfsml"
// Auto-generated CFSML data writer code
_cfsml_write_EngineState(fh, s);
WSprintf(fh, "\n");
// End of auto-generated CFSML data writer code
-#line 753 "engines/sci/engine/savegame.cfsml"
+#line 757 "engines/sci/engine/savegame.cfsml"
delete meta;
@@ -4738,8 +4742,8 @@ static byte *find_unique_script_block(EngineState *s, byte *buf, int type) {
}
static void reconstruct_stack(EngineState *retval) {
- seg_id_t stack_seg = find_unique_seg_by_type(&retval->seg_manager, MEM_OBJ_STACK);
- dstack_t *stack = &(retval->seg_manager.heap[stack_seg]->data.stack);
+ seg_id_t stack_seg = find_unique_seg_by_type(retval->seg_manager, MEM_OBJ_STACK);
+ dstack_t *stack = &(retval->seg_manager->heap[stack_seg]->data.stack);
retval->stack_segment = stack_seg;
retval->stack_base = stack->entries;
@@ -4764,7 +4768,7 @@ static int clone_entry_used(clone_table_t *table, int n) {
static void load_script(EngineState *s, seg_id_t seg) {
resource_t *script, *heap = NULL;
- script_t *scr = &(s->seg_manager.heap[seg]->data.script);
+ script_t *scr = &(s->seg_manager->heap[seg]->data.script);
scr->buf = (byte *)malloc(scr->buf_size);
@@ -4772,13 +4776,13 @@ static void load_script(EngineState *s, seg_id_t seg) {
if (s->version >= SCI_VERSION(1,001,000))
heap = scir_find_resource(s->resmgr, sci_heap, scr->nr, 0);
- switch (s->seg_manager.sci1_1) {
+ switch (s->seg_manager->isSci1_1) {
case 0 :
- sm_mcpy_in_out(&s->seg_manager, 0, script->data, script->size, seg, SEG_ID);
+ s->seg_manager->mcpyInOut(0, script->data, script->size, seg, SEG_ID);
break;
case 1 :
- sm_mcpy_in_out(&s->seg_manager, 0, script->data, script->size, seg, SEG_ID);
- sm_mcpy_in_out(&s->seg_manager, scr->script_size, heap->data, heap->size, seg, SEG_ID);
+ s->seg_manager->mcpyInOut(0, script->data, script->size, seg, SEG_ID);
+ s->seg_manager->mcpyInOut(scr->script_size, heap->data, heap->size, seg, SEG_ID);
break;
}
}
@@ -4795,14 +4799,14 @@ static void reconstruct_scripts(EngineState *s, SegManager *self) {
script_t *scr = &mobj->data.script;
load_script(s, i);
- scr->locals_block = scr->locals_segment == 0 ? NULL : &s->seg_manager.heap[scr->locals_segment]->data.locals;
+ scr->locals_block = scr->locals_segment == 0 ? NULL : &s->seg_manager->heap[scr->locals_segment]->data.locals;
scr->export_table = (uint16 *) find_unique_script_block(s, scr->buf, sci_obj_exports);
scr->synonyms = find_unique_script_block(s, scr->buf, sci_obj_synonyms);
scr->code = NULL;
scr->code_blocks_nr = 0;
scr->code_blocks_allocated = 0;
- if (!self->sci1_1)
+ if (!self->isSci1_1)
scr->export_table += 3;
for (j = 0; j < scr->objects_nr; j++) {
@@ -4810,8 +4814,10 @@ static void reconstruct_scripts(EngineState *s, SegManager *self) {
scr->objects[j].base = scr->buf;
scr->objects[j].base_obj = data;
}
-
+ break;
}
+ default:
+ break;
}
}
}
@@ -4827,7 +4833,7 @@ static void reconstruct_scripts(EngineState *s, SegManager *self) {
for (j = 0; j < scr->objects_nr; j++) {
byte *data = scr->buf + scr->objects[j].pos.offset;
- if (self->sci1_1) {
+ if (self->isSci1_1) {
uint16 *funct_area = (uint16 *) (scr->buf + getUInt16( data + 6 ));
uint16 *prop_area = (uint16 *) (scr->buf + getUInt16( data + 4 ));
@@ -4851,7 +4857,10 @@ static void reconstruct_scripts(EngineState *s, SegManager *self) {
scr->objects[j].base_vars = (uint16 *) (data + scr->objects[j].variable_names_nr * 2 + SCRIPT_SELECTOR_OFFSET);
}
}
+ break;
}
+ default:
+ break;
}
}
}
@@ -4906,6 +4915,8 @@ void reconstruct_clones(EngineState *s, SegManager *self) {
break;
}
+ default:
+ break;
}
}
}
@@ -5003,7 +5014,7 @@ EngineState *gamestate_restore(EngineState *s, Common::SeekableReadStream *fh) {
}
}
// End of auto-generated CFSML data reader code
-#line 1027 "engines/sci/engine/savegame.cfsml"
+#line 1038 "engines/sci/engine/savegame.cfsml"
if ((meta->savegame_version < FREESCI_MINIMUM_SAVEGAME_VERSION) ||
(meta->savegame_version > FREESCI_CURRENT_SAVEGAME_VERSION)) {
if (meta->savegame_version < FREESCI_MINIMUM_SAVEGAME_VERSION)
@@ -5055,7 +5066,7 @@ EngineState *gamestate_restore(EngineState *s, Common::SeekableReadStream *fh) {
}
}
// End of auto-generated CFSML data reader code
-#line 1050 "engines/sci/engine/savegame.cfsml"
+#line 1061 "engines/sci/engine/savegame.cfsml"
sfx_exit(&s->sound);
_gamestate_unfrob(retval);
@@ -5080,15 +5091,15 @@ EngineState *gamestate_restore(EngineState *s, Common::SeekableReadStream *fh) {
_reset_graphics_input(retval);
reconstruct_stack(retval);
- reconstruct_scripts(retval, &retval->seg_manager);
- reconstruct_clones(retval, &retval->seg_manager);
+ reconstruct_scripts(retval, retval->seg_manager);
+ reconstruct_clones(retval, retval->seg_manager);
retval->game_obj = s->game_obj;
- retval->script_000 = &retval->seg_manager.heap[script_get_segment(s, 0, SCRIPT_GET_DONT_LOAD)]->data.script;
+ retval->script_000 = &retval->seg_manager->heap[script_get_segment(s, 0, SCRIPT_GET_DONT_LOAD)]->data.script;
retval->gc_countdown = GC_INTERVAL - 1;
retval->save_dir_copy = make_reg(s->sys_strings_segment, SYS_STRING_SAVEDIR);
retval->save_dir_edit_offset = 0;
- retval->sys_strings_segment = find_unique_seg_by_type(&retval->seg_manager, MEM_OBJ_SYS_STRINGS);
- retval->sys_strings = &(((mem_obj_t *)(GET_SEGMENT(retval->seg_manager, retval->sys_strings_segment, MEM_OBJ_SYS_STRINGS)))->data.sys_strings);
+ retval->sys_strings_segment = find_unique_seg_by_type(retval->seg_manager, MEM_OBJ_SYS_STRINGS);
+ retval->sys_strings = &(((mem_obj_t *)(GET_SEGMENT(*retval->seg_manager, retval->sys_strings_segment, MEM_OBJ_SYS_STRINGS)))->data.sys_strings);
sys_strings_restore(retval->sys_strings, s->sys_strings);
// Time state:
@@ -5179,7 +5190,7 @@ bool get_savegame_metadata(Common::SeekableReadStream* stream, SavegameMetadata*
}
}
// End of auto-generated CFSML data reader code
-#line 1145 "engines/sci/engine/savegame.cfsml"
+#line 1156 "engines/sci/engine/savegame.cfsml"
if (read_eof)
return false;