From 809e45949537ac533d11ed82fd186a01ade6b97d Mon Sep 17 00:00:00 2001 From: Goddesen Date: Sun, 29 May 2016 03:12:31 +0200 Subject: [PATCH 1/6] Added cheat to disable plant aging --- data/language/en-GB.txt | 2 ++ src/cheats.c | 3 +++ src/cheats.h | 2 ++ src/localisation/string_ids.h | 3 +++ src/rct2/S6Exporter.cpp | 1 + src/rct2/S6Importer.cpp | 1 + src/windows/cheats.c | 16 +++++++++++----- src/world/scenery.c | 6 ++++++ 8 files changed, 29 insertions(+), 5 deletions(-) diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index 287c7602f1..ff30e63791 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -4121,6 +4121,8 @@ STR_5811 :{SMALLFONT}{BLACK}If checked, you can have up to{NEWLINE}255 cars p STR_5812 :Show multiplayer window STR_5813 :{OPENQUOTES}{STRING}{ENDQUOTES} STR_5814 :{WINDOW_COLOUR_1}{OPENQUOTES}{STRING}{ENDQUOTES} +STR_5871 :Plants don't age. +STR_5872 :{SMALLFONT}{BLACK}Disable plant aging such that they don't wilt. #tooltips STR_5815 :{SMALLFONT}{BLACK}Display FPS counter in-game diff --git a/src/cheats.c b/src/cheats.c index 8d26fe3fb0..fe6e2b51c7 100644 --- a/src/cheats.c +++ b/src/cheats.c @@ -41,6 +41,7 @@ bool gCheatsDisableLittering = false; bool gCheatsNeverendingMarketing = false; bool gCheatsFreezeClimate = false; bool gCheatsDisableTrainLengthLimit = false; +bool gCheatsDisablePlantAging = false; int park_rating_spinner_value; @@ -398,6 +399,7 @@ void game_command_cheat(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* e case CHEAT_WATERPLANTS: cheat_water_plants(); break; case CHEAT_FIXVANDALISM: cheat_fix_vandalism(); break; case CHEAT_REMOVELITTER: cheat_remove_litter(); break; + case CHEAT_DISABLEPLANTAGING: gCheatsDisablePlantAging = !gCheatsDisablePlantAging; break; case CHEAT_SETSTAFFSPEED: cheat_set_staff_speed(*edx); break; case CHEAT_RENEWRIDES: cheat_renew_rides(); break; case CHEAT_MAKEDESTRUCTIBLE: cheat_make_destructible(); break; @@ -437,4 +439,5 @@ void cheats_reset() gCheatsDisableLittering = false; gCheatsNeverendingMarketing = false; gCheatsFreezeClimate = false; + gCheatsDisablePlantAging = false; } diff --git a/src/cheats.h b/src/cheats.h index 9e66437744..81520490ad 100644 --- a/src/cheats.h +++ b/src/cheats.h @@ -35,6 +35,7 @@ extern bool gCheatsDisableLittering; extern bool gCheatsNeverendingMarketing; extern bool gCheatsFreezeClimate; extern bool gCheatsDisableTrainLengthLimit; +extern bool gCheatsDisablePlantAging; enum { CHEAT_SANDBOXMODE, @@ -60,6 +61,7 @@ enum { CHEAT_GIVEALLGUESTS, CHEAT_SETGRASSLENGTH, CHEAT_WATERPLANTS, + CHEAT_DISABLEPLANTAGING, CHEAT_FIXVANDALISM, CHEAT_REMOVELITTER, CHEAT_SETSTAFFSPEED, diff --git a/src/localisation/string_ids.h b/src/localisation/string_ids.h index ffccf487f5..4569dffa72 100644 --- a/src/localisation/string_ids.h +++ b/src/localisation/string_ids.h @@ -2644,6 +2644,9 @@ enum { STR_PROVIDER_WEBSITE = 5869, STR_SHOW_SERVER_INFO_TIP = 5870, + STR_CHEAT_DISABLE_PLANT_AGING = 5871, + STR_CHEAT_DISABLE_PLANT_AGING_TIP = 5872, + // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working STR_COUNT = 32768 }; diff --git a/src/rct2/S6Exporter.cpp b/src/rct2/S6Exporter.cpp index a03bff4dd6..ba69341cb5 100644 --- a/src/rct2/S6Exporter.cpp +++ b/src/rct2/S6Exporter.cpp @@ -562,6 +562,7 @@ extern "C" SDL_WriteU8(rw, gCheatsDisableLittering); SDL_WriteU8(rw, gCheatsNeverendingMarketing); SDL_WriteU8(rw, gCheatsFreezeClimate); + SDL_WriteU8(rw, gCheatsDisablePlantAging); gfx_invalidate_screen(); return 1; diff --git a/src/rct2/S6Importer.cpp b/src/rct2/S6Importer.cpp index ddb1d70407..406c087a00 100644 --- a/src/rct2/S6Importer.cpp +++ b/src/rct2/S6Importer.cpp @@ -518,6 +518,7 @@ extern "C" gCheatsDisableLittering = SDL_ReadU8(rw) != 0; gCheatsNeverendingMarketing = SDL_ReadU8(rw) != 0; gCheatsFreezeClimate = SDL_ReadU8(rw) != 0; + gCheatsDisablePlantAging = SDL_ReadU8(rw) != 0; gLastAutoSaveTick = SDL_GetTicks(); return 1; diff --git a/src/windows/cheats.c b/src/windows/cheats.c index 4c71203379..95706d423d 100644 --- a/src/windows/cheats.c +++ b/src/windows/cheats.c @@ -105,6 +105,7 @@ enum WINDOW_CHEATS_WIDGET_IDX { WIDX_WATER_PLANTS, WIDX_FIX_VANDALISM, WIDX_REMOVE_LITTER, + WIDX_DISABLE_PLANT_AGING, WIDX_FAST_STAFF, WIDX_NORMAL_STAFF, WIDX_RENEW_RIDES = 8, @@ -220,14 +221,15 @@ static rct_widget window_cheats_misc_widgets[] = { { WWT_CLOSEBOX, 1, XPL(0), WPL(0), YPL(8), HPL(8), STR_CHEAT_FREEZE_CLIMATE, STR_CHEAT_FREEZE_CLIMATE_TIP }, // Freeze climate { WWT_DROPDOWN, 1, XPL(1), WPL(1), YPL(9) + 2, YPL(9) + 13, STR_NONE, STR_FORCE_WEATHER_TOOLTIP }, // Force weather { WWT_DROPDOWN_BUTTON, 1, WPL(1) - 11, WPL(1) - 1, YPL(9) + 3, YPL(9) + 12, STR_DROPDOWN_GLYPH, STR_FORCE_WEATHER_TOOLTIP }, // Force weather - { WWT_GROUPBOX, 1, XPL(0) - GROUP_SPACE, WPL(1) + GROUP_SPACE, YPL(11), HPL(15.5), STR_CHEAT_STAFF_GROUP, STR_NONE }, // Staff group + { WWT_GROUPBOX, 1, XPL(0) - GROUP_SPACE, WPL(1) + GROUP_SPACE, YPL(11), HPL(16.5), STR_CHEAT_STAFF_GROUP, STR_NONE }, // Staff group { WWT_CLOSEBOX, 1, XPL(0), WPL(0), YPL(12), HPL(12), STR_CHEAT_CLEAR_GRASS, STR_NONE}, // Clear grass { WWT_CLOSEBOX, 1, XPL(1), WPL(1), YPL(12), HPL(12), STR_CHEAT_MOWED_GRASS, STR_NONE}, // Mowed grass { WWT_CLOSEBOX, 1, XPL(0), WPL(0), YPL(13), HPL(13), STR_CHEAT_WATER_PLANTS, STR_NONE}, // Water plants { WWT_CLOSEBOX, 1, XPL(1), WPL(1), YPL(13), HPL(13), STR_CHEAT_FIX_VANDALISM, STR_NONE}, // Fix vandalism { WWT_CLOSEBOX, 1, XPL(0), WPL(0), YPL(14), HPL(14), STR_CHEAT_REMOVE_LITTER, STR_NONE}, // Remove litter - { WWT_CLOSEBOX, 1, MAX_BTN_LEFT, MAX_BTN_RIGHT, YPL(15), HPL(15), STR_FAST, STR_NONE }, // Fast staff - { WWT_CLOSEBOX, 1, MIN_BTN_LEFT, MIN_BTN_RIGHT, YPL(15), HPL(15), STR_NORMAL, STR_NONE }, // Normal staff + { WWT_CHECKBOX, 1, XPL(0), WPL(0), YPL(15), HPL(15), STR_CHEAT_DISABLE_PLANT_AGING, STR_CHEAT_DISABLE_PLANT_AGING_TIP}, // Disable plant aging + { WWT_CLOSEBOX, 1, MAX_BTN_LEFT, MAX_BTN_RIGHT, YPL(16), HPL(16), STR_FAST, STR_NONE }, // Fast staff + { WWT_CLOSEBOX, 1, MIN_BTN_LEFT, MIN_BTN_RIGHT, YPL(16), HPL(16), STR_NORMAL, STR_NONE }, // Normal staff { WIDGETS_END }, @@ -411,7 +413,7 @@ static uint64 window_cheats_page_enabled_widgets[] = { (1ULL << WIDX_DISABLE_VANDALISM) | (1ULL << WIDX_DISABLE_LITTERING), (1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB_1) | (1ULL << WIDX_TAB_2) | (1ULL << WIDX_TAB_3) | (1ULL << WIDX_TAB_4) | (1ULL << WIDX_FREEZE_CLIMATE) | (1ULL << WIDX_OPEN_CLOSE_PARK) | (1ULL << WIDX_WEATHER) | (1ULL << WIDX_WEATHER_DROPDOWN_BUTTON) | (1ULL << WIDX_CLEAR_GRASS) | (1ULL << WIDX_MOWED_GRASS) | - (1ULL << WIDX_WATER_PLANTS) | (1ULL << WIDX_FIX_VANDALISM) | (1ULL << WIDX_REMOVE_LITTER) | (1ULL << WIDX_WIN_SCENARIO) | (1ULL << WIDX_HAVE_FUN) | + (1ULL << WIDX_WATER_PLANTS) | (1ULL << WIDX_DISABLE_PLANT_AGING) | (1ULL << WIDX_FIX_VANDALISM) | (1ULL << WIDX_REMOVE_LITTER) | (1ULL << WIDX_WIN_SCENARIO) | (1ULL << WIDX_HAVE_FUN) | (1ULL << WIDX_NEVERENDING_MARKETING) | (1ULL << WIDX_UNLOCK_ALL_PRICES) | (1ULL << WIDX_SANDBOX_MODE) | (1ULL << WIDX_FAST_STAFF) | (1ULL << WIDX_NORMAL_STAFF) | (1ULL << WIDX_PARK_PARAMETERS) | (1ULL << WIDX_FORCE_PARK_RATING) | (1ULL << WIDX_INCREASE_PARK_RATING) | (1ULL << WIDX_DECREASE_PARK_RATING), (1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB_1) | (1ULL << WIDX_TAB_2) | (1ULL << WIDX_TAB_3) | (1ULL << WIDX_TAB_4) | (1ULL << WIDX_RENEW_RIDES) | @@ -631,6 +633,9 @@ static void window_cheats_misc_mouseup(rct_window *w, int widgetIndex) case WIDX_REMOVE_LITTER: game_do_command(0, GAME_COMMAND_FLAG_APPLY, CHEAT_REMOVELITTER, 0, GAME_COMMAND_CHEAT, 0, 0); break; + case WIDX_DISABLE_PLANT_AGING: + game_do_command(0, GAME_COMMAND_FLAG_APPLY, CHEAT_DISABLEPLANTAGING, 0, GAME_COMMAND_CHEAT, 0, 0); + break; case WIDX_WIN_SCENARIO: game_do_command(0, GAME_COMMAND_FLAG_APPLY, CHEAT_WINSCENARIO, 0, GAME_COMMAND_CHEAT, 0, 0); break; @@ -796,6 +801,7 @@ static void window_cheats_invalidate(rct_window *w) w->widgets[WIDX_SANDBOX_MODE].image = gCheatsSandboxMode ? STR_CHEAT_SANDBOX_MODE_DISABLE : STR_CHEAT_SANDBOX_MODE; w->widgets[WIDX_FREEZE_CLIMATE].image = gCheatsFreezeClimate ? STR_CHEAT_UNFREEZE_CLIMATE : STR_CHEAT_FREEZE_CLIMATE; widget_set_checkbox_value(w, WIDX_NEVERENDING_MARKETING, gCheatsNeverendingMarketing); + widget_set_checkbox_value(w, WIDX_DISABLE_PLANT_AGING, gCheatsDisablePlantAging); break; case WINDOW_CHEATS_PAGE_RIDES: set_format_arg(0, uint16, 255); @@ -834,7 +840,7 @@ static void window_cheats_paint(rct_window *w, rct_drawpixelinfo *dpi) gfx_draw_string_left(dpi, STR_CHEAT_CLEAR_LOAN_TIP, NULL, 0, w->x + XPL(0) + TXTO, w->y + YPL(2) + TXTO); } else if(w->page == WINDOW_CHEATS_PAGE_MISC){ - gfx_draw_string_left(dpi, STR_CHEAT_STAFF_SPEED, NULL, 0, w->x + XPL(0) + TXTO, w->y + YPL(15) + TXTO); + gfx_draw_string_left(dpi, STR_CHEAT_STAFF_SPEED, NULL, 0, w->x + XPL(0) + TXTO, w->y + YPL(16) + TXTO); gfx_draw_string_left(dpi, STR_FORCE_WEATHER, NULL, 0, w->x + XPL(0) + TXTO, w->y + YPL(9) + TXTO); gfx_draw_string_right(dpi, 5182, &park_rating_spinner_value, w->colours[2], w->x + WPL(1) - 10 - TXTO, w->y + YPL(4) + TXTO); } diff --git a/src/world/scenery.c b/src/world/scenery.c index 5ca5ed329e..611f0a040d 100644 --- a/src/world/scenery.c +++ b/src/world/scenery.c @@ -19,6 +19,7 @@ #include "../common.h" #include "../localisation/localisation.h" #include "../scenario.h" +#include "../cheats.h" #include "climate.h" #include "fountain.h" #include "map.h" @@ -102,6 +103,11 @@ void scenery_update_age(int x, int y, rct_map_element *mapElement) rct_scenery_entry *sceneryEntry; sceneryEntry = get_small_scenery_entry(mapElement->properties.scenery.type); + if (gCheatsDisablePlantAging && + (sceneryEntry->small_scenery.flags & SMALL_SCENERY_FLAG_CAN_BE_WATERED)) { + return; + } + if ( !(sceneryEntry->small_scenery.flags & SMALL_SCENERY_FLAG_CAN_BE_WATERED) || (gClimateCurrentWeather < WEATHER_RAIN) || From 60fe00b08832d82c4588342d0c103949f870909c Mon Sep 17 00:00:00 2001 From: Goddesen Date: Sun, 29 May 2016 03:18:55 +0200 Subject: [PATCH 2/6] Added Goddesen to contributors. --- contributors.md | 1 + 1 file changed, 1 insertion(+) diff --git a/contributors.md b/contributors.md index e989a865a6..3da1eaa910 100644 --- a/contributors.md +++ b/contributors.md @@ -48,6 +48,7 @@ Includes all git commit authors. Aliases are GitHub user names. * Aaron van Geffen (AaronVanGeffen) - scenario select screen, font detection, misc. * MichaƂ Janiszewski (janisozaur) - Linux port, crash handling, security, misc. * Kelson Blakewood (spacek531) - title sequence for 0.0.4 +* Hugo Wallenburg (Goddesen) - Misc. ## Bug fixes * (halfbro) From 0fdeb37053a6042ed9e77e9d40a97b2f8c907c32 Mon Sep 17 00:00:00 2001 From: Goddesen Date: Sun, 29 May 2016 03:26:35 +0200 Subject: [PATCH 3/6] Fixed space indentation --- src/rct2/S6Exporter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rct2/S6Exporter.cpp b/src/rct2/S6Exporter.cpp index ba69341cb5..938e1db644 100644 --- a/src/rct2/S6Exporter.cpp +++ b/src/rct2/S6Exporter.cpp @@ -562,7 +562,7 @@ extern "C" SDL_WriteU8(rw, gCheatsDisableLittering); SDL_WriteU8(rw, gCheatsNeverendingMarketing); SDL_WriteU8(rw, gCheatsFreezeClimate); - SDL_WriteU8(rw, gCheatsDisablePlantAging); + SDL_WriteU8(rw, gCheatsDisablePlantAging); gfx_invalidate_screen(); return 1; From 5ee19db16b1f370e6db94a73c68ddd3437c6d915 Mon Sep 17 00:00:00 2001 From: Goddesen Date: Tue, 31 May 2016 22:16:48 +0200 Subject: [PATCH 4/6] Added new cheat feature to changelog --- distribution/changelog.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/distribution/changelog.txt b/distribution/changelog.txt index d64824c746..b8410cfd2f 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -7,6 +7,7 @@ - Feature: Allow up to 255 cars per train. - Feature: Importing SV4 and SC4 files with rides. - Feature: Added Norwegian translation +- Feature: Cheat to disable plant aging. - Removed: BMP screenshots. - Technical: [#3699] Assymmetric-key-based authorisation and assignment storage - Technical: Mulitplayer groups are now stored in JSON format From c004b986aee8b892bd8c18eaab03f3e415f87ea4 Mon Sep 17 00:00:00 2001 From: Goddesen Date: Wed, 1 Jun 2016 17:13:14 +0200 Subject: [PATCH 5/6] Moved new strings to uphold string ID order --- data/language/en-GB.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index ff30e63791..98804eecb7 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -4121,8 +4121,6 @@ STR_5811 :{SMALLFONT}{BLACK}If checked, you can have up to{NEWLINE}255 cars p STR_5812 :Show multiplayer window STR_5813 :{OPENQUOTES}{STRING}{ENDQUOTES} STR_5814 :{WINDOW_COLOUR_1}{OPENQUOTES}{STRING}{ENDQUOTES} -STR_5871 :Plants don't age. -STR_5872 :{SMALLFONT}{BLACK}Disable plant aging such that they don't wilt. #tooltips STR_5815 :{SMALLFONT}{BLACK}Display FPS counter in-game @@ -4181,6 +4179,8 @@ STR_5867 :{WINDOW_COLOUR_2}Provider Name: {BLACK}{STRING} STR_5868 :{WINDOW_COLOUR_2}Provider E-mail: {BLACK}{STRING} STR_5869 :{WINDOW_COLOUR_2}Provider Website: {BLACK}{STRING} STR_5870 :{SMALLFONT}{BLACK}Show server information +STR_5871 :Plants don't age. +STR_5872 :{SMALLFONT}{BLACK}Disable plant aging such that they don't wilt. ############# # Scenarios # From 4955279b7b0233a59c367ce5bb4409329a35aea0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Tue, 31 May 2016 09:06:07 +0200 Subject: [PATCH 6/6] Synchronise reset_0x69EBE4 over network Clients calling reset_0x69EBE4 not in sync is a major cause of desyncs, this change tries to force sync across clients --- src/game.c | 5 +++-- src/game.h | 5 +++-- src/network/network.cpp | 3 +++ src/network/network.h | 2 +- src/rct2/S6Exporter.cpp | 2 +- src/rct2/S6Importer.cpp | 2 +- src/world/sprite.c | 11 ++++++++++- src/world/sprite.h | 1 + 8 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/game.c b/src/game.c index cc3a4cf660..649bd29e74 100644 --- a/src/game.c +++ b/src/game.c @@ -1078,7 +1078,7 @@ void game_load_or_quit_no_save_prompt() } } -GAME_COMMAND_POINTER* new_game_command_table[67] = { +GAME_COMMAND_POINTER* new_game_command_table[68] = { game_command_set_ride_appearance, game_command_set_land_height, game_pause_toggle, @@ -1145,5 +1145,6 @@ GAME_COMMAND_POINTER* new_game_command_table[67] = { game_command_set_player_group, game_command_modify_groups, game_command_kick_player, - game_command_cheat + game_command_cheat, + game_command_reset_sprites, }; diff --git a/src/game.h b/src/game.h index e186f119dd..23ca1b3981 100644 --- a/src/game.h +++ b/src/game.h @@ -88,7 +88,8 @@ enum GAME_COMMAND { GAME_COMMAND_SET_PLAYER_GROUP, GAME_COMMAND_MODIFY_GROUPS, GAME_COMMAND_KICK_PLAYER, - GAME_COMMAND_CHEAT + GAME_COMMAND_CHEAT, + GAME_COMMAND_RESET_SPRITES, }; enum { @@ -128,7 +129,7 @@ extern rct_string_id gGameCommandErrorText; extern uint8 gErrorType; extern uint16 gErrorStringId; -extern GAME_COMMAND_POINTER* new_game_command_table[67]; +extern GAME_COMMAND_POINTER* new_game_command_table[68]; #define gCurrentTicks RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) diff --git a/src/network/network.cpp b/src/network/network.cpp index 9966c8a95e..4016479ff9 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -1477,6 +1477,9 @@ void Network::Server_Client_Joined(const char* name, const std::string &keyhash, format_string(text, STR_MULTIPLAYER_PLAYER_HAS_JOINED_THE_GAME, &player_name); chat_history_add(text); Server_Send_MAP(&connection); + // This is needed to synchronise calls to reset sprite order across clients, + // otherwise connected clients will fall out of sync in simulation. + game_do_command(0, GAME_COMMAND_FLAG_APPLY, 0, 0, GAME_COMMAND_RESET_SPRITES, 0, 0); gNetwork.Server_Send_EVENT_PLAYER_JOINED(player_name); Server_Send_GROUPLIST(connection); Server_Send_PLAYERLIST(); diff --git a/src/network/network.h b/src/network/network.h index a436a13129..1d1af8f3a3 100644 --- a/src/network/network.h +++ b/src/network/network.h @@ -54,7 +54,7 @@ extern "C" { // This define specifies which version of network stream current build uses. // It is used for making sure only compatible builds get connected, even within // single OpenRCT2 version. -#define NETWORK_STREAM_VERSION "9" +#define NETWORK_STREAM_VERSION "10" #define NETWORK_STREAM_ID OPENRCT2_VERSION "-" NETWORK_STREAM_VERSION // Fixes issues on OS X diff --git a/src/rct2/S6Exporter.cpp b/src/rct2/S6Exporter.cpp index 938e1db644..c06a2d4e18 100644 --- a/src/rct2/S6Exporter.cpp +++ b/src/rct2/S6Exporter.cpp @@ -480,7 +480,7 @@ extern "C" } map_reorganise_elements(); - reset_0x69EBE4(); + game_do_command(0, GAME_COMMAND_FLAG_APPLY, 0, 0, GAME_COMMAND_RESET_SPRITES, 0, 0); sprite_clear_all_unused(); viewport_set_saved_view(); diff --git a/src/rct2/S6Importer.cpp b/src/rct2/S6Importer.cpp index 406c087a00..25c21d3a25 100644 --- a/src/rct2/S6Importer.cpp +++ b/src/rct2/S6Importer.cpp @@ -378,7 +378,7 @@ void S6Importer::Import() } reset_loaded_objects(); map_update_tile_pointers(); - reset_0x69EBE4(); + game_do_command(0, GAME_COMMAND_FLAG_APPLY, 0, 0, GAME_COMMAND_RESET_SPRITES, 0, 0); game_convert_strings_to_utf8(); if (FixIssues) { diff --git a/src/world/sprite.c b/src/world/sprite.c index 3f2c4a4643..e6002f2141 100644 --- a/src/world/sprite.c +++ b/src/world/sprite.c @@ -17,6 +17,7 @@ #include "../addresses.h" #include "../audio/audio.h" #include "../cheats.h" +#include "../game.h" #include "../interface/viewport.h" #include "../localisation/date.h" #include "../localisation/localisation.h" @@ -121,7 +122,7 @@ void reset_sprite_list() gSpriteListCount[SPRITE_LIST_NULL] = MAX_SPRITES; - reset_0x69EBE4(); + game_do_command(0, GAME_COMMAND_FLAG_APPLY, 0, 0, GAME_COMMAND_RESET_SPRITES, 0, 0); } /** @@ -154,6 +155,14 @@ void reset_0x69EBE4() } } +void game_command_reset_sprites(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* edi, int* ebp) +{ + if (*ebx & GAME_COMMAND_FLAG_APPLY) { + reset_0x69EBE4(); + } + *ebx = 0; +} + /** * Clears all the unused sprite memory to zero. Probably so that it can be compressed better when saving. * rct2: 0x0069EBA4 diff --git a/src/world/sprite.h b/src/world/sprite.h index 3e5543ca6b..56612e4027 100644 --- a/src/world/sprite.h +++ b/src/world/sprite.h @@ -376,6 +376,7 @@ extern uint16 *gSpriteListCount; rct_sprite *create_sprite(uint8 bl); void reset_sprite_list(); +void game_command_reset_sprites(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* edi, int* ebp); void reset_0x69EBE4(); void sprite_clear_all_unused(); void move_sprite_to_list(rct_sprite *sprite, uint8 cl);