Merge pull request #4290 from wolfreak99/see_through_paths

See-Through Paths (and implement gCurrentViewportFlags)
This commit is contained in:
Ted John 2016-08-16 17:53:02 +01:00 committed by GitHub
commit b97cd7b9b1
12 changed files with 80 additions and 30 deletions

View File

@ -4219,6 +4219,8 @@ STR_5907 :{SMALLFONT}{BLACK}When enabled, zooming in will centre around the c
STR_5908 :Allow arbitrary ride type changes STR_5908 :Allow arbitrary ride type changes
STR_5909 :{SMALLFONT}{BLACK}Allows changing ride type freely. May cause crashes. STR_5909 :{SMALLFONT}{BLACK}Allows changing ride type freely. May cause crashes.
STR_5910 :Apply STR_5910 :Apply
STR_5911 :See-Through Paths
STR_5912 :See-through paths toggle
############# #############
# Scenarios # # Scenarios #

View File

@ -1,5 +1,6 @@
0.0.5 (in development) 0.0.5 (in development)
------------------------------------------------------------------------ ------------------------------------------------------------------------
- Feature: New view option: "See-Through Paths"
- Feature: Add cheat to reset date. - Feature: Add cheat to reset date.
- Feature: Add OpenGL drawing engine. - Feature: Add OpenGL drawing engine.
- Feature: Implementation of the user-defined currency - Feature: Implementation of the user-defined currency

View File

@ -1060,7 +1060,10 @@ static const uint16 _defaultShortcutKeys[SHORTCUT_COUNT] = {
SHORTCUT_UNDEFINED, // SHORTCUT_SHOW_OPTIONS SHORTCUT_UNDEFINED, // SHORTCUT_SHOW_OPTIONS
SHORTCUT_UNDEFINED, // SHORTCUT_MUTE_SOUND SHORTCUT_UNDEFINED, // SHORTCUT_MUTE_SOUND
ALT | SDL_SCANCODE_RETURN, // SHORTCUT_WINDOWED_MODE_TOGGLE ALT | SDL_SCANCODE_RETURN, // SHORTCUT_WINDOWED_MODE_TOGGLE
SHORTCUT_UNDEFINED, // SHORTCUT_SHOW_MULTIPLAYER
SHORTCUT_UNDEFINED, // SHORTCUT_PAINT_ORIGINAL_TOGGLE SHORTCUT_UNDEFINED, // SHORTCUT_PAINT_ORIGINAL_TOGGLE
SHORTCUT_UNDEFINED, // SHORTCUT_DEBUG_PAINT_TOGGLE
SHORTCUT_UNDEFINED, // SHORTCUT_SEE_THROUGH_PATHS_TOGGLE
}; };
#define SHORTCUT_FILE_VERSION 1 #define SHORTCUT_FILE_VERSION 1

View File

@ -80,6 +80,7 @@ enum {
SHORTCUT_SHOW_MULTIPLAYER, SHORTCUT_SHOW_MULTIPLAYER,
SHORTCUT_PAINT_ORIGINAL_TOGGLE, SHORTCUT_PAINT_ORIGINAL_TOGGLE,
SHORTCUT_DEBUG_PAINT_TOGGLE, SHORTCUT_DEBUG_PAINT_TOGGLE,
SHORTCUT_SEE_THROUGH_PATHS_TOGGLE,
SHORTCUT_COUNT SHORTCUT_COUNT
}; };

View File

@ -291,6 +291,11 @@ static void shortcut_see_through_scenery_toggle()
toggle_view_flag(VIEWPORT_FLAG_SEETHROUGH_SCENERY); toggle_view_flag(VIEWPORT_FLAG_SEETHROUGH_SCENERY);
} }
static void shortcut_see_through_paths_toggle()
{
toggle_view_flag(VIEWPORT_FLAG_SEETHROUGH_PATHS);
}
static void shortcut_invisible_supports_toggle() static void shortcut_invisible_supports_toggle()
{ {
toggle_view_flag(VIEWPORT_FLAG_INVISIBLE_SUPPORTS); toggle_view_flag(VIEWPORT_FLAG_INVISIBLE_SUPPORTS);
@ -613,6 +618,7 @@ static const shortcut_action shortcut_table[SHORTCUT_COUNT] = {
shortcut_show_multiplayer, shortcut_show_multiplayer,
shortcut_orginal_painting_toggle, shortcut_orginal_painting_toggle,
shortcut_debug_paint_toggle, shortcut_debug_paint_toggle,
shortcut_see_through_paths_toggle,
}; };
#pragma endregion #pragma endregion

View File

@ -38,6 +38,7 @@
#include "window.h" #include "window.h"
//#define DEBUG_SHOW_DIRTY_BOX //#define DEBUG_SHOW_DIRTY_BOX
uint32 gCurrentViewportFlags = 0;
rct_viewport g_viewport_list[MAX_VIEWPORT_COUNT]; rct_viewport g_viewport_list[MAX_VIEWPORT_COUNT];
rct_viewport *g_music_tracking_viewport; rct_viewport *g_music_tracking_viewport;
@ -675,6 +676,10 @@ void viewport_render(rct_drawpixelinfo *dpi, rct_viewport *viewport, int left, i
*/ */
void viewport_paint(rct_viewport* viewport, rct_drawpixelinfo* dpi, int left, int top, int right, int bottom){ void viewport_paint(rct_viewport* viewport, rct_drawpixelinfo* dpi, int left, int top, int right, int bottom){
gCurrentViewportFlags = viewport->flags; gCurrentViewportFlags = viewport->flags;
//This should still be updated until the rest of supports, etc, is reverse-engineered. Otherwise
// supports for unimplemented rollercoasters will still appear even if "invisible supports"
// are enabled.
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_VIEWPORT_FLAGS, uint16) = (uint16)viewport->flags;
RCT2_GLOBAL(RCT2_ADDRESS_VIEWPORT_ZOOM, uint16) = viewport->zoom; RCT2_GLOBAL(RCT2_ADDRESS_VIEWPORT_ZOOM, uint16) = viewport->zoom;
uint16 width = right - left; uint16 width = right - left;
@ -955,8 +960,8 @@ void viewport_set_visibility(uint8 mode)
switch (mode) { switch (mode) {
case 0: { //Set all these flags to 0, and invalidate if any were active case 0: { //Set all these flags to 0, and invalidate if any were active
uint16 mask = VIEWPORT_FLAG_UNDERGROUND_INSIDE | VIEWPORT_FLAG_SEETHROUGH_RIDES | uint32 mask = VIEWPORT_FLAG_UNDERGROUND_INSIDE | VIEWPORT_FLAG_SEETHROUGH_RIDES |
VIEWPORT_FLAG_SEETHROUGH_SCENERY | VIEWPORT_FLAG_INVISIBLE_SUPPORTS | VIEWPORT_FLAG_SEETHROUGH_SCENERY | VIEWPORT_FLAG_SEETHROUGH_PATHS | VIEWPORT_FLAG_INVISIBLE_SUPPORTS |
VIEWPORT_FLAG_LAND_HEIGHTS | VIEWPORT_FLAG_TRACK_HEIGHTS | VIEWPORT_FLAG_LAND_HEIGHTS | VIEWPORT_FLAG_TRACK_HEIGHTS |
VIEWPORT_FLAG_PATH_HEIGHTS | VIEWPORT_FLAG_INVISIBLE_PEEPS | VIEWPORT_FLAG_PATH_HEIGHTS | VIEWPORT_FLAG_INVISIBLE_PEEPS |
VIEWPORT_FLAG_HIDE_BASE | VIEWPORT_FLAG_HIDE_VERTICAL; VIEWPORT_FLAG_HIDE_BASE | VIEWPORT_FLAG_HIDE_VERTICAL;

View File

@ -38,7 +38,8 @@ enum {
VIEWPORT_FLAG_HIDE_BASE = (1 << 12), VIEWPORT_FLAG_HIDE_BASE = (1 << 12),
VIEWPORT_FLAG_HIDE_VERTICAL = (1 << 13), VIEWPORT_FLAG_HIDE_VERTICAL = (1 << 13),
VIEWPORT_FLAG_INVISIBLE_SPRITES = (1 << 14), VIEWPORT_FLAG_INVISIBLE_SPRITES = (1 << 14),
VIEWPORT_FLAG_15 = (1 << 15) VIEWPORT_FLAG_15 = (1 << 15),
VIEWPORT_FLAG_SEETHROUGH_PATHS = (1 << 16)
}; };
enum { enum {
@ -92,7 +93,7 @@ typedef struct viewport_interaction_info {
#define gSavedViewZoom RCT2_GLOBAL(RCT2_ADDRESS_SAVED_VIEW_ZOOM, uint8) #define gSavedViewZoom RCT2_GLOBAL(RCT2_ADDRESS_SAVED_VIEW_ZOOM, uint8)
#define gSavedViewRotation RCT2_GLOBAL(RCT2_ADDRESS_SAVED_VIEW_ROTATION, uint8) #define gSavedViewRotation RCT2_GLOBAL(RCT2_ADDRESS_SAVED_VIEW_ROTATION, uint8)
#define gCurrentRotation RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint8) #define gCurrentRotation RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint8)
#define gCurrentViewportFlags RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_VIEWPORT_FLAGS, uint16) extern uint32 gCurrentViewportFlags;
// rct2: 0x014234BC // rct2: 0x014234BC
extern rct_viewport g_viewport_list[MAX_VIEWPORT_COUNT]; extern rct_viewport g_viewport_list[MAX_VIEWPORT_COUNT];

View File

@ -76,7 +76,6 @@ typedef struct rct_widget {
/** /**
* Viewport structure * Viewport structure
* size: 0x14
*/ */
typedef struct rct_viewport { typedef struct rct_viewport {
sint16 width; // 0x00 sint16 width; // 0x00
@ -89,7 +88,7 @@ typedef struct rct_viewport {
sint16 view_height; // 0x0E sint16 view_height; // 0x0E
uint8 zoom; // 0x10 uint8 zoom; // 0x10
uint8 var_11; uint8 var_11;
uint16 flags; // 0x12 uint32 flags; // 0x12
uint8 visibility; // VISIBILITY_CACHE uint8 visibility; // VISIBILITY_CACHE
} rct_viewport; } rct_viewport;

View File

@ -3343,6 +3343,8 @@ enum {
STR_CHEAT_ALLOW_ARBITRARY_RIDE_TYPE_CHANGES = 5908, STR_CHEAT_ALLOW_ARBITRARY_RIDE_TYPE_CHANGES = 5908,
STR_CHEAT_ALLOW_ARBITRARY_RIDE_TYPE_CHANGES_TIP = 5909, STR_CHEAT_ALLOW_ARBITRARY_RIDE_TYPE_CHANGES_TIP = 5909,
STR_APPLY = 5910, STR_APPLY = 5910,
STR_SEE_THROUGH_PATHS = 5911,
STR_SHORTCUT_SEE_THROUGH_PATHS_TOGGLE = 5912,
// Have to include resource strings (from scenarios and objects) for the time being now that language is partially working // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working
STR_COUNT = 32768 STR_COUNT = 32768

View File

@ -907,7 +907,7 @@ static void paint_attached_ps(paint_struct* ps, attached_paint_struct* attached_
int image_id = attached_ps->image_id; int image_id = attached_ps->image_id;
if (gCurrentViewportFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES) { if (gCurrentViewportFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES) {
if (ps->sprite_type == 3) { if (ps->sprite_type == VIEWPORT_INTERACTION_ITEM_RIDE) {
if (image_id & 0x40000000) { if (image_id & 0x40000000) {
image_id &= 0x7FFFF; image_id &= 0x7FFFF;
image_id |= 0x41880000; image_id |= 0x41880000;
@ -916,13 +916,22 @@ static void paint_attached_ps(paint_struct* ps, attached_paint_struct* attached_
} }
if (gCurrentViewportFlags & VIEWPORT_FLAG_SEETHROUGH_SCENERY) { if (gCurrentViewportFlags & VIEWPORT_FLAG_SEETHROUGH_SCENERY) {
if (ps->sprite_type == 5) { if (ps->sprite_type == VIEWPORT_INTERACTION_ITEM_SCENERY) {
if (image_id & 0x40000000) { if (image_id & 0x40000000) {
image_id &= 0x7FFFF; image_id &= 0x7FFFF;
image_id |= 0x41880000; image_id |= 0x41880000;
} }
} }
} }
if (gCurrentViewportFlags & VIEWPORT_FLAG_SEETHROUGH_PATHS) {
if (ps->sprite_type == VIEWPORT_INTERACTION_ITEM_FOOTPATH) {
if (!(image_id & 0x40000000)) {
image_id &= 0x7FFFF;
image_id |= 0x41880000;
}
}
}
if (attached_ps->flags & PAINT_STRUCT_FLAG_IS_MASKED) { if (attached_ps->flags & PAINT_STRUCT_FLAG_IS_MASKED) {
gfx_draw_sprite_raw_masked(dpi, x, y, image_id, attached_ps->colour_image_id); gfx_draw_sprite_raw_masked(dpi, x, y, image_id, attached_ps->colour_image_id);
@ -942,7 +951,7 @@ void paint_quadrant_ps() {
for (ps = ps->next_quadrant_ps; ps;) { for (ps = ps->next_quadrant_ps; ps;) {
sint16 x = ps->x; sint16 x = ps->x;
sint16 y = ps->y; sint16 y = ps->y;
if (ps->sprite_type == 2) { if (ps->sprite_type == VIEWPORT_INTERACTION_ITEM_SPRITE) {
if (dpi->zoom_level >= 1) { if (dpi->zoom_level >= 1) {
x &= 0xFFFE; x &= 0xFFFE;
y &= 0xFFFE; y &= 0xFFFE;
@ -954,7 +963,7 @@ void paint_quadrant_ps() {
} }
int image_id = ps->image_id; int image_id = ps->image_id;
if (gCurrentViewportFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES) { if (gCurrentViewportFlags & VIEWPORT_FLAG_SEETHROUGH_RIDES) {
if (ps->sprite_type == 3) { if (ps->sprite_type == VIEWPORT_INTERACTION_ITEM_RIDE) {
if (!(image_id & 0x40000000)) { if (!(image_id & 0x40000000)) {
image_id &= 0x7FFFF; image_id &= 0x7FFFF;
image_id |= 0x41880000; image_id |= 0x41880000;
@ -962,7 +971,17 @@ void paint_quadrant_ps() {
} }
} }
if (gCurrentViewportFlags & VIEWPORT_FLAG_UNDERGROUND_INSIDE) { if (gCurrentViewportFlags & VIEWPORT_FLAG_UNDERGROUND_INSIDE) {
if (ps->sprite_type == 9) { if (ps->sprite_type == VIEWPORT_INTERACTION_ITEM_WALL) {
if (!(image_id & 0x40000000)) {
image_id &= 0x7FFFF;
image_id |= 0x41880000;
}
}
}
if (gCurrentViewportFlags & VIEWPORT_FLAG_SEETHROUGH_PATHS) {
if (ps->sprite_type == VIEWPORT_INTERACTION_ITEM_FOOTPATH ||
ps->sprite_type == VIEWPORT_INTERACTION_ITEM_FOOTPATH_ITEM ||
ps->sprite_type == VIEWPORT_INTERACTION_ITEM_BANNER) {
if (!(image_id & 0x40000000)) { if (!(image_id & 0x40000000)) {
image_id &= 0x7FFFF; image_id &= 0x7FFFF;
image_id |= 0x41880000; image_id |= 0x41880000;
@ -970,7 +989,9 @@ void paint_quadrant_ps() {
} }
} }
if (gCurrentViewportFlags & VIEWPORT_FLAG_SEETHROUGH_SCENERY) { if (gCurrentViewportFlags & VIEWPORT_FLAG_SEETHROUGH_SCENERY) {
if (ps->sprite_type == 10 || ps->sprite_type == 12 || ps->sprite_type == 9 || ps->sprite_type == 5) { if (ps->sprite_type == VIEWPORT_INTERACTION_ITEM_LARGE_SCENERY ||
ps->sprite_type == VIEWPORT_INTERACTION_ITEM_WALL ||
ps->sprite_type == VIEWPORT_INTERACTION_ITEM_SCENERY) {
if (!(image_id & 0x40000000)) { if (!(image_id & 0x40000000)) {
image_id &= 0x7FFFF; image_id &= 0x7FFFF;
image_id |= 0x41880000; image_id |= 0x41880000;

View File

@ -134,6 +134,7 @@ const rct_string_id ShortcutStringIds[] = {
STR_SHORTCUT_SHOW_MULTIPLAYER, STR_SHORTCUT_SHOW_MULTIPLAYER,
STR_SHORTCUT_PAINT_ORIGINAL, STR_SHORTCUT_PAINT_ORIGINAL,
STR_SHORTCUT_DEBUG_PAINT_TOGGLE, STR_SHORTCUT_DEBUG_PAINT_TOGGLE,
STR_SHORTCUT_SEE_THROUGH_PATHS_TOGGLE,
}; };
/** /**

View File

@ -93,11 +93,12 @@ typedef enum {
DDIDX_HIDE_VERTICAL = 2, DDIDX_HIDE_VERTICAL = 2,
DDIDX_SEETHROUGH_RIDES = 4, DDIDX_SEETHROUGH_RIDES = 4,
DDIDX_SEETHROUGH_SCENARY = 5, DDIDX_SEETHROUGH_SCENARY = 5,
DDIDX_INVISIBLE_SUPPORTS = 6, DDIDX_SEETHROUGH_PATHS = 6,
DDIDX_INVISIBLE_PEEPS = 7, DDIDX_INVISIBLE_SUPPORTS = 7,
DDIDX_LAND_HEIGHTS = 9, DDIDX_INVISIBLE_PEEPS = 8,
DDIDX_TRACK_HEIGHTS = 10, DDIDX_LAND_HEIGHTS = 10,
DDIDX_PATH_HEIGHTS = 11, DDIDX_TRACK_HEIGHTS = 11,
DDIDX_PATH_HEIGHTS = 12,
} TOP_TOOLBAR_VIEW_MENU_DDIDX; } TOP_TOOLBAR_VIEW_MENU_DDIDX;
typedef enum { typedef enum {
@ -3036,21 +3037,23 @@ void top_toolbar_init_view_menu(rct_window* w, rct_widget* widget) {
gDropdownItemsFormat[5] = STR_TOGGLE_OPTION; gDropdownItemsFormat[5] = STR_TOGGLE_OPTION;
gDropdownItemsFormat[6] = STR_TOGGLE_OPTION; gDropdownItemsFormat[6] = STR_TOGGLE_OPTION;
gDropdownItemsFormat[7] = STR_TOGGLE_OPTION; gDropdownItemsFormat[7] = STR_TOGGLE_OPTION;
gDropdownItemsFormat[8] = STR_EMPTY; gDropdownItemsFormat[8] = STR_TOGGLE_OPTION;
gDropdownItemsFormat[9] = STR_TOGGLE_OPTION; gDropdownItemsFormat[9] = STR_EMPTY;
gDropdownItemsFormat[10] = STR_TOGGLE_OPTION; gDropdownItemsFormat[10] = STR_TOGGLE_OPTION;
gDropdownItemsFormat[11] = STR_TOGGLE_OPTION; gDropdownItemsFormat[11] = STR_TOGGLE_OPTION;
gDropdownItemsFormat[12] = STR_TOGGLE_OPTION;
gDropdownItemsArgs[0] = STR_UNDERGROUND_VIEW; gDropdownItemsArgs[0] = STR_UNDERGROUND_VIEW;
gDropdownItemsArgs[1] = STR_REMOVE_BASE_LAND; gDropdownItemsArgs[1] = STR_REMOVE_BASE_LAND;
gDropdownItemsArgs[2] = STR_REMOVE_VERTICAL_FACES; gDropdownItemsArgs[2] = STR_REMOVE_VERTICAL_FACES;
gDropdownItemsArgs[4] = STR_SEE_THROUGH_RIDES; gDropdownItemsArgs[4] = STR_SEE_THROUGH_RIDES;
gDropdownItemsArgs[5] = STR_SEE_THROUGH_SCENERY; gDropdownItemsArgs[5] = STR_SEE_THROUGH_SCENERY;
gDropdownItemsArgs[6] = STR_INVISIBLE_SUPPORTS; gDropdownItemsArgs[6] = STR_SEE_THROUGH_PATHS;
gDropdownItemsArgs[7] = STR_INVISIBLE_PEOPLE; gDropdownItemsArgs[7] = STR_INVISIBLE_SUPPORTS;
gDropdownItemsArgs[9] = STR_HEIGHT_MARKS_ON_LAND; gDropdownItemsArgs[8] = STR_INVISIBLE_PEOPLE;
gDropdownItemsArgs[10] = STR_HEIGHT_MARKS_ON_RIDE_TRACKS; gDropdownItemsArgs[10] = STR_HEIGHT_MARKS_ON_LAND;
gDropdownItemsArgs[11] = STR_HEIGHT_MARKS_ON_PATHS; gDropdownItemsArgs[11] = STR_HEIGHT_MARKS_ON_RIDE_TRACKS;
gDropdownItemsArgs[12] = STR_HEIGHT_MARKS_ON_PATHS;
window_dropdown_show_text( window_dropdown_show_text(
w->x + widget->left, w->x + widget->left,
@ -3058,7 +3061,7 @@ void top_toolbar_init_view_menu(rct_window* w, rct_widget* widget) {
widget->bottom - widget->top + 1, widget->bottom - widget->top + 1,
w->colours[1] | 0x80, w->colours[1] | 0x80,
0, 0,
12 13
); );
// Set checkmarks // Set checkmarks
@ -3073,16 +3076,18 @@ void top_toolbar_init_view_menu(rct_window* w, rct_widget* widget) {
dropdown_set_checked(4, true); dropdown_set_checked(4, true);
if (mainViewport->flags & VIEWPORT_FLAG_SEETHROUGH_SCENERY) if (mainViewport->flags & VIEWPORT_FLAG_SEETHROUGH_SCENERY)
dropdown_set_checked(5, true); dropdown_set_checked(5, true);
if (mainViewport->flags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS) if (mainViewport->flags & VIEWPORT_FLAG_SEETHROUGH_PATHS)
dropdown_set_checked(6, true); dropdown_set_checked(6, true);
if (mainViewport->flags & VIEWPORT_FLAG_INVISIBLE_PEEPS) if (mainViewport->flags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)
dropdown_set_checked(7, true); dropdown_set_checked(7, true);
if (mainViewport->flags & VIEWPORT_FLAG_INVISIBLE_PEEPS)
dropdown_set_checked(8, true);
if (mainViewport->flags & VIEWPORT_FLAG_LAND_HEIGHTS) if (mainViewport->flags & VIEWPORT_FLAG_LAND_HEIGHTS)
dropdown_set_checked(9, true);
if (mainViewport->flags & VIEWPORT_FLAG_TRACK_HEIGHTS)
dropdown_set_checked(10, true); dropdown_set_checked(10, true);
if (mainViewport->flags & VIEWPORT_FLAG_PATH_HEIGHTS) if (mainViewport->flags & VIEWPORT_FLAG_TRACK_HEIGHTS)
dropdown_set_checked(11, true); dropdown_set_checked(11, true);
if (mainViewport->flags & VIEWPORT_FLAG_PATH_HEIGHTS)
dropdown_set_checked(12, true);
gDropdownDefaultIndex = DDIDX_UNDERGROUND_INSIDE; gDropdownDefaultIndex = DDIDX_UNDERGROUND_INSIDE;
} }
@ -3111,6 +3116,9 @@ void top_toolbar_view_menu_dropdown(short dropdownIndex)
case DDIDX_SEETHROUGH_SCENARY: case DDIDX_SEETHROUGH_SCENARY:
w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_SCENERY; w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_SCENERY;
break; break;
case DDIDX_SEETHROUGH_PATHS:
w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_PATHS;
break;
case DDIDX_INVISIBLE_SUPPORTS: case DDIDX_INVISIBLE_SUPPORTS:
w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_SUPPORTS; w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_SUPPORTS;
break; break;