From 76ccc1b54e09ff9c38eee77b2742209b6705863e Mon Sep 17 00:00:00 2001 From: Aaron van Geffen Date: Mon, 19 Aug 2024 19:28:12 +0200 Subject: [PATCH] Move nature/weather cheats to their own tab --- data/language/en-GB.txt | 3 + src/openrct2-ui/UiStringIds.h | 3 + src/openrct2-ui/windows/Cheats.cpp | 187 +++++++++++++++++++---------- 3 files changed, 131 insertions(+), 62 deletions(-) diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index da00bfff7c..3282f35cd1 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -3734,6 +3734,9 @@ STR_6661 :Randomise all STR_6662 :Randomise colours for every train or vehicle. STR_6663 :Date cheats STR_6664 :Show date cheats +STR_6665 :Nature/weather cheats +STR_6666 :Show nature/weather cheats +STR_6667 :Fauna ############# # Scenarios # diff --git a/src/openrct2-ui/UiStringIds.h b/src/openrct2-ui/UiStringIds.h index 0d7bed6961..1f9b82f935 100644 --- a/src/openrct2-ui/UiStringIds.h +++ b/src/openrct2-ui/UiStringIds.h @@ -385,6 +385,7 @@ namespace OpenRCT2 STR_CHEAT_TITLE_GUEST = 5346, STR_CHEAT_TITLE_PARK = 5347, STR_CHEAT_TITLE_RIDE = 5348, + STR_CHEAT_TITLE_WEATHER = 6665, STR_CHEAT_UNLOCK_OPERATING_LIMITS_TIP = 5585, STR_CHEAT_WEATHER_GROUP = 5465, STR_CREATE_DUCKS = 6331, @@ -394,6 +395,7 @@ namespace OpenRCT2 STR_DATE_SET = 6199, STR_DAY = 6198, STR_FAST = 5367, + STR_FAUNA = 6667, STR_FINANCIAL_CHEATS_TIP = 5178, STR_FORMAT_MONTH = 6201, STR_FROZEN = 6232, @@ -408,6 +410,7 @@ namespace OpenRCT2 STR_RIDE_CHEATS_TIP = 5181, STR_THIS_FEATURE_IS_CURRENTLY_UNSTABLE = 5563, STR_WARNING_IN_CAPS = 5562, + STR_WEATHER_NATURE_CHEATS_TIP = 6666, STR_YEAR = 6196, STR_CHEAT_IGNORE_PRICE_TIP = 6660, diff --git a/src/openrct2-ui/windows/Cheats.cpp b/src/openrct2-ui/windows/Cheats.cpp index 102900fb82..e082394623 100644 --- a/src/openrct2-ui/windows/Cheats.cpp +++ b/src/openrct2-ui/windows/Cheats.cpp @@ -41,6 +41,7 @@ enum WINDOW_CHEATS_PAGE_GUESTS, WINDOW_CHEATS_PAGE_MISC, WINDOW_CHEATS_PAGE_RIDES, + WINDOW_CHEATS_PAGE_WEATHER, WINDOW_CHEATS_PAGE_COUNT, }; @@ -75,6 +76,7 @@ enum WindowCheatsWidgetIdx WIDX_TAB_3, WIDX_TAB_4, WIDX_TAB_5, + WIDX_TAB_6, WIDX_TAB_CONTENT, WIDX_NO_MONEY = WIDX_TAB_CONTENT, @@ -129,11 +131,9 @@ enum WindowCheatsWidgetIdx WIDX_REMOVE_ALL_GUESTS, WIDX_GENERAL_GROUP = WIDX_TAB_CONTENT, - WIDX_REMOVE_PARK_FENCES, - WIDX_CREATE_DUCKS, - WIDX_OPEN_CLOSE_PARK, WIDX_OWN_ALL_LAND, - WIDX_REMOVE_DUCKS, + WIDX_REMOVE_PARK_FENCES, + WIDX_OPEN_CLOSE_PARK, WIDX_OBJECTIVE_GROUP, WIDX_NEVERENDING_MARKETING, WIDX_FORCE_PARK_RATING, @@ -142,10 +142,6 @@ enum WindowCheatsWidgetIdx WIDX_DECREASE_PARK_RATING, WIDX_WIN_SCENARIO, WIDX_HAVE_FUN, - WIDX_WEATHER_GROUP, - WIDX_WEATHER, - WIDX_WEATHER_DROPDOWN_BUTTON, - WIDX_FREEZE_WEATHER, WIDX_MAINTENANCE_GROUP, WIDX_REMOVE_LITTER, WIDX_FIX_VANDALISM, @@ -181,6 +177,14 @@ enum WindowCheatsWidgetIdx WIDX_SHOW_VEHICLES_FROM_OTHER_TRACK_TYPES, WIDX_DISABLE_TRAIN_LENGTH_LIMITS, WIDX_IGNORE_RESEARCH_STATUS, + + WIDX_WEATHER_GROUP = WIDX_TAB_CONTENT, + WIDX_WEATHER, + WIDX_WEATHER_DROPDOWN_BUTTON, + WIDX_FREEZE_WEATHER, + WIDX_FAUNA_GROUP, + WIDX_CREATE_DUCKS, + WIDX_REMOVE_DUCKS, }; #pragma region MEASUREMENTS @@ -206,7 +210,8 @@ static constexpr int32_t TAB_START = 3; MakeTab ({ 34, 17}, STR_DATE_CHEATS_TIP ), /* tab 2 */ \ MakeTab ({ 65, 17}, STR_GUEST_CHEATS_TIP ), /* tab 3 */ \ MakeTab ({ 96, 17}, STR_PARK_CHEATS_TIP ), /* tab 4 */ \ - MakeTab ({127, 17}, STR_RIDE_CHEATS_TIP ) /* tab 5 */ + MakeTab ({127, 17}, STR_RIDE_CHEATS_TIP ), /* tab 5 */ \ + MakeTab ({158, 17}, STR_WEATHER_NATURE_CHEATS_TIP ) /* tab 6 */ static Widget window_cheats_money_widgets[] = { @@ -266,16 +271,13 @@ static Widget window_cheats_guests_widgets[] = kWidgetsEnd, }; -//Strings for following moved to window_cheats_paint() static Widget window_cheats_misc_widgets[] = { MAIN_CHEATS_WIDGETS, - MakeWidget ({ 5, 48}, {238, 81}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_GENERAL_GROUP ), // General group - MakeWidget ({127, 62}, CHEAT_BUTTON, WindowWidgetType::Button, WindowColour::Secondary, STR_CHEAT_REMOVE_PARK_FENCES, STR_CHEAT_REMOVE_PARK_FENCES_TIP ), // Remove park fences - MakeWidget ({ 11, 83}, CHEAT_BUTTON, WindowWidgetType::Button, WindowColour::Secondary, STR_CREATE_DUCKS, STR_CREATE_DUCKS_TIP ), // Create ducks - MakeWidget ({ 11, 104}, CHEAT_BUTTON, WindowWidgetType::Button, WindowColour::Secondary, STR_CHEAT_OPEN_PARK, STR_CHEAT_OPEN_PARK_TIP ), // open / close park + MakeWidget ({ 5, 48}, {238, 60}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_GENERAL_GROUP ), // General group MakeWidget ({ 11, 62}, CHEAT_BUTTON, WindowWidgetType::Button, WindowColour::Secondary, STR_CHEAT_OWN_ALL_LAND, STR_CHEAT_OWN_ALL_LAND_TIP ), // Own all land - MakeWidget ({127, 83}, CHEAT_BUTTON, WindowWidgetType::Button, WindowColour::Secondary, STR_REMOVE_DUCKS, STR_REMOVE_DUCKS_TIP ), // Remove ducks + MakeWidget ({127, 62}, CHEAT_BUTTON, WindowWidgetType::Button, WindowColour::Secondary, STR_CHEAT_REMOVE_PARK_FENCES, STR_CHEAT_REMOVE_PARK_FENCES_TIP ), // Remove park fences + MakeWidget ({ 11, 83}, CHEAT_BUTTON, WindowWidgetType::Button, WindowColour::Secondary, STR_CHEAT_OPEN_PARK, STR_CHEAT_OPEN_PARK_TIP ), // open / close park MakeWidget ({ 5, 131}, {238, 75}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_OBJECTIVE_GROUP ), // Objective group MakeWidget ({ 11, 146}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_CHEAT_NEVERENDING_MARKETING, STR_CHEAT_NEVERENDING_MARKETING_TIP), // never ending marketing campaigns @@ -284,11 +286,6 @@ static Widget window_cheats_misc_widgets[] = MakeWidget ({ 11, 181}, CHEAT_BUTTON, WindowWidgetType::Button, WindowColour::Secondary, STR_CHEAT_WIN_SCENARIO ), // Win scenario MakeWidget ({127, 181}, CHEAT_BUTTON, WindowWidgetType::Button, WindowColour::Secondary, STR_CHEAT_HAVE_FUN ), // Have fun! - MakeWidget ({ 5, 207}, {238, 50}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_WEATHER_GROUP ), // Weather group - MakeWidget ({126, 221}, {111, 14}, WindowWidgetType::DropdownMenu, WindowColour::Secondary, STR_NONE, STR_CHANGE_WEATHER_TOOLTIP ), // Force weather - MakeWidget ({225, 222}, { 11, 12}, WindowWidgetType::Button, WindowColour::Secondary, STR_DROPDOWN_GLYPH, STR_CHANGE_WEATHER_TOOLTIP ), // Force weather - MakeWidget ({ 11, 239}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_CHEAT_FREEZE_WEATHER, STR_CHEAT_FREEZE_WEATHER_TIP ), // Freeze weather - MakeWidget ({ 5, 257}, {238, 99}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_MAINTENANCE_GROUP ), // Maintenance group MakeWidget ({ 11, 271}, CHEAT_BUTTON, WindowWidgetType::Button, WindowColour::Secondary, STR_CHEAT_REMOVE_LITTER ), // Remove litter MakeWidget ({127, 271}, CHEAT_BUTTON, WindowWidgetType::Button, WindowColour::Secondary, STR_CHEAT_FIX_VANDALISM ), // Fix vandalism @@ -307,6 +304,7 @@ static Widget window_cheats_misc_widgets[] = kWidgetsEnd, }; + static Widget window_cheats_rides_widgets[] = { MAIN_CHEATS_WIDGETS, @@ -334,6 +332,19 @@ static Widget window_cheats_rides_widgets[] = kWidgetsEnd, }; +static Widget window_cheats_weather_widgets[] = +{ + MAIN_CHEATS_WIDGETS, + MakeWidget ({ 5, 48}, {238, 50}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_WEATHER_GROUP ), // Weather group + MakeWidget ({126, 62}, {111, 14}, WindowWidgetType::DropdownMenu, WindowColour::Secondary, STR_NONE, STR_CHANGE_WEATHER_TOOLTIP ), // Force weather + MakeWidget ({225, 63}, { 11, 12}, WindowWidgetType::Button, WindowColour::Secondary, STR_DROPDOWN_GLYPH, STR_CHANGE_WEATHER_TOOLTIP ), // Force weather + MakeWidget ({ 11, 80}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_CHEAT_FREEZE_WEATHER, STR_CHEAT_FREEZE_WEATHER_TIP), // Freeze weather + MakeWidget ({ 5, 102}, {238, 37}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_FAUNA ), // Fauna group + MakeWidget ({ 11, 115}, CHEAT_BUTTON, WindowWidgetType::Button, WindowColour::Secondary, STR_CREATE_DUCKS, STR_CREATE_DUCKS_TIP ), // Create ducks + MakeWidget ({127, 115}, CHEAT_BUTTON, WindowWidgetType::Button, WindowColour::Secondary, STR_REMOVE_DUCKS, STR_REMOVE_DUCKS_TIP ), // Remove ducks + kWidgetsEnd, +}; + static Widget *window_cheats_page_widgets[] = { window_cheats_money_widgets, @@ -341,6 +352,7 @@ static Widget *window_cheats_page_widgets[] = window_cheats_guests_widgets, window_cheats_misc_widgets, window_cheats_rides_widgets, + window_cheats_weather_widgets, }; static uint64_t window_cheats_page_hold_down_widgets[] = { @@ -361,6 +373,8 @@ static uint64_t window_cheats_page_hold_down_widgets[] = { (1uLL << WIDX_DECREASE_PARK_RATING), 0, + + 0, }; static StringId window_cheats_page_titles[] = { @@ -369,6 +383,7 @@ static StringId window_cheats_page_titles[] = { STR_CHEAT_TITLE_GUEST, STR_CHEAT_TITLE_PARK, STR_CHEAT_TITLE_RIDE, + STR_CHEAT_TITLE_WEATHER, }; // clang-format on @@ -408,6 +423,9 @@ static StringId window_cheats_page_titles[] = { case WINDOW_CHEATS_PAGE_MISC: OnMouseDownMisc(widgetIndex); break; + case WINDOW_CHEATS_PAGE_WEATHER: + OnMouseDownWeather(widgetIndex); + break; } } @@ -423,6 +441,7 @@ static StringId window_cheats_page_titles[] = { case WIDX_TAB_3: case WIDX_TAB_4: case WIDX_TAB_5: + case WIDX_TAB_6: SetPage(widgetIndex - WIDX_TAB_1); break; default: @@ -440,6 +459,9 @@ static StringId window_cheats_page_titles[] = { case WINDOW_CHEATS_PAGE_RIDES: OnMouseUpRides(widgetIndex); break; + case WINDOW_CHEATS_PAGE_WEATHER: + OnMouseUpWeather(widgetIndex); + break; } break; } @@ -451,6 +473,10 @@ static StringId window_cheats_page_titles[] = { { OnDropdownMisc(widgetIndex, selectedIndex); } + else if (page == WINDOW_CHEATS_PAGE_WEATHER) + { + OnDropdownWeather(widgetIndex, selectedIndex); + } } void OnPrepareDraw() override @@ -505,7 +531,6 @@ static StringId window_cheats_page_titles[] = { widgets[WIDX_OPEN_CLOSE_PARK].text = STR_CHEAT_CLOSE_PARK; SetCheckboxValue(WIDX_FORCE_PARK_RATING, Park::GetForcedRating() >= 0); - SetCheckboxValue(WIDX_FREEZE_WEATHER, gameState.Cheats.FreezeWeather); SetCheckboxValue(WIDX_NEVERENDING_MARKETING, gameState.Cheats.NeverendingMarketing); SetCheckboxValue(WIDX_DISABLE_PLANT_AGING, gameState.Cheats.DisablePlantAging); SetCheckboxValue(WIDX_ALLOW_REGULAR_PATH_AS_QUEUE, gameState.Cheats.AllowRegularPathAsQueue); @@ -528,10 +553,14 @@ static StringId window_cheats_page_titles[] = { SetCheckboxValue(WIDX_ALLOW_TRACK_PLACE_INVALID_HEIGHTS, gameState.Cheats.AllowTrackPlaceInvalidHeights); SetCheckboxValue(WIDX_MAKE_DESTRUCTIBLE, gameState.Cheats.MakeAllDestructible); break; + case WINDOW_CHEATS_PAGE_WEATHER: + SetCheckboxValue(WIDX_FREEZE_WEATHER, gameState.Cheats.FreezeWeather); + break; } // Current weather - window_cheats_misc_widgets[WIDX_WEATHER].text = WeatherTypes[EnumValue(gameState.ClimateCurrent.Weather)]; + window_cheats_weather_widgets[WIDX_WEATHER].text = WeatherTypes[EnumValue(gameState.ClimateCurrent.Weather)]; + // Staff speed window_cheats_misc_widgets[WIDX_STAFF_SPEED].text = _staffSpeedNames[EnumValue( gameState.Cheats.SelectedStaffSpeed)]; @@ -596,11 +625,6 @@ static StringId window_cheats_page_titles[] = { } else if (page == WINDOW_CHEATS_PAGE_MISC) { - { - auto& widget = widgets[WIDX_WEATHER]; - DrawTextBasic(dpi, windowPos + ScreenCoordsXY{ _xLcol - 3, widget.top + 1 }, STR_CHANGE_WEATHER); - } - { auto ft = Formatter(); ft.Add(_parkRatingSpinnerValue); @@ -627,6 +651,13 @@ static StringId window_cheats_page_titles[] = { DrawTextBasic(dpi, windowPos + ScreenCoordsXY{ _xLcol, 198 }, STR_CHEAT_GUEST_TOILET); DrawTextBasic(dpi, windowPos + ScreenCoordsXY{ _xLcol, 219 }, STR_CHEAT_GUEST_PREFERRED_INTENSITY); } + else if (page == WINDOW_CHEATS_PAGE_WEATHER) + { + { + auto& widget = widgets[WIDX_WEATHER]; + DrawTextBasic(dpi, windowPos + ScreenCoordsXY{ _xLcol - 3, widget.top + 1 }, STR_CHANGE_WEATHER); + } + } } void OnTextInput(WidgetIndex widgetIndex, std::string_view text) override @@ -682,11 +713,7 @@ static StringId window_cheats_page_titles[] = { void UpdateTabPositions() { constexpr uint16_t tabs[] = { - WIDX_TAB_1, - WIDX_TAB_2, - WIDX_TAB_3, - WIDX_TAB_4, - WIDX_TAB_5, + WIDX_TAB_1, WIDX_TAB_2, WIDX_TAB_3, WIDX_TAB_4, WIDX_TAB_5, WIDX_TAB_6, }; auto left = TAB_START; @@ -749,6 +776,15 @@ static StringId window_cheats_page_titles[] = { GfxDrawSprite( dpi, ImageId(sprite_idx), windowPos + ScreenCoordsXY{ widgets[WIDX_TAB_5].left, widgets[WIDX_TAB_5].top }); } + + // Nature/weather tab + if (!IsWidgetDisabled(WIDX_TAB_6)) + { + uint32_t sprite_idx = SPR_WEATHER_SUN_CLOUD; + GfxDrawSprite( + dpi, ImageId(sprite_idx), + windowPos + ScreenCoordsXY{ widgets[WIDX_TAB_6].left + 2, widgets[WIDX_TAB_6].top + 4 }); + } } void OnMouseDownMoney(WidgetIndex widgetIndex) @@ -880,23 +916,6 @@ static StringId window_cheats_page_titles[] = { CheatsSet(CheatType::SetForcedParkRating, _parkRatingSpinnerValue); } break; - case WIDX_WEATHER_DROPDOWN_BUTTON: - { - Widget* dropdownWidget = widget - 1; - - for (size_t i = 0; i < std::size(WeatherTypes); i++) - { - gDropdownItems[i].Format = STR_DROPDOWN_MENU_LABEL; - gDropdownItems[i].Args = WeatherTypes[i]; - } - WindowDropdownShowTextCustomWidth( - { windowPos.x + dropdownWidget->left, windowPos.y + dropdownWidget->top }, dropdownWidget->height() + 1, - colours[1], 0, Dropdown::Flag::StayOpen, std::size(WeatherTypes), dropdownWidget->width() - 3); - - auto currentWeather = gameState.ClimateCurrent.Weather; - Dropdown::SetChecked(EnumValue(currentWeather), true); - } - break; case WIDX_STAFF_SPEED_DROPDOWN_BUTTON: { Widget* dropdownWidget; @@ -917,23 +936,41 @@ static StringId window_cheats_page_titles[] = { } } + void OnMouseDownWeather(WidgetIndex widgetIndex) + { + auto* widget = &widgets[widgetIndex]; + auto& gameState = GetGameState(); + switch (widgetIndex) + { + case WIDX_WEATHER_DROPDOWN_BUTTON: + { + Widget* dropdownWidget = widget - 1; + + for (size_t i = 0; i < std::size(WeatherTypes); i++) + { + gDropdownItems[i].Format = STR_DROPDOWN_MENU_LABEL; + gDropdownItems[i].Args = WeatherTypes[i]; + } + WindowDropdownShowTextCustomWidth( + { windowPos.x + dropdownWidget->left, windowPos.y + dropdownWidget->top }, dropdownWidget->height() + 1, + colours[1], 0, Dropdown::Flag::StayOpen, std::size(WeatherTypes), dropdownWidget->width() - 3); + + auto currentWeather = gameState.ClimateCurrent.Weather; + Dropdown::SetChecked(EnumValue(currentWeather), true); + + break; + } + } + } + void OnMouseUpMisc(WidgetIndex widgetIndex) { auto& gameState = GetGameState(); switch (widgetIndex) { - case WIDX_FREEZE_WEATHER: - CheatsSet(CheatType::FreezeWeather, !gameState.Cheats.FreezeWeather); - break; case WIDX_OPEN_CLOSE_PARK: CheatsSet(CheatType::OpenClosePark); break; - case WIDX_CREATE_DUCKS: - CheatsSet(CheatType::CreateDucks, kCheatsDuckIncrement); - break; - case WIDX_REMOVE_DUCKS: - CheatsSet(CheatType::RemoveDucks); - break; case WIDX_CLEAR_GRASS: CheatsSet(CheatType::SetGrassLength, GRASS_LENGTH_CLEAR_0); break; @@ -986,6 +1023,23 @@ static StringId window_cheats_page_titles[] = { } } + void OnMouseUpWeather(WidgetIndex widgetIndex) + { + auto& gameState = GetGameState(); + switch (widgetIndex) + { + case WIDX_FREEZE_WEATHER: + CheatsSet(CheatType::FreezeWeather, !gameState.Cheats.FreezeWeather); + break; + case WIDX_CREATE_DUCKS: + CheatsSet(CheatType::CreateDucks, kCheatsDuckIncrement); + break; + case WIDX_REMOVE_DUCKS: + CheatsSet(CheatType::RemoveDucks); + break; + } + } + void OnDropdownMisc(WidgetIndex widgetIndex, int32_t dropdownIndex) { if (dropdownIndex == -1) @@ -993,10 +1047,6 @@ static StringId window_cheats_page_titles[] = { return; } - if (widgetIndex == WIDX_WEATHER_DROPDOWN_BUTTON) - { - CheatsSet(CheatType::ForceWeather, dropdownIndex); - } if (widgetIndex == WIDX_STAFF_SPEED_DROPDOWN_BUTTON) { int32_t speed = kCheatsStaffNormalSpeed; @@ -1021,6 +1071,19 @@ static StringId window_cheats_page_titles[] = { } } + void OnDropdownWeather(WidgetIndex widgetIndex, int32_t dropdownIndex) + { + if (dropdownIndex == -1) + { + return; + } + + if (widgetIndex == WIDX_WEATHER_DROPDOWN_BUTTON) + { + CheatsSet(CheatType::ForceWeather, dropdownIndex); + } + } + void OnMouseUpGuests(WidgetIndex widgetIndex) { auto& gameState = GetGameState();