From b40844c6341ee0be643919ac308050854af5a32e Mon Sep 17 00:00:00 2001 From: IntelOrca Date: Wed, 10 Sep 2014 18:13:07 +0100 Subject: [PATCH] begin colour tab for ride window --- src/ride.h | 9 +- src/string_ids.h | 11 ++ src/window_ride.c | 284 +++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 293 insertions(+), 11 deletions(-) diff --git a/src/ride.h b/src/ride.h index 80239a1067..65945b96e3 100644 --- a/src/ride.h +++ b/src/ride.h @@ -106,9 +106,9 @@ typedef struct { uint8 pad_0E0[0x4]; sint32 length[4]; // 0x0E4 uint16 time[4]; // 0x0F4 - fixed16_2dp maxPositiveVerticalGs; // 0x0FC - fixed16_2dp maxNegativeVerticalGs; // 0x0FE - fixed16_2dp maxLateralGs; // 0x100 + fixed16_2dp max_positive_vertical_g; // 0x0FC + fixed16_2dp max_negative_vertical_g; // 0x0FE + fixed16_2dp max_lateral_g; // 0x100 uint8 pad_102[0x12]; uint8 inversions; // 0x114 (???X XXXX) holes for mini golf uint8 drops; // 0x115 (??XX XXXX) @@ -176,9 +176,6 @@ typedef struct { uint32 lifecycle_flags; // 0x1D0 uint8 var_1D4; uint8 pad_1D5[0x1F]; - // Example value for wild mouse ride is d5 (before it's been constructed) - // I tried searching the IDA file for "1F4" but couldn't find places where - // this is written to. uint16 total_air_time; // 0x1F4 uint8 pad_1F6; uint8 num_circuits; // 0x1F7 diff --git a/src/string_ids.h b/src/string_ids.h index ef6854deaf..733c618b93 100644 --- a/src/string_ids.h +++ b/src/string_ids.h @@ -361,6 +361,13 @@ enum { STR_UNLOADING_PASSENGERS = 1127, STR_STOPPED_BY_BLOCK_BRAKES = 1128, + STR_SELECT_MAIN_COLOUR_TIP = 1136, + STR_SELECT_ADDITIONAL_COLOUR_1_TIP = 1137, + STR_SELECT_ADDITIONAL_COLOUR_2_TIP = 1138, + STR_SELECT_SUPPORT_STRUCTURE_COLOUR_TIP = 1139, + STR_SELECT_VEHICLE_COLOUR_SCHEME_TIP = 1140, + STR_SELECT_VEHICLE_TO_MODIFY_TIP = 1141, + STR_QUARTER_LOAD = 1148, STR_HALF_LOAD = 1149, STR_THREE_QUARTER_LOAD = 1150, @@ -1047,6 +1054,9 @@ enum { STR_LICENCE_AGREEMENT_NOTICE_1 = 2969, STR_LICENCE_AGREEMENT_NOTICE_2 = 2970, + STR_COLOUR_SCHEME_TO_CHANGE_TIP = 2975, + STR_PAINT_INDIVIDUAL_AREA_TIP = 2976, + STR_UNABLE_TO_LOAD_FILE = 3010, STR_FILE_CONTAINS_INVALID_DATA = 3011, @@ -1100,6 +1110,7 @@ enum { STR_SAME_PRICE_THROUGHOUT_PARK = 3071, STR_SAME_PRICE_THROUGHOUT_PARK_TIP = 3072, + STR_SELECT_STYLE_OF_ENTRANCE_EXIT_STATION_TIP = 3090, STR_SELECT_LIFT_HILL_CHAIN_SPEED_TIP = 3097, STR_SELECT_COLOUR = 3099, diff --git a/src/window_ride.c b/src/window_ride.c index 0348217aa0..fa974fd5b7 100644 --- a/src/window_ride.c +++ b/src/window_ride.c @@ -107,6 +107,27 @@ enum { WIDX_INSPECTION_INTERVAL_DROPDOWN, WIDX_LOCATE_MECHANIC, + WIDX_TRACK_PREVIEW = 14, + WIDX_TRACK_COLOUR_SCHEME, + WIDX_TRACK_COLOUR_SCHEME_DROPDOWN, + WIDX_TRACK_MAIN_COLOUR, + WIDX_TRACK_ADDITIONAL_COLOUR, + WIDX_TRACK_SUPPORT_COLOUR, + WIDX_COLOUR_20, + WIDX_COLOUR_21, + WIDX_PAINT_INDIVIDUAL_AREA, + WIDX_ENTRANCE_PREVIEW, + WIDX_STATION_STYLE, + WIDX_STATION_STYLE_DROPDOWN, + WIDX_VEHICLE_PREVIEW, + WIDX_VEHICLE_COLOUR_SCHEME, + WIDX_VEHICLE_COLOUR_SCHEME_DROPDOWN, + WIDX_VEHICLE_COLOUR_INDEX, + WIDX_VEHICLE_COLOUR_INDEX_DROPDOWN, + WIDX_VEHICLE_MAIN_COLOUR, + WIDX_VEHICLE_ADDITIONAL_COLOUR_1, + WIDX_VEHICLE_ADDITIONAL_COLOUR_2, + WIDX_PLAY_MUSIC = 14, WIDX_MUSIC, WIDX_MUSIC_DROPDOWN, @@ -232,6 +253,46 @@ static rct_widget window_ride_maintenance_widgets[] = { { WIDGETS_END }, }; +// 0x009AE2A4 +static rct_widget window_ride_colour_widgets[] = { + { WWT_FRAME, 0, 0, 315, 0, 206, 0x0FFFFFFFF, STR_NONE }, + { WWT_CAPTION, 0, 1, 314, 1, 14, 0x3DD, STR_WINDOW_TITLE_TIP }, + { WWT_CLOSEBOX, 0, 303, 313, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, + { WWT_RESIZE, 1, 0, 315, 43, 179, 0x0FFFFFFFF, STR_NONE }, + { WWT_TAB, 1, 3, 33, 17, 43, 0x2000144E, STR_VIEW_OF_RIDE_ATTRACTION_TIP }, + { WWT_TAB, 1, 34, 64, 17, 46, 0x2000144E, STR_VEHICLE_DETAILS_AND_OPTIONS_TIP }, + { WWT_TAB, 1, 65, 95, 17, 43, 0x2000144E, STR_OPERATING_OPTIONS_TIP }, + { WWT_TAB, 1, 96, 126, 17, 43, 0x2000144E, STR_MAINTENANCE_OPTIONS_TIP }, + { WWT_TAB, 1, 127, 157, 17, 43, 0x2000144E, STR_COLOUR_SCHEME_OPTIONS_TIP }, + { WWT_TAB, 1, 158, 188, 17, 43, 0x2000144E, STR_SOUND_AND_MUSIC_OPTIONS_TIP }, + { WWT_TAB, 1, 189, 219, 17, 43, 0x2000144E, STR_MEASUREMENTS_AND_TEST_DATA_TIP }, + { WWT_TAB, 1, 220, 250, 17, 43, 0x2000144E, STR_GRAPHS_TIP }, + { WWT_TAB, 1, 251, 281, 17, 43, 0x2000144E, STR_INCOME_AND_COSTS_TIP }, + { WWT_TAB, 1, 282, 312, 17, 43, 0x2000144E, STR_CUSTOMER_INFORMATION_TIP }, + + { WWT_SPINNER, 1, 3, 70, 47, 93, 0xFFFFFFFF, STR_NONE }, + { WWT_DROPDOWN, 1, 74, 312, 49, 60, 872, STR_NONE }, + { WWT_DROPDOWN_BUTTON, 1, 301, 311, 50, 59, 876, STR_COLOUR_SCHEME_TO_CHANGE_TIP }, + { WWT_COLORBTN, 1, 79, 90, 74, 85, 0xFFFFFFFF, STR_SELECT_MAIN_COLOUR_TIP }, + { WWT_COLORBTN, 1, 99, 110, 74, 85, 0xFFFFFFFF, STR_SELECT_ADDITIONAL_COLOUR_1_TIP }, + { WWT_COLORBTN, 1, 119, 130, 74, 85, 0xFFFFFFFF, STR_SELECT_SUPPORT_STRUCTURE_COLOUR_TIP }, + { WWT_DROPDOWN, 1, 74, 312, 49, 60, 0xFFFFFFFF, STR_NONE }, + { WWT_DROPDOWN_BUTTON, 1, 301, 311, 50, 59, 876, STR_NONE }, + { WWT_FLATBTN, 1, 289, 312, 68, 91, 5173, STR_PAINT_INDIVIDUAL_AREA_TIP }, + { WWT_SPINNER, 1, 245, 312, 101, 147, 0xFFFFFFFF, STR_NONE }, + { WWT_DROPDOWN, 1, 3, 241, 103, 114, 0, STR_NONE }, + { WWT_DROPDOWN_BUTTON, 1, 230, 240, 104, 113, 876, STR_SELECT_STYLE_OF_ENTRANCE_EXIT_STATION_TIP }, + { WWT_SCROLL, 1, 3, 70, 157, 203, 0, STR_NONE }, + { WWT_DROPDOWN, 1, 74, 312, 157, 168, 868, STR_NONE }, + { WWT_DROPDOWN_BUTTON, 1, 301, 311, 158, 167, 876, STR_SELECT_VEHICLE_COLOUR_SCHEME_TIP }, + { WWT_DROPDOWN, 1, 74, 312, 173, 184, 0xFFFFFFFF, STR_NONE }, + { WWT_DROPDOWN_BUTTON, 1, 301, 311, 174, 183, 876, STR_SELECT_VEHICLE_TO_MODIFY_TIP }, + { WWT_COLORBTN, 1, 79, 90, 190, 201, 0xFFFFFFFF, STR_SELECT_MAIN_COLOUR_TIP }, + { WWT_COLORBTN, 1, 99, 110, 190, 201, 0xFFFFFFFF, STR_SELECT_ADDITIONAL_COLOUR_1_TIP }, + { WWT_COLORBTN, 1, 119, 130, 190, 201, 0xFFFFFFFF, STR_SELECT_ADDITIONAL_COLOUR_2_TIP }, + { WIDGETS_END }, +}; + // 0x009AE4C8 static rct_widget window_ride_music_widgets[] = { { WWT_FRAME, 0, 0, 315, 0, 206, 0x0FFFFFFFF, STR_NONE }, @@ -338,7 +399,7 @@ static rct_widget *window_ride_page_widgets[] = { (rct_widget*)0x009ADDA8, window_ride_operating_widgets, window_ride_maintenance_widgets, - (rct_widget*)0x009AE2A4, + window_ride_colour_widgets, window_ride_music_widgets, window_ride_measurements_widgets, (rct_widget*)0x009AE710, @@ -391,6 +452,19 @@ static void window_ride_maintenance_update(rct_window *w); static void window_ride_maintenance_invalidate(); static void window_ride_maintenance_paint(); +static void window_ride_colour_close(); +static void window_ride_colour_mouseup(); +static void window_ride_colour_resize(); +static void window_ride_colour_mousedown(int widgetIndex, rct_window *w, rct_widget *widget); +static void window_ride_colour_dropdown(); +static void window_ride_colour_update(rct_window *w); +static void window_ride_colour_toolupdate(); +static void window_ride_colour_tooldown(); +static void window_ride_colour_tooldrag(); +static void window_ride_colour_invalidate(); +static void window_ride_colour_paint(); +static void window_ride_colour_scrollpaint(); + static void window_ride_music_mouseup(); static void window_ride_music_resize(); static void window_ride_music_mousedown(int widgetIndex, rct_window *w, rct_widget *widget); @@ -519,6 +593,38 @@ static void* window_ride_maintenance_events[] = { window_ride_emptysub }; +// 0x0098E044 +static void* window_ride_colour_events[] = { + window_ride_colour_close, + window_ride_colour_mouseup, + window_ride_colour_resize, + window_ride_colour_mousedown, + window_ride_colour_dropdown, + window_ride_emptysub, + window_ride_colour_update, + window_ride_emptysub, + window_ride_emptysub, + window_ride_colour_toolupdate, + window_ride_colour_tooldown, + window_ride_colour_tooldrag, + window_ride_emptysub, + window_ride_emptysub, + window_ride_emptysub, + window_ride_emptysub, + window_ride_emptysub, + window_ride_emptysub, + window_ride_emptysub, + window_ride_emptysub, + window_ride_emptysub, + window_ride_emptysub, + window_ride_emptysub, + window_ride_emptysub, + window_ride_emptysub, + window_ride_colour_invalidate, + window_ride_colour_paint, + window_ride_colour_scrollpaint +}; + // 0x0098E194 static void* window_ride_music_events[] = { window_ride_emptysub, @@ -652,7 +758,7 @@ static uint32* window_ride_page_events[] = { (uint32*)0x0098E204, (uint32*)window_ride_operating_events, (uint32*)window_ride_maintenance_events, - (uint32*)0x0098E044, + (uint32*)window_ride_colour_events, (uint32*)window_ride_music_events, (uint32*)window_ride_measurements_events, (uint32*)0x0098DF64, @@ -2543,6 +2649,174 @@ static void window_ride_maintenance_paint() #pragma endregion +#pragma region Colour + +/** + * + * rct2: 0x006B04FA + */ +static void window_ride_colour_close() +{ + rct_window *w; + + window_get_register(w); + + if (!(RCT2_GLOBAL(0x009DE518, uint32) & (1 << 3))) + return; + + if (RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WINDOWCLASS, rct_windowclass) != w->classification) + return; + + if (RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WINDOWNUMBER, rct_windownumber) != w->number) + return; + + tool_cancel(); +} + +/** + * + * rct2: 0x006B02A1 + */ +static void window_ride_colour_mouseup() +{ + short widgetIndex; + rct_window *w; + + window_widget_get_registers(w, widgetIndex); + + switch (widgetIndex) { + case WIDX_CLOSE: + window_close(w); + break; + case WIDX_TAB_1: + case WIDX_TAB_2: + case WIDX_TAB_3: + case WIDX_TAB_4: + case WIDX_TAB_5: + case WIDX_TAB_6: + case WIDX_TAB_7: + case WIDX_TAB_8: + case WIDX_TAB_9: + case WIDX_TAB_10: + window_ride_set_page(w, widgetIndex - WIDX_TAB_1); + break; + case WIDX_PAINT_INDIVIDUAL_AREA: + tool_set(w, WIDX_PAINT_INDIVIDUAL_AREA, 23); + break; + } +} + +/** + * + * rct2: 0x006B0AB6 + */ +static void window_ride_colour_resize() +{ + rct_window *w; + + window_get_register(w); + + window_set_resize(w, 316, 207, 316, 207); +} + +/** + * + * rct2: 0x006B02C6 + */ +static void window_ride_colour_mousedown(int widgetIndex, rct_window *w, rct_widget *widget) { } + +/** + * + * rct2: 0x006B0331 + */ +static void window_ride_colour_dropdown() { } + +/** + * + * rct2: 0x006B0A8F + */ +static void window_ride_colour_update(rct_window *w) +{ + w->frame_no++; + RCT2_CALLPROC_X(w->event_handlers[WE_INVALIDATE], 0, 0, 0, 0, (int)w, 0, 0); + widget_invalidate(WC_RIDE, w->number, WIDX_TAB_5); + widget_invalidate(WC_RIDE, w->number, WIDX_VEHICLE_PREVIEW); +} + +/** + * + * rct2: 0x006B04E5 + */ +static void window_ride_colour_toolupdate() { } + +/** + * + * rct2: 0x006B04EC + */ +static void window_ride_colour_tooldown() { } + +/** + * + * rct2: 0x006B04F3 + */ +static void window_ride_colour_tooldrag() { } + +/** + * + * rct2: 0x006AFB36 + */ +static void window_ride_colour_invalidate() +{ + rct_window *w; + rct_widget *widgets; + rct_ride_type *rideEntry, **rideEntries = (rct_ride_type**)0x009ACFA4; + rct_ride *ride; + + window_get_register(w); + + widgets = window_ride_page_widgets[w->page]; + if (w->widgets != widgets) { + w->widgets = widgets; + window_init_scroll_widgets(w); + } + + window_ride_set_pressed_tab(w); + + ride = GET_RIDE(w->number); + rideEntry = rideEntries[ride->subtype]; + + RCT2_GLOBAL(0x013CE952 + 0, uint16) = ride->name; + RCT2_GLOBAL(0x013CE952 + 2, uint32) = ride->name_arguments; + + // TODO widget setup + + window_ride_anchor_border_widgets(w); + window_align_tabs(w, WIDX_TAB_1, WIDX_TAB_10); +} + +/** + * + * rct2: 0x006AFF3E + */ +static void window_ride_colour_paint() +{ + rct_window *w; + rct_drawpixelinfo *dpi; + + window_paint_get_registers(w, dpi); + + window_draw_widgets(w, dpi); + window_ride_draw_tab_images(dpi, w); +} + +/** + * + * rct2: 0x006B0192 + */ +static void window_ride_colour_scrollpaint() { } + +#pragma endregion + #pragma region Music const uint8 MusicStyleOrder[] = { @@ -3155,21 +3429,21 @@ static void window_ride_measurements_paint() if (RCT2_GLOBAL(0x0097CF40 + (ride->type * 8), uint32) & 0x80) { // Max. positive vertical G's - maxPositiveVerticalGs = ride->maxPositiveVerticalGs; + maxPositiveVerticalGs = ride->max_positive_vertical_g; stringId = maxPositiveVerticalGs >= FIXED_2DP(5,00) ? STR_MAX_POSITIVE_VERTICAL_G_RED : STR_MAX_POSITIVE_VERTICAL_G; gfx_draw_string_left(dpi, stringId, &maxPositiveVerticalGs, 0, x, y); y += 10; // Max. negative vertical G's - maxNegativeVerticalGs = ride->maxNegativeVerticalGs; + maxNegativeVerticalGs = ride->max_negative_vertical_g; stringId = maxNegativeVerticalGs <= -FIXED_2DP(2,00) ? STR_MAX_NEGATIVE_VERTICAL_G_RED : STR_MAX_NEGATIVE_VERTICAL_G; gfx_draw_string_left(dpi, stringId, &maxNegativeVerticalGs, 0, x, y); y += 10; // Max lateral G's - maxLateralGs = ride->maxLateralGs; + maxLateralGs = ride->max_lateral_g; stringId = maxLateralGs >= FIXED_2DP(2,80) ? STR_MAX_LATERAL_G_RED : STR_MAX_LATERAL_G; gfx_draw_string_left(dpi, stringId, &maxLateralGs, 0, x, y);