Implement 'Create Ducks' cheat

This commit is contained in:
Matt 2019-10-15 16:34:21 +02:00
parent 2e090493f2
commit 7fa41bb82d
No known key found for this signature in database
GPG Key ID: 6D4C24A61C93E208
7 changed files with 36 additions and 7 deletions

View File

@ -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 #

View File

@ -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;

View File

@ -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

View File

@ -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;
}
}
}
};

View File

@ -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
};

View File

@ -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()

View File

@ -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);