Update window code

That code was old and fucky, goddamn

- Span, formatting, newline, visible_message, yeah
- Separate sprites for window panes and full windows. Might need a bit
more refining still, but that's that
- Remove deprecated commented silicate code. If anyone ever wants to
include something akin to silicate, they would benefit from just
recoding it from scratch. An item that adds health and potentially
changes sprite color can't be that hard to make
- Reduce normal window health by 4 to 10. Why would you use plain
windows
- Remove stupid paths that caused shitty inheritance. window/basic and
window/full/basic were dumb as fucking shit and no longer exist (both
transferred to their respective tree parent, for whatever variables
needed transplating, so 2-3). All full window types under full/ all
reinforced window types under reinforced/, all in that order
- Add in more examine() information (construction state and health)
- Add in healthcheck() to replace destroy(), hit() and all that logging
and variable juggling bullshit in about every proc where the window can
be damaged
- ex_act(), blob_act(), meteorhit() now deplete health only and no
longer magically delete or Destroy() windows. Looks a bit ugly on ex_act
3 since reinforced windows can't be destroyed but grilles always are,
and plasma windows still don't block explosions even if they're now
almost bomb-proof, but that's progress
- Remove window damage on passive grab window "slam", massively increase
mob damage on neck/kill window slam (if you let yourself get grabbed
that far, you deserve to die)
- Change construction from that ugly variable juggling to a fancy and
functional switch() construction code. Include bitflags and
deconstruction safety
- All files that were modified outside of window.dm and fullwindow.dm
are compatibility fixes

Try as I might, I couldn't fix #3515. It appears to be fundamentally
fucked due to the way pushing objects (you enter the window's tile) and
pulling objects (you cannot reach the other side of the window, ever)
works. Maybe someone else will manage it
This commit is contained in:
dylanstrategie
2015-03-23 13:47:48 +01:00
parent 1a15f3afe7
commit 27be630bea
10 changed files with 464 additions and 377 deletions

View File

@@ -144,7 +144,7 @@
spawn()
while(get_turf(src) != target_turf && num_turfs > 0)
for(var/obj/structure/window/W in next_turf)
W.destroy()
W.Destroy()
sleep(5)
for(var/obj/structure/table/O in next_turf)
O.ex_act(1)
@@ -191,7 +191,7 @@
spawn()
while(get_turf(src) != target_turf && num_turfs > 0)
for(var/obj/structure/window/W in next_turf)
W.destroy()
W.Destroy()
sleep(5)
for(var/obj/structure/table/O in next_turf)
O.ex_act(1)

View File

@@ -281,7 +281,7 @@
C.Stun(8)
C.Jitter(150)
for(var/obj/structure/window/W in view(4))
W.destroy()
W.Destroy()
playsound(M.current.loc, 'sound/effects/creepyshriek.ogg', 100, 1)
M.current.remove_vampire_blood(10)
M.current.verbs -= /client/proc/vampire_screech

View File

@@ -1178,7 +1178,7 @@ About the new airlock wires panel:
for(var/turf/T in loc)
var/obj/structure/window/W = locate(/obj/structure/window) in T
if (W)
W.destroy()
W.Destroy()
..()
return

View File

@@ -9,8 +9,8 @@
/obj/item/stack/sheet/glass
w_type = RECYK_GLASS
melt_temperature = MELTPOINT_GLASS
var/created_window = /obj/structure/window/basic
var/full_window = /obj/structure/window/full/basic
var/created_window = /obj/structure/window
var/full_window = /obj/structure/window/full
var/windoor = null
var/reinforced = 0
var/rglass = 0
@@ -76,8 +76,8 @@
if(!found)
dir_to_set = direction
break
var/obj/structure/window/W = new created_window( user.loc, 0 )
W.state = 0
var/obj/structure/window/W = new created_window(user.loc, 0)
W.d_state = 0
W.dir = dir_to_set
W.ini_dir = W.dir
W.anchored = 0
@@ -92,7 +92,7 @@
user << "<span class='warning'>There is a window in the way.</span>"
return 1
var/obj/structure/window/W = new full_window( user.loc, 0 )
W.state = 0
W.d_state = 0
W.dir = SOUTHWEST
W.ini_dir = SOUTHWEST
W.anchored = 0
@@ -157,7 +157,7 @@
dir_to_set = direction
break
var/obj/structure/window/W = new created_window( user.loc, 0 )
W.state = 0
W.d_state = 0
W.dir = dir_to_set
W.ini_dir = W.dir
W.anchored = 0
@@ -172,7 +172,7 @@
user << "<span class='warning'>There is a window in the way.</span>"
return 1
var/obj/structure/window/W = new full_window( user.loc, 0 )
W.state = 0
W.d_state = 0
W.dir = SOUTHWEST
W.ini_dir = SOUTHWEST
W.anchored = 0
@@ -246,6 +246,7 @@
/*
* Plasma Glass sheets
*/
/obj/item/stack/sheet/glass/plasmaglass
name = "plasma glass"
desc = "A very strong and very resistant sheet of a plasma-glass alloy."
@@ -254,11 +255,11 @@
sname = "plasma"
g_amt=CC_PER_SHEET_GLASS
origin_tech = "materials=3;plasmatech=2"
created_window = /obj/structure/window/plasmabasic
full_window = /obj/structure/window/full/plasmabasic
created_window = /obj/structure/window/plasma
full_window = /obj/structure/window/full/plasma
rglass = /obj/item/stack/sheet/glass/plasmarglass
perunit = 2875 //average of plasma and glass
melt_temperature = MELTPOINT_STEEL+500
melt_temperature = MELTPOINT_STEEL + 500
glass_quality = 1.15 //Can you imagine a world in which plasmaglass is worse than rglass
shealth = 20
shard_type = /obj/item/weapon/shard/plasma
@@ -281,8 +282,8 @@
m_amt = 1875
melt_temperature = MELTPOINT_STEEL+500 // I guess...?
origin_tech = "materials=4;plasmatech=2"
created_window = /obj/structure/window/plasmareinforced
full_window = /obj/structure/window/full/plasmareinforced
created_window = /obj/structure/window/reinforced/plasma
full_window = /obj/structure/window/full/reinforced/plasma
windoor = /obj/structure/windoor_assembly/plasma
perunit = 2875
reinforced = 1

View File

@@ -78,7 +78,7 @@
message_admins("[A] with pdiff [pdiff] fire-axed by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) at [formatJumpTo(A.loc)]!")
log_admin("[A] with pdiff [pdiff] fire-axed by [user.real_name] ([user.ckey]) at [A.loc]!")
var/obj/structure/window/W = A
W.destroy()
W.Destroy()
else
del(A)

View File

@@ -1,90 +1,111 @@
#define WINDOWLOOSE 0
#define WINDOWLOOSEFRAME 1
#define WINDOWUNSECUREFRAME 2
#define WINDOWSECURE 3
/obj/structure/window/full
sheets = 2
dir=SOUTHWEST
mouse_opacity=2 // Complete opacity.
name = "window"
icon_state = "window"
sheetamount = 2
mouse_opacity = 2 // Complete opacity //What in the name of everything is this variable ?
layer = 3.21 // Windows are at 3.2.
/obj/structure/window/full/New(loc)
..(loc)
flags &= ~ON_BORDER
/obj/structure/window/full/CheckExit(atom/movable/O as mob|obj, target as turf)
return 1
/obj/structure/window/full/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0)
/obj/structure/window/full/CanPass(atom/movable/mover, turf/target, height = 1.5, air_group = 0)
if(istype(mover) && mover.checkpass(PASSGLASS))
return 1
return 0
/obj/structure/window/full/can_be_reached(mob/user)
return 1 //That about it Captain
/obj/structure/window/full/is_fulltile()
return 1
//merges adjacent full-tile windows into one (blatant ripoff from game/smoothwall.dm)
//Merges adjacent full-tile windows into one (blatant ripoff from game/smoothwall.dm)
/obj/structure/window/full/update_icon()
//A little cludge here, since I don't know how it will work with slim windows. Most likely VERY wrong.
//this way it will only update full-tile ones
//This way it will only update full-tile ones
//This spawn is here so windows get properly updated when one gets deleted.
spawn(2)
if(!src) return
if(!is_fulltile())
spawn()
if(!src)
return
var/junction = 0 //will be used to determine from which side the window is connected to other windows
var/junction = 0 //Will be used to determine from which side the window is connected to other windows
if(anchored)
for(var/obj/structure/window/full/W in orange(src,1))
for(var/obj/structure/window/full/W in orange(src, 1))
if(W.anchored && W.density) //Only counts anchored, not-destroyed full-tile windows.
if(abs(x-W.x)-abs(y-W.y) ) //doesn't count windows, placed diagonally to src
if(abs(x-W.x)-abs(y-W.y)) //Doesn't count windows, placed diagonally to src
junction |= get_dir(src,W)
icon_state = "[basestate][junction]"
icon_state = "[initial(icon_state)][junction]"
return
/obj/structure/window/full/basic
desc = "It looks thin and flimsy. A few knocks with... anything, really should shatter it."
icon_state = "window"
basestate = "window"
/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."
basestate = "plasmawindow"
icon_state = "plasmawindow"
shardtype = /obj/item/weapon/shard/plasma
health = 120
/obj/structure/window/full/plasmabasic/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature > T0C + 32000)
hit(round(exposed_volume / 1000), 0)
..()
/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."
basestate = "plasmarwindow"
icon_state = "plasmarwindow"
shardtype = /obj/item/weapon/shard/plasma
reinf = 1
health = 160
/obj/structure/window/full/plasmareinforced/fire_act(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_state = "rwindow"
basestate = "rwindow"
sheettype = /obj/item/stack/sheet/glass/rglass
health = 40
reinf = 1
d_state = WINDOWSECURE
reinforced = 1
/obj/structure/window/full/plasma
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"
shardtype = /obj/item/weapon/shard/plasma
sheettype = /obj/item/stack/sheet/glass/plasmaglass
health = 120
/obj/structure/window/plasma/full/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature > T0C + 32000)
health -= (round(exposed_volume/1000))
healthcheck(sound = 0)
..()
/obj/structure/window/full/reinforced/plasma
name = "reinforced plasma window"
desc = "A window made out of a plasma-silicate alloy and a rod matrice. It looks hopelessly tough to break and is most likely nigh fireproof."
icon_state = "plasmarwindow"
shardtype = /obj/item/weapon/shard/plasma
sheettype = /obj/item/stack/sheet/glass/plasmarglass
health = 160
/obj/structure/window/full/reinforced/plasma/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
return
/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."
desc = "A window with a rod matrice. Its surface is completely tinted, making it opaque. Why not a wall ?"
icon_state = "twindow"
basestate = "twindow"
opacity = 1
sheettype = /obj/item/stack/sheet/glass/rglass //A glass type for this window doesn't seem to exist, so here's to you
/obj/structure/window/full/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."
desc = "A window with a rod matrice. Its surface is completely tinted, making it opaque, and it's frosty. Why not an ice wall ?"
icon_state = "fwindow"
basestate = "fwindow"
health = 30
sheettype = /obj/item/stack/sheet/glass/rglass //Ditto above
#undef WINDOWLOOSE
#undef WINDOWLOOSEFRAME
#undef WINDOWUNSECUREFRAME
#undef WINDOWSECURE

View File

@@ -166,7 +166,7 @@
WD.dir = dir_to_set
WD.ini_dir = dir_to_set
WD.anchored = 0
WD.state = 0
WD.d_state = 0
var/obj/item/stack/ST = W
ST.use(1)
user << "<span class='notice'>You place the [WD] on [src].</span>"

View File

@@ -1,449 +1,514 @@
//Windows, one of the oldest pieces of code
//Note : You might wonder where full windows are. Full windows are in fullwindow.dm. Now you know
//And knowing is half the battle
#define WINDOWLOOSE 0
#define WINDOWLOOSEFRAME 1
#define WINDOWUNSECUREFRAME 2
#define WINDOWSECURE 3
/obj/structure/window
name = "window"
desc = "A window."
name = "window-p"
desc = "A silicate barrier, used to keep things out and in sight. Fragile."
icon = 'icons/obj/structures.dmi'
density = 1
layer = 3.2//Just above doors
layer = 3.2 //Just above airlocks //For some reason I guess
pressure_resistance = 4*ONE_ATMOSPHERE
anchored = 1.0
var/health = 14.0
var/ini_dir = null
var/state = 2
var/reinf = 0
var/basestate
anchored = 1
var/health = 10 //This window is so bad blowing on it would break it, sucks for it
var/ini_dir = null //This really shouldn't exist, but it does and I don't want to risk deleting it because it's likely mapping-related
var/d_state = WINDOWLOOSEFRAME //Normal windows have one step (unanchor), reinforced windows have three
var/shardtype = /obj/item/weapon/shard
var/sheets = 1 // Number of sheets needed to build this window (determines how much shit is spawned by destroy())
// var/silicate = 0 // number of units of silicate
// var/icon/silicateIcon = null // the silicated icon
var/sheettype = /obj/item/stack/sheet/glass //Used for deconstruction
var/sheetamount = 1 //Number of sheets needed to build this window (determines how much shit is spawned by destroy())
var/reinforced = 0 //Used for deconstruction steps
/obj/structure/window/New(loc)
..(loc)
flags |= ON_BORDER
ini_dir = dir
update_nearby_tiles()
update_nearby_icons()
update_icon()
/obj/structure/window/examine(mob/user)
..()
if(!anchored)
user << "<span class='info'>\the [src] appears to be loose.</span>"
user << "It appears to be completely loose and movable"
//switch most likely can't take inequalities, so here's that if block
if(health >= initial(health)) //Sanity
user << "It's in perfect shape, not even a scratch"
else if(health >= 0.8*initial(health))
user << "It has a few scratches and a small impact"
else if(health >= 0.5*initial(health))
user << "It has a few impacts and some cracks running from them"
else if(health >= 0.2*initial(health))
user << "It's covered in impact marks and most of the outer sheet is crackled"
else
user << "It's completely crackled over multiple layers, it's a miracle it's even standing"
if(reinforced) //Normal windows can be loose or not, reinforced windows are more complex
switch(d_state)
if(WINDOWSECURE)
user << "It is firmly secured"
if(WINDOWUNSECUREFRAME)
user << "It appears it was unfastened from its frame"
if(WINDOWLOOSEFRAME)
user << "It appears to be loose from its frame"
//Allows us to quickly check if we should break the window, can handle not having an user
/obj/structure/window/proc/healthcheck(var/mob/M, var/sound = 1)
if(health <= 0)
if(M) //Did someone pass a mob ? If so, perform a pressure check
var/pdiff = performWallPressureCheck(src.loc)
if(pdiff > 0)
message_admins("Window with pdiff [pdiff] at [formatJumpTo(loc)] destroyed by [M.real_name] ([formatPlayerPanel(M,M.ckey)])!")
log_admin("Window with pdiff [pdiff] at [loc] destroyed by [M.real_name] ([M.ckey])!")
Destroy()
else if(sound)
playsound(loc, 'sound/effects/Glasshit.ogg', 100, 1)
/obj/structure/window/bullet_act(var/obj/item/projectile/Proj)
health -= Proj.damage
..()
if(health <= 0)
var/pdiff=performWallPressureCheck(src.loc)
if(pdiff>0)
message_admins("Window destroyed by [Proj.firer.real_name] ([formatPlayerPanel(Proj.firer,Proj.firer.ckey)]) via \an [Proj]! pdiff = [pdiff] at [formatJumpTo(loc)]!")
log_admin("Window destroyed by ([Proj.firer.ckey]) via \an [Proj]! pdiff = [pdiff] at [loc]!")
destroy()
healthcheck(Proj.firer)
return
// This should result in the same materials used to make the window.
/obj/structure/window/proc/destroy()
for(var/i=0;i<sheets;i++)
getFromPool(shardtype, loc)
/obj/structure/window/proc/is_fulltile()
if(reinf)
new /obj/item/stack/rods(loc)
qdel(src)
return 0
//This ex_act just removes health to be fully modular with "bomb-proof" windows
/obj/structure/window/ex_act(severity)
switch(severity)
if(1.0)
qdel(src)
health -= rand(100, 150)
healthcheck()
return
if(2.0)
destroy()
health -= rand(20, 50)
healthcheck()
return
if(3.0)
if(prob(50))
destroy()
return
health -= rand(5, 15)
healthcheck()
return
/obj/structure/window/blob_act()
destroy()
health -= rand(15, 25)
healthcheck()
/obj/structure/window/meteorhit()
destroy()
health -= rand(100, 150)
healthcheck()
/obj/structure/window/CheckExit(var/atom/movable/O, var/turf/target)
if(istype(O) && O.checkpass(PASSGLASS))
return 1
if(get_dir(O.loc, target) == dir)
return !density
return 1
/obj/structure/window/CanPass(atom/movable/mover, turf/target, height=0)
/obj/structure/window/CanPass(atom/movable/mover, turf/target, height = 0)
if(istype(mover) && mover.checkpass(PASSGLASS))
return 1
if(dir == SOUTHWEST || dir == SOUTHEAST || dir == NORTHWEST || dir == NORTHEAST)
return 0 //full tile window, you can't move into it!
if(get_dir(loc, target) == dir)
return !density
else
return 1
return 1
//Someone threw something at us, please advise
/obj/structure/window/hitby(AM as mob|obj)
..()
visible_message("<span class='danger'>[src] was hit by [AM].</span>")
var/tforce = 0
var/mob/M=null
if(ismob(AM))
tforce = 40
M=AM
var/mob/M = AM //Duh
health -= 10 //We estimate just above a slam but under a crush, since mobs can't carry a throwforce variable
healthcheck(M)
visible_message("<span class='danger'>\The [M] slams into \the [src].</span>", \
"<span class='danger'>You slam into \the [src].</span>")
else if(isobj(AM))
var/obj/item/I = AM
tforce = I.throwforce
if(reinf) tforce *= 0.25
playsound(loc, 'sound/effects/Glasshit.ogg', 100, 1)
health = max(0, health - tforce)
if(health <= 7 && !reinf)
anchored = 0
update_nearby_icons()
step(src, get_dir(AM, src))
var/pdiff=performWallPressureCheck(src.loc)
if(pdiff>0)
if(M)
message_admins("Window with pdiff [pdiff] at [formatJumpTo(loc)] deanchored by [M.real_name] ([formatPlayerPanel(M,M.ckey)])!")
log_admin("Window with pdiff [pdiff] at [loc] deanchored by [M.real_name] ([M.ckey])!")
else
message_admins("Window with pdiff [pdiff] at [formatJumpTo(loc)] deanchored by [AM]!")
log_admin("Window with pdiff [pdiff] at [loc] deanchored by [AM]!")
if(health <= 0)
var/pdiff=performWallPressureCheck(src.loc)
if(pdiff>0)
if(M)
message_admins("Window with pdiff [pdiff] at [formatJumpTo(loc)] destroyed by [M.real_name] ([formatPlayerPanel(M,M.ckey)])!")
log_admin("Window with pdiff [pdiff] at [loc] destroyed by [M.real_name] ([M.ckey])!")
else
message_admins("Window with pdiff [pdiff] at [formatJumpTo(loc)] destroyed by [AM]!")
log_admin("Window with pdiff [pdiff] at [loc] destroyed by [AM]!")
destroy()
health -= I.throwforce
healthcheck()
visible_message("<span class='danger'>\The [I] slams into \the [src].</span>")
/obj/structure/window/attack_hand(mob/user as mob)
if(M_HULK in user.mutations)
user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!"))
user.visible_message("<span class='danger'>[user] smashes through [src]!</span>")
var/pdiff=performWallPressureCheck(src.loc)
if(pdiff>0)
message_admins("Window destroyed by hulk [user.real_name] ([formatPlayerPanel(user,user.ckey)]) with pdiff [pdiff] at [formatJumpTo(loc)]!")
log_admin("Window destroyed by hulk [user.real_name] ([user.ckey]) with pdiff [pdiff] at [loc]!")
user.visible_message("<span class='danger'>[user] smashes \the [src]!</span>")
health -= 25
healthcheck()
user.delayNextAttack(8)
destroy()
else if (usr.a_intent == I_HURT)
user.delayNextAttack(8) // not so polite
playsound(get_turf(src), 'sound/effects/glassknock.ogg', 80, 1)
usr.visible_message("<span class='warning'>[usr.name] bangs against the [src.name]!</span>", \
"<span class='warning'>You bang against the [src.name]!</span>", \
"You hear a banging sound.")
//Bang against the window
else if(usr.a_intent == I_HURT)
user.delayNextAttack(10)
playsound(get_turf(src), 'sound/effects/glassknock.ogg', 100, 1)
user.visible_message("<span class='warning'>[user] bangs against \the [src]!</span>", \
"<span class='warning'>You bang against \the [src]!</span>", \
"You hear banging.")
//Knock against it
else
user.delayNextAttack(10)
playsound(get_turf(src), 'sound/effects/glassknock.ogg', 80, 1)
usr.visible_message("[usr.name] knocks on the [src.name].", \
"You knock on the [src.name].", \
"You hear a knocking sound.")
playsound(get_turf(src), 'sound/effects/glassknock.ogg', 50, 1)
user.visible_message("<span class='notice'>[user] knocks on \the [src].</span>", \
"<span class='notice'>You knock on \the [src].</span>", \
"You hear knocking.")
return
/obj/structure/window/attack_paw(mob/user as mob)
return attack_hand(user)
/obj/structure/window/proc/attack_generic(mob/user as mob, damage = 0) //used by attack_alien, attack_animal, and attack_slime
user.delayNextAttack(10)
health -= damage
user.delayNextAttack(8)
if(health <= 0)
user.visible_message("<span class='danger'>[user] smashes through [src]!</span>")
var/pdiff=performWallPressureCheck(src.loc)
if(pdiff>0)
message_admins("Window destroyed by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) with pdiff [pdiff] at [formatJumpTo(loc)]!")
destroy()
else //for nicer text~
user.visible_message("<span class='danger'>[user] smashes into [src]!</span>")
playsound(loc, 'sound/effects/Glasshit.ogg', 100, 1)
user.visible_message("<span class='danger'>\The [user] smashes into \the [src]!</span>", \
"<span class='warning'>You smash into \the [src]!</span>")
healthcheck(user)
/obj/structure/window/attack_alien(mob/user as mob)
if(islarva(user)) return
if(islarva(user))
return
attack_generic(user, 15)
/obj/structure/window/attack_animal(mob/user as mob)
if(!isanimal(user)) return
var/mob/living/simple_animal/M = user
if(M.melee_damage_upper <= 0) return
if(M.melee_damage_upper <= 0)
return
attack_generic(M, M.melee_damage_upper)
/obj/structure/window/attack_slime(mob/user as mob)
if(!isslimeadult(user)) return
if(!isslimeadult(user))
return
attack_generic(user, rand(10, 15))
/obj/structure/window/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(!istype(W)) return//I really wish I did not need this
if (istype(W, /obj/item/weapon/grab) && Adjacent(user))
if(istype(W, /obj/item/weapon/grab) && Adjacent(user))
var/obj/item/weapon/grab/G = W
if (istype(G.affecting, /mob/living))
if(istype(G.affecting, /mob/living))
var/mob/living/M = G.affecting
var/state = G.state
qdel(W) //gotta delete it here because if window breaks, it won't get deleted
var/damage
switch (state)
var/gstate = G.state
del(W) //Gotta delete it here because if window breaks, it won't get deleted
switch(gstate)
if(GRAB_PASSIVE)
M.apply_damage(4)
damage = 4
hit(5)
visible_message("<span class='warning'>[user] slams [M] against \the [src]!</span>")
M.apply_damage(5) //Meh, bit of pain, window is fine, just a shove
visible_message("<span class='warning'>\The [user] shoves \the [M] into \the [src]!</span>", \
"<span class='warning'>You shove \the [M] into \the [src]!</span>")
if(GRAB_AGGRESSIVE)
if (prob(50))
M.Weaken(1)
M.apply_damage(7)
damage = 7
hit(10)
visible_message("<span class='danger'>[user] bashes [M] against \the [src]!</span>")
M.apply_damage(10) //Nasty, but dazed and concussed at worst
health -= 5
visible_message("<span class='danger'>\The [user] slams \the [M] into \the [src]!</span>", \
"<span class='danger'>You slam \the [M] into \the [src]!</span>")
if(GRAB_NECK to GRAB_KILL)
M.Weaken(3)
M.apply_damage(15)
damage = 15
hit(25)
visible_message("<big><span class='danger'>[user] crushes [M] against \the [src]!</span></big>")
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been window slammed by [user.name] ([user.ckey]) for [damage] damage.</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Window slammed [M.name] for [damage] damage.</font>")
msg_admin_attack("[user.name] ([user.ckey]) window slammed [M.name] ([M.ckey]) for [damage] damage (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
log_attack("[user.name] ([user.ckey]) window slammed [M.name] ([M.ckey]) for [damage] damage (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
return
if(istype(W, /obj/item/weapon/screwdriver))
if(reinf && state >= 1)
state = 3 - state
playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1)
user << (state == 1 ? "<span class='notice'>You have unfastened the window from the frame.</span>" : "<span class='notice'>You have fastened the window to the frame.</span>")
else if(reinf && state == 0)
anchored = !anchored
update_nearby_icons()
playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1)
user << (anchored ? "<span class='notice'>You have fastened the frame to the floor.</span>" : "<span class='notice'>You have unfastened the frame from the floor.</span>")
if(!anchored)
var/pdiff=performWallPressureCheck(src.loc)
if(pdiff>0)
message_admins("Window with pdiff [pdiff] deanchored by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) at [formatJumpTo(loc)]!")
log_admin("Window with pdiff [pdiff] deanchored by [user.real_name] ([user.ckey]) at [loc]!")
else if(!reinf)
anchored = !anchored
update_nearby_icons()
playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1)
user << (anchored ? "<span class='notice'>You have fastened the window to the floor.</span>" : "<span class='notice'>You have unfastened the window.</span>")
if(!anchored)
var/pdiff=performWallPressureCheck(src.loc)
if(pdiff>0)
message_admins("Window with pdiff [pdiff] deanchored by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) at [formatJumpTo(loc)]!")
log_admin("Window with pdiff [pdiff] deanchored by [user.real_name] ([user.ckey]) at [loc]!")
else if(istype(W, /obj/item/weapon/crowbar) && reinf && state <= 1)
state = 1 - state
playsound(loc, 'sound/items/Crowbar.ogg', 75, 1)
user << (state ? "<span class='notice'>You have pried the window into the frame.</span>" : "<span class='notice'>You have pried the window out of the frame.</span>")
else if(istype(W, /obj/item/weapon/weldingtool) && !anchored && (!state || !reinf))
playsound(get_turf(src), 'sound/items/Ratchet.ogg', 100, 1)
user << "<span class='notice'>Now disassembling the window...</span>"
var/obj/item/weapon/weldingtool/WT = W
if (WT.remove_fuel(0))
if(do_after(user,40))
if(!user || !src) return
visible_message("<span class='notice'>[user] dismantles \the [src].</span>")
new /obj/item/stack/sheet/glass/glass(get_turf(src))
qdel(src)
else
user << "Need more welding fuel!"
M.Weaken(5) //Almost certainly shoved head or face-first, you're going to need a bit for the lights to come back on
M.apply_damage(30) //That got to fucking hurt, you were basically flung into a window, most likely a shattered one at that
health -= 20 //Window won't like that
visible_message("<span class='danger'>\The [user] crushes \the [M] into \the [src]!</span>", \
"<span class='danger'>You crush \the [M] into \the [src]!</span>")
healthcheck(user)
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been window slammed by [user.name] ([user.ckey]) ([gstate]).</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Window slammed [M.name] ([gstate]).</font>")
msg_admin_attack("[user.name] ([user.ckey]) window slammed [M.name] ([M.ckey]) ([gstate]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
log_attack("[user.name] ([user.ckey]) window slammed [M.name] ([M.ckey]) ([gstate]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
return
//Start construction and deconstruction, absolute priority over the other object interactions to avoid hitting the window
if(reinforced) //Steps for all reinforced window types
switch(d_state)
if(WINDOWSECURE) //Reinforced, fully secured
if(istype(W, /obj/item/weapon/screwdriver))
playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1)
user.visible_message("<span class='warning'>[user] unfastens \the [src] from its frame.</span>", \
"<span class='notice'>You unfasten \the [src] from its frame.</span>")
d_state = WINDOWUNSECUREFRAME
return
if(WINDOWUNSECUREFRAME)
if(istype(W, /obj/item/weapon/screwdriver))
playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1)
user.visible_message("<span class='notice'>[user] fastens \the [src] to its frame.</span>", \
"<span class='notice'>You fasten \the [src] to its frame.</span>")
d_state = WINDOWSECURE
return
if(istype(W, /obj/item/weapon/crowbar))
playsound(loc, 'sound/items/Crowbar.ogg', 75, 1)
user.visible_message("<span class='warning'>[user] pries \the [src] from its frame.</span>", \
"<span class='notice'>You pry \the [src] from its frame.</span>")
d_state = WINDOWLOOSEFRAME
return
if(WINDOWLOOSEFRAME)
if(istype(W, /obj/item/weapon/crowbar))
playsound(loc, 'sound/items/Crowbar.ogg', 75, 1)
user.visible_message("<span class='warning'>[user] pries \the [src] into its frame.</span>", \
"<span class='notice'>You pry \the [src] into its frame.</span>")
d_state = WINDOWUNSECUREFRAME
return
if(istype(W, /obj/item/weapon/screwdriver))
playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1)
user.visible_message("<span class='warning'>[user] unfastens \the [src]'s frame from the floor.</span>", \
"<span class='notice'>You unfasten \the [src]'s frame from the floor.</span>")
d_state = WINDOWLOOSE
anchored = 0
update_nearby_tiles() //Needed if it's a full window, since unanchored windows don't link
update_nearby_icons()
update_icon()
//P<>rform pressure check since window no longer blocks air
var/pdiff = performWallPressureCheck(src.loc)
if(pdiff > 0)
message_admins("Window with pdiff [pdiff] deanchored by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) at [formatJumpTo(loc)]!")
log_admin("Window with pdiff [pdiff] deanchored by [user.real_name] ([user.ckey]) at [loc]!")
return
if(WINDOWLOOSE)
if(istype(W, /obj/item/weapon/screwdriver))
playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1)
user.visible_message("<span class='warning'>[user] fastens \the [src]'s frame to the floor.</span>", \
"<span class='notice'>You fasten \the [src]'s frame to the floor.</span>")
d_state = WINDOWLOOSEFRAME
anchored = 1
update_nearby_tiles() //Ditto above, but in reverse
update_nearby_icons()
update_icon()
return
if(istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
if(WT.remove_fuel(0))
playsound(src, 'sound/items/Welder.ogg', 100, 1)
user.visible_message("<span class='warning'>[user] starts disassembling \the [src].</span>", \
"<span class='notice'>You start disassembling \the [src].</span>")
if(do_after(user, 40) && d_state == WINDOWLOOSE) //Extra condition needed to avoid cheesing
playsound(src, 'sound/items/Welder.ogg', 100, 1)
user.visible_message("<span class='warning'>[user] disassembles \the [src].</span>", \
"<span class='notice'>You disassemble \the [src].</span>")
getFromPool(sheettype, get_turf(src), sheetamount)
qdel(src)
return
else
user << "<span class='notice'>You need more welding fuel to complete this task.</span>"
return
else if(!reinforced) //Normal window steps
if(istype(W, /obj/item/weapon/screwdriver))
playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1)
user.visible_message("<span class='[d_state ? "warning":"notice"]'>[user] [d_state ? "un":""]fastens \the [src].</span>", \
"<span class='notice'>You [d_state ? "un":""]fasten \the [src].</span>")
d_state = !d_state
anchored = !anchored
update_nearby_tiles() //Ditto above
update_nearby_icons()
update_icon()
return
if(istype(W, /obj/item/weapon/weldingtool) && !d_state)
var/obj/item/weapon/weldingtool/WT = W
if(WT.remove_fuel(0))
playsound(src, 'sound/items/Welder.ogg', 100, 1)
user.visible_message("<span class='warning'>[user] starts disassembling \the [src].</span>", \
"<span class='notice'>You start disassembling \the [src].</span>")
if(do_after(user, 40) && d_state == WINDOWLOOSE) //Ditto above
playsound(src, 'sound/items/Welder.ogg', 100, 1)
user.visible_message("<span class='warning'>[user] disassembles \the [src].</span>", \
"<span class='notice'>You disassemble \the [src].</span>")
getFromPool(sheettype, get_turf(src), sheetamount)
qdel(src)
return
else
user << "<span class='notice'>You need more welding fuel to complete this task.</span>"
return
if(W.damtype == BRUTE || W.damtype == BURN)
user.delayNextAttack(10)
health -= W.force
user.visible_message("<span class='warning'>\The [user] hits \the [src] with \the [W].</span>", \
"<span class='warning'>You hit \the [src] with \the [W].</span>")
healthcheck(user)
return
else
if(W.damtype == BRUTE || W.damtype == BURN)
user.delayNextAttack(10)
hit(W.force)
if(health <= 7)
anchored = 0
update_nearby_icons()
step(src, get_dir(user, src))
var/pdiff=performWallPressureCheck(src.loc)
if(pdiff>0)
message_admins("Window with pdiff [pdiff] deanchored by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) at [formatJumpTo(loc)]!")
log_admin("Window with pdiff [pdiff] deanchored by [user.real_name] ([user.ckey]) at [loc]!")
else
playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1)
playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1)
..()
return
/obj/structure/window/proc/can_be_reached(mob/user)
if(!is_fulltile())
if(get_dir(user,src) & dir)
if(get_dir(user, src) & dir)
for(var/obj/O in loc)
if(!O.CanPass(user, user.loc, 1, 0))
return 0
return 1
/obj/structure/window/proc/hit(var/damage, var/sound_effect = 1)
if(reinf) damage *= 0.5
health = max(0, health - damage)
if(sound_effect)
playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1)
if(health <= 0)
var/pdiff=performWallPressureCheck(src.loc)
if(pdiff>0)
message_admins("Window with pdiff [pdiff] broken at [formatJumpTo(loc)]!")
destroy()
return
/obj/structure/window/verb/rotate()
set name = "Rotate Window Counter-Clockwise"
set category = "Object"
set src in oview(1)
if(anchored)
usr << "It is fastened to the floor therefore you can't rotate it!"
usr << "<span class='warning'>Is fastened to the floor, therefore you can't rotate it!</span>"
return 0
update_nearby_tiles() //Compel updates before
dir = turn(dir, 90)
// updateSilicate()
update_nearby_tiles()
ini_dir = dir
return
/obj/structure/window/verb/revrotate()
set name = "Rotate Window Clockwise"
set category = "Object"
set src in oview(1)
if(anchored)
usr << "It is fastened to the floor therefore you can't rotate it!"
usr << "<span class='warning'>Is fastened to the floor, therefore you can't rotate it!</span>"
return 0
update_nearby_tiles() //Compel updates before
dir = turn(dir, 270)
// updateSilicate()
update_nearby_tiles()
ini_dir = dir
return
/*
/obj/structure/window/proc/updateSilicate()
if(silicateIcon && silicate)
icon = initial(icon)
var/icon/I = icon(icon,icon_state,dir)
var/r = (silicate / 100) + 1
var/g = (silicate / 70) + 1
var/b = (silicate / 50) + 1
I.SetIntensity(r,g,b)
icon = I
silicateIcon = I
*/
/obj/structure/window/Destroy()
density = 0
density = 0 //Sanity while we do the rest
update_nearby_tiles()
if(loc)
playsound(get_turf(src), "shatter", 70, 1)
update_nearby_icons()
getFromPool(shardtype, loc, sheetamount)
if(reinforced)
getFromPool(/obj/item/stack/rods, loc, sheetamount)
..()
/obj/structure/window/Move()
update_nearby_tiles()
..()
dir = ini_dir
update_nearby_tiles()
//This proc has to do with airgroups and atmos, it has nothing to do with smoothwindows, that's update_nearby_tiles().
/obj/structure/window/proc/update_nearby_tiles()
if (isnull(air_master))
if(isnull(air_master))
return 0
var/T = get_turf(src)
if (isturf(T))
if(isturf(T))
air_master.mark_for_update(T)
return 1
//checks if this window is full-tile one
/obj/structure/window/proc/is_fulltile()
return 0
//This proc is used to update the icons of nearby windows. It should not be confused with update_nearby_tiles(), which is an atmos proc!
/obj/structure/window/proc/update_nearby_icons()
if(!loc) return 0
if(!loc)
return 0
update_icon()
for(var/direction in cardinal)
for(var/obj/structure/window/W in get_step(src,direction) )
for(var/obj/structure/window/W in get_step(src,direction))
W.update_icon()
/obj/structure/window/update_icon()
return
/obj/structure/window/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature > T0C + 800)
hit(round(exposed_volume / 100), 0)
health -= round(exposed_volume/100)
healthcheck(sound = 0)
..()
/obj/structure/window/basic
desc = "It looks thin and flimsy. A few knocks with... anything, really should shatter it."
icon_state = "window"
basestate = "window"
/obj/structure/window/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."
basestate = "plasmawindow"
icon_state = "plasmawindow"
shardtype = /obj/item/weapon/shard/plasma
health = 120
/obj/structure/window/plasmabasic/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature > T0C + 32000)
hit(round(exposed_volume / 1000), 0)
..()
/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."
basestate = "plasmarwindow"
icon_state = "plasmarwindow"
shardtype = /obj/item/weapon/shard/plasma
reinf = 1
health = 160
/obj/structure/window/plasmareinforced/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
return
/obj/structure/window/reinforced
name = "reinforced window"
desc = "It looks rather strong. Might take a few good hits to shatter it."
icon_state = "rwindow"
basestate = "rwindow"
desc = "A window with a rod matrice. It looks more solid than the average window."
icon_state = "rwindow-p"
sheettype = /obj/item/stack/sheet/glass/rglass
health = 40
reinf = 1
d_state = WINDOWSECURE
reinforced = 1
/obj/structure/window/plasma
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-p"
shardtype = /obj/item/weapon/shard/plasma
sheettype = /obj/item/stack/sheet/glass/plasmaglass
health = 120
/obj/structure/window/plasma/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature > T0C + 32000)
health -= (round(exposed_volume/1000))
healthcheck(sound = 0)
..()
/obj/structure/window/reinforced/plasma
name = "reinforced plasma window"
desc = "A window made out of a plasma-silicate alloy and a rod matrice. It looks hopelessly tough to break and is most likely nigh fireproof."
icon_state = "plasmarwindow-p"
shardtype = /obj/item/weapon/shard/plasma
sheettype = /obj/item/stack/sheet/glass/plasmarglass
health = 160
/obj/structure/window/plasmareinforced/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
return
/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"
basestate = "twindow"
desc = "A window with a rod matrice. Its surface is completely tinted, making it opaque. Why not a wall ?"
icon_state = "twindow-p"
opacity = 1
sheettype = /obj/item/stack/sheet/glass/rglass //A glass type for this window doesn't seem to exist, so here's to you
/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"
basestate = "fwindow"
desc = "A window with a rod matrice. Its surface is completely tinted, making it opaque, and it's frosty. Why not an ice wall ?"
icon_state = "fwindow-p"
health = 30
sheettype = /obj/item/stack/sheet/glass/rglass //Ditto above
#undef WINDOWLOOSE
#undef WINDOWLOOSEFRAME
#undef WINDOWUNSECUREFRAME
#undef WINDOWSECURE

Binary file not shown.

Before

Width:  |  Height:  |  Size: 178 KiB

After

Width:  |  Height:  |  Size: 176 KiB

View File

@@ -5003,9 +5003,9 @@
"bSk" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "hazard door north"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/science/hallway)
"bSl" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "hazard door north"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/science/hallway)
"bSm" = (/turf/simulated/wall/r_wall,/area/science/mixing)
"bSn" = (/obj/structure/window/plasmareinforced{dir = 1},/obj/structure/window/plasmareinforced,/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/grille,/obj/structure/window/full/plasmareinforced,/turf/simulated/floor/plating,/area/science/mixing)
"bSo" = (/obj/structure/window/plasmareinforced{dir = 1},/obj/structure/window/plasmareinforced,/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/window/full/plasmareinforced,/turf/simulated/floor/plating,/area/science/mixing)
"bSp" = (/obj/structure/window/plasmareinforced{dir = 1},/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/window/plasmareinforced,/obj/structure/grille,/obj/structure/window/full/plasmareinforced,/turf/simulated/floor/plating,/area/science/mixing)
"bSn" = (/obj/structure/window/plasmareinforced{dir = 1},/obj/structure/window/plasmareinforced,/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/grille,/obj/structure/window/full/reinforced/plasma,/turf/simulated/floor/plating,/area/science/mixing)
"bSo" = (/obj/structure/window/plasmareinforced{dir = 1},/obj/structure/window/plasmareinforced,/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/window/full/reinforced/plasma,/turf/simulated/floor/plating,/area/science/mixing)
"bSp" = (/obj/structure/window/plasmareinforced{dir = 1},/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/window/plasmareinforced,/obj/structure/grille,/obj/structure/window/full/reinforced/plasma,/turf/simulated/floor/plating,/area/science/mixing)
"bSq" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"bSr" = (/obj/structure/catwalk{icon_state = "catwalk1"},/turf/space,/area)
"bSs" = (/obj/machinery/door/airlock/external{name = "Toxins Test Chamber"; req_access_txt = "0"},/turf/simulated/floor/plating/airless,/area/science/test_area)
@@ -7024,7 +7024,7 @@
"cFd" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/engineering/burn_chamber)
"cFe" = (/obj/machinery/airlock_sensor{id_tag = "inc_ext_airlock_sensor"; master_tag = "inc_airlock_control"; pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/engineering/burn_chamber)
"cFf" = (/obj/machinery/embedded_controller/radio/advanced_airlock_controller{frequency = 1449; id_tag = "inc_airlock_control"; pixel_x = -24; tag_airpump = "inc_airlock_pump"; tag_chamber_sensor = "inc_chamber_airlock_sensor"; tag_exterior_door = "inc_airlock_exterior"; tag_exterior_sensor = "inc_ext_airlock_sensor"; tag_interior_door = "inc_airlock_interior"; tag_interior_sensor = "inc_int_airlock_sensor"},/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor,/area/engineering/burn_chamber)
"cFg" = (/obj/structure/window/full/plasmareinforced,/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{dir = 8},/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced{dir = 1},/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engineering/burn_chamber)
"cFg" = (/obj/structure/window/full/reinforced/plasma,/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{dir = 8},/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced{dir = 1},/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engineering/burn_chamber)
"cFh" = (/obj/effect/decal/warning_stripes{icon_state = "bot"},/obj/machinery/atmospherics/unary/portables_connector,/obj/machinery/atmospherics/unary/cap/hidden/general{tag = "icon-cap (WEST)"; icon_state = "cap"; dir = 8},/turf/simulated/floor{dir = 9; icon_state = "yellowfull"},/area/engineering/burn_chamber)
"cFi" = (/obj/effect/decal/warning_stripes{icon_state = "bot"},/obj/machinery/atmospherics/unary/portables_connector,/turf/simulated/floor{dir = 9; icon_state = "yellowfull"},/area/engineering/burn_chamber)
"cFj" = (/turf/simulated/floor,/area/engineering/burn_chamber)
@@ -7073,7 +7073,7 @@
"cGa" = (/turf/simulated/floor/engine,/area/science/xenobiology/specimen_6)
"cGb" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 5},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/engineering/burn_chamber)
"cGc" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 10},/obj/machinery/atmospherics/unary/outlet_injector{dir = 4; frequency = 1449; id_tag = "inc_in"},/obj/effect/decal/warning_stripes{icon_state = "bot"},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/engineering/burn_chamber)
"cGd" = (/obj/structure/window/full/plasmareinforced,/obj/machinery/atmospherics/pipe/simple/yellow/hidden{dir = 4},/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engineering/burn_chamber)
"cGd" = (/obj/structure/window/full/reinforced/plasma,/obj/machinery/atmospherics/pipe/simple/yellow/hidden{dir = 4},/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engineering/burn_chamber)
"cGe" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/manifold/yellow/hidden,/obj/machinery/meter{name = "Fuel Meter"},/turf/simulated/floor{dir = 6; icon_state = "yellow"},/area/engineering/burn_chamber)
"cGf" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/manifold/yellow/hidden,/turf/simulated/floor{dir = 6; icon_state = "yellow"},/area/engineering/burn_chamber)
"cGg" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/yellow/hidden{dir = 9},/turf/simulated/floor{dir = 6; icon_state = "yellow"},/area/engineering/burn_chamber)
@@ -7118,7 +7118,7 @@
"cGT" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/engine,/area/science/xenobiology/specimen_6)
"cGU" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/lattice,/obj/structure/lattice,/turf/space,/area)
"cGV" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 9},/obj/machinery/air_sensor{frequency = 1449; id_tag = "inc_sensor"; output = 63},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/engineering/burn_chamber)
"cGW" = (/obj/structure/window/full/plasmareinforced,/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engineering/burn_chamber)
"cGW" = (/obj/structure/window/full/reinforced/plasma,/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engineering/burn_chamber)
"cGX" = (/obj/machinery/light/small{dir = 4},/obj/effect/decal/warning_stripes{tag = "icon-warning"; icon_state = "warning"; dir = 2},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/engineering/atmos)
"cGY" = (/obj/machinery/door_control{desc = "Lets all the hot gas out very quickly."; id_tag = "Burn Chamber Vent"; name = "Burn Chamber Vent"; pixel_x = -7; pixel_y = 32; req_access_txt = "0"},/obj/machinery/ignition_switch{id_tag = "Burn Chamber Igniter"; pixel_x = 6; pixel_y = 32},/turf/simulated/floor,/area/engineering/burn_chamber)
"cGZ" = (/obj/machinery/atmospherics/binary/pump{name = "Hot Fill Pump"},/turf/simulated/floor/plating,/area/engineering/burn_chamber)
@@ -7151,7 +7151,7 @@
"cHA" = (/obj/machinery/door/poddoor{desc = "By gods, release the hounds!"; id_tag = "xenobioout6"; name = "Containment Release"},/obj/machinery/atmospherics/pipe/simple/filtering/hidden,/turf/simulated/floor/engine,/area/science/xenobiology/specimen_6)
"cHB" = (/obj/structure/sign/biohazard,/turf/simulated/wall/r_wall,/area/science/xenobiology/specimen_6)
"cHC" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/obj/machinery/igniter{id_tag = "Burn Chamber Igniter"},/obj/effect/decal/warning_stripes{icon_state = "bot"},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/engineering/burn_chamber)
"cHD" = (/obj/structure/window/full/plasmareinforced,/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{dir = 8},/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engineering/burn_chamber)
"cHD" = (/obj/structure/window/full/reinforced/plasma,/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{dir = 8},/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engineering/burn_chamber)
"cHE" = (/obj/machinery/air_sensor{frequency = 1443; id_tag = "air_sensor"; output = 7},/obj/effect/decal/warning_stripes{tag = "icon-warning"; icon_state = "warning"; dir = 2},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/engineering/atmos)
"cHF" = (/obj/machinery/atmospherics/pipe/simple/insulated/hidden/blue,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/effect/decal/warning_stripes/pathmarkers/blue,/obj/effect/decal/warning_stripes/pathmarkers/blue{tag = "icon-pathmarker (NORTH)"; icon_state = "pathmarker"; dir = 1},/turf/simulated/floor,/area/engineering/engine)
"cHG" = (/obj/machinery/atmospherics/pipe/simple/insulated/hidden{dir = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/effect/decal/warning_stripes/pathmarkers/red,/obj/effect/decal/warning_stripes/pathmarkers/red{tag = "icon-pathmarker (NORTH)"; icon_state = "pathmarker"; dir = 1},/turf/simulated/floor,/area/engineering/engine)
@@ -7195,7 +7195,7 @@
"cIs" = (/obj/machinery/camera{c_tag = "Engine West"; dir = 4},/obj/machinery/power/terminal{dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/insulated/hidden{dir = 4},/obj/effect/decal/warning_stripes/pathmarkers/red{tag = "icon-pathmarker (WEST)"; icon_state = "pathmarker"; dir = 8},/obj/effect/decal/warning_stripes/pathmarkers/red{tag = "icon-pathmarker (EAST)"; icon_state = "pathmarker"; dir = 4},/turf/simulated/floor,/area/engineering/engine)
"cIt" = (/obj/machinery/atmospherics/pipe/simple/insulated/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/engineering/burn_chamber)
"cIu" = (/obj/machinery/atmospherics/pipe/manifold/insulated/hidden{dir = 1},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/engineering/burn_chamber)
"cIv" = (/obj/structure/window/full/plasmareinforced,/obj/machinery/atmospherics/pipe/manifold/insulated/hidden{dir = 1},/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/grille,/obj/machinery/meter{name = "Vent Gas Meter"},/turf/simulated/floor/plating/airless,/area/engineering/burn_chamber)
"cIv" = (/obj/structure/window/full/reinforced/plasma,/obj/machinery/atmospherics/pipe/manifold/insulated/hidden{dir = 1},/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/grille,/obj/machinery/meter{name = "Vent Gas Meter"},/turf/simulated/floor/plating/airless,/area/engineering/burn_chamber)
"cIw" = (/obj/machinery/atmospherics/binary/valve/digital{dir = 4; name = "Hot Loop Release Valve"},/obj/effect/decal/warning_stripes{tag = "icon-warning (NORTHEAST)"; icon_state = "warning"; dir = 5},/turf/simulated/floor/plating,/area/engineering/burn_chamber)
"cIx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/insulated/hidden{dir = 9},/obj/effect/decal/warning_stripes/pathmarkers/red{tag = "icon-pathmarker (NORTH)"; icon_state = "pathmarker"; dir = 1},/obj/effect/decal/warning_stripes/pathmarkers/red{tag = "icon-pathmarker (WEST)"; icon_state = "pathmarker"; dir = 8},/turf/simulated/floor,/area/engineering/engine)
"cIy" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/insulated/hidden/blue,/obj/effect/decal/warning_stripes/pathmarkers/blue,/obj/effect/decal/warning_stripes/pathmarkers/blue{tag = "icon-pathmarker (NORTH)"; icon_state = "pathmarker"; dir = 1},/turf/simulated/floor,/area/engineering/engine)
@@ -7235,7 +7235,7 @@
"cJg" = (/obj/machinery/atmospherics/trinary/filter{dir = 1; filter_type = 1; icon_state = "intact_on"; name = "Gas filter (Xeno cell 6)"; on = 1; req_access = null; req_access_txt = "55"},/turf/simulated/floor/plating,/area/maintenance/asmaint3)
"cJh" = (/obj/machinery/atmospherics/pipe/simple/filtering/hidden{dir = 9},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/asmaint3)
"cJi" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; frequency = 1449; id_tag = "inc_out"; name = "Burn Chamber Scrubber"; on = 1},/obj/effect/decal/warning_stripes{icon_state = "bot"},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/engineering/burn_chamber)
"cJj" = (/obj/structure/window/full/plasmareinforced,/obj/machinery/atmospherics/pipe/simple/insulated/hidden{dir = 5},/obj/structure/window/plasmareinforced,/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engineering/burn_chamber)
"cJj" = (/obj/structure/window/full/reinforced/plasma,/obj/machinery/atmospherics/pipe/simple/insulated/hidden{dir = 5},/obj/structure/window/plasmareinforced,/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engineering/burn_chamber)
"cJk" = (/obj/machinery/atmospherics/binary/valve/digital{dir = 4; name = "Cold Loop Release Valve"},/obj/effect/decal/warning_stripes{tag = "icon-warning (SOUTHEAST)"; icon_state = "warning"; dir = 6},/turf/simulated/floor/plating,/area/engineering/burn_chamber)
"cJl" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/insulated/hidden/blue{dir = 4},/obj/effect/decal/warning_stripes{tag = "icon-warning_corner"; icon_state = "warning_corner"; dir = 2},/obj/effect/decal/warning_stripes/pathmarkers/blue{tag = "icon-pathmarker (WEST)"; icon_state = "pathmarker"; dir = 8},/obj/effect/decal/warning_stripes/pathmarkers/blue{tag = "icon-pathmarker (EAST)"; icon_state = "pathmarker"; dir = 4},/turf/simulated/floor,/area/engineering/engine)
"cJm" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "engineering_west_airlock"; name = "interior access button"; pixel_x = -20; pixel_y = -20; req_access_txt = "10;13"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/insulated/hidden/blue{dir = 4},/obj/effect/decal/warning_stripes/pathmarkers/blue{tag = "icon-pathmarker (WEST)"; icon_state = "pathmarker"; dir = 8},/obj/effect/decal/warning_stripes/pathmarkers/blue{tag = "icon-pathmarker (EAST)"; icon_state = "pathmarker"; dir = 4},/turf/simulated/floor,/area/engineering/engine)
@@ -9657,8 +9657,8 @@
"dDK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
"dDL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
"dDM" = (/obj/structure/table,/obj/item/weapon/rack_parts,/turf/simulated/floor,/area/derelict/bridge)
"dDN" = (/obj/structure/table,/obj/structure/window/basic,/turf/simulated/floor,/area/derelict/bridge)
"dDO" = (/obj/structure/window/basic,/turf/simulated/floor,/area/derelict/bridge)
"dDN" = (/obj/structure/table,/obj/structure/window,/turf/simulated/floor,/area/derelict/bridge)
"dDO" = (/obj/structure/window,/turf/simulated/floor,/area/derelict/bridge)
"dDP" = (/obj/structure/table,/obj/structure/cable,/obj/machinery/power/apc{pixel_y = -24},/turf/simulated/floor,/area/derelict/bridge)
"dDQ" = (/obj/structure/table,/obj/machinery/light/small,/obj/item/weapon/stamp/denied,/turf/simulated/floor,/area/derelict/bridge)
"dDR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless{broken = 1; icon_state = "damaged3"},/area/derelict/hallway/primary)
@@ -9718,7 +9718,7 @@
"dET" = (/turf/simulated/wall/r_wall,/area/derelict/hallway/primary)
"dEU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary)
"dEV" = (/obj/item/weapon/paper{info = "<b>Objective #1</b>: Destroy the station with a nuclear device."; name = "Objectives of a Nuclear Operative"},/turf/simulated/floor/airless{broken = 1; icon_state = "damaged2"},/area/derelict/singularity_engine)
"dEW" = (/obj/structure/window/basic{dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
"dEW" = (/obj/structure/window{dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
"dEX" = (/obj/item/stack/cable_coil/cut,/turf/simulated/floor/airless{broken = 1; icon_state = "damaged4"},/area/derelict/singularity_engine)
"dEY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
"dEZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
@@ -9727,7 +9727,7 @@
"dFc" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/floor/airless{broken = 1; icon_state = "damaged2"},/area/derelict/singularity_engine)
"dFd" = (/obj/item/weapon/shard,/turf/simulated/floor/airless{broken = 1; icon_state = "damaged5"},/area/derelict/singularity_engine)
"dFe" = (/obj/machinery/light/small,/turf/simulated/floor/airless,/area/derelict/hallway/primary)
"dFf" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/turf/simulated/floor/plating/airless,/area)
"dFf" = (/obj/structure/grille,/obj/structure/window{dir = 8},/turf/simulated/floor/plating/airless,/area)
"dFg" = (/obj/item/weapon/shard,/obj/structure/grille{density = 0; destroyed = 1; health = 0; icon_state = "brokengrille"},/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; name = "Syndicate agent remains"},/turf/simulated/floor/airless{broken = 1; icon_state = "damaged2"},/area/derelict/singularity_engine)
"dFh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless{broken = 1; icon_state = "damaged2"},/area/derelict/hallway/primary)
"dFi" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
@@ -9748,7 +9748,7 @@
"dFx" = (/turf/simulated/wall,/area/derelict/arrival)
"dFy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
"dFz" = (/obj/item/stack/medical/ointment,/turf/simulated/floor/airless{broken = 1; icon_state = "damaged3"},/area/derelict/medical)
"dFA" = (/obj/structure/window/full/basic,/turf/space,/area)
"dFA" = (/obj/structure/window/full,/turf/space,/area)
"dFB" = (/obj/structure/table,/turf/simulated/floor,/area/derelict/arrival)
"dFC" = (/obj/structure/stool/bed/chair,/turf/simulated/floor,/area/derelict/arrival)
"dFD" = (/turf/simulated/floor,/area/derelict/arrival)
@@ -9759,7 +9759,7 @@
"dFI" = (/obj/item/weapon/shard,/turf/space,/area)
"dFJ" = (/obj/structure/grille,/turf/space,/area/derelict/singularity_engine)
"dFK" = (/obj/item/stack/medical/bruise_pack,/turf/simulated/floor/airless{broken = 1; icon_state = "damaged2"},/area/derelict/medical)
"dFL" = (/obj/structure/lattice,/obj/structure/window/basic,/turf/space,/area)
"dFL" = (/obj/structure/lattice,/obj/structure/window,/turf/space,/area)
"dFM" = (/turf/simulated/floor/airless{broken = 1; icon_state = "damaged5"},/area)
"dFN" = (/turf/simulated/floor/plating/airless,/area/derelict/arrival)
"dFO" = (/obj/item/weapon/shard,/obj/structure/grille{density = 0; destroyed = 1; health = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating/airless,/area/derelict/medical)
@@ -9781,9 +9781,9 @@
"dGe" = (/turf/simulated/floor/plating/airless{broken = 1; icon_state = "platingdmg1"},/area/derelict/hallway/secondary)
"dGf" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plating/airless,/area/derelict/medical)
"dGg" = (/turf/simulated/floor/airless{broken = 1; icon_state = "damaged5"},/area/derelict/hallway/primary)
"dGh" = (/obj/structure/window/basic{dir = 4},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary)
"dGi" = (/obj/structure/lattice,/obj/structure/window/basic{dir = 1},/turf/space,/area)
"dGj" = (/obj/structure/lattice,/obj/structure/lattice,/obj/structure/window/basic{dir = 1},/turf/space,/area)
"dGh" = (/obj/structure/window{dir = 4},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary)
"dGi" = (/obj/structure/lattice,/obj/structure/window{dir = 1},/turf/space,/area)
"dGj" = (/obj/structure/lattice,/obj/structure/lattice,/obj/structure/window{dir = 1},/turf/space,/area)
"dGk" = (/turf/simulated/floor/plating,/area/derelict/arrival)
"dGl" = (/obj/machinery/door/airlock/medical{name = "Morgue"; req_access_txt = "6"},/turf/simulated/floor{icon_state = "dark"},/area/derelict/medical/chapel)
"dGm" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical)
@@ -9854,8 +9854,8 @@
"dHz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical)
"dHA" = (/obj/structure/closet/l3closet/general,/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical)
"dHB" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area)
"dHC" = (/obj/structure/window/basic,/turf/space,/area)
"dHD" = (/obj/structure/window/basic{dir = 8},/turf/space,/area)
"dHC" = (/obj/structure/window,/turf/space,/area)
"dHD" = (/obj/structure/window{dir = 8},/turf/space,/area)
"dHE" = (/obj/machinery/light{dir = 8},/turf/simulated/floor,/area/derelict/arrival)
"dHF" = (/obj/machinery/light{dir = 4},/turf/simulated/floor,/area/derelict/arrival)
"dHG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/derelict/arrival)
@@ -9874,15 +9874,15 @@
"dHT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/research{name = "Toxins Research"; req_access_txt = "7"},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
"dHU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless,/area)
"dHV" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless,/area)
"dHW" = (/obj/structure/window/basic{dir = 8},/obj/structure/window/basic,/turf/space,/area)
"dHW" = (/obj/structure/window{dir = 8},/obj/structure/window,/turf/space,/area)
"dHX" = (/obj/machinery/door/airlock/external{name = "Arrival Airlock"},/turf/simulated/floor/plating,/area/derelict/arrival)
"dHY" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
"dHZ" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area)
"dIa" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area)
"dIb" = (/obj/structure/window/basic{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area)
"dIb" = (/obj/structure/window{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area)
"dIc" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless,/area)
"dId" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area)
"dIe" = (/obj/structure/window/basic,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless,/area)
"dIe" = (/obj/structure/window,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless,/area)
"dIf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/research{name = "Toxins Research"; req_access_txt = "7"},/turf/simulated/floor/airless,/area/derelict/arrival)
"dIg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/derelict/arrival)
"dIh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/derelict/arrival)
@@ -9892,10 +9892,10 @@
"dIl" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
"dIm" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
"dIn" = (/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
"dIo" = (/obj/structure/window/basic{dir = 1},/turf/space,/area)
"dIp" = (/obj/structure/window/full/basic,/turf/simulated/floor/plating/airless,/area)
"dIq" = (/obj/structure/grille,/obj/structure/window/basic{dir = 1},/turf/space,/area)
"dIr" = (/obj/structure/window/basic{dir = 1},/turf/simulated/floor/plating/airless,/area)
"dIo" = (/obj/structure/window{dir = 1},/turf/space,/area)
"dIp" = (/obj/structure/window/full,/turf/simulated/floor/plating/airless,/area)
"dIq" = (/obj/structure/grille,/obj/structure/window{dir = 1},/turf/space,/area)
"dIr" = (/obj/structure/window{dir = 1},/turf/simulated/floor/plating/airless,/area)
"dIs" = (/obj/structure/cable,/obj/machinery/power/apc{pixel_y = -24},/turf/simulated/floor,/area/derelict/arrival)
"dIt" = (/obj/machinery/power/rad_collector,/turf/simulated/floor,/area/derelict/arrival)
"dIu" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor,/area/derelict/arrival)
@@ -9911,15 +9911,15 @@
"dIE" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
"dIF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/derelict/hallway/primary)
"dIG" = (/obj/machinery/door/airlock/security{name = "Gas Storage"; req_access = null; req_access_txt = "3"},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary)
"dIH" = (/obj/structure/lattice,/obj/structure/window/basic{dir = 4},/turf/space,/area)
"dII" = (/obj/structure/girder,/obj/structure/window/basic,/turf/simulated/floor/plating/airless,/area/derelict/arrival)
"dIH" = (/obj/structure/lattice,/obj/structure/window{dir = 4},/turf/space,/area)
"dII" = (/obj/structure/girder,/obj/structure/window,/turf/simulated/floor/plating/airless,/area/derelict/arrival)
"dIJ" = (/obj/structure/stool/bed,/turf/simulated/floor/airless,/area/derelict/hallway/primary)
"dIK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary)
"dIL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary)
"dIM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary)
"dIN" = (/obj/machinery/door/airlock/security{name = "Security"; req_access = null; req_access_txt = "1"},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
"dIO" = (/obj/item/weapon/cigbutt,/turf/space,/area)
"dIP" = (/obj/structure/window/basic{dir = 1},/turf/simulated/floor/plating,/area/derelict/arrival)
"dIP" = (/obj/structure/window{dir = 1},/turf/simulated/floor/plating,/area/derelict/arrival)
"dIQ" = (/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/derelict/arrival)
"dIR" = (/obj/structure/closet/crate/secure/plasma/prefilled,/turf/simulated/floor,/area/derelict/arrival)
"dIS" = (/obj/item/weapon/pen,/obj/machinery/power/rad_collector,/turf/simulated/floor,/area/derelict/arrival)
@@ -9936,7 +9936,7 @@
"dJd" = (/obj/structure/stool,/turf/simulated/floor/airless,/area/derelict/hallway/primary)
"dJe" = (/obj/machinery/door/airlock/maintenance{name = "Atmospherics Access"; req_access_txt = "24"},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary)
"dJf" = (/obj/structure/closet/wardrobe/orange,/turf/simulated/floor/airless,/area)
"dJg" = (/obj/structure/window/basic{dir = 4},/turf/space,/area)
"dJg" = (/obj/structure/window{dir = 4},/turf/space,/area)
"dJh" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/derelict/arrival)
"dJi" = (/obj/structure/closet/wardrobe,/turf/simulated/floor,/area/derelict/arrival)
"dJj" = (/turf/simulated/floor/airless{broken = 1; icon_state = "damaged2"},/area/derelict/teleporter)
@@ -9962,7 +9962,7 @@
"dJD" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless,/area)
"dJE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/wall/r_wall,/area)
"dJF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/wall/r_wall,/area/derelict/hallway/secondary)
"dJG" = (/obj/structure/window/basic{dir = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary)
"dJG" = (/obj/structure/window{dir = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary)
"dJH" = (/turf/space,/area/shuttle/salvage/derelict)
"dJI" = (/obj/structure/grille,/obj/item/weapon/shard,/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating/airless,/area)
"dJJ" = (/obj/structure/grille,/obj/structure/window/full/reinforced,/turf/simulated/floor/plating/airless,/area)
@@ -10009,8 +10009,8 @@
"dKy" = (/obj/machinery/door/airlock/command{name = "AI Upload"; req_access_txt = "16"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/tape/engineering{icon_state = "engineering_door"; layer = 3.2},/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload)
"dKz" = (/obj/machinery/door/airlock/external{name = "Escape Airlock"},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary)
"dKA" = (/obj/machinery/door/firedoor/border_only{name = "Firelock East"},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary)
"dKB" = (/obj/structure/window/basic{dir = 4},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary)
"dKC" = (/obj/structure/window/basic{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary)
"dKB" = (/obj/structure/window{dir = 4},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary)
"dKC" = (/obj/structure/window{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary)
"dKD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload)
"dKE" = (/obj/structure/closet/emcloset,/turf/simulated/floor/airless,/area/derelict/hallway/secondary)
"dKF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary)