|
|
|
|
@@ -21,6 +21,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
|
|
|
|
|
var/ini_dir = null
|
|
|
|
|
var/state = WINDOW_OUT_OF_FRAME
|
|
|
|
|
var/reinf = FALSE
|
|
|
|
|
var/extra_reinforced = FALSE
|
|
|
|
|
var/heat_resistance = 800
|
|
|
|
|
var/decon_speed = 30
|
|
|
|
|
var/wtype = "glass"
|
|
|
|
|
@@ -65,6 +66,20 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
|
|
|
|
|
. += "<span class='notice'>The window is out of the frame, but could be <i>pried</i> in. It is <b>screwed</b> to the floor.</span>"
|
|
|
|
|
else if(!anchored)
|
|
|
|
|
. += "<span class='notice'>The window is <i>unscrewed</i> from the floor, and could be deconstructed by <b>wrenching</b>.</span>"
|
|
|
|
|
switch(state)
|
|
|
|
|
if(PRWINDOW_SECURE)
|
|
|
|
|
if(extra_reinforced)
|
|
|
|
|
. += "It's been screwed in with one way screws, you'd need to <b>heat their solder cover</b> to have any chance of backing them out."
|
|
|
|
|
else
|
|
|
|
|
. += "It's been screwed in with solid screws, you'd need to <b>screw them</b> out to unsecure the window."
|
|
|
|
|
if(PRWINDOW_BOLTS_HEATED)
|
|
|
|
|
. += "The solder cover melts away, and you'll likely be able to <b>unscrew them</b> now."
|
|
|
|
|
if(PRWINDOW_BOLTS_OUT)
|
|
|
|
|
. += "The screws have been removed, revealing a small gap you could fit a <b>prying tool</b> in."
|
|
|
|
|
if(PRWINDOW_POPPED)
|
|
|
|
|
. += "The main plate of the window has popped out of the frame, exposing some bars that look like they can be <b>cut</b>."
|
|
|
|
|
if(PRWINDOW_BARS_CUT)
|
|
|
|
|
. += "The main pane can be easily moved out of the way to reveal some <b>bolts</b> holding the frame in."
|
|
|
|
|
else
|
|
|
|
|
if(anchored)
|
|
|
|
|
. += "<span class='notice'>The window is <b>screwed</b> to the floor.</span>"
|
|
|
|
|
@@ -75,8 +90,13 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
|
|
|
|
|
. = ..()
|
|
|
|
|
if(direct)
|
|
|
|
|
setDir(direct)
|
|
|
|
|
if(reinf && anchored)
|
|
|
|
|
|
|
|
|
|
if(extra_reinforced && anchored)
|
|
|
|
|
state = PRWINDOW_SECURE
|
|
|
|
|
|
|
|
|
|
else if(reinf && anchored)
|
|
|
|
|
state = WINDOW_SCREWED_TO_FRAME
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(mapload && electrochromatic_id && electrochromatic_id[1] == "!")
|
|
|
|
|
electrochromatic_id = SSmapping.get_obfuscated_id(electrochromatic_id)
|
|
|
|
|
@@ -230,29 +250,26 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
|
|
|
|
|
make_electrochromatic(K.id)
|
|
|
|
|
qdel(K)
|
|
|
|
|
|
|
|
|
|
if(!(flags_1&NODECONSTRUCT_1))
|
|
|
|
|
if(!(flags_1 & NODECONSTRUCT_1) && !(state >= PRWINDOW_FRAME_BOLTED))
|
|
|
|
|
if(I.tool_behaviour == TOOL_SCREWDRIVER)
|
|
|
|
|
I.play_tool_sound(src, 75)
|
|
|
|
|
if(reinf)
|
|
|
|
|
if(state == WINDOW_SCREWED_TO_FRAME || state == WINDOW_IN_FRAME)
|
|
|
|
|
to_chat(user, "<span class='notice'>You begin to [state == WINDOW_SCREWED_TO_FRAME ? "unscrew the window from":"screw the window to"] the frame...</span>")
|
|
|
|
|
if(I.use_tool(src, user, decon_speed, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
|
|
|
|
|
if(state == WINDOW_SCREWED_TO_FRAME || state == WINDOW_IN_FRAME && anchored)
|
|
|
|
|
to_chat(user, "<span class='notice'>You begin to [state == WINDOW_SCREWED_TO_FRAME ? "unscrew the window from":"screw the window to"] the frame...</span>")
|
|
|
|
|
if(I.use_tool(src, user, decon_speed, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
|
|
|
|
|
if(extra_reinforced && state == WINDOW_IN_FRAME)
|
|
|
|
|
state = PRWINDOW_SECURE
|
|
|
|
|
else
|
|
|
|
|
state = (state == WINDOW_IN_FRAME ? WINDOW_SCREWED_TO_FRAME : WINDOW_IN_FRAME)
|
|
|
|
|
to_chat(user, "<span class='notice'>You [state == WINDOW_IN_FRAME ? "unfasten the window from":"fasten the window to"] the frame.</span>")
|
|
|
|
|
else if(state == WINDOW_OUT_OF_FRAME)
|
|
|
|
|
to_chat(user, "<span class='notice'>You begin to [anchored ? "unscrew the frame from":"screw the frame to"] the floor...</span>")
|
|
|
|
|
if(I.use_tool(src, user, decon_speed, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
|
|
|
|
|
setAnchored(!anchored)
|
|
|
|
|
to_chat(user, "<span class='notice'>You [anchored ? "fasten the frame to":"unfasten the frame from"] the floor.</span>")
|
|
|
|
|
else //if we're not reinforced, we don't need to check or update state
|
|
|
|
|
to_chat(user, "<span class='notice'>You begin to [anchored ? "unscrew the window from":"screw the window to"] the floor...</span>")
|
|
|
|
|
if(I.use_tool(src, user, decon_speed, extra_checks = CALLBACK(src, .proc/check_anchored, anchored)))
|
|
|
|
|
to_chat(user, "<span class='notice'>You [state == WINDOW_IN_FRAME ? "unfasten the window from":"fasten the window to"] the frame.</span>")
|
|
|
|
|
else if(state == WINDOW_OUT_OF_FRAME)
|
|
|
|
|
to_chat(user, "<span class='notice'>You begin to [anchored ? "unscrew the frame from":"screw the frame to"] the floor...</span>")
|
|
|
|
|
if(I.use_tool(src, user, decon_speed, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
|
|
|
|
|
setAnchored(!anchored)
|
|
|
|
|
to_chat(user, "<span class='notice'>You [anchored ? "fasten the window to":"unfasten the window from"] the floor.</span>")
|
|
|
|
|
to_chat(user, "<span class='notice'>You [anchored ? "fasten the frame to":"unfasten the frame from"] the floor.</span>")
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
else if(I.tool_behaviour == TOOL_CROWBAR && reinf && (state == WINDOW_OUT_OF_FRAME || state == WINDOW_IN_FRAME))
|
|
|
|
|
else if(I.tool_behaviour == TOOL_CROWBAR && reinf && (state == WINDOW_OUT_OF_FRAME || state == WINDOW_IN_FRAME) && anchored)
|
|
|
|
|
to_chat(user, "<span class='notice'>You begin to lever the window [state == WINDOW_OUT_OF_FRAME ? "into":"out of"] the frame...</span>")
|
|
|
|
|
I.play_tool_sound(src, 75)
|
|
|
|
|
if(I.use_tool(src, user, decon_speed, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
|
|
|
|
|
@@ -270,8 +287,67 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
|
|
|
|
|
to_chat(user, "<span class='notice'>You successfully disassemble [src].</span>")
|
|
|
|
|
qdel(src)
|
|
|
|
|
return
|
|
|
|
|
if(!reinf || !anchored)
|
|
|
|
|
return ..()
|
|
|
|
|
switch(state)
|
|
|
|
|
if(PRWINDOW_SECURE)
|
|
|
|
|
if(extra_reinforced)
|
|
|
|
|
if(I.tool_behaviour == TOOL_WELDER && user.a_intent == INTENT_HARM)
|
|
|
|
|
user.visible_message("<span class='notice'>[user] holds \the [I] to the security screws on \the [src]...</span>",
|
|
|
|
|
"<span class='notice'>You begin heating the security screws on \the [src]...</span>")
|
|
|
|
|
if(I.use_tool(src, user, 180, volume = 100))
|
|
|
|
|
to_chat(user, "<span class='notice'>The security bolts are glowing white hot and look ready to be removed.</span>")
|
|
|
|
|
state = PRWINDOW_BOLTS_HEATED
|
|
|
|
|
addtimer(CALLBACK(src, .proc/cool_bolts), 300)
|
|
|
|
|
return
|
|
|
|
|
else
|
|
|
|
|
if(I.tool_behaviour == TOOL_SCREWDRIVER)
|
|
|
|
|
user.visible_message("<span class='notice'>[user] digs into the screws and starts removing them...</span>",
|
|
|
|
|
"<span class='notice'>You dig into the screws hard and they start turning...</span>")
|
|
|
|
|
if(I.use_tool(src, user, 80, volume = 50))
|
|
|
|
|
state = PRWINDOW_BOLTS_OUT
|
|
|
|
|
to_chat(user, "<span class='notice'>The screws come out, and a gap forms around the edge of the pane.</span>")
|
|
|
|
|
return
|
|
|
|
|
if(PRWINDOW_BOLTS_HEATED)
|
|
|
|
|
if(I.tool_behaviour == TOOL_SCREWDRIVER)
|
|
|
|
|
user.visible_message("<span class='notice'>[user] digs into the security screws and starts removing them...</span>",
|
|
|
|
|
"<span class='notice'>You dig into the screws hard and they start turning...</span>")
|
|
|
|
|
if(I.use_tool(src, user, 80, volume = 50))
|
|
|
|
|
state = PRWINDOW_BOLTS_OUT
|
|
|
|
|
to_chat(user, "<span class='notice'>The screws come out, and a gap forms around the edge of the pane.</span>")
|
|
|
|
|
return
|
|
|
|
|
if(PRWINDOW_BOLTS_OUT)
|
|
|
|
|
if(I.tool_behaviour == TOOL_CROWBAR)
|
|
|
|
|
user.visible_message("<span class='notice'>[user] wedges \the [I] into the gap in the frame and starts prying...</span>",
|
|
|
|
|
"<span class='notice'>You wedge \the [I] into the gap in the frame and start prying...</span>")
|
|
|
|
|
if(I.use_tool(src, user, 50, volume = 50))
|
|
|
|
|
state = PRWINDOW_POPPED
|
|
|
|
|
to_chat(user, "<span class='notice'>The panel pops out of the frame, exposing some thin metal bars that looks like they can be cut.</span>")
|
|
|
|
|
return
|
|
|
|
|
if(PRWINDOW_POPPED)
|
|
|
|
|
if(I.tool_behaviour == TOOL_WIRECUTTER)
|
|
|
|
|
user.visible_message("<span class='notice'>[user] starts cutting the exposed bars on \the [src]...</span>",
|
|
|
|
|
"<span class='notice'>You start cutting the exposed bars on \the [src]</span>")
|
|
|
|
|
if(I.use_tool(src, user, 30, volume = 50))
|
|
|
|
|
state = PRWINDOW_BARS_CUT
|
|
|
|
|
to_chat(user, "<span class='notice'>The panels falls out of the way exposing the frame bolts.</span>")
|
|
|
|
|
return
|
|
|
|
|
if(PRWINDOW_BARS_CUT)
|
|
|
|
|
if(I.tool_behaviour == TOOL_WRENCH)
|
|
|
|
|
user.visible_message("<span class='notice'>[user] starts unfastening \the [src] from the frame...</span>",
|
|
|
|
|
"<span class='notice'>You start unfastening the bolts from the frame...</span>")
|
|
|
|
|
if(I.use_tool(src, user, 50, volume = 50))
|
|
|
|
|
to_chat(user, "<span class='notice'>You unscrew the bolts from the frame and the window pops loose.</span>")
|
|
|
|
|
state = WINDOW_OUT_OF_FRAME
|
|
|
|
|
setAnchored(FALSE)
|
|
|
|
|
return
|
|
|
|
|
return ..()
|
|
|
|
|
|
|
|
|
|
/obj/structure/window/proc/cool_bolts()
|
|
|
|
|
if(state == PRWINDOW_BOLTS_HEATED)
|
|
|
|
|
state = PRWINDOW_SECURE
|
|
|
|
|
visible_message("<span class='notice'>The bolts on \the [src] look like they've cooled off...</span>")
|
|
|
|
|
|
|
|
|
|
/obj/structure/window/setAnchored(anchorvalue)
|
|
|
|
|
..()
|
|
|
|
|
air_update_turf(TRUE)
|
|
|
|
|
@@ -577,6 +653,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
|
|
|
|
|
desc = "A window made out of a plasma-silicate alloy and a rod matrix. It looks hopelessly tough to break and is most likely nigh fireproof."
|
|
|
|
|
icon_state = "plasmarwindow"
|
|
|
|
|
reinf = TRUE
|
|
|
|
|
extra_reinforced = TRUE
|
|
|
|
|
heat_resistance = 50000
|
|
|
|
|
armor = list("melee" = 85, "bullet" = 20, "laser" = 0, "energy" = 0, "bomb" = 60, "bio" = 100, "rad" = 100, "fire" = 99, "acid" = 100)
|
|
|
|
|
max_integrity = 500
|
|
|
|
|
@@ -642,6 +719,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
|
|
|
|
|
icon = 'icons/obj/smooth_structures/rplasma_window.dmi'
|
|
|
|
|
icon_state = "rplasmawindow"
|
|
|
|
|
dir = FULLTILE_WINDOW_DIR
|
|
|
|
|
state = PRWINDOW_SECURE
|
|
|
|
|
max_integrity = 1000
|
|
|
|
|
fulltile = TRUE
|
|
|
|
|
flags_1 = PREVENT_CLICK_UNDER_1
|
|
|
|
|
@@ -726,6 +804,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
|
|
|
|
|
fulltile = TRUE
|
|
|
|
|
flags_1 = PREVENT_CLICK_UNDER_1
|
|
|
|
|
reinf = TRUE
|
|
|
|
|
extra_reinforced = TRUE
|
|
|
|
|
heat_resistance = 1600
|
|
|
|
|
armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 100)
|
|
|
|
|
smooth = SMOOTH_TRUE
|
|
|
|
|
@@ -758,6 +837,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
|
|
|
|
|
wave_explosion_block = EXPLOSION_BLOCK_BOROSILICATE_WINDOW
|
|
|
|
|
wave_explosion_multiply = EXPLOSION_DAMPEN_BOROSILICATE_WINDOW
|
|
|
|
|
decon_speed = 40
|
|
|
|
|
extra_reinforced = TRUE
|
|
|
|
|
glass_type = /obj/item/stack/tile/brass
|
|
|
|
|
glass_amount = 1
|
|
|
|
|
reinf = FALSE
|
|
|
|
|
|