mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-18 04:23:20 +01:00
Implement ScenarioSetSetting game action
Further work moving game commands into the game action framework to improve design.
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
#include <openrct2/Game.h>
|
||||
#include <openrct2/OpenRCT2.h>
|
||||
#include <openrct2/actions/ClimateSetAction.hpp>
|
||||
#include <openrct2/actions/ScenarioSetSettingAction.hpp>
|
||||
#include <openrct2/drawing/Drawing.h>
|
||||
#include <openrct2/interface/Colour.h>
|
||||
#include <openrct2/localisation/StringIds.h>
|
||||
@@ -508,18 +509,19 @@ static void window_editor_scenario_options_financial_mouseup(rct_window* w, rct_
|
||||
newMoneySetting = (gParkFlags & PARK_FLAGS_NO_MONEY) ? 0 : 1;
|
||||
}
|
||||
|
||||
game_do_command(
|
||||
0, GAME_COMMAND_FLAG_APPLY, EDIT_SCENARIOOPTIONS_SETNOMONEY, newMoneySetting,
|
||||
GAME_COMMAND_EDIT_SCENARIO_OPTIONS, 0, 0);
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(ScenarioSetSetting::NoMoney, newMoneySetting);
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
window_invalidate(w);
|
||||
break;
|
||||
}
|
||||
case WIDX_FORBID_MARKETING:
|
||||
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);
|
||||
{
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::ForbidMarketingCampaigns, gParkFlags & PARK_FLAGS_FORBID_MARKETING_CAMPAIGN ? 0 : 1);
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
window_invalidate(w);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -561,9 +563,9 @@ static void window_editor_scenario_options_financial_mousedown(rct_window* w, rc
|
||||
case WIDX_INITIAL_CASH_INCREASE:
|
||||
if (gInitialCash < MONEY(1000000, 00))
|
||||
{
|
||||
game_do_command(
|
||||
0, GAME_COMMAND_FLAG_APPLY, EDIT_SCENARIOOPTIONS_SETINITIALCASH, gInitialCash + MONEY(500, 00),
|
||||
GAME_COMMAND_EDIT_SCENARIO_OPTIONS, 0, 0);
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::InitialCash, gInitialCash + MONEY(500, 00));
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -574,9 +576,9 @@ static void window_editor_scenario_options_financial_mousedown(rct_window* w, rc
|
||||
case WIDX_INITIAL_CASH_DECREASE:
|
||||
if (gInitialCash > MONEY(0, 00))
|
||||
{
|
||||
game_do_command(
|
||||
0, GAME_COMMAND_FLAG_APPLY, EDIT_SCENARIOOPTIONS_SETINITIALCASH, gInitialCash - MONEY(500, 00),
|
||||
GAME_COMMAND_EDIT_SCENARIO_OPTIONS, 0, 0);
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::InitialCash, gInitialCash - MONEY(500, 00));
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -587,9 +589,9 @@ static void window_editor_scenario_options_financial_mousedown(rct_window* w, rc
|
||||
case WIDX_INITIAL_LOAN_INCREASE:
|
||||
if (gBankLoan < MONEY(5000000, 00))
|
||||
{
|
||||
game_do_command(
|
||||
0, GAME_COMMAND_FLAG_APPLY, EDIT_SCENARIOOPTIONS_SETINITIALLOAN, gBankLoan + MONEY(1000, 00),
|
||||
GAME_COMMAND_EDIT_SCENARIO_OPTIONS, 0, 0);
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::InitialLoan, gBankLoan + MONEY(1000, 00));
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -600,9 +602,9 @@ static void window_editor_scenario_options_financial_mousedown(rct_window* w, rc
|
||||
case WIDX_INITIAL_LOAN_DECREASE:
|
||||
if (gBankLoan > MONEY(0, 00))
|
||||
{
|
||||
game_do_command(
|
||||
0, GAME_COMMAND_FLAG_APPLY, EDIT_SCENARIOOPTIONS_SETINITIALLOAN, gBankLoan - MONEY(1000, 00),
|
||||
GAME_COMMAND_EDIT_SCENARIO_OPTIONS, 0, 0);
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::InitialLoan, gBankLoan - MONEY(1000, 00));
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -613,9 +615,9 @@ static void window_editor_scenario_options_financial_mousedown(rct_window* w, rc
|
||||
case WIDX_MAXIMUM_LOAN_INCREASE:
|
||||
if (gMaxBankLoan < MONEY(5000000, 00))
|
||||
{
|
||||
game_do_command(
|
||||
0, GAME_COMMAND_FLAG_APPLY, EDIT_SCENARIOOPTIONS_SETMAXIMUMLOANSIZE, gMaxBankLoan + MONEY(1000, 00),
|
||||
GAME_COMMAND_EDIT_SCENARIO_OPTIONS, 0, 0);
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::MaximumLoanSize, gMaxBankLoan + MONEY(1000, 00));
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -626,9 +628,9 @@ static void window_editor_scenario_options_financial_mousedown(rct_window* w, rc
|
||||
case WIDX_MAXIMUM_LOAN_DECREASE:
|
||||
if (gMaxBankLoan > MONEY(0, 00))
|
||||
{
|
||||
game_do_command(
|
||||
0, GAME_COMMAND_FLAG_APPLY, EDIT_SCENARIOOPTIONS_SETMAXIMUMLOANSIZE, gMaxBankLoan - MONEY(1000, 00),
|
||||
GAME_COMMAND_EDIT_SCENARIO_OPTIONS, 0, 0);
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::MaximumLoanSize, gMaxBankLoan - MONEY(1000, 00));
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -639,9 +641,9 @@ static void window_editor_scenario_options_financial_mousedown(rct_window* w, rc
|
||||
case WIDX_INTEREST_RATE_INCREASE:
|
||||
if (gBankLoanInterestRate < 80)
|
||||
{
|
||||
game_do_command(
|
||||
0, GAME_COMMAND_FLAG_APPLY, EDIT_SCENARIOOPTIONS_SETANNUALINTERESTRATE, gBankLoanInterestRate + 1,
|
||||
GAME_COMMAND_EDIT_SCENARIO_OPTIONS, 0, 0);
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::AnnualInterestRate, gBankLoanInterestRate + 1);
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -652,18 +654,9 @@ static void window_editor_scenario_options_financial_mousedown(rct_window* w, rc
|
||||
case WIDX_INTEREST_RATE_DECREASE:
|
||||
if (gBankLoanInterestRate > 0)
|
||||
{
|
||||
if (gBankLoanInterestRate > 80)
|
||||
{
|
||||
game_do_command(
|
||||
0, GAME_COMMAND_FLAG_APPLY, EDIT_SCENARIOOPTIONS_SETANNUALINTERESTRATE, 80,
|
||||
GAME_COMMAND_EDIT_SCENARIO_OPTIONS, 0, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
game_do_command(
|
||||
0, GAME_COMMAND_FLAG_APPLY, EDIT_SCENARIOOPTIONS_SETANNUALINTERESTRATE, gBankLoanInterestRate - 1,
|
||||
GAME_COMMAND_EDIT_SCENARIO_OPTIONS, 0, 0);
|
||||
}
|
||||
auto interest = std::min(80, gBankLoanInterestRate - 1);
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(ScenarioSetSetting::AnnualInterestRate, interest);
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -820,17 +813,21 @@ static void window_editor_scenario_options_guests_mouseup(rct_window* w, rct_wid
|
||||
window_editor_scenario_options_set_page(w, widgetIndex - WIDX_TAB_1);
|
||||
break;
|
||||
case WIDX_GUEST_PREFER_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);
|
||||
{
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::GuestsPreferLessIntenseRides, gParkFlags & PARK_FLAGS_PREF_LESS_INTENSE_RIDES ? 0 : 1);
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
window_invalidate(w);
|
||||
break;
|
||||
}
|
||||
case WIDX_GUEST_PREFER_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);
|
||||
{
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::GuestsPreferMoreIntenseRides, gParkFlags & PARK_FLAGS_PREF_MORE_INTENSE_RIDES ? 0 : 1);
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
window_invalidate(w);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -854,9 +851,9 @@ static void window_editor_scenario_options_guests_mousedown(rct_window* w, rct_w
|
||||
case WIDX_CASH_PER_GUEST_INCREASE:
|
||||
if (gGuestInitialCash < MONEY(1000, 00))
|
||||
{
|
||||
game_do_command(
|
||||
0, GAME_COMMAND_FLAG_APPLY, EDIT_SCENARIOOPTIONS_SETAVERAGECASHPERGUEST, gGuestInitialCash + MONEY(1, 00),
|
||||
GAME_COMMAND_EDIT_SCENARIO_OPTIONS, 0, 0);
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::AverageCashPerGuest, gGuestInitialCash + MONEY(1, 00));
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -867,9 +864,9 @@ static void window_editor_scenario_options_guests_mousedown(rct_window* w, rct_w
|
||||
case WIDX_CASH_PER_GUEST_DECREASE:
|
||||
if (gGuestInitialCash > MONEY(0, 00))
|
||||
{
|
||||
game_do_command(
|
||||
0, GAME_COMMAND_FLAG_APPLY, EDIT_SCENARIOOPTIONS_SETAVERAGECASHPERGUEST, gGuestInitialCash - MONEY(1, 00),
|
||||
GAME_COMMAND_EDIT_SCENARIO_OPTIONS, 0, 0);
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::AverageCashPerGuest, gGuestInitialCash - MONEY(1, 00));
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -880,9 +877,9 @@ static void window_editor_scenario_options_guests_mousedown(rct_window* w, rct_w
|
||||
case WIDX_GUEST_INITIAL_HAPPINESS_INCREASE:
|
||||
if (gGuestInitialHappiness < 250)
|
||||
{
|
||||
game_do_command(
|
||||
0, GAME_COMMAND_FLAG_APPLY, EDIT_SCENARIOOPTIONS_SETGUESTINITIALHAPPINESS, gGuestInitialHappiness + 4,
|
||||
GAME_COMMAND_EDIT_SCENARIO_OPTIONS, 0, 0);
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::GuestInitialHappiness, gGuestInitialHappiness + 4);
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -893,9 +890,9 @@ static void window_editor_scenario_options_guests_mousedown(rct_window* w, rct_w
|
||||
case WIDX_GUEST_INITIAL_HAPPINESS_DECREASE:
|
||||
if (gGuestInitialHappiness > 40)
|
||||
{
|
||||
game_do_command(
|
||||
0, GAME_COMMAND_FLAG_APPLY, EDIT_SCENARIOOPTIONS_SETGUESTINITIALHAPPINESS, gGuestInitialHappiness - 4,
|
||||
GAME_COMMAND_EDIT_SCENARIO_OPTIONS, 0, 0);
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::GuestInitialHappiness, gGuestInitialHappiness - 4);
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -906,9 +903,9 @@ static void window_editor_scenario_options_guests_mousedown(rct_window* w, rct_w
|
||||
case WIDX_GUEST_INITIAL_HUNGER_INCREASE:
|
||||
if (gGuestInitialHunger > 40)
|
||||
{
|
||||
game_do_command(
|
||||
0, GAME_COMMAND_FLAG_APPLY, EDIT_SCENARIOOPTIONS_SETGUESTINITIALHUNGER, gGuestInitialHunger - 4,
|
||||
GAME_COMMAND_EDIT_SCENARIO_OPTIONS, 0, 0);
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::GuestInitialHunger, gGuestInitialHunger - 4);
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -919,9 +916,9 @@ static void window_editor_scenario_options_guests_mousedown(rct_window* w, rct_w
|
||||
case WIDX_GUEST_INITIAL_HUNGER_DECREASE:
|
||||
if (gGuestInitialHunger < 250)
|
||||
{
|
||||
game_do_command(
|
||||
0, GAME_COMMAND_FLAG_APPLY, EDIT_SCENARIOOPTIONS_SETGUESTINITIALHUNGER, gGuestInitialHunger + 4,
|
||||
GAME_COMMAND_EDIT_SCENARIO_OPTIONS, 0, 0);
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::GuestInitialHunger, gGuestInitialHunger + 4);
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -932,9 +929,9 @@ static void window_editor_scenario_options_guests_mousedown(rct_window* w, rct_w
|
||||
case WIDX_GUEST_INITIAL_THIRST_INCREASE:
|
||||
if (gGuestInitialThirst > 40)
|
||||
{
|
||||
game_do_command(
|
||||
0, GAME_COMMAND_FLAG_APPLY, EDIT_SCENARIOOPTIONS_SETGUESTINITIALTHIRST, gGuestInitialThirst - 4,
|
||||
GAME_COMMAND_EDIT_SCENARIO_OPTIONS, 0, 0);
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::GuestInitialThirst, gGuestInitialThirst - 4);
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -945,9 +942,9 @@ static void window_editor_scenario_options_guests_mousedown(rct_window* w, rct_w
|
||||
case WIDX_GUEST_INITIAL_THIRST_DECREASE:
|
||||
if (gGuestInitialThirst < 250)
|
||||
{
|
||||
game_do_command(
|
||||
0, GAME_COMMAND_FLAG_APPLY, EDIT_SCENARIOOPTIONS_SETGUESTINITIALTHIRST, gGuestInitialThirst + 4,
|
||||
GAME_COMMAND_EDIT_SCENARIO_OPTIONS, 0, 0);
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::GuestInitialThirst, gGuestInitialThirst + 4);
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1097,35 +1094,46 @@ static void window_editor_scenario_options_park_mouseup(rct_window* w, rct_widge
|
||||
window_editor_scenario_options_set_page(w, widgetIndex - WIDX_TAB_1);
|
||||
break;
|
||||
case WIDX_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);
|
||||
{
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::ForbidTreeRemoval, gParkFlags & PARK_FLAGS_FORBID_TREE_REMOVAL ? 0 : 1);
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
window_invalidate(w);
|
||||
break;
|
||||
}
|
||||
case WIDX_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);
|
||||
{
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::ForbidLandscapeChanges, gParkFlags & PARK_FLAGS_FORBID_LANDSCAPE_CHANGES ? 0 : 1);
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
window_invalidate(w);
|
||||
break;
|
||||
}
|
||||
case WIDX_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);
|
||||
{
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::ForbidHighConstruction, gParkFlags & PARK_FLAGS_FORBID_HIGH_CONSTRUCTION ? 0 : 1);
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
window_invalidate(w);
|
||||
break;
|
||||
}
|
||||
case WIDX_HARD_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);
|
||||
{
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::ParkRatingHigherDifficultyLevel, gParkFlags & PARK_FLAGS_DIFFICULT_PARK_RATING ? 0 : 1);
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
window_invalidate(w);
|
||||
break;
|
||||
}
|
||||
case WIDX_HARD_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);
|
||||
{
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::GuestGenerationHigherDifficultyLevel,
|
||||
gParkFlags & PARK_FLAGS_DIFFICULT_GUEST_GENERATION ? 0 : 1);
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
window_invalidate(w);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1151,9 +1159,9 @@ static void window_editor_scenario_options_park_mousedown(rct_window* w, rct_wid
|
||||
case WIDX_LAND_COST_INCREASE:
|
||||
if (gLandPrice < MONEY(200, 00))
|
||||
{
|
||||
game_do_command(
|
||||
0, GAME_COMMAND_FLAG_APPLY, EDIT_SCENARIOOPTIONS_SETCOSTTOBUYLAND, gLandPrice + MONEY(1, 00),
|
||||
GAME_COMMAND_EDIT_SCENARIO_OPTIONS, 0, 0);
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::CostToBuyLand, gLandPrice + MONEY(1, 00));
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1164,9 +1172,9 @@ static void window_editor_scenario_options_park_mousedown(rct_window* w, rct_wid
|
||||
case WIDX_LAND_COST_DECREASE:
|
||||
if (gLandPrice > MONEY(5, 00))
|
||||
{
|
||||
game_do_command(
|
||||
0, GAME_COMMAND_FLAG_APPLY, EDIT_SCENARIOOPTIONS_SETCOSTTOBUYLAND, gLandPrice - MONEY(1, 00),
|
||||
GAME_COMMAND_EDIT_SCENARIO_OPTIONS, 0, 0);
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::CostToBuyLand, gLandPrice - MONEY(1, 00));
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1177,9 +1185,9 @@ static void window_editor_scenario_options_park_mousedown(rct_window* w, rct_wid
|
||||
case WIDX_CONSTRUCTION_RIGHTS_COST_INCREASE:
|
||||
if (gConstructionRightsPrice < MONEY(200, 00))
|
||||
{
|
||||
game_do_command(
|
||||
0, GAME_COMMAND_FLAG_APPLY, EDIT_SCENARIOOPTIONS_SETCOSTTOBUYCONSTRUCTIONRIGHTS,
|
||||
gConstructionRightsPrice + MONEY(1, 00), GAME_COMMAND_EDIT_SCENARIO_OPTIONS, 0, 0);
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::CostToBuyConstructionRights, gConstructionRightsPrice + MONEY(1, 00));
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1190,9 +1198,9 @@ static void window_editor_scenario_options_park_mousedown(rct_window* w, rct_wid
|
||||
case WIDX_CONSTRUCTION_RIGHTS_COST_DECREASE:
|
||||
if (gConstructionRightsPrice > MONEY(5, 00))
|
||||
{
|
||||
game_do_command(
|
||||
0, GAME_COMMAND_FLAG_APPLY, EDIT_SCENARIOOPTIONS_SETCOSTTOBUYCONSTRUCTIONRIGHTS,
|
||||
gConstructionRightsPrice - MONEY(1, 00), GAME_COMMAND_EDIT_SCENARIO_OPTIONS, 0, 0);
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::CostToBuyConstructionRights, gConstructionRightsPrice - MONEY(1, 00));
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1203,9 +1211,9 @@ static void window_editor_scenario_options_park_mousedown(rct_window* w, rct_wid
|
||||
case WIDX_ENTRY_PRICE_INCREASE:
|
||||
if (gParkEntranceFee < MAX_ENTRANCE_FEE)
|
||||
{
|
||||
game_do_command(
|
||||
0, GAME_COMMAND_FLAG_APPLY, EDIT_SCENARIOOPTIONS_SETPARKCHARGEENTRYFEE, gParkEntranceFee + MONEY(1, 00),
|
||||
GAME_COMMAND_EDIT_SCENARIO_OPTIONS, 0, 0);
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::ParkChargeEntryFee, gParkEntranceFee + MONEY(1, 00));
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1216,9 +1224,9 @@ static void window_editor_scenario_options_park_mousedown(rct_window* w, rct_wid
|
||||
case WIDX_ENTRY_PRICE_DECREASE:
|
||||
if (gParkEntranceFee > MONEY(0, 00))
|
||||
{
|
||||
game_do_command(
|
||||
0, GAME_COMMAND_FLAG_APPLY, EDIT_SCENARIOOPTIONS_SETPARKCHARGEENTRYFEE, gParkEntranceFee - MONEY(1, 00),
|
||||
GAME_COMMAND_EDIT_SCENARIO_OPTIONS, 0, 0);
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(
|
||||
ScenarioSetSetting::ParkChargeEntryFee, gParkEntranceFee - MONEY(1, 00));
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1268,12 +1276,12 @@ static void window_editor_scenario_options_park_dropdown(rct_window* w, rct_widg
|
||||
switch (widgetIndex)
|
||||
{
|
||||
case WIDX_PAY_FOR_PARK_OR_RIDES_DROPDOWN:
|
||||
game_do_command(
|
||||
0, GAME_COMMAND_FLAG_APPLY, EDIT_SCENARIOOPTIONS_SETPARKCHARGEMETHOD, dropdownIndex,
|
||||
GAME_COMMAND_EDIT_SCENARIO_OPTIONS, 0, 0);
|
||||
{
|
||||
auto scenarioSetSetting = ScenarioSetSettingAction(ScenarioSetSetting::ParkChargeMethod, dropdownIndex);
|
||||
GameActions::Execute(&scenarioSetSetting);
|
||||
window_invalidate(w);
|
||||
break;
|
||||
|
||||
}
|
||||
case WIDX_CLIMATE_DROPDOWN:
|
||||
if (gClimate != (uint8_t)dropdownIndex)
|
||||
{
|
||||
|
||||
@@ -538,219 +538,6 @@ namespace Editor
|
||||
return true;
|
||||
}
|
||||
|
||||
void GameCommandEditScenarioOptions(
|
||||
[[maybe_unused]] int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, [[maybe_unused]] int32_t* esi,
|
||||
[[maybe_unused]] int32_t* edi, [[maybe_unused]] int32_t* 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 = std::clamp(*edx, MONEY(0, 00), MONEY(1000000, 00));
|
||||
gCash = gInitialCash;
|
||||
window_invalidate_by_class(WC_FINANCES);
|
||||
window_invalidate_by_class(WC_BOTTOM_TOOLBAR);
|
||||
break;
|
||||
case EDIT_SCENARIOOPTIONS_SETINITIALLOAN:
|
||||
gBankLoan = std::clamp(*edx, MONEY(0, 00), MONEY(5000000, 00));
|
||||
gMaxBankLoan = std::max(gBankLoan, gMaxBankLoan);
|
||||
window_invalidate_by_class(WC_FINANCES);
|
||||
break;
|
||||
case EDIT_SCENARIOOPTIONS_SETMAXIMUMLOANSIZE:
|
||||
gMaxBankLoan = std::clamp(*edx, MONEY(0, 00), MONEY(5000000, 00));
|
||||
gBankLoan = std::min(gBankLoan, gMaxBankLoan);
|
||||
window_invalidate_by_class(WC_FINANCES);
|
||||
break;
|
||||
case EDIT_SCENARIOOPTIONS_SETANNUALINTERESTRATE:
|
||||
gBankLoanInterestRate = std::clamp(*edx, 0, 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 = std::clamp(*edx, MONEY(0, 00), MONEY(1000, 00));
|
||||
break;
|
||||
case EDIT_SCENARIOOPTIONS_SETGUESTINITIALHAPPINESS:
|
||||
gGuestInitialHappiness = std::clamp(*edx, 40, 250);
|
||||
break;
|
||||
case EDIT_SCENARIOOPTIONS_SETGUESTINITIALHUNGER:
|
||||
gGuestInitialHunger = std::clamp(*edx, 40, 250);
|
||||
break;
|
||||
case EDIT_SCENARIOOPTIONS_SETGUESTINITIALTHIRST:
|
||||
gGuestInitialThirst = std::clamp(*edx, 40, 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 = std::clamp(*edx, MONEY(5, 00), MONEY(200, 00));
|
||||
break;
|
||||
case EDIT_SCENARIOOPTIONS_SETCOSTTOBUYCONSTRUCTIONRIGHTS:
|
||||
gConstructionRightsPrice = std::clamp(*edx, MONEY(5, 00), MONEY(200, 00));
|
||||
break;
|
||||
case EDIT_SCENARIOOPTIONS_SETPARKCHARGEMETHOD:
|
||||
if (gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR)
|
||||
{
|
||||
if (*edx == 0)
|
||||
{
|
||||
gParkFlags |= PARK_FLAGS_PARK_FREE_ENTRY;
|
||||
gParkFlags &= ~PARK_FLAGS_UNLOCK_ALL_PRICES;
|
||||
gParkEntranceFee = MONEY(0, 00);
|
||||
}
|
||||
else if (*edx == 1)
|
||||
{
|
||||
gParkFlags &= ~PARK_FLAGS_PARK_FREE_ENTRY;
|
||||
gParkFlags &= ~PARK_FLAGS_UNLOCK_ALL_PRICES;
|
||||
gParkEntranceFee = MONEY(10, 00);
|
||||
}
|
||||
else
|
||||
{
|
||||
gParkFlags |= PARK_FLAGS_PARK_FREE_ENTRY;
|
||||
gParkFlags |= PARK_FLAGS_UNLOCK_ALL_PRICES;
|
||||
gParkEntranceFee = MONEY(10, 00);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (*edx == 0)
|
||||
{
|
||||
gParkFlags |= PARK_FLAGS_PARK_FREE_ENTRY;
|
||||
gParkFlags &= ~PARK_FLAGS_UNLOCK_ALL_PRICES;
|
||||
}
|
||||
else if (*edx == 1)
|
||||
{
|
||||
gParkFlags &= ~PARK_FLAGS_PARK_FREE_ENTRY;
|
||||
gParkFlags &= ~PARK_FLAGS_UNLOCK_ALL_PRICES;
|
||||
}
|
||||
else
|
||||
{
|
||||
gParkFlags |= PARK_FLAGS_PARK_FREE_ENTRY;
|
||||
gParkFlags |= PARK_FLAGS_UNLOCK_ALL_PRICES;
|
||||
}
|
||||
window_invalidate_by_class(WC_PARK_INFORMATION);
|
||||
window_invalidate_by_class(WC_RIDE);
|
||||
}
|
||||
break;
|
||||
case EDIT_SCENARIOOPTIONS_SETPARKCHARGEENTRYFEE:
|
||||
gParkEntranceFee = std::clamp(*edx, MONEY(0, 00), MAX_ENTRANCE_FEE);
|
||||
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;
|
||||
}
|
||||
|
||||
uint8_t GetSelectedObjectFlags(int32_t objectType, size_t index)
|
||||
{
|
||||
uint8_t result = 0;
|
||||
@@ -787,9 +574,3 @@ void editor_open_windows_for_current_step()
|
||||
{
|
||||
Editor::OpenWindowsForCurrentStep();
|
||||
}
|
||||
|
||||
void game_command_edit_scenario_options(
|
||||
int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, int32_t* esi, int32_t* edi, int32_t* ebp)
|
||||
{
|
||||
Editor::GameCommandEditScenarioOptions(eax, ebx, ecx, edx, esi, edi, ebp);
|
||||
}
|
||||
|
||||
@@ -24,7 +24,6 @@ namespace Editor
|
||||
int32_t CheckObjectSelection();
|
||||
|
||||
void OpenWindowsForCurrentStep();
|
||||
void GameCommandEditScenarioOptions(int32_t*, int32_t*, int32_t*, int32_t*, int32_t*, int32_t*, int32_t*);
|
||||
|
||||
uint8_t GetSelectedObjectFlags(int32_t objectType, size_t index);
|
||||
void ClearSelectedObject(int32_t objectType, size_t index, uint32_t flags);
|
||||
@@ -70,7 +69,4 @@ enum
|
||||
|
||||
void editor_open_windows_for_current_step();
|
||||
|
||||
void game_command_edit_scenario_options(
|
||||
int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, int32_t* esi, int32_t* edi, int32_t* ebp);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1226,6 +1226,6 @@ GAME_COMMAND_POINTER* new_game_command_table[GAME_COMMAND_COUNT] = {
|
||||
game_command_pickup_staff,
|
||||
nullptr,
|
||||
game_command_modify_tile,
|
||||
game_command_edit_scenario_options,
|
||||
nullptr,
|
||||
NULL,
|
||||
};
|
||||
|
||||
@@ -89,7 +89,7 @@ enum GAME_COMMAND
|
||||
GAME_COMMAND_PICKUP_STAFF,
|
||||
GAME_COMMAND_BALLOON_PRESS, // GA
|
||||
GAME_COMMAND_MODIFY_TILE,
|
||||
GAME_COMMAND_EDIT_SCENARIO_OPTIONS,
|
||||
GAME_COMMAND_EDIT_SCENARIO_OPTIONS, // GA
|
||||
GAME_COMMAND_PLACE_PEEP_SPAWN, // GA, TODO: refactor to separate array for just game actions
|
||||
GAME_COMMAND_SET_CLIMATE, // GA
|
||||
GAME_COMMAND_SET_COLOUR_SCHEME, // GA
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
#include "RideSetSetting.hpp"
|
||||
#include "RideSetStatus.hpp"
|
||||
#include "RideSetVehiclesAction.hpp"
|
||||
#include "ScenarioSetSettingAction.hpp"
|
||||
#include "SetCheatAction.hpp"
|
||||
#include "SetParkEntranceFeeAction.hpp"
|
||||
#include "SignSetNameAction.hpp"
|
||||
@@ -123,6 +124,7 @@ namespace GameActions
|
||||
Register<RideSetAppearanceAction>();
|
||||
Register<RideSetVehicleAction>();
|
||||
Register<RideSetSettingAction>();
|
||||
Register<ScenarioSetSettingAction>();
|
||||
Register<SetParkEntranceFeeAction>();
|
||||
Register<SignSetNameAction>();
|
||||
Register<SignSetStyleAction>();
|
||||
|
||||
290
src/openrct2/actions/ScenarioSetSettingAction.hpp
Normal file
290
src/openrct2/actions/ScenarioSetSettingAction.hpp
Normal file
@@ -0,0 +1,290 @@
|
||||
/*****************************************************************************
|
||||
* Copyright (c) 2014-2019 OpenRCT2 developers
|
||||
*
|
||||
* For a complete list of all authors, please refer to contributors.md
|
||||
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
|
||||
*
|
||||
* OpenRCT2 is licensed under the GNU General Public License version 3.
|
||||
*****************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "../OpenRCT2.h"
|
||||
#include "../interface/Window.h"
|
||||
#include "../management/Finance.h"
|
||||
#include "../peep/Peep.h"
|
||||
#include "../world/Park.h"
|
||||
#include "GameAction.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
enum class ScenarioSetSetting : uint8_t
|
||||
{
|
||||
NoMoney,
|
||||
InitialCash,
|
||||
InitialLoan,
|
||||
MaximumLoanSize,
|
||||
AnnualInterestRate,
|
||||
ForbidMarketingCampaigns,
|
||||
AverageCashPerGuest,
|
||||
GuestInitialHappiness,
|
||||
GuestInitialHunger,
|
||||
GuestInitialThirst,
|
||||
GuestsPreferLessIntenseRides,
|
||||
GuestsPreferMoreIntenseRides,
|
||||
CostToBuyLand,
|
||||
CostToBuyConstructionRights,
|
||||
ParkChargeMethod,
|
||||
ParkChargeEntryFee,
|
||||
ForbidTreeRemoval,
|
||||
ForbidLandscapeChanges,
|
||||
ForbidHighConstruction,
|
||||
ParkRatingHigherDifficultyLevel,
|
||||
GuestGenerationHigherDifficultyLevel,
|
||||
Count
|
||||
};
|
||||
|
||||
DEFINE_GAME_ACTION(ScenarioSetSettingAction, GAME_COMMAND_EDIT_SCENARIO_OPTIONS, GameActionResult)
|
||||
{
|
||||
private:
|
||||
uint8_t _setting{ static_cast<uint8_t>(ScenarioSetSetting::Count) };
|
||||
uint32_t _value{ 0 };
|
||||
|
||||
public:
|
||||
ScenarioSetSettingAction()
|
||||
{
|
||||
}
|
||||
ScenarioSetSettingAction(ScenarioSetSetting setting, uint32_t value)
|
||||
: _setting(static_cast<uint8_t>(setting))
|
||||
, _value(value)
|
||||
{
|
||||
}
|
||||
|
||||
uint16_t GetActionFlags() const override
|
||||
{
|
||||
return GameAction::GetActionFlags() | GA_FLAGS::ALLOW_WHILE_PAUSED;
|
||||
}
|
||||
|
||||
void Serialise(DataSerialiser & stream) override
|
||||
{
|
||||
GameAction::Serialise(stream);
|
||||
|
||||
stream << DS_TAG(_setting) << DS_TAG(_value);
|
||||
}
|
||||
|
||||
GameActionResult::Ptr Query() const override
|
||||
{
|
||||
if (_setting >= static_cast<uint8_t>(ScenarioSetSetting::Count))
|
||||
{
|
||||
log_error("Invalid setting: %u", _setting);
|
||||
return MakeResult(GA_ERROR::INVALID_PARAMETERS, STR_NONE);
|
||||
}
|
||||
|
||||
return MakeResult();
|
||||
}
|
||||
|
||||
GameActionResult::Ptr Execute() const override
|
||||
{
|
||||
switch (static_cast<ScenarioSetSetting>(_setting))
|
||||
{
|
||||
case ScenarioSetSetting::NoMoney:
|
||||
if (gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR)
|
||||
{
|
||||
if (_value != 0)
|
||||
{
|
||||
gParkFlags |= PARK_FLAGS_NO_MONEY_SCENARIO;
|
||||
}
|
||||
else
|
||||
{
|
||||
gParkFlags &= ~PARK_FLAGS_NO_MONEY_SCENARIO;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_value != 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 ScenarioSetSetting::InitialCash:
|
||||
gInitialCash = std::clamp<money32>(_value, MONEY(0, 00), MONEY(1000000, 00));
|
||||
gCash = gInitialCash;
|
||||
window_invalidate_by_class(WC_FINANCES);
|
||||
window_invalidate_by_class(WC_BOTTOM_TOOLBAR);
|
||||
break;
|
||||
case ScenarioSetSetting::InitialLoan:
|
||||
gBankLoan = std::clamp<money32>(_value, MONEY(0, 00), MONEY(5000000, 00));
|
||||
gMaxBankLoan = std::max(gBankLoan, gMaxBankLoan);
|
||||
window_invalidate_by_class(WC_FINANCES);
|
||||
break;
|
||||
case ScenarioSetSetting::MaximumLoanSize:
|
||||
gMaxBankLoan = std::clamp<money32>(_value, MONEY(0, 00), MONEY(5000000, 00));
|
||||
gBankLoan = std::min(gBankLoan, gMaxBankLoan);
|
||||
window_invalidate_by_class(WC_FINANCES);
|
||||
break;
|
||||
case ScenarioSetSetting::AnnualInterestRate:
|
||||
gBankLoanInterestRate = std::clamp<uint8_t>(_value, 0, 80);
|
||||
window_invalidate_by_class(WC_FINANCES);
|
||||
break;
|
||||
case ScenarioSetSetting::ForbidMarketingCampaigns:
|
||||
if (_value != 0)
|
||||
{
|
||||
gParkFlags |= PARK_FLAGS_FORBID_MARKETING_CAMPAIGN;
|
||||
}
|
||||
else
|
||||
{
|
||||
gParkFlags &= ~PARK_FLAGS_FORBID_MARKETING_CAMPAIGN;
|
||||
}
|
||||
break;
|
||||
case ScenarioSetSetting::AverageCashPerGuest:
|
||||
gGuestInitialCash = std::clamp<money32>(_value, MONEY(0, 00), MONEY(1000, 00));
|
||||
break;
|
||||
case ScenarioSetSetting::GuestInitialHappiness:
|
||||
gGuestInitialHappiness = std::clamp<uint8_t>(_value, 40, 250);
|
||||
break;
|
||||
case ScenarioSetSetting::GuestInitialHunger:
|
||||
gGuestInitialHunger = std::clamp<uint8_t>(_value, 40, 250);
|
||||
break;
|
||||
case ScenarioSetSetting::GuestInitialThirst:
|
||||
gGuestInitialThirst = std::clamp<uint8_t>(_value, 40, 250);
|
||||
break;
|
||||
case ScenarioSetSetting::GuestsPreferLessIntenseRides:
|
||||
if (_value != 0)
|
||||
{
|
||||
gParkFlags |= PARK_FLAGS_PREF_LESS_INTENSE_RIDES;
|
||||
}
|
||||
else
|
||||
{
|
||||
gParkFlags &= ~PARK_FLAGS_PREF_LESS_INTENSE_RIDES;
|
||||
}
|
||||
break;
|
||||
case ScenarioSetSetting::GuestsPreferMoreIntenseRides:
|
||||
if (_value != 0)
|
||||
{
|
||||
gParkFlags |= PARK_FLAGS_PREF_MORE_INTENSE_RIDES;
|
||||
}
|
||||
else
|
||||
{
|
||||
gParkFlags &= ~PARK_FLAGS_PREF_MORE_INTENSE_RIDES;
|
||||
}
|
||||
break;
|
||||
case ScenarioSetSetting::CostToBuyLand:
|
||||
gLandPrice = std::clamp<money32>(_value, MONEY(5, 00), MONEY(200, 00));
|
||||
break;
|
||||
case ScenarioSetSetting::CostToBuyConstructionRights:
|
||||
gConstructionRightsPrice = std::clamp<money32>(_value, MONEY(5, 00), MONEY(200, 00));
|
||||
break;
|
||||
case ScenarioSetSetting::ParkChargeMethod:
|
||||
if (gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR)
|
||||
{
|
||||
if (_value == 0)
|
||||
{
|
||||
gParkFlags |= PARK_FLAGS_PARK_FREE_ENTRY;
|
||||
gParkFlags &= ~PARK_FLAGS_UNLOCK_ALL_PRICES;
|
||||
gParkEntranceFee = MONEY(0, 00);
|
||||
}
|
||||
else if (_value == 1)
|
||||
{
|
||||
gParkFlags &= ~PARK_FLAGS_PARK_FREE_ENTRY;
|
||||
gParkFlags &= ~PARK_FLAGS_UNLOCK_ALL_PRICES;
|
||||
gParkEntranceFee = MONEY(10, 00);
|
||||
}
|
||||
else
|
||||
{
|
||||
gParkFlags |= PARK_FLAGS_PARK_FREE_ENTRY;
|
||||
gParkFlags |= PARK_FLAGS_UNLOCK_ALL_PRICES;
|
||||
gParkEntranceFee = MONEY(10, 00);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_value == 0)
|
||||
{
|
||||
gParkFlags |= PARK_FLAGS_PARK_FREE_ENTRY;
|
||||
gParkFlags &= ~PARK_FLAGS_UNLOCK_ALL_PRICES;
|
||||
}
|
||||
else if (_value == 1)
|
||||
{
|
||||
gParkFlags &= ~PARK_FLAGS_PARK_FREE_ENTRY;
|
||||
gParkFlags &= ~PARK_FLAGS_UNLOCK_ALL_PRICES;
|
||||
}
|
||||
else
|
||||
{
|
||||
gParkFlags |= PARK_FLAGS_PARK_FREE_ENTRY;
|
||||
gParkFlags |= PARK_FLAGS_UNLOCK_ALL_PRICES;
|
||||
}
|
||||
window_invalidate_by_class(WC_PARK_INFORMATION);
|
||||
window_invalidate_by_class(WC_RIDE);
|
||||
}
|
||||
break;
|
||||
case ScenarioSetSetting::ParkChargeEntryFee:
|
||||
gParkEntranceFee = std::clamp<money32>(_value, MONEY(0, 00), MAX_ENTRANCE_FEE);
|
||||
window_invalidate_by_class(WC_PARK_INFORMATION);
|
||||
break;
|
||||
case ScenarioSetSetting::ForbidTreeRemoval:
|
||||
if (_value != 0)
|
||||
{
|
||||
gParkFlags |= PARK_FLAGS_FORBID_TREE_REMOVAL;
|
||||
}
|
||||
else
|
||||
{
|
||||
gParkFlags &= ~PARK_FLAGS_FORBID_TREE_REMOVAL;
|
||||
}
|
||||
break;
|
||||
case ScenarioSetSetting::ForbidLandscapeChanges:
|
||||
if (_value != 0)
|
||||
{
|
||||
gParkFlags |= PARK_FLAGS_FORBID_LANDSCAPE_CHANGES;
|
||||
}
|
||||
else
|
||||
{
|
||||
gParkFlags &= ~PARK_FLAGS_FORBID_LANDSCAPE_CHANGES;
|
||||
}
|
||||
break;
|
||||
case ScenarioSetSetting::ForbidHighConstruction:
|
||||
if (_value != 0)
|
||||
{
|
||||
gParkFlags |= PARK_FLAGS_FORBID_HIGH_CONSTRUCTION;
|
||||
}
|
||||
else
|
||||
{
|
||||
gParkFlags &= ~PARK_FLAGS_FORBID_HIGH_CONSTRUCTION;
|
||||
}
|
||||
break;
|
||||
case ScenarioSetSetting::ParkRatingHigherDifficultyLevel:
|
||||
if (_value != 0)
|
||||
{
|
||||
gParkFlags |= PARK_FLAGS_DIFFICULT_PARK_RATING;
|
||||
}
|
||||
else
|
||||
{
|
||||
gParkFlags &= ~PARK_FLAGS_DIFFICULT_PARK_RATING;
|
||||
}
|
||||
break;
|
||||
case ScenarioSetSetting::GuestGenerationHigherDifficultyLevel:
|
||||
if (_value != 0)
|
||||
{
|
||||
gParkFlags |= PARK_FLAGS_DIFFICULT_GUEST_GENERATION;
|
||||
}
|
||||
else
|
||||
{
|
||||
gParkFlags &= ~PARK_FLAGS_DIFFICULT_GUEST_GENERATION;
|
||||
}
|
||||
break;
|
||||
}
|
||||
window_invalidate_by_class(WC_EDITOR_SCENARIO_OPTIONS);
|
||||
return MakeResult();
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user