diff --git a/data/language/english_uk.txt b/data/language/english_uk.txt index b114e49fc6..ff6f0386cb 100644 --- a/data/language/english_uk.txt +++ b/data/language/english_uk.txt @@ -3854,3 +3854,35 @@ STR_5512 :Save Game As STR_5513 :(Quick) save game STR_5514 :Disable vandalism STR_5515 :{SMALLFONT}{BLACK}Stops guests from vandalising your park when they're angry +STR_5516 :{SMALLFONT}{BLACK}Black +STR_5517 :{SMALLFONT}{BLACK}Grey +STR_5518 :{SMALLFONT}{BLACK}White +STR_5519 :{SMALLFONT}{BLACK}Dark purple +STR_5520 :{SMALLFONT}{BLACK}Light purple +STR_5521 :{SMALLFONT}{BLACK}Bright purple +STR_5522 :{SMALLFONT}{BLACK}Dark blue +STR_5523 :{SMALLFONT}{BLACK}Light blue +STR_5524 :{SMALLFONT}{BLACK}Icy blue +STR_5525 :{SMALLFONT}{BLACK}Teal +STR_5526 :{SMALLFONT}{BLACK}Aquamarine +STR_5527 :{SMALLFONT}{BLACK}Saturated green +STR_5528 :{SMALLFONT}{BLACK}Dark green +STR_5529 :{SMALLFONT}{BLACK}Moss green +STR_5530 :{SMALLFONT}{BLACK}Bright green +STR_5531 :{SMALLFONT}{BLACK}Olive green +STR_5532 :{SMALLFONT}{BLACK}Dark olive green +STR_5533 :{SMALLFONT}{BLACK}Bright yellow +STR_5534 :{SMALLFONT}{BLACK}Yellow +STR_5535 :{SMALLFONT}{BLACK}Dark yellow +STR_5536 :{SMALLFONT}{BLACK}Light orange +STR_5537 :{SMALLFONT}{BLACK}Dark orange +STR_5538 :{SMALLFONT}{BLACK}Light brown +STR_5539 :{SMALLFONT}{BLACK}Saturated brown +STR_5540 :{SMALLFONT}{BLACK}Dark brown +STR_5541 :{SMALLFONT}{BLACK}Salmon pink +STR_5542 :{SMALLFONT}{BLACK}Bordeaux red +STR_5543 :{SMALLFONT}{BLACK}Saturated red +STR_5544 :{SMALLFONT}{BLACK}Bright red +STR_5545 :{SMALLFONT}{BLACK}Dark pink +STR_5546 :{SMALLFONT}{BLACK}Bright pink +STR_5547 :{SMALLFONT}{BLACK}Light pink diff --git a/src/input.c b/src/input.c index 04b0db3b39..8027c458a4 100644 --- a/src/input.c +++ b/src/input.c @@ -1197,6 +1197,12 @@ void input_state_widget_pressed(int x, int y, int state, int widgetIndex, rct_wi if (dropdown_index == -1) return; + if (gDropdownIsColour && gDropdownLastColourHover != dropdown_index) { + gDropdownLastColourHover = dropdown_index; + window_tooltip_close(); + window_tooltip_show(STR_COLOUR_NAMES_START + dropdown_index, x, y); + } + // _dropdown_unknown?? highlighted? if (dropdown_index < 32 && RCT2_GLOBAL(0x009DED34, sint32) & (1 << dropdown_index))return; @@ -1206,6 +1212,9 @@ void input_state_widget_pressed(int x, int y, int state, int widgetIndex, rct_wi // _dropdown_highlighted_index RCT2_GLOBAL(0x009DEBA2, sint16) = dropdown_index; window_invalidate_by_class(WC_DROPDOWN); + } else { + gDropdownLastColourHover = -1; + window_tooltip_close(); } } diff --git a/src/localisation/string_ids.h b/src/localisation/string_ids.h index 2dcd3b2624..069b38fc65 100644 --- a/src/localisation/string_ids.h +++ b/src/localisation/string_ids.h @@ -2076,6 +2076,8 @@ enum { STR_CHEAT_DISABLE_VANDALISM = 5514, STR_CHEAT_DISABLE_VANDALISM_TIP = 5515, + STR_COLOUR_NAMES_START = 5516, + // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working STR_COUNT = 32768 }; diff --git a/src/windows/dropdown.c b/src/windows/dropdown.c index 362ac10e7b..3d3bf54c21 100644 --- a/src/windows/dropdown.c +++ b/src/windows/dropdown.c @@ -55,6 +55,8 @@ sint64 gDropdownItemsArgs[64]; // Replaces 0x009DED38 uint32 gDropdownItemsChecked; uint32 *gDropdownItemsDisabled = RCT2_ADDRESS(0x009DED34, uint32); +bool gDropdownIsColour; +int gDropdownLastColourHover; static void window_dropdown_paint(rct_window *w, rct_drawpixelinfo *dpi); @@ -188,6 +190,7 @@ void window_dropdown_show_text_custom_width(int x, int y, int extray, uint8 colo RCT2_GLOBAL(0x009DED40, sint32) = _dropdown_item_width; RCT2_GLOBAL(0x009DED3C, sint32) = _dropdown_item_height; RCT2_GLOBAL(0x009DEBA2, sint16) = _dropdown_highlighted_index; + gDropdownIsColour = false; } /** @@ -266,6 +269,7 @@ void window_dropdown_show_image(int x, int y, int extray, uint8 colour, uint8 fl RCT2_GLOBAL(0x009DED40, sint32) = _dropdown_item_width; RCT2_GLOBAL(0x009DED3C, sint32) = _dropdown_item_height; RCT2_GLOBAL(0x009DEBA2, sint16) = _dropdown_highlighted_index; + gDropdownIsColour = false; } void window_dropdown_close() @@ -429,4 +433,6 @@ void window_dropdown_show_colour_available(rct_window *w, rct_widget *widget, ui gAppropriateImageDropdownItemsPerRow[numItems] ); + gDropdownIsColour = true; + gDropdownLastColourHover = -1; } diff --git a/src/windows/dropdown.h b/src/windows/dropdown.h index c26f140197..5f3d27ed03 100644 --- a/src/windows/dropdown.h +++ b/src/windows/dropdown.h @@ -37,6 +37,8 @@ extern uint16 gDropdownItemsFormat[64]; extern sint64 gDropdownItemsArgs[64]; extern uint32 gDropdownItemsChecked; extern uint32 *gDropdownItemsDisabled; +extern bool gDropdownIsColour; +extern int gDropdownLastColourHover; void window_dropdown_show_text(int x, int y, int extray, uint8 colour, uint8 flags, int num_items); void window_dropdown_show_text_custom_width(int x, int y, int extray, uint8 colour, uint8 flags, int num_items, int width); diff --git a/src/windows/tooltip.c b/src/windows/tooltip.c index 378f6b6e20..c723cd9332 100644 --- a/src/windows/tooltip.c +++ b/src/windows/tooltip.c @@ -79,30 +79,11 @@ void window_tooltip_reset(int x, int y) } uint8* gTooltip_text_buffer = RCT2_ADDRESS(RCT2_ADDRESS_TOOLTIP_TEXT_BUFFER, uint8); -/** - * - * rct2: 0x006EA10D - */ -void window_tooltip_open(rct_window *widgetWindow, int widgetIndex, int x, int y) + +void window_tooltip_show(rct_string_id id, int x, int y) { rct_window *w; - rct_widget *widget; int width, height; - - if (widgetWindow == NULL || widgetIndex == -1) - return; - - widget = &widgetWindow->widgets[widgetIndex]; - window_event_invalidate_call(widgetWindow); - if (widget->tooltip == 0xFFFF) - return; - - RCT2_GLOBAL(RCT2_ADDRESS_TOOLTIP_WINDOW_CLASS, rct_windowclass) = widgetWindow->classification; - RCT2_GLOBAL(RCT2_ADDRESS_TOOLTIP_WINDOW_NUMBER, rct_windownumber) = widgetWindow->number; - RCT2_GLOBAL(RCT2_ADDRESS_TOOLTIP_WIDGET_INDEX, uint16) = widgetIndex; - - if (window_event_tooltip_call(widgetWindow, widgetIndex) == (rct_string_id)STR_NONE) - return; w = window_find_by_class(WC_ERROR); if (w != NULL) @@ -111,7 +92,7 @@ void window_tooltip_open(rct_window *widgetWindow, int widgetIndex, int x, int y RCT2_GLOBAL(0x0142006C, sint32) = -1; char* buffer = RCT2_ADDRESS(RCT2_ADDRESS_COMMON_STRING_FORMAT_BUFFER, char); - format_string(buffer, widget->tooltip, (void*)0x013CE952); + format_string(buffer, id, (void*)0x013CE952); RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint16) = FONT_SPRITE_BASE_MEDIUM; int tooltip_text_width; @@ -131,7 +112,7 @@ void window_tooltip_open(rct_window *widgetWindow, int widgetIndex, int x, int y window_tooltip_widgets[WIDX_BACKGROUND].bottom = height; memcpy(gTooltip_text_buffer, buffer, 512); - + x = clamp(0, x - (width / 2), RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, uint16) - width); int max_y = RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_HEIGHT, uint16) - height; @@ -150,12 +131,38 @@ void window_tooltip_open(rct_window *widgetWindow, int widgetIndex, int x, int y &window_tooltip_events, WC_TOOLTIP, WF_TRANSPARENT | WF_STICK_TO_FRONT - ); + ); w->widgets = window_tooltip_widgets; RCT2_GLOBAL(RCT2_ADDRESS_TOOLTIP_NOT_SHOWN_TICKS, uint16) = 0; } +/** + * + * rct2: 0x006EA10D + */ +void window_tooltip_open(rct_window *widgetWindow, int widgetIndex, int x, int y) +{ + rct_widget *widget; + + if (widgetWindow == NULL || widgetIndex == -1) + return; + + widget = &widgetWindow->widgets[widgetIndex]; + window_event_invalidate_call(widgetWindow); + if (widget->tooltip == 0xFFFF) + return; + + RCT2_GLOBAL(RCT2_ADDRESS_TOOLTIP_WINDOW_CLASS, rct_windowclass) = widgetWindow->classification; + RCT2_GLOBAL(RCT2_ADDRESS_TOOLTIP_WINDOW_NUMBER, rct_windownumber) = widgetWindow->number; + RCT2_GLOBAL(RCT2_ADDRESS_TOOLTIP_WIDGET_INDEX, uint16) = widgetIndex; + + if (window_event_tooltip_call(widgetWindow, widgetIndex) == (rct_string_id)STR_NONE) + return; + + window_tooltip_show(widget->tooltip, x, y); +} + /** * * rct2: 0x006E98C6 diff --git a/src/windows/tooltip.h b/src/windows/tooltip.h index adff1c3ed6..a05e5e18b8 100644 --- a/src/windows/tooltip.h +++ b/src/windows/tooltip.h @@ -24,6 +24,7 @@ #include "../interface/window.h" void window_tooltip_reset(int x, int y); +void window_tooltip_show(rct_string_id id, int x, int y); void window_tooltip_open(rct_window *widgetWindow, int widgetIndex, int x, int y); void window_tooltip_close();