Beispiel #1
0
void window_construction_maze_close(){
	rct_window *w;

	window_get_register(w);

	sub_6C9627();
	viewport_set_visibility(0);

	map_invalidate_map_selection_tiles();
	RCT2_GLOBAL(0x9DE58A, uint16) &= 0xFFFD;

	hide_gridlines();
	
	uint8 ride_id = RCT2_GLOBAL(0xF440A7, uint8);

	rct_ride* ride = GET_RIDE(ride_id);

	if (ride->overall_view == 0xFFFF){
		int eax = RCT2_GLOBAL(0x009DEA6E, uint8);

		RCT2_GLOBAL(0x009DEA6E, uint8) = 0;
		game_do_command(0, 9, 0, ride_id, GAME_COMMAND_7, 0, 0);

		RCT2_GLOBAL(0x009DEA6E, uint8) = eax;
		return;
	}

	window_ride_main_open(ride_id);
}
Beispiel #2
0
void window_construction_close(){
	rct_window *w;

	window_get_register(w);

	sub_6C9627();
	viewport_set_visibility(0);

	map_invalidate_map_selection_tiles();
	RCT2_GLOBAL(0x9DE58A, uint16) &= 0xFFFD;

	hide_gridlines();

	int x, y;
	uint8 ride_id = RCT2_GLOBAL(0xF440A7, uint8);
	rct_map_element* map_element = sub_6CAF80(ride_id, &x, &y);

	if ((int)map_element == -1){
		int eax = RCT2_GLOBAL(0x009DEA6E, uint8);

		RCT2_GLOBAL(0x009DEA6E, uint8) = 0;
		game_do_command(0, 9, 0, ride_id, GAME_COMMAND_7, 0, 0);

		RCT2_GLOBAL(0x009DEA6E, uint8) = eax;
		return;
	}

	window_ride_main_open(ride_id);
}
Beispiel #3
0
static void window_text_input_invalidate(){
	rct_window* w;

	window_get_register(w);

	// Work out the existing size of the window
	char wrapped_string[512];
	strcpy(wrapped_string, text_input);

	int no_lines = 0, font_height = 0;

	// String length needs to add 12 either side of box
	// +13 for cursor when max length.
	gfx_wrap_string(wrapped_string, WW - (24 + 13), &no_lines, &font_height);

	int height = no_lines * 10 + WH;

	// Change window size if required.
	if (height != w->height) {
		window_invalidate(w);
		window_set_resize(w, WW, height, WW, height);
	}

	window_text_input_widgets[WIDX_OKAY].top = height - 21;
	window_text_input_widgets[WIDX_OKAY].bottom = height - 10;

	window_text_input_widgets[WIDX_CANCEL].top = height - 21;
	window_text_input_widgets[WIDX_CANCEL].bottom = height - 10;

	window_text_input_widgets[WIDX_BACKGROUND].bottom = height - 1;
}
Beispiel #4
0
static void window_staff_fire_invalidate()
{
	rct_window *w;

	window_get_register(w);
	colour_scheme_update(w);
}
Beispiel #5
0
/* rct2: 0x006BA44D */
static void window_banner_invalidate()
{
	rct_window* w;

	window_get_register(w);

	rct_banner* banner = &gBanners[w->number];
	rct_widget* colour_btn = &window_banner_widgets[WIDX_MAIN_COLOR];
	colour_btn->type = WWT_EMPTY;

	//sceneray item not sure why we use this instead of banner?
	rct_scenery_entry* sceneryEntry = g_bannerSceneryEntries[banner->var_00];

	if (sceneryEntry->banner.flags & 1) colour_btn->type = WWT_COLORBTN;
	
	w->pressed_widgets &= ~(1ULL<<WIDX_BANNER_NO_ENTRY);
	w->disabled_widgets &= ~(
		(1ULL<<WIDX_BANNER_TEXT)|
		(1ULL<<WIDX_TEXT_COLOR_DROPDOWN)|
		(1ULL<<WIDX_TEXT_COLOR_DROPDOWN_BUTTON));
	
	if (banner->flags & BANNER_FLAG_NO_ENTRY){
		w->pressed_widgets |= (1ULL<<WIDX_BANNER_NO_ENTRY);
		w->disabled_widgets |= 	
			(1ULL<<WIDX_BANNER_TEXT)|
			(1ULL<<WIDX_TEXT_COLOR_DROPDOWN)|
			(1ULL<<WIDX_TEXT_COLOR_DROPDOWN_BUTTON);
	}

	colour_btn->image = (banner->colour << 19) + 0x600013C3;

	rct_widget* drop_down_widget = &window_banner_widgets[WIDX_TEXT_COLOR_DROPDOWN];
	drop_down_widget->image = banner->text_colour + 2996;
}
static void window_ride_demolish_invalidate()
{
	rct_window *w;

	window_get_register(w);
	colour_scheme_update(w);
}
Beispiel #7
0
/**
 *
 *  rct2: 0x006A7D1C
 */
static void window_footpath_invalidate()
{
    int selectedPath;
    rct_path_type *pathType;
    rct_window *w;

    window_get_register(w);

    // Press / unpress footpath and queue type buttons
    w->pressed_widgets &= ~(1 << WIDX_FOOTPATH_TYPE);
    w->pressed_widgets &= ~(1 << WIDX_QUEUELINE_TYPE);
    w->pressed_widgets |= RCT2_GLOBAL(RCT2_ADDRESS_SELECTED_PATH_TYPE, uint8) == SELECTED_PATH_TYPE_NORMAL ?
                          (1 << WIDX_FOOTPATH_TYPE) :
                          (1 << WIDX_QUEUELINE_TYPE);

    // Enable / disable construct button
    window_footpath_widgets[WIDX_CONSTRUCT].type = RCT2_GLOBAL(RCT2_ADDRESS_PATH_CONSTRUCTION_MODE, uint8) == PATH_CONSTRUCTION_MODE_LAND ? WWT_EMPTY : WWT_IMGBTN;

    // Set footpath and queue type button images
    selectedPath = RCT2_GLOBAL(RCT2_ADDRESS_SELECTED_PATH_ID, uint16);
    pathType = RCT2_ADDRESS(RCT2_ADDRESS_PATH_TYPES, rct_path_type*)[selectedPath];

    int pathImage = 71 + pathType->image;
    window_footpath_widgets[WIDX_FOOTPATH_TYPE].image = pathImage;
    window_footpath_widgets[WIDX_QUEUELINE_TYPE].image = pathImage + 1;
    window_footpath_widgets[WIDX_QUEUELINE_TYPE].type = WWT_FLATBTN;

    // Disable queue in if in editor
    if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & 2)
        window_footpath_widgets[WIDX_QUEUELINE_TYPE].type = WWT_EMPTY;
}
/**
 * 
 *  rct2: 0x006AB199
 */
static void window_editor_object_selection_close()
{
	rct_window* w;
	window_get_register(w);

	//if (!(RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_EDITOR))
	//	return;

	RCT2_CALLPROC_EBPSAFE(0x6ABB66);
	editor_load_selected_objects();
	reset_loaded_objects();
	object_free_scenario_text();
	RCT2_CALLPROC_EBPSAFE(0x6AB316);
	if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_EDITOR) {
		research_populate_list_random();
		research_remove_non_separate_vehicle_types();
	}
	else {
		// Used for in-game object selection cheat
		research_reset_items();
		research_populate_list_researched();
		gSilentResearch = true;
		sub_684AC3();
		gSilentResearch = false;
	}
	window_new_ride_init_vars();
}
Beispiel #9
0
static void window_changelog_scrollgetsize()
{
	rct_window *w;
	int width, height;
	window_get_register(w);

	width = _changelogLongestLineWidth + 4;
	height = _changelogNumLines * 11;

	window_scrollsize_set_registers(width, height);
}
Beispiel #10
0
/**
 *
 *  rct2: 0x0068E115
 */
static void window_clear_scenery_invalidate()
{
	rct_window *w;

	window_get_register(w);

	// Set the preview image button to be pressed down
	w->pressed_widgets |= (1 << WIDX_PREVIEW);

	// Update the preview image
	window_clear_scenery_widgets[WIDX_PREVIEW].image = SPR_LAND_TOOL_SIZE_0 + RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16);
}
Beispiel #11
0
/**
 *
 *  rct2: 0x006A852F
 */
static void window_footpath_close()
{
    rct_window *w;

    window_get_register(w);

    RCT2_CALLPROC_EBPSAFE(0x006A7831);
    viewport_set_visibility(0);
    RCT2_CALLPROC_EBPSAFE(0x0068AB1B);
    RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, uint16) &= ~2;
    window_invalidate_by_id(WC_TOP_TOOLBAR, 0);
    hide_gridlines();
}
Beispiel #12
0
static void window_tile_inspector_scrollgetsize()
{

	rct_window *w;
	int width, height;
	window_get_register(w);

	height = window_tile_inspector_item_count * 11;
	width = WW - 30;

	window_scrollsize_set_registers(width, height);

}
Beispiel #13
0
static void window_tile_inspector_invalidate()
{
	rct_window *w;

	window_get_register(w);

	window_tile_inspector_widgets[WIDX_BACKGROUND].right = w->width - 1;
	window_tile_inspector_widgets[WIDX_BACKGROUND].bottom = w->height - 1;
	window_tile_inspector_widgets[WIDX_CLOSE].left = w->width - 13;
	window_tile_inspector_widgets[WIDX_CLOSE].right = w->width - 3;
	window_tile_inspector_widgets[WIDX_CONTENT_PANEL].right = w->width - 1;
	window_tile_inspector_widgets[WIDX_CONTENT_PANEL].bottom = w->height - 1;
	window_tile_inspector_widgets[WIDX_SCROLL].bottom = w->height - 30;
}
Beispiel #14
0
/**
 *
 *  rct2: 0x006CFAB0
 */
static void window_track_list_scrollgetsize()
{
	rct_window *w;
	int width, height;
	uint8 *trackDesignItem, *trackDesignList = RCT2_ADDRESS(RCT2_ADDRESS_TRACK_LIST, uint8);

	window_get_register(w);

	width = 0;
	height = RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_TRACK_MANAGER ? 0 : 10;
	for (trackDesignItem = trackDesignList; *trackDesignItem != 0; trackDesignItem += 128)
		height += 10;

	window_scrollsize_set_registers(width, height);
}
/**
*
* rct2: 0x0066FADA
*/
static void window_editor_top_toolbar_resize() {
	rct_window *mainWindow = window_get_main();
	rct_window *w;

	window_get_register(w);

	int eax = 0;

	if ((w->disabled_widgets & 0xFF) == 0)
		eax |= (1 << 3);

	if ((w->disabled_widgets & 0xFF) == 3)
		eax |= (1 << 2);

	RCT2_CALLPROC_X(0x006ECE14, 0, 0, 0, 0, (int)w, 0, 0);
}
Beispiel #16
0
static void window_changelog_invalidate()
{
	rct_window *w;

	window_get_register(w);

	window_changelog_widgets[WIDX_BACKGROUND].right = w->width - 1;
	window_changelog_widgets[WIDX_BACKGROUND].bottom = w->height - 1;
	window_changelog_widgets[WIDX_TITLE].right = w->width - 2;
	window_changelog_widgets[WIDX_CLOSE].left = w->width - 13;
	window_changelog_widgets[WIDX_CLOSE].right = w->width - 3;
	window_changelog_widgets[WIDX_CONTENT_PANEL].right = w->width - 1;
	window_changelog_widgets[WIDX_CONTENT_PANEL].bottom = w->height - 1;
	window_changelog_widgets[WIDX_SCROLL].right = w->width - 3;
	window_changelog_widgets[WIDX_SCROLL].bottom = w->height - 15;
}
Beispiel #17
0
static void window_tile_inspector_resize()
{
	rct_window *w;

	window_get_register(w);

	w->min_width = WW;
	w->min_height = MIN_WH;
	if (w->width < w->min_width) {
		window_invalidate(w);
		w->width = w->min_width;
	}
	if (w->height < w->min_height) {
		window_invalidate(w);
		w->height = w->min_height;
	}
}
Beispiel #18
0
void window_text_input_update7()
{
	rct_window* w;

	window_get_register(w);

	rct_window* calling_w = window_find_by_number(calling_class, calling_number);
	// If the calling window is closed then close the text
	// input window.
	if (!calling_w){
		window_close(w);
	}

	// Used to blink the cursor.
	w->frame_no++;
	if (w->frame_no > 30) w->frame_no = 0;
	window_invalidate(w);
}
Beispiel #19
0
/**
 *
 *  rct2: 0x00663F20
 */
static void window_land_invalidate()
{
	rct_window *w;

	window_get_register(w);
	colour_scheme_update(w);

	w->pressed_widgets = (1 << WIDX_PREVIEW);
	if (RCT2_GLOBAL(RCT2_ADDRESS_SELECTED_TERRAIN_SURFACE, uint8) != 255)
		w->pressed_widgets |= (1 << WIDX_FLOOR);
	if (RCT2_GLOBAL(RCT2_ADDRESS_SELECTED_TERRAIN_EDGE, uint8) != 255)
		w->pressed_widgets |= (1 << WIDX_WALL);
	if (LandPaintMode != 0)
		w->pressed_widgets |= (1 << WIDX_PAINTMODE);

	window_land_widgets[WIDX_FLOOR].image = SPR_FLOOR_TEXTURE_GRASS + _selectedFloorTexture;
	window_land_widgets[WIDX_WALL].image = SPR_WALL_TEXTURE_ROCK + _selectedWallTexture;
	window_land_widgets[WIDX_PREVIEW].image = RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16) <= 7 ?
		SPR_LAND_TOOL_SIZE_0 + RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16) :
		0xFFFFFFFF;
}
Beispiel #20
0
/**
 *
 *  rct2: 0x006CF2D6
 */
static void window_track_list_invalidate()
{
	rct_window *w;
	rct_ride_type *entry;
	rct_string_id stringId;

	window_get_register(w);
	colour_scheme_update(w);

	entry = GET_RIDE_ENTRY(_window_track_list_item.entry_index);

	stringId = entry->name;
	if (!(entry->flags & RIDE_ENTRY_FLAG_SEPERATE_RIDE_NAME))
		stringId = _window_track_list_item.type + 2;

	RCT2_GLOBAL(0x013CE952, uint16) = stringId;
	if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_TRACK_MANAGER) {
		window_track_list_widgets[WIDX_TITLE].image = STR_TRACK_DESIGNS;
		window_track_list_widgets[WIDX_TRACK_LIST].tooltip = STR_CLICK_ON_DESIGN_TO_RENAME_OR_DELETE_IT;
	} else {
		window_track_list_widgets[WIDX_TITLE].image = STR_SELECT_DESIGN;
		window_track_list_widgets[WIDX_TRACK_LIST].tooltip = STR_CLICK_ON_DESIGN_TO_BUILD_IT_TIP;
	}

	if ((RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_TRACK_MANAGER) || w->track_list.var_482 != 0) {
		w->pressed_widgets |= 1 << WIDX_TRACK_PREVIEW;
		w->disabled_widgets &= ~(1 << WIDX_TRACK_PREVIEW);
		window_track_list_widgets[WIDX_ROTATE].type = WWT_FLATBTN;
		window_track_list_widgets[WIDX_TOGGLE_SCENERY].type = WWT_FLATBTN;
		if (RCT2_GLOBAL(RCT2_ADDRESS_TRACK_DESIGN_SCENERY_TOGGLE, uint8) == 0)
			w->pressed_widgets |= (1 << WIDX_TOGGLE_SCENERY);
		else
			w->pressed_widgets &= ~(1 << WIDX_TOGGLE_SCENERY);
	} else {
		w->pressed_widgets &= ~(1 << WIDX_TRACK_PREVIEW);
		w->disabled_widgets |= (1 << WIDX_TRACK_PREVIEW);
		window_track_list_widgets[WIDX_ROTATE].type = WWT_EMPTY;
		window_track_list_widgets[WIDX_TOGGLE_SCENERY].type = WWT_EMPTY;
	}
}
Beispiel #21
0
static void window_changelog_resize()
{
	rct_window *w;

	window_get_register(w);

	int screenWidth = RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, uint16);
	int screenHeight = RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_HEIGHT, uint16);

	w->max_width = (screenWidth * 4) / 5;
	w->max_height = (screenHeight * 4) / 5;

	w->min_width = MIN_WW;
	w->min_height = MIN_WH;
	if (w->width < w->min_width) {
		window_invalidate(w);
		w->width = w->min_width;
	}
	if (w->height < w->min_height) {
		window_invalidate(w);
		w->height = w->min_height;
	}
}
Beispiel #22
0
/* rct2: 0x6BA7B5 */
static void window_banner_unknown_14()
{
	rct_window* w;
	window_get_register(w);
	
	rct_viewport* view = w->viewport;
	w->viewport = 0;

	view->width = 0;
	viewport_update_pointers();

	rct_banner* banner = &gBanners[w->number];

	int view_x = (banner->x << 5) + 16;
	int view_y = (banner->y << 5) + 16;
	int view_z = w->frame_no;

	// Create viewport
	rct_widget* viewportWidget = &window_banner_widgets[WIDX_VIEWPORT];
	viewport_create(
		w,
		w->x + viewportWidget->left + 1,
		w->y + viewportWidget->top + 1,
		(viewportWidget->right - viewportWidget->left) - 1,
		(viewportWidget->bottom - viewportWidget->top) - 1,
		0,
		view_x,
		view_y,
		view_z,
		0,
		-1
	);

	w->viewport->flags = (RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_FLAGS, uint8) & CONFIG_FLAG_ALWAYS_SHOW_GRIDLINES) ? VIEWPORT_FLAG_GRIDLINES : 0;
	window_invalidate(w);
}
/**
*
*  rct2: 0x0066F87D
*/
void window_editor_top_toolbar_invalidate()
{
	rct_window *w;

	window_get_register(w);

	sint16 screenWidth = max(RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, sint16), 640);

	window_editor_top_toolbar_widgets[WIDX_CONSTRUCT_RIDE].left = screenWidth - 30;
	window_editor_top_toolbar_widgets[WIDX_CONSTRUCT_RIDE].right =
		window_editor_top_toolbar_widgets[WIDX_CONSTRUCT_RIDE].left + 29;

	window_editor_top_toolbar_widgets[WIDX_PATH].left = screenWidth - 30;
	window_editor_top_toolbar_widgets[WIDX_PATH].right =
		window_editor_top_toolbar_widgets[WIDX_PATH].left + 29;

	window_editor_top_toolbar_widgets[WIDX_SCENERY].left =
		window_editor_top_toolbar_widgets[WIDX_PATH].left - 30;
	window_editor_top_toolbar_widgets[WIDX_SCENERY].right =
		window_editor_top_toolbar_widgets[WIDX_SCENERY].left + 29;

	window_editor_top_toolbar_widgets[WIDX_WATER].left =
		window_editor_top_toolbar_widgets[WIDX_SCENERY].left - 30;
	window_editor_top_toolbar_widgets[WIDX_WATER].right =
		window_editor_top_toolbar_widgets[WIDX_WATER].left + 29;

	window_editor_top_toolbar_widgets[WIDX_LAND].left =
		window_editor_top_toolbar_widgets[WIDX_WATER].left - 30;
	window_editor_top_toolbar_widgets[WIDX_LAND].right =
		window_editor_top_toolbar_widgets[WIDX_LAND].left + 29;

	window_editor_top_toolbar_widgets[WIDX_CLEAR_SCENERY].left =
		window_editor_top_toolbar_widgets[WIDX_LAND].left - 30;
	window_editor_top_toolbar_widgets[WIDX_CLEAR_SCENERY].right =
		window_editor_top_toolbar_widgets[WIDX_CLEAR_SCENERY].left + 29;

	window_editor_top_toolbar_widgets[WIDX_ZOOM_OUT].type = WWT_EMPTY;
	window_editor_top_toolbar_widgets[WIDX_ZOOM_IN].type = WWT_EMPTY;
	window_editor_top_toolbar_widgets[WIDX_ROTATE].type = WWT_EMPTY;
	window_editor_top_toolbar_widgets[WIDX_VIEW_MENU].type = WWT_EMPTY;
	window_editor_top_toolbar_widgets[WIDX_MAP].type = WWT_EMPTY;
	window_editor_top_toolbar_widgets[WIDX_CLEAR_SCENERY].type = WWT_EMPTY;
	window_editor_top_toolbar_widgets[WIDX_LAND].type = WWT_EMPTY;
	window_editor_top_toolbar_widgets[WIDX_WATER].type = WWT_EMPTY;
	window_editor_top_toolbar_widgets[WIDX_SCENERY].type = WWT_EMPTY;
	window_editor_top_toolbar_widgets[WIDX_PATH].type = WWT_EMPTY;
	window_editor_top_toolbar_widgets[WIDX_CONSTRUCT_RIDE].type = WWT_EMPTY;
	

	if (g_editor_step == EDITOR_STEP_LANDSCAPE_EDITOR) {
		window_editor_top_toolbar_widgets[WIDX_ZOOM_OUT].type = WWT_TRNBTN;
		window_editor_top_toolbar_widgets[WIDX_ZOOM_IN].type = WWT_TRNBTN;
		window_editor_top_toolbar_widgets[WIDX_ROTATE].type = WWT_TRNBTN;
		window_editor_top_toolbar_widgets[WIDX_VIEW_MENU].type = WWT_TRNBTN;
		window_editor_top_toolbar_widgets[WIDX_MAP].type = WWT_TRNBTN;
		window_editor_top_toolbar_widgets[WIDX_CLEAR_SCENERY].type = WWT_TRNBTN;
		window_editor_top_toolbar_widgets[WIDX_LAND].type = WWT_TRNBTN;
		window_editor_top_toolbar_widgets[WIDX_WATER].type = WWT_TRNBTN;
		window_editor_top_toolbar_widgets[WIDX_SCENERY].type = WWT_TRNBTN;
		window_editor_top_toolbar_widgets[WIDX_PATH].type = WWT_TRNBTN;
	} else if (g_editor_step == EDITOR_STEP_ROLLERCOASTER_DESIGNER) {
		window_editor_top_toolbar_widgets[WIDX_ZOOM_OUT].type = WWT_TRNBTN;
		window_editor_top_toolbar_widgets[WIDX_ZOOM_IN].type = WWT_TRNBTN;
		window_editor_top_toolbar_widgets[WIDX_ROTATE].type = WWT_TRNBTN;
		window_editor_top_toolbar_widgets[WIDX_VIEW_MENU].type = WWT_TRNBTN;
		window_editor_top_toolbar_widgets[WIDX_CONSTRUCT_RIDE].type = WWT_TRNBTN;
	}

	if (window_find_by_class(0x94) == NULL)
		w->pressed_widgets &= ~(1 << WIDX_PATH);
	else
		w->pressed_widgets |= (1 << WIDX_PATH);
}
Beispiel #24
0
static void window_title_options_invalidate()
{
	rct_window *w;
	window_get_register(w);
	colour_scheme_update(w);
}
/**
 * 
 *  rct2: 0x006AA9FD
 */
static void window_editor_object_selection_invalidate()
{
	int i, x;
	rct_window *w;
	rct_widget *widget;

	window_get_register(w);
	colour_scheme_update(w);

	// Set pressed widgets
	w->pressed_widgets |= 1 << WIDX_PREVIEW;
	window_editor_object_selection_set_pressed_tab(w);
	if (w->list_information_type & 1)
		w->pressed_widgets |= (1 << WIDX_DROPDOWN1);
	else
		w->pressed_widgets &= ~(1 << WIDX_DROPDOWN1);

	// Set window title and buttons
	RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS, rct_string_id) = STR_OBJECT_SELECTION_RIDE_VEHICLES_ATTRACTIONS + w->selected_tab;
	if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_TRACK_MANAGER) {
		w->widgets[WIDX_TITLE].image = STR_TRACK_DESIGNS_MANAGER_SELECT_RIDE_TYPE;
		w->widgets[WIDX_CLOSE].type = WWT_EMPTY;
		w->widgets[WIDX_DROPDOWN2].type = WWT_DROPDOWN_BUTTON;
	} else if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_TRACK_DESIGNER) {
		w->widgets[WIDX_TITLE].image = STR_ROLLER_COASTER_DESIGNER_SELECT_RIDE_TYPES_VEHICLES;
		w->widgets[WIDX_CLOSE].type = WWT_CLOSEBOX;
		w->widgets[WIDX_DROPDOWN2].type = WWT_EMPTY;
	} else {
		w->widgets[WIDX_TITLE].image = STR_OBJECT_SELECTION;
		w->widgets[WIDX_CLOSE].type = WWT_CLOSEBOX;
		w->widgets[WIDX_DROPDOWN2].type = WWT_EMPTY;
	}

	// Align tabs, hide advanced ones
	x = 3;
	for (i = 0; i < WINDOW_OBJECT_SELECTION_PAGE_COUNT; i++) {
		widget = &w->widgets[WIDX_TAB_1 + i];

		if (!(w->list_information_type & 1) && ((1 << i) & 0x5E)) {
			widget->type = WWT_EMPTY;
		} else {
			widget->type = WWT_TAB;
			widget->left = x;
			widget->right = x + 30;
			x += 31;
		}
	}

	if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & (SCREEN_FLAGS_TRACK_MANAGER | SCREEN_FLAGS_TRACK_DESIGNER)) {
		w->widgets[WIDX_DROPDOWN1].type = WWT_EMPTY;
		w->widgets[WIDX_FILTER_DROPDOWN].type = WWT_EMPTY;
		for (i = 1; i < WINDOW_OBJECT_SELECTION_PAGE_COUNT; i++)
			w->widgets[WIDX_TAB_1 + i].type = WWT_EMPTY;
		x = 150;
	} else {
		w->widgets[WIDX_DROPDOWN1].type = WWT_DROPDOWN_BUTTON;
		w->widgets[WIDX_FILTER_DROPDOWN].type = WWT_DROPDOWN_BUTTON;
		x = 300;
	}

	w->widgets[WIDX_LIST].right = 587 - x;
	w->widgets[WIDX_PREVIEW].left = 537 - (x >> 1);
	w->widgets[WIDX_PREVIEW].right = w->widgets[WIDX_PREVIEW].left + 113;

	bool ridePage = (w->selected_tab == WINDOW_OBJECT_SELECTION_PAGE_RIDE_VEHICLES_ATTRACTIONS);
	w->widgets[WIDX_LIST].top = (ridePage ? 94 : 60);
	w->widgets[WIDX_FILTER_STRING_BUTTON].top = (ridePage ? 80 : 46);
	w->widgets[WIDX_FILTER_STRING_BUTTON].bottom = (ridePage ? 91 : 57);
	w->widgets[WIDX_FILTER_CLEAR_BUTTON].top = (ridePage ? 80 : 46);
	w->widgets[WIDX_FILTER_CLEAR_BUTTON].bottom = (ridePage ? 91 : 57);

	if (ridePage) {
		w->enabled_widgets |= (1 << WIDX_FILTER_RIDE_TAB_ALL) | (1 << WIDX_FILTER_RIDE_TAB_TRANSPORT) |
			(1 << WIDX_FILTER_RIDE_TAB_GENTLE) | (1 << WIDX_FILTER_RIDE_TAB_COASTER) | (1 << WIDX_FILTER_RIDE_TAB_THRILL) |
			(1 << WIDX_FILTER_RIDE_TAB_WATER) | (1 << WIDX_FILTER_RIDE_TAB_STALL);
		for (i = 0; i < 7; i++)
			w->pressed_widgets &= ~(1 << (WIDX_FILTER_RIDE_TAB_ALL + i));
		if ((_filter_flags & 0x7E0) == 0x7E0)
			w->pressed_widgets |= (1 << WIDX_FILTER_RIDE_TAB_ALL);
		else {
			for (int i = 0; i < 6; i++) {
				if (_filter_flags & (1 << (5 + i)))
					w->pressed_widgets |= (uint64)(1 << (WIDX_FILTER_RIDE_TAB_TRANSPORT + i));
			}
		}
		w->widgets[WIDX_FILTER_RIDE_TAB_FRAME].type = WWT_RESIZE;
		for (int i = WIDX_FILTER_RIDE_TAB_ALL; i <= WIDX_FILTER_RIDE_TAB_STALL; i++)
			w->widgets[i].type = WWT_TAB;
	}
	else {
		w->enabled_widgets &= ~((1 << WIDX_FILTER_RIDE_TAB_ALL) | (1 << WIDX_FILTER_RIDE_TAB_TRANSPORT) |
			(1 << WIDX_FILTER_RIDE_TAB_GENTLE) | (1 << WIDX_FILTER_RIDE_TAB_COASTER) | (1 << WIDX_FILTER_RIDE_TAB_THRILL) |
			(1 << WIDX_FILTER_RIDE_TAB_WATER) | (1 << WIDX_FILTER_RIDE_TAB_STALL));
		for (int i = WIDX_FILTER_RIDE_TAB_FRAME; i <= WIDX_FILTER_RIDE_TAB_STALL; i++)
			w->widgets[i].type = WWT_EMPTY;
	}
}