/obj/structure/window name = "window" desc = "A window." icon_state = "window" density = TRUE layer = ABOVE_OBJ_LAYER //Just above doors pressure_resistance = 4*ONE_ATMOSPHERE anchored = TRUE flags = ON_BORDER flags_2 = RAD_PROTECT_CONTENTS_2 can_be_unanchored = TRUE max_integrity = 25 resistance_flags = ACID_PROOF armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 100) rad_insulation = RAD_VERY_LIGHT_INSULATION var/ini_dir = null var/state = WINDOW_OUT_OF_FRAME var/reinf = FALSE var/heat_resistance = 800 var/decon_speed = null var/fulltile = FALSE var/shardtype = /obj/item/shard var/glass_decal = /obj/effect/decal/cleanable/glass var/glass_type = /obj/item/stack/sheet/glass var/glass_amount = 1 var/mutable_appearance/crack_overlay var/real_explosion_block //ignore this, just use explosion_block var/breaksound = "shatter" var/hitsound = 'sound/effects/Glasshit.ogg' /// Used to restore colours from polarised glass var/old_color /obj/structure/window/examine(mob/user) . = ..() if(reinf) if(anchored && state == WINDOW_SCREWED_TO_FRAME) . += "The window is screwed to the frame." else if(anchored && state == WINDOW_IN_FRAME) . += "The window is unscrewed but pried into the frame." else if(anchored && state == WINDOW_OUT_OF_FRAME) . += "The window is out of the frame, but could be pried in. It is screwed to the floor." else if(!anchored) . += "The window is unscrewed from the floor, and could be deconstructed by wrenching." else if(anchored) . += "The window is screwed to the floor." else . += "The window is unscrewed from the floor, and could be deconstructed by wrenching." if(!anchored && !fulltile) . += "Alt-click to rotate it." /obj/structure/window/Initialize(mapload, direct) . = ..() if(direct) setDir(direct) if(reinf && anchored) state = WINDOW_SCREWED_TO_FRAME ini_dir = dir if(fulltile) setDir() if(decon_speed == null && fulltile) decon_speed = 2 SECONDS //windows only block while reinforced and fulltile, so we'll use the proc real_explosion_block = explosion_block explosion_block = EXPLOSION_BLOCK_PROC air_update_turf(TRUE) /obj/structure/window/proc/toggle_polarization() if(opacity) if(!old_color) old_color = "#FFFFFF" animate(src, color = old_color, time = 0.5 SECONDS) set_opacity(FALSE) else old_color = color animate(src, color = "#222222", time = 0.5 SECONDS) set_opacity(TRUE) /obj/structure/window/narsie_act() color = NARSIE_WINDOW_COLOUR /obj/structure/window/rpd_act() return /obj/structure/window/singularity_pull(S, current_size) ..() if(current_size >= STAGE_FIVE) deconstruct(FALSE) /obj/structure/window/setDir(direct) if(!fulltile) ..() else ..(FULLTILE_WINDOW_DIR) /obj/structure/window/CanPass(atom/movable/mover, turf/target, height=0) if(istype(mover) && mover.checkpass(PASSGLASS)) return 1 if(dir == FULLTILE_WINDOW_DIR) return 0 //full tile window, you can't move into it! if(get_dir(loc, target) == dir) return !density if(istype(mover, /obj/structure/window)) var/obj/structure/window/W = mover if(!valid_window_location(loc, W.ini_dir)) return FALSE else if(istype(mover, /obj/structure/windoor_assembly)) var/obj/structure/windoor_assembly/W = mover if(!valid_window_location(loc, W.ini_dir)) return FALSE else if(istype(mover, /obj/machinery/door/window) && !valid_window_location(loc, mover.dir)) return FALSE return 1 /obj/structure/window/CheckExit(atom/movable/O, target) if(istype(O) && O.checkpass(PASSGLASS)) return 1 if(get_dir(O.loc, target) == dir) return 0 return 1 /obj/structure/window/CanAStarPass(ID, to_dir) if(!density) return 1 if((dir == FULLTILE_WINDOW_DIR) || (dir == to_dir)) return 0 return 1 /obj/structure/window/attack_tk(mob/user) user.changeNext_move(CLICK_CD_MELEE) user.visible_message("Something knocks on [src].") add_fingerprint(user) playsound(src, 'sound/effects/glassknock.ogg', 50, 1) /obj/structure/window/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) if(!can_be_reached(user)) return 1 . = ..() /obj/structure/window/attack_hand(mob/user) if(!can_be_reached(user)) return if(user.a_intent == INTENT_HARM) user.changeNext_move(CLICK_CD_MELEE) playsound(src, 'sound/effects/glassknock.ogg', 80, 1) user.visible_message("[user] bangs against [src]!", \ "You bang against [src]!", \ "You hear a banging sound.") add_fingerprint(user) else user.changeNext_move(CLICK_CD_MELEE) playsound(src, 'sound/effects/glassknock.ogg', 80, 1) user.visible_message("[user] knocks on [src].", \ "You knock on [src].", \ "You hear a knocking sound.") add_fingerprint(user) /obj/structure/window/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) //used by attack_alien, attack_animal, and attack_slime if(!can_be_reached(user)) return ..() /obj/structure/window/attackby(obj/item/I, mob/living/user, params) if(!can_be_reached(user)) return 1 //skip the afterattack add_fingerprint(user) if(istype(I, /obj/item/stack/rods) && user.a_intent == INTENT_HELP) for(var/obj/structure/grille/G in get_turf(src)) if(!G.broken) continue to_chat(user, "You start rebuilding the broken grille.") if(do_after(user, 4 SECONDS, FALSE, G)) G.repair(user, I) else if(istype(I, /obj/item/grab) && get_dist(src, user) < 2) var/obj/item/grab/G = I if(isliving(G.affecting)) var/mob/living/M = G.affecting var/state = G.state qdel(I) //gotta delete it here because if window breaks, it won't get deleted switch(state) if(1) M.visible_message("[user] slams [M] against \the [src]!") M.apply_damage(7) take_damage(10) if(2) M.visible_message("[user] bashes [M] against \the [src]!") if(prob(50)) M.Weaken(1) M.apply_damage(10) take_damage(25) if(3) M.visible_message("[user] crushes [M] against \the [src]!") M.Weaken(5) M.apply_damage(20) take_damage(50) if(4) visible_message("[user] smashes [M] against \the [src]!") M.Weaken(5) M.apply_damage(30) take_damage(75) else return ..() /obj/structure/window/crowbar_act(mob/user, obj/item/I) if(!reinf) return if(state != WINDOW_OUT_OF_FRAME && state != WINDOW_IN_FRAME) return if(flags & NODECONSTRUCT) return . = TRUE if(!can_be_reached(user)) return if(decon_speed) // Only show this if it actually takes time to_chat(user, "You begin to lever the window [state == WINDOW_OUT_OF_FRAME ? "into":"out of"] the frame...") if(!I.use_tool(src, user, decon_speed, volume = I.tool_volume, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored))) return state = (state == WINDOW_OUT_OF_FRAME ? WINDOW_IN_FRAME : WINDOW_OUT_OF_FRAME) to_chat(user, "You pry the window [state == WINDOW_IN_FRAME ? "into":"out of"] the frame.") /obj/structure/window/screwdriver_act(mob/user, obj/item/I) if(flags & NODECONSTRUCT) return . = TRUE if(!can_be_reached(user)) return if(reinf) if(state == WINDOW_SCREWED_TO_FRAME || state == WINDOW_IN_FRAME) if(decon_speed) to_chat(user, "You begin to [state == WINDOW_SCREWED_TO_FRAME ? "unscrew the window from":"screw the window to"] the frame...") if(!I.use_tool(src, user, decon_speed, volume = I.tool_volume, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored))) return state = (state == WINDOW_IN_FRAME ? WINDOW_SCREWED_TO_FRAME : WINDOW_IN_FRAME) to_chat(user, "You [state == WINDOW_IN_FRAME ? "unfasten the window from":"fasten the window to"] the frame.") else if(state == WINDOW_OUT_OF_FRAME) if(decon_speed) to_chat(user, "You begin to [anchored ? "unscrew the frame from":"screw the frame to"] the floor...") if(!I.use_tool(src, user, decon_speed, volume = I.tool_volume, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored))) return anchored = !anchored air_update_turf(TRUE) update_nearby_icons() to_chat(user, "You [anchored ? "fasten the frame to":"unfasten the frame from"] the floor.") else //if we're not reinforced, we don't need to check or update state if(decon_speed) to_chat(user, "You begin to [anchored ? "unscrew the window from":"screw the window to"] the floor...") if(!I.use_tool(src, user, decon_speed, volume = I.tool_volume, extra_checks = CALLBACK(src, .proc/check_anchored, anchored))) return anchored = !anchored air_update_turf(TRUE) update_nearby_icons() to_chat(user, "You [anchored ? "fasten the window to":"unfasten the window from"] the floor.") /obj/structure/window/wrench_act(mob/user, obj/item/I) if(flags & NODECONSTRUCT) return if(anchored) return . = TRUE if(!can_be_reached(user)) return if(decon_speed) TOOL_ATTEMPT_DISMANTLE_MESSAGE if(!I.use_tool(src, user, decon_speed, volume = I.tool_volume, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored))) return var/obj/item/stack/sheet/G = new glass_type(user.loc, glass_amount) G.add_fingerprint(user) playsound(src, 'sound/items/deconstruct.ogg', 50, 1) to_chat(user, "You successfully disassemble [src].") qdel(src) /obj/structure/window/welder_act(mob/user, obj/item/I) if(user.a_intent != INTENT_HELP) return . = TRUE if(!can_be_reached(user)) return if(obj_integrity >= max_integrity) to_chat(user, "[src] is already in good condition!") return if(!I.tool_use_check(user, 0)) return WELDER_ATTEMPT_REPAIR_MESSAGE if(I.use_tool(src, user, 40, volume = I.tool_volume)) obj_integrity = max_integrity update_nearby_icons() WELDER_REPAIR_SUCCESS_MESSAGE /obj/structure/window/proc/check_state(checked_state) if(state == checked_state) return TRUE /obj/structure/window/proc/check_anchored(checked_anchored) if(anchored == checked_anchored) return TRUE /obj/structure/window/proc/check_state_and_anchored(checked_state, checked_anchored) return check_state(checked_state) && check_anchored(checked_anchored) /obj/structure/window/mech_melee_attack(obj/mecha/M) if(!can_be_reached()) return ..() /obj/structure/window/proc/can_be_reached(mob/user) if(!fulltile) if(get_dir(user, src) & dir) for(var/obj/O in loc) if(!O.CanPass(user, user.loc, 1)) return 0 return 1 /obj/structure/window/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) . = ..() if(.) //received damage update_nearby_icons() /obj/structure/window/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) if(damage_amount) playsound(src, hitsound, 75, TRUE) else playsound(src, 'sound/weapons/tap.ogg', 50, TRUE) if(BURN) playsound(src, 'sound/items/Welder.ogg', 100, TRUE) /obj/structure/window/deconstruct(disassembled = TRUE) if(QDELETED(src)) return if(!disassembled) playsound(src, breaksound, 70, 1) if(!(flags & NODECONSTRUCT)) for(var/obj/item/shard/debris in spawnDebris(drop_location())) transfer_fingerprints_to(debris) // transfer fingerprints to shards only qdel(src) update_nearby_icons() /obj/structure/window/proc/spawnDebris(location) . = list() . += new shardtype(location) . += new glass_decal(location) if(reinf) . += new /obj/item/stack/rods(location, (fulltile ? 2 : 1)) if(fulltile) . += new shardtype(location) /obj/structure/window/verb/rotate() set name = "Rotate Window Counter-Clockwise" set category = "Object" set src in oview(1) if(usr.incapacitated()) return if(anchored) to_chat(usr, "[src] cannot be rotated while it is fastened to the floor!") return FALSE var/target_dir = turn(dir, 90) if(!valid_window_location(loc, target_dir)) to_chat(usr, "[src] cannot be rotated in that direction!") return FALSE setDir(target_dir) air_update_turf(1) ini_dir = dir add_fingerprint(usr) return TRUE /obj/structure/window/verb/revrotate() set name = "Rotate Window Clockwise" set category = "Object" set src in oview(1) if(usr.incapacitated()) return if(anchored) to_chat(usr, "[src] cannot be rotated while it is fastened to the floor!") return FALSE var/target_dir = turn(dir, 270) if(!valid_window_location(loc, target_dir)) to_chat(usr, "[src] cannot be rotated in that direction!") return FALSE setDir(target_dir) ini_dir = dir add_fingerprint(usr) return TRUE /obj/structure/window/AltClick(mob/user) if(fulltile) // Can't rotate these. return ..() if(user.incapacitated()) to_chat(user, "You can't do that right now!") return if(!Adjacent(user)) to_chat(user, "Move closer to the window!") return if(anchored) to_chat(user, "[src] cannot be rotated while it is fastened to the floor!") return FALSE var/target_dir = turn(dir, 270) if(!valid_window_location(loc, target_dir)) target_dir = turn(dir, 90) if(!valid_window_location(loc, target_dir)) to_chat(user, "There is no room to rotate [src].") return FALSE setDir(target_dir) ini_dir = dir add_fingerprint(user) return TRUE /obj/structure/window/Destroy() density = FALSE air_update_turf(1) update_nearby_icons() return ..() /obj/structure/window/Move() var/turf/T = loc . = ..() setDir(ini_dir) move_update_air(T) /obj/structure/window/CanAtmosPass(turf/T) if(!anchored || !density) return TRUE return !(FULLTILE_WINDOW_DIR == dir || dir == get_dir(loc, T)) //This proc is used to update the icons of nearby windows. /obj/structure/window/proc/update_nearby_icons() update_icon() if(smooth) queue_smooth_neighbors(src) /obj/structure/window/update_icon() if(!QDELETED(src)) if(!fulltile) return var/ratio = obj_integrity / max_integrity ratio = CEILING(ratio * 4, 1) * 25 if(smooth) queue_smooth(src) cut_overlay(crack_overlay) if(ratio > 75) return crack_overlay = mutable_appearance('icons/obj/structures.dmi', "damage[ratio]", -(layer+0.1)) add_overlay(crack_overlay) /obj/structure/window/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) ..() if(exposed_temperature > (T0C + heat_resistance)) take_damage(round(exposed_volume / 100), BURN, 0, 0) /obj/structure/window/GetExplosionBlock() return reinf && fulltile ? real_explosion_block : 0 /obj/structure/window/basic desc = "It looks thin and flimsy. A few knocks with... anything, really should shatter it." /obj/structure/window/reinforced name = "reinforced window" desc = "It looks rather strong. Might take a few good hits to shatter it." icon_state = "rwindow" reinf = TRUE heat_resistance = 1600 armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 25, BIO = 100, RAD = 100, FIRE = 80, ACID = 100) rad_insulation = RAD_HEAVY_INSULATION max_integrity = 50 explosion_block = 1 glass_type = /obj/item/stack/sheet/rglass /obj/structure/window/reinforced/tinted name = "tinted window" desc = "It looks rather strong and opaque. Might take a few good hits to shatter it." icon_state = "twindow" opacity = 1 /obj/structure/window/reinforced/tinted/frosted name = "frosted window" desc = "It looks rather strong and frosted over. Looks like it might take a few less hits then a normal reinforced window." icon_state = "fwindow" max_integrity = 30 /obj/structure/window/reinforced/polarized name = "electrochromic window" desc = "Adjusts its tint with voltage. Might take a few good hits to shatter it." glass_amount = 2 var/id /obj/machinery/button/windowtint name = "window tint control" icon = 'icons/obj/power.dmi' icon_state = "light0" desc = "A remote control switch for polarized windows." var/range = 7 var/id = 0 var/active = 0 /obj/machinery/button/windowtint/Initialize(mapload, w_dir = null) . = ..() switch(w_dir) if(NORTH) pixel_y = 25 if(SOUTH) pixel_y = -25 if(EAST) pixel_x = 25 if(WEST) pixel_x = -25 /obj/machinery/button/windowtint/attack_hand(mob/user) if(..()) return TRUE toggle_tint() /obj/machinery/button/windowtint/wrench_act(mob/user, obj/item/I) . = TRUE if(!I.tool_use_check(user, 0)) return user.visible_message("[user] starts unwrenching [src] from the wall...", "You are unwrenching [src] from the wall...", "You hear ratcheting.") if(!I.use_tool(src, user, 50, volume = I.tool_volume)) return WRENCH_UNANCHOR_WALL_MESSAGE new /obj/item/mounted/frame/light_switch/windowtint(get_turf(src)) qdel(src) /obj/machinery/button/windowtint/proc/toggle_tint() use_power(5) active = !active update_icon() for(var/obj/structure/window/reinforced/polarized/W in range(src,range)) if(W.id == src.id || !W.id) W.toggle_polarization() for(var/obj/structure/window/full/reinforced/polarized/W in range(src, range)) if(W.id == id || !W.id) W.toggle_polarization() /obj/machinery/button/windowtint/power_change() ..() if(active && !powered(power_channel)) toggle_tint() /obj/machinery/button/windowtint/update_icon() icon_state = "light[active]" /obj/structure/window/plasmabasic name = "plasma window" desc = "A window made out of a plasma-silicate alloy. It looks insanely tough to break and burn through." icon_state = "plasmawindow" glass_decal = /obj/effect/decal/cleanable/glass/plasma shardtype = /obj/item/shard/plasma glass_type = /obj/item/stack/sheet/plasmaglass heat_resistance = 32000 max_integrity = 150 explosion_block = 1 armor = list(MELEE = 75, BULLET = 5, LASER = 0, ENERGY = 0, BOMB = 45, BIO = 100, RAD = 100, FIRE = 99, ACID = 100) rad_insulation = RAD_NO_INSULATION /obj/structure/window/plasmabasic/BlockSuperconductivity() return 1 /obj/structure/window/plasmareinforced name = "reinforced plasma window" desc = "A plasma-glass alloy window, with rods supporting it. It looks hopelessly tough to break. It also looks completely fireproof, considering how basic plasma windows are insanely fireproof." icon_state = "plasmarwindow" glass_decal = /obj/effect/decal/cleanable/glass/plasma shardtype = /obj/item/shard/plasma glass_type = /obj/item/stack/sheet/plasmarglass reinf = TRUE max_integrity = 500 explosion_block = 2 armor = list(MELEE = 85, BULLET = 20, LASER = 0, ENERGY = 0, BOMB = 60, BIO = 100, RAD = 100, FIRE = 99, ACID = 100) rad_insulation = RAD_NO_INSULATION damage_deflection = 21 /obj/structure/window/plasmareinforced/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) return /obj/structure/window/plasmareinforced/BlockSuperconductivity() return 1 //okay this SHOULD MAKE THE TOXINS CHAMBER WORK /obj/structure/window/full glass_amount = 2 dir = FULLTILE_WINDOW_DIR level = 3 fulltile = TRUE flags = PREVENT_CLICK_UNDER /obj/structure/window/full/basic desc = "It looks thin and flimsy. A few knocks with... anything, really should shatter it." icon = 'icons/obj/smooth_structures/window.dmi' icon_state = "window" max_integrity = 50 smooth = SMOOTH_TRUE canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/polarized, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass) /obj/structure/window/full/plasmabasic name = "plasma window" desc = "A plasma-glass alloy window. It looks insanely tough to break. It appears it's also insanely tough to burn through." icon = 'icons/obj/smooth_structures/plasma_window.dmi' icon_state = "plasmawindow" glass_decal = /obj/effect/decal/cleanable/glass/plasma shardtype = /obj/item/shard/plasma glass_type = /obj/item/stack/sheet/plasmaglass heat_resistance = 32000 max_integrity = 300 smooth = SMOOTH_TRUE canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/polarized, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass) explosion_block = 1 armor = list(MELEE = 75, BULLET = 5, LASER = 0, ENERGY = 0, BOMB = 45, BIO = 100, RAD = 100, FIRE = 99, ACID = 100) rad_insulation = RAD_NO_INSULATION /obj/structure/window/full/plasmareinforced name = "reinforced plasma window" desc = "A plasma-glass alloy window, with rods supporting it. It looks hopelessly tough to break. It also looks completely fireproof, considering how basic plasma windows are insanely fireproof." icon = 'icons/obj/smooth_structures/rplasma_window.dmi' icon_state = "rplasmawindow" glass_decal = /obj/effect/decal/cleanable/glass/plasma shardtype = /obj/item/shard/plasma glass_type = /obj/item/stack/sheet/plasmarglass smooth = SMOOTH_TRUE canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/polarized, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass) reinf = TRUE max_integrity = 1000 explosion_block = 2 armor = list(MELEE = 85, BULLET = 20, LASER = 0, ENERGY = 0, BOMB = 60, BIO = 100, RAD = 100, FIRE = 99, ACID = 100) rad_insulation = RAD_NO_INSULATION /obj/structure/window/full/plasmareinforced/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) return /obj/structure/window/full/reinforced name = "reinforced window" desc = "It looks rather strong. Might take a few good hits to shatter it." icon = 'icons/obj/smooth_structures/reinforced_window.dmi' icon_state = "r_window" smooth = SMOOTH_TRUE canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/polarized, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass) max_integrity = 100 reinf = TRUE heat_resistance = 1600 armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 25, BIO = 100, RAD = 100, FIRE = 80, ACID = 100) rad_insulation = RAD_HEAVY_INSULATION explosion_block = 1 glass_type = /obj/item/stack/sheet/rglass /obj/structure/window/full/reinforced/polarized name = "electrochromic window" desc = "Adjusts its tint with voltage. Might take a few good hits to shatter it." glass_amount = 4 var/id /obj/structure/window/full/reinforced/tinted name = "tinted window" desc = "It looks rather strong and opaque. Might take a few good hits to shatter it." icon = 'icons/obj/smooth_structures/tinted_window.dmi' icon_state = "tinted_window" opacity = 1 /obj/structure/window/full/reinforced/ice icon = 'icons/obj/smooth_structures/rice_window.dmi' icon_state = "ice_window" max_integrity = 150 /obj/structure/window/full/shuttle name = "shuttle window" desc = "A reinforced, air-locked pod window." icon = 'icons/obj/smooth_structures/shuttle_window.dmi' icon_state = "shuttle_window" max_integrity = 100 reinf = TRUE heat_resistance = 1600 explosion_block = 3 armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 100, RAD = 100, FIRE = 80, ACID = 100) smooth = SMOOTH_TRUE canSmoothWith = null glass_type = /obj/item/stack/sheet/titaniumglass /obj/structure/window/full/shuttle/narsie_act() color = "#3C3434" /obj/structure/window/full/shuttle/tinted opacity = TRUE /obj/structure/window/full/plastitanium name = "plastitanium window" desc = "An evil looking window of plasma and titanium." icon = 'icons/obj/smooth_structures/plastitanium_window.dmi' icon_state = "plastitanium_window" max_integrity = 100 reinf = TRUE heat_resistance = 1600 armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 100, RAD = 100, FIRE = 80, ACID = 100) rad_insulation = RAD_HEAVY_INSULATION smooth = SMOOTH_TRUE canSmoothWith = null explosion_block = 3 glass_type = /obj/item/stack/sheet/plastitaniumglass canSmoothWith = list(/turf/simulated/wall/indestructible/opsglass, /obj/structure/window/full/plastitanium) /obj/structure/window/reinforced/clockwork name = "brass window" desc = "A paper-thin pane of translucent yet reinforced brass." icon = 'icons/obj/smooth_structures/clockwork_window.dmi' icon_state = "clockwork_window_single" resistance_flags = FIRE_PROOF | ACID_PROOF max_integrity = 80 armor = list(MELEE = 60, BULLET = 25, LASER = 0, ENERGY = 0, BOMB = 25, BIO = 100, RAD = 100, FIRE = 80, ACID = 100) explosion_block = 2 //fancy AND hard to destroy. the most useful combination. glass_type = /obj/item/stack/tile/brass reinf = FALSE var/made_glow = FALSE /obj/structure/window/reinforced/clockwork/spawnDebris(location) . = list() . += new /obj/item/stack/tile/brass(location, (fulltile ? 2 : 1)) /obj/structure/window/reinforced/clockwork/setDir(direct) if(!made_glow) if(fulltile) new /obj/effect/temp_visual/ratvar/window(get_turf(src)) else var/obj/effect/E = new /obj/effect/temp_visual/ratvar/window/single(get_turf(src)) E.setDir(direct) made_glow = TRUE ..() /obj/structure/window/reinforced/clockwork/narsie_act() take_damage(rand(25, 75), BRUTE) if(src) var/previouscolor = color color = "#960000" animate(src, color = previouscolor, time = 8) /obj/structure/window/reinforced/clockwork/fulltile icon_state = "clockwork_window" smooth = SMOOTH_TRUE canSmoothWith = null fulltile = TRUE flags = PREVENT_CLICK_UNDER dir = FULLTILE_WINDOW_DIR max_integrity = 120 level = 3 glass_amount = 2