diff options
Diffstat (limited to 'engines/sci/engine/game.cpp')
-rw-r--r-- | engines/sci/engine/game.cpp | 177 |
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); |