From 9b199b13a7bfa821995c988417f81ae7f2a8e338 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Nov=C3=A1k?= Date: Sat, 1 Mar 2025 20:19:53 +0100 Subject: [PATCH] fix crash when switching maps in global map --- game/automap.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++-- game/gamesave.c | 50 ++++----------------------------------------- game/globals.h | 3 +++ game/realgame.c | 5 ++--- 4 files changed, 61 insertions(+), 51 deletions(-) diff --git a/game/automap.c b/game/automap.c index 1dbb9c0..f8667a5 100644 --- a/game/automap.c +++ b/game/automap.c @@ -61,7 +61,7 @@ char enable_glmap=0; static int map_xr,map_yr; static int cur_depth; -TSTR_LIST texty_v_mape=NULL; +static TSTR_LIST texty_v_mape=NULL; #define BOTT 378 #define LEFT 520 @@ -96,7 +96,6 @@ T_CLK_MAP clk_teleport_view[]= {-1,0,0,639,479,empty_clk,0xff,-1}, }; - char testclip(int x,int y) { return (y>=16 && y<360+16 && x>=8 && x<630); @@ -1054,3 +1053,54 @@ int select_teleport_target(char nolimit) disable_all_map(); return last_selected; } + + +void save_map_description(TMPFILE_WR *f) + { + int count,max; + int32_t i; + + if (texty_v_mape==NULL) max=0;else max=str_count(texty_v_mape); + for(i=0,count=0;i>3]>>(i & 7)) & 1; + if ((bf[i>>3]>>(i & 7)) & 1) map_coord[i].flags|=MC_AUTOMAP; + if (!temp_storage_read(bf,siz*1,fsta)) goto err; + for (i=0;i>3]>>(i & 7)) & 1) map_coord[i].flags|=MC_DISCLOSED; load_map_description(fsta); while (temp_storage_read(&i,1*2,fsta) && i<=mapsize*4) if (temp_storage_read(map_sides+i,1*sizeof(TSTENA),fsta)!=sizeof(TSTENA)) goto err; diff --git a/game/globals.h b/game/globals.h index 983b2df..ddce986 100644 --- a/game/globals.h +++ b/game/globals.h @@ -1406,6 +1406,9 @@ int load_map_state(void); //obnovuje stav mapy; nutno volat po zavolani load_map void restore_current_map(void); //pouze obnovuje ulozeny stav aktualni mapy int load_game(const char *fname); int save_game(long game_time,char *gamename, char is_autosave); +void save_map_description(TMPFILE_WR *f); +void load_map_description(TMPFILE_RD *f); +void free_map_description(); void wire_save_load(char save); void do_save_dialog(); char ask_save_dialog(char *name_buffer, size_t name_size); diff --git a/game/realgame.c b/game/realgame.c index b27dc4d..f504689 100644 --- a/game/realgame.c +++ b/game/realgame.c @@ -47,7 +47,7 @@ #define DIS (char *)0x1 #define START_HANDLE hl_ptr -extern TSTR_LIST texty_v_mape; + @@ -457,14 +457,13 @@ void leave_current_map() free(flag_map); free(map_coord); free(map_vyk);map_vyk=NULL;vyk_max=0; - if (texty_v_mape!=NULL)release_list(texty_v_mape); + free_map_description(); while (d_action!=NULL) { void *p=d_action; d_action=d_action->next; free(p); } - texty_v_mape=NULL; release_list(level_texts); if (mob_map!=NULL) free(mob_map); if (macro_block!=NULL)