OpenRCT2/src/openrct2/Cheats.cpp

323 lines
14 KiB
C++
Raw Normal View History

/*****************************************************************************
2020-07-21 15:04:34 +02:00
* Copyright (c) 2014-2020 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.
*****************************************************************************/
2017-12-13 13:02:24 +01:00
#include "Cheats.h"
2018-06-22 23:25:16 +02:00
#include "GameState.h"
Split actions hpp files into separate h and cpp files (#13548) * Split up SmallSceneryPlace/Remove Added undo function for Remove Scenery * Refactor: Balloon and Banner actions hpp=>h/cpp * Refactor: rename all action *.hpp files to *.cpp This is preparation for separation in later commits. Note that without the complete set of commits in this branch, the code will not build. * Refactor Clear, Climate, Custom, and Footpath actions hpp=>h/cpp * VSCode: add src subdirectories to includePath * Refactor Guest actions hpp=>h/cpp * Refactor Land actions hpp=>h/cpp * Refactor LargeScenery actions hpp=>h/cpp * Refactor Load, Maze, Network actions hpp=>h/cpp * Refactor Park actions hpp=>h/cpp * Refactor/style: move private function declarations in actions *.h Previous action .h files included private function declarations with private member variables, before public function declarations. This commit re-orders the header files to the following order: - public member variables - private member variables - public functions - private functions * Refactor Pause action hpp=>h/cpp * Refactor Peep, Place, Player actions hpp=>h/cpp * Refactor Ride actions hpp=>h/cpp * Refactor Scenario, Set*, Sign* actions hpp=>h/cpp * Refactor SmallScenerySetColourAction hpp=>h/cpp * Refactor Staff actions hpp=>h/cpp * Refactor Surface, Tile, Track* actions hpp=>h/cpp * Refactor Wall and Water actions hpp=>h/cpp * Fix various includes and other compile errors Update includes for tests. Move static function declarations to .h files Add explicit includes to various files that were previously implicit (the required header was a nested include in an action hpp file, and the action .h file does not include that header) Move RideSetStatus string enum to the cpp file to avoid unused imports * Xcode: modify project file for actions refactor * Cleanup whitespace and end-of-file newlines Co-authored-by: duncanspumpkin <duncans_pumpkin@hotmail.co.uk>
2020-12-10 07:39:10 +01:00
#include "actions/ParkSetLoanAction.h"
#include "actions/SetCheatAction.h"
2018-06-22 23:25:16 +02:00
#include "config/Config.h"
#include "core/DataSerialiser.h"
2018-01-06 18:32:25 +01:00
#include "localisation/Localisation.h"
2016-04-23 12:03:18 +02:00
#include "network/network.h"
2018-03-19 23:28:40 +01:00
#include "ride/Ride.h"
#include "scenario/Scenario.h"
2017-12-13 13:02:24 +01:00
#include "util/Util.h"
2017-03-11 12:24:18 +01:00
#include "world/Climate.h"
2018-01-11 10:59:26 +01:00
#include "world/Footpath.h"
2018-01-03 14:56:08 +01:00
#include "world/Map.h"
2017-12-31 21:40:00 +01:00
#include "world/Park.h"
2018-01-11 10:59:26 +01:00
#include "world/Scenery.h"
#include "world/Sprite.h"
2018-05-01 16:33:16 +02:00
#include "world/Surface.h"
2015-06-26 23:40:09 +02:00
using namespace OpenRCT2;
// TODO: Refactor this. Cheat variables should contain the cheat type
// and a serialisation method.
2015-06-26 23:40:09 +02:00
bool gCheatsSandboxMode = false;
bool gCheatsDisableClearanceChecks = false;
bool gCheatsDisableSupportLimits = false;
bool gCheatsShowAllOperatingModes = false;
bool gCheatsShowVehiclesFromOtherTrackTypes = false;
2016-01-25 21:24:18 +01:00
bool gCheatsFastLiftHill = false;
bool gCheatsDisableBrakesFailure = false;
bool gCheatsDisableAllBreakdowns = false;
bool gCheatsBuildInPauseMode = false;
bool gCheatsIgnoreRideIntensity = false;
bool gCheatsDisableVandalism = false;
bool gCheatsDisableLittering = false;
bool gCheatsNeverendingMarketing = false;
bool gCheatsFreezeWeather = false;
bool gCheatsDisableTrainLengthLimit = false;
2016-05-29 03:12:31 +02:00
bool gCheatsDisablePlantAging = false;
bool gCheatsEnableChainLiftOnAllTrack = false;
bool gCheatsAllowArbitraryRideTypeChanges = false;
2017-02-09 06:45:51 +01:00
bool gCheatsDisableRideValueAging = false;
2017-07-23 12:09:29 +02:00
bool gCheatsIgnoreResearchStatus = false;
bool gCheatsEnableAllDrawableTrackPieces = false;
bool gCheatsAllowTrackPlaceInvalidHeights = false;
2015-06-26 23:40:09 +02:00
void CheatsReset()
2015-06-26 23:40:09 +02:00
{
gCheatsSandboxMode = false;
gCheatsDisableClearanceChecks = false;
gCheatsDisableSupportLimits = false;
gCheatsShowAllOperatingModes = false;
gCheatsShowVehiclesFromOtherTrackTypes = false;
gCheatsDisableTrainLengthLimit = false;
gCheatsEnableChainLiftOnAllTrack = false;
gCheatsFastLiftHill = false;
gCheatsDisableBrakesFailure = false;
gCheatsDisableAllBreakdowns = false;
gCheatsBuildInPauseMode = false;
gCheatsIgnoreRideIntensity = false;
gCheatsDisableVandalism = false;
gCheatsDisableLittering = false;
gCheatsNeverendingMarketing = false;
gCheatsFreezeWeather = false;
gCheatsDisablePlantAging = false;
gCheatsAllowArbitraryRideTypeChanges = false;
2017-07-06 22:31:04 +02:00
gCheatsDisableRideValueAging = false;
2017-07-23 12:09:29 +02:00
gCheatsIgnoreResearchStatus = false;
gCheatsEnableAllDrawableTrackPieces = false;
gCheatsAllowTrackPlaceInvalidHeights = false;
2015-06-26 23:40:09 +02:00
}
void CheatsSet(CheatType cheatType, int32_t param1 /* = 0*/, int32_t param2 /* = 0*/)
2018-06-22 23:25:16 +02:00
{
auto setCheatAction = SetCheatAction(cheatType, param1, param2);
GameActions::Execute(&setCheatAction);
}
template<typename T> static void CheatEntrySerialise(DataSerialiser& ds, CheatType type, const T& value, uint16_t& count)
{
ds << static_cast<int32_t>(type) << value;
count++;
}
void CheatsSerialise(DataSerialiser& ds)
{
uint16_t count = 0;
if (ds.IsSaving())
{
OpenRCT2::IStream& stream = ds.GetStream();
// Temporarily write 0, will be updated after every cheat is written.
uint64_t countOffset = stream.GetPosition();
ds << count;
CheatEntrySerialise(ds, CheatType::SandboxMode, gCheatsSandboxMode, count);
CheatEntrySerialise(ds, CheatType::DisableClearanceChecks, gCheatsDisableClearanceChecks, count);
CheatEntrySerialise(ds, CheatType::DisableSupportLimits, gCheatsDisableSupportLimits, count);
CheatEntrySerialise(ds, CheatType::ShowAllOperatingModes, gCheatsShowAllOperatingModes, count);
CheatEntrySerialise(ds, CheatType::ShowVehiclesFromOtherTrackTypes, gCheatsShowVehiclesFromOtherTrackTypes, count);
CheatEntrySerialise(ds, CheatType::FastLiftHill, gCheatsFastLiftHill, count);
CheatEntrySerialise(ds, CheatType::DisableBrakesFailure, gCheatsDisableBrakesFailure, count);
CheatEntrySerialise(ds, CheatType::DisableAllBreakdowns, gCheatsDisableAllBreakdowns, count);
CheatEntrySerialise(ds, CheatType::BuildInPauseMode, gCheatsBuildInPauseMode, count);
CheatEntrySerialise(ds, CheatType::IgnoreRideIntensity, gCheatsIgnoreRideIntensity, count);
CheatEntrySerialise(ds, CheatType::DisableVandalism, gCheatsDisableVandalism, count);
CheatEntrySerialise(ds, CheatType::DisableLittering, gCheatsDisableLittering, count);
CheatEntrySerialise(ds, CheatType::NeverEndingMarketing, gCheatsNeverendingMarketing, count);
CheatEntrySerialise(ds, CheatType::FreezeWeather, gCheatsFreezeWeather, count);
CheatEntrySerialise(ds, CheatType::DisableTrainLengthLimit, gCheatsDisableTrainLengthLimit, count);
CheatEntrySerialise(ds, CheatType::DisablePlantAging, gCheatsDisablePlantAging, count);
CheatEntrySerialise(ds, CheatType::EnableChainLiftOnAllTrack, gCheatsEnableChainLiftOnAllTrack, count);
CheatEntrySerialise(ds, CheatType::AllowArbitraryRideTypeChanges, gCheatsAllowArbitraryRideTypeChanges, count);
CheatEntrySerialise(ds, CheatType::DisableRideValueAging, gCheatsDisableRideValueAging, count);
CheatEntrySerialise(ds, CheatType::IgnoreResearchStatus, gCheatsIgnoreResearchStatus, count);
CheatEntrySerialise(ds, CheatType::EnableAllDrawableTrackPieces, gCheatsEnableAllDrawableTrackPieces, count);
CheatEntrySerialise(ds, CheatType::AllowTrackPlaceInvalidHeights, gCheatsAllowTrackPlaceInvalidHeights, count);
// Remember current position and update count.
uint64_t endOffset = stream.GetPosition();
stream.SetPosition(countOffset);
ds << count; // Write correct count.
// Set position back.
stream.SetPosition(endOffset);
}
else
{
ds << count;
for (uint16_t i = 0; i < count; i++)
{
2019-07-27 16:10:53 +02:00
int32_t type = 0;
ds << type;
2019-07-27 16:10:53 +02:00
switch (static_cast<CheatType>(type))
{
case CheatType::SandboxMode:
ds << gCheatsSandboxMode;
break;
case CheatType::DisableClearanceChecks:
ds << gCheatsDisableClearanceChecks;
break;
case CheatType::DisableSupportLimits:
ds << gCheatsDisableSupportLimits;
break;
case CheatType::ShowAllOperatingModes:
ds << gCheatsShowAllOperatingModes;
break;
case CheatType::ShowVehiclesFromOtherTrackTypes:
ds << gCheatsShowVehiclesFromOtherTrackTypes;
break;
case CheatType::FastLiftHill:
ds << gCheatsFastLiftHill;
break;
case CheatType::DisableBrakesFailure:
ds << gCheatsDisableBrakesFailure;
break;
case CheatType::DisableAllBreakdowns:
ds << gCheatsDisableAllBreakdowns;
break;
case CheatType::BuildInPauseMode:
ds << gCheatsBuildInPauseMode;
break;
case CheatType::IgnoreRideIntensity:
ds << gCheatsIgnoreRideIntensity;
break;
case CheatType::DisableVandalism:
ds << gCheatsDisableVandalism;
break;
case CheatType::DisableLittering:
ds << gCheatsDisableLittering;
break;
case CheatType::NeverEndingMarketing:
ds << gCheatsNeverendingMarketing;
break;
case CheatType::FreezeWeather:
ds << gCheatsFreezeWeather;
break;
case CheatType::DisableTrainLengthLimit:
ds << gCheatsDisableTrainLengthLimit;
break;
case CheatType::DisablePlantAging:
ds << gCheatsDisablePlantAging;
break;
case CheatType::EnableChainLiftOnAllTrack:
ds << gCheatsEnableChainLiftOnAllTrack;
break;
case CheatType::AllowArbitraryRideTypeChanges:
ds << gCheatsAllowArbitraryRideTypeChanges;
break;
case CheatType::DisableRideValueAging:
ds << gCheatsDisableRideValueAging;
break;
case CheatType::IgnoreResearchStatus:
ds << gCheatsIgnoreResearchStatus;
break;
case CheatType::EnableAllDrawableTrackPieces:
ds << gCheatsEnableAllDrawableTrackPieces;
break;
case CheatType::AllowTrackPlaceInvalidHeights:
ds << gCheatsAllowTrackPlaceInvalidHeights;
break;
2019-07-27 16:10:53 +02:00
default:
break;
}
}
}
}
const char* CheatsGetName(CheatType cheatType)
{
switch (cheatType)
2018-06-22 23:25:16 +02:00
{
case CheatType::SandboxMode:
return language_get_string(STR_CHEAT_SANDBOX_MODE);
case CheatType::DisableClearanceChecks:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_DISABLE_CLEARANCE_CHECKS);
case CheatType::DisableSupportLimits:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_DISABLE_SUPPORT_LIMITS);
case CheatType::ShowAllOperatingModes:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_SHOW_ALL_OPERATING_MODES);
case CheatType::ShowVehiclesFromOtherTrackTypes:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_SHOW_VEHICLES_FROM_OTHER_TRACK_TYPES);
case CheatType::FastLiftHill:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_UNLOCK_OPERATING_LIMITS);
case CheatType::DisableBrakesFailure:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_DISABLE_BRAKES_FAILURE);
case CheatType::DisableAllBreakdowns:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_DISABLE_BREAKDOWNS);
case CheatType::DisableTrainLengthLimit:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_DISABLE_TRAIN_LENGTH_LIMIT);
case CheatType::EnableChainLiftOnAllTrack:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_ENABLE_CHAIN_LIFT_ON_ALL_TRACK);
case CheatType::BuildInPauseMode:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_BUILD_IN_PAUSE_MODE);
case CheatType::IgnoreRideIntensity:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_IGNORE_INTENSITY);
case CheatType::DisableVandalism:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_DISABLE_VANDALISM);
case CheatType::DisableLittering:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_DISABLE_LITTERING);
case CheatType::NoMoney:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_MAKE_PARK_NO_MONEY);
case CheatType::AddMoney:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_LOG_CHEAT_ADD_MONEY);
case CheatType::ClearLoan:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_CLEAR_LOAN);
case CheatType::SetGuestParameter:
return language_get_string(STR_CHEAT_SET_GUESTS_PARAMETERS);
case CheatType::GenerateGuests:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_LARGE_TRAM_GUESTS);
case CheatType::RemoveAllGuests:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_REMOVE_ALL_GUESTS);
case CheatType::GiveAllGuests:
return language_get_string(STR_CHEAT_GIVE_ALL_GUESTS);
case CheatType::SetGrassLength:
2019-01-02 22:22:52 +01:00
return language_get_string(STR_CHEAT_CLEAR_GRASS);
case CheatType::WaterPlants:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_WATER_PLANTS);
case CheatType::FixVandalism:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_FIX_VANDALISM);
case CheatType::RemoveLitter:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_REMOVE_LITTER);
case CheatType::DisablePlantAging:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_DISABLE_PLANT_AGING);
case CheatType::SetStaffSpeed:
return language_get_string(STR_CHEAT_STAFF_SPEED);
case CheatType::RenewRides:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_RENEW_RIDES);
case CheatType::MakeDestructible:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_MAKE_DESTRUCTABLE);
case CheatType::FixRides:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_FIX_ALL_RIDES);
case CheatType::ResetCrashStatus:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_RESET_CRASH_STATUS);
case CheatType::TenMinuteInspections:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_10_MINUTE_INSPECTIONS);
case CheatType::WinScenario:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_WIN_SCENARIO);
case CheatType::ForceWeather:
return language_get_string(STR_CHANGE_WEATHER);
case CheatType::FreezeWeather:
return language_get_string(STR_CHEAT_FREEZE_WEATHER);
case CheatType::NeverEndingMarketing:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_NEVERENDING_MARKETING);
case CheatType::OpenClosePark:
return language_get_string(STR_CHEAT_OPEN_PARK);
case CheatType::HaveFun:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_HAVE_FUN);
case CheatType::SetForcedParkRating:
return language_get_string(STR_FORCE_PARK_RATING);
case CheatType::AllowArbitraryRideTypeChanges:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_ALLOW_ARBITRARY_RIDE_TYPE_CHANGES);
case CheatType::SetMoney:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_SET_MONEY);
case CheatType::OwnAllLand:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_OWN_ALL_LAND);
case CheatType::DisableRideValueAging:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_DISABLE_RIDE_VALUE_AGING);
case CheatType::IgnoreResearchStatus:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_IGNORE_RESEARCH_STATUS);
case CheatType::EnableAllDrawableTrackPieces:
2018-06-22 23:25:16 +02:00
return language_get_string(STR_CHEAT_ENABLE_ALL_DRAWABLE_TRACK_PIECES);
case CheatType::AllowTrackPlaceInvalidHeights:
return language_get_string(STR_CHEAT_ALLOW_TRACK_PLACE_INVALID_HEIGHTS);
default:
return "Unknown Cheat";
}
}