mirror of https://github.com/OpenRCT2/OpenRCT2.git
Implement 'Create Ducks' cheat
This commit is contained in:
parent
2e090493f2
commit
7fa41bb82d
|
@ -3724,7 +3724,7 @@ STR_6273 :Music
|
|||
STR_6274 :Can't set colour scheme...
|
||||
STR_6275 :{WINDOW_COLOUR_2}Station style:
|
||||
STR_6276 :{RED}{STRINGID} has guests getting stuck, possibly due to invalid ride type or operating mode.
|
||||
STR_6277 :{WINDOW_COLOUR_2}Station index: {BLACK}{COMMA16}
|
||||
STR_6277 :{WINDOW_COLOUR_2}Station index: {BLACK}{STRINGID}
|
||||
STR_6278 :Autosave amount
|
||||
STR_6279 :{SMALLFONT}{BLACK}Number of autosaves that should be kept
|
||||
STR_6280 :{SMALLFONT}{BLACK}Chat
|
||||
|
@ -3778,6 +3778,7 @@ STR_6327 :Transparent background for giant screenshots
|
|||
STR_6328 :{SMALLFONT}{BLACK}With this option enabled, giant screenshots will have a transparent background instead of the default black colour.
|
||||
STR_6329 :{STRING}{STRINGID}
|
||||
STR_6330 :Downloading [{STRING}] from {STRING} ({COMMA16} / {COMMA16})
|
||||
STR_6331 :Create Ducks
|
||||
|
||||
#############
|
||||
# Scenarios #
|
||||
|
|
|
@ -126,6 +126,7 @@ enum WINDOW_CHEATS_WIDGET_IDX
|
|||
|
||||
WIDX_GENERAL_GROUP = WIDX_TAB_CONTENT,
|
||||
WIDX_OPEN_CLOSE_PARK,
|
||||
WIDX_CREATE_DUCKS,
|
||||
WIDX_PARK_PARAMETERS,
|
||||
WIDX_OWN_ALL_LAND,
|
||||
WIDX_FORCE_PARK_RATING,
|
||||
|
@ -269,6 +270,7 @@ static rct_widget window_cheats_misc_widgets[] =
|
|||
MAIN_CHEATS_WIDGETS,
|
||||
{ WWT_GROUPBOX, 1, XPL(0) - GROUP_SPACE, WPL(1) + GROUP_SPACE, YPL(0), HPL(7.25), STR_CHEAT_GENERAL_GROUP, STR_NONE }, // General group
|
||||
{ WWT_BUTTON, 1, XPL(0), WPL(0), YPL(1), HPL(1), STR_CHEAT_OPEN_PARK, STR_CHEAT_OPEN_PARK_TIP }, // open / close park
|
||||
{ WWT_BUTTON, 1, XPL(0), WPL(0), YPL(2), HPL(2), STR_CREATE_DUCKS, STR_CREATE_DUCKS }, // Create ducks
|
||||
{ WWT_BUTTON, 1, XPL(1), WPL(1), YPL(1), HPL(1), STR_CHEAT_PARK_PARAMETERS, STR_CHEAT_PARK_PARAMETERS_TIP }, // Park parameters
|
||||
{ WWT_BUTTON, 1, XPL(0), WPL(0), YPL(3), HPL(3), STR_CHEAT_OWN_ALL_LAND, STR_CHEAT_OWN_ALL_LAND_TIP }, // Own all land
|
||||
{ WWT_CHECKBOX, 1, XPL(0), WPL(0), YPL(5), HPL(5), STR_FORCE_PARK_RATING, STR_NONE }, // Force park rating
|
||||
|
@ -535,6 +537,7 @@ static uint64_t window_cheats_page_enabled_widgets[] = {
|
|||
MAIN_CHEAT_ENABLED_WIDGETS |
|
||||
(1ULL << WIDX_FREEZE_WEATHER) |
|
||||
(1ULL << WIDX_OPEN_CLOSE_PARK) |
|
||||
(1ULL << WIDX_CREATE_DUCKS) |
|
||||
(1ULL << WIDX_WEATHER) |
|
||||
(1ULL << WIDX_WEATHER_DROPDOWN_BUTTON) |
|
||||
(1ULL << WIDX_CLEAR_GRASS) |
|
||||
|
@ -925,6 +928,9 @@ static void window_cheats_misc_mouseup(rct_window* w, rct_widgetindex widgetInde
|
|||
case WIDX_OPEN_CLOSE_PARK:
|
||||
CheatsSet(CheatType::OpenClosePark);
|
||||
break;
|
||||
case WIDX_CREATE_DUCKS:
|
||||
CheatsSet(CheatType::CreateDucks, CHEATS_DUCK_INCREMENT);
|
||||
break;
|
||||
case WIDX_CLEAR_GRASS:
|
||||
CheatsSet(CheatType::SetGrassLength, GRASS_LENGTH_CLEAR_0);
|
||||
break;
|
||||
|
|
|
@ -83,6 +83,7 @@ enum class CheatType : int32_t
|
|||
DisableRideValueAging,
|
||||
IgnoreResearchStatus,
|
||||
EnableAllDrawableTrackPieces,
|
||||
CreateDucks,
|
||||
Count,
|
||||
};
|
||||
|
||||
|
@ -108,6 +109,7 @@ enum
|
|||
|
||||
#define CHEATS_GIVE_GUESTS_MONEY MONEY(1000, 00)
|
||||
#define CHEATS_TRAM_INCREMENT 250
|
||||
#define CHEATS_DUCK_INCREMENT 20
|
||||
#define CHEATS_STAFF_FAST_SPEED 0xFF
|
||||
#define CHEATS_STAFF_NORMAL_SPEED 0x60
|
||||
#define CHEATS_STAFF_FREEZE_SPEED 0
|
||||
|
|
|
@ -230,6 +230,9 @@ public:
|
|||
case CheatType::EnableAllDrawableTrackPieces:
|
||||
gCheatsEnableAllDrawableTrackPieces = _param1 != 0;
|
||||
break;
|
||||
case CheatType::CreateDucks:
|
||||
CreateDucks(_param1);
|
||||
break;
|
||||
default:
|
||||
{
|
||||
log_error("Unabled cheat: %d", _cheatType.id);
|
||||
|
@ -343,6 +346,8 @@ private:
|
|||
return { { 0, 5 }, { 0, 0 } };
|
||||
case CheatType::SetForcedParkRating:
|
||||
return { { 0, 999 }, { 0, 0 } };
|
||||
case CheatType::CreateDucks:
|
||||
return { { 0, 100 }, { 0, 0 } };
|
||||
default:
|
||||
return { { 0, 0 }, { 0, 0 } };
|
||||
}
|
||||
|
@ -772,4 +777,17 @@ private:
|
|||
auto parkSetParameter = ParkSetParameterAction(isOpen ? ParkParameter::Open : ParkParameter::Close);
|
||||
GameActions::ExecuteNested(&parkSetParameter);
|
||||
}
|
||||
|
||||
void CreateDucks(int count) const
|
||||
{
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
// 100 attempts at finding some water to create a few ducks at
|
||||
for (int32_t attempts = 0; attempts < 100; attempts++)
|
||||
{
|
||||
if (scenario_create_ducks())
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -3968,6 +3968,8 @@ enum
|
|||
STR_STRING_STRINGID = 6329,
|
||||
STR_DOWNLOADING_OBJECTS_FROM = 6330,
|
||||
|
||||
STR_CREATE_DUCKS = 6331,
|
||||
|
||||
// Have to include resource strings (from scenarios and objects) for the time being now that language is partially working
|
||||
STR_COUNT = 32768
|
||||
};
|
||||
|
|
|
@ -82,7 +82,6 @@ money32 gScenarioCompanyValueRecord;
|
|||
|
||||
char gScenarioFileName[MAX_PATH];
|
||||
|
||||
static int32_t scenario_create_ducks();
|
||||
static void scenario_objective_check();
|
||||
|
||||
using namespace OpenRCT2;
|
||||
|
@ -420,7 +419,7 @@ void scenario_update()
|
|||
*
|
||||
* rct2: 0x006744A9
|
||||
*/
|
||||
static int32_t scenario_create_ducks()
|
||||
bool scenario_create_ducks()
|
||||
{
|
||||
CoordsXY centrePos;
|
||||
centrePos.x = 64 + (scenario_rand_max(MAXIMUM_MAP_SIZE_PRACTICAL) * 32);
|
||||
|
@ -429,11 +428,11 @@ static int32_t scenario_create_ducks()
|
|||
Guard::Assert(map_is_location_valid(centrePos));
|
||||
|
||||
if (!map_is_location_in_park(centrePos))
|
||||
return 0;
|
||||
return false;
|
||||
|
||||
int32_t centreWaterZ = (tile_element_water_height(centrePos));
|
||||
if (centreWaterZ == 0)
|
||||
return 0;
|
||||
return false;
|
||||
|
||||
// Check NxN area around centre tile defined by SquareSize
|
||||
constexpr int32_t SquareSize = 7;
|
||||
|
@ -463,7 +462,7 @@ static int32_t scenario_create_ducks()
|
|||
|
||||
// Must be at least 25 water tiles of the same height in 7x7 area
|
||||
if (waterTiles < 25)
|
||||
return 0;
|
||||
return false;
|
||||
|
||||
// Set x, y to the centre of the tile
|
||||
centrePos.x += 16;
|
||||
|
@ -481,7 +480,7 @@ static int32_t scenario_create_ducks()
|
|||
create_duck(targetPos);
|
||||
}
|
||||
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
const random_engine_t::state_type& scenario_rand_state()
|
||||
|
|
|
@ -395,6 +395,7 @@ extern char gScenarioFileName[260];
|
|||
void load_from_sc6(const char* path);
|
||||
void scenario_begin();
|
||||
void scenario_update();
|
||||
bool scenario_create_ducks();
|
||||
|
||||
const random_engine_t::state_type& scenario_rand_state();
|
||||
void scenario_rand_seed(random_engine_t::result_type s0, random_engine_t::result_type s1);
|
||||
|
|
Loading…
Reference in New Issue