aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/game.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/engine/game.cpp')
-rw-r--r--engines/sci/engine/game.cpp177
1 files changed, 160 insertions, 17 deletions
diff --git a/engines/sci/engine/game.cpp b/engines/sci/engine/game.cpp
index 87dd1aa4f9..f76238ebce 100644
--- a/engines/sci/engine/game.cpp
+++ b/engines/sci/engine/game.cpp
@@ -266,8 +266,7 @@ static void _free_graphics_input(EngineState *s) {
s->dyn_views = NULL;
s->port = NULL;
- if (s->pics)
- free(s->pics);
+ free(s->pics);
s->pics = NULL;
}
@@ -445,6 +444,164 @@ static int create_class_table_sci0(EngineState *s) {
return 0;
}
+EngineState::EngineState() {
+ savegame_version = 0;
+
+ widget_serial_counter = 0;
+
+ resource_dir = 0;
+ work_dir = 0;
+ resmgr = 0;
+
+ game_name = 0;
+ game_version = 0;
+
+ gfx_state = 0;
+ old_screen = 0;
+
+ memset(&sound, 0, sizeof(sound)); // FIXME: Remove this once/if we C++ify sfx_state_t
+ sfx_init_flags = 0;
+ sound_volume = 0;
+ sound_mute = 0;
+
+ restarting_flags = 0;
+ have_mouse_flag = 0;
+
+ pic_not_valid = 0;
+ pic_is_new = 0;
+ onscreen_console = 0;
+ osc_backup = 0;
+
+ pic_priority_table = 0;
+
+ status_bar_text = 0;
+
+ status_bar_foreground = 0;
+ status_bar_background = 0;
+
+ game_time = 0;
+
+ save_dir_copy = NULL_REG;
+ save_dir_edit_offset = 0;
+ save_dir_copy_buf = 0;
+
+ mouse_pointer_view = 0;
+ mouse_pointer_loop = 0;
+ mouse_pointer_cel = 0;
+ save_mouse_pointer_view = 0;
+ save_mouse_pointer_loop = 0;
+ save_mouse_pointer_cel = 0;
+
+ port_serial = 0;
+ port = 0;
+
+ memset(ega_colors, 0, sizeof(ega_colors));
+
+ visual = 0;
+
+ titlebar_port = 0;
+ wm_port = 0;
+ picture_port = 0;
+ iconbar_port = 0;
+
+ memset(&pic_visible_map, 0, sizeof(pic_visible_map)); // FIXME: Remove this once/if we C++ify gfx_map_mask_t
+ pic_animate = 0;
+
+ dyn_views_list_serial = 0;
+ dyn_views = 0;
+
+ drop_views_list_serial = 0;
+ drop_views = 0;
+
+ animation_delay = 0;
+ animation_granularity = 0;
+
+ menubar = 0;
+
+ priority_first = 0;
+ priority_last = 0;
+
+ pics_drawn_nr = 0;
+ pics_nr = 0;
+ pics = 0;
+
+ last_wait_time = 0;
+
+ version_lock_flag = 0;
+ version = 0;
+ max_version = 0;
+ min_version = 0;
+
+ kernel_opt_flags = 0;
+
+ _fileHandles.resize(5);
+
+ dirseeker = 0;
+
+ execution_stack = 0;
+ execution_stack_size = 0;
+ execution_stack_pos = 0;
+ execution_stack_base = 0;
+ execution_stack_pos_changed = 0;
+
+ r_acc = NULL_REG;
+ r_amp_rest = 0;
+ r_prev = NULL_REG;
+
+ stack_segment = 0;
+ stack_base = 0;
+ stack_top = 0;
+
+ parser_segment = 0;
+ parser_base = NULL_REG;
+ parser_event = NULL_REG;
+ script_000_segment = 0;
+ script_000 = 0;
+
+ parser_lastmatch_word = 0;
+ bp_list = 0;
+ have_bp = 0;
+ debug_mode = 0;
+ sys_strings_segment = 0;
+ sys_strings = 0;
+ parser_words = 0;
+ parser_words_nr = 0;
+ parser_suffices = 0;
+ parser_suffices_nr = 0;
+ parser_branches = 0;
+ parser_rules = 0;
+ parser_branches_nr = 0;
+ memset(parser_nodes, 0, sizeof(parser_nodes));
+
+ parser_valid = 0;
+
+ synonyms = 0;
+ synonyms_nr = 0;
+
+ game_obj = NULL_REG;
+
+ classtable_size = 0;
+ classtable = 0;
+
+ seg_manager = 0;
+ gc_countdown = 0;
+
+ selector_names_nr = 0;
+ selector_names = 0;
+ kernel_names_nr = 0;
+ kernel_names = 0;
+
+ kfunct_table = 0;
+ kfunct_nr = 0;
+
+ opcodes = 0;
+
+ memset(&selector_map, 0, sizeof(selector_map)); // FIXME: Remove this once/if we C++ify selector_map_t
+ port_ID = 0;
+
+ successor = 0;
+}
+
// Architectural stuff: Init/Unintialize engine
int script_init_engine(EngineState *s, sci_version_t version) {
int result;
@@ -514,10 +671,6 @@ int script_init_engine(EngineState *s, sci_version_t version) {
s->bp_list = NULL; // No breakpoints defined
s->have_bp = 0;
- s->file_handles_nr = 5;
- s->file_handles = (FILE**)sci_calloc(sizeof(FILE *), s->file_handles_nr);
- // Allocate memory for file handles
-
s->dirseeker = 0; // Used by FileIO for FIND_FIRST, FIND_NEXT
if (s->version >= SCI_VERSION_FTU_LOFS_ABSOLUTE &&
@@ -539,8 +692,6 @@ void script_set_gamestate_save_dir(EngineState *s, const char *path) {
}
void script_free_vm_memory(EngineState *s) {
- int i;
-
sciprintf("Freeing VM memory\n");
s->save_dir_copy_buf = NULL;
@@ -548,15 +699,7 @@ void script_free_vm_memory(EngineState *s) {
s->classtable = NULL;
// Close all opened file handles
- for (i = 1; i < s->file_handles_nr; i++)
- if (s->file_handles[i])
- fclose(s->file_handles[i]);
-
- free(s->file_handles);
- s->file_handles = NULL;
-
- // FIXME: file handles will NOT be closed under DOS. DJGPP generates an
- // exception fault whenever you try to close a never-opened file
+ s->_fileHandles.clear();
}
extern void free_kfunct_tables(EngineState *s);