diff --git a/src/game.c b/src/game.c index 7711bd71f5..d1357b6175 100644 --- a/src/game.c +++ b/src/game.c @@ -404,7 +404,6 @@ static int game_check_affordability(int cost) return MONEY32_UNDEFINED; } -static uint32 game_do_command_table[58]; static GAME_COMMAND_POINTER* new_game_command_table[58]; /** @@ -456,12 +455,8 @@ int game_do_command_p(int command, int *eax, int *ebx, int *ecx, int *edx, int * *ebx &= ~GAME_COMMAND_FLAG_APPLY; - // Primary command - if (game_do_command_table[command] == 0) { - new_game_command_table[command](eax, ebx, ecx, edx, esi, edi, ebp); - } else { - RCT2_CALLFUNC_X(game_do_command_table[command], eax, ebx, ecx, edx, esi, edi, ebp); - } + // First call for validity and price check + new_game_command_table[command](eax, ebx, ecx, edx, esi, edi, ebp); cost = *ebx; if (cost != MONEY32_UNDEFINED) { @@ -495,12 +490,8 @@ int game_do_command_p(int command, int *eax, int *ebx, int *ecx, int *edx, int * } } - // Secondary command - if (game_do_command_table[command] == 0) { - new_game_command_table[command](eax, ebx, ecx, edx, esi, edi, ebp); - } else { - RCT2_CALLFUNC_X(game_do_command_table[command], eax, ebx, ecx, edx, esi, edi, ebp); - } + // Second call to actually perform the operation + new_game_command_table[command](eax, ebx, ecx, edx, esi, edi, ebp); if (game_command_callback) { game_command_callback(*eax, *ebx, *ecx, *edx, *esi, *edi, *ebp); @@ -1127,71 +1118,6 @@ void game_load_or_quit_no_save_prompt() } } -#pragma region Game command function table - -static uint32 game_do_command_table[58] = { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, // 10 - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, // 20 - 0, - 0, - 0, - 0, - 0x0068BC01, - 0, - 0, - 0, - 0, // use new_game_command_table, original: 0x006BEFA1, 29 - 0, // 30 - 0, - 0, - 0, - 0, - 0,//0x006649BD, //buy_land_rights - 0, - 0, - 0x006CD8CE, - 0, - 0, // 40 - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0x006CDEE4, - 0, // 50 - 0, - 0, - 0, - 0, - 0, - 0, - 0 -}; - -void game_command_emptysub(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* edi, int* ebp) {} - static GAME_COMMAND_POINTER* new_game_command_table[58] = { game_command_set_ride_appearance, game_command_set_land_height, @@ -1203,7 +1129,7 @@ static GAME_COMMAND_POINTER* new_game_command_table[58] = { game_command_demolish_ride, game_command_set_ride_status, game_command_set_ride_vehicles, - game_command_set_ride_name, // 10 + game_command_set_ride_name, game_command_set_ride_setting, game_command_place_ride_entrance_or_exit, game_command_remove_ride_entrance_or_exit, @@ -1213,27 +1139,27 @@ static GAME_COMMAND_POINTER* new_game_command_table[58] = { game_command_place_footpath, game_command_place_footpath_from_track, game_command_remove_footpath, - game_command_change_surface_style, // 20 + game_command_change_surface_style, game_command_set_ride_price, game_command_set_peep_name, game_command_raise_land, game_command_lower_land, - game_command_emptysub, + game_command_smooth_land, game_command_raise_water, game_command_lower_water, game_command_set_brakes_speed, - game_command_hire_new_staff_member, //game_command_emptysub, - game_command_set_staff_patrol, // 30 + game_command_hire_new_staff_member, + game_command_set_staff_patrol, game_command_fire_staff_member, game_command_set_staff_order, game_command_set_park_name, game_command_set_park_open, - game_command_buy_land_rights, //game_command_emptysub,//game_command_buy_land_rights, + game_command_buy_land_rights, game_command_place_park_entrance, game_command_remove_park_entrance, - game_command_emptysub, + game_command_set_maze_track, game_command_set_park_entrance_fee, - game_command_update_staff_colour, // 40 + game_command_update_staff_colour, game_command_place_fence, game_command_remove_fence, game_command_place_large_scenery, @@ -1242,8 +1168,8 @@ static GAME_COMMAND_POINTER* new_game_command_table[58] = { game_command_set_research_funding, game_command_place_track_design, game_command_start_campaign, - game_command_emptysub, - game_command_place_banner, // 50 + game_command_place_maze_design, + game_command_place_banner, game_command_remove_banner, game_command_set_scenery_colour, game_command_set_fence_colour, @@ -1252,5 +1178,3 @@ static GAME_COMMAND_POINTER* new_game_command_table[58] = { game_command_set_land_ownership, game_command_clear_scenery }; - -#pragma endregion diff --git a/src/ride/track.c b/src/ride/track.c index 99b4f19ca3..a263cb5ee6 100644 --- a/src/ride/track.c +++ b/src/ride/track.c @@ -3340,6 +3340,15 @@ void game_command_place_track_design(int* eax, int* ebx, int* ecx, int* edx, int *edi = rideIndex; } +/** + * + * rct2: 0x006CDEE4 + */ +void game_command_place_maze_design(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* edi, int* ebp) +{ + RCT2_CALLFUNC_X(0x006CDEE4, eax, ebx, ecx, edx, esi, edi, ebp); +} + /** * * rct2: 0x006D3026 @@ -4658,6 +4667,15 @@ void game_command_remove_track(int *eax, int *ebx, int *ecx, int *edx, int *esi, return; } +/** + * + * rct2: 0x006CD8CE + */ +void game_command_set_maze_track(int *eax, int *ebx, int *ecx, int *edx, int *esi, int *edi, int *ebp) +{ + RCT2_CALLFUNC_X(0x006CD8CE, eax, ebx, ecx, edx, esi, edi, ebp); +} + /** * * rct2: 0x006C5AE9 diff --git a/src/ride/track.h b/src/ride/track.h index ffe2c2e59e..e279fa1400 100644 --- a/src/ride/track.h +++ b/src/ride/track.h @@ -518,6 +518,7 @@ int save_track_design(uint8 rideIndex); int install_track(char* source_path, char* dest_name); void window_track_list_format_name(utf8 *dst, const utf8 *src, int colour, bool quotes); void game_command_place_track_design(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* edi, int* ebp); +void game_command_place_maze_design(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* edi, int* ebp); void track_save_reset_scenery(); void track_save_select_nearby_scenery(int rideIndex); @@ -529,6 +530,7 @@ const rct_track_coordinates *get_track_coord_from_ride(rct_ride *ride, int track void game_command_place_track(int *eax, int *ebx, int *ecx, int *edx, int *esi, int *edi, int *ebp); void game_command_remove_track(int *eax, int *ebx, int *ecx, int *edx, int *esi, int *edi, int *ebp); +void game_command_set_maze_track(int *eax, int *ebx, int *ecx, int *edx, int *esi, int *edi, int *ebp); void game_command_set_brakes_speed(int *eax, int *ebx, int *ecx, int *edx, int *esi, int *edi, int *ebp); void track_circuit_iterator_begin(track_circuit_iterator *it, rct_xy_element first); diff --git a/src/world/map.c b/src/world/map.c index 5960a433a7..c02691b09c 100644 --- a/src/world/map.c +++ b/src/world/map.c @@ -2051,6 +2051,15 @@ void game_command_lower_land(int* eax, int* ebx, int* ecx, int* edx, int* esi, i ); } +/** + * + * rct2: 0x0068BC01 + */ +void game_command_smooth_land(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* edi, int* ebp) +{ + RCT2_CALLFUNC_X(0x0068BC01, eax, ebx, ecx, edx, esi, edi, ebp); +} + /** * * rct2: 0x006E66A0 diff --git a/src/world/map.h b/src/world/map.h index abc1ecc6c2..d860869ec4 100644 --- a/src/world/map.h +++ b/src/world/map.h @@ -323,6 +323,7 @@ void game_command_clear_scenery(int* eax, int* ebx, int* ecx, int* edx, int* esi void game_command_change_surface_style(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* edi, int* ebp); void game_command_raise_land(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* edi, int* ebp); void game_command_lower_land(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* edi, int* ebp); +void game_command_smooth_land(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* edi, int* ebp); void game_command_raise_water(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* edi, int* ebp); void game_command_lower_water(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* edi, int* ebp); void game_command_set_water_height(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* edi, int* ebp);