diff --git a/projects/libs/libs.vcxproj b/projects/libs/libs.vcxproj index 31b60a3810..78a6c82be8 100644 --- a/projects/libs/libs.vcxproj +++ b/projects/libs/libs.vcxproj @@ -84,7 +84,8 @@ libcurl.lib;Ws2_32.lib;%(AdditionalDependencies) - $(ProjectDir)..\..\VSgetLibs.bat + + diff --git a/projects/openrct2.vcxproj b/projects/openrct2.vcxproj index c6e6b7be9a..0156e72513 100644 --- a/projects/openrct2.vcxproj +++ b/projects/openrct2.vcxproj @@ -37,6 +37,7 @@ + @@ -141,6 +142,10 @@ + + + + @@ -167,6 +172,7 @@ + diff --git a/projects/openrct2.vcxproj.filters b/projects/openrct2.vcxproj.filters index 14ac58a7a3..a62688e2ec 100644 --- a/projects/openrct2.vcxproj.filters +++ b/projects/openrct2.vcxproj.filters @@ -450,6 +450,12 @@ Source\Network + + Source\Windows + + + Source\Interface + @@ -662,5 +668,8 @@ Source\Network + + Source\Interface + \ No newline at end of file diff --git a/src/config.h b/src/config.h index bdd3c363e9..9d17b59eec 100644 --- a/src/config.h +++ b/src/config.h @@ -174,6 +174,10 @@ typedef struct { uint8 enable_news; } twitch_configuration; +typedef struct { + uint8 window_palettes[][6]; +} colour_schemes_configuration; + typedef struct { uint8 key; uint8 modifier; @@ -184,6 +188,7 @@ extern interface_configuration gConfigInterface; extern sound_configuration gConfigSound; extern cheat_configuration gConfigCheat; extern twitch_configuration gConfigTwitch; +extern colour_schemes_configuration gConfigColourSchemes; extern uint16 gShortcutKeys[SHORTCUT_COUNT]; diff --git a/src/interface/colour_schemes.c b/src/interface/colour_schemes.c new file mode 100644 index 0000000000..d0b25da6fd --- /dev/null +++ b/src/interface/colour_schemes.c @@ -0,0 +1,31 @@ +/***************************************************************************** +* Copyright (c) 2014 Ted John, Peter Hill +* OpenRCT2, an open source clone of Roller Coaster Tycoon 2. +* +* This file is part of OpenRCT2. +* +* OpenRCT2 is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. + +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. + +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "../config.h" +#include "window.h" +#include "colour_schemes.h" + + +window_colour_scheme gColorSchemes[] = { + { WC_TOP_TOOLBAR, { 7, 12, 24, 1, 0, 0 }, 4 }, + { WC_BOTTOM_TOOLBAR, { 140, 140, 0, 0, 0, 0 }, 3 }, + + +}; diff --git a/src/interface/colour_schemes.h b/src/interface/colour_schemes.h new file mode 100644 index 0000000000..d29a6f101d --- /dev/null +++ b/src/interface/colour_schemes.h @@ -0,0 +1,38 @@ +/***************************************************************************** +* Copyright (c) 2014 Ted John, Peter Hill, Duncan Frost +* OpenRCT2, an open source clone of Roller Coaster Tycoon 2. +* +* This file is part of OpenRCT2. +* +* OpenRCT2 is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. + +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. + +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#ifndef _COLOUR_SCHEMES_H_ +#define _COLOUR_SCHEMES_H_ + +#include "../common.h" +#include "window.h" + +typedef struct { + rct_windowclass classification; + uint8 colours[6]; + uint8 num_colours; +} window_colour_scheme; + +extern window_colour_scheme gColorSchemes[] = { + {WC_} +} + + +#endif \ No newline at end of file diff --git a/src/interface/console.c b/src/interface/console.c index 4dafd92d12..3cf75636bb 100644 --- a/src/interface/console.c +++ b/src/interface/console.c @@ -780,7 +780,10 @@ static int cc_open(const char **argv, int argc) { window_editor_inventions_list_open(); } else if (strcmp(argv[0], "options") == 0) { window_options_open(); - } else { + } else if (strcmp(argv[0], "window_palettes") == 0) { + window_window_palettes_open(); + } + else { console_writeline_error("Invalid window."); } } @@ -827,7 +830,8 @@ char* console_variable_table[] = { char* console_window_table[] = { "object_selection", "inventions_list", - "options" + "options", + "window_palettes" }; console_command console_command_table[] = { diff --git a/src/interface/window.h b/src/interface/window.h index 617412338c..bf9007b382 100644 --- a/src/interface/window.h +++ b/src/interface/window.h @@ -404,7 +404,8 @@ enum { WC_LOADSAVE = 115, WC_LOADSAVE_OVERWRITE_PROMPT = 116, WC_TITLE_OPTIONS = 117, - WC_LAND_RIGHTS = 118 + WC_LAND_RIGHTS = 118, + WC_COLOUR_SCHEMES = 119, } WINDOW_CLASS; enum PROMPT_MODE { @@ -560,6 +561,7 @@ void window_music_credits_open(); void window_publisher_credits_open(); void window_track_manage_open(); void window_viewport_open(); +void window_window_palettes_open(); void window_text_input_open(rct_window* call_w, int call_widget, rct_string_id title, rct_string_id description, rct_string_id existing_text, uint32 existing_args, int maxLength); void window_text_input_raw_open(rct_window* call_w, int call_widget, rct_string_id title, rct_string_id description, utf8string existing_text, int maxLength); rct_window *window_mapgen_open(); diff --git a/src/windows/colour_schemes.c b/src/windows/colour_schemes.c new file mode 100644 index 0000000000..b8ee454ec5 --- /dev/null +++ b/src/windows/colour_schemes.c @@ -0,0 +1,439 @@ +/***************************************************************************** +* Copyright (c) 2014 Maciek Baron, Dániel Tar +* OpenRCT2, an open source clone of Roller Coaster Tycoon 2. +* +* This file is part of OpenRCT2. +* +* OpenRCT2 is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. + +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. + +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*****************************************************************************/ + +#include "../addresses.h" +#include "../config.h" +#include "../game.h" +#include "../drawing/drawing.h" +#include "../input.h" +#include "../interface/viewport.h" +#include "../interface/widget.h" +#include "../interface/window.h" +#include "../localisation/localisation.h" +#include "../peep/peep.h" +#include "../peep/staff.h" +#include "../world/sprite.h" +#include "dropdown.h" + +enum { + WINDOW_COLOUR_SCHEMES_TAB_WINDOWS, + WINDOW_COLOUR_SCHEMES_TAB_PRESETS, +} WINDOW_COLOUR_SCHEMES_TAB; + +static void window_colour_schemes_emptysub() { } +static void window_colour_schemes_close(); +static void window_colour_schemes_mouseup(); +static void window_colour_schemes_resize(); +static void window_colour_schemes_mousedown(int widgetIndex, rct_window*w, rct_widget* widget); +static void window_colour_schemes_dropdown(); +static void window_colour_schemes_update(rct_window *w); +static void window_colour_schemes_scrollgetsize(); +static void window_colour_schemes_scrollmousedown(); +static void window_colour_schemes_scrollmouseover(); +static void window_colour_schemes_tooltip(); +static void window_colour_schemes_invalidate(); +static void window_colour_schemes_paint(); +static void window_colour_schemes_scrollpaint(); + +static void* window_colour_schemes_events[] = { + window_colour_schemes_close, + window_colour_schemes_mouseup, + window_colour_schemes_resize, + window_colour_schemes_mousedown, + window_colour_schemes_dropdown, + window_colour_schemes_emptysub, + window_colour_schemes_update, + window_colour_schemes_emptysub, + window_colour_schemes_emptysub, + window_colour_schemes_emptysub, + window_colour_schemes_emptysub, + window_colour_schemes_emptysub, + window_colour_schemes_emptysub, + window_colour_schemes_emptysub, + window_colour_schemes_emptysub, + window_colour_schemes_scrollgetsize, + window_colour_schemes_scrollmousedown, + window_colour_schemes_emptysub, + window_colour_schemes_scrollmouseover, + window_colour_schemes_emptysub, + window_colour_schemes_emptysub, + window_colour_schemes_emptysub, + window_colour_schemes_tooltip, + window_colour_schemes_emptysub, + window_colour_schemes_emptysub, + window_colour_schemes_invalidate, + window_colour_schemes_paint, + window_colour_schemes_scrollpaint, +}; + +enum WINDOW_STAFF_LIST_WIDGET_IDX { + WIDX_COLOUR_SCHEMES_BACKGROUND, + WIDX_COLOUR_SCHEMES_TITLE, + WIDX_COLOUR_SCHEMES_CLOSE, + WIDX_COLOUR_SCHEMES_TAB_CONTENT_PANEL, + WIDX_COLOUR_SCHEMES_WINDOWS_TAB, + WIDX_COLOUR_SCHEMES_PRESETS_TAB, + WIDX_COLOUR_SCHEMES_COLORBTN_MASK, + WIDX_COLOUR_SCHEMES_LIST, +}; + +static rct_widget window_colour_schemes_widgets[] = { + { WWT_FRAME, 0, 0, 319, 0, 269, 0x0FFFFFFFF, STR_NONE }, // panel / background + { WWT_CAPTION, 0, 1, 318, 1, 14, STR_STAFF, STR_WINDOW_TITLE_TIP }, // title bar + { WWT_CLOSEBOX, 0, 307, 317, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close button + { WWT_RESIZE, 1, 0, 319, 43, 269, 0x0FFFFFFFF, STR_NONE }, // tab content panel + { WWT_TAB, 1, 3, 33, 17, 43, 0x02000144E, STR_NONE }, // windows tab + { WWT_TAB, 1, 34, 64, 17, 43, 0x02000144E, STR_NONE }, // presets tab + { WWT_COLORBTN, 1, 0, 0, 0, 0, STR_NONE, STR_NONE }, // color button mask + { WWT_SCROLL, 1, 3, 316, 72, 266, 3, STR_NONE }, // staff list + { WIDGETS_END }, +}; + + +static uint8 _window_colors[16][6]; +static sint16 _color_index_1 = -1; +static sint8 _color_index_2 = -1; +static uint8 _selected_tab = 0; +static const uint8 _row_height = 16; +static const uint8 _button_offset_x = 110; +static const uint8 _button_offset_y = 2; + +static uint16 _window_staff_list_selected_type_count = 0; +// TODO: These are still referenced in non-decompiled code +//static int _window_staff_list_highlighted_index; +//static int _window_staff_list_selected_tab; + +void window_colour_schemes_init_vars() +{ + _selected_tab = WINDOW_COLOUR_SCHEMES_TAB_WINDOWS; +} + +void window_colour_schemes_open() +{ + rct_window* window; + + // Check if window is already open + window = window_bring_to_front_by_class(WC_COLOUR_SCHEMES); + if (window != NULL) + return; + + window = window_create_auto_pos(320, 270, (uint32*)window_colour_schemes_events, WC_COLOUR_SCHEMES, 0x0400); + window->widgets = window_colour_schemes_widgets; + window->enabled_widgets = + (1 << WIDX_COLOUR_SCHEMES_CLOSE) | + (1 << WIDX_COLOUR_SCHEMES_WINDOWS_TAB) | + (1 << WIDX_COLOUR_SCHEMES_PRESETS_TAB) | + (1 << WIDX_COLOUR_SCHEMES_COLORBTN_MASK); + + window_init_scroll_widgets(window); + window->list_information_type = 0; + _color_index_1 = -1; + _color_index_2 = -1; + window->min_width = 320; + window->min_height = 270; + window->max_width = 500; + window->max_height = 450; + window->flags |= WF_RESIZABLE; +} + +void window_colour_schemes_close() { + rct_window *w; + + window_get_register(w); +} + +static void window_colour_schemes_mouseup() +{ + short widgetIndex; + rct_window *w; + + window_widget_get_registers(w, widgetIndex); + + switch (widgetIndex) { + case WIDX_COLOUR_SCHEMES_CLOSE: + window_close(w); + break; + } +} + +static void window_colour_schemes_resize() +{ + rct_window *w; + + window_get_register(w); + + w->min_width = 320; + w->min_height = 270; + if (w->width < w->min_width) { + w->width = w->min_width; + window_invalidate(w); + } + if (w->height < w->min_height) { + w->height = w->min_height; + window_invalidate(w); + } +} + +static void window_colour_schemes_mousedown(int widgetIndex, rct_window* w, rct_widget* widget) +{ + short newSelectedTab; + + switch (widgetIndex) { + case WIDX_COLOUR_SCHEMES_WINDOWS_TAB: + case WIDX_COLOUR_SCHEMES_PRESETS_TAB: + newSelectedTab = widgetIndex - WIDX_COLOUR_SCHEMES_WINDOWS_TAB; + if (_selected_tab == newSelectedTab) + break; + _selected_tab = (uint8)newSelectedTab; + window_invalidate(w); + w->scrolls[0].v_top = 0; + break; + } + + +} + +static void window_colour_schemes_dropdown() +{ + rct_window* w; + short widgetIndex, dropdownIndex; + window_dropdown_get_registers(w, widgetIndex, dropdownIndex); + + if (widgetIndex == WIDX_COLOUR_SCHEMES_LIST && dropdownIndex != -1) { + _window_colors[_color_index_1][_color_index_2] = dropdownIndex; + window_invalidate_all(); + } + _color_index_1 = -1; + _color_index_2 = -1; +} + +void window_colour_schemes_update(rct_window *w) +{ + /*int spriteIndex; + rct_peep *peep; + + w->list_information_type++; + if (w->list_information_type >= 24) { + w->list_information_type = 0; + } + else { + widget_invalidate(w, WIDX_COLOUR_SCHEMES_WINDOWS_TAB + _selected_tab); + }*/ +} + +void window_colour_schemes_scrollgetsize() { + int spriteIndex; + rct_peep *peep; + rct_window *w; + + window_get_register(w); + + uint16 staffCount = 15; + + _window_staff_list_selected_type_count = staffCount; + + if (RCT2_GLOBAL(RCT2_ADDRESS_STAFF_HIGHLIGHTED_INDEX, short) != -1) { + RCT2_GLOBAL(RCT2_ADDRESS_STAFF_HIGHLIGHTED_INDEX, short) = -1; + window_invalidate(w); + } + + int rowHeight = 15; + + int scrollHeight = staffCount * rowHeight; + int i = scrollHeight - window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_LIST].bottom + window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_LIST].top + 21; + if (i < 0) + i = 0; + if (i < w->scrolls[0].v_top) { + w->scrolls[0].v_top = i; + window_invalidate(w); + } + + #ifdef _MSC_VER + __asm mov ecx, 420 + #else + __asm__("mov ecx, 420 "); + #endif + + #ifdef _MSC_VER + __asm mov edx, scrollHeight + #else + __asm__("mov edx, %[scrollHeight] " : [scrollHeight] "+m" (scrollHeight)); + #endif +} + +void window_colour_schemes_scrollmousedown() { + int i, spriteIndex; + short x, y, scrollIndex; + uint8 selectedTab; + rct_window *w; + rct_drawpixelinfo *dpi; + + window_scrollmouse_get_registers(w, scrollIndex, x, y); + + int rowHeight = 15; + selectedTab = _selected_tab; + if (y / rowHeight < 15) { + if (x >= 110 && x < 110 + 12 * 6) { + _color_index_1 = y / rowHeight; + _color_index_2 = ((x - 110) / 12); + window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_COLORBTN_MASK].left = 110 + _color_index_2 * 12 + window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_LIST].left; + window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_COLORBTN_MASK].top = _color_index_1 * rowHeight - scrollIndex + window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_LIST].top; + window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_COLORBTN_MASK].right = window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_COLORBTN_MASK].left + 11; + window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_COLORBTN_MASK].bottom = window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_COLORBTN_MASK].top + 11; + window_dropdown_show_colour(w, &(window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_COLORBTN_MASK]), w->colours[1], _window_colors[_color_index_1][_color_index_2]); + } + } + + /*for (int i = y / rowHeight; i >= 0; i--) { + if (i == 0) { + if (x >= 110 && x < 110 + 12 * 6) { + _color_index_1 = i; + _color_index_2 = ((x - 110) / 12); + window_dropdown_show_colour(w, &(w->widgets[WIDX_COLOUR_SCHEMES_LIST]), w->colours[1], _window_colors[_color_index_1][_color_index_2]); + } + break; + } + + i--; + }*/ +} + +void window_colour_schemes_scrollmouseover() { + int i; + short x, y, scrollIndex; + rct_window *w; + + window_scrollmouse_get_registers(w, scrollIndex, x, y); + + /*i = y / 10; + if (i != RCT2_GLOBAL(RCT2_ADDRESS_STAFF_HIGHLIGHTED_INDEX, short)) { + RCT2_GLOBAL(RCT2_ADDRESS_STAFF_HIGHLIGHTED_INDEX, short) = i; + window_invalidate(w); + }*/ +} + +void window_colour_schemes_tooltip() +{ + RCT2_GLOBAL(0x013CE952, uint16) = STR_LIST; +} + +void window_colour_schemes_invalidate() +{ + rct_window *w; + + window_get_register(w); + + if (!gConfigInterface.rct1_colour_scheme) + { + w->colours[0] = 1; + w->colours[1] = 4; + w->colours[2] = 4; + } + else + { + w->colours[0] = 12; + w->colours[1] = 4; + w->colours[2] = 4; + } + + int pressed_widgets = w->pressed_widgets & 0xFFFFFFCF; + uint8 tabIndex = _selected_tab; + uint8 widgetIndex = tabIndex + 4; + + w->pressed_widgets = pressed_widgets | (1 << widgetIndex); + + if (window_find_by_class(WC_DROPDOWN) == NULL) { + _color_index_1 = -1; + _color_index_2 = -1; + } + + + window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_BACKGROUND].right = w->width - 1; + window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_BACKGROUND].bottom = w->height - 1; + window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_TAB_CONTENT_PANEL].right = w->width - 1; + window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_TAB_CONTENT_PANEL].bottom = w->height - 1; + window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_TITLE].right = w->width - 2; + window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_CLOSE].left = w->width - 2 - 0x0B; + window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_CLOSE].right = w->width - 2 - 0x0B + 0x0A; + window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_LIST].right = w->width - 4; + window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_LIST].bottom = w->height - 0x0F; +} + +void window_colour_schemes_paint() { + int i; + uint8 selectedTab; + rct_window *w; + rct_drawpixelinfo *dpi; + + window_paint_get_registers(w, dpi); + + // Widgets + window_draw_widgets(w, dpi); + + selectedTab = RCT2_GLOBAL(RCT2_ADDRESS_WINDOW_STAFF_LIST_SELECTED_TAB, uint8); + + // Handymen tab image + /*i = (selectedTab == 0 ? w->list_information_type & 0x0FFFFFFFC : 0); + i += RCT2_ADDRESS(RCT2_GLOBAL(0x00982710, int), int)[0] + 1; + i |= 0x20000000; + i |= RCT2_GLOBAL(RCT2_ADDRESS_HANDYMAN_COLOUR, uint8) << 19; + gfx_draw_sprite( + dpi, + i, + (window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_WINDOWS_TAB].left + window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_WINDOWS_TAB].right) / 2 + w->x, + window_colour_schemes_widgets[WIDX_COLOUR_SCHEMES_WINDOWS_TAB].bottom - 6 + w->y, 0 + );*/ + +} + +/** +* +* rct2: 0x006BD785 +*/ +void window_colour_schemes_scrollpaint() +{ + int spriteIndex, y; + uint8 selectedTab; + rct_window *w; + rct_drawpixelinfo *dpi; + + window_paint_get_registers(w, dpi); + + gfx_fill_rect(dpi, dpi->x, dpi->y, dpi->x + dpi->width - 1, dpi->y + dpi->height - 1, ((char*)0x0141FC48)[w->colours[1] * 8]); + int rowHeight = 15; + y = 0; + selectedTab = _selected_tab; + for (int i = 0; i < 15; i++) { + if (y > dpi->y + dpi->height) { + break; + } + if (y + rowHeight >= dpi->y) { + for (int j = 0; j < 6; j++) { + uint32 image = (_window_colors[i][j] << 19) + 0x600013C3; + if (i == _color_index_1 && j == _color_index_2) { + image = (_window_colors[i][j] << 19) + 0x600013C4; + } + gfx_draw_sprite(dpi, image, 110 + 12 * j, y - 1, 0); + } + } + + y += rowHeight; + } +} diff --git a/src/windows/staff_list.c b/src/windows/staff_list.c index d98c37ccc8..6f12c78ca3 100644 --- a/src/windows/staff_list.c +++ b/src/windows/staff_list.c @@ -104,19 +104,19 @@ enum WINDOW_STAFF_LIST_WIDGET_IDX { }; static rct_widget window_staff_list_widgets[] = { - { WWT_FRAME, 0, 0, 319, 0, 269, 0x0FFFFFFFF, STR_NONE }, // panel / background - { WWT_CAPTION, 0, 1, 318, 1, 14, STR_STAFF, STR_WINDOW_TITLE_TIP }, // title bar - { WWT_CLOSEBOX, 0, 307, 317, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close button - { WWT_RESIZE, 1, 0, 319, 43, 269, 0x0FFFFFFFF, STR_NONE }, // tab content panel - { WWT_TAB, 1, 3, 33, 17, 43, 0x02000144E, STR_STAFF_HANDYMEN_TAB_TIP }, // handymen tab - { WWT_TAB, 1, 34, 64, 17, 43, 0x02000144E, STR_STAFF_MECHANICS_TAB_TIP }, // mechanics tab - { WWT_TAB, 1, 65, 95, 17, 43, 0x02000144E, STR_STAFF_SECURITY_TAB_TIP }, // security guards tab - { WWT_TAB, 1, 96, 126, 17, 43, 0x02000144E, STR_STAFF_ENTERTAINERS_TAB_TIP }, // entertainers tab - { WWT_SCROLL, 1, 3, 316, 72, 266, 3, STR_NONE }, // staff list - { WWT_COLORBTN, 1, 130, 141, 58, 69, STR_NONE, STR_UNIFORM_COLOUR_TIP }, // uniform color picker - { WWT_DROPDOWN_BUTTON, 0, 165, 309, 17, 29, STR_NONE, STR_HIRE_STAFF_TIP }, // hire button - { WWT_FLATBTN, 1, 267, 290, 46, 69, 5175, STR_SHOW_PATROL_AREA_TIP }, // show staff patrol area tool - { WWT_FLATBTN, 1, 291, 314, 46, 69, 5192, STR_SHOW_STAFF_ON_MAP_TIP }, // show staff on map button + { WWT_FRAME, 0, 0, 319, 0, 269, 0x0FFFFFFFF, STR_NONE }, // panel / background + { WWT_CAPTION, 0, 1, 318, 1, 14, STR_STAFF, STR_WINDOW_TITLE_TIP }, // title bar + { WWT_CLOSEBOX, 0, 307, 317, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close button + { WWT_RESIZE, 1, 0, 319, 43, 269, 0x0FFFFFFFF, STR_NONE }, // tab content panel + { WWT_TAB, 1, 3, 33, 17, 43, 0x02000144E, STR_STAFF_HANDYMEN_TAB_TIP }, // handymen tab + { WWT_TAB, 1, 34, 64, 17, 43, 0x02000144E, STR_STAFF_MECHANICS_TAB_TIP }, // mechanics tab + { WWT_TAB, 1, 65, 95, 17, 43, 0x02000144E, STR_STAFF_SECURITY_TAB_TIP }, // security guards tab + { WWT_TAB, 1, 96, 126, 17, 43, 0x02000144E, STR_STAFF_ENTERTAINERS_TAB_TIP }, // entertainers tab + { WWT_SCROLL, 1, 3, 316, 72, 266, 3, STR_NONE }, // staff list + { WWT_COLORBTN, 1, 130, 141, 58, 69, STR_NONE, STR_UNIFORM_COLOUR_TIP }, // uniform color picker + { WWT_DROPDOWN_BUTTON, 0, 165, 309, 17, 29, STR_NONE, STR_HIRE_STAFF_TIP }, // hire button + { WWT_FLATBTN, 1, 267, 290, 46, 69, 5175, STR_SHOW_PATROL_AREA_TIP }, // show staff patrol area tool + { WWT_FLATBTN, 1, 291, 314, 46, 69, 5192, STR_SHOW_STAFF_ON_MAP_TIP }, // show staff on map button { WIDGETS_END }, };