Merge pull request #3152 from dlee13/cheat-disable-littering

Add cheat to disable littering and refactor peep thought code.
This commit is contained in:
Ted John 2016-04-19 17:31:58 +01:00
commit cf628ea7cf
13 changed files with 76 additions and 77 deletions

View File

@ -4106,6 +4106,8 @@ STR_5797 :{SMALLFONT}{BLACK}Disables weather changes and{NEWLINE}freezes the
STR_5798 :{SMALLFONT}{BLACK}Allows building actions in pause mode
STR_5799 :{SMALLFONT}{BLACK}Disables ride breakdowns and crashes due to brake failure
STR_5800 :{SMALLFONT}{BLACK}Prevents rides from breaking down
STR_5801 :Disable littering
STR_5802 :{SMALLFONT}{BLACK}Stops guests from littering and vomiting
#############
# Scenarios #

View File

@ -19,6 +19,7 @@ bool gCheatsUnlockAllPrices = false;
bool gCheatsBuildInPauseMode = false;
bool gCheatsIgnoreRideIntensity = false;
bool gCheatsDisableVandalism = false;
bool gCheatsDisableLittering = false;
bool gCheatsNeverendingMarketing = false;
bool gCheatsFreezeClimate = false;
@ -365,6 +366,7 @@ void game_command_cheat(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* e
case CHEAT_BUILDINPAUSEMODE: gCheatsBuildInPauseMode = !gCheatsBuildInPauseMode; break;
case CHEAT_IGNORERIDEINTENSITY: gCheatsIgnoreRideIntensity = !gCheatsIgnoreRideIntensity; break;
case CHEAT_DISABLEVANDALISM: gCheatsDisableVandalism = !gCheatsDisableVandalism; break;
case CHEAT_DISABLELITTERING: gCheatsDisableLittering = !gCheatsDisableLittering; break;
case CHEAT_INCREASEMONEY: cheat_increase_money(*edx); break;
case CHEAT_CLEARLOAN: cheat_clear_loan(); break;
case CHEAT_SETGUESTPARAMETER: cheat_set_guest_parameter(*edx, *edi); break;
@ -412,6 +414,7 @@ void cheats_reset()
gCheatsBuildInPauseMode = false;
gCheatsIgnoreRideIntensity = false;
gCheatsDisableVandalism = false;
gCheatsDisableLittering = false;
gCheatsNeverendingMarketing = false;
gCheatsFreezeClimate = false;
}

View File

@ -35,6 +35,7 @@ extern bool gCheatsUnlockAllPrices;
extern bool gCheatsBuildInPauseMode;
extern bool gCheatsIgnoreRideIntensity;
extern bool gCheatsDisableVandalism;
extern bool gCheatsDisableLittering;
extern bool gCheatsNeverendingMarketing;
extern bool gCheatsFreezeClimate;
@ -51,6 +52,7 @@ enum {
CHEAT_BUILDINPAUSEMODE,
CHEAT_IGNORERIDEINTENSITY,
CHEAT_DISABLEVANDALISM,
CHEAT_DISABLELITTERING,
CHEAT_INCREASEMONEY,
CHEAT_CLEARLOAN,
CHEAT_SETGUESTPARAMETER,

View File

@ -872,6 +872,7 @@ int game_load_network(SDL_RWops* rw)
gCheatsBuildInPauseMode = SDL_ReadU8(rw);
gCheatsIgnoreRideIntensity = SDL_ReadU8(rw);
gCheatsDisableVandalism = SDL_ReadU8(rw);
gCheatsDisableLittering = SDL_ReadU8(rw);
gCheatsNeverendingMarketing = SDL_ReadU8(rw);
gCheatsFreezeClimate = SDL_ReadU8(rw);

View File

@ -2431,6 +2431,9 @@ enum {
STR_CHEAT_TIP_DISABLE_BRAKES_FAILURE = 5799,
STR_CHEAT_TIP_DISABLE_BREAKDOWNS = 5800,
STR_CHEAT_DISABLE_LITTERING = 5801,
STR_CHEAT_DISABLE_LITTERING_TIP = 5802,
// Have to include resource strings (from scenarios and objects) for the time being now that language is partially working
STR_COUNT = 32768
};

View File

@ -116,7 +116,7 @@ static int award_is_deserved_most_tidy(int awardType, int activeAwardTypes)
if (peep->thoughts[0].var_2 > 5)
continue;
if (peep->thoughts[0].type == PEEP_THOUGHT_VERY_CLEAN)
if (peep->thoughts[0].type == PEEP_THOUGHT_TYPE_VERY_CLEAN)
positiveCount++;
if (peep->thoughts[0].type == PEEP_THOUGHT_TYPE_BAD_LITTER ||

View File

@ -68,7 +68,7 @@ extern "C" {
// This define 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 "5"
#define NETWORK_STREAM_VERSION "6"
#define NETWORK_STREAM_ID OPENRCT2_VERSION "-" NETWORK_STREAM_VERSION
#define NETWORK_DISCONNECT_REASON_BUFFER_SIZE 256

View File

@ -195,7 +195,7 @@ void peep_update_all()
*/
static uint8 peep_assess_surroundings(sint16 center_x, sint16 center_y, sint16 center_z){
if ((map_element_height(center_x, center_y) & 0xFFFF) > center_z)
return 0;
return PEEP_THOUGHT_TYPE_NONE;
uint16 num_scenery = 0;
uint16 num_fountains = 0;
@ -262,40 +262,31 @@ static uint8 peep_assess_surroundings(sint16 center_x, sint16 center_y, sint16 c
}
}
short num_litter;
num_litter = 0;
rct_litter* litter;
for (uint16 sprite_idx = RCT2_GLOBAL(RCT2_ADDRESS_SPRITES_START_LITTER, uint16); sprite_idx != SPRITE_INDEX_NULL; sprite_idx = litter->next) {
litter = &(g_sprite_list[sprite_idx].litter);
sint16 dist_x = abs(litter->x - center_x);
sint16 dist_y = abs(litter->y - center_y);
if (max(dist_x, dist_y) <= 160){
if (max(dist_x, dist_y) <= 160) {
num_rubbish++;
}
}
if (num_fountains >= 5){
if (num_rubbish < 20)
return 3;
}
if (num_fountains >= 5 && num_rubbish < 20)
return PEEP_THOUGHT_TYPE_FOUNTAINS;
if (num_scenery >= 40){
if (num_rubbish < 8)
return 1;
}
if (num_scenery >= 40 && num_rubbish < 8)
return PEEP_THOUGHT_TYPE_SCENERY;
if (nearby_music == 1){
if (num_rubbish < 20)
return 4;
}
if (nearby_music == 1 && num_rubbish < 20)
return PEEP_THOUGHT_TYPE_MUSIC;
if (num_rubbish < 2)
return 2;
if (num_rubbish < 2 && !gCheatsDisableLittering)
// if disable littering cheat is enabled, peeps will not have the "clean and tidy park" thought
return PEEP_THOUGHT_TYPE_VERY_CLEAN;
return 0;
return PEEP_THOUGHT_TYPE_NONE;
}
/**
@ -454,25 +445,11 @@ static void sub_68F41A(rct_peep *peep, int index)
peep->var_F2 = 0;
if (peep->x != (sint16)0x8000){
uint8 bl = peep_assess_surroundings(peep->x & 0xFFE0, peep->y & 0xFFE0, peep->z);
uint8 thought_type = peep_assess_surroundings(peep->x & 0xFFE0, peep->y & 0xFFE0, peep->z);
if (bl != 0){
if (thought_type != PEEP_THOUGHT_TYPE_NONE) {
peep_insert_new_thought(peep, thought_type, 0xFF);
peep->happiness_growth_rate = min(255, peep->happiness_growth_rate + 45);
switch (bl){
case 1:
peep_insert_new_thought(peep, PEEP_THOUGHT_TYPE_SCENERY, 0xFF);
break;
case 2:
peep_insert_new_thought(peep, PEEP_THOUGHT_VERY_CLEAN, 0xFF);
break;
case 3:
peep_insert_new_thought(peep, PEEP_THOUGHT_TYPE_FOUNTAINS, 0xFF);
break;
default:
peep_insert_new_thought(peep, PEEP_THOUGHT_TYPE_MUSIC, 0xFF);
break;
}
}
}
}
@ -563,7 +540,7 @@ static void sub_68F41A(rct_peep *peep, int index)
peep->cash_in_pocket <= MONEY(9, 00) &&
peep->happiness >= 105 &&
peep->happiness >= 70){
possible_thoughts[num_thoughts++] = PEEP_THOUGHT_RUNNING_OUT;
possible_thoughts[num_thoughts++] = PEEP_THOUGHT_TYPE_RUNNING_OUT;
}
}
@ -582,7 +559,7 @@ static void sub_68F41A(rct_peep *peep, int index)
case PEEP_THOUGHT_TYPE_BATHROOM:
peep_head_for_nearest_ride_with_flags(peep, RIDE_TYPE_FLAG_IS_BATHROOM);
break;
case PEEP_THOUGHT_RUNNING_OUT:
case PEEP_THOUGHT_TYPE_RUNNING_OUT:
peep_head_for_nearest_ride_type(peep, RIDE_TYPE_CASH_MACHINE);
break;
}
@ -591,12 +568,12 @@ static void sub_68F41A(rct_peep *peep, int index)
}
else{
if (peep->nausea >= 140){
uint8 thought = PEEP_THOUGHT_TYPE_SICK;
uint8 thought_type = PEEP_THOUGHT_TYPE_SICK;
if (peep->nausea >= 200){
thought = PEEP_THOUGHT_TYPE_VERY_SICK;
thought_type = PEEP_THOUGHT_TYPE_VERY_SICK;
peep_head_for_nearest_ride_type(peep, RIDE_TYPE_FIRST_AID);
}
peep_insert_new_thought(peep, thought, 0xFF);
peep_insert_new_thought(peep, thought_type, 0xFF);
}
}
@ -4368,7 +4345,7 @@ static void peep_update_picked(rct_peep* peep){
if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 0x1F) return;
peep->sub_state++;
if (peep->sub_state == 13){
peep_insert_new_thought(peep, PEEP_THOUGHT_HELP, 0xFF);
peep_insert_new_thought(peep, PEEP_THOUGHT_TYPE_HELP, 0xFF);
}
}
@ -5627,7 +5604,7 @@ static void peep_update_walking(rct_peep* peep){
peep->destination_tolerence = 3;
if (peep->current_seat&1){
peep_insert_new_thought(peep, PEEP_THOUGHT_NEW_RIDE, 0xFF);
peep_insert_new_thought(peep, PEEP_THOUGHT_TYPE_NEW_RIDE, 0xFF);
}
if (peep->current_ride == 0xFF){
peep_insert_new_thought(peep, PEEP_THOUGHT_TYPE_SCENERY, 0xFF);
@ -6709,7 +6686,7 @@ static void peep_stop_purchase_thought(rct_peep* peep, uint8 ride_type){
if (!ride_type_has_flag(ride_type, RIDE_TYPE_FLAG_SELLS_FOOD)){
thought_type = PEEP_THOUGHT_TYPE_THIRSTY;
if (!ride_type_has_flag(ride_type, RIDE_TYPE_FLAG_SELLS_DRINKS)){
thought_type = PEEP_THOUGHT_RUNNING_OUT;
thought_type = PEEP_THOUGHT_TYPE_RUNNING_OUT;
if (ride_type != RIDE_TYPE_CASH_MACHINE){
thought_type = PEEP_THOUGHT_TYPE_BATHROOM;
if (!ride_type_has_flag(ride_type, RIDE_TYPE_FLAG_IS_BATHROOM)){
@ -8815,7 +8792,7 @@ static void peep_on_exit_ride(rct_peep *peep, int rideIndex)
}
if (peep->peep_flags & PEEP_FLAGS_NICE_RIDE) {
peep_insert_new_thought(peep, PEEP_THOUGHT_NICE_RIDE, 255);
peep_insert_new_thought(peep, PEEP_THOUGHT_TYPE_NICE_RIDE, 255);
}
if (peep_really_liked_ride(peep, ride)) {
@ -9832,7 +9809,7 @@ static bool peep_should_go_on_ride(rct_peep *peep, int rideIndex, int entranceNu
if (peepAtRide) {
ride_update_popularity(ride, 1);
if ((peep->peep_flags & PEEP_FLAGS_INTAMIN) && ride_type_is_intamin(ride->type)) {
peep_insert_new_thought(peep, PEEP_THOUGHT_EXCITED, 255);
peep_insert_new_thought(peep, PEEP_THOUGHT_TYPE_EXCITED, 255);
}
}

View File

@ -76,7 +76,7 @@ enum PEEP_THOUGHT_TYPE {
PEEP_THOUGHT_TYPE_CROWDED = 32, // "It's too crowded here"
PEEP_THOUGHT_TYPE_VANDALISM = 33, // "The vandalism here is really bad"
PEEP_THOUGHT_TYPE_SCENERY = 34, // "Great scenery!"
PEEP_THOUGHT_VERY_CLEAN = 35, // "This park is very clean and tidy"
PEEP_THOUGHT_TYPE_VERY_CLEAN = 35, // "This park is very clean and tidy"
PEEP_THOUGHT_TYPE_FOUNTAINS = 36, // "The jumping fountains are great"
PEEP_THOUGHT_TYPE_MUSIC = 37, // "The music is nice here"
PEEP_THOUGHT_TYPE_BALLOON = 38, // "This baloon from X is really good value"
@ -151,7 +151,7 @@ enum PEEP_THOUGHT_TYPE {
PEEP_THOUGHT_TYPE_SUB_SANDWICH = 119,
PEEP_THOUGHT_TYPE_COOKIE = 120,
PEEP_THOUGH_ROAST_SAUSAGE = 124,
PEEP_THOUGHT_TYPE_ROAST_SAUSAGE = 124,
PEEP_THOUGHT_TYPE_PHOTO2_MUCH = 136,
PEEP_THOUGHT_TYPE_PHOTO3_MUCH = 137,
@ -171,20 +171,20 @@ enum PEEP_THOUGHT_TYPE {
PEEP_THOUGHT_TYPE_SUB_SANDWICH_MUCH = 151,
PEEP_THOUGHT_TYPE_COOKIE_MUCH = 152,
PEEP_THOUGHT_ROAST_SAUSAGE_MUCH = 156,
PEEP_THOUGHT_TYPE_ROAST_SAUSAGE_MUCH = 156,
PEEP_THOUGHT_HELP = 168, // "Help! Put me down!"
PEEP_THOUGHT_RUNNING_OUT = 169, // I'm running out of cash!"
PEEP_THOUGHT_NEW_RIDE = 170, // "Wow! A new ride being built!"
PEEP_THOUGHT_NICE_RIDE = 171, // "Nice ride! But not as good as the Phoenix..."
PEEP_THOUGHT_EXCITED = 172, // "I'm so excited - It's an Intamin ride!"
PEEP_THOUGHT_HERE_WE_ARE = 173, // "...and here we are on X!"
PEEP_THOUGHT_TYPE_HELP = 168, // "Help! Put me down!"
PEEP_THOUGHT_TYPE_RUNNING_OUT = 169, // "I'm running out of cash!"
PEEP_THOUGHT_TYPE_NEW_RIDE = 170, // "Wow! A new ride being built!"
PEEP_THOUGHT_TYPE_NICE_RIDE = 171, // "Nice ride! But not as good as the Phoenix..."
PEEP_THOUGHT_TYPE_EXCITED = 172, // "I'm so excited - It's an Intamin ride!"
PEEP_THOUGHT_TYPE_HERE_WE_ARE = 173, // "...and here we are on X!"
PEEP_THOUGHT_TYPE_NONE = 255
};
enum PEEP_STATE {
PEEP_STATE_FALLING = 0, //Drowning is part of falling
PEEP_STATE_FALLING = 0, // Drowning is part of falling
PEEP_STATE_1 = 1,
PEEP_STATE_QUEUING_FRONT = 2,
PEEP_STATE_ON_RIDE = 3,
@ -345,7 +345,7 @@ enum PEEP_ITEM {
PEEP_ITEM_EMPTY_BOWL_BLUE = (1 << 21)
};
enum {
enum PEEP_SPRITE_TYPE {
PEEP_SPRITE_TYPE_NORMAL = 0,
PEEP_SPRITE_TYPE_3 = 3,
PEEP_SPRITE_TYPE_19 = 19,
@ -360,7 +360,7 @@ enum {
};
// Flags used by peep->window_invalidate_flags
enum {
enum PEEP_INVALIDATE {
PEEP_INVALIDATE_PEEP_THOUGHTS = 1,
PEEP_INVALIDATE_PEEP_STATS = 1 << 1,
PEEP_INVALIDATE_PEEP_2 = 1 << 2,
@ -369,7 +369,7 @@ enum {
};
// Flags used by peep_should_go_on_ride()
enum {
enum PEEP_RIDE_DECISION {
PEEP_RIDE_DECISION_AT_QUEUE = 1,
PEEP_RIDE_DECISION_THINKING = 1 << 2
};

View File

@ -2047,7 +2047,7 @@ void vehicle_peep_easteregg_here_we_are(rct_vehicle* vehicle) {
for (int i = 0; i < vehicle->num_peeps; ++i) {
rct_peep* peep = GET_PEEP(vehicle->peep[i]);
if (peep->peep_flags & PEEP_FLAGS_HERE_WE_ARE) {
peep_insert_new_thought(peep, PEEP_THOUGHT_HERE_WE_ARE, peep->current_ride);
peep_insert_new_thought(peep, PEEP_THOUGHT_TYPE_HERE_WE_ARE, peep->current_ride);
}
}
} while ((spriteId = vehicle->next_vehicle_on_train) != 0xFFFF);

View File

@ -1115,6 +1115,7 @@ int scenario_save_network(SDL_RWops* rw)
SDL_WriteU8(rw, gCheatsBuildInPauseMode);
SDL_WriteU8(rw, gCheatsIgnoreRideIntensity);
SDL_WriteU8(rw, gCheatsDisableVandalism);
SDL_WriteU8(rw, gCheatsDisableLittering);
SDL_WriteU8(rw, gCheatsNeverendingMarketing);
SDL_WriteU8(rw, gCheatsFreezeClimate);

View File

@ -78,6 +78,7 @@ enum WINDOW_CHEATS_WIDGET_IDX {
WIDX_GUEST_RIDE_INTENSITY_LESS_THAN_15,
WIDX_GUEST_IGNORE_RIDE_INTENSITY,
WIDX_DISABLE_VANDALISM,
WIDX_DISABLE_LITTERING,
WIDX_GIVE_ALL_GUESTS_GROUP,
WIDX_GIVE_GUESTS_MONEY,
WIDX_GIVE_GUESTS_PARK_MAPS,
@ -172,7 +173,7 @@ static rct_widget window_cheats_money_widgets[] = {
static rct_widget window_cheats_guests_widgets[] = {
MAIN_CHEATS_WIDGETS,
{ WWT_GROUPBOX, 1, XPL(0) - GROUP_SPACE, WPL(1) + GROUP_SPACE, YPL(0), HPL(11.5), STR_CHEAT_SET_GUESTS_PARAMETERS, STR_NONE }, // Guests parameters group frame
{ WWT_GROUPBOX, 1, XPL(0) - GROUP_SPACE, WPL(1) + GROUP_SPACE, YPL(0), HPL(12.5), STR_CHEAT_SET_GUESTS_PARAMETERS, STR_NONE }, // Guests parameters group frame
{ WWT_CLOSEBOX, 1, MAX_BTN_LEFT, MAX_BTN_RIGHT, YPL(1), HPL(1), STR_MAX, STR_NONE }, // happiness max
{ WWT_CLOSEBOX, 1, MIN_BTN_LEFT, MIN_BTN_RIGHT, YPL(1), HPL(1), STR_MIN, STR_NONE }, // happiness min
{ WWT_CLOSEBOX, 1, MAX_BTN_LEFT, MAX_BTN_RIGHT, YPL(2), HPL(2), STR_MAX, STR_NONE }, // energy max
@ -191,14 +192,15 @@ static rct_widget window_cheats_guests_widgets[] = {
{ WWT_CLOSEBOX, 1, XPL(0), WPL(0), YPL(9), HPL(9), STR_CHEAT_LESS_THAN_15, STR_NONE }, // ride intensity < 15
{ WWT_CHECKBOX, 2, XPL(0), OWPL, YPL(10), OHPL(10), STR_CHEAT_IGNORE_INTENSITY, STR_CHEAT_TIP_IGNORE_INTENSITY }, // guests ignore intensity
{ WWT_CHECKBOX, 2, XPL(0), OWPL, YPL(11), OHPL(11), STR_CHEAT_DISABLE_VANDALISM, STR_CHEAT_DISABLE_VANDALISM_TIP }, // disable vandalism
{ WWT_GROUPBOX, 1, XPL(0) - GROUP_SPACE, WPL(1) + GROUP_SPACE, YPL(13), HPL(15.5), STR_CHEAT_GIVE_ALL_GUESTS, STR_NONE }, // Guests parameters group frame
{ WWT_CLOSEBOX, 1, XPL(0), WPL(0), YPL(14), HPL(14), STR_CHEAT_CURRENCY_FORMAT, STR_NONE }, // give guests money
{ WWT_CLOSEBOX, 1, XPL(1), WPL(1), YPL(14), HPL(14), STR_SHOP_ITEM_PLURAL_PARK_MAP, STR_NONE }, // give guests park maps
{ WWT_CLOSEBOX, 1, XPL(0), WPL(0), YPL(15), HPL(15), STR_SHOP_ITEM_PLURAL_BALLOON, STR_NONE }, // give guests balloons
{ WWT_CLOSEBOX, 1, XPL(1), WPL(1), YPL(15), HPL(15), STR_SHOP_ITEM_PLURAL_UMBRELLA, STR_NONE }, // give guests umbrellas
{ WWT_CLOSEBOX, 1, XPL(0), WPL(0), YPL(17), HPL(17), STR_CHEAT_LARGE_TRAM_GUESTS, STR_CHEAT_TIP_LARGE_TRAM_GUESTS }, // large tram
{ WWT_CLOSEBOX, 1, XPL(1), WPL(1), YPL(17), HPL(17), STR_CHEAT_REMOVE_ALL_GUESTS, STR_CHEAT_TIP_REMOVE_ALL_GUESTS }, // remove all guests
{ WWT_CLOSEBOX, 1, XPL(0), WPL(0), YPL(18), HPL(18), STR_CHEAT_EXPLODE, STR_CHEAT_TIP_EXPLODE }, // explode guests
{ WWT_CHECKBOX, 2, XPL(0), OWPL, YPL(12), OHPL(12), STR_CHEAT_DISABLE_LITTERING, STR_CHEAT_DISABLE_LITTERING_TIP }, // disable littering
{ WWT_GROUPBOX, 1, XPL(0) - GROUP_SPACE, WPL(1) + GROUP_SPACE, YPL(14), HPL(16.5), STR_CHEAT_GIVE_ALL_GUESTS, STR_NONE }, // Guests parameters group frame
{ WWT_CLOSEBOX, 1, XPL(0), WPL(0), YPL(15), HPL(15), STR_CHEAT_CURRENCY_FORMAT, STR_NONE }, // give guests money
{ WWT_CLOSEBOX, 1, XPL(1), WPL(1), YPL(15), HPL(15), STR_SHOP_ITEM_PLURAL_PARK_MAP, STR_NONE }, // give guests park maps
{ WWT_CLOSEBOX, 1, XPL(0), WPL(0), YPL(16), HPL(16), STR_SHOP_ITEM_PLURAL_BALLOON, STR_NONE }, // give guests balloons
{ WWT_CLOSEBOX, 1, XPL(1), WPL(1), YPL(16), HPL(16), STR_SHOP_ITEM_PLURAL_UMBRELLA, STR_NONE }, // give guests umbrellas
{ WWT_CLOSEBOX, 1, XPL(0), WPL(0), YPL(18), HPL(18), STR_CHEAT_LARGE_TRAM_GUESTS, STR_CHEAT_TIP_LARGE_TRAM_GUESTS }, // large tram
{ WWT_CLOSEBOX, 1, XPL(1), WPL(1), YPL(18), HPL(18), STR_CHEAT_REMOVE_ALL_GUESTS, STR_CHEAT_TIP_REMOVE_ALL_GUESTS }, // remove all guests
{ WWT_CLOSEBOX, 1, XPL(0), WPL(0), YPL(19), HPL(19), STR_CHEAT_EXPLODE, STR_CHEAT_TIP_EXPLODE }, // explode guests
{ WIDGETS_END },
};
@ -401,7 +403,7 @@ static rct_window_event_list *window_cheats_page_events[] = {
static uint64 window_cheats_page_enabled_widgets[] = {
(1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB_1) | (1ULL << WIDX_TAB_2) | (1ULL << WIDX_TAB_3) | (1ULL << WIDX_TAB_4) | (1ULL << WIDX_HIGH_MONEY) | (1ULL << WIDX_CLEAR_LOAN),
(1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB_1) | (1ULL << WIDX_TAB_2) | (1ULL << WIDX_TAB_3) | (1ULL << WIDX_TAB_4) | (1ULL << WIDX_GUEST_PARAMETERS_GROUP) | (1ULL << WIDX_GUEST_HAPPINESS_MAX) | (1ULL << WIDX_GUEST_HAPPINESS_MIN) | (1ULL << WIDX_GUEST_ENERGY_MAX) | (1ULL << WIDX_GUEST_ENERGY_MIN) | (1ULL << WIDX_GUEST_HUNGER_MAX) | (1ULL << WIDX_GUEST_HUNGER_MIN) | (1ULL << WIDX_GUEST_THIRST_MAX) | (1ULL << WIDX_GUEST_THIRST_MIN) | (1ULL << WIDX_GUEST_NAUSEA_MAX) | (1ULL << WIDX_GUEST_NAUSEA_MIN) | (1ULL << WIDX_GUEST_NAUSEA_TOLERANCE_MAX) | (1ULL << WIDX_GUEST_NAUSEA_TOLERANCE_MIN) | (1ULL << WIDX_GUEST_BATHROOM_MAX) | (1ULL << WIDX_GUEST_BATHROOM_MIN) | (1ULL << WIDX_GUEST_RIDE_INTENSITY_MORE_THAN_1) | (1ULL << WIDX_GUEST_RIDE_INTENSITY_LESS_THAN_15) | (1ULL << WIDX_GUEST_IGNORE_RIDE_INTENSITY) | (1ULL << WIDX_GIVE_ALL_GUESTS_GROUP) | (1ULL << WIDX_GIVE_GUESTS_MONEY) | (1ULL << WIDX_GIVE_GUESTS_PARK_MAPS) | (1ULL << WIDX_GIVE_GUESTS_BALLOONS) | (1ULL << WIDX_GIVE_GUESTS_UMBRELLAS) | (1ULL << WIDX_TRAM_GUESTS) | (1ULL << WIDX_REMOVE_ALL_GUESTS) | (1ULL << WIDX_EXPLODE_GUESTS) | (1ULL << WIDX_DISABLE_VANDALISM),
(1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB_1) | (1ULL << WIDX_TAB_2) | (1ULL << WIDX_TAB_3) | (1ULL << WIDX_TAB_4) | (1ULL << WIDX_GUEST_PARAMETERS_GROUP) | (1ULL << WIDX_GUEST_HAPPINESS_MAX) | (1ULL << WIDX_GUEST_HAPPINESS_MIN) | (1ULL << WIDX_GUEST_ENERGY_MAX) | (1ULL << WIDX_GUEST_ENERGY_MIN) | (1ULL << WIDX_GUEST_HUNGER_MAX) | (1ULL << WIDX_GUEST_HUNGER_MIN) | (1ULL << WIDX_GUEST_THIRST_MAX) | (1ULL << WIDX_GUEST_THIRST_MIN) | (1ULL << WIDX_GUEST_NAUSEA_MAX) | (1ULL << WIDX_GUEST_NAUSEA_MIN) | (1ULL << WIDX_GUEST_NAUSEA_TOLERANCE_MAX) | (1ULL << WIDX_GUEST_NAUSEA_TOLERANCE_MIN) | (1ULL << WIDX_GUEST_BATHROOM_MAX) | (1ULL << WIDX_GUEST_BATHROOM_MIN) | (1ULL << WIDX_GUEST_RIDE_INTENSITY_MORE_THAN_1) | (1ULL << WIDX_GUEST_RIDE_INTENSITY_LESS_THAN_15) | (1ULL << WIDX_GUEST_IGNORE_RIDE_INTENSITY) | (1ULL << WIDX_GIVE_ALL_GUESTS_GROUP) | (1ULL << WIDX_GIVE_GUESTS_MONEY) | (1ULL << WIDX_GIVE_GUESTS_PARK_MAPS) | (1ULL << WIDX_GIVE_GUESTS_BALLOONS) | (1ULL << WIDX_GIVE_GUESTS_UMBRELLAS) | (1ULL << WIDX_TRAM_GUESTS) | (1ULL << WIDX_REMOVE_ALL_GUESTS) | (1ULL << WIDX_EXPLODE_GUESTS) | (1ULL << WIDX_DISABLE_VANDALISM) | (1ULL << WIDX_DISABLE_LITTERING),
(1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB_1) | (1ULL << WIDX_TAB_2) | (1ULL << WIDX_TAB_3) | (1ULL << WIDX_TAB_4) | (1ULL << WIDX_FREEZE_CLIMATE) | (1ULL << WIDX_OPEN_CLOSE_PARK) | (1ULL << WIDX_WEATHER) | (1ULL << WIDX_WEATHER_DROPDOWN_BUTTON) | (1ULL << WIDX_CLEAR_GRASS) | (1ULL << WIDX_MOWED_GRASS) | (1ULL << WIDX_WATER_PLANTS) | (1ULL << WIDX_FIX_VANDALISM) | (1ULL << WIDX_REMOVE_LITTER) | (1ULL << WIDX_WIN_SCENARIO) | (1ULL << WIDX_HAVE_FUN) | (1ULL << WIDX_NEVERENDING_MARKETING) | (1ULL << WIDX_UNLOCK_ALL_PRICES) | (1ULL << WIDX_SANDBOX_MODE) | (1ULL << WIDX_FAST_STAFF) | (1ULL << WIDX_NORMAL_STAFF) | (1ULL << WIDX_PARK_PARAMETERS) | (1ULL << WIDX_FORCE_PARK_RATING) | (1ULL << WIDX_INCREASE_PARK_RATING) | (1ULL << WIDX_DECREASE_PARK_RATING),
(1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB_1) | (1ULL << WIDX_TAB_2) | (1ULL << WIDX_TAB_3) | (1ULL << WIDX_TAB_4) | (1ULL << WIDX_RENEW_RIDES) | (1ULL << WIDX_MAKE_DESTRUCTIBLE) | (1ULL << WIDX_FIX_ALL) | (1ULL << WIDX_FAST_LIFT_HILL) | (1ULL << WIDX_DISABLE_BRAKES_FAILURE) | (1ULL << WIDX_DISABLE_ALL_BREAKDOWNS) | (1ULL << WIDX_BUILD_IN_PAUSE_MODE) | (1ULL << WIDX_RESET_CRASH_STATUS) | (1ULL << WIDX_10_MINUTE_INSPECTIONS) | (1ULL << WIDX_SHOW_ALL_OPERATING_MODES) | (1ULL << WIDX_SHOW_VEHICLES_FROM_OTHER_TRACK_TYPES)
};
@ -578,6 +580,9 @@ static void window_cheats_guests_mouseup(rct_window *w, int widgetIndex)
case WIDX_DISABLE_VANDALISM:
game_do_command(0, GAME_COMMAND_FLAG_APPLY, CHEAT_DISABLEVANDALISM, 0, GAME_COMMAND_CHEAT, 0, 0);
break;
case WIDX_DISABLE_LITTERING:
game_do_command(0, GAME_COMMAND_FLAG_APPLY, CHEAT_DISABLELITTERING, 0, GAME_COMMAND_CHEAT, 0, 0);
break;
}
}
@ -763,6 +768,7 @@ static void window_cheats_invalidate(rct_window *w)
RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, int) = 10000;
widget_set_checkbox_value(w, WIDX_GUEST_IGNORE_RIDE_INTENSITY, gCheatsIgnoreRideIntensity);
widget_set_checkbox_value(w, WIDX_DISABLE_VANDALISM, gCheatsDisableVandalism);
widget_set_checkbox_value(w, WIDX_DISABLE_LITTERING, gCheatsDisableLittering);
break;
case WINDOW_CHEATS_PAGE_MISC:
w->widgets[WIDX_OPEN_CLOSE_PARK].image = RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_PARK_OPEN ?

View File

@ -20,6 +20,7 @@
#include "../addresses.h"
#include "../audio/audio.h"
#include "../cheats.h"
#include "../interface/viewport.h"
#include "../localisation/date.h"
#include "../localisation/localisation.h"
@ -546,9 +547,8 @@ static bool litter_can_be_at(int x, int y, int z)
*/
void litter_create(int x, int y, int z, int direction, int type)
{
rct_litter *litter, *newestLitter;
uint16 spriteIndex, nextSpriteIndex;
uint32 newestLitterCreationTick;
if (gCheatsDisableLittering)
return;
x += TileDirectionDelta[direction >> 3].x / 8;
y += TileDirectionDelta[direction >> 3].y / 8;
@ -556,6 +556,10 @@ void litter_create(int x, int y, int z, int direction, int type)
if (!litter_can_be_at(x, y, z))
return;
rct_litter *litter, *newestLitter;
uint16 spriteIndex, nextSpriteIndex;
uint32 newestLitterCreationTick;
if (RCT2_GLOBAL(RCT2_ADDRESS_SPRITES_COUNT_LITTER, uint16) >= 500) {
newestLitter = NULL;
newestLitterCreationTick = 0;