From bd1fd570e59675bd2e808111c3ba9683dd2d2fbe Mon Sep 17 00:00:00 2001 From: Andrew Thompson Date: Sun, 24 Nov 2024 17:48:30 -0800 Subject: [PATCH] Fix some leaks and do some cleanup --- src/engine.c | 1 - src/game/gui/textinput.c | 7 ++-- src/game/scenes/mainmenu/menu_main.c | 4 -- src/game/scenes/melee.c | 55 ++++++++++++++-------------- src/game/scenes/scoreboard.c | 1 + src/game/scenes/vs.c | 5 +-- 6 files changed, 32 insertions(+), 41 deletions(-) diff --git a/src/engine.c b/src/engine.c index 437fc8813..73f253e72 100644 --- a/src/engine.c +++ b/src/engine.c @@ -154,7 +154,6 @@ void engine_run(engine_init_flags *init_flags) { // Handle other events switch(e.type) { case SDL_QUIT: - assert(false); run = 0; break; case SDL_KEYDOWN: diff --git a/src/game/gui/textinput.c b/src/game/gui/textinput.c index 072b2360b..c03403643 100644 --- a/src/game/gui/textinput.c +++ b/src/game/gui/textinput.c @@ -27,7 +27,7 @@ typedef struct { textinput_done_cb done_cb; void *userdata; - text_object text_cache[3]; + text_object text_cache[2]; } textinput; static void textinput_render(component *c) { @@ -56,13 +56,13 @@ static void textinput_render(component *c) { text_render(&tb->text_cache[0], &tb->tconf, TEXT_DEFAULT, start_x + offset, c->y, c->w, c->h, "\x7F"); tb->tconf.halign = TEXT_CENTER; } else { - text_render(&tb->text_cache[1], &tb->tconf, TEXT_DEFAULT, start_x + offset, c->y, c->w, c->h, "\x7F"); + text_render(&tb->text_cache[0], &tb->tconf, TEXT_DEFAULT, start_x + offset, c->y, c->w, c->h, "\x7F"); } } else if(component_is_disabled(c)) { mode = TEXT_DISABLED; } - text_render(&tb->text_cache[2], &tb->tconf, mode, c->x, c->y, c->w, c->h, str_c(&tb->text)); + text_render(&tb->text_cache[1], &tb->tconf, mode, c->x, c->y, c->w, c->h, str_c(&tb->text)); } // Start from ' '. Support 0-9, ' ', and A-Z. @@ -266,6 +266,5 @@ component *textinput_create(const text_settings *tconf, int max_chars, const cha widget_set_free_cb(c, textinput_free); tb->text_cache[0].dynamic = true; tb->text_cache[1].dynamic = true; - tb->text_cache[2].dynamic = true; return c; } diff --git a/src/game/scenes/mainmenu/menu_main.c b/src/game/scenes/mainmenu/menu_main.c index fe5882291..7f056f095 100644 --- a/src/game/scenes/mainmenu/menu_main.c +++ b/src/game/scenes/mainmenu/menu_main.c @@ -113,10 +113,6 @@ component *menu_main_create(scene *s) { menu_attach(menu, textbutton_create(&tconf, "HELP", NULL, COM_DISABLED, NULL, NULL)); menu_attach(menu, textbutton_create(&tconf, "DEMO", NULL, COM_ENABLED, mainmenu_demo, s)); menu_attach(menu, textbutton_create(&tconf, "SCOREBOARD", NULL, COM_ENABLED, mainmenu_soreboard, s)); -#ifdef N64_BUILD - menu_attach(menu, textbutton_create(&tconf, "CREDITS", NULL, COM_ENABLED, mainmenu_quit, s)); -#else menu_attach(menu, textbutton_create(&tconf, "QUIT", NULL, COM_ENABLED, mainmenu_quit, s)); -#endif return menu; } diff --git a/src/game/scenes/melee.c b/src/game/scenes/melee.c index d617c7c56..6e241aa74 100644 --- a/src/game/scenes/melee.c +++ b/src/game/scenes/melee.c @@ -52,10 +52,6 @@ typedef struct { #define CURSORS_DONE(local) (local->cursor[0].done && local->cursor[1].done) #define CURSOR_NOVA_SELECT(local, player) (local->cursor[player].row == 1 && local->cursor[player].column == 2) -static const char *p1_bio_prev = NULL; -static const char *p2_bio_prev = NULL; -static text_object text_cache[18]; - typedef enum { PILOT_SELECT = 0, @@ -94,6 +90,8 @@ typedef struct { str wins_text_a; str wins_text_b; + text_object text_cache[18]; + // nova selection cheat unsigned char har_selected[2][10]; unsigned char katana_down_count[2]; @@ -105,6 +103,8 @@ void melee_free(scene *scene) { melee_local *local = scene_get_userdata(scene); game_player *player2 = game_state_get_player(scene->gs, 1); + text_objects_free(local->text_cache, 18); + surface_free(&local->bg_player_stats); surface_free(&local->bg_player_bio); surface_free(&local->select_hilight); @@ -424,9 +424,8 @@ void melee_input_tick(scene *scene) { local->cursor[1].done = 0; local->page = PILOT_SELECT; // Invalidate texture objects. - text_objects_invalidate(text_cache, sizeof(text_cache) / sizeof(text_cache[0])); - p1_bio_prev = NULL; - p2_bio_prev = NULL; + text_objects_invalidate(local->text_cache, + sizeof(local->text_cache) / sizeof(local->text_cache[0])); } else { game_state_set_next(scene->gs, SCENE_MENU); } @@ -510,12 +509,12 @@ static void render_pilot_select(melee_local *local, bool player2_is_selectable) tconf_black.cshadow = TEXT_SHADOW_BLACK; // player bio - text_render(&text_cache[0], &tconf_green, TEXT_DEFAULT, 4, 66, 156, 34, lang_get(135 + current_a)); + text_render(&local->text_cache[0], &tconf_green, TEXT_DEFAULT, 4, 66, 156, 34, lang_get(135 + current_a)); // player stats - text_render(&text_cache[1], &tconf_green, TEXT_DEFAULT, 74, 4, 85, 6, lang_get(216)); - text_render(&text_cache[2], &tconf_green, TEXT_DEFAULT, 74, 22, 85, 6, lang_get(217)); - text_render(&text_cache[3], &tconf_green, TEXT_DEFAULT, 74, 40, 85, 6, lang_get(218)); + text_render(&local->text_cache[1], &tconf_green, TEXT_DEFAULT, 74, 4, 85, 6, lang_get(216)); + text_render(&local->text_cache[2], &tconf_green, TEXT_DEFAULT, 74, 22, 85, 6, lang_get(217)); + text_render(&local->text_cache[3], &tconf_green, TEXT_DEFAULT, 74, 40, 85, 6, lang_get(218)); component_render(local->bar_power[0]); component_render(local->bar_agility[0]); component_render(local->bar_endurance[0]); @@ -523,20 +522,20 @@ static void render_pilot_select(melee_local *local, bool player2_is_selectable) object_render(&local->player2_placeholder); if(player2_is_selectable) { // player 2 name - text_render(&text_cache[4], &tconf_black, TEXT_DEFAULT, 320 - 66, 52, 66, 6, lang_get(20 + current_b)); + text_render(&local->text_cache[4], &tconf_black, TEXT_DEFAULT, 320 - 66, 52, 66, 6, lang_get(20 + current_b)); video_draw(&local->bg_player_stats, 320 - 70 - local->bg_player_stats.w, 0); video_draw(&local->bg_player_bio, 320 - local->bg_player_bio.w, 62); // player bio - text_render(&text_cache[5], &tconf_green, TEXT_DEFAULT, 320 - local->bg_player_bio.w + 4, 66, 156, 34, + text_render(&local->text_cache[5], &tconf_green, TEXT_DEFAULT, 320 - local->bg_player_bio.w + 4, 66, 156, 34, lang_get(135 + current_b)); // player stats - text_render(&text_cache[6], &tconf_green, TEXT_DEFAULT, 320 - 66 - local->bg_player_stats.w, 4, 85, 6, + text_render(&local->text_cache[6], &tconf_green, TEXT_DEFAULT, 320 - 66 - local->bg_player_stats.w, 4, 85, 6, lang_get(216)); - text_render(&text_cache[7], &tconf_green, TEXT_DEFAULT, 320 - 66 - local->bg_player_stats.w, 22, 85, 6, + text_render(&local->text_cache[7], &tconf_green, TEXT_DEFAULT, 320 - 66 - local->bg_player_stats.w, 22, 85, 6, lang_get(217)); - text_render(&text_cache[8], &tconf_green, TEXT_DEFAULT, 320 - 66 - local->bg_player_stats.w, 40, 85, 6, + text_render(&local->text_cache[8], &tconf_green, TEXT_DEFAULT, 320 - 66 - local->bg_player_stats.w, 40, 85, 6, lang_get(218)); component_render(local->bar_power[1]); @@ -544,11 +543,11 @@ static void render_pilot_select(melee_local *local, bool player2_is_selectable) component_render(local->bar_endurance[1]); } else { // 'choose your pilot' - text_render(&text_cache[9], &tconf_green, TEXT_DEFAULT, 160, 97, 160, 6, lang_get(187)); + text_render(&local->text_cache[9], &tconf_green, TEXT_DEFAULT, 160, 97, 160, 6, lang_get(187)); } // player 1 name - text_render(&text_cache[10], &tconf_black, TEXT_DEFAULT, 0, 52, 66, 6, lang_get(20 + current_a)); + text_render(&local->text_cache[10], &tconf_black, TEXT_DEFAULT, 0, 52, 66, 6, lang_get(20 + current_a)); render_highlights(local, player2_is_selectable); render_disabled_portraits(local->pilot_portraits); @@ -592,11 +591,12 @@ static void render_har_select(melee_local *local, bool player2_is_selectable) { tconf_black.cshadow = TEXT_SHADOW_BLACK; // player 1 name - text_render(&text_cache[11], &tconf_black, TEXT_DEFAULT, 0, 52, 66, 6, lang_get(20 + local->pilot_id_a)); + text_render(&local->text_cache[11], &tconf_black, TEXT_DEFAULT, 0, 52, 66, 6, lang_get(20 + local->pilot_id_a)); if(player2_is_selectable) { // player 2 name - text_render(&text_cache[12], &tconf_black, TEXT_DEFAULT, 320 - 66, 52, 66, 6, lang_get(20 + local->pilot_id_b)); + text_render(&local->text_cache[12], &tconf_black, TEXT_DEFAULT, 320 - 66, 52, 66, 6, + lang_get(20 + local->pilot_id_b)); // currently selected player object_render(&local->big_portrait_2); @@ -606,13 +606,14 @@ static void render_har_select(melee_local *local, bool player2_is_selectable) { object_render(&local->har_player2); // render HAR name (Har1 VS. Har2) - text_render(&text_cache[13], &tconf_black, TEXT_DEFAULT, 80, 107, 150, 6, str_c(&local->vs_text)); + text_render(&local->text_cache[13], &tconf_black, TEXT_DEFAULT, 80, 107, 150, 6, str_c(&local->vs_text)); } else { // 'choose your Robot' - text_render(&text_cache[14], &tconf_green, TEXT_DEFAULT, 160, 97, 160, 6, lang_get(186)); + text_render(&local->text_cache[14], &tconf_green, TEXT_DEFAULT, 160, 97, 160, 6, lang_get(186)); // render HAR name - text_render(&text_cache[15], &tconf_black, TEXT_DEFAULT, 120, 107, 60, 6, har_get_name(CURSOR_INDEX(local, 0))); + text_render(&local->text_cache[15], &tconf_black, TEXT_DEFAULT, 120, 107, 60, 6, + har_get_name(CURSOR_INDEX(local, 0))); } } @@ -635,9 +636,9 @@ void melee_render(scene *scene) { if(player2->selectable) { int text_x = 8; - text_render(&text_cache[16], &tconf_black, TEXT_DEFAULT, text_x, 107, 50, 6, str_c(&local->wins_text_a)); + text_render(&local->text_cache[16], &tconf_black, TEXT_DEFAULT, text_x, 107, 50, 6, str_c(&local->wins_text_a)); text_x = 312 - text_width(&tconf_black, str_c(&local->wins_text_b)); - text_render(&text_cache[17], &tconf_black, TEXT_DEFAULT, text_x, 107, 50, 6, str_c(&local->wins_text_b)); + text_render(&local->text_cache[17], &tconf_black, TEXT_DEFAULT, text_x, 107, 50, 6, str_c(&local->wins_text_b)); } } @@ -718,11 +719,9 @@ static void load_hars(scene *scene, melee_local *local, bool player2_is_selectab int melee_create(scene *scene) { // Init local data - p1_bio_prev = NULL; - p2_bio_prev = NULL; melee_local *local = omf_calloc(1, sizeof(melee_local)); scene_set_userdata(scene, local); - memset(text_cache, 0, sizeof(text_cache)); + memset(local->text_cache, 0, sizeof(local->text_cache)); local->cursor[1].row = 0; local->cursor[1].column = 4; diff --git a/src/game/scenes/scoreboard.c b/src/game/scenes/scoreboard.c index fe69f091b..67207b783 100644 --- a/src/game/scenes/scoreboard.c +++ b/src/game/scenes/scoreboard.c @@ -31,6 +31,7 @@ typedef struct scoreboard_local_t { void scoreboard_free(scene *scene) { scoreboard_local *local = scene_get_userdata(scene); + text_objects_free(local->text_cache, 22); omf_free(local); scene_set_userdata(scene, local); } diff --git a/src/game/scenes/vs.c b/src/game/scenes/vs.c index c97053046..bd218945e 100644 --- a/src/game/scenes/vs.c +++ b/src/game/scenes/vs.c @@ -130,11 +130,8 @@ void cb_vs_destroy_object(object *parent, int id, void *userdata) { void vs_free(scene *scene) { vs_local *local = scene_get_userdata(scene); - size_t cache_size = sizeof(local->text_cache) / sizeof(local->text_cache[0]); - for(size_t i = 0; i < cache_size; i++) { - local->text_cache[i].dirty = true; - } + text_objects_free(local->text_cache, 34); dialog_free(&local->quit_dialog); dialog_free(&local->too_pathetic_dialog); surface_free(&local->arena_select_bg);