Merge pull request #12 from IntelOrca/show-vehicles-from-other-track-types

fix dropdown 64 item support and remove old RCT2 addresses
This commit is contained in:
Michael Steenbeek 2015-10-15 09:41:29 +02:00
commit eaf23f8e76
21 changed files with 182 additions and 154 deletions

View File

@ -1123,13 +1123,17 @@ void input_state_widget_pressed(int x, int y, int state, int widgetIndex, rct_wi
if (w->classification == WC_DROPDOWN) {
dropdown_index = dropdown_index_from_point(x, y, w);
if (dropdown_index == -1)goto dropdown_cleanup;
if (dropdown_index == -1) {
goto dropdown_cleanup;
}
// _dropdown_unknown?? highlighted?
if (dropdown_index < 64 && gDropdownItemsDisabled & (1ULL << dropdown_index))goto dropdown_cleanup;
if (dropdown_index < 64 && gDropdownItemsDisabled & (1ULL << dropdown_index)) {
goto dropdown_cleanup;
}
// gDropdownItemsFormat[dropdown_index] will not work until all windows that use dropdown decompiled
if (RCT2_ADDRESS(0x9DEBA4, uint16)[dropdown_index] == 0)goto dropdown_cleanup;
if (gDropdownItemsFormat[dropdown_index] == 0) {
goto dropdown_cleanup;
}
}
else {
if (cursor_w_class != w->classification || cursor_w_number != w->number || widgetIndex != cursor_widgetIndex)
@ -1209,14 +1213,15 @@ void input_state_widget_pressed(int x, int y, int state, int widgetIndex, rct_wi
window_tooltip_show(STR_COLOUR_NAMES_START + dropdown_index, x, y);
}
// _dropdown_unknown?? highlighted?
if (dropdown_index < 64 && gDropdownItemsDisabled & (1ULL << dropdown_index))return;
if (dropdown_index < 64 && gDropdownItemsDisabled & (1ULL << dropdown_index)) {
return;
}
// gDropdownItemsFormat[dropdown_index] will not work until all windows that use dropdown decompiled
if (RCT2_ADDRESS(0x9DEBA4, uint16)[dropdown_index] == 0)return;
if (gDropdownItemsFormat[dropdown_index] == 0) {
return;
}
// _dropdown_highlighted_index
RCT2_GLOBAL(0x009DEBA2, sint16) = dropdown_index;
gDropdownHighlightedIndex = dropdown_index;
window_invalidate_by_class(WC_DROPDOWN);
} else {
gDropdownLastColourHover = -1;

View File

@ -239,7 +239,7 @@ static void window_banner_mousedown(int widgetIndex, rct_window*w, rct_widget* w
13,
widget->right - widget->left - 3);
gDropdownItemsChecked = 1 << (banner->text_colour - 1);
dropdown_set_checked(banner->text_colour - 1, true);
break;
}
}

View File

@ -47,16 +47,38 @@ int _dropdown_num_columns;
int _dropdown_num_rows;
int _dropdown_item_width;
int _dropdown_item_height;
int _dropdown_highlighted_index;
int gDropdownNumItems;
uint16 gDropdownItemsFormat[64];
sint64 gDropdownItemsArgs[64];
// Replaces 0x009DED38
uint64 gDropdownItemsChecked;
uint64 gDropdownItemsDisabled;
bool gDropdownIsColour;
int gDropdownLastColourHover;
int gDropdownHighlightedIndex;
bool dropdown_is_checked(int index)
{
return gDropdownItemsChecked & (1ULL << index);
}
void dropdown_set_checked(int index, bool value)
{
if (value) {
gDropdownItemsChecked |= 1ULL << index;
} else {
gDropdownItemsChecked &= ~(1ULL << index);
}
}
void dropdown_set_disabled(int index, bool value)
{
if (value) {
gDropdownItemsDisabled |= 1ULL << index;
} else {
gDropdownItemsDisabled &= ~(1ULL << index);
}
}
static void window_dropdown_paint(rct_window *w, rct_drawpixelinfo *dpi);
@ -178,19 +200,11 @@ void window_dropdown_show_text_custom_width(int x, int y, int extray, uint8 colo
w->colours[0] = colour;
// Input state
_dropdown_highlighted_index = -1;
gDropdownHighlightedIndex = -1;
gDropdownItemsDisabled = 0;
gDropdownItemsChecked = 0;
RCT2_GLOBAL(RCT2_ADDRESS_INPUT_STATE, sint8) = INPUT_STATE_DROPDOWN_ACTIVE;
// Copy the following properties until all use of it is decompiled
RCT2_GLOBAL(0x009DEBA0, sint16) = gDropdownNumItems;
RCT2_GLOBAL(0x009DED44, sint32) = _dropdown_num_columns;
RCT2_GLOBAL(0x009DED48, sint32) = _dropdown_num_rows;
RCT2_GLOBAL(0x009DED40, sint32) = _dropdown_item_width;
RCT2_GLOBAL(0x009DED3C, sint32) = _dropdown_item_height;
RCT2_GLOBAL(0x009DEBA2, sint16) = _dropdown_highlighted_index;
gDropdownIsColour = false;
RCT2_GLOBAL(RCT2_ADDRESS_INPUT_STATE, sint8) = INPUT_STATE_DROPDOWN_ACTIVE;
}
/**
@ -257,18 +271,13 @@ void window_dropdown_show_image(int x, int y, int extray, uint8 colour, uint8 fl
w->colours[0] = colour;
// Input state
_dropdown_highlighted_index = -1;
gDropdownHighlightedIndex = -1;
gDropdownItemsDisabled = 0;
gDropdownItemsChecked = 0;
RCT2_GLOBAL(RCT2_ADDRESS_INPUT_STATE, sint8) = INPUT_STATE_DROPDOWN_ACTIVE;
// Copy the following properties until all use of it is decompiled
RCT2_GLOBAL(0x009DEBA0, sint16) = gDropdownNumItems;
RCT2_GLOBAL(0x009DED44, sint32) = _dropdown_num_columns;
RCT2_GLOBAL(0x009DED48, sint32) = _dropdown_num_rows;
RCT2_GLOBAL(0x009DED40, sint32) = _dropdown_item_width;
RCT2_GLOBAL(0x009DED3C, sint32) = _dropdown_item_height;
RCT2_GLOBAL(0x009DEBA2, sint16) = _dropdown_highlighted_index;
gDropdownHighlightedIndex = gDropdownHighlightedIndex;
gDropdownIsColour = false;
}
@ -283,7 +292,7 @@ static void window_dropdown_paint(rct_window *w, rct_drawpixelinfo *dpi)
window_draw_widgets(w, dpi);
_dropdown_highlighted_index = RCT2_GLOBAL(0x009DEBA2, sint16);
gDropdownHighlightedIndex = gDropdownHighlightedIndex;
for (int i = 0; i < gDropdownNumItems; i++) {
cell_x = i % _dropdown_num_columns;
cell_y = i / _dropdown_num_columns;
@ -306,7 +315,7 @@ static void window_dropdown_paint(rct_window *w, rct_drawpixelinfo *dpi)
}
} else {
//
if (i == _dropdown_highlighted_index) {
if (i == gDropdownHighlightedIndex) {
l = w->x + 2 + (cell_x * _dropdown_item_width);
t = w->y + 2 + (cell_y * _dropdown_item_height);
r = l + _dropdown_item_width - 1;
@ -318,7 +327,7 @@ static void window_dropdown_paint(rct_window *w, rct_drawpixelinfo *dpi)
if (item == (uint16)-1 || item == (uint16)-2) {
// Image item
image = *((uint32*)&gDropdownItemsArgs[i]);
if (item == (uint16)-2 && _dropdown_highlighted_index == i)
if (item == (uint16)-2 && gDropdownHighlightedIndex == i)
image++;
gfx_draw_sprite(
@ -329,13 +338,15 @@ static void window_dropdown_paint(rct_window *w, rct_drawpixelinfo *dpi)
);
} else {
// Text item
if (i < 64)
if (gDropdownItemsChecked & (1ULL << i))
if (i < 64) {
if (dropdown_is_checked(i)) {
item++;
}
}
// Calculate colour
colour = w->colours[0] & 0x7F;
if (i == _dropdown_highlighted_index)
if (i == gDropdownHighlightedIndex)
colour = 2;
if (gDropdownItemsDisabled & (1ULL << i))
if (i < 64)
@ -358,7 +369,8 @@ static void window_dropdown_paint(rct_window *w, rct_drawpixelinfo *dpi)
/* New function based on 6e914e
* returns -1 if index is invalid
*/
int dropdown_index_from_point(int x, int y, rct_window* w){
int dropdown_index_from_point(int x, int y, rct_window *w)
{
int top = y - w->y - 2;
if (top < 0) return -1;
@ -367,20 +379,14 @@ int dropdown_index_from_point(int x, int y, rct_window* w){
left -= 2;
if (left < 0) return -1;
// _dropdown_item_width
int column_no = left / RCT2_GLOBAL(0x009DED40, sint32);
// _dropdown_no_columns
if (column_no >= RCT2_GLOBAL(0x009DED44, sint32)) return -1;
// _dropdown_item_height
int row_no = top / RCT2_GLOBAL(0x9DED3C, uint8);
// _dropdown_no_rows
if (row_no >= RCT2_GLOBAL(0x009DED48, sint32)) return -1;
int column_no = left / _dropdown_item_width;
if (column_no >= _dropdown_num_columns) return -1;
// _dropdown_no_columns
int dropdown_index = row_no * RCT2_GLOBAL(0x009DED44, sint32) + column_no;
// _dropdown_no_items
if (dropdown_index >= RCT2_GLOBAL(0x009DEBA0, sint16)) return -1;
int row_no = top / _dropdown_item_height;
if (row_no >= _dropdown_num_rows) return -1;
int dropdown_index = row_no * _dropdown_num_columns + column_no;
if (dropdown_index >= gDropdownNumItems) return -1;
return dropdown_index;
}
@ -413,7 +419,7 @@ void window_dropdown_show_colour_available(rct_window *w, rct_widget *widget, ui
for (i = 0; i < 32; i++) {
if (availableColours & (1 << i)) {
if (selectedColour == i)
RCT2_GLOBAL(0x009DEBA2, sint16) = i;
gDropdownHighlightedIndex = i;
gDropdownItemsFormat[i] = 0xFFFE;
gDropdownItemsArgs[i] = ((uint64)i << 32) | (0x20000000 | (i << 19) | 5059);

View File

@ -39,6 +39,10 @@ extern uint64 gDropdownItemsChecked;
extern uint64 gDropdownItemsDisabled;
extern bool gDropdownIsColour;
extern int gDropdownLastColourHover;
extern int gDropdownHighlightedIndex;
void dropdown_set_checked(int index, bool value);
void dropdown_set_disabled(int index, bool value);
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);

View File

@ -496,7 +496,7 @@ static void window_editor_objective_options_show_objective_dropdown(rct_window *
objectiveType = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8);
for (i = 0; i < numItems; i++) {
if (gDropdownItemsArgs[i] - STR_OBJECTIVE_DROPDOWN_NONE == objectiveType) {
gDropdownItemsChecked = (1 << i);
dropdown_set_checked(i, true);
break;
}
}
@ -522,7 +522,7 @@ static void window_editor_objective_options_show_climate_dropdown(rct_window *w)
4,
dropdownWidget->right - dropdownWidget->left - 3
);
gDropdownItemsChecked = (1 << RCT2_GLOBAL(RCT2_ADDRESS_CLIMATE, uint8));
dropdown_set_checked(RCT2_GLOBAL(RCT2_ADDRESS_CLIMATE, uint8), true);
}
static void window_editor_objective_options_show_category_dropdown(rct_window *w)
@ -546,7 +546,7 @@ static void window_editor_objective_options_show_category_dropdown(rct_window *w
5,
dropdownWidget->right - dropdownWidget->left - 3
);
gDropdownItemsChecked = (1 << s6Info->category);
dropdown_set_checked(s6Info->category, true);
}
static void window_editor_objective_options_arg_1_increase(rct_window *w)

View File

@ -1035,7 +1035,7 @@ static void window_editor_scenario_options_park_mousedown(int widgetIndex, rct_w
dropdownWidget->right - dropdownWidget->left - 3
);
gDropdownItemsChecked = 1 << (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_PARK_FREE_ENTRY ? 0 : 1);
dropdown_set_checked((RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_PARK_FREE_ENTRY ? 0 : 1), true);
break;
}
}

View File

@ -1298,7 +1298,7 @@ static void window_finances_research_mousedown(int widgetIndex, rct_window *w, r
);
int currentResearchLevel = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_RESEARCH_LEVEL, uint8);
gDropdownItemsChecked = (1 << currentResearchLevel);
dropdown_set_checked(currentResearchLevel, true);
}
/**

View File

@ -352,7 +352,7 @@ static void window_guest_list_mousedown(int widgetIndex, rct_window*w, rct_widge
gDropdownItemsFormat[i] = 1142;
gDropdownItemsArgs[i] = STR_PAGE_1 + i;
}
gDropdownItemsChecked = (1 << _window_guest_list_selected_view);
dropdown_set_checked(_window_guest_list_selected_view, true);
break;
case WIDX_INFO_TYPE_DROPDOWN_BUTTON:
widget = &w->widgets[widgetIndex - 1];
@ -372,7 +372,7 @@ static void window_guest_list_mousedown(int widgetIndex, rct_window*w, rct_widge
widget->right - widget->left - 3
);
gDropdownItemsChecked = (1 << _window_guest_list_selected_view);
dropdown_set_checked(_window_guest_list_selected_view, true);
break;
}
}

View File

@ -222,7 +222,7 @@ static void window_land_mousedown(int widgetIndex, rct_window*w, rct_widget* wid
gDropdownItemsFormat[i] = -1;
gDropdownItemsArgs[i] = SPR_FLOOR_TEXTURE_GRASS + window_land_floor_texture_order[i];
if (window_land_floor_texture_order[i] == _selectedFloorTexture)
RCT2_GLOBAL(0x009DEBA2, sint16) = i;
gDropdownHighlightedIndex = i;
}
window_dropdown_show_image(
w->x + widget->left, w->y + widget->top,
@ -239,7 +239,7 @@ static void window_land_mousedown(int widgetIndex, rct_window*w, rct_widget* wid
gDropdownItemsFormat[i] = -1;
gDropdownItemsArgs[i] = SPR_WALL_TEXTURE_ROCK + window_land_wall_texture_order[i];
if (window_land_wall_texture_order[i] == _selectedWallTexture)
RCT2_GLOBAL(0x009DEBA2, sint16) = i;
gDropdownHighlightedIndex = i;
}
window_dropdown_show_image(
w->x + widget->left, w->y + widget->top,
@ -268,7 +268,7 @@ static void window_land_dropdown(rct_window *w, int widgetIndex, int dropdownInd
switch (widgetIndex) {
case WIDX_FLOOR:
if (dropdownIndex == -1)
dropdownIndex = RCT2_GLOBAL(0x009DEBA2, sint16);
dropdownIndex = gDropdownHighlightedIndex;
type = (dropdownIndex == -1) ?
_selectedFloorTexture :
@ -284,7 +284,7 @@ static void window_land_dropdown(rct_window *w, int widgetIndex, int dropdownInd
break;
case WIDX_WALL:
if (dropdownIndex == -1)
dropdownIndex = RCT2_GLOBAL(0x009DEBA2, sint16);
dropdownIndex = gDropdownHighlightedIndex;
type = (dropdownIndex == -1) ?
_selectedWallTexture :

View File

@ -536,7 +536,7 @@ static void window_mapgen_base_mousedown(int widgetIndex, rct_window *w, rct_wid
gDropdownItemsFormat[i] = -1;
gDropdownItemsArgs[i] = SPR_FLOOR_TEXTURE_GRASS + window_land_floor_texture_order[i];
if (window_land_floor_texture_order[i] == _floorTexture)
RCT2_GLOBAL(0x009DEBA2, sint16) = i;
gDropdownHighlightedIndex = i;
}
window_dropdown_show_image(
w->x + widget->left, w->y + widget->top,
@ -553,7 +553,7 @@ static void window_mapgen_base_mousedown(int widgetIndex, rct_window *w, rct_wid
gDropdownItemsFormat[i] = -1;
gDropdownItemsArgs[i] = SPR_WALL_TEXTURE_ROCK + window_land_wall_texture_order[i];
if (window_land_wall_texture_order[i] == _wallTexture)
RCT2_GLOBAL(0x009DEBA2, sint16) = i;
gDropdownHighlightedIndex = i;
}
window_dropdown_show_image(
w->x + widget->left, w->y + widget->top,
@ -575,7 +575,7 @@ static void window_mapgen_base_dropdown(rct_window *w, int widgetIndex, int drop
switch (widgetIndex) {
case WIDX_FLOOR_TEXTURE:
if (dropdownIndex == -1)
dropdownIndex = RCT2_GLOBAL(0x009DEBA2, sint16);
dropdownIndex = gDropdownHighlightedIndex;
type = (dropdownIndex == -1) ?
_floorTexture :
@ -591,7 +591,7 @@ static void window_mapgen_base_dropdown(rct_window *w, int widgetIndex, int drop
break;
case WIDX_WALL_TEXTURE:
if (dropdownIndex == -1)
dropdownIndex = RCT2_GLOBAL(0x009DEBA2, sint16);
dropdownIndex = gDropdownHighlightedIndex;
type = (dropdownIndex == -1) ?
_wallTexture :
@ -859,7 +859,7 @@ static void window_mapgen_simplex_mousedown(int widgetIndex, rct_window *w, rct_
gDropdownItemsFormat[i] = -1;
gDropdownItemsArgs[i] = SPR_FLOOR_TEXTURE_GRASS + window_land_floor_texture_order[i];
if (window_land_floor_texture_order[i] == _floorTexture)
RCT2_GLOBAL(0x009DEBA2, sint16) = i;
gDropdownHighlightedIndex = i;
}
window_dropdown_show_image(
w->x + widget->left, w->y + widget->top,
@ -876,7 +876,7 @@ static void window_mapgen_simplex_mousedown(int widgetIndex, rct_window *w, rct_
gDropdownItemsFormat[i] = -1;
gDropdownItemsArgs[i] = SPR_WALL_TEXTURE_ROCK + window_land_wall_texture_order[i];
if (window_land_wall_texture_order[i] == _wallTexture)
RCT2_GLOBAL(0x009DEBA2, sint16) = i;
gDropdownHighlightedIndex = i;
}
window_dropdown_show_image(
w->x + widget->left, w->y + widget->top,
@ -898,7 +898,7 @@ static void window_mapgen_simplex_dropdown(rct_window *w, int widgetIndex, int d
switch (widgetIndex) {
case WIDX_SIMPLEX_FLOOR_TEXTURE:
if (dropdownIndex == -1)
dropdownIndex = RCT2_GLOBAL(0x009DEBA2, sint16);
dropdownIndex = gDropdownHighlightedIndex;
type = (dropdownIndex == -1) ?
_floorTexture :
@ -915,7 +915,7 @@ static void window_mapgen_simplex_dropdown(rct_window *w, int widgetIndex, int d
break;
case WIDX_SIMPLEX_WALL_TEXTURE:
if (dropdownIndex == -1)
dropdownIndex = RCT2_GLOBAL(0x009DEBA2, sint16);
dropdownIndex = gDropdownHighlightedIndex;
type = (dropdownIndex == -1) ?
_wallTexture :

View File

@ -715,8 +715,9 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget*
window_options_show_dropdown(w, widget, gNumResolutions);
if (selectedResolution != -1 && selectedResolution < 32)
gDropdownItemsChecked = 1 << selectedResolution;
if (selectedResolution != -1 && selectedResolution < 32) {
dropdown_set_checked(selectedResolution, true);
}
}
break;
@ -730,7 +731,7 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget*
window_options_show_dropdown(w, widget, 3);
gDropdownItemsChecked = 1 << gConfigGeneral.fullscreen_mode;
dropdown_set_checked(gConfigGeneral.fullscreen_mode, true);
break;
case WIDX_CONSTRUCTION_MARKER_DROPDOWN:
gDropdownItemsFormat[0] = 1142;
@ -740,7 +741,7 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget*
window_options_show_dropdown(w, widget, 2);
gDropdownItemsChecked = 1 << gConfigGeneral.construction_marker_colour;
dropdown_set_checked(gConfigGeneral.construction_marker_colour, true);
break;
}
break;
@ -755,7 +756,7 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget*
window_options_show_dropdown(w, widget, 2);
gDropdownItemsChecked = gConfigGeneral.show_height_as_units ? 1 : 2;
dropdown_set_checked(gConfigGeneral.show_height_as_units ? 1 : 2, true);
break;
case WIDX_CURRENCY_DROPDOWN:
num_items = 10;
@ -767,7 +768,7 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget*
window_options_show_dropdown(w, widget, num_items);
gDropdownItemsChecked = 1 << gConfigGeneral.currency_format;
dropdown_set_checked(gConfigGeneral.currency_format, true);
break;
case WIDX_DISTANCE_DROPDOWN:
gDropdownItemsFormat[0] = 1142;
@ -777,7 +778,7 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget*
window_options_show_dropdown(w, widget, 2);
gDropdownItemsChecked = 1 << gConfigGeneral.measurement_format;
dropdown_set_checked(gConfigGeneral.measurement_format, true);
break;
case WIDX_TEMPERATURE_DROPDOWN:
gDropdownItemsFormat[0] = 1142;
@ -787,7 +788,7 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget*
window_options_show_dropdown(w, widget, 2);
gDropdownItemsChecked = 1 << gConfigGeneral.temperature_format;
dropdown_set_checked(gConfigGeneral.temperature_format, true);
break;
case WIDX_LANGUAGE_DROPDOWN:
for (i = 1; i < LANGUAGE_COUNT; i++) {
@ -795,7 +796,7 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget*
gDropdownItemsArgs[i - 1] = (sint32)LanguagesDescriptors[i].native_name;
}
window_options_show_dropdown(w, widget, LANGUAGE_COUNT - 1);
gDropdownItemsChecked = 1 << (gCurrentLanguage - 1);
dropdown_set_checked(gCurrentLanguage - 1, true);
break;
case WIDX_DATE_FORMAT_DROPDOWN:
for (i = 0; i < 4; i++) {
@ -803,7 +804,7 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget*
gDropdownItemsArgs[i] = DateFormatStringIds[i];
}
window_options_show_dropdown(w, widget, 4);
gDropdownItemsChecked = 1 << (gConfigGeneral.date_format);
dropdown_set_checked(gConfigGeneral.date_format, true);
break;
}
break;
@ -821,7 +822,7 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget*
window_options_show_dropdown(w, widget, gAudioDeviceCount);
gDropdownItemsChecked |= (1 << RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_SOUND_DEVICE, uint32));
dropdown_set_checked(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_SOUND_DEVICE, uint32), true);
break;
case WIDX_TITLE_MUSIC_DROPDOWN:
num_items = 4;
@ -836,7 +837,7 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget*
window_options_show_dropdown(w, widget, num_items);
gDropdownItemsChecked = 1 << gConfigSound.title_music;
dropdown_set_checked(gConfigSound.title_music, true);
break;
}
break;
@ -866,10 +867,11 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget*
widget->right - widget->left - 3
);
if (gCurrentTheme == 0 || gCurrentTheme == 1)
gDropdownItemsChecked = 1 << (gCurrentTheme ^ 1);
else
gDropdownItemsChecked = 1 << (gCurrentTheme);
if (gCurrentTheme == 0 || gCurrentTheme == 1) {
dropdown_set_checked(gCurrentTheme ^ 1, true);
} else {
dropdown_set_checked(gCurrentTheme, true);
}
break;
}
break;
@ -883,7 +885,7 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget*
}
window_options_show_dropdown(w, widget, AUTOSAVE_NEVER + 1);
gDropdownItemsChecked = 1 << gConfigGeneral.autosave_frequency;
dropdown_set_checked(gConfigGeneral.autosave_frequency, true);
break;
case WIDX_TITLE_SEQUENCE_DROPDOWN:
num_items = gConfigTitleSequences.num_presets;
@ -903,7 +905,7 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget*
widget->right - widget->left - 3
);
gDropdownItemsChecked = 1 << (gCurrentPreviewTitleSequence);
dropdown_set_checked(gCurrentPreviewTitleSequence, true);
break;
}
break;

View File

@ -689,11 +689,11 @@ static void window_park_entrance_mousedown(int widgetIndex, rct_window*w, rct_wi
);
if (park_is_open()) {
RCT2_GLOBAL(0x009DEBA2, sint16) = 0;
gDropdownItemsChecked |= (1 << 1);
gDropdownHighlightedIndex = 0;
dropdown_set_checked(1, true);
} else {
RCT2_GLOBAL(0x009DEBA2, sint16) = 1;
gDropdownItemsChecked |= (1 << 0);
gDropdownHighlightedIndex = 1;
dropdown_set_checked(0, true);
}
}
}
@ -706,7 +706,7 @@ static void window_park_entrance_dropdown(rct_window *w, int widgetIndex, int dr
{
if (widgetIndex == WIDX_OPEN_OR_CLOSE) {
if (dropdownIndex == -1)
dropdownIndex = RCT2_GLOBAL(0x009DEBA2, sint16);
dropdownIndex = gDropdownHighlightedIndex;
if (dropdownIndex != 0) {
RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TITLE, uint16) = 1724;

View File

@ -465,7 +465,7 @@ static void window_research_funding_mousedown(int widgetIndex, rct_window *w, rc
);
int currentResearchLevel = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_RESEARCH_LEVEL, uint8);
gDropdownItemsChecked = (1 << currentResearchLevel);
dropdown_set_checked(currentResearchLevel, true);
}
/**

View File

@ -1769,7 +1769,7 @@ static void window_ride_show_view_dropdown(rct_window *w, rct_widget *widget)
}
// Set checked item
gDropdownItemsChecked |= (1 << w->ride.view);
dropdown_set_checked(w->ride.view, true);
}
/**
@ -1844,8 +1844,8 @@ static void window_ride_show_open_dropdown(rct_window *w, rct_widget *widget)
highlightedIndex--;
}
gDropdownItemsChecked |= (1 << checkedIndex);
RCT2_GLOBAL(0x009DEBA2, sint16) = highlightedIndex;
dropdown_set_checked(checkedIndex, true);
gDropdownHighlightedIndex = highlightedIndex;
}
/**
@ -1892,7 +1892,7 @@ static void window_ride_main_dropdown(rct_window *w, int widgetIndex, int dropdo
break;
case WIDX_OPEN:
if (dropdownIndex == -1)
dropdownIndex = RCT2_GLOBAL(0x009DEBA2, sint16);
dropdownIndex = gDropdownHighlightedIndex;
ride = GET_RIDE(w->number);
if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_NO_TEST_MODE) && dropdownIndex != 0)
@ -2380,7 +2380,7 @@ static void window_ride_vehicle_mousedown(int widgetIndex, rct_window *w, rct_wi
widget->right - dropdownWidget->left
);
gDropdownItemsChecked = (1ULL << selectedIndex);
dropdown_set_checked(selectedIndex, true);
break;
case WIDX_VEHICLE_TRAINS_DROPDOWN:
window_dropdown_show_text_custom_width(
@ -2399,7 +2399,7 @@ static void window_ride_vehicle_mousedown(int widgetIndex, rct_window *w, rct_wi
gDropdownItemsArgs[i] = ((i + 1) << 16) | (i == 0 ? stringId : stringId + 1);
}
gDropdownItemsChecked = (1 << (ride->num_vehicles - 1));
dropdown_set_checked(ride->num_vehicles - 1, true);
break;
case WIDX_VEHICLE_CARS_PER_TRAIN_DROPDOWN:
minCars = (ride->min_max_cars_per_train >> 4);
@ -2425,7 +2425,7 @@ static void window_ride_vehicle_mousedown(int widgetIndex, rct_window *w, rct_wi
gDropdownItemsArgs[i] |= (cars - rideEntry->zero_cars) << 16;
}
gDropdownItemsChecked = (1 << (ride->num_cars_per_train - minCars));
dropdown_set_checked(ride->num_cars_per_train - minCars, true);
break;
}
}
@ -2820,9 +2820,11 @@ static void window_ride_mode_dropdown(rct_window *w, rct_widget *widget)
);
// Set checked item
for (i = 0; i < numAvailableModes; i++)
if (ride->mode == availableModes[i])
gDropdownItemsChecked = 1 << i;
for (i = 0; i < numAvailableModes; i++) {
if (ride->mode == availableModes[i]) {
dropdown_set_checked(i, true);
}
}
}
/**
@ -2851,7 +2853,7 @@ static void window_ride_load_dropdown(rct_window *w, rct_widget *widget)
widget->right - dropdownWidget->left
);
gDropdownItemsChecked = (1 << (ride->depart_flags & RIDE_DEPART_WAIT_FOR_LOAD_MASK));
dropdown_set_checked(ride->depart_flags & RIDE_DEPART_WAIT_FOR_LOAD_MASK, true);
}
/**
@ -3366,7 +3368,7 @@ static void window_ride_maintenance_mousedown(int widgetIndex, rct_window *w, rc
widget->right - dropdownWidget->left
);
gDropdownItemsChecked = (1 << ride->inspection_interval);
dropdown_set_checked(ride->inspection_interval, true);
break;
case WIDX_FORCE_BREAKDOWN:
@ -3411,7 +3413,7 @@ static void window_ride_maintenance_mousedown(int widgetIndex, rct_window *w, rc
continue;
}
if (i == breakdownReason) {
gDropdownItemsChecked = (1 << num_items);
dropdown_set_checked(num_items, true);
break;
}
gDropdownItemsFormat[num_items] = 1142;
@ -3813,7 +3815,7 @@ static void window_ride_colour_mousedown(int widgetIndex, rct_window *w, rct_wid
widget->right - dropdownWidget->left
);
gDropdownItemsChecked = 1 << colourSchemeIndex;
dropdown_set_checked(colourSchemeIndex, true);
break;
case WIDX_TRACK_MAIN_COLOUR:
window_dropdown_show_colour(w, widget, w->colours[1], ride->track_colour_main[colourSchemeIndex]);
@ -3840,17 +3842,18 @@ static void window_ride_colour_mousedown(int widgetIndex, rct_window *w, rct_wid
widget->right - dropdownWidget->left
);
gDropdownItemsChecked = 1 << ride->track_colour_supports[colourSchemeIndex];
dropdown_set_checked(ride->track_colour_supports[colourSchemeIndex], true);
break;
case WIDX_ENTRANCE_STYLE_DROPDOWN:
case WIDX_ENTRANCE_STYLE_DROPDOWN:
for (i = 0; i < countof(window_ride_entrance_style_list); i++) {
gDropdownItemsFormat[i] = 1142;
gDropdownItemsArgs[i] = RideEntranceDefinitions[window_ride_entrance_style_list[i]].string_id;
if (ride->entrance_style == window_ride_entrance_style_list[i])
gDropdownItemsChecked = 1 << i;
if (ride->entrance_style == window_ride_entrance_style_list[i]) {
dropdown_set_checked(i, true);
}
}
int checked = gDropdownItemsChecked;
uint64 checked = gDropdownItemsChecked;
window_dropdown_show_text_custom_width(
w->x + dropdownWidget->left,
@ -3864,7 +3867,7 @@ static void window_ride_colour_mousedown(int widgetIndex, rct_window *w, rct_wid
gDropdownItemsChecked = checked;
break;
case WIDX_VEHICLE_COLOUR_SCHEME_DROPDOWN:
case WIDX_VEHICLE_COLOUR_SCHEME_DROPDOWN:
for (i = 0; i < 3; i++) {
gDropdownItemsFormat[i] = 1142;
gDropdownItemsArgs[i] = (RideNameConvention[ride->type].vehicle_name << 16) | (STR_ALL_VEHICLES_IN_SAME_COLOURS + i);
@ -3880,7 +3883,7 @@ static void window_ride_colour_mousedown(int widgetIndex, rct_window *w, rct_wid
widget->right - dropdownWidget->left
);
gDropdownItemsChecked = 1 << (ride->colour_scheme_type & 3);
dropdown_set_checked(ride->colour_scheme_type & 3, true);
break;
case WIDX_VEHICLE_COLOUR_INDEX_DROPDOWN:
numItems = ride->num_vehicles;
@ -3903,7 +3906,7 @@ static void window_ride_colour_mousedown(int widgetIndex, rct_window *w, rct_wid
widget->right - dropdownWidget->left
);
gDropdownItemsChecked = 1 << w->var_48C;
dropdown_set_checked(w->var_48C, true);
break;
case WIDX_VEHICLE_MAIN_COLOUR:
vehicleColour = ride_get_vehicle_colour(ride, w->var_48C);
@ -4452,8 +4455,9 @@ static void window_ride_music_mousedown(int widgetIndex, rct_window *w, rct_widg
);
for (i = 0; i < numItems; i++) {
if (window_ride_current_music_style_order[i] == ride->music)
gDropdownItemsChecked = (1 << i);
if (window_ride_current_music_style_order[i] == ride->music) {
dropdown_set_checked(i, true);
}
}
}
@ -4702,7 +4706,7 @@ static void window_ride_measurements_mousedown(int widgetIndex, rct_window *w, r
0,
2
);
RCT2_GLOBAL(0x009DEBA2, sint16) = 0;
gDropdownHighlightedIndex = 0;
if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_TRACK_DESIGNER)
gDropdownItemsDisabled |= 2;
}
@ -4717,7 +4721,7 @@ static void window_ride_measurements_dropdown(rct_window *w, int widgetIndex, in
return;
if (dropdownIndex == -1)
dropdownIndex = RCT2_GLOBAL(0x009DEBA2, sint16);
dropdownIndex = gDropdownHighlightedIndex;
if (dropdownIndex == 0)
save_track_design((uint8)w->number);

View File

@ -3161,7 +3161,7 @@ static void window_ride_construction_show_special_track_dropdown(rct_window *w,
}
gDropdownItemsFormat[i] = trackPieceStringId;
if ((trackPiece | 0x100) == _currentTrackCurve) {
RCT2_GLOBAL(0x009DEBA2, sint16) = i;
gDropdownHighlightedIndex = i;
}
}

View File

@ -263,7 +263,7 @@ static void window_ride_list_mousedown(int widgetIndex, rct_window*w, rct_widget
numItems,
widget->right - widget->left - 3
);
gDropdownItemsChecked |= (1 << _window_ride_list_information_type);
dropdown_set_checked(_window_ride_list_information_type, true);
}
}

View File

@ -532,7 +532,7 @@ void window_staff_overview_mousedown(int widgetIndex, rct_window* w, rct_widget*
int y = widget->top + w->y;
int extray = widget->bottom - widget->top + 1;
window_dropdown_show_text(x, y, extray, w->colours[1], 0, 2);
RCT2_GLOBAL(0x009DEBA2, sint16) = 0;
gDropdownHighlightedIndex = 0;
rct_peep* peep = GET_PEEP(w->number);

View File

@ -552,10 +552,11 @@ static void window_themes_mousedown(int widgetIndex, rct_window* w, rct_widget*
widget->right - widget->left - 3
);
if (gCurrentTheme == 0 || gCurrentTheme == 1)
gDropdownItemsChecked = 1 << (gCurrentTheme ^ 1);
else
gDropdownItemsChecked = 1 << (gCurrentTheme);
if (gCurrentTheme == 0 || gCurrentTheme == 1) {
dropdown_set_checked(gCurrentTheme ^ 1, true);
} else {
dropdown_set_checked(gCurrentTheme, true);
}
break;
case WIDX_THEMES_RCT1_RIDE_LIGHTS:
if (gCurrentTheme >= 2) {

View File

@ -322,7 +322,7 @@ static void window_title_command_editor_mousedown(int widgetIndex, rct_window* w
widget->right - widget->left - 3
);
gDropdownItemsChecked = 1 << get_command_info_index(command.command);
dropdown_set_checked(get_command_info_index(command.command), true);
break;
case WIDX_INPUT_DROPDOWN:
if (command.command == TITLE_SCRIPT_SPEED) {
@ -342,7 +342,7 @@ static void window_title_command_editor_mousedown(int widgetIndex, rct_window* w
widget->right - widget->left - 3
);
gDropdownItemsChecked = 1 << (command.speed - 1);
dropdown_set_checked(command.speed - 1, true);
}
else if (command.command == TITLE_SCRIPT_LOAD) {
num_items = gConfigTitleSequences.presets[gCurrentTitleSequence].num_saves;
@ -361,7 +361,7 @@ static void window_title_command_editor_mousedown(int widgetIndex, rct_window* w
widget->right - widget->left - 3
);
gDropdownItemsChecked = 1 << (command.saveIndex);
dropdown_set_checked(command.saveIndex, true);
}
break;
}

View File

@ -587,7 +587,7 @@ static void window_title_editor_mousedown(int widgetIndex, rct_window* w, rct_wi
widget->right - widget->left - 3
);
gDropdownItemsChecked = 1 << (gCurrentTitleSequence);
dropdown_set_checked(gCurrentTitleSequence, true);
}
break;
}

View File

@ -411,8 +411,9 @@ static void window_top_toolbar_mousedown(int widgetIndex, rct_window*w, rct_widg
);
#ifndef DISABLE_TWITCH
if (_menuDropdownIncludesTwitch && gTwitchEnable)
gDropdownItemsChecked |= (1 << 11);
if (_menuDropdownIncludesTwitch && gTwitchEnable) {
dropdown_set_checked(11, true);
}
#endif
break;
case WIDX_CHEATS:
@ -433,12 +434,15 @@ static void window_top_toolbar_mousedown(int widgetIndex, rct_window*w, rct_widg
0,
5
);
if (gCheatsSandboxMode)
gDropdownItemsChecked |= (1 << DDIDX_ENABLE_SANDBOX_MODE);
if (gCheatsDisableClearanceChecks)
gDropdownItemsChecked |= (1 << DDIDX_DISABLE_CLEARANCE_CHECKS);
if (gCheatsDisableSupportLimits)
gDropdownItemsChecked |= (1 << DDIDX_DISABLE_SUPPORT_LIMITS);
if (gCheatsSandboxMode) {
dropdown_set_checked(DDIDX_ENABLE_SANDBOX_MODE, true);
}
if (gCheatsDisableClearanceChecks) {
dropdown_set_checked(DDIDX_DISABLE_CLEARANCE_CHECKS, true);
}
if (gCheatsDisableSupportLimits) {
dropdown_set_checked(DDIDX_DISABLE_SUPPORT_LIMITS, true);
}
RCT2_GLOBAL(0x009DEBA2, uint16) = 0;
break;
case WIDX_VIEW_MENU:
@ -2844,10 +2848,12 @@ void top_toolbar_init_fastforward_menu(rct_window* w, rct_widget* widget) {
);
// Set checkmarks
if (gGameSpeed <= 4)
gDropdownItemsChecked |= (1 << (gGameSpeed - 1));
if (gGameSpeed == 8)
gDropdownItemsChecked |= (1 << 5);
if (gGameSpeed <= 4) {
dropdown_set_checked(gGameSpeed - 1, true);
}
if (gGameSpeed == 8) {
dropdown_set_checked(5, true);
}
if (gConfigGeneral.debugging_tools)
RCT2_GLOBAL(0x9DEBA2, uint16) = (gGameSpeed == 8 ? 0 : gGameSpeed);
@ -3011,25 +3017,25 @@ void top_toolbar_init_view_menu(rct_window* w, rct_widget* widget) {
// Set checkmarks
rct_viewport* mainViewport = window_get_main()->viewport;
if (mainViewport->flags & VIEWPORT_FLAG_UNDERGROUND_INSIDE)
gDropdownItemsChecked |= (1 << 0);
dropdown_set_checked(0, true);
if (mainViewport->flags & VIEWPORT_FLAG_HIDE_BASE)
gDropdownItemsChecked |= (1 << 1);
dropdown_set_checked(1, true);
if (mainViewport->flags & VIEWPORT_FLAG_HIDE_VERTICAL)
gDropdownItemsChecked |= (1 << 2);
dropdown_set_checked(2, true);
if (mainViewport->flags & VIEWPORT_FLAG_SEETHROUGH_RIDES)
gDropdownItemsChecked |= (1 << 4);
dropdown_set_checked(4, true);
if (mainViewport->flags & VIEWPORT_FLAG_SEETHROUGH_SCENERY)
gDropdownItemsChecked |= (1 << 5);
dropdown_set_checked(5, true);
if (mainViewport->flags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)
gDropdownItemsChecked |= (1 << 6);
dropdown_set_checked(6, true);
if (mainViewport->flags & VIEWPORT_FLAG_INVISIBLE_PEEPS)
gDropdownItemsChecked |= (1 << 7);
dropdown_set_checked(7, true);
if (mainViewport->flags & VIEWPORT_FLAG_LAND_HEIGHTS)
gDropdownItemsChecked |= (1 << 9);
dropdown_set_checked(9, true);
if (mainViewport->flags & VIEWPORT_FLAG_TRACK_HEIGHTS)
gDropdownItemsChecked |= (1 << 10);
dropdown_set_checked(10, true);
if (mainViewport->flags & VIEWPORT_FLAG_PATH_HEIGHTS)
gDropdownItemsChecked |= (1 << 11);
dropdown_set_checked(11, true);
RCT2_GLOBAL(0x9DEBA2, uint16) = 0;
}