mirror of https://github.com/OpenRCT2/OpenRCT2.git
Merge pull request #4176 from janisozaur/ride-types
Fix #4172: Expose ride-type changing capability in UI
This commit is contained in:
commit
86d5447709
|
@ -4216,6 +4216,9 @@ STR_5904 :Reset date
|
||||||
STR_5905 :{SMALLFONT}{BLACK}A map generation tool that automatically creates a custom landscape
|
STR_5905 :{SMALLFONT}{BLACK}A map generation tool that automatically creates a custom landscape
|
||||||
STR_5906 :Zoom to cursor position
|
STR_5906 :Zoom to cursor position
|
||||||
STR_5907 :{SMALLFONT}{BLACK}When enabled, zooming in will centre around the cursor, as opposed to the screen centre.
|
STR_5907 :{SMALLFONT}{BLACK}When enabled, zooming in will centre around the cursor, as opposed to the screen centre.
|
||||||
|
STR_5908 :Allow arbitrary ride type changes
|
||||||
|
STR_5909 :{SMALLFONT}{BLACK}Allows changing ride type freely. May cause crashes.
|
||||||
|
STR_5910 :Apply
|
||||||
|
|
||||||
#############
|
#############
|
||||||
# Scenarios #
|
# Scenarios #
|
||||||
|
|
|
@ -43,6 +43,7 @@ bool gCheatsFreezeClimate = false;
|
||||||
bool gCheatsDisableTrainLengthLimit = false;
|
bool gCheatsDisableTrainLengthLimit = false;
|
||||||
bool gCheatsDisablePlantAging = false;
|
bool gCheatsDisablePlantAging = false;
|
||||||
bool gCheatsEnableChainLiftOnAllTrack = false;
|
bool gCheatsEnableChainLiftOnAllTrack = false;
|
||||||
|
bool gCheatsAllowArbitraryRideTypeChanges = false;
|
||||||
|
|
||||||
int park_rating_spinner_value;
|
int park_rating_spinner_value;
|
||||||
|
|
||||||
|
@ -416,6 +417,7 @@ void game_command_cheat(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* e
|
||||||
case CHEAT_HAVEFUN: gScenarioObjectiveType = OBJECTIVE_HAVE_FUN; break;
|
case CHEAT_HAVEFUN: gScenarioObjectiveType = OBJECTIVE_HAVE_FUN; break;
|
||||||
case CHEAT_SETFORCEDPARKRATING: if(*edx > -1) { park_rating_spinner_value = *edx; } set_forced_park_rating(*edx); break;
|
case CHEAT_SETFORCEDPARKRATING: if(*edx > -1) { park_rating_spinner_value = *edx; } set_forced_park_rating(*edx); break;
|
||||||
case CHEAT_RESETDATE: date_reset(); window_invalidate_by_class(WC_BOTTOM_TOOLBAR); break;
|
case CHEAT_RESETDATE: date_reset(); window_invalidate_by_class(WC_BOTTOM_TOOLBAR); break;
|
||||||
|
case CHEAT_ALLOW_ARBITRARY_RIDE_TYPE_CHANGES: gCheatsAllowArbitraryRideTypeChanges = !gCheatsAllowArbitraryRideTypeChanges; window_invalidate_by_class(WC_RIDE); break;
|
||||||
}
|
}
|
||||||
if (network_get_mode() == NETWORK_MODE_NONE) {
|
if (network_get_mode() == NETWORK_MODE_NONE) {
|
||||||
config_save_default();
|
config_save_default();
|
||||||
|
@ -445,4 +447,5 @@ void cheats_reset()
|
||||||
gCheatsNeverendingMarketing = false;
|
gCheatsNeverendingMarketing = false;
|
||||||
gCheatsFreezeClimate = false;
|
gCheatsFreezeClimate = false;
|
||||||
gCheatsDisablePlantAging = false;
|
gCheatsDisablePlantAging = false;
|
||||||
|
gCheatsAllowArbitraryRideTypeChanges = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,7 @@ extern bool gCheatsFreezeClimate;
|
||||||
extern bool gCheatsDisableTrainLengthLimit;
|
extern bool gCheatsDisableTrainLengthLimit;
|
||||||
extern bool gCheatsDisablePlantAging;
|
extern bool gCheatsDisablePlantAging;
|
||||||
extern bool gCheatsEnableChainLiftOnAllTrack;
|
extern bool gCheatsEnableChainLiftOnAllTrack;
|
||||||
|
extern bool gCheatsAllowArbitraryRideTypeChanges;
|
||||||
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
@ -81,6 +82,7 @@ enum {
|
||||||
CHEAT_SETFORCEDPARKRATING,
|
CHEAT_SETFORCEDPARKRATING,
|
||||||
CHEAT_NEVERENDINGMARKETING,
|
CHEAT_NEVERENDINGMARKETING,
|
||||||
CHEAT_RESETDATE,
|
CHEAT_RESETDATE,
|
||||||
|
CHEAT_ALLOW_ARBITRARY_RIDE_TYPE_CHANGES,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
|
|
@ -1142,5 +1142,4 @@ GAME_COMMAND_POINTER* new_game_command_table[68] = {
|
||||||
game_command_modify_groups,
|
game_command_modify_groups,
|
||||||
game_command_kick_player,
|
game_command_kick_player,
|
||||||
game_command_cheat,
|
game_command_cheat,
|
||||||
game_command_reset_sprites,
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -89,7 +89,6 @@ enum GAME_COMMAND {
|
||||||
GAME_COMMAND_MODIFY_GROUPS,
|
GAME_COMMAND_MODIFY_GROUPS,
|
||||||
GAME_COMMAND_KICK_PLAYER,
|
GAME_COMMAND_KICK_PLAYER,
|
||||||
GAME_COMMAND_CHEAT,
|
GAME_COMMAND_CHEAT,
|
||||||
GAME_COMMAND_RESET_SPRITES,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
|
|
@ -451,11 +451,11 @@ static int cc_rides(const utf8 **argv, int argc)
|
||||||
FOR_ALL_RIDES(i, ride) {
|
FOR_ALL_RIDES(i, ride) {
|
||||||
char name[128];
|
char name[128];
|
||||||
format_string(name, ride->name, &ride->name_arguments);
|
format_string(name, ride->name, &ride->name_arguments);
|
||||||
console_printf("ride %03d type: %02u subtype %03u name %s", i, ride->type, ride->subtype, name);
|
console_printf("rides %03d type: %02u subtype %03u name %s", i, ride->type, ride->subtype, name);
|
||||||
}
|
}
|
||||||
} else if (strcmp(argv[0], "set") == 0) {
|
} else if (strcmp(argv[0], "set") == 0) {
|
||||||
if (argc < 4) {
|
if (argc < 4) {
|
||||||
console_printf("ride set type <ride id> <ride type> [ride subtype]");
|
console_printf("rides set type <ride id> <ride type>");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (strcmp(argv[1], "type") == 0) {
|
if (strcmp(argv[1], "type") == 0) {
|
||||||
|
@ -470,18 +470,12 @@ static int cc_rides(const utf8 **argv, int argc)
|
||||||
console_printf("This command expects integer arguments");
|
console_printf("This command expects integer arguments");
|
||||||
} else if (ride_index < 0) {
|
} else if (ride_index < 0) {
|
||||||
console_printf("Ride index must not be negative");
|
console_printf("Ride index must not be negative");
|
||||||
} else if (argc > 4 && (!int_valid[2] || (subtype < 0 || subtype >= object_entry_group_counts[OBJECT_TYPE_RIDE])))
|
|
||||||
{
|
|
||||||
console_printf("No ride entry found for given subtype");
|
|
||||||
} else {
|
} else {
|
||||||
|
gGameCommandErrorTitle = STR_CANT_CHANGE_OPERATING_MODE;
|
||||||
|
int res = game_do_command(0, (type << 8) | 1, 0, (RIDE_SETTING_RIDE_TYPE << 8) | ride_index, GAME_COMMAND_SET_RIDE_SETTING, 0, 0);
|
||||||
rct_ride *ride = get_ride(ride_index);
|
rct_ride *ride = get_ride(ride_index);
|
||||||
if (ride->type != RIDE_TYPE_NULL) {
|
if (res == MONEY32_UNDEFINED) {
|
||||||
ride->type = type;
|
console_printf("That didn't work");
|
||||||
if (int_valid[2]) {
|
|
||||||
ride->subtype = subtype;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
console_printf("No ride found with index %d", ride_index);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (strcmp(argv[1], "friction") == 0) {
|
} else if (strcmp(argv[1], "friction") == 0) {
|
||||||
|
|
|
@ -3339,7 +3339,10 @@ enum {
|
||||||
STR_MAP_GENERATOR_TIP = 5905,
|
STR_MAP_GENERATOR_TIP = 5905,
|
||||||
STR_ZOOM_TO_CURSOR = 5906,
|
STR_ZOOM_TO_CURSOR = 5906,
|
||||||
STR_ZOOM_TO_CURSOR_TIP = 5907,
|
STR_ZOOM_TO_CURSOR_TIP = 5907,
|
||||||
|
STR_CHEAT_ALLOW_ARBITRARY_RIDE_TYPE_CHANGES = 5908,
|
||||||
|
STR_CHEAT_ALLOW_ARBITRARY_RIDE_TYPE_CHANGES_TIP = 5909,
|
||||||
|
STR_APPLY = 5910,
|
||||||
|
|
||||||
// Have to include resource strings (from scenarios and objects) for the time being now that language is partially working
|
// Have to include resource strings (from scenarios and objects) for the time being now that language is partially working
|
||||||
STR_COUNT = 32768
|
STR_COUNT = 32768
|
||||||
};
|
};
|
||||||
|
|
|
@ -1520,9 +1520,6 @@ void Network::Server_Client_Joined(const char* name, const std::string &keyhash,
|
||||||
format_string(text, STR_MULTIPLAYER_PLAYER_HAS_JOINED_THE_GAME, &player_name);
|
format_string(text, STR_MULTIPLAYER_PLAYER_HAS_JOINED_THE_GAME, &player_name);
|
||||||
chat_history_add(text);
|
chat_history_add(text);
|
||||||
Server_Send_MAP(&connection);
|
Server_Send_MAP(&connection);
|
||||||
// This is needed to synchronise calls to reset sprite order across clients,
|
|
||||||
// otherwise connected clients will fall out of sync in simulation.
|
|
||||||
game_do_command(0, GAME_COMMAND_FLAG_APPLY, 0, 0, GAME_COMMAND_RESET_SPRITES, 0, 0);
|
|
||||||
gNetwork.Server_Send_EVENT_PLAYER_JOINED(player_name);
|
gNetwork.Server_Send_EVENT_PLAYER_JOINED(player_name);
|
||||||
Server_Send_GROUPLIST(connection);
|
Server_Send_GROUPLIST(connection);
|
||||||
Server_Send_PLAYERLIST();
|
Server_Send_PLAYERLIST();
|
||||||
|
|
|
@ -55,7 +55,7 @@ extern "C" {
|
||||||
// This define specifies which version of network stream current build uses.
|
// This define specifies which version of network stream current build uses.
|
||||||
// It is used for making sure only compatible builds get connected, even within
|
// It is used for making sure only compatible builds get connected, even within
|
||||||
// single OpenRCT2 version.
|
// single OpenRCT2 version.
|
||||||
#define NETWORK_STREAM_VERSION "11"
|
#define NETWORK_STREAM_VERSION "12"
|
||||||
#define NETWORK_STREAM_ID OPENRCT2_VERSION "-" NETWORK_STREAM_VERSION
|
#define NETWORK_STREAM_ID OPENRCT2_VERSION "-" NETWORK_STREAM_VERSION
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -6295,7 +6295,7 @@ rct_peep *peep_generate(int x, int y, int z)
|
||||||
|
|
||||||
move_sprite_to_list((rct_sprite*)peep, SPRITE_LIST_PEEP * 2);
|
move_sprite_to_list((rct_sprite*)peep, SPRITE_LIST_PEEP * 2);
|
||||||
|
|
||||||
peep->sprite_identifier = 1;
|
peep->sprite_identifier = SPRITE_IDENTIFIER_PEEP;
|
||||||
peep->sprite_type = PEEP_SPRITE_TYPE_NORMAL;
|
peep->sprite_type = PEEP_SPRITE_TYPE_NORMAL;
|
||||||
peep->outside_of_park = 1;
|
peep->outside_of_park = 1;
|
||||||
peep->state = PEEP_STATE_FALLING;
|
peep->state = PEEP_STATE_FALLING;
|
||||||
|
|
|
@ -483,7 +483,6 @@ extern "C"
|
||||||
}
|
}
|
||||||
|
|
||||||
map_reorganise_elements();
|
map_reorganise_elements();
|
||||||
game_do_command(0, GAME_COMMAND_FLAG_APPLY, 0, 0, GAME_COMMAND_RESET_SPRITES, 0, 0);
|
|
||||||
sprite_clear_all_unused();
|
sprite_clear_all_unused();
|
||||||
|
|
||||||
viewport_set_saved_view();
|
viewport_set_saved_view();
|
||||||
|
@ -544,6 +543,7 @@ extern "C"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write other data not in normal save files
|
// Write other data not in normal save files
|
||||||
|
SDL_RWwrite(rw, gSpriteSpatialIndex, 0x10001 * sizeof(uint16), 1);
|
||||||
SDL_WriteLE32(rw, gGamePaused);
|
SDL_WriteLE32(rw, gGamePaused);
|
||||||
SDL_WriteLE32(rw, _guestGenerationProbability);
|
SDL_WriteLE32(rw, _guestGenerationProbability);
|
||||||
SDL_WriteLE32(rw, _suggestedGuestMaximum);
|
SDL_WriteLE32(rw, _suggestedGuestMaximum);
|
||||||
|
@ -565,6 +565,7 @@ extern "C"
|
||||||
SDL_WriteU8(rw, gCheatsNeverendingMarketing);
|
SDL_WriteU8(rw, gCheatsNeverendingMarketing);
|
||||||
SDL_WriteU8(rw, gCheatsFreezeClimate);
|
SDL_WriteU8(rw, gCheatsFreezeClimate);
|
||||||
SDL_WriteU8(rw, gCheatsDisablePlantAging);
|
SDL_WriteU8(rw, gCheatsDisablePlantAging);
|
||||||
|
SDL_WriteU8(rw, gCheatsAllowArbitraryRideTypeChanges);
|
||||||
|
|
||||||
gfx_invalidate_screen();
|
gfx_invalidate_screen();
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -367,10 +367,9 @@ void S6Importer::Import()
|
||||||
}
|
}
|
||||||
map_update_tile_pointers();
|
map_update_tile_pointers();
|
||||||
reset_all_sprite_quadrant_placements();
|
reset_all_sprite_quadrant_placements();
|
||||||
reset_sprite_spatial_index();
|
if (network_get_mode() != NETWORK_MODE_CLIENT)
|
||||||
if (network_get_mode() == NETWORK_MODE_CLIENT)
|
|
||||||
{
|
{
|
||||||
game_do_command(0, GAME_COMMAND_FLAG_APPLY, 0, 0, GAME_COMMAND_RESET_SPRITES, 0, 0);
|
reset_sprite_spatial_index();
|
||||||
}
|
}
|
||||||
game_convert_strings_to_utf8();
|
game_convert_strings_to_utf8();
|
||||||
if (FixIssues)
|
if (FixIssues)
|
||||||
|
@ -491,6 +490,7 @@ extern "C"
|
||||||
SDL_RWread(rw, &checksum, sizeof(uint32), 1);
|
SDL_RWread(rw, &checksum, sizeof(uint32), 1);
|
||||||
|
|
||||||
// Read other data not in normal save files
|
// Read other data not in normal save files
|
||||||
|
SDL_RWread(rw, gSpriteSpatialIndex, 0x10001 * sizeof(uint16), 1);
|
||||||
gGamePaused = SDL_ReadLE32(rw);
|
gGamePaused = SDL_ReadLE32(rw);
|
||||||
_guestGenerationProbability = SDL_ReadLE32(rw);
|
_guestGenerationProbability = SDL_ReadLE32(rw);
|
||||||
_suggestedGuestMaximum = SDL_ReadLE32(rw);
|
_suggestedGuestMaximum = SDL_ReadLE32(rw);
|
||||||
|
@ -512,6 +512,7 @@ extern "C"
|
||||||
gCheatsNeverendingMarketing = SDL_ReadU8(rw) != 0;
|
gCheatsNeverendingMarketing = SDL_ReadU8(rw) != 0;
|
||||||
gCheatsFreezeClimate = SDL_ReadU8(rw) != 0;
|
gCheatsFreezeClimate = SDL_ReadU8(rw) != 0;
|
||||||
gCheatsDisablePlantAging = SDL_ReadU8(rw) != 0;
|
gCheatsDisablePlantAging = SDL_ReadU8(rw) != 0;
|
||||||
|
gCheatsAllowArbitraryRideTypeChanges = SDL_ReadU8(rw) != 0;
|
||||||
|
|
||||||
gLastAutoSaveTick = SDL_GetTicks();
|
gLastAutoSaveTick = SDL_GetTicks();
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -3916,6 +3916,14 @@ static money32 ride_set_setting(uint8 rideIndex, uint8 setting, uint8 value, uin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case RIDE_SETTING_RIDE_TYPE:
|
||||||
|
if (!gCheatsAllowArbitraryRideTypeChanges) {
|
||||||
|
return MONEY32_UNDEFINED;
|
||||||
|
}
|
||||||
|
if (flags & GAME_COMMAND_FLAG_APPLY) {
|
||||||
|
ride->type = value;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flags & GAME_COMMAND_FLAG_APPLY) {
|
if (flags & GAME_COMMAND_FLAG_APPLY) {
|
||||||
|
|
|
@ -880,6 +880,7 @@ enum {
|
||||||
RIDE_SETTING_MUSIC_TYPE,
|
RIDE_SETTING_MUSIC_TYPE,
|
||||||
RIDE_SETTING_LIFT_HILL_SPEED,
|
RIDE_SETTING_LIFT_HILL_SPEED,
|
||||||
RIDE_SETTING_NUM_CIRCUITS,
|
RIDE_SETTING_NUM_CIRCUITS,
|
||||||
|
RIDE_SETTING_RIDE_TYPE,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MAX_RIDES 255
|
#define MAX_RIDES 255
|
||||||
|
|
|
@ -106,6 +106,9 @@ void title_load()
|
||||||
|
|
||||||
gScreenFlags = SCREEN_FLAGS_TITLE_DEMO;
|
gScreenFlags = SCREEN_FLAGS_TITLE_DEMO;
|
||||||
|
|
||||||
|
#ifndef DISABLE_NETWORK
|
||||||
|
network_close();
|
||||||
|
#endif
|
||||||
reset_park_entrances();
|
reset_park_entrances();
|
||||||
user_string_clear_all();
|
user_string_clear_all();
|
||||||
reset_sprite_list();
|
reset_sprite_list();
|
||||||
|
@ -131,9 +134,6 @@ void title_load()
|
||||||
title_init_showcase();
|
title_init_showcase();
|
||||||
gfx_invalidate_screen();
|
gfx_invalidate_screen();
|
||||||
gScreenAge = 0;
|
gScreenAge = 0;
|
||||||
#ifndef DISABLE_NETWORK
|
|
||||||
network_close();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (gOpenRCT2ShowChangelog) {
|
if (gOpenRCT2ShowChangelog) {
|
||||||
gOpenRCT2ShowChangelog = false;
|
gOpenRCT2ShowChangelog = false;
|
||||||
|
|
|
@ -130,7 +130,8 @@ enum WINDOW_CHEATS_WIDGET_IDX {
|
||||||
WIDX_SHOW_ALL_OPERATING_MODES,
|
WIDX_SHOW_ALL_OPERATING_MODES,
|
||||||
WIDX_SHOW_VEHICLES_FROM_OTHER_TRACK_TYPES,
|
WIDX_SHOW_VEHICLES_FROM_OTHER_TRACK_TYPES,
|
||||||
WIDX_DISABLE_TRAIN_LENGTH_LIMITS,
|
WIDX_DISABLE_TRAIN_LENGTH_LIMITS,
|
||||||
WIDX_ENABLE_CHAIN_LIFT_ON_ALL_TRACK
|
WIDX_ENABLE_CHAIN_LIFT_ON_ALL_TRACK,
|
||||||
|
WIDX_ENABLE_ARBITRARY_RIDE_TYPE_CHANGES,
|
||||||
};
|
};
|
||||||
|
|
||||||
#pragma region MEASUREMENTS
|
#pragma region MEASUREMENTS
|
||||||
|
@ -259,6 +260,7 @@ static rct_widget window_cheats_rides_widgets[] = {
|
||||||
{ WWT_CHECKBOX, 2, XPL(0), OWPL, YPL(6), OHPL(6), STR_CHEAT_SHOW_VEHICLES_FROM_OTHER_TRACK_TYPES, STR_NONE }, // Show vehicles from other track types
|
{ WWT_CHECKBOX, 2, XPL(0), OWPL, YPL(6), OHPL(6), STR_CHEAT_SHOW_VEHICLES_FROM_OTHER_TRACK_TYPES, STR_NONE }, // Show vehicles from other track types
|
||||||
{ WWT_CHECKBOX, 2, XPL(0), OWPL, YPL(12), OHPL(12), STR_CHEAT_DISABLE_TRAIN_LENGTH_LIMIT, STR_CHEAT_DISABLE_TRAIN_LENGTH_LIMIT_TIP }, // Disable train length limits
|
{ WWT_CHECKBOX, 2, XPL(0), OWPL, YPL(12), OHPL(12), STR_CHEAT_DISABLE_TRAIN_LENGTH_LIMIT, STR_CHEAT_DISABLE_TRAIN_LENGTH_LIMIT_TIP }, // Disable train length limits
|
||||||
{ WWT_CHECKBOX, 2, XPL(0), OWPL, YPL(13), OHPL(13), STR_CHEAT_ENABLE_CHAIN_LIFT_ON_ALL_TRACK, STR_CHEAT_ENABLE_CHAIN_LIFT_ON_ALL_TRACK_TIP }, // Enable chain lift on all track
|
{ WWT_CHECKBOX, 2, XPL(0), OWPL, YPL(13), OHPL(13), STR_CHEAT_ENABLE_CHAIN_LIFT_ON_ALL_TRACK, STR_CHEAT_ENABLE_CHAIN_LIFT_ON_ALL_TRACK_TIP }, // Enable chain lift on all track
|
||||||
|
{ WWT_CHECKBOX, 2, 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
|
||||||
{ WIDGETS_END },
|
{ WIDGETS_END },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -430,7 +432,8 @@ 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_RENEW_RIDES) |
|
(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_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_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) | (1ULL << WIDX_DISABLE_TRAIN_LENGTH_LIMITS) | (1ULL << WIDX_ENABLE_CHAIN_LIFT_ON_ALL_TRACK)
|
(1ULL << WIDX_SHOW_ALL_OPERATING_MODES) | (1ULL << WIDX_SHOW_VEHICLES_FROM_OTHER_TRACK_TYPES) | (1ULL << WIDX_DISABLE_TRAIN_LENGTH_LIMITS) |
|
||||||
|
(1ULL << WIDX_ENABLE_CHAIN_LIFT_ON_ALL_TRACK) | (1ULL << WIDX_ENABLE_ARBITRARY_RIDE_TYPE_CHANGES)
|
||||||
};
|
};
|
||||||
|
|
||||||
static rct_string_id window_cheats_page_titles[] = {
|
static rct_string_id window_cheats_page_titles[] = {
|
||||||
|
@ -758,6 +761,12 @@ static void window_cheats_rides_mouseup(rct_window *w, int widgetIndex)
|
||||||
case WIDX_ENABLE_CHAIN_LIFT_ON_ALL_TRACK:
|
case WIDX_ENABLE_CHAIN_LIFT_ON_ALL_TRACK:
|
||||||
game_do_command(0, GAME_COMMAND_FLAG_APPLY, CHEAT_ENABLECHAINLIFTONALLTRACK, 0, GAME_COMMAND_CHEAT, 0, 0);
|
game_do_command(0, GAME_COMMAND_FLAG_APPLY, CHEAT_ENABLECHAINLIFTONALLTRACK, 0, GAME_COMMAND_CHEAT, 0, 0);
|
||||||
break;
|
break;
|
||||||
|
case WIDX_ENABLE_ARBITRARY_RIDE_TYPE_CHANGES:
|
||||||
|
game_do_command(0, GAME_COMMAND_FLAG_APPLY, CHEAT_ALLOW_ARBITRARY_RIDE_TYPE_CHANGES, 0, GAME_COMMAND_CHEAT, 0, 0);
|
||||||
|
if (gCheatsAllowArbitraryRideTypeChanges) {
|
||||||
|
window_error_open(STR_WARNING_IN_CAPS, STR_THIS_FEATURE_IS_CURRENTLY_UNSTABLE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -830,6 +839,7 @@ static void window_cheats_invalidate(rct_window *w)
|
||||||
widget_set_checkbox_value(w, WIDX_SHOW_VEHICLES_FROM_OTHER_TRACK_TYPES, gCheatsShowVehiclesFromOtherTrackTypes);
|
widget_set_checkbox_value(w, WIDX_SHOW_VEHICLES_FROM_OTHER_TRACK_TYPES, gCheatsShowVehiclesFromOtherTrackTypes);
|
||||||
widget_set_checkbox_value(w, WIDX_DISABLE_TRAIN_LENGTH_LIMITS, gCheatsDisableTrainLengthLimit);
|
widget_set_checkbox_value(w, WIDX_DISABLE_TRAIN_LENGTH_LIMITS, gCheatsDisableTrainLengthLimit);
|
||||||
widget_set_checkbox_value(w, WIDX_ENABLE_CHAIN_LIFT_ON_ALL_TRACK, gCheatsEnableChainLiftOnAllTrack);
|
widget_set_checkbox_value(w, WIDX_ENABLE_CHAIN_LIFT_ON_ALL_TRACK, gCheatsEnableChainLiftOnAllTrack);
|
||||||
|
widget_set_checkbox_value(w, WIDX_ENABLE_ARBITRARY_RIDE_TYPE_CHANGES, gCheatsAllowArbitraryRideTypeChanges);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -86,6 +86,10 @@ enum {
|
||||||
WIDX_CLOSE_LIGHT,
|
WIDX_CLOSE_LIGHT,
|
||||||
WIDX_TEST_LIGHT,
|
WIDX_TEST_LIGHT,
|
||||||
WIDX_OPEN_LIGHT,
|
WIDX_OPEN_LIGHT,
|
||||||
|
WIDX_RIDE_TYPE,
|
||||||
|
WIDX_RIDE_TYPE_INCREASE,
|
||||||
|
WIDX_RIDE_TYPE_DECREASE,
|
||||||
|
WIDX_RIDE_TYPE_APPLY,
|
||||||
|
|
||||||
WIDX_VEHICLE_TYPE = 14,
|
WIDX_VEHICLE_TYPE = 14,
|
||||||
WIDX_VEHICLE_TYPE_DROPDOWN,
|
WIDX_VEHICLE_TYPE_DROPDOWN,
|
||||||
|
@ -214,6 +218,13 @@ static rct_widget window_ride_main_widgets[] = {
|
||||||
{ WWT_IMGBTN, 1, 296, 309, 48, 61, SPR_G2_RCT1_CLOSE_BUTTON_0, STR_CLOSE_RIDE_TIP },
|
{ WWT_IMGBTN, 1, 296, 309, 48, 61, SPR_G2_RCT1_CLOSE_BUTTON_0, STR_CLOSE_RIDE_TIP },
|
||||||
{ WWT_IMGBTN, 1, 296, 309, 62, 75, SPR_G2_RCT1_TEST_BUTTON_0, STR_TEST_RIDE_TIP },
|
{ WWT_IMGBTN, 1, 296, 309, 62, 75, SPR_G2_RCT1_TEST_BUTTON_0, STR_TEST_RIDE_TIP },
|
||||||
{ WWT_IMGBTN, 1, 296, 309, 76, 89, SPR_G2_RCT1_OPEN_BUTTON_0, STR_OPEN_RIDE_TIP },
|
{ WWT_IMGBTN, 1, 296, 309, 76, 89, SPR_G2_RCT1_OPEN_BUTTON_0, STR_OPEN_RIDE_TIP },
|
||||||
|
|
||||||
|
// Ride type spinner + apply button
|
||||||
|
{ WWT_SPINNER, 1, 3, 253, 180, 191, STR_ARG_6_STRINGID, STR_NONE },
|
||||||
|
{ WWT_DROPDOWN_BUTTON, 1, 242, 252, 181, 185, STR_NUMERIC_UP, STR_NONE },
|
||||||
|
{ WWT_DROPDOWN_BUTTON, 1, 242, 252, 186, 190, STR_NUMERIC_DOWN, STR_NONE },
|
||||||
|
{ WWT_CLOSEBOX, 1, 260, 307, 180, 191, STR_APPLY, STR_NONE },
|
||||||
|
|
||||||
{ WIDGETS_END },
|
{ WIDGETS_END },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -243,6 +254,7 @@ static rct_widget window_ride_vehicle_widgets[] = {
|
||||||
{ WWT_SPINNER, 1, 164, 308, 190, 201, STR_1_CAR_PER_TRAIN, STR_NONE },
|
{ WWT_SPINNER, 1, 164, 308, 190, 201, STR_1_CAR_PER_TRAIN, STR_NONE },
|
||||||
{ WWT_DROPDOWN_BUTTON, 1, 297, 307, 191, 195, STR_NUMERIC_UP, STR_NONE },
|
{ WWT_DROPDOWN_BUTTON, 1, 297, 307, 191, 195, STR_NUMERIC_UP, STR_NONE },
|
||||||
{ WWT_DROPDOWN_BUTTON, 1, 297, 307, 196, 200, STR_NUMERIC_DOWN, STR_NONE },
|
{ WWT_DROPDOWN_BUTTON, 1, 297, 307, 196, 200, STR_NUMERIC_DOWN, STR_NONE },
|
||||||
|
|
||||||
{ WIDGETS_END },
|
{ WIDGETS_END },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -497,7 +509,7 @@ static rct_widget *window_ride_page_widgets[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint64 window_ride_page_enabled_widgets[] = {
|
const uint64 window_ride_page_enabled_widgets[] = {
|
||||||
0x0000000003FDBFF4,
|
0x000000003FFDBFF4,
|
||||||
0x00000000007EFFF4,
|
0x00000000007EFFF4,
|
||||||
0x0000019E777DBFF4,
|
0x0000019E777DBFF4,
|
||||||
0x000000000003FFF4,
|
0x000000000003FFF4,
|
||||||
|
@ -955,6 +967,10 @@ static rct_window_event_list *window_ride_page_events[] = {
|
||||||
|
|
||||||
#pragma endregion
|
#pragma endregion
|
||||||
|
|
||||||
|
static uint8 _rideType;
|
||||||
|
|
||||||
|
static void set_operating_setting(int rideNumber, uint8 setting, uint8 value);
|
||||||
|
|
||||||
// Cached overall view for each ride
|
// Cached overall view for each ride
|
||||||
// (Re)calculated when the ride window is opened
|
// (Re)calculated when the ride window is opened
|
||||||
typedef struct ride_overall_view_t {
|
typedef struct ride_overall_view_t {
|
||||||
|
@ -1528,9 +1544,8 @@ static rct_window *window_ride_open(int rideIndex)
|
||||||
w->max_width = 500;
|
w->max_width = 500;
|
||||||
w->max_height = 450;
|
w->max_height = 450;
|
||||||
|
|
||||||
window_ride_update_overall_view((uint8) rideIndex);
|
|
||||||
|
|
||||||
ride = get_ride(rideIndex);
|
ride = get_ride(rideIndex);
|
||||||
|
_rideType = ride->type;
|
||||||
numSubTypes = 0;
|
numSubTypes = 0;
|
||||||
rideEntryIndexPtr = get_ride_entry_indices_for_ride_type(ride->type);
|
rideEntryIndexPtr = get_ride_entry_indices_for_ride_type(ride->type);
|
||||||
for (; *rideEntryIndexPtr != 0xFF; rideEntryIndexPtr++) {
|
for (; *rideEntryIndexPtr != 0xFF; rideEntryIndexPtr++) {
|
||||||
|
@ -1539,6 +1554,9 @@ static rct_window *window_ride_open(int rideIndex)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var_496(w) = numSubTypes;
|
var_496(w) = numSubTypes;
|
||||||
|
|
||||||
|
window_ride_update_overall_view((uint8) rideIndex);
|
||||||
|
|
||||||
return w;
|
return w;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1609,6 +1627,7 @@ rct_window *window_ride_open_station(int rideIndex, int stationIndex)
|
||||||
) {
|
) {
|
||||||
tool_cancel();
|
tool_cancel();
|
||||||
}
|
}
|
||||||
|
_rideType = ride->type;
|
||||||
|
|
||||||
w->page = WINDOW_RIDE_PAGE_MAIN;
|
w->page = WINDOW_RIDE_PAGE_MAIN;
|
||||||
w->width = 316;
|
w->width = 316;
|
||||||
|
@ -1719,6 +1738,7 @@ rct_window *window_ride_open_vehicle(rct_vehicle *vehicle)
|
||||||
w->ride.var_482 = -1;
|
w->ride.var_482 = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_rideType = ride->type;
|
||||||
w->page = WINDOW_RIDE_PAGE_MAIN;
|
w->page = WINDOW_RIDE_PAGE_MAIN;
|
||||||
w->width = 316;
|
w->width = 316;
|
||||||
w->height = 180;
|
w->height = 180;
|
||||||
|
@ -2024,16 +2044,17 @@ static void window_ride_main_resize(rct_window *w)
|
||||||
rct_viewport *viewport;
|
rct_viewport *viewport;
|
||||||
int width, height;
|
int width, height;
|
||||||
|
|
||||||
|
const int offset = gCheatsAllowArbitraryRideTypeChanges ? 15 : 0;
|
||||||
w->flags |= WF_RESIZABLE;
|
w->flags |= WF_RESIZABLE;
|
||||||
int minHeight = 180;
|
int minHeight = 180 + offset;
|
||||||
if (theme_get_flags() & UITHEME_FLAG_USE_LIGHTS_RIDE)
|
if (theme_get_flags() & UITHEME_FLAG_USE_LIGHTS_RIDE)
|
||||||
minHeight = 200 + RCT1_LIGHT_OFFSET - (ride_type_has_flag(get_ride(w->number)->type, RIDE_TYPE_FLAG_NO_TEST_MODE) ? 14 : 0);
|
minHeight = 200 + offset + RCT1_LIGHT_OFFSET - (ride_type_has_flag(get_ride(w->number)->type, RIDE_TYPE_FLAG_NO_TEST_MODE) ? 14 : 0);
|
||||||
window_set_resize(w, 316, minHeight, 500, 450);
|
window_set_resize(w, 316, minHeight, 500, 450);
|
||||||
|
|
||||||
viewport = w->viewport;
|
viewport = w->viewport;
|
||||||
if (viewport != NULL) {
|
if (viewport != NULL) {
|
||||||
width = w->width - 30;
|
width = w->width - 30;
|
||||||
height = w->height - 75;
|
height = w->height - (75 + offset);
|
||||||
if (viewport->width != width || viewport->height != height) {
|
if (viewport->width != width || viewport->height != height) {
|
||||||
viewport->width = width;
|
viewport->width = width;
|
||||||
viewport->height = height;
|
viewport->height = height;
|
||||||
|
@ -2190,6 +2211,7 @@ static void window_ride_show_open_dropdown(rct_window *w, rct_widget *widget)
|
||||||
*/
|
*/
|
||||||
static void window_ride_main_mousedown(int widgetIndex, rct_window *w, rct_widget *widget)
|
static void window_ride_main_mousedown(int widgetIndex, rct_window *w, rct_widget *widget)
|
||||||
{
|
{
|
||||||
|
rct_ride *ride = get_ride(w->number);
|
||||||
switch (widgetIndex) {
|
switch (widgetIndex) {
|
||||||
case WIDX_VIEW_DROPDOWN:
|
case WIDX_VIEW_DROPDOWN:
|
||||||
window_ride_show_view_dropdown(w, widget);
|
window_ride_show_view_dropdown(w, widget);
|
||||||
|
@ -2197,6 +2219,28 @@ static void window_ride_main_mousedown(int widgetIndex, rct_window *w, rct_widge
|
||||||
case WIDX_OPEN:
|
case WIDX_OPEN:
|
||||||
window_ride_show_open_dropdown(w, widget);
|
window_ride_show_open_dropdown(w, widget);
|
||||||
break;
|
break;
|
||||||
|
case WIDX_RIDE_TYPE_INCREASE:
|
||||||
|
if (_rideType >= 90) {
|
||||||
|
_rideType = 90;
|
||||||
|
} else {
|
||||||
|
_rideType++;
|
||||||
|
}
|
||||||
|
widget_invalidate(w, WIDX_RIDE_TYPE);
|
||||||
|
break;
|
||||||
|
case WIDX_RIDE_TYPE_DECREASE:
|
||||||
|
if (_rideType == 0) {
|
||||||
|
_rideType = 0;
|
||||||
|
} else {
|
||||||
|
_rideType--;
|
||||||
|
}
|
||||||
|
widget_invalidate(w, WIDX_RIDE_TYPE);
|
||||||
|
break;
|
||||||
|
case WIDX_RIDE_TYPE_APPLY:
|
||||||
|
if (_rideType >= 0 && _rideType <= 90) {
|
||||||
|
set_operating_setting(w->number, RIDE_SETTING_RIDE_TYPE, _rideType);
|
||||||
|
}
|
||||||
|
window_invalidate_all();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2347,6 +2391,7 @@ static void window_ride_main_invalidate(rct_window *w)
|
||||||
|
|
||||||
set_format_arg(0, uint16, ride->name);
|
set_format_arg(0, uint16, ride->name);
|
||||||
set_format_arg(2, uint32, ride->name_arguments);
|
set_format_arg(2, uint32, ride->name_arguments);
|
||||||
|
set_format_arg(6, uint16, _rideType + STR_RIDE_NAME_SPIRAL_ROLLER_COASTER);
|
||||||
uint32 spriteIds[] = {
|
uint32 spriteIds[] = {
|
||||||
SPR_CLOSED,
|
SPR_CLOSED,
|
||||||
SPR_OPEN,
|
SPR_OPEN,
|
||||||
|
@ -2360,15 +2405,46 @@ static void window_ride_main_invalidate(rct_window *w)
|
||||||
|
|
||||||
window_ride_anchor_border_widgets(w);
|
window_ride_anchor_border_widgets(w);
|
||||||
|
|
||||||
|
const int offset = gCheatsAllowArbitraryRideTypeChanges ? 15 : 0;
|
||||||
// Anchor main page specific widgets
|
// Anchor main page specific widgets
|
||||||
window_ride_main_widgets[WIDX_VIEWPORT].right = w->width - 26;
|
window_ride_main_widgets[WIDX_VIEWPORT].right = w->width - 26;
|
||||||
window_ride_main_widgets[WIDX_VIEWPORT].bottom = w->height - 14;
|
window_ride_main_widgets[WIDX_VIEWPORT].bottom = w->height - (14 + offset);
|
||||||
window_ride_main_widgets[WIDX_STATUS].right = w->width - 26;
|
window_ride_main_widgets[WIDX_STATUS].right = w->width - 26;
|
||||||
window_ride_main_widgets[WIDX_STATUS].top = w->height - 13;
|
window_ride_main_widgets[WIDX_STATUS].top = w->height - (13 + offset);
|
||||||
window_ride_main_widgets[WIDX_STATUS].bottom = w->height - 3;
|
window_ride_main_widgets[WIDX_STATUS].bottom = w->height - (3 + offset);
|
||||||
window_ride_main_widgets[WIDX_VIEW].right = w->width - 60;
|
window_ride_main_widgets[WIDX_VIEW].right = w->width - 60;
|
||||||
window_ride_main_widgets[WIDX_VIEW_DROPDOWN].right = w->width - 61;
|
window_ride_main_widgets[WIDX_VIEW_DROPDOWN].right = w->width - 61;
|
||||||
window_ride_main_widgets[WIDX_VIEW_DROPDOWN].left = w->width - 71;
|
window_ride_main_widgets[WIDX_VIEW_DROPDOWN].left = w->width - 71;
|
||||||
|
window_ride_main_widgets[WIDX_RIDE_TYPE].right = w->width - 87;
|
||||||
|
window_ride_main_widgets[WIDX_RIDE_TYPE].top = w->height - 17;
|
||||||
|
window_ride_main_widgets[WIDX_RIDE_TYPE].bottom = w->height - 4;
|
||||||
|
window_ride_main_widgets[WIDX_RIDE_TYPE_INCREASE].right = w->width - 88;
|
||||||
|
window_ride_main_widgets[WIDX_RIDE_TYPE_INCREASE].left = w->width - 98;
|
||||||
|
window_ride_main_widgets[WIDX_RIDE_TYPE_INCREASE].top = w->height - 16;
|
||||||
|
window_ride_main_widgets[WIDX_RIDE_TYPE_INCREASE].bottom = w->height - 11;
|
||||||
|
window_ride_main_widgets[WIDX_RIDE_TYPE_DECREASE].right = w->width - 88;
|
||||||
|
window_ride_main_widgets[WIDX_RIDE_TYPE_DECREASE].left = w->width - 98;
|
||||||
|
window_ride_main_widgets[WIDX_RIDE_TYPE_DECREASE].top = w->height - 10;
|
||||||
|
window_ride_main_widgets[WIDX_RIDE_TYPE_DECREASE].bottom = w->height - 5;
|
||||||
|
window_ride_main_widgets[WIDX_RIDE_TYPE_APPLY].left = w->width - 83;
|
||||||
|
window_ride_main_widgets[WIDX_RIDE_TYPE_APPLY].right = w->width - 26;
|
||||||
|
window_ride_main_widgets[WIDX_RIDE_TYPE_APPLY].top = w->height - 17;
|
||||||
|
window_ride_main_widgets[WIDX_RIDE_TYPE_APPLY].bottom = w->height - 4;
|
||||||
|
|
||||||
|
widget_invalidate(w, WIDX_VIEWPORT);
|
||||||
|
widget_invalidate(w, WIDX_VIEW);
|
||||||
|
|
||||||
|
if (!gCheatsAllowArbitraryRideTypeChanges) {
|
||||||
|
window_ride_main_widgets[WIDX_RIDE_TYPE].type = WWT_EMPTY;
|
||||||
|
window_ride_main_widgets[WIDX_RIDE_TYPE_INCREASE].type = WWT_EMPTY;
|
||||||
|
window_ride_main_widgets[WIDX_RIDE_TYPE_DECREASE].type = WWT_EMPTY;
|
||||||
|
window_ride_main_widgets[WIDX_RIDE_TYPE_APPLY].type = WWT_EMPTY;
|
||||||
|
} else {
|
||||||
|
window_ride_main_widgets[WIDX_RIDE_TYPE].type = WWT_SPINNER;
|
||||||
|
window_ride_main_widgets[WIDX_RIDE_TYPE_INCREASE].type = WWT_DROPDOWN_BUTTON;
|
||||||
|
window_ride_main_widgets[WIDX_RIDE_TYPE_DECREASE].type = WWT_DROPDOWN_BUTTON;
|
||||||
|
window_ride_main_widgets[WIDX_RIDE_TYPE_APPLY].type = WWT_CLOSEBOX;
|
||||||
|
}
|
||||||
|
|
||||||
window_align_tabs(w, WIDX_TAB_1, WIDX_TAB_10);
|
window_align_tabs(w, WIDX_TAB_1, WIDX_TAB_10);
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#pragma endregion
|
#pragma endregion
|
||||||
|
|
||||||
#include "../audio/audio.h"
|
#include "../audio/audio.h"
|
||||||
|
#include "../network/network.h"
|
||||||
#include "../scenario.h"
|
#include "../scenario.h"
|
||||||
#include "../util/util.h"
|
#include "../util/util.h"
|
||||||
#include "sprite.h"
|
#include "sprite.h"
|
||||||
|
@ -82,6 +83,9 @@ void balloon_update(rct_balloon *balloon)
|
||||||
*/
|
*/
|
||||||
void balloon_press(rct_balloon *balloon)
|
void balloon_press(rct_balloon *balloon)
|
||||||
{
|
{
|
||||||
|
if (network_get_mode() != NETWORK_MODE_NONE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (balloon->popped == 1)
|
if (balloon->popped == 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -93,7 +93,7 @@ void climate_reset(int climate)
|
||||||
_rainVolume = 1;
|
_rainVolume = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
climate_determine_future_weather(util_rand());
|
climate_determine_future_weather(scenario_rand());
|
||||||
}
|
}
|
||||||
|
|
||||||
static sint8 step_weather_level(sint8 cur_weather_level, sint8 next_weather_level) {
|
static sint8 step_weather_level(sint8 cur_weather_level, sint8 next_weather_level) {
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
|
|
||||||
#include "../audio/audio.h"
|
#include "../audio/audio.h"
|
||||||
#include "../util/util.h"
|
#include "../util/util.h"
|
||||||
|
#include "../scenario.h"
|
||||||
#include "sprite.h"
|
#include "sprite.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -35,12 +36,12 @@ void crashed_vehicle_particle_create(rct_vehicle_colour colours, int x, int y, i
|
||||||
sprite_move(x, y, z, (rct_sprite*)sprite);
|
sprite_move(x, y, z, (rct_sprite*)sprite);
|
||||||
sprite->misc_identifier = SPRITE_MISC_CRASHED_VEHICLE_PARTICLE;
|
sprite->misc_identifier = SPRITE_MISC_CRASHED_VEHICLE_PARTICLE;
|
||||||
|
|
||||||
sprite->frame = (util_rand() & 0xFF) * 12;
|
sprite->frame = (scenario_rand() & 0xFF) * 12;
|
||||||
sprite->var_24 = (util_rand() & 0x7F) + 140;
|
sprite->var_24 = (scenario_rand() & 0x7F) + 140;
|
||||||
sprite->var_2E = ((util_rand() & 0xFF) * 5) >> 8;
|
sprite->var_2E = ((scenario_rand() & 0xFF) * 5) >> 8;
|
||||||
sprite->acceleration_x = ((sint16)(util_rand() & 0xFFFF)) * 4;
|
sprite->acceleration_x = ((sint16)(scenario_rand() & 0xFFFF)) * 4;
|
||||||
sprite->acceleration_y = ((sint16)(util_rand() & 0xFFFF)) * 4;
|
sprite->acceleration_y = ((sint16)(scenario_rand() & 0xFFFF)) * 4;
|
||||||
sprite->acceleration_z = (util_rand() & 0xFFFF) * 4 + 0x10000;
|
sprite->acceleration_z = (scenario_rand() & 0xFFFF) * 4 + 0x10000;
|
||||||
sprite->velocity_x = 0;
|
sprite->velocity_x = 0;
|
||||||
sprite->velocity_y = 0;
|
sprite->velocity_y = 0;
|
||||||
sprite->velocity_z = 0;
|
sprite->velocity_z = 0;
|
||||||
|
|
|
@ -128,8 +128,6 @@ void reset_sprite_list()
|
||||||
}
|
}
|
||||||
|
|
||||||
gSpriteListCount[SPRITE_LIST_NULL] = MAX_SPRITES;
|
gSpriteListCount[SPRITE_LIST_NULL] = MAX_SPRITES;
|
||||||
|
|
||||||
game_do_command(0, GAME_COMMAND_FLAG_APPLY, 0, 0, GAME_COMMAND_RESET_SPRITES, 0, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -159,15 +157,6 @@ void reset_sprite_spatial_index()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void game_command_reset_sprites(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* edi, int* ebp)
|
|
||||||
{
|
|
||||||
if (*ebx & GAME_COMMAND_FLAG_APPLY) {
|
|
||||||
reset_all_sprite_quadrant_placements();
|
|
||||||
reset_sprite_spatial_index();
|
|
||||||
}
|
|
||||||
*ebx = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef DISABLE_NETWORK
|
#ifndef DISABLE_NETWORK
|
||||||
|
|
||||||
static unsigned char _spriteChecksum[EVP_MAX_MD_SIZE + 1];
|
static unsigned char _spriteChecksum[EVP_MAX_MD_SIZE + 1];
|
||||||
|
@ -181,9 +170,11 @@ const char * sprite_checksum()
|
||||||
for (size_t i = 0; i < MAX_SPRITES; i++)
|
for (size_t i = 0; i < MAX_SPRITES; i++)
|
||||||
{
|
{
|
||||||
rct_sprite *sprite = get_sprite(i);
|
rct_sprite *sprite = get_sprite(i);
|
||||||
if (sprite->unknown.sprite_identifier != SPRITE_IDENTIFIER_NULL)
|
if (sprite->unknown.sprite_identifier != SPRITE_IDENTIFIER_NULL && sprite->unknown.sprite_identifier != SPRITE_IDENTIFIER_MISC)
|
||||||
{
|
{
|
||||||
if (EVP_DigestUpdate(gHashCTX, sprite, sizeof(rct_sprite)) <= 0)
|
rct_sprite copy = *sprite;
|
||||||
|
copy.unknown.sprite_left = copy.unknown.sprite_right = copy.unknown.sprite_top = copy.unknown.sprite_bottom = 0;
|
||||||
|
if (EVP_DigestUpdate(gHashCTX, ©, sizeof(rct_sprite)) <= 0)
|
||||||
{
|
{
|
||||||
openrct2_assert(false, "Failed to update digest");
|
openrct2_assert(false, "Failed to update digest");
|
||||||
}
|
}
|
||||||
|
|
|
@ -395,7 +395,6 @@ extern uint16 *gSpriteSpatialIndex;
|
||||||
|
|
||||||
rct_sprite *create_sprite(uint8 bl);
|
rct_sprite *create_sprite(uint8 bl);
|
||||||
void reset_sprite_list();
|
void reset_sprite_list();
|
||||||
void game_command_reset_sprites(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* edi, int* ebp);
|
|
||||||
void reset_sprite_spatial_index();
|
void reset_sprite_spatial_index();
|
||||||
void sprite_clear_all_unused();
|
void sprite_clear_all_unused();
|
||||||
void move_sprite_to_list(rct_sprite *sprite, uint8 cl);
|
void move_sprite_to_list(rct_sprite *sprite, uint8 cl);
|
||||||
|
|
Loading…
Reference in New Issue