mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-15 19:13:07 +01:00
Close #10572: Add cheat to allow building at invalid heights
This commit is contained in:
@@ -3682,6 +3682,8 @@ STR_6365 :Ride casualties
|
||||
STR_6366 :Stuck or stalled vehicles
|
||||
STR_6367 :{WINDOW_COLOUR_2}Animation frame:
|
||||
STR_6368 :For compatibility reasons, it is not recommended to run OpenRCT2 with Wine. OpenRCT2 has native support for macOS, Linux, FreeBSD and OpenBSD.
|
||||
STR_6369 :Allow building track at invalid heights
|
||||
STR_6370 :{SMALLFONT}{BLACK}Allows placing track pieces at any height interval
|
||||
|
||||
#############
|
||||
# Scenarios #
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
0.2.6+ (in development)
|
||||
------------------------------------------------------------------------
|
||||
- Feature: [#9029] Open doors with the tile inspector.
|
||||
- Feature: [#10572] Cheat to allow building at invalid heights.
|
||||
- Feature: [#11231] Change shortcut window list order to be more intuitive, and split it into logical sections.
|
||||
- Feature: [#11306] Path additions are now kept when replacing the path.
|
||||
- Change: [#11209] Warn when user is running OpenRCT2 through Wine.
|
||||
|
||||
@@ -160,6 +160,7 @@ enum WINDOW_CHEATS_WIDGET_IDX
|
||||
WIDX_BUILD_IN_PAUSE_MODE,
|
||||
WIDX_ENABLE_ALL_DRAWABLE_TRACK_PIECES,
|
||||
WIDX_ENABLE_CHAIN_LIFT_ON_ALL_TRACK,
|
||||
WIDX_ALLOW_TRACK_PLACE_INVALID_HEIGHTS,
|
||||
WIDX_OPERATION_MODES_GROUP,
|
||||
WIDX_SHOW_ALL_OPERATING_MODES,
|
||||
WIDX_FAST_LIFT_HILL,
|
||||
@@ -303,21 +304,22 @@ static rct_widget window_cheats_rides_widgets[] =
|
||||
{ WWT_BUTTON, 1, XPL(0), WPL(0), YPL(1), HPL(1), STR_CHEAT_MAKE_DESTRUCTABLE, STR_CHEAT_MAKE_DESTRUCTABLE_TIP }, // All destructible
|
||||
{ WWT_BUTTON, 1, XPL(1), WPL(1), YPL(1), HPL(1), STR_CHEAT_RESET_CRASH_STATUS, STR_CHEAT_RESET_CRASH_STATUS_TIP }, // Reset crash status
|
||||
{ WWT_BUTTON, 1, XPL(0), WPL(0), YPL(2), HPL(2), STR_CHEAT_10_MINUTE_INSPECTIONS, STR_CHEAT_10_MINUTE_INSPECTIONS_TIP }, // 10 minute inspections
|
||||
{ WWT_GROUPBOX, 1, XPL(0) - GROUP_SPACE, WPL(1) + GROUP_SPACE, YPL(3.25), HPL(6.25), STR_CHEAT_GROUP_CONSTRUCTION, STR_NONE }, // Construction group
|
||||
{ WWT_GROUPBOX, 1, XPL(0) - GROUP_SPACE, WPL(1) + GROUP_SPACE, YPL(3.25), HPL(7.25), STR_CHEAT_GROUP_CONSTRUCTION, STR_NONE }, // Construction group
|
||||
{ WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(4), OHPL(4), STR_CHEAT_BUILD_IN_PAUSE_MODE, STR_CHEAT_BUILD_IN_PAUSE_MODE_TIP }, // Build in pause mode
|
||||
{ WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(5), OHPL(5), STR_CHEAT_ENABLE_ALL_DRAWABLE_TRACK_PIECES, STR_CHEAT_ENABLE_ALL_DRAWABLE_TRACK_PIECES_TIP}, // Show all drawable track pieces
|
||||
{ WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(6), OHPL(6), STR_CHEAT_ENABLE_CHAIN_LIFT_ON_ALL_TRACK, STR_CHEAT_ENABLE_CHAIN_LIFT_ON_ALL_TRACK_TIP }, // Enable chain lift on all track
|
||||
{ WWT_GROUPBOX, 1, XPL(0) - GROUP_SPACE, WPL(1) + GROUP_SPACE, YPL(7.25), HPL(12.25), STR_CHEAT_GROUP_OPERATION, STR_NONE }, // Construction group
|
||||
{ WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(8), OHPL(8), STR_CHEAT_SHOW_ALL_OPERATING_MODES, STR_NONE }, // Show all operating modes
|
||||
{ WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(9), OHPL(9), STR_CHEAT_UNLOCK_OPERATING_LIMITS, STR_CHEAT_UNLOCK_OPERATING_LIMITS_TIP },// 410 km/h lift hill etc.
|
||||
{ WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(10), OHPL(10), STR_CHEAT_DISABLE_BRAKES_FAILURE, STR_CHEAT_DISABLE_BRAKES_FAILURE_TIP }, // Disable brakes failure
|
||||
{ WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(11), OHPL(11), STR_CHEAT_DISABLE_BREAKDOWNS, STR_CHEAT_DISABLE_BREAKDOWNS_TIP }, // Disable all breakdowns
|
||||
{ WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(12), OHPL(12), STR_CHEAT_DISABLE_RIDE_VALUE_AGING, STR_CHEAT_DISABLE_RIDE_VALUE_AGING_TIP }, // Disable ride ageing
|
||||
{ WWT_GROUPBOX, 1, XPL(0) - GROUP_SPACE, WPL(1) + GROUP_SPACE, YPL(13.25), HPL(17.25), STR_CHEAT_GROUP_AVAILABILITY, STR_NONE }, // Construction group
|
||||
{ WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(14), OHPL(14), STR_CHEAT_ALLOW_ARBITRARY_RIDE_TYPE_CHANGES, STR_CHEAT_ALLOW_ARBITRARY_RIDE_TYPE_CHANGES_TIP }, // Allow arbitrary ride type changes
|
||||
{ WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(15), OHPL(15), STR_CHEAT_SHOW_VEHICLES_FROM_OTHER_TRACK_TYPES, STR_NONE }, // Show vehicles from other track types
|
||||
{ WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(16), OHPL(16), STR_CHEAT_DISABLE_TRAIN_LENGTH_LIMIT, STR_CHEAT_DISABLE_TRAIN_LENGTH_LIMIT_TIP }, // Disable train length limits
|
||||
{ WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(17), OHPL(17), STR_CHEAT_IGNORE_RESEARCH_STATUS, STR_CHEAT_IGNORE_RESEARCH_STATUS_TIP}, // Ignore Research Status
|
||||
{ WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(7), OHPL(7), STR_CHEAT_ALLOW_TRACK_PLACE_INVALID_HEIGHTS, STR_CHEAT_ALLOW_TRACK_PLACE_INVALID_HEIGHTS_TIP }, // Enable chain lift on all track
|
||||
{ WWT_GROUPBOX, 1, XPL(0) - GROUP_SPACE, WPL(1) + GROUP_SPACE, YPL(8.25), HPL(13.25), STR_CHEAT_GROUP_OPERATION, STR_NONE }, // Construction group
|
||||
{ WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(9), OHPL(9), STR_CHEAT_SHOW_ALL_OPERATING_MODES, STR_NONE }, // Show all operating modes
|
||||
{ WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(10), OHPL(10), STR_CHEAT_UNLOCK_OPERATING_LIMITS, STR_CHEAT_UNLOCK_OPERATING_LIMITS_TIP },// 410 km/h lift hill etc.
|
||||
{ WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(11), OHPL(11), STR_CHEAT_DISABLE_BRAKES_FAILURE, STR_CHEAT_DISABLE_BRAKES_FAILURE_TIP }, // Disable brakes failure
|
||||
{ WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(12), OHPL(12), STR_CHEAT_DISABLE_BREAKDOWNS, STR_CHEAT_DISABLE_BREAKDOWNS_TIP }, // Disable all breakdowns
|
||||
{ WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(13), OHPL(13), STR_CHEAT_DISABLE_RIDE_VALUE_AGING, STR_CHEAT_DISABLE_RIDE_VALUE_AGING_TIP }, // Disable ride ageing
|
||||
{ WWT_GROUPBOX, 1, XPL(0) - GROUP_SPACE, WPL(1) + GROUP_SPACE, YPL(14.25), HPL(18.25), STR_CHEAT_GROUP_AVAILABILITY, STR_NONE }, // Construction group
|
||||
{ WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(15), OHPL(15), STR_CHEAT_ALLOW_ARBITRARY_RIDE_TYPE_CHANGES, STR_CHEAT_ALLOW_ARBITRARY_RIDE_TYPE_CHANGES_TIP }, // Allow arbitrary ride type changes
|
||||
{ WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(16), OHPL(16), STR_CHEAT_SHOW_VEHICLES_FROM_OTHER_TRACK_TYPES, STR_NONE }, // Show vehicles from other track types
|
||||
{ WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(17), OHPL(17), STR_CHEAT_DISABLE_TRAIN_LENGTH_LIMIT, STR_CHEAT_DISABLE_TRAIN_LENGTH_LIMIT_TIP }, // Disable train length limits
|
||||
{ WWT_CHECKBOX, 1, XPL(0), OWPL, YPL(18), OHPL(18), STR_CHEAT_IGNORE_RESEARCH_STATUS, STR_CHEAT_IGNORE_RESEARCH_STATUS_TIP}, // Ignore Research Status
|
||||
|
||||
{ WIDGETS_END },
|
||||
};
|
||||
@@ -577,7 +579,8 @@ static uint64_t window_cheats_page_enabled_widgets[] = {
|
||||
(1ULL << WIDX_ENABLE_ARBITRARY_RIDE_TYPE_CHANGES) |
|
||||
(1ULL << WIDX_DISABLE_RIDE_VALUE_AGING) |
|
||||
(1ULL << WIDX_IGNORE_RESEARCH_STATUS) |
|
||||
(1ULL << WIDX_ENABLE_ALL_DRAWABLE_TRACK_PIECES)
|
||||
(1ULL << WIDX_ENABLE_ALL_DRAWABLE_TRACK_PIECES) |
|
||||
(1ULL << WIDX_ALLOW_TRACK_PLACE_INVALID_HEIGHTS)
|
||||
};
|
||||
|
||||
static uint64_t window_cheats_page_hold_down_widgets[] = {
|
||||
@@ -1074,6 +1077,15 @@ static void window_cheats_rides_mouseup(rct_window* w, rct_widgetindex widgetInd
|
||||
case WIDX_ENABLE_ALL_DRAWABLE_TRACK_PIECES:
|
||||
CheatsSet(CheatType::EnableAllDrawableTrackPieces, !gCheatsEnableAllDrawableTrackPieces);
|
||||
break;
|
||||
case WIDX_ALLOW_TRACK_PLACE_INVALID_HEIGHTS:
|
||||
{
|
||||
if (!gCheatsAllowTrackPlaceInvalidHeights)
|
||||
{
|
||||
context_show_error(STR_WARNING_IN_CAPS, STR_THIS_FEATURE_IS_CURRENTLY_UNSTABLE);
|
||||
}
|
||||
CheatsSet(CheatType::AllowTrackPlaceInvalidHeights, !gCheatsAllowTrackPlaceInvalidHeights);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1168,6 +1180,7 @@ static void window_cheats_invalidate(rct_window* w)
|
||||
widget_set_checkbox_value(w, WIDX_DISABLE_RIDE_VALUE_AGING, gCheatsDisableRideValueAging);
|
||||
widget_set_checkbox_value(w, WIDX_IGNORE_RESEARCH_STATUS, gCheatsIgnoreResearchStatus);
|
||||
widget_set_checkbox_value(w, WIDX_ENABLE_ALL_DRAWABLE_TRACK_PIECES, gCheatsEnableAllDrawableTrackPieces);
|
||||
widget_set_checkbox_value(w, WIDX_ALLOW_TRACK_PLACE_INVALID_HEIGHTS, gCheatsAllowTrackPlaceInvalidHeights);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -52,6 +52,7 @@ bool gCheatsAllowArbitraryRideTypeChanges = false;
|
||||
bool gCheatsDisableRideValueAging = false;
|
||||
bool gCheatsIgnoreResearchStatus = false;
|
||||
bool gCheatsEnableAllDrawableTrackPieces = false;
|
||||
bool gCheatsAllowTrackPlaceInvalidHeights = false;
|
||||
|
||||
void CheatsReset()
|
||||
{
|
||||
@@ -75,6 +76,8 @@ void CheatsReset()
|
||||
gCheatsAllowArbitraryRideTypeChanges = false;
|
||||
gCheatsDisableRideValueAging = false;
|
||||
gCheatsIgnoreResearchStatus = false;
|
||||
gCheatsEnableAllDrawableTrackPieces = false;
|
||||
gCheatsAllowTrackPlaceInvalidHeights = false;
|
||||
}
|
||||
|
||||
void CheatsSet(CheatType cheatType, int32_t param1 /* = 0*/, int32_t param2 /* = 0*/)
|
||||
@@ -122,6 +125,7 @@ void CheatsSerialise(DataSerialiser& ds)
|
||||
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();
|
||||
@@ -206,6 +210,9 @@ void CheatsSerialise(DataSerialiser& ds)
|
||||
case CheatType::EnableAllDrawableTrackPieces:
|
||||
ds << gCheatsEnableAllDrawableTrackPieces;
|
||||
break;
|
||||
case CheatType::AllowTrackPlaceInvalidHeights:
|
||||
ds << gCheatsAllowTrackPlaceInvalidHeights;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -309,6 +316,8 @@ const char* CheatsGetName(CheatType cheatType)
|
||||
return language_get_string(STR_CHEAT_IGNORE_RESEARCH_STATUS);
|
||||
case CheatType::EnableAllDrawableTrackPieces:
|
||||
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";
|
||||
}
|
||||
|
||||
@@ -33,6 +33,7 @@ extern bool gCheatsEnableChainLiftOnAllTrack;
|
||||
extern bool gCheatsAllowArbitraryRideTypeChanges;
|
||||
extern bool gCheatsIgnoreResearchStatus;
|
||||
extern bool gCheatsEnableAllDrawableTrackPieces;
|
||||
extern bool gCheatsAllowTrackPlaceInvalidHeights;
|
||||
|
||||
enum class CheatType : int32_t
|
||||
{
|
||||
@@ -85,6 +86,7 @@ enum class CheatType : int32_t
|
||||
EnableAllDrawableTrackPieces,
|
||||
CreateDucks,
|
||||
RemoveDucks,
|
||||
AllowTrackPlaceInvalidHeights,
|
||||
Count,
|
||||
};
|
||||
|
||||
|
||||
@@ -237,6 +237,9 @@ public:
|
||||
case CheatType::RemoveDucks:
|
||||
duck_remove_all();
|
||||
break;
|
||||
case CheatType::AllowTrackPlaceInvalidHeights:
|
||||
gCheatsAllowTrackPlaceInvalidHeights = _param1 != 0;
|
||||
break;
|
||||
default:
|
||||
{
|
||||
log_error("Unabled cheat: %d", _cheatType.id);
|
||||
|
||||
@@ -183,18 +183,21 @@ public:
|
||||
return std::make_unique<TrackPlaceActionResult>(GA_ERROR::NO_FREE_ELEMENTS, STR_TILE_ELEMENT_LIMIT_REACHED);
|
||||
}
|
||||
const uint16_t* trackFlags = (rideTypeFlags & RIDE_TYPE_FLAG_FLAT_RIDE) ? FlatTrackFlags : TrackFlags;
|
||||
if (trackFlags[_trackType] & TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT)
|
||||
if (!gCheatsAllowTrackPlaceInvalidHeights)
|
||||
{
|
||||
if ((_origin.z & 0x0F) != 8)
|
||||
if (trackFlags[_trackType] & TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT)
|
||||
{
|
||||
return std::make_unique<TrackPlaceActionResult>(GA_ERROR::INVALID_PARAMETERS, STR_CONSTRUCTION_ERR_UNKNOWN);
|
||||
if ((_origin.z & 0x0F) != 8)
|
||||
{
|
||||
return std::make_unique<TrackPlaceActionResult>(GA_ERROR::INVALID_PARAMETERS, STR_CONSTRUCTION_ERR_UNKNOWN);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((_origin.z & 0x0F) != 0)
|
||||
else
|
||||
{
|
||||
return std::make_unique<TrackPlaceActionResult>(GA_ERROR::INVALID_PARAMETERS, STR_CONSTRUCTION_ERR_UNKNOWN);
|
||||
if ((_origin.z & 0x0F) != 0)
|
||||
{
|
||||
return std::make_unique<TrackPlaceActionResult>(GA_ERROR::INVALID_PARAMETERS, STR_CONSTRUCTION_ERR_UNKNOWN);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3919,6 +3919,8 @@ enum
|
||||
STR_TILE_INSPECTOR_WALL_ANIMATION_FRAME = 6367,
|
||||
|
||||
STR_WINE_NOT_RECOMMENDED = 6368,
|
||||
STR_CHEAT_ALLOW_TRACK_PLACE_INVALID_HEIGHTS = 6369,
|
||||
STR_CHEAT_ALLOW_TRACK_PLACE_INVALID_HEIGHTS_TIP = 6370,
|
||||
|
||||
// Have to include resource strings (from scenarios and objects) for the time being now that language is partially working
|
||||
/* MAX_STR_COUNT = 32768 */ // MAX_STR_COUNT - upper limit for number of strings, not the current count strings
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
// This string 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 "6"
|
||||
#define NETWORK_STREAM_VERSION "7"
|
||||
#define NETWORK_STREAM_ID OPENRCT2_VERSION "-" NETWORK_STREAM_VERSION
|
||||
|
||||
static Peep* _pickup_peep = nullptr;
|
||||
@@ -2729,6 +2729,7 @@ bool Network::LoadMap(IStream* stream)
|
||||
gGamePaused = stream->ReadValue<uint32_t>();
|
||||
_guestGenerationProbability = stream->ReadValue<uint32_t>();
|
||||
_suggestedGuestMaximum = stream->ReadValue<uint32_t>();
|
||||
gCheatsAllowTrackPlaceInvalidHeights = stream->ReadValue<uint8_t>() != 0;
|
||||
gCheatsEnableAllDrawableTrackPieces = stream->ReadValue<uint8_t>() != 0;
|
||||
gCheatsSandboxMode = stream->ReadValue<uint8_t>() != 0;
|
||||
gCheatsDisableClearanceChecks = stream->ReadValue<uint8_t>() != 0;
|
||||
@@ -2777,6 +2778,7 @@ bool Network::SaveMap(IStream* stream, const std::vector<const ObjectRepositoryI
|
||||
stream->WriteValue<uint32_t>(gGamePaused);
|
||||
stream->WriteValue<uint32_t>(_guestGenerationProbability);
|
||||
stream->WriteValue<uint32_t>(_suggestedGuestMaximum);
|
||||
stream->WriteValue<uint8_t>(gCheatsAllowTrackPlaceInvalidHeights);
|
||||
stream->WriteValue<uint8_t>(gCheatsEnableAllDrawableTrackPieces);
|
||||
stream->WriteValue<uint8_t>(gCheatsSandboxMode);
|
||||
stream->WriteValue<uint8_t>(gCheatsDisableClearanceChecks);
|
||||
|
||||
Reference in New Issue
Block a user