mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-18 04:23:20 +01:00
implement more of ride window colour invalidate
This commit is contained in:
14
src/award.c
14
src/award.c
@@ -474,10 +474,12 @@ static int award_is_deserved_best_custom_designed_rides(int awardType, int activ
|
||||
}
|
||||
|
||||
/** At least 5 colourful rides and more than half of the rides are colourful. */
|
||||
const uint8 dazzling_ride_colours[] = { 5, 14, 20, 30 };
|
||||
static int award_is_deserved_most_dazzling_ride_colours(int awardType, int activeAwardTypes)
|
||||
{
|
||||
int i, countedRides, colourfulRides;
|
||||
int i, j, countedRides, colourfulRides;
|
||||
rct_ride *ride;
|
||||
uint8 mainTrackColour;
|
||||
|
||||
if (activeAwardTypes & (1 << PARK_AWARD_MOST_DISAPPOINTING))
|
||||
return 0;
|
||||
@@ -489,8 +491,14 @@ static int award_is_deserved_most_dazzling_ride_colours(int awardType, int activ
|
||||
continue;
|
||||
|
||||
countedRides++;
|
||||
if (ride->var_1BC == 5 || ride->var_1BC == 14 || ride->var_1BC == 20 || ride->var_1BC == 30)
|
||||
colourfulRides++;
|
||||
|
||||
mainTrackColour = ride->track_colour_main[0];
|
||||
for (j = 0; j < countof(dazzling_ride_colours); j++) {
|
||||
if (mainTrackColour == dazzling_ride_colours[j]) {
|
||||
colourfulRides++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return (colourfulRides >= 5 && colourfulRides >= countedRides - colourfulRides);
|
||||
|
||||
18
src/ride.c
18
src/ride.c
@@ -568,4 +568,22 @@ int ride_can_have_multiple_circuits(rct_ride *ride)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
track_colour ride_get_track_colour(rct_ride *ride, int colourScheme)
|
||||
{
|
||||
track_colour result;
|
||||
result.main = ride->track_colour_main[colourScheme];
|
||||
result.additional = ride->track_colour_additional[colourScheme];
|
||||
result.supports = ride->track_colour_supports[colourScheme];
|
||||
return result;
|
||||
}
|
||||
|
||||
vehicle_colour ride_get_vehicle_colour(rct_ride *ride, int vehicleIndex)
|
||||
{
|
||||
vehicle_colour result;
|
||||
result.main = ride->vehicle_colours[vehicleIndex] & 0xFF;
|
||||
result.additional_1 = ride->vehicle_colours[vehicleIndex] >> 8;
|
||||
result.additional_2 = ride->vehicle_colours_extended[vehicleIndex];
|
||||
return result;
|
||||
}
|
||||
34
src/ride.h
34
src/ride.h
@@ -166,16 +166,17 @@ typedef struct {
|
||||
money32 income_per_hour; // 0x1B0
|
||||
money32 profit; // 0x1B4
|
||||
uint8 queue_time[4]; // 0x1B8
|
||||
uint8 var_1BC;
|
||||
uint8 pad_1BD[0x0B];
|
||||
uint8 music;
|
||||
uint8 pad_1C9[0x03];
|
||||
uint8 track_colour_main[4]; // 0x1BC
|
||||
uint8 track_colour_additional[4]; // 0x1C0
|
||||
uint8 track_colour_supports[4]; // 0x1C4
|
||||
uint8 music; // 0x1C8
|
||||
uint8 entrance_style; // 0x1C9
|
||||
uint8 pad_1CA[0x02];
|
||||
uint8 num_block_brakes; // 0x1CC
|
||||
uint8 lift_hill_speed; // 0x1CD
|
||||
uint16 guests_favourite; // 0x1CE
|
||||
uint32 lifecycle_flags; // 0x1D0
|
||||
uint8 var_1D4;
|
||||
uint8 pad_1D5[0x1F];
|
||||
uint8 vehicle_colours_extended[32]; // 0x1D4
|
||||
uint16 total_air_time; // 0x1F4
|
||||
uint8 pad_1F6;
|
||||
uint8 num_circuits; // 0x1F7
|
||||
@@ -440,6 +441,25 @@ enum {
|
||||
RIDE_DEPART_WAIT_FOR_MAXIMUM_LENGTH = 1 << 7
|
||||
};
|
||||
|
||||
enum {
|
||||
RIDE_COLOUR_SCHEME_MAIN,
|
||||
RIDE_COLOUR_SCHEME_ADDITIONAL_1,
|
||||
RIDE_COLOUR_SCHEME_ADDITIONAL_2,
|
||||
RIDE_COLOUR_SCHEME_ADDITIONAL_3
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
uint8 main;
|
||||
uint8 additional;
|
||||
uint8 supports;
|
||||
} track_colour;
|
||||
|
||||
typedef struct {
|
||||
uint8 main;
|
||||
uint8 additional_1;
|
||||
uint8 additional_2;
|
||||
} vehicle_colour;
|
||||
|
||||
#define MAX_RIDES 255
|
||||
|
||||
#define MAX_RIDE_MEASUREMENTS 8
|
||||
@@ -479,5 +499,7 @@ void ride_get_status(int rideIndex, int *formatSecondary, int *argument);
|
||||
rct_peep *ride_get_assigned_mechanic(rct_ride *ride);
|
||||
int ride_get_total_length(rct_ride *ride);
|
||||
int ride_can_have_multiple_circuits(rct_ride *ride);
|
||||
track_colour ride_get_track_colour(rct_ride *ride, int colourScheme);
|
||||
vehicle_colour ride_get_vehicle_colour(rct_ride *ride, int vehicleIndex);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -725,6 +725,11 @@ enum {
|
||||
|
||||
STR_ON_RIDE_PHOTO_PRICE = 1963,
|
||||
|
||||
STR_MAIN_COLOUR_SCHEME = 2971,
|
||||
STR_ALTERNATIVE_COLOUR_SCHEME_1 = 2972,
|
||||
STR_ALTERNATIVE_COLOUR_SCHEME_2 = 2973,
|
||||
STR_ALTERNATIVE_COLOUR_SCHEME_3 = 2974,
|
||||
|
||||
STR_ITEM_START = 1988,
|
||||
STR_ITEM_SINGULAR_START = 2044,
|
||||
STR_ITEM2_START = 2090,
|
||||
@@ -1101,6 +1106,11 @@ enum {
|
||||
STR_TRANSLUCENT = 3056,
|
||||
STR_CONSTRUCTION_MARKER = 3057,
|
||||
|
||||
STR_BRICK_WALLS = 3058,
|
||||
STR_HEDGES = 3059,
|
||||
STR_ICE_BLOCKS = 3060,
|
||||
STR_WOODEN_FENCES = 3061,
|
||||
|
||||
STR_BEGINNER_PARKS = 3064,
|
||||
STR_CHALLENGING_PARKS = STR_BEGINNER_PARKS + 1,
|
||||
STR_EXPERT_PARKS = STR_BEGINNER_PARKS + 2,
|
||||
@@ -1110,6 +1120,19 @@ enum {
|
||||
STR_SAME_PRICE_THROUGHOUT_PARK = 3071,
|
||||
STR_SAME_PRICE_THROUGHOUT_PARK_TIP = 3072,
|
||||
|
||||
STR_PLAIN_ENTRANCE = 3078,
|
||||
STR_WOODEN_ENTRANCE = 3079,
|
||||
STR_CANVAS_TENT_ENTRANCE = 3080,
|
||||
STR_CASTLE_ENTRANCE_GREY = 3081,
|
||||
STR_CASTLE_ENTRANCE_BROWN = 3082,
|
||||
STR_JUNGLE_ENTRANCE = 3083,
|
||||
STR_LOG_CABIN_ENTRANCE = 3084,
|
||||
STR_CLASSICAL_ROMAN_ENTRANCE = 3085,
|
||||
STR_ABSTRACT_ENTRANCE = 3086,
|
||||
STR_SNOW_ICE_ENTRANCE = 3087,
|
||||
STR_PAGODA_ENTRANCE = 3088,
|
||||
STR_SPACE_ENTRANCE = 3089,
|
||||
|
||||
STR_SELECT_STYLE_OF_ENTRANCE_EXIT_STATION_TIP = 3090,
|
||||
STR_SELECT_LIFT_HILL_CHAIN_SPEED_TIP = 3097,
|
||||
|
||||
|
||||
@@ -113,12 +113,12 @@ enum {
|
||||
WIDX_TRACK_MAIN_COLOUR,
|
||||
WIDX_TRACK_ADDITIONAL_COLOUR,
|
||||
WIDX_TRACK_SUPPORT_COLOUR,
|
||||
WIDX_COLOUR_20,
|
||||
WIDX_COLOUR_21,
|
||||
WIDX_MAZE_STYLE,
|
||||
WIDX_MAZE_STYLE_DROPDOWN,
|
||||
WIDX_PAINT_INDIVIDUAL_AREA,
|
||||
WIDX_ENTRANCE_PREVIEW,
|
||||
WIDX_STATION_STYLE,
|
||||
WIDX_STATION_STYLE_DROPDOWN,
|
||||
WIDX_ENTRANCE_STYLE,
|
||||
WIDX_ENTRANCE_STYLE_DROPDOWN,
|
||||
WIDX_VEHICLE_PREVIEW,
|
||||
WIDX_VEHICLE_COLOUR_SCHEME,
|
||||
WIDX_VEHICLE_COLOUR_SCHEME_DROPDOWN,
|
||||
@@ -841,6 +841,7 @@ static void window_ride_draw_tab_vehicle(rct_drawpixelinfo *dpi, rct_window *w)
|
||||
int widgetIndex, spriteIndex, colour, x, y, width, height;
|
||||
uint8 *ebp;
|
||||
rct_ride_type *rideEntry, **rideEntries = (rct_ride_type**)0x009ACFA4;
|
||||
vehicle_colour vehicleColour;
|
||||
|
||||
widgetIndex = WIDX_TAB_1 + WINDOW_PARK_PAGE_VEHICLE;
|
||||
widget = &w->widgets[widgetIndex];
|
||||
@@ -880,8 +881,10 @@ static void window_ride_draw_tab_vehicle(rct_drawpixelinfo *dpi, rct_window *w)
|
||||
ebp = (uint8*)rideEntry + (RCT2_ADDRESS(0x00F64E38, uint8)[rideEntry->var_013] * 101);
|
||||
height += RCT2_GLOBAL(ebp + 0x24, sint8);
|
||||
|
||||
RCT2_GLOBAL(0x00F43480, uint32) = ride->var_1D4;
|
||||
colour = ((ride->vehicle_colours[0] & 0xFF00) << 16) | ((ride->vehicle_colours[0] & 0xFF) << 19);
|
||||
vehicleColour = ride_get_vehicle_colour(ride, 0);
|
||||
|
||||
RCT2_GLOBAL(0x00F43480, uint32) = vehicleColour.additional_2;
|
||||
colour = (vehicleColour.additional_1 << 24) | (vehicleColour.main << 19);
|
||||
spriteIndex = 32;
|
||||
if (w->page == WINDOW_PARK_PAGE_VEHICLE)
|
||||
spriteIndex += w->frame_no;
|
||||
@@ -2651,6 +2654,24 @@ static void window_ride_maintenance_paint()
|
||||
|
||||
#pragma region Colour
|
||||
|
||||
static uint32 window_ride_get_colour_button_image(int colour)
|
||||
{
|
||||
return 0x60000000 | (colour << 19) | 5059;
|
||||
}
|
||||
|
||||
static int window_ride_has_track_colour(rct_ride *ride, int trackColour)
|
||||
{
|
||||
uint16 unk_1 = RCT2_GLOBAL(0x00993E20 + (ride->entrance_style * 8), uint16);
|
||||
uint32 unk_2 = RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32);
|
||||
|
||||
switch (trackColour) {
|
||||
case 0: return ((unk_1 & 1) && (unk_2 & 1)) || !(unk_2 & 0x20000);
|
||||
case 1: return ((unk_1 & 2) && (unk_2 & 2)) || !(unk_2 & 0x20000);
|
||||
case 2: return unk_2 & 4;
|
||||
default: return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006B04FA
|
||||
@@ -2771,6 +2792,8 @@ static void window_ride_colour_invalidate()
|
||||
rct_widget *widgets;
|
||||
rct_ride_type *rideEntry, **rideEntries = (rct_ride_type**)0x009ACFA4;
|
||||
rct_ride *ride;
|
||||
track_colour trackColour;
|
||||
vehicle_colour vehicleColour;
|
||||
|
||||
window_get_register(w);
|
||||
|
||||
@@ -2788,7 +2811,106 @@ static void window_ride_colour_invalidate()
|
||||
RCT2_GLOBAL(0x013CE952 + 0, uint16) = ride->name;
|
||||
RCT2_GLOBAL(0x013CE952 + 2, uint32) = ride->name_arguments;
|
||||
|
||||
// TODO widget setup
|
||||
// Maze style
|
||||
if (ride->type == RIDE_TYPE_MAZE) {
|
||||
window_ride_colour_widgets[WIDX_MAZE_STYLE].type = WWT_DROPDOWN;
|
||||
window_ride_colour_widgets[WIDX_MAZE_STYLE_DROPDOWN].type = WWT_DROPDOWN_BUTTON;
|
||||
window_ride_colour_widgets[WIDX_MAZE_STYLE].image = STR_BRICK_WALLS + trackColour.supports;
|
||||
} else {
|
||||
window_ride_colour_widgets[WIDX_MAZE_STYLE].type = WWT_EMPTY;
|
||||
window_ride_colour_widgets[WIDX_MAZE_STYLE_DROPDOWN].type = WWT_EMPTY;
|
||||
}
|
||||
|
||||
// Track, multiple colour schemes
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x80000000) {
|
||||
window_ride_colour_widgets[WIDX_TRACK_COLOUR_SCHEME].type = WWT_DROPDOWN;
|
||||
window_ride_colour_widgets[WIDX_TRACK_COLOUR_SCHEME_DROPDOWN].type = WWT_DROPDOWN_BUTTON;
|
||||
window_ride_colour_widgets[WIDX_PAINT_INDIVIDUAL_AREA].type = WWT_FLATBTN;
|
||||
} else {
|
||||
window_ride_colour_widgets[WIDX_TRACK_COLOUR_SCHEME].type = WWT_EMPTY;
|
||||
window_ride_colour_widgets[WIDX_TRACK_COLOUR_SCHEME_DROPDOWN].type = WWT_EMPTY;
|
||||
window_ride_colour_widgets[WIDX_PAINT_INDIVIDUAL_AREA].type = WWT_EMPTY;
|
||||
}
|
||||
|
||||
// Track colours
|
||||
int colourScheme = *((uint16*)&w->var_494);
|
||||
trackColour = ride_get_track_colour(ride, colourScheme);
|
||||
|
||||
// Track main colour
|
||||
if (window_ride_has_track_colour(ride, 0)) {
|
||||
window_ride_colour_widgets[WIDX_TRACK_MAIN_COLOUR].type = WWT_COLORBTN;
|
||||
window_ride_colour_widgets[WIDX_TRACK_MAIN_COLOUR].image = window_ride_get_colour_button_image(trackColour.main);
|
||||
} else {
|
||||
window_ride_colour_widgets[WIDX_TRACK_MAIN_COLOUR].type = WWT_EMPTY;
|
||||
}
|
||||
|
||||
// Track additional colour
|
||||
if (window_ride_has_track_colour(ride, 1)) {
|
||||
window_ride_colour_widgets[WIDX_TRACK_ADDITIONAL_COLOUR].type = WWT_COLORBTN;
|
||||
window_ride_colour_widgets[WIDX_TRACK_ADDITIONAL_COLOUR].image = window_ride_get_colour_button_image(trackColour.additional);
|
||||
} else {
|
||||
window_ride_colour_widgets[WIDX_TRACK_ADDITIONAL_COLOUR].type = WWT_EMPTY;
|
||||
}
|
||||
|
||||
// Track supports colour
|
||||
if (window_ride_has_track_colour(ride, 2) && ride->type != RIDE_TYPE_MAZE) {
|
||||
window_ride_colour_widgets[WIDX_TRACK_SUPPORT_COLOUR].type = WWT_COLORBTN;
|
||||
window_ride_colour_widgets[WIDX_TRACK_SUPPORT_COLOUR].image = window_ride_get_colour_button_image(trackColour.supports);
|
||||
} else {
|
||||
window_ride_colour_widgets[WIDX_TRACK_SUPPORT_COLOUR].type = WWT_EMPTY;
|
||||
}
|
||||
|
||||
// Track preview
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 7)
|
||||
window_ride_colour_widgets[WIDX_TRACK_PREVIEW].type = WWT_SPINNER;
|
||||
else
|
||||
window_ride_colour_widgets[WIDX_TRACK_PREVIEW].type = WWT_EMPTY;
|
||||
|
||||
// Entrance style
|
||||
if (RCT2_GLOBAL(0x0097D4F2 + (ride->type * 8), uint16) & 0x20) {
|
||||
window_ride_colour_widgets[WIDX_ENTRANCE_PREVIEW].type = WWT_SPINNER;
|
||||
window_ride_colour_widgets[WIDX_ENTRANCE_STYLE].type = WWT_DROPDOWN;
|
||||
window_ride_colour_widgets[WIDX_ENTRANCE_STYLE_DROPDOWN].type = WWT_DROPDOWN_BUTTON;
|
||||
|
||||
window_ride_colour_widgets[WIDX_ENTRANCE_STYLE].image = STR_PLAIN_ENTRANCE + ride->entrance_style;
|
||||
} else {
|
||||
window_ride_colour_widgets[WIDX_ENTRANCE_PREVIEW].type = WWT_EMPTY;
|
||||
window_ride_colour_widgets[WIDX_ENTRANCE_STYLE].type = WWT_EMPTY;
|
||||
window_ride_colour_widgets[WIDX_ENTRANCE_STYLE_DROPDOWN].type = WWT_EMPTY;
|
||||
}
|
||||
|
||||
// Vehicle colours
|
||||
if (
|
||||
!(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x2000) &&
|
||||
(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x4000000)
|
||||
) {
|
||||
window_ride_colour_widgets[WIDX_VEHICLE_PREVIEW].type = WWT_SCROLL;
|
||||
window_ride_colour_widgets[WIDX_VEHICLE_COLOUR_SCHEME].type = WWT_DROPDOWN;
|
||||
window_ride_colour_widgets[WIDX_VEHICLE_COLOUR_SCHEME_DROPDOWN].type = WWT_DROPDOWN_BUTTON;
|
||||
window_ride_colour_widgets[WIDX_VEHICLE_MAIN_COLOUR].type = WWT_COLORBTN;
|
||||
|
||||
vehicleColour = ride_get_vehicle_colour(ride, w->var_48C);
|
||||
window_ride_colour_widgets[WIDX_VEHICLE_MAIN_COLOUR].image = window_ride_get_colour_button_image(vehicleColour.main);
|
||||
window_ride_colour_widgets[WIDX_VEHICLE_ADDITIONAL_COLOUR_1].image = window_ride_get_colour_button_image(vehicleColour.additional_1);
|
||||
window_ride_colour_widgets[WIDX_VEHICLE_ADDITIONAL_COLOUR_2].image = window_ride_get_colour_button_image(vehicleColour.additional_2);
|
||||
|
||||
RCT2_CALLPROC_X(0x006DE4CD, (ride->var_0C9 << 8) | ride->subtype, 0, 0, 0, 0, 0, 0);
|
||||
|
||||
// mov edx, 0x00F64E38
|
||||
// xor eax, eax
|
||||
// loc_6AFDEE:
|
||||
} else {
|
||||
window_ride_colour_widgets[WIDX_VEHICLE_PREVIEW].type = WWT_EMPTY;
|
||||
window_ride_colour_widgets[WIDX_VEHICLE_COLOUR_SCHEME].type = WWT_EMPTY;
|
||||
window_ride_colour_widgets[WIDX_VEHICLE_COLOUR_SCHEME_DROPDOWN].type = WWT_EMPTY;
|
||||
window_ride_colour_widgets[WIDX_VEHICLE_COLOUR_INDEX].type = WWT_EMPTY;
|
||||
window_ride_colour_widgets[WIDX_VEHICLE_COLOUR_INDEX_DROPDOWN].type = WWT_EMPTY;
|
||||
window_ride_colour_widgets[WIDX_VEHICLE_MAIN_COLOUR].type = WWT_EMPTY;
|
||||
window_ride_colour_widgets[WIDX_VEHICLE_ADDITIONAL_COLOUR_1].type = WWT_EMPTY;
|
||||
window_ride_colour_widgets[WIDX_VEHICLE_ADDITIONAL_COLOUR_2].type = WWT_EMPTY;
|
||||
}
|
||||
|
||||
RCT2_GLOBAL(0x013CE960, uint16) = STR_MAIN_COLOUR_SCHEME + colourScheme;
|
||||
|
||||
window_ride_anchor_border_widgets(w);
|
||||
window_align_tabs(w, WIDX_TAB_1, WIDX_TAB_10);
|
||||
|
||||
Reference in New Issue
Block a user