static void cheat_remove_litter() { rct_litter* litter; uint16 spriteIndex, nextSpriteIndex; for (spriteIndex = RCT2_GLOBAL(RCT2_ADDRESS_SPRITES_START_LITTER, uint16); spriteIndex != SPRITE_INDEX_NULL; spriteIndex = nextSpriteIndex) { litter = &(g_sprite_list[spriteIndex].litter); nextSpriteIndex = litter->next; sprite_remove((rct_sprite*)litter); } map_element_iterator it; rct_scenery_entry *sceneryEntry; map_element_iterator_begin(&it); do { if (map_element_get_type(it.element) != MAP_ELEMENT_TYPE_PATH) continue; if (!footpath_element_has_path_scenery(it.element)) continue; sceneryEntry = g_pathBitSceneryEntries[footpath_element_get_path_scenery_index(it.element)]; if(sceneryEntry->path_bit.var_06 & (1 << 0)) it.element->properties.path.addition_status = 0xFF; } while (map_element_iterator_next(&it)); gfx_invalidate_screen(); }
static sint32 map_element_get_total_element_count(rct_map_element *mapElement) { sint32 elementCount; rct_scenery_entry *sceneryEntry; rct_large_scenery_tile *tile; switch (map_element_get_type(mapElement)) { case MAP_ELEMENT_TYPE_PATH: case MAP_ELEMENT_TYPE_SCENERY: case MAP_ELEMENT_TYPE_WALL: return 1; case MAP_ELEMENT_TYPE_SCENERY_MULTIPLE: sceneryEntry = get_large_scenery_entry(mapElement->properties.scenerymultiple.type & 0x3FF); tile = sceneryEntry->large_scenery.tiles; elementCount = 0; do { tile++; elementCount++; } while (tile->x_offset != (sint16)(uint16)0xFFFF); return elementCount; default: return 0; } }
/** * * rct2: 0x006B7EAB */ static int banner_get_ride_index_at(int x, int y, int z) { rct_map_element *mapElement; rct_ride *ride; int rideIndex, resultRideIndex; resultRideIndex = -1; mapElement = map_get_first_element_at(x >> 5, y >> 5); do { if (map_element_get_type(mapElement) != MAP_ELEMENT_TYPE_TRACK) continue; rideIndex = mapElement->properties.track.ride_index; ride = get_ride(rideIndex); if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IS_SHOP)) continue; if ((mapElement->clearance_height * 8) + 32 <= z) continue; resultRideIndex = rideIndex; } while (!map_element_is_last_for_tile(mapElement++)); return resultRideIndex; }
/** * * rct2: 0x6ba4d6 */ static void window_banner_mouseup(rct_window *w, sint32 widgetIndex) { rct_banner* banner = &gBanners[w->number]; sint32 x = banner->x << 5; sint32 y = banner->y << 5; rct_map_element* map_element = map_get_first_element_at(x / 32, y / 32); while (1){ if ((map_element_get_type(map_element) == MAP_ELEMENT_TYPE_BANNER) && (map_element->properties.banner.index == w->number)) break; map_element++; } switch (widgetIndex) { case WIDX_CLOSE: window_close(w); break; case WIDX_BANNER_DEMOLISH: game_do_command(x, 1, y, map_element->base_height | (map_element->properties.banner.position << 8), GAME_COMMAND_REMOVE_BANNER, 0, 0); break; case WIDX_BANNER_TEXT: window_text_input_open(w, WIDX_BANNER_TEXT, STR_BANNER_TEXT, STR_ENTER_BANNER_TEXT, gBanners[w->number].string_idx, 0, 32); break; case WIDX_BANNER_NO_ENTRY: textinput_cancel(); game_do_command(1, GAME_COMMAND_FLAG_APPLY, w->number, banner->colour, GAME_COMMAND_SET_BANNER_STYLE, banner->text_colour, banner->flags ^ BANNER_FLAG_NO_ENTRY); break; } }
void scenery_update_tile(int x, int y) { rct_map_element *mapElement; mapElement = map_get_first_element_at(x >> 5, y >> 5); do { if (map_element_get_type(mapElement) == MAP_ELEMENT_TYPE_SCENERY) { scenery_update_age(x, y, mapElement); } else if (map_element_get_type(mapElement) == MAP_ELEMENT_TYPE_PATH) { if (footpath_element_has_path_scenery(mapElement) && !footpath_element_path_scenery_is_ghost(mapElement)) { rct_scenery_entry *sceneryEntry; sceneryEntry = g_pathBitSceneryEntries[footpath_element_get_path_scenery_index(mapElement)]; if (sceneryEntry->path_bit.var_06 & PATH_BIT_FLAG_JUMPING_FOUNTAIN_WATER) { jumping_fountain_begin(JUMPING_FOUNTAIN_TYPE_WATER, x, y, mapElement); } else if (sceneryEntry->path_bit.var_06 & PATH_BIT_FLAG_JUMPING_FOUNTAIN_SNOW) { jumping_fountain_begin(JUMPING_FOUNTAIN_TYPE_SNOW, x, y, mapElement); } } } } while (!map_element_is_last_for_tile(mapElement++)); }
static void cheat_water_plants() { map_element_iterator it; map_element_iterator_begin(&it); do { if (map_element_get_type(it.element) == MAP_ELEMENT_TYPE_SCENERY) { it.element->properties.scenery.age = 0; } } while (map_element_iterator_next(&it)); gfx_invalidate_screen(); }
void scenery_update_tile(int x, int y) { rct_map_element *mapElement; mapElement = map_get_first_element_at(x >> 5, y >> 5); do { if (map_element_get_type(mapElement) == MAP_ELEMENT_TYPE_SCENERY) { scenery_update_age(x, y, mapElement); } else if (map_element_get_type(mapElement) == MAP_ELEMENT_TYPE_PATH) { int additions = mapElement->properties.path.additions & 0x0F; if (additions != 0 && !(mapElement->properties.path.additions & 0x80)) { rct_scenery_entry *sceneryEntry; sceneryEntry = g_pathBitSceneryEntries[additions - 1]; if (sceneryEntry->path_bit.var_06 & PATH_BIT_FLAG_JUMPING_FOUNTAIN_WATER) { jumping_fountain_begin(JUMPING_FOUNTAIN_TYPE_WATER, x, y, mapElement); } else if (sceneryEntry->path_bit.var_06 & PATH_BIT_FLAG_JUMPING_FOUNTAIN_SNOW) { jumping_fountain_begin(JUMPING_FOUNTAIN_TYPE_SNOW, x, y, mapElement); } } } } while (!map_element_is_last_for_tile(mapElement++)); }
static void cheat_fix_vandalism() { map_element_iterator it; map_element_iterator_begin(&it); do { if (map_element_get_type(it.element) != MAP_ELEMENT_TYPE_PATH) continue; if (!footpath_element_has_path_scenery(it.element)) continue; it.element->flags &= ~MAP_ELEMENT_FLAG_BROKEN; } while (map_element_iterator_next(&it)); gfx_invalidate_screen(); }
/** * * rct2: 0x006E33D9 */ void scenery_update_age(int x, int y, rct_map_element *mapElement) { rct_map_element *mapElementAbove; rct_scenery_entry *sceneryEntry; sceneryEntry = g_smallSceneryEntries[mapElement->properties.scenery.type]; if ( !(sceneryEntry->small_scenery.flags & SMALL_SCENERY_FLAG_CAN_BE_WATERED) || (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_WEATHER, uint8) < WEATHER_RAIN) || (mapElement->properties.scenery.age < 5) ) { scenery_increase_age(x, y, mapElement); return; } // Check map elements above, presumebly to see if map element is blocked from rain mapElementAbove = mapElement; while (!(mapElementAbove->flags & 7)) { mapElementAbove++; switch (map_element_get_type(mapElementAbove)) { case MAP_ELEMENT_TYPE_SCENERY_MULTIPLE: case MAP_ELEMENT_TYPE_ENTRANCE: case MAP_ELEMENT_TYPE_PATH: map_invalidate_tile_zoom1(x, y, mapElementAbove->base_height * 8, mapElementAbove->clearance_height * 8); scenery_increase_age(x, y, mapElement); return; case MAP_ELEMENT_TYPE_SCENERY: sceneryEntry = g_smallSceneryEntries[mapElementAbove->properties.scenery.type]; if (sceneryEntry->small_scenery.flags & SMALL_SCENERY_FLAG_VOFFSET_CENTRE) { scenery_increase_age(x, y, mapElement); return; } break; } } // Reset age / water plant mapElement->properties.scenery.age = 0; map_invalidate_tile_zoom1(x, y, mapElement->base_height * 8, mapElement->clearance_height * 8); }
static void window_tile_inspector_scrollpaint() { int x = 15, y = 11 * (window_tile_inspector_item_count - 1), i = 0; rct_window *w; rct_drawpixelinfo *dpi; char buffer[256]; window_paint_get_registers(w, dpi); if (window_tile_inspector_tile_x == -1) return; rct_map_element *element = map_get_first_element_at(window_tile_inspector_tile_x, window_tile_inspector_tile_y); do { int type = map_element_get_type(element); char *type_name; int base_height = element->base_height; int clearance_height = element->clearance_height; if ((i & 1) != 0) gfx_fill_rect(dpi, x - 15, y, x + WW - 20, y + 11, RCT2_GLOBAL(0x0141FC4A + (w->colours[1] * 8), uint8) | 0x1000000); switch (type) { case MAP_ELEMENT_TYPE_SURFACE: sprintf( buffer, "Surface (%s, %s)", language_get_string(STR_TILE_INSPECTOR_TERRAIN_START + map_element_get_terrain(element)), language_get_string(STR_TILE_INSPECTOR_TERRAIN_EDGE_START + map_element_get_terrain_edge(element)) ); type_name = buffer; break; case MAP_ELEMENT_TYPE_PATH: { // TODO: use these uint8 pathType, pathDirection; pathType = element->properties.path.type >> 2; pathDirection = element->properties.path.type & 3; } sprintf( buffer, "Path (%s)", "" // TODO: queue? has bins? has benches? e.t.c. ); type_name = buffer; break; case MAP_ELEMENT_TYPE_TRACK: type_name = "Track"; // TODO: show type? break; case MAP_ELEMENT_TYPE_SCENERY: sprintf( buffer, "Scenery (%s)", language_get_string(g_smallSceneryEntries[element->properties.scenery.type]->name) ); type_name = buffer; break; case MAP_ELEMENT_TYPE_ENTRANCE: sprintf( buffer, "Entrance (%s)", language_get_string(STR_TILE_INSPECTOR_ENTRANCE_START + element->properties.entrance.type) ); type_name = buffer; break; case MAP_ELEMENT_TYPE_FENCE: sprintf( buffer, "Fence (%s)", language_get_string(g_wallSceneryEntries[element->properties.scenery.type]->name) ); type_name = buffer; break; case MAP_ELEMENT_TYPE_SCENERY_MULTIPLE: type_name = "Scenery multiple"; break; case MAP_ELEMENT_TYPE_BANNER: sprintf( buffer, "Banner (%d)", element->properties.banner.index ); type_name = buffer; break; } gfx_draw_string(dpi, type_name, 12, x, y); gfx_draw_string_left(dpi, 5182, &base_height, 12, x + 200, y); gfx_draw_string_left(dpi, 5182, &clearance_height, 12, x + 280, y); uint8 flags = element->flags; char j; buffer[8] = '\0'; for (j = 7; j >= 0; j--, flags >>= 1) { buffer[j] = flags & 1 ? '1' : '0'; } gfx_draw_string(dpi, buffer, 12, x + 390, y); y -= 11; i++; } while (!map_element_is_last_for_tile(element++)); }
/** * * rct2: 0x0068B3FB */ static void sub_68B3FB(sint32 x, sint32 y) { rct_drawpixelinfo *dpi = unk_140E9A8; gLeftTunnelCount = 0; gRightTunnelCount = 0; gLeftTunnels[0] = (tunnel_entry){0xFF, 0xFF}; gRightTunnels[0] = (tunnel_entry){0xFF, 0xFF}; gVerticalTunnelHeight = 0xFF; #ifndef NO_RCT2 RCT2_GLOBAL(0x009DE56A, uint16) = x; RCT2_GLOBAL(0x009DE56E, uint16) = y; #endif gPaintMapPosition.x = x; gPaintMapPosition.y = y; rct_map_element* map_element = map_get_first_element_at(x >> 5, y >> 5); uint8 rotation = get_current_rotation(); /* Check if the first (lowest) map_element is below the clip * height. */ if ((gCurrentViewportFlags & VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT) && (map_element->base_height > gClipHeight)) { blank_tiles_paint(x, y); return; } sint32 dx = 0; switch (rotation) { case 0: dx = x + y; break; case 1: x += 32; dx = y - x; break; case 2: x += 32; y += 32; dx = -(x + y); break; case 3: y += 32; dx = x - y; break; } dx >>= 1; // Display little yellow arrow when building footpaths? if ((gMapSelectFlags & MAP_SELECT_FLAG_ENABLE_ARROW) && gPaintMapPosition.x == gMapSelectArrowPosition.x && gPaintMapPosition.y == gMapSelectArrowPosition.y ) { uint8 arrowRotation = (rotation + (gMapSelectArrowDirection & 3)) & 3; uint32 imageId = arrowRotation + (gMapSelectArrowDirection & 0xFC) + 0x20900C27; sint32 arrowZ = gMapSelectArrowPosition.z; gUnk9DE568 = x; gUnk9DE56C = y; gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_NONE; sub_98197C(imageId, 0, 0, 32, 32, 0xFF, arrowZ, 0, 0, arrowZ + 18, rotation); } sint32 bx = dx + 52; if (bx <= dpi->y) return; const rct_map_element* element = map_element;//push map_element sint16 max_height = 0; do{ max_height = max(max_height, element->clearance_height); } while (!map_element_is_last_for_tile(element++)); element--; if (map_element_get_type(element) == MAP_ELEMENT_TYPE_SURFACE && (map_get_water_height(element) > 0)) { max_height = map_get_water_height(element) * 2; } max_height *= 8; dx -= max_height + 32; element = map_element;//pop map_element dx -= dpi->height; if (dx >= dpi->y) return; gUnk9DE568 = x; gUnk9DE56C = y; gDidPassSurface = false; do { // Only paint map_elements below the clip height. if ((gCurrentViewportFlags & VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT) && (map_element->base_height > gClipHeight)) break; sint32 direction = map_element_get_direction_with_offset(map_element, rotation); sint32 height = map_element->base_height * 8; rct_xy16 dword_9DE574 = gPaintMapPosition; g_currently_drawn_item = map_element; // Setup the painting of for example: the underground, signs, rides, scenery, etc. switch (map_element_get_type(map_element)) { case MAP_ELEMENT_TYPE_SURFACE: surface_paint(direction, height, map_element); break; case MAP_ELEMENT_TYPE_PATH: path_paint(direction, height, map_element); break; case MAP_ELEMENT_TYPE_TRACK: track_paint(direction, height, map_element); break; case MAP_ELEMENT_TYPE_SCENERY: scenery_paint(direction, height, map_element); break; case MAP_ELEMENT_TYPE_ENTRANCE: entrance_paint(direction, height, map_element); break; case MAP_ELEMENT_TYPE_WALL: fence_paint(direction, height, map_element); break; case MAP_ELEMENT_TYPE_SCENERY_MULTIPLE: scenery_multiple_paint(direction, height, map_element); break; case MAP_ELEMENT_TYPE_BANNER: banner_paint(direction, height, map_element); break; // A corrupt element inserted by OpenRCT2 itself, which skips the drawing of the next element only. case MAP_ELEMENT_TYPE_CORRUPT: if (map_element_is_last_for_tile(map_element)) return; map_element++; break; default: // An undefined map element is most likely a corrupt element inserted by 8 cars' MOM feature to skip drawing of all elements after it. return; } gPaintMapPosition = dword_9DE574; } while (!map_element_is_last_for_tile(map_element++)); if (!gShowSupportSegmentHeights) { return; } if (map_element_get_type(map_element - 1) == MAP_ELEMENT_TYPE_SURFACE) { return; } static const sint32 segmentPositions[][3] = { {0, 6, 2}, {5, 4, 8}, {1, 7, 3}, }; for (sint32 sy = 0; sy < 3; sy++) { for (sint32 sx = 0; sx < 3; sx++) { uint16 segmentHeight = gSupportSegments[segmentPositions[sy][sx]].height; sint32 imageColourFlats = 0b101111 << 19 | IMAGE_TYPE_TRANSPARENT; if (segmentHeight == 0xFFFF) { segmentHeight = gSupport.height; // white: 0b101101 imageColourFlats = 0b111011 << 19 | IMAGE_TYPE_TRANSPARENT; } // Only draw supports below the clipping height. if ((gCurrentViewportFlags & VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT) && (segmentHeight > gClipHeight)) continue; sint32 xOffset = sy * 10; sint32 yOffset = -22 + sx * 10; paint_struct * ps = sub_98197C(5504 | imageColourFlats, xOffset, yOffset, 10, 10, 1, segmentHeight, xOffset + 1, yOffset + 16, segmentHeight, get_current_rotation()); if (ps != NULL) { ps->flags &= PAINT_STRUCT_FLAG_IS_MASKED; ps->colour_image_id = COLOUR_BORDEAUX_RED; } } } }
/** * * rct2: 0x006E2712 */ void scenery_remove_ghost_tool_placement(){ sint16 x, y, z; x = RCT2_GLOBAL(RCT2_ADDRESS_GHOST_SCENERY_X, sint16); y = RCT2_GLOBAL(RCT2_ADDRESS_GHOST_SCENERY_Y, sint16); z = RCT2_GLOBAL(RCT2_ADDRESS_GHOST_SCENERY_Z, uint8); if (RCT2_GLOBAL(RCT2_ADDRESS_GHOST_SCENERY_TYPE, uint8) & (1 << 0)){ RCT2_GLOBAL(RCT2_ADDRESS_GHOST_SCENERY_TYPE, uint8) &= ~(1 << 0); game_do_command( x, 105 | (RCT2_GLOBAL(RCT2_ADDRESS_SCENERY_MAP_ELEMENT_TYPE, uint8) << 8), y, z | (RCT2_GLOBAL(RCT2_ADDRESS_SCENERY_SELECTED_OBJECT, uint8) << 8), GAME_COMMAND_REMOVE_SCENERY, 0, 0); } if (RCT2_GLOBAL(RCT2_ADDRESS_GHOST_SCENERY_TYPE, uint8) & (1 << 1)){ RCT2_GLOBAL(RCT2_ADDRESS_GHOST_SCENERY_TYPE, uint8) &= ~(1 << 1); rct_map_element* map_element = map_get_first_element_at(x / 32, y / 32); do{ if (map_element_get_type(map_element) != MAP_ELEMENT_TYPE_PATH) continue; if (map_element->base_height != z) continue; game_do_command( x, 233 | (RCT2_GLOBAL(RCT2_ADDRESS_SCENERY_TARGET_PATH_INCLINE, uint8) << 8), y, z | (RCT2_GLOBAL(RCT2_ADDRESS_SCENERY_TARGET_PATH_TYPE, uint8) << 8), GAME_COMMAND_PLACE_PATH, RCT2_GLOBAL(RCT2_ADDRESS_GHOST_SCENERY_PATH_OBJECT_TYPE, uint32) & 0xFFFF0000, 0); break; } while (!map_element_is_last_for_tile(map_element++)); } if (RCT2_GLOBAL(RCT2_ADDRESS_GHOST_SCENERY_TYPE, uint8) & (1 << 2)){ RCT2_GLOBAL(RCT2_ADDRESS_GHOST_SCENERY_TYPE, uint8) &= ~(1 << 2); game_do_command( x, 105 | (RCT2_GLOBAL(RCT2_ADDRESS_SCENERY_MAP_ELEMENT_TYPE, uint8) << 8), y, RCT2_GLOBAL(RCT2_ADDRESS_GHOST_SCENERY_WALL_ROTATION, uint8) |(z << 8), GAME_COMMAND_REMOVE_FENCE, 0, 0); } if (RCT2_GLOBAL(RCT2_ADDRESS_GHOST_SCENERY_TYPE, uint8) & (1 << 3)){ RCT2_GLOBAL(RCT2_ADDRESS_GHOST_SCENERY_TYPE, uint8) &= ~(1 << 3); game_do_command( x, 105 | (RCT2_GLOBAL(RCT2_ADDRESS_SCENERY_ROTATION, uint8) << 8), y, z, GAME_COMMAND_REMOVE_LARGE_SCENERY, 0, 0); } if (RCT2_GLOBAL(RCT2_ADDRESS_GHOST_SCENERY_TYPE, uint8) & (1 << 4)){ RCT2_GLOBAL(RCT2_ADDRESS_GHOST_SCENERY_TYPE, uint8) &= ~(1 << 4); game_do_command( x, 105, y, z | (RCT2_GLOBAL(RCT2_ADDRESS_SCENERY_ROTATION, uint8) << 8), GAME_COMMAND_REMOVE_BANNER, 0, 0); } }
/** * * rct2: 0x006BA305 */ void window_banner_open(rct_windownumber number) { rct_window* w; rct_widget *viewportWidget; // Check if window is already open w = window_bring_to_front_by_number(WC_BANNER, number); if (w != NULL) return; w = window_create_auto_pos(WW, WH, &window_banner_events, WC_BANNER, WF_NO_SCROLLING); w->widgets = window_banner_widgets; w->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_BANNER_TEXT) | (1 << WIDX_BANNER_NO_ENTRY) | (1 << WIDX_BANNER_DEMOLISH) | (1 << WIDX_MAIN_COLOUR) | (1 << WIDX_TEXT_COLOUR_DROPDOWN) | (1 << WIDX_TEXT_COLOUR_DROPDOWN_BUTTON); w->number = number; window_init_scroll_widgets(w); sint32 view_x = gBanners[w->number].x << 5; sint32 view_y = gBanners[w->number].y << 5; rct_map_element* map_element = map_get_first_element_at(view_x / 32, view_y / 32); while(1) { if ( (map_element_get_type(map_element) == MAP_ELEMENT_TYPE_BANNER) && (map_element->properties.banner.index == w->number) ) { break; } map_element++; } sint32 view_z = map_element->base_height<<3; w->frame_no = view_z; view_x += 16; view_y += 16; // Create viewport viewportWidget = &window_banner_widgets[WIDX_VIEWPORT]; viewport_create( w, w->x + viewportWidget->left + 1, w->y + viewportWidget->top + 1, (viewportWidget->right - viewportWidget->left) - 2, (viewportWidget->bottom - viewportWidget->top) - 2, 0, view_x, view_y, view_z, 0, -1 ); w->viewport->flags = gConfigGeneral.always_show_gridlines ? VIEWPORT_FLAG_GRIDLINES : 0; window_invalidate(w); }
/* 0x006E2712 */ void scenery_remove_ghost_tool_placement(){ sint16 x, y, z; x = RCT2_GLOBAL(0x00F64EC4, sint16); y = RCT2_GLOBAL(0x00F64EC6, sint16); z = RCT2_GLOBAL(0x00F64F09, uint8); if (RCT2_GLOBAL(0x00F64F0D, uint8) & (1 << 0)){ RCT2_GLOBAL(0x00F64F0D, uint8) &= ~(1 << 0); game_do_command( x, 105 | (RCT2_GLOBAL(0x00F64F0C, uint8) << 8), y, z | (RCT2_GLOBAL(0x00F64EDA, uint8) << 8), GAME_COMMAND_REMOVE_SCENERY, 0, 0); } if (RCT2_GLOBAL(0x00F64F0D, uint8) & (1 << 1)){ RCT2_GLOBAL(0x00F64F0D, uint8) &= ~(1 << 1); rct_map_element* map_element = map_get_first_element_at(x / 32, y / 32); do{ if (map_element_get_type(map_element) != MAP_ELEMENT_TYPE_PATH) continue; if (map_element->base_height != z) continue; game_do_command( x, 233 | (RCT2_GLOBAL(0x00F64F0F, uint8) << 8), y, z | (RCT2_GLOBAL(0x00F64F10, uint8) << 8), GAME_COMMAND_PLACE_PATH, RCT2_GLOBAL(0x00F64EAC, uint32) & 0xFFFF0000, 0); break; } while (!map_element_is_last_for_tile(map_element++)); } if (RCT2_GLOBAL(0x00F64F0D, uint8) & (1 << 2)){ RCT2_GLOBAL(0x00F64F0D, uint8) &= ~(1 << 2); game_do_command( x, 105 | (RCT2_GLOBAL(0x00F64F0C, uint8) << 8), y, RCT2_GLOBAL(0x00F64F11, uint8) |(z << 8), GAME_COMMAND_REMOVE_FENCE, 0, 0); } if (RCT2_GLOBAL(0x00F64F0D, uint8) & (1 << 3)){ RCT2_GLOBAL(0x00F64F0D, uint8) &= ~(1 << 3); game_do_command( x, 105 | (RCT2_GLOBAL(0x00F64EC0, uint8) << 8), y, z, GAME_COMMAND_REMOVE_LARGE_SCENERY, 0, 0); } if (RCT2_GLOBAL(0x00F64F0D, uint8) & (1 << 4)){ RCT2_GLOBAL(0x00F64F0D, uint8) &= ~(1 << 4); game_do_command( x, 105, y, z | (RCT2_GLOBAL(0x00F64EC0, uint8) << 8), GAME_COMMAND_REMOVE_BANNER, 0, 0); } }