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_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_5908 :Allow arbitrary ride type changes
|
||||
STR_5909 :{SMALLFONT}{BLACK}Allows changing ride type freely. May cause crashes.
|
||||
STR_5910 :Apply
|
||||
|
||||
#############
|
||||
# Scenarios #
|
||||
|
|
|
@ -43,6 +43,7 @@ bool gCheatsFreezeClimate = false;
|
|||
bool gCheatsDisableTrainLengthLimit = false;
|
||||
bool gCheatsDisablePlantAging = false;
|
||||
bool gCheatsEnableChainLiftOnAllTrack = false;
|
||||
bool gCheatsAllowArbitraryRideTypeChanges = false;
|
||||
|
||||
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_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_ALLOW_ARBITRARY_RIDE_TYPE_CHANGES: gCheatsAllowArbitraryRideTypeChanges = !gCheatsAllowArbitraryRideTypeChanges; window_invalidate_by_class(WC_RIDE); break;
|
||||
}
|
||||
if (network_get_mode() == NETWORK_MODE_NONE) {
|
||||
config_save_default();
|
||||
|
@ -445,4 +447,5 @@ void cheats_reset()
|
|||
gCheatsNeverendingMarketing = false;
|
||||
gCheatsFreezeClimate = false;
|
||||
gCheatsDisablePlantAging = false;
|
||||
gCheatsAllowArbitraryRideTypeChanges = false;
|
||||
}
|
||||
|
|
|
@ -37,6 +37,7 @@ extern bool gCheatsFreezeClimate;
|
|||
extern bool gCheatsDisableTrainLengthLimit;
|
||||
extern bool gCheatsDisablePlantAging;
|
||||
extern bool gCheatsEnableChainLiftOnAllTrack;
|
||||
extern bool gCheatsAllowArbitraryRideTypeChanges;
|
||||
|
||||
|
||||
enum {
|
||||
|
@ -81,6 +82,7 @@ enum {
|
|||
CHEAT_SETFORCEDPARKRATING,
|
||||
CHEAT_NEVERENDINGMARKETING,
|
||||
CHEAT_RESETDATE,
|
||||
CHEAT_ALLOW_ARBITRARY_RIDE_TYPE_CHANGES,
|
||||
};
|
||||
|
||||
enum {
|
||||
|
|
|
@ -1142,5 +1142,4 @@ GAME_COMMAND_POINTER* new_game_command_table[68] = {
|
|||
game_command_modify_groups,
|
||||
game_command_kick_player,
|
||||
game_command_cheat,
|
||||
game_command_reset_sprites,
|
||||
};
|
||||
|
|
|
@ -89,7 +89,6 @@ enum GAME_COMMAND {
|
|||
GAME_COMMAND_MODIFY_GROUPS,
|
||||
GAME_COMMAND_KICK_PLAYER,
|
||||
GAME_COMMAND_CHEAT,
|
||||
GAME_COMMAND_RESET_SPRITES,
|
||||
};
|
||||
|
||||
enum {
|
||||
|
|
|
@ -451,11 +451,11 @@ static int cc_rides(const utf8 **argv, int argc)
|
|||
FOR_ALL_RIDES(i, ride) {
|
||||
char name[128];
|
||||
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) {
|
||||
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;
|
||||
}
|
||||
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");
|
||||
} else if (ride_index < 0) {
|
||||
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 {
|
||||
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);
|
||||
if (ride->type != RIDE_TYPE_NULL) {
|
||||
ride->type = type;
|
||||
if (int_valid[2]) {
|
||||
ride->subtype = subtype;
|
||||
}
|
||||
} else {
|
||||
console_printf("No ride found with index %d", ride_index);
|
||||
if (res == MONEY32_UNDEFINED) {
|
||||
console_printf("That didn't work");
|
||||
}
|
||||
}
|
||||
} else if (strcmp(argv[1], "friction") == 0) {
|
||||
|
|
|
@ -3339,7 +3339,10 @@ enum {
|
|||
STR_MAP_GENERATOR_TIP = 5905,
|
||||
STR_ZOOM_TO_CURSOR = 5906,
|
||||
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
|
||||
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);
|
||||
chat_history_add(text);
|
||||
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);
|
||||
Server_Send_GROUPLIST(connection);
|
||||
Server_Send_PLAYERLIST();
|
||||
|
|
|
@ -55,7 +55,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 "11"
|
||||
#define NETWORK_STREAM_VERSION "12"
|
||||
#define NETWORK_STREAM_ID OPENRCT2_VERSION "-" NETWORK_STREAM_VERSION
|
||||
|
||||
#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);
|
||||
|
||||
peep->sprite_identifier = 1;
|
||||
peep->sprite_identifier = SPRITE_IDENTIFIER_PEEP;
|
||||
peep->sprite_type = PEEP_SPRITE_TYPE_NORMAL;
|
||||
peep->outside_of_park = 1;
|
||||
peep->state = PEEP_STATE_FALLING;
|
||||
|
|
|
@ -483,7 +483,6 @@ extern "C"
|
|||
}
|
||||
|
||||
map_reorganise_elements();
|
||||
game_do_command(0, GAME_COMMAND_FLAG_APPLY, 0, 0, GAME_COMMAND_RESET_SPRITES, 0, 0);
|
||||
sprite_clear_all_unused();
|
||||
|
||||
viewport_set_saved_view();
|
||||
|
@ -544,6 +543,7 @@ extern "C"
|
|||
}
|
||||
|
||||
// Write other data not in normal save files
|
||||
SDL_RWwrite(rw, gSpriteSpatialIndex, 0x10001 * sizeof(uint16), 1);
|
||||
SDL_WriteLE32(rw, gGamePaused);
|
||||
SDL_WriteLE32(rw, _guestGenerationProbability);
|
||||
SDL_WriteLE32(rw, _suggestedGuestMaximum);
|
||||
|
@ -565,6 +565,7 @@ extern "C"
|
|||
SDL_WriteU8(rw, gCheatsNeverendingMarketing);
|
||||
SDL_WriteU8(rw, gCheatsFreezeClimate);
|
||||
SDL_WriteU8(rw, gCheatsDisablePlantAging);
|
||||
SDL_WriteU8(rw, gCheatsAllowArbitraryRideTypeChanges);
|
||||
|
||||
gfx_invalidate_screen();
|
||||
return 1;
|
||||
|
|
|
@ -367,10 +367,9 @@ void S6Importer::Import()
|
|||
}
|
||||
map_update_tile_pointers();
|
||||
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();
|
||||
if (FixIssues)
|
||||
|
@ -491,6 +490,7 @@ extern "C"
|
|||
SDL_RWread(rw, &checksum, sizeof(uint32), 1);
|
||||
|
||||
// Read other data not in normal save files
|
||||
SDL_RWread(rw, gSpriteSpatialIndex, 0x10001 * sizeof(uint16), 1);
|
||||
gGamePaused = SDL_ReadLE32(rw);
|
||||
_guestGenerationProbability = SDL_ReadLE32(rw);
|
||||
_suggestedGuestMaximum = SDL_ReadLE32(rw);
|
||||
|
@ -512,6 +512,7 @@ extern "C"
|
|||
gCheatsNeverendingMarketing = SDL_ReadU8(rw) != 0;
|
||||
gCheatsFreezeClimate = SDL_ReadU8(rw) != 0;
|
||||
gCheatsDisablePlantAging = SDL_ReadU8(rw) != 0;
|
||||
gCheatsAllowArbitraryRideTypeChanges = SDL_ReadU8(rw) != 0;
|
||||
|
||||
gLastAutoSaveTick = SDL_GetTicks();
|
||||
return 1;
|
||||
|
|
|
@ -3916,6 +3916,14 @@ static money32 ride_set_setting(uint8 rideIndex, uint8 setting, uint8 value, uin
|
|||
}
|
||||
}
|
||||
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) {
|
||||
|
|
|
@ -880,6 +880,7 @@ enum {
|
|||
RIDE_SETTING_MUSIC_TYPE,
|
||||
RIDE_SETTING_LIFT_HILL_SPEED,
|
||||
RIDE_SETTING_NUM_CIRCUITS,
|
||||
RIDE_SETTING_RIDE_TYPE,
|
||||
};
|
||||
|
||||
#define MAX_RIDES 255
|
||||
|
|
|
@ -106,6 +106,9 @@ void title_load()
|
|||
|
||||
gScreenFlags = SCREEN_FLAGS_TITLE_DEMO;
|
||||
|
||||
#ifndef DISABLE_NETWORK
|
||||
network_close();
|
||||
#endif
|
||||
reset_park_entrances();
|
||||
user_string_clear_all();
|
||||
reset_sprite_list();
|
||||
|
@ -131,9 +134,6 @@ void title_load()
|
|||
title_init_showcase();
|
||||
gfx_invalidate_screen();
|
||||
gScreenAge = 0;
|
||||
#ifndef DISABLE_NETWORK
|
||||
network_close();
|
||||
#endif
|
||||
|
||||
if (gOpenRCT2ShowChangelog) {
|
||||
gOpenRCT2ShowChangelog = false;
|
||||
|
|
|
@ -130,7 +130,8 @@ enum WINDOW_CHEATS_WIDGET_IDX {
|
|||
WIDX_SHOW_ALL_OPERATING_MODES,
|
||||
WIDX_SHOW_VEHICLES_FROM_OTHER_TRACK_TYPES,
|
||||
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
|
||||
|
@ -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(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(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 },
|
||||
};
|
||||
|
||||
|
@ -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_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) | (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[] = {
|
||||
|
@ -758,6 +761,12 @@ static void window_cheats_rides_mouseup(rct_window *w, int widgetIndex)
|
|||
case WIDX_ENABLE_CHAIN_LIFT_ON_ALL_TRACK:
|
||||
game_do_command(0, GAME_COMMAND_FLAG_APPLY, CHEAT_ENABLECHAINLIFTONALLTRACK, 0, GAME_COMMAND_CHEAT, 0, 0);
|
||||
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_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_ARBITRARY_RIDE_TYPE_CHANGES, gCheatsAllowArbitraryRideTypeChanges);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -86,6 +86,10 @@ enum {
|
|||
WIDX_CLOSE_LIGHT,
|
||||
WIDX_TEST_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_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, 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 },
|
||||
|
||||
// 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 },
|
||||
};
|
||||
|
||||
|
@ -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_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 },
|
||||
|
||||
{ WIDGETS_END },
|
||||
};
|
||||
|
||||
|
@ -497,7 +509,7 @@ static rct_widget *window_ride_page_widgets[] = {
|
|||
};
|
||||
|
||||
const uint64 window_ride_page_enabled_widgets[] = {
|
||||
0x0000000003FDBFF4,
|
||||
0x000000003FFDBFF4,
|
||||
0x00000000007EFFF4,
|
||||
0x0000019E777DBFF4,
|
||||
0x000000000003FFF4,
|
||||
|
@ -955,6 +967,10 @@ static rct_window_event_list *window_ride_page_events[] = {
|
|||
|
||||
#pragma endregion
|
||||
|
||||
static uint8 _rideType;
|
||||
|
||||
static void set_operating_setting(int rideNumber, uint8 setting, uint8 value);
|
||||
|
||||
// Cached overall view for each ride
|
||||
// (Re)calculated when the ride window is opened
|
||||
typedef struct ride_overall_view_t {
|
||||
|
@ -1528,9 +1544,8 @@ static rct_window *window_ride_open(int rideIndex)
|
|||
w->max_width = 500;
|
||||
w->max_height = 450;
|
||||
|
||||
window_ride_update_overall_view((uint8) rideIndex);
|
||||
|
||||
ride = get_ride(rideIndex);
|
||||
_rideType = ride->type;
|
||||
numSubTypes = 0;
|
||||
rideEntryIndexPtr = get_ride_entry_indices_for_ride_type(ride->type);
|
||||
for (; *rideEntryIndexPtr != 0xFF; rideEntryIndexPtr++) {
|
||||
|
@ -1539,6 +1554,9 @@ static rct_window *window_ride_open(int rideIndex)
|
|||
}
|
||||
}
|
||||
var_496(w) = numSubTypes;
|
||||
|
||||
window_ride_update_overall_view((uint8) rideIndex);
|
||||
|
||||
return w;
|
||||
}
|
||||
|
||||
|
@ -1609,6 +1627,7 @@ rct_window *window_ride_open_station(int rideIndex, int stationIndex)
|
|||
) {
|
||||
tool_cancel();
|
||||
}
|
||||
_rideType = ride->type;
|
||||
|
||||
w->page = WINDOW_RIDE_PAGE_MAIN;
|
||||
w->width = 316;
|
||||
|
@ -1719,6 +1738,7 @@ rct_window *window_ride_open_vehicle(rct_vehicle *vehicle)
|
|||
w->ride.var_482 = -1;
|
||||
}
|
||||
|
||||
_rideType = ride->type;
|
||||
w->page = WINDOW_RIDE_PAGE_MAIN;
|
||||
w->width = 316;
|
||||
w->height = 180;
|
||||
|
@ -2024,16 +2044,17 @@ static void window_ride_main_resize(rct_window *w)
|
|||
rct_viewport *viewport;
|
||||
int width, height;
|
||||
|
||||
const int offset = gCheatsAllowArbitraryRideTypeChanges ? 15 : 0;
|
||||
w->flags |= WF_RESIZABLE;
|
||||
int minHeight = 180;
|
||||
int minHeight = 180 + offset;
|
||||
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);
|
||||
|
||||
viewport = w->viewport;
|
||||
if (viewport != NULL) {
|
||||
width = w->width - 30;
|
||||
height = w->height - 75;
|
||||
height = w->height - (75 + offset);
|
||||
if (viewport->width != width || viewport->height != height) {
|
||||
viewport->width = width;
|
||||
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)
|
||||
{
|
||||
rct_ride *ride = get_ride(w->number);
|
||||
switch (widgetIndex) {
|
||||
case WIDX_VIEW_DROPDOWN:
|
||||
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:
|
||||
window_ride_show_open_dropdown(w, widget);
|
||||
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(2, uint32, ride->name_arguments);
|
||||
set_format_arg(6, uint16, _rideType + STR_RIDE_NAME_SPIRAL_ROLLER_COASTER);
|
||||
uint32 spriteIds[] = {
|
||||
SPR_CLOSED,
|
||||
SPR_OPEN,
|
||||
|
@ -2360,15 +2405,46 @@ static void window_ride_main_invalidate(rct_window *w)
|
|||
|
||||
window_ride_anchor_border_widgets(w);
|
||||
|
||||
const int offset = gCheatsAllowArbitraryRideTypeChanges ? 15 : 0;
|
||||
// Anchor main page specific widgets
|
||||
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].top = w->height - 13;
|
||||
window_ride_main_widgets[WIDX_STATUS].bottom = w->height - 3;
|
||||
window_ride_main_widgets[WIDX_STATUS].top = w->height - (13 + offset);
|
||||
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_DROPDOWN].right = w->width - 61;
|
||||
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);
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#pragma endregion
|
||||
|
||||
#include "../audio/audio.h"
|
||||
#include "../network/network.h"
|
||||
#include "../scenario.h"
|
||||
#include "../util/util.h"
|
||||
#include "sprite.h"
|
||||
|
@ -82,6 +83,9 @@ void balloon_update(rct_balloon *balloon)
|
|||
*/
|
||||
void balloon_press(rct_balloon *balloon)
|
||||
{
|
||||
if (network_get_mode() != NETWORK_MODE_NONE) {
|
||||
return;
|
||||
}
|
||||
if (balloon->popped == 1)
|
||||
return;
|
||||
|
||||
|
|
|
@ -93,7 +93,7 @@ void climate_reset(int climate)
|
|||
_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) {
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
#include "../audio/audio.h"
|
||||
#include "../util/util.h"
|
||||
#include "../scenario.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->misc_identifier = SPRITE_MISC_CRASHED_VEHICLE_PARTICLE;
|
||||
|
||||
sprite->frame = (util_rand() & 0xFF) * 12;
|
||||
sprite->var_24 = (util_rand() & 0x7F) + 140;
|
||||
sprite->var_2E = ((util_rand() & 0xFF) * 5) >> 8;
|
||||
sprite->acceleration_x = ((sint16)(util_rand() & 0xFFFF)) * 4;
|
||||
sprite->acceleration_y = ((sint16)(util_rand() & 0xFFFF)) * 4;
|
||||
sprite->acceleration_z = (util_rand() & 0xFFFF) * 4 + 0x10000;
|
||||
sprite->frame = (scenario_rand() & 0xFF) * 12;
|
||||
sprite->var_24 = (scenario_rand() & 0x7F) + 140;
|
||||
sprite->var_2E = ((scenario_rand() & 0xFF) * 5) >> 8;
|
||||
sprite->acceleration_x = ((sint16)(scenario_rand() & 0xFFFF)) * 4;
|
||||
sprite->acceleration_y = ((sint16)(scenario_rand() & 0xFFFF)) * 4;
|
||||
sprite->acceleration_z = (scenario_rand() & 0xFFFF) * 4 + 0x10000;
|
||||
sprite->velocity_x = 0;
|
||||
sprite->velocity_y = 0;
|
||||
sprite->velocity_z = 0;
|
||||
|
|
|
@ -128,8 +128,6 @@ void reset_sprite_list()
|
|||
}
|
||||
|
||||
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
|
||||
|
||||
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++)
|
||||
{
|
||||
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");
|
||||
}
|
||||
|
|
|
@ -395,7 +395,6 @@ extern uint16 *gSpriteSpatialIndex;
|
|||
|
||||
rct_sprite *create_sprite(uint8 bl);
|
||||
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 sprite_clear_all_unused();
|
||||
void move_sprite_to_list(rct_sprite *sprite, uint8 cl);
|
||||
|
|
Loading…
Reference in New Issue