1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-15 19:13:07 +01:00

Extend dropdowns to hold up to 64 items (with bugs)

This commit is contained in:
Gymnasiast
2015-10-14 16:19:50 +02:00
parent a1cc3e4759
commit d71ca1f376
6 changed files with 21 additions and 20 deletions

View File

@@ -1126,7 +1126,7 @@ void input_state_widget_pressed(int x, int y, int state, int widgetIndex, rct_wi
if (dropdown_index == -1)goto dropdown_cleanup;
// _dropdown_unknown?? highlighted?
if (dropdown_index < 32 && RCT2_GLOBAL(0x009DED34, sint32) & (1 << 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;
@@ -1210,7 +1210,7 @@ void input_state_widget_pressed(int x, int y, int state, int widgetIndex, rct_wi
}
// _dropdown_unknown?? highlighted?
if (dropdown_index < 32 && RCT2_GLOBAL(0x009DED34, sint32) & (1 << 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;
@@ -1670,4 +1670,4 @@ static void update_cursor_position()
// write tutorial cursor position
break;
}
}
}

View File

@@ -53,8 +53,8 @@ int gDropdownNumItems;
uint16 gDropdownItemsFormat[64];
sint64 gDropdownItemsArgs[64];
// Replaces 0x009DED38
uint32 gDropdownItemsChecked;
uint32 *gDropdownItemsDisabled = RCT2_ADDRESS(0x009DED34, uint32);
uint64 gDropdownItemsChecked;
uint64 gDropdownItemsDisabled;
bool gDropdownIsColour;
int gDropdownLastColourHover;
@@ -179,7 +179,7 @@ void window_dropdown_show_text_custom_width(int x, int y, int extray, uint8 colo
// Input state
_dropdown_highlighted_index = -1;
*gDropdownItemsDisabled = 0;
gDropdownItemsDisabled = 0;
gDropdownItemsChecked = 0;
RCT2_GLOBAL(RCT2_ADDRESS_INPUT_STATE, sint8) = INPUT_STATE_DROPDOWN_ACTIVE;
@@ -258,7 +258,7 @@ void window_dropdown_show_image(int x, int y, int extray, uint8 colour, uint8 fl
// Input state
_dropdown_highlighted_index = -1;
*gDropdownItemsDisabled = 0;
gDropdownItemsDisabled = 0;
gDropdownItemsChecked = 0;
RCT2_GLOBAL(RCT2_ADDRESS_INPUT_STATE, sint8) = INPUT_STATE_DROPDOWN_ACTIVE;
@@ -329,16 +329,16 @@ static void window_dropdown_paint(rct_window *w, rct_drawpixelinfo *dpi)
);
} else {
// Text item
if (i < 32)
if (gDropdownItemsChecked & (1 << i))
if (i < 64)
if (gDropdownItemsChecked & (1ULL << i))
item++;
// Calculate colour
colour = w->colours[0] & 0x7F;
if (i == _dropdown_highlighted_index)
colour = 2;
if (*gDropdownItemsDisabled & (1 << i))
if (i < 32)
if (gDropdownItemsDisabled & (1ULL << i))
if (i < 64)
colour = (w->colours[0] & 0x7F) | 0x40;
// Draw item string

View File

@@ -35,8 +35,8 @@ extern int gAppropriateImageDropdownItemsPerRow[];
extern int gDropdownNumItems;
extern uint16 gDropdownItemsFormat[64];
extern sint64 gDropdownItemsArgs[64];
extern uint32 gDropdownItemsChecked;
extern uint32 *gDropdownItemsDisabled;
extern uint64 gDropdownItemsChecked;
extern uint64 gDropdownItemsDisabled;
extern bool gDropdownIsColour;
extern int gDropdownLastColourHover;

View File

@@ -1763,7 +1763,7 @@ static void window_ride_show_view_dropdown(rct_window *w, rct_widget *widget)
if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK)) {
j = 2;
for (i = 0; i < ride->num_vehicles; i++) {
RCT2_GLOBAL(0x009DED34, uint32) |= j;
gDropdownItemsDisabled |= j;
j <<= 1;
}
}
@@ -2336,7 +2336,8 @@ static void window_ride_vehicle_mousedown(int widgetIndex, rct_window *w, rct_wi
selectedIndex = -1;
numItems = 0;
for (; rideTypeIterator<=rideTypeIteratorMax; rideTypeIterator++) {
// Dropdowns with more items start acting weird, so cap it to 63.
for (; rideTypeIterator<=rideTypeIteratorMax && numItems<=63; rideTypeIterator++) {
if(selectionShouldBeExpanded && ride_type_has_flag(rideTypeIterator, RIDE_TYPE_FLAG_FLAT_RIDE))
continue;
@@ -2379,7 +2380,7 @@ static void window_ride_vehicle_mousedown(int widgetIndex, rct_window *w, rct_wi
widget->right - dropdownWidget->left
);
gDropdownItemsChecked = (1 << selectedIndex);
gDropdownItemsChecked = (1ULL << selectedIndex);
break;
case WIDX_VEHICLE_TRAINS_DROPDOWN:
window_dropdown_show_text_custom_width(
@@ -3421,7 +3422,7 @@ static void window_ride_maintenance_mousedown(int widgetIndex, rct_window *w, rc
}
if ((ride->lifecycle_flags & RIDE_LIFECYCLE_BREAKDOWN_PENDING) == 0) {
*gDropdownItemsDisabled = (1 << 0);
gDropdownItemsDisabled = (1 << 0);
}
}
break;
@@ -4703,7 +4704,7 @@ static void window_ride_measurements_mousedown(int widgetIndex, rct_window *w, r
);
RCT2_GLOBAL(0x009DEBA2, sint16) = 0;
if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_TRACK_DESIGNER)
RCT2_GLOBAL(0x009DED34, uint32) |= 2;
gDropdownItemsDisabled |= 2;
}
/**

View File

@@ -3175,7 +3175,7 @@ static void window_ride_construction_show_special_track_dropdown(rct_window *w,
widget->right - widget->left
);
*gDropdownItemsDisabled = RCT2_GLOBAL(0x00F4409C, uint32);
gDropdownItemsDisabled = (uint64)RCT2_GLOBAL(0x00F4409C, uint32);
}
/**

View File

@@ -538,7 +538,7 @@ void window_staff_overview_mousedown(int widgetIndex, rct_window* w, rct_widget*
// Disable clear patrol area if no area is set.
if (!(RCT2_ADDRESS(RCT2_ADDRESS_STAFF_MODE_ARRAY, uint8)[peep->staff_id] & 2)) {
RCT2_GLOBAL(0x009DED34, sint32) |= 1 << 1;
gDropdownItemsDisabled |= (1ULL << 1);
}
}