Skip to content

Commit 48e524c

Browse files
committed
Implemented main_game_reload_map
Implemented `main_game_reload_map_by_name`
1 parent 0a164db commit 48e524c

File tree

3 files changed

+53
-22
lines changed

3 files changed

+53
-22
lines changed

game/source/cseries/language.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ void __cdecl set_current_language(e_language language)
265265
g_current_language = language;
266266
font_reload();
267267
window_manager_reset_screens();
268-
main_game_notify_language_change(language);
268+
main_game_reload_map(NONE);
269269
}
270270
}
271271

game/source/main/main_game.cpp

Lines changed: 46 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,10 @@ HOOK_DECLARE(0x00566EF0, main_game_change_immediate);
4747
//HOOK_DECLARE(0x00567270, main_game_configure_map_memory_push);
4848
HOOK_DECLARE(0x00567670, main_game_pregame_blocking_load);
4949
HOOK_DECLARE(0x00567AD0, main_game_load_panic);
50-
HOOK_DECLARE(0x00567C10, main_game_progression_request_level_advance_spoke);
51-
HOOK_DECLARE(0x00567C30, main_game_progression_request_level_advance);
52-
HOOK_DECLARE(0x00567C50, main_game_progression_request_level_advance_hub);
53-
HOOK_DECLARE(0x00567C70, main_game_progression_request_level_advance_normal);
50+
HOOK_DECLARE(0x00567C10, main_game_request_level_advance_spoke);
51+
HOOK_DECLARE(0x00567C30, main_game_request_level_advance);
52+
HOOK_DECLARE(0x00567C50, main_game_request_level_advance_hub);
53+
HOOK_DECLARE(0x00567C70, main_game_request_level_advance_normal);
5454
HOOK_DECLARE(0x00567E40, main_game_start);
5555

5656
bool debug_load_panic_to_main_menu = true;
@@ -858,17 +858,47 @@ bool __cdecl main_game_loaded_pregame()
858858
return main_game_globals.game_loaded_status == _game_loaded_status_pregame;
859859
}
860860

861-
void __cdecl main_game_notify_language_change(e_language language)
861+
void __cdecl main_game_reload_map(int32 initial_zone_set_index)
862862
{
863-
INVOKE(0x00567BF0, main_game_notify_language_change, language);
863+
//INVOKE(0x00567BF0, main_game_reload_map, initial_zone_set_index);
864864

865-
//main_game_reload_map("");
866-
//director_notify_map_reset();
865+
director_notify_map_reset();
866+
if (main_game_globals.game_loaded_status == _game_loaded_status_map_loaded)
867+
{
868+
main_game_reload_map_by_name(main_game_globals.game_loaded_scenario_path, initial_zone_set_index);
869+
}
870+
else
871+
{
872+
event(_event_warning, "main_reload_map: no game is loaded!");
873+
}
874+
}
875+
876+
void __cdecl main_game_reload_map_by_name(const char* map_name, int32 initial_zone_set_index)
877+
{
878+
//INVOKE(0x00567C00, main_game_reload_map_by_name, map_name, initial_zone_set_index);
879+
880+
if (game_in_progress())
881+
{
882+
game_options options{};
883+
csmemcpy(&options, game_options_get(), sizeof(game_options));
884+
options.scenario_path.set(map_name);
885+
if (initial_zone_set_index != NONE)
886+
{
887+
options.initial_zone_set_index = (int16)initial_zone_set_index;
888+
}
889+
options.game_simulation = _game_simulation_local;
890+
options.game_playback = _game_playback_none;
891+
csstrnzcpy(main_game_globals.game_loaded_scenario_path, map_name, NUMBEROF(main_game_globals.game_loaded_scenario_path));
892+
options.load_level_only = true;
893+
options.random_seed = generate_random_seed();
894+
game_options_validate(&options);
895+
main_game_change(&options);
896+
}
867897
}
868898

869-
void __cdecl main_game_progression_request_level_advance_spoke(int32 gp_level_index)
899+
void __cdecl main_game_request_level_advance_spoke(int32 gp_level_index)
870900
{
871-
//INVOKE(0x00567C10, main_game_progression_request_level_advance_spoke, gp_level_index);
901+
//INVOKE(0x00567C10, main_game_request_level_advance_spoke, gp_level_index);
872902

873903
ASSERT(game_is_campaign());
874904

@@ -877,19 +907,19 @@ void __cdecl main_game_progression_request_level_advance_spoke(int32 gp_level_in
877907
main_game_globals.map_advance_pending = true;
878908
}
879909

880-
void __cdecl main_game_progression_request_level_advance()
910+
void __cdecl main_game_request_level_advance()
881911
{
882-
//INVOKE(0x00567C30, main_game_progression_request_level_advance);
912+
//INVOKE(0x00567C30, main_game_request_level_advance);
883913

884914
ASSERT(game_is_campaign());
885915

886916
main_game_globals.gp_level_advance_type = _game_progression_level_none;
887917
main_game_globals.map_advance_pending = true;
888918
}
889919

890-
void __cdecl main_game_progression_request_level_advance_hub(int32 gp_level_index)
920+
void __cdecl main_game_request_level_advance_hub(int32 gp_level_index)
891921
{
892-
//INVOKE(0x00567C50, main_game_progression_request_level_advance_hub, gp_level_index);
922+
//INVOKE(0x00567C50, main_game_request_level_advance_hub, gp_level_index);
893923

894924
ASSERT(game_is_campaign());
895925

@@ -898,9 +928,9 @@ void __cdecl main_game_progression_request_level_advance_hub(int32 gp_level_inde
898928
main_game_globals.map_advance_pending = true;
899929
}
900930

901-
void __cdecl main_game_progression_request_level_advance_normal(int32 gp_level_index)
931+
void __cdecl main_game_request_level_advance_normal(int32 gp_level_index)
902932
{
903-
//INVOKE(0x00567C70, main_game_progression_request_level_advance_normal, gp_level_index);
933+
//INVOKE(0x00567C70, main_game_request_level_advance_normal, gp_level_index);
904934

905935
ASSERT(game_is_campaign());
906936

game/source/main/main_game.hpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,12 @@ extern void __cdecl main_game_load_from_core();
8181
extern bool __cdecl main_game_loaded_map();
8282
extern const char* __cdecl main_game_loaded_map_name();
8383
extern bool __cdecl main_game_loaded_pregame();
84-
extern void __cdecl main_game_notify_language_change(e_language language);
85-
extern void __cdecl main_game_progression_request_level_advance_spoke(int32 level_index);
86-
extern void __cdecl main_game_progression_request_level_advance();
87-
extern void __cdecl main_game_progression_request_level_advance_hub(int32 level_index);
88-
extern void __cdecl main_game_progression_request_level_advance_normal(int32 level_index);
84+
extern void __cdecl main_game_reload_map(int32 initial_zone_set_index);
85+
extern void __cdecl main_game_reload_map_by_name(const char* map_name, int32 initial_zone_set_index);
86+
extern void __cdecl main_game_request_level_advance_spoke(int32 level_index);
87+
extern void __cdecl main_game_request_level_advance();
88+
extern void __cdecl main_game_request_level_advance_hub(int32 level_index);
89+
extern void __cdecl main_game_request_level_advance_normal(int32 level_index);
8990
extern bool __cdecl main_game_reset_in_progress();
9091
extern void __cdecl main_game_reset_map(bool reset_map_random);
9192
extern bool __cdecl main_game_start(const game_options* options);

0 commit comments

Comments
 (0)