diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index ded1be152b..711cd27a14 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -4348,6 +4348,7 @@ STR_6036 :{SMALLFONT}{BLACK}Clear STR_6037 :Please select a valid RCT1 directory STR_6038 :{SMALLFONT}{BLACK}If you have RCT1 installed, set this option to its directory to load scenarios, music, etc. STR_6039 :{SMALLFONT}{BLACK}Quick demolish ride +STR_6040 :Edit Scenario Options ############# # Scenarios # diff --git a/distribution/changelog.txt b/distribution/changelog.txt index 3502c6779d..9f54f9b8f2 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -3,6 +3,7 @@ - Feature: [#1730] Keyboard shortcuts for track construction. - Feature: [#5110] The tile inspector can now be used in multiplayer. - Feature: [#5305] Add scenery eye dropper tool. +- Improved: [#5254] Scenario option changes are now synchronised over multiplayer. - Improved: [#3288] Added server description and greeting textboxes to the start server menu. - Improved: [#5137] Removing all guests no longer closes the rides and removes the vehicles. - Improved: [#5163] Minor tile inspector improvements and fixes. diff --git a/src/openrct2/editor.c b/src/openrct2/editor.c index 12b15013e2..8799657887 100644 --- a/src/openrct2/editor.c +++ b/src/openrct2/editor.c @@ -42,6 +42,7 @@ #include "world/park.h" #include "world/scenery.h" #include "world/sprite.h" +#include "network/network.h" uint8 _editorSelectedRides[128]; uint8 _editorSelectedSmallScenery[252]; @@ -534,3 +535,177 @@ bool editor_check_park() return true; } + +void game_command_edit_scenario_options(sint32* eax, sint32* ebx, sint32* ecx, sint32* edx, sint32* esi, sint32* edi, sint32* ebp) +{ + if (!(*ebx & GAME_COMMAND_FLAG_APPLY)) { + *ebx = 0; + return; + } + + switch (*ecx) { + case EDIT_SCENARIOOPTIONS_SETNOMONEY: + if (gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) { + if (*edx != 0) { + gParkFlags |= PARK_FLAGS_NO_MONEY_SCENARIO; + } + else { + gParkFlags &= PARK_FLAGS_NO_MONEY_SCENARIO; + } + } + else { + if (*edx != 0) { + gParkFlags |= PARK_FLAGS_NO_MONEY; + } + else { + gParkFlags &= ~PARK_FLAGS_NO_MONEY; + } + // Invalidate all windows that have anything to do with finance + window_invalidate_by_class(WC_RIDE); + window_invalidate_by_class(WC_PEEP); + window_invalidate_by_class(WC_PARK_INFORMATION); + window_invalidate_by_class(WC_FINANCES); + window_invalidate_by_class(WC_BOTTOM_TOOLBAR); + window_invalidate_by_class(WC_TOP_TOOLBAR); + } + break; + case EDIT_SCENARIOOPTIONS_SETINITIALCASH: + gInitialCash = clamp(MONEY(0, 00), *edx, MONEY(1000000, 00)); + gCashEncrypted = ENCRYPT_MONEY(gInitialCash); + window_invalidate_by_class(WC_FINANCES); + window_invalidate_by_class(WC_BOTTOM_TOOLBAR); + break; + case EDIT_SCENARIOOPTIONS_SETINITIALLOAN: + gBankLoan = clamp(MONEY(0,00), *edx, MONEY(5000000,00)); + gMaxBankLoan = max(gBankLoan, gMaxBankLoan); + window_invalidate_by_class(WC_FINANCES); + break; + case EDIT_SCENARIOOPTIONS_SETMAXIMUMLOANSIZE: + gMaxBankLoan = clamp(MONEY(0,00), *edx, MONEY(5000000,00)); + gBankLoan = min(gBankLoan, gMaxBankLoan); + window_invalidate_by_class(WC_FINANCES); + break; + case EDIT_SCENARIOOPTIONS_SETANNUALINTERESTRATE: + gBankLoanInterestRate = clamp(0, *edx, 80); + window_invalidate_by_class(WC_FINANCES); + break; + case EDIT_SCENARIOOPTIONS_SETFORBIDMARKETINGCAMPAIGNS: + if (*edx != 0) { + gParkFlags |= PARK_FLAGS_FORBID_MARKETING_CAMPAIGN; + } + else { + gParkFlags &= ~PARK_FLAGS_FORBID_MARKETING_CAMPAIGN; + } + break; + case EDIT_SCENARIOOPTIONS_SETAVERAGECASHPERGUEST: + gGuestInitialCash = clamp(MONEY(0, 00), *edx, MONEY(1000, 00)); + break; + case EDIT_SCENARIOOPTIONS_SETGUESTINITIALHAPPINESS: + gGuestInitialHappiness = clamp(40, *edx, 250); + break; + case EDIT_SCENARIOOPTIONS_SETGUESTINITIALHUNGER: + gGuestInitialHunger = clamp(40, *edx, 250); + break; + case EDIT_SCENARIOOPTIONS_SETGUESTINITIALTHIRST: + gGuestInitialThirst = clamp(40, *edx, 250); + break; + case EDIT_SCENARIOOPTIONS_SETGUESTSPREFERLESSINTENSERIDES: + if (*edx != 0) { + gParkFlags |= PARK_FLAGS_PREF_LESS_INTENSE_RIDES; + } + else { + gParkFlags &= ~PARK_FLAGS_PREF_LESS_INTENSE_RIDES; + } + break; + case EDIT_SCENARIOOPTIONS_SETGUESTSPREFERMOREINTENSERIDES: + if (*edx != 0) { + gParkFlags |= PARK_FLAGS_PREF_MORE_INTENSE_RIDES; + } + else { + gParkFlags &= ~PARK_FLAGS_PREF_MORE_INTENSE_RIDES; + } + break; + case EDIT_SCENARIOOPTIONS_SETCOSTTOBUYLAND: + gLandPrice = clamp(MONEY(5, 00), *edx, MONEY(200, 00)); + break; + case EDIT_SCENARIOOPTIONS_SETCOSTTOBUYCONSTRUCTIONRIGHTS: + gLandRightsCost = clamp(MONEY(5,00), *edx, MONEY(200,00)); + break; + case EDIT_SCENARIOOPTIONS_SETPARKCHARGEMETHOD: + if (gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) { + if (*edx == 0) { + if (!(gParkFlags & PARK_FLAGS_PARK_FREE_ENTRY)) { + gParkFlags |= PARK_FLAGS_PARK_FREE_ENTRY; + gParkEntranceFee = MONEY(0, 00); + } + } + else { + if (gParkFlags & PARK_FLAGS_PARK_FREE_ENTRY) { + gParkFlags &= ~PARK_FLAGS_PARK_FREE_ENTRY; + gParkEntranceFee = MONEY(10, 00); + } + } + } + else { + if (*edx == 0) { + if (!(gParkFlags & PARK_FLAGS_PARK_FREE_ENTRY)) { + gParkFlags |= PARK_FLAGS_PARK_FREE_ENTRY; + } + } + else { + if (gParkFlags & PARK_FLAGS_PARK_FREE_ENTRY) { + gParkFlags &= ~PARK_FLAGS_PARK_FREE_ENTRY; + } + } + window_invalidate_by_class(WC_PARK_INFORMATION); + window_invalidate_by_class(WC_RIDE); + } + break; + case EDIT_SCENARIOOPTIONS_SETPARKCHARGEENTRYFEE: + gParkEntranceFee = clamp(MONEY(0, 00), *edx, MONEY(100, 00)); + window_invalidate_by_class(WC_PARK_INFORMATION); + break; + case EDIT_SCENARIOOPTIONS_SETFORBIDTREEREMOVAL: + if (*edx != 0) { + gParkFlags |= PARK_FLAGS_FORBID_TREE_REMOVAL; + } + else { + gParkFlags &= ~PARK_FLAGS_FORBID_TREE_REMOVAL; + } + break; + case EDIT_SCENARIOOPTIONS_SETFORBIDLANDSCAPECHANGES: + if (*edx != 0) { + gParkFlags |= PARK_FLAGS_FORBID_LANDSCAPE_CHANGES; + } + else { + gParkFlags &= ~PARK_FLAGS_FORBID_LANDSCAPE_CHANGES; + } + break; + case EDIT_SCENARIOOPTIONS_SETFORBIDHIGHCONSTRUCTION: + if (*edx != 0) { + gParkFlags |= PARK_FLAGS_FORBID_HIGH_CONSTRUCTION; + } + else { + gParkFlags &= ~PARK_FLAGS_FORBID_HIGH_CONSTRUCTION; + } + break; + case EDIT_SCENARIOOPTIONS_SETPARKRATINGHIGHERDIFFICULTLEVEL: + if (*edx != 0) { + gParkFlags |= PARK_FLAGS_DIFFICULT_PARK_RATING; + } + else { + gParkFlags &= ~PARK_FLAGS_DIFFICULT_PARK_RATING; + } + break; + case EDIT_SCENARIOOPTIONS_SETGUESTGENERATIONHIGHERDIFFICULTLEVEL: + if (*edx != 0) { + gParkFlags |= PARK_FLAGS_DIFFICULT_GUEST_GENERATION; + } + else { + gParkFlags &= ~PARK_FLAGS_DIFFICULT_GUEST_GENERATION; + } + break; + } + window_invalidate_by_class(WC_EDITOR_SCENARIO_OPTIONS); + *ebx = 0; +} diff --git a/src/openrct2/editor.h b/src/openrct2/editor.h index 7466c0264c..e6f0eeff45 100644 --- a/src/openrct2/editor.h +++ b/src/openrct2/editor.h @@ -31,6 +31,31 @@ typedef enum { EDITOR_STEP_TRACK_DESIGNS_MANAGER // 7 } RCT2_EDITOR_STEP; +enum +{ + EDIT_SCENARIOOPTIONS_SETNOMONEY, + EDIT_SCENARIOOPTIONS_SETINITIALCASH, + EDIT_SCENARIOOPTIONS_SETINITIALLOAN, + EDIT_SCENARIOOPTIONS_SETMAXIMUMLOANSIZE, + EDIT_SCENARIOOPTIONS_SETANNUALINTERESTRATE, + EDIT_SCENARIOOPTIONS_SETFORBIDMARKETINGCAMPAIGNS, + EDIT_SCENARIOOPTIONS_SETAVERAGECASHPERGUEST, + EDIT_SCENARIOOPTIONS_SETGUESTINITIALHAPPINESS, + EDIT_SCENARIOOPTIONS_SETGUESTINITIALHUNGER, + EDIT_SCENARIOOPTIONS_SETGUESTINITIALTHIRST, + EDIT_SCENARIOOPTIONS_SETGUESTSPREFERLESSINTENSERIDES, + EDIT_SCENARIOOPTIONS_SETGUESTSPREFERMOREINTENSERIDES, + EDIT_SCENARIOOPTIONS_SETCOSTTOBUYLAND, + EDIT_SCENARIOOPTIONS_SETCOSTTOBUYCONSTRUCTIONRIGHTS, + EDIT_SCENARIOOPTIONS_SETPARKCHARGEMETHOD, + EDIT_SCENARIOOPTIONS_SETPARKCHARGEENTRYFEE, + EDIT_SCENARIOOPTIONS_SETFORBIDTREEREMOVAL, + EDIT_SCENARIOOPTIONS_SETFORBIDLANDSCAPECHANGES, + EDIT_SCENARIOOPTIONS_SETFORBIDHIGHCONSTRUCTION, + EDIT_SCENARIOOPTIONS_SETPARKRATINGHIGHERDIFFICULTLEVEL, + EDIT_SCENARIOOPTIONS_SETGUESTGENERATIONHIGHERDIFFICULTLEVEL, +}; + extern uint8 * gEditorSelectedObjects[OBJECT_ENTRY_GROUP_COUNT]; void editor_load(); @@ -46,4 +71,6 @@ sint32 editor_check_object_selection(); bool editor_check_object_group_at_least_one_selected(sint32 objectType); +void game_command_edit_scenario_options(sint32* eax, sint32* ebx, sint32* ecx, sint32* edx, sint32* esi, sint32* edi, sint32* ebp); + #endif diff --git a/src/openrct2/game.c b/src/openrct2/game.c index f70e54a23d..f3c72911dc 100644 --- a/src/openrct2/game.c +++ b/src/openrct2/game.c @@ -1247,4 +1247,5 @@ GAME_COMMAND_POINTER* new_game_command_table[GAME_COMMAND_COUNT] = { game_command_pickup_staff, game_command_balloon_press, game_command_modify_tile, + game_command_edit_scenario_options, }; diff --git a/src/openrct2/game.h b/src/openrct2/game.h index d58b282484..fe41d82d94 100644 --- a/src/openrct2/game.h +++ b/src/openrct2/game.h @@ -93,6 +93,7 @@ enum GAME_COMMAND { GAME_COMMAND_PICKUP_STAFF, GAME_COMMAND_BALLOON_PRESS, GAME_COMMAND_MODIFY_TILE, + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, GAME_COMMAND_COUNT }; diff --git a/src/openrct2/localisation/string_ids.h b/src/openrct2/localisation/string_ids.h index 0386647a8b..4fa0fe7e3b 100644 --- a/src/openrct2/localisation/string_ids.h +++ b/src/openrct2/localisation/string_ids.h @@ -3696,6 +3696,8 @@ enum { STR_QUICK_DEMOLISH_RIDE = 6039, + STR_ACTION_EDIT_SCENARIO_OPTIONS = 6040, + // 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/openrct2/network/NetworkAction.cpp b/src/openrct2/network/NetworkAction.cpp index 812b4766fe..a3d1c4cd57 100644 --- a/src/openrct2/network/NetworkAction.cpp +++ b/src/openrct2/network/NetworkAction.cpp @@ -226,6 +226,11 @@ const std::vector NetworkActions::Actions = { GAME_COMMAND_MODIFY_TILE } + }, { + STR_ACTION_EDIT_SCENARIO_OPTIONS, "PERMISSION_EDIT_SCENARIO_OPTIONS", + { + GAME_COMMAND_EDIT_SCENARIO_OPTIONS + } } }; diff --git a/src/openrct2/network/network.cpp b/src/openrct2/network/network.cpp index a81ee5fc9d..6efd69232e 100644 --- a/src/openrct2/network/network.cpp +++ b/src/openrct2/network/network.cpp @@ -750,6 +750,7 @@ void Network::SetupDefaultGroups() user->ToggleActionPermission(18); // Cheat user->ToggleActionPermission(20); // Passwordless login user->ToggleActionPermission(21); // Modify Tile + user->ToggleActionPermission(22); // Edit Scenario Options user->Id = 2; group_list.push_back(std::move(user)); SetDefaultGroup(1); diff --git a/src/openrct2/network/network.h b/src/openrct2/network/network.h index b46d60c3e4..482d511a85 100644 --- a/src/openrct2/network/network.h +++ b/src/openrct2/network/network.h @@ -56,7 +56,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 "15" +#define NETWORK_STREAM_VERSION "16" #define NETWORK_STREAM_ID OPENRCT2_VERSION "-" NETWORK_STREAM_VERSION #ifdef __cplusplus diff --git a/src/openrct2/windows/editor_scenario_options.c b/src/openrct2/windows/editor_scenario_options.c index efd8f6fae3..164b41d6c8 100644 --- a/src/openrct2/windows/editor_scenario_options.c +++ b/src/openrct2/windows/editor_scenario_options.c @@ -14,6 +14,8 @@ *****************************************************************************/ #pragma endregion +#include "../editor.h" +#include "../game.h" #include "../interface/themes.h" #include "../interface/widget.h" #include "../interface/window.h" @@ -498,22 +500,27 @@ static void window_editor_scenario_options_financial_mouseup(rct_window *w, sint window_editor_scenario_options_set_page(w, widgetIndex - WIDX_TAB_1); break; case WIDX_NO_MONEY: - if (gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) { - gParkFlags ^= PARK_FLAGS_NO_MONEY_SCENARIO; - } else { - gParkFlags ^= PARK_FLAGS_NO_MONEY; - // Invalidate all windows that have anything to do with finance - window_invalidate_by_class(WC_RIDE); - window_invalidate_by_class(WC_PEEP); - window_invalidate_by_class(WC_PARK_INFORMATION); - window_invalidate_by_class(WC_FINANCES); - window_invalidate_by_class(WC_BOTTOM_TOOLBAR); - window_invalidate_by_class(WC_TOP_TOOLBAR); - } + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETNOMONEY, + gParkFlags & PARK_FLAGS_NO_MONEY ? 0 : 1, + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); window_invalidate(w); break; case WIDX_FORBID_MARKETING: - gParkFlags ^= PARK_FLAGS_FORBID_MARKETING_CAMPAIGN; + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETFORBIDMARKETINGCAMPAIGNS, + gParkFlags & PARK_FLAGS_FORBID_MARKETING_CAMPAIGN ? 0 : 1, + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); window_invalidate(w); break; } @@ -537,8 +544,15 @@ static void window_editor_scenario_options_financial_mousedown(sint32 widgetInde switch (widgetIndex) { case WIDX_INITIAL_CASH_INCREASE: if (gInitialCash < MONEY(1000000,00)) { - gInitialCash += MONEY(500,00); - gCashEncrypted = ENCRYPT_MONEY(gInitialCash); + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETINITIALCASH, + gInitialCash + MONEY(500,00), + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); } else { window_error_open(STR_CANT_INCREASE_CASH, STR_NONE); } @@ -546,8 +560,15 @@ static void window_editor_scenario_options_financial_mousedown(sint32 widgetInde break; case WIDX_INITIAL_CASH_DECREASE: if (gInitialCash > MONEY(0,00)) { - gInitialCash -= MONEY(500,00); - gCashEncrypted = ENCRYPT_MONEY(gInitialCash); + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETINITIALCASH, + gInitialCash - MONEY(500,00), + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); } else { window_error_open(STR_CANT_REDUCE_CASH, STR_NONE); } @@ -555,8 +576,15 @@ static void window_editor_scenario_options_financial_mousedown(sint32 widgetInde break; case WIDX_INITIAL_LOAN_INCREASE: if (gBankLoan < MONEY(5000000,00)) { - gBankLoan += MONEY(1000,00); - gMaxBankLoan = max(gBankLoan, gMaxBankLoan); + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETINITIALLOAN, + gBankLoan + MONEY(1000,00), + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); } else { window_error_open(STR_CANT_INCREASE_INIT_LOAN, STR_NONE); } @@ -564,8 +592,15 @@ static void window_editor_scenario_options_financial_mousedown(sint32 widgetInde break; case WIDX_INITIAL_LOAN_DECREASE: if (gBankLoan > MONEY(0,00)) { - gBankLoan -= MONEY(1000,00); - gMaxBankLoan = max(gBankLoan, gMaxBankLoan); + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETINITIALLOAN, + gBankLoan - MONEY(1000,00), + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); } else { window_error_open(STR_CANT_REDUCE_INIT_LOAN, STR_NONE); } @@ -573,8 +608,15 @@ static void window_editor_scenario_options_financial_mousedown(sint32 widgetInde break; case WIDX_MAXIMUM_LOAN_INCREASE: if (gMaxBankLoan < MONEY(5000000,00)) { - gMaxBankLoan += MONEY(1000,00); - gBankLoan = min(gBankLoan, gMaxBankLoan); + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETMAXIMUMLOANSIZE, + gMaxBankLoan + MONEY(1000,00), + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); } else { window_error_open(STR_CANT_INCREASE_MAX_LOAN, STR_NONE); } @@ -582,8 +624,15 @@ static void window_editor_scenario_options_financial_mousedown(sint32 widgetInde break; case WIDX_MAXIMUM_LOAN_DECREASE: if (gMaxBankLoan > MONEY(0,00)) { - gMaxBankLoan -= MONEY(1000,00); - gBankLoan = min(gBankLoan, gMaxBankLoan); + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETMAXIMUMLOANSIZE, + gMaxBankLoan - MONEY(1000,00), + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); } else { window_error_open(STR_CANT_REDUCE_MAX_LOAN, STR_NONE); } @@ -592,9 +641,25 @@ static void window_editor_scenario_options_financial_mousedown(sint32 widgetInde case WIDX_INTEREST_RATE_INCREASE: if (gBankLoanInterestRate < 80) { if (gBankLoanInterestRate < 0) { - gBankLoanInterestRate = 0; + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETANNUALINTERESTRATE, + 0, + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); } else { - gBankLoanInterestRate++; + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETANNUALINTERESTRATE, + gBankLoanInterestRate + 1, + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); } } else { window_error_open(STR_CANT_INCREASE_INTEREST_RATE, STR_NONE); @@ -604,9 +669,25 @@ static void window_editor_scenario_options_financial_mousedown(sint32 widgetInde case WIDX_INTEREST_RATE_DECREASE: if (gBankLoanInterestRate > 0) { if (gBankLoanInterestRate > 80) { - gBankLoanInterestRate = 80; + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETANNUALINTERESTRATE, + 80, + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); } else { - gBankLoanInterestRate--; + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETANNUALINTERESTRATE, + gBankLoanInterestRate - 1, + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); } } else { window_error_open(STR_CANT_REDUCE_INTEREST_RATE, STR_NONE); @@ -754,11 +835,27 @@ static void window_editor_scenario_options_guests_mouseup(rct_window *w, sint32 window_editor_scenario_options_set_page(w, widgetIndex - WIDX_TAB_1); break; case WIDX_GUEST_PREFER_LESS_INTENSE_RIDES: - gParkFlags ^= PARK_FLAGS_PREF_LESS_INTENSE_RIDES; + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETGUESTSPREFERLESSINTENSERIDES, + gParkFlags & PARK_FLAGS_PREF_LESS_INTENSE_RIDES ? 0 : 1, + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); window_invalidate(w); break; case WIDX_GUEST_PREFER_MORE_INTENSE_RIDES: - gParkFlags ^= PARK_FLAGS_PREF_MORE_INTENSE_RIDES; + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETGUESTSPREFERMOREINTENSERIDES, + gParkFlags & PARK_FLAGS_PREF_MORE_INTENSE_RIDES ? 0 : 1, + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); window_invalidate(w); break; } @@ -782,7 +879,15 @@ static void window_editor_scenario_options_guests_mousedown(sint32 widgetIndex, switch (widgetIndex) { case WIDX_CASH_PER_GUEST_INCREASE: if (gGuestInitialCash < MONEY(1000, 00)) { - gGuestInitialCash += MONEY(1, 00); + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETAVERAGECASHPERGUEST, + gGuestInitialCash + MONEY(1, 00), + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); } else { window_error_open(STR_CANT_INCREASE_FURTHER, STR_NONE); } @@ -790,7 +895,15 @@ static void window_editor_scenario_options_guests_mousedown(sint32 widgetIndex, break; case WIDX_CASH_PER_GUEST_DECREASE: if (gGuestInitialCash > MONEY(0, 00)) { - gGuestInitialCash -= MONEY(1, 00); + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETAVERAGECASHPERGUEST, + gGuestInitialCash - MONEY(1, 00), + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); } else { window_error_open(STR_CANT_REDUCE_FURTHER, STR_NONE); } @@ -798,7 +911,15 @@ static void window_editor_scenario_options_guests_mousedown(sint32 widgetIndex, break; case WIDX_GUEST_INITIAL_HAPPINESS_INCREASE: if (gGuestInitialHappiness < 250) { - gGuestInitialHappiness += 4; + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETGUESTINITIALHAPPINESS, + gGuestInitialHappiness + 4, + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); } else { window_error_open(STR_CANT_INCREASE_FURTHER, STR_NONE); } @@ -806,7 +927,15 @@ static void window_editor_scenario_options_guests_mousedown(sint32 widgetIndex, break; case WIDX_GUEST_INITIAL_HAPPINESS_DECREASE: if (gGuestInitialHappiness > 40) { - gGuestInitialHappiness -= 4; + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETGUESTINITIALHAPPINESS, + gGuestInitialHappiness - 4, + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); } else { window_error_open(STR_CANT_REDUCE_FURTHER, STR_NONE); } @@ -814,7 +943,15 @@ static void window_editor_scenario_options_guests_mousedown(sint32 widgetIndex, break; case WIDX_GUEST_INITIAL_HUNGER_INCREASE: if (gGuestInitialHunger > 40) { - gGuestInitialHunger -= 4; + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETGUESTINITIALHUNGER, + gGuestInitialHunger - 4, + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); } else { window_error_open(STR_CANT_INCREASE_FURTHER, STR_NONE); } @@ -822,7 +959,15 @@ static void window_editor_scenario_options_guests_mousedown(sint32 widgetIndex, break; case WIDX_GUEST_INITIAL_HUNGER_DECREASE: if (gGuestInitialHunger < 250) { - gGuestInitialHunger += 4; + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETGUESTINITIALHUNGER, + gGuestInitialHunger + 4, + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); } else { window_error_open(STR_CANT_REDUCE_FURTHER, STR_NONE); } @@ -830,7 +975,15 @@ static void window_editor_scenario_options_guests_mousedown(sint32 widgetIndex, break; case WIDX_GUEST_INITIAL_THIRST_INCREASE: if (gGuestInitialThirst > 40) { - gGuestInitialThirst -= 4; + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETGUESTINITIALTHIRST, + gGuestInitialThirst - 4, + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); } else { window_error_open(STR_CANT_INCREASE_FURTHER, STR_NONE); } @@ -838,7 +991,15 @@ static void window_editor_scenario_options_guests_mousedown(sint32 widgetIndex, break; case WIDX_GUEST_INITIAL_THIRST_DECREASE: if (gGuestInitialThirst < 250) { - gGuestInitialThirst += 4; + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETGUESTINITIALTHIRST, + gGuestInitialThirst + 4, + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); } else { window_error_open(STR_CANT_REDUCE_FURTHER, STR_NONE); } @@ -982,23 +1143,63 @@ static void window_editor_scenario_options_park_mouseup(rct_window *w, sint32 wi window_editor_scenario_options_set_page(w, widgetIndex - WIDX_TAB_1); break; case WIDX_FORBID_TREE_REMOVAL: - gParkFlags ^= PARK_FLAGS_FORBID_TREE_REMOVAL; + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETFORBIDTREEREMOVAL, + gParkFlags & PARK_FLAGS_FORBID_TREE_REMOVAL ? 0 : 1, + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); window_invalidate(w); break; case WIDX_FORBID_LANDSCAPE_CHANGES: - gParkFlags ^= PARK_FLAGS_FORBID_LANDSCAPE_CHANGES; + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETFORBIDLANDSCAPECHANGES, + gParkFlags & PARK_FLAGS_FORBID_LANDSCAPE_CHANGES ? 0 : 1, + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); window_invalidate(w); break; case WIDX_FORBID_HIGH_CONSTRUCTION: - gParkFlags ^= PARK_FLAGS_FORBID_HIGH_CONSTRUCTION; + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETFORBIDHIGHCONSTRUCTION, + gParkFlags & PARK_FLAGS_FORBID_HIGH_CONSTRUCTION ? 0 : 1, + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); window_invalidate(w); break; case WIDX_HARD_PARK_RATING: - gParkFlags ^= PARK_FLAGS_DIFFICULT_PARK_RATING; + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETPARKRATINGHIGHERDIFFICULTLEVEL, + gParkFlags & PARK_FLAGS_DIFFICULT_PARK_RATING ? 0 : 1, + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); window_invalidate(w); break; case WIDX_HARD_GUEST_GENERATION: - gParkFlags ^= PARK_FLAGS_DIFFICULT_GUEST_GENERATION; + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETGUESTGENERATIONHIGHERDIFFICULTLEVEL, + gParkFlags & PARK_FLAGS_DIFFICULT_GUEST_GENERATION ? 0 : 1, + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); window_invalidate(w); break; } @@ -1024,7 +1225,15 @@ static void window_editor_scenario_options_park_mousedown(sint32 widgetIndex, rc switch (widgetIndex) { case WIDX_LAND_COST_INCREASE: if (gLandPrice < MONEY(200,00)) { - gLandPrice += MONEY(1,00); + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETCOSTTOBUYLAND, + gLandPrice + MONEY(1,00), + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); } else { window_error_open(STR_CANT_INCREASE_FURTHER, STR_NONE); } @@ -1032,7 +1241,15 @@ static void window_editor_scenario_options_park_mousedown(sint32 widgetIndex, rc break; case WIDX_LAND_COST_DECREASE: if (gLandPrice > MONEY(5,00)) { - gLandPrice -= MONEY(1,00); + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETCOSTTOBUYLAND, + gLandPrice - MONEY(1, 00), + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); } else { window_error_open(STR_CANT_REDUCE_FURTHER, STR_NONE); } @@ -1040,7 +1257,15 @@ static void window_editor_scenario_options_park_mousedown(sint32 widgetIndex, rc break; case WIDX_CONSTRUCTION_RIGHTS_COST_INCREASE: if (gConstructionRightsPrice < MONEY(200,00)) { - gConstructionRightsPrice += MONEY(1,00); + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETCOSTTOBUYCONSTRUCTIONRIGHTS, + gConstructionRightsPrice + MONEY(1,00), + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); } else { window_error_open(STR_CANT_INCREASE_FURTHER, STR_NONE); } @@ -1048,7 +1273,15 @@ static void window_editor_scenario_options_park_mousedown(sint32 widgetIndex, rc break; case WIDX_CONSTRUCTION_RIGHTS_COST_DECREASE: if (gConstructionRightsPrice > MONEY(5,00)) { - gConstructionRightsPrice -= MONEY(1,00); + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETCOSTTOBUYCONSTRUCTIONRIGHTS, + gConstructionRightsPrice - MONEY(1,00), + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); } else { window_error_open(STR_CANT_REDUCE_FURTHER, STR_NONE); } @@ -1056,7 +1289,15 @@ static void window_editor_scenario_options_park_mousedown(sint32 widgetIndex, rc break; case WIDX_ENTRY_PRICE_INCREASE: if (gParkEntranceFee < MONEY(100,00)) { - gParkEntranceFee += MONEY(1,00); + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETPARKCHARGEENTRYFEE, + gParkEntranceFee + MONEY(1,00), + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); } else { window_error_open(STR_CANT_INCREASE_FURTHER, STR_NONE); } @@ -1064,7 +1305,15 @@ static void window_editor_scenario_options_park_mousedown(sint32 widgetIndex, rc break; case WIDX_ENTRY_PRICE_DECREASE: if (gParkEntranceFee > MONEY(0,00)) { - gParkEntranceFee -= MONEY(1,00); + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETPARKCHARGEENTRYFEE, + gParkEntranceFee - MONEY(1,00), + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); } else { window_error_open(STR_CANT_REDUCE_FURTHER, STR_NONE); } @@ -1101,32 +1350,15 @@ static void window_editor_scenario_options_park_mousedown(sint32 widgetIndex, rc static void window_editor_scenario_options_park_dropdown(rct_window *w, sint32 widgetIndex, sint32 dropdownIndex) { if (widgetIndex == WIDX_PAY_FOR_PARK_OR_RIDES_DROPDOWN && dropdownIndex != -1) { - if(gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) { - if (dropdownIndex == 0) { - if (!(gParkFlags & PARK_FLAGS_PARK_FREE_ENTRY)) { - gParkFlags |= PARK_FLAGS_PARK_FREE_ENTRY; - gParkEntranceFee = MONEY(0, 00); - } - } else { - if (gParkFlags & PARK_FLAGS_PARK_FREE_ENTRY) { - gParkFlags &= ~PARK_FLAGS_PARK_FREE_ENTRY; - gParkEntranceFee = MONEY(10, 00); - } - } - } - else { - if (dropdownIndex == 0) { - if (!(gParkFlags & PARK_FLAGS_PARK_FREE_ENTRY)) { - gParkFlags |= PARK_FLAGS_PARK_FREE_ENTRY; - } - } else { - if (gParkFlags & PARK_FLAGS_PARK_FREE_ENTRY) { - gParkFlags &= ~PARK_FLAGS_PARK_FREE_ENTRY; - } - } - window_invalidate_by_class(WC_PARK_INFORMATION); - window_invalidate_by_class(WC_RIDE); - } + game_do_command( + 0, + GAME_COMMAND_FLAG_APPLY, + EDIT_SCENARIOOPTIONS_SETPARKCHARGEMETHOD, + dropdownIndex, + GAME_COMMAND_EDIT_SCENARIO_OPTIONS, + 0, + 0 + ); window_invalidate(w); } } diff --git a/src/openrct2/windows/top_toolbar.c b/src/openrct2/windows/top_toolbar.c index 35b51f622a..effe5dd24d 100644 --- a/src/openrct2/windows/top_toolbar.c +++ b/src/openrct2/windows/top_toolbar.c @@ -3065,7 +3065,6 @@ void top_toolbar_init_debug_menu(rct_window* w, rct_widget* widget) if (network_get_mode() != NETWORK_MODE_NONE) { dropdown_set_disabled(DDIDX_OBJECT_SELECTION, true); dropdown_set_disabled(DDIDX_INVENTIONS_LIST, true); - dropdown_set_disabled(DDIDX_SCENARIO_OPTIONS, true); } dropdown_set_checked(DDIDX_DEBUG_PAINT, window_find_by_class(WC_DEBUG_PAINT) != NULL);