From 1ae49ef90596e08ff59bbac3845a6196ed548237 Mon Sep 17 00:00:00 2001
From: Varlaisvea <125837828+Varlaisvea@users.noreply.github.com>
Date: Thu, 9 Mar 2023 02:55:54 +0000
Subject: [PATCH] the little construction pr
---
code/__defines/materials.dm | 1 +
code/datums/autolathe/engineering.dm | 4 +
code/game/machinery/computer/arcade.dm | 2 +
code/game/machinery/doors/airlock.dm | 1490 ++++++++
code/game/machinery/frame.dm | 11 +
.../objects/items/stacks/tiles/tile_types.dm | 83 +-
.../items/weapons/circuitboards/frame.dm | 6 +
code/game/objects/structures/lattice.dm | 5 +-
code/game/objects/structures/window.dm | 709 ++++
.../materials/materials/organic/grass.dm | 31 +
polaris.dme | 3357 +++++++++++++++++
11 files changed, 5697 insertions(+), 2 deletions(-)
create mode 100644 code/modules/materials/materials/organic/grass.dm
create mode 100644 polaris.dme
diff --git a/code/__defines/materials.dm b/code/__defines/materials.dm
index 97f30e52477..0e242469546 100644
--- a/code/__defines/materials.dm
+++ b/code/__defines/materials.dm
@@ -56,6 +56,7 @@
#define MAT_DEUTERIUM "deuterium"
#define MAT_CONCRETE "concrete"
#define MAT_PLASTEELREBAR "plasteel rebar"
+#define MAT_GRASS "grass"
#define DEFAULT_TABLE_MATERIAL MAT_PLASTIC
diff --git a/code/datums/autolathe/engineering.dm b/code/datums/autolathe/engineering.dm
index e2ff93b797f..228f0d54281 100644
--- a/code/datums/autolathe/engineering.dm
+++ b/code/datums/autolathe/engineering.dm
@@ -78,6 +78,10 @@
name = "request console electronics"
path =/obj/item/weapon/circuitboard/request
+/datum/category_item/autolathe/engineering/electrochromic
+ name = "electrochromic window control electronics"
+ path =/obj/item/circuitboard/electrochromic
+
/datum/category_item/autolathe/engineering/pipelayer
name = "pipe layer electronics"
path =/obj/item/weapon/circuitboard/pipelayer
diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm
index 016a96c7230..dd9a4d78865 100644
--- a/code/game/machinery/computer/arcade.dm
+++ b/code/game/machinery/computer/arcade.dm
@@ -1337,3 +1337,5 @@
O = T
to_chat(user, "You turn in 2 tickets to the [src] and claim a prize!")
return
+ else
+ ..() //You can now actually deconstruct these.
\ No newline at end of file
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index f8590dabbc1..c02329eb557 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
//VOREStation Edit - Redone a lot of airlock things:
/*
- Specific department maintenance doors
@@ -1576,3 +1577,1492 @@ About the new airlock wires panel:
qdel(src)
return TRUE
return FALSE
+=======
+/*
+- Specific department maintenance doors
+- Named doors properly according to type
+- Gave them default access levels with the access constants
+- Improper'd all of the names in the new()
+*/
+
+/obj/machinery/door/airlock
+ name = "Airlock"
+ icon = 'icons/obj/doors/Doorint.dmi'
+ icon_state = "door_closed"
+ power_channel = ENVIRON
+
+ explosion_resistance = 10
+ var/aiControlDisabled = 0 //If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in.
+ var/hackProof = 0 // if 1, this door can't be hacked by the AI
+ var/electrified_until = 0 //World time when the door is no longer electrified. -1 if it is permanently electrified until someone fixes it.
+ var/main_power_lost_until = 0 //World time when main power is restored.
+ var/backup_power_lost_until = -1 //World time when backup power is restored.
+ var/has_beeped = 0 //If 1, will not beep on failed closing attempt. Resets when door closes.
+ var/spawnPowerRestoreRunning = 0
+ var/welded = null
+ var/locked = 0
+ var/lights = 1 // bolt lights show by default
+ var/aiDisabledIdScanner = 0
+ var/aiHacking = 0
+ var/obj/machinery/door/airlock/closeOther = null
+ var/closeOtherId = null
+ var/lockdownbyai = 0
+ autoclose = 1
+ var/assembly_type = /obj/structure/door_assembly
+ var/mineral = null
+ var/justzap = 0
+ var/safe = 1
+ normalspeed = 1
+ var/obj/item/airlock_electronics/electronics = null
+ var/hasShocked = 0 //Prevents multiple shocks from happening
+ var/secured_wires = 0
+ var/datum/wires/airlock/wires = null
+
+ var/open_sound_powered = 'sound/machines/door/covert1o.ogg'
+ var/open_sound_unpowered = 'sound/machines/door/airlockforced.ogg'
+ var/close_sound_powered = 'sound/machines/door/covert1c.ogg'
+ var/legacy_open_powered = 'sound/machines/door/old_airlock.ogg'
+ var/legacy_close_powered = 'sound/machines/door/old_airlockclose.ogg'
+ var/department_open_powered = null
+ var/department_close_powered = null
+ var/denied_sound = 'sound/machines/deniedbeep.ogg'
+ var/bolt_up_sound = 'sound/machines/door/boltsup.ogg'
+ var/bolt_down_sound = 'sound/machines/door/boltsdown.ogg'
+
+/obj/machinery/door/airlock/attack_generic(var/mob/living/user, var/damage)
+ if(stat & (BROKEN|NOPOWER))
+ if(damage >= STRUCTURE_MIN_DAMAGE_THRESHOLD)
+ if(src.locked || src.welded)
+ visible_message("\The [user] begins breaking into \the [src] internals!")
+ user.set_AI_busy(TRUE) // If the mob doesn't have an AI attached, this won't do anything.
+ if(do_after(user,10 SECONDS,src))
+ src.locked = 0
+ src.welded = 0
+ update_icon()
+ open(1)
+ if(prob(25))
+ src.shock(user, 100)
+ user.set_AI_busy(FALSE)
+ else if(src.density)
+ visible_message("\The [user] forces \the [src] open!")
+ open(1)
+ else
+ visible_message("\The [user] forces \the [src] closed!")
+ close(1)
+ else
+ visible_message("\The [user] strains fruitlessly to force \the [src] [density ? "open" : "closed"].")
+ return
+ ..()
+
+/obj/machinery/door/airlock/attack_alien(var/mob/user) //Familiar, right? Doors. -Mechoid
+ if(istype(user, /mob/living/carbon/human))
+ var/mob/living/carbon/human/X = user
+ if(istype(X.species, /datum/species/xenos))
+ if(src.locked || src.welded)
+ visible_message("\The [user] begins digging into \the [src] internals!")
+ src.do_animate("deny")
+ if(do_after(user,5 SECONDS,src))
+ visible_message("\The [user] forces \the [src] open, sparks flying from its electronics!")
+ src.do_animate("spark")
+ playsound(src, 'sound/machines/door/airlock_creaking.ogg', 100, 1, volume_channel = VOLUME_CHANNEL_DOORS)
+ src.locked = 0
+ src.welded = 0
+ update_icon()
+ open(1)
+ src.emag_act()
+ else if(src.density)
+ visible_message("\The [user] begins forcing \the [src] open!")
+ if(do_after(user, 5 SECONDS,src))
+ playsound(src, 'sound/machines/door/airlock_creaking.ogg', 100, 1, volume_channel = VOLUME_CHANNEL_DOORS)
+ visible_message("\The [user] forces \the [src] open!")
+ open(1)
+ else
+ visible_message("\The [user] forces \the [src] closed!")
+ close(1)
+ else
+ src.do_animate("deny")
+ visible_message("\The [user] strains fruitlessly to force \the [src] [density ? "open" : "closed"].")
+ return
+ ..()
+
+/obj/machinery/door/airlock/get_material()
+ if(mineral)
+ return get_material_by_name(mineral)
+ return get_material_by_name(DEFAULT_WALL_MATERIAL)
+
+/obj/machinery/door/airlock/command
+ name = "Command Airlock"
+ icon = 'icons/obj/doors/Doorcom.dmi'
+ req_one_access = list(access_heads)
+ assembly_type = /obj/structure/door_assembly/door_assembly_com
+ department_open_powered = 'sound/machines/door/cmd3o.ogg'
+ department_close_powered = 'sound/machines/door/cmd3c.ogg'
+
+/obj/machinery/door/airlock/security
+ name = "Security Airlock"
+ icon = 'icons/obj/doors/Doorsec.dmi'
+ req_one_access = list(access_security)
+ assembly_type = /obj/structure/door_assembly/door_assembly_sec
+ department_open_powered = 'sound/machines/door/sec1o.ogg'
+ department_close_powered = 'sound/machines/door/sec1c.ogg'
+
+/obj/machinery/door/airlock/engineering
+ name = "Engineering Airlock"
+ icon = 'icons/obj/doors/Dooreng.dmi'
+ req_one_access = list(access_engine)
+ assembly_type = /obj/structure/door_assembly/door_assembly_eng
+ department_open_powered = 'sound/machines/door/eng1o.ogg'
+ department_close_powered = 'sound/machines/door/eng1c.ogg'
+
+/obj/machinery/door/airlock/engineeringatmos
+ name = "Atmospherics Airlock"
+ icon = 'icons/obj/doors/Doorengatmos.dmi'
+ req_one_access = list(access_atmospherics)
+ assembly_type = /obj/structure/door_assembly/door_assembly_eat
+ department_open_powered = 'sound/machines/door/eng1o.ogg'
+ department_close_powered = 'sound/machines/door/eng1c.ogg'
+
+/obj/machinery/door/airlock/medical
+ name = "Medical Airlock"
+ icon = 'icons/obj/doors/Doormed.dmi'
+ req_one_access = list(access_medical)
+ assembly_type = /obj/structure/door_assembly/door_assembly_med
+ department_open_powered = 'sound/machines/door/med1o.ogg'
+ department_close_powered = 'sound/machines/door/med1c.ogg'
+
+/obj/machinery/door/airlock/maintenance
+ name = "Maintenance Access"
+ icon = 'icons/obj/doors/Doormaint.dmi'
+ assembly_type = /obj/structure/door_assembly/door_assembly_mai
+ open_sound_powered = 'sound/machines/door/door2o.ogg'
+ close_sound_powered = 'sound/machines/door/door2c.ogg'
+
+/obj/machinery/door/airlock/maintenance/cargo
+ icon = 'icons/obj/doors/Doormaint_cargo.dmi'
+ req_one_access = list(access_cargo)
+ department_open_powered = 'sound/machines/door/door2o.ogg'
+ department_close_powered = 'sound/machines/door/door2c.ogg'
+
+/obj/machinery/door/airlock/maintenance/command
+ icon = 'icons/obj/doors/Doormaint_command.dmi'
+ req_one_access = list(access_heads)
+
+/obj/machinery/door/airlock/maintenance/common
+ icon = 'icons/obj/doors/Doormaint_common.dmi'
+ open_sound_powered = 'sound/machines/door/hall3o.ogg'
+ close_sound_powered = 'sound/machines/door/hall3c.ogg'
+
+/obj/machinery/door/airlock/maintenance/engi
+ icon = 'icons/obj/doors/Doormaint_engi.dmi'
+ req_one_access = list(access_engine)
+
+/obj/machinery/door/airlock/maintenance/int
+ icon = 'icons/obj/doors/Doormaint_int.dmi'
+
+/obj/machinery/door/airlock/maintenance/medical
+ icon = 'icons/obj/doors/Doormaint_med.dmi'
+ req_one_access = list(access_medical)
+
+/obj/machinery/door/airlock/maintenance/rnd
+ icon = 'icons/obj/doors/Doormaint_rnd.dmi'
+ req_one_access = list(access_research)
+
+/obj/machinery/door/airlock/maintenance/sec
+ icon = 'icons/obj/doors/Doormaint_sec.dmi'
+ req_one_access = list(access_security)
+
+/obj/machinery/door/airlock/external
+ name = "External Airlock"
+ icon = 'icons/obj/doors/Doorext.dmi'
+ assembly_type = /obj/structure/door_assembly/door_assembly_ext
+ open_sound_powered = 'sound/machines/door/space1o.ogg'
+ close_sound_powered = 'sound/machines/door/space1c.ogg'
+
+/obj/machinery/door/airlock/external/white
+ icon = 'icons/obj/doors/Doorextwhite.dmi'
+
+/obj/machinery/door/airlock/external/glass/bolted
+ icon_state = "door_locked" // So it looks visibly bolted in map editor
+ locked = 1
+
+// For convenience in making docking ports: one that is pre-bolted with frequency set!
+/obj/machinery/door/airlock/external/glass/bolted/cycling
+ frequency = 1379
+
+/obj/machinery/door/airlock/glass_external
+ name = "External Airlock"
+ icon = 'icons/obj/doors/Doorextglass.dmi'
+ assembly_type = /obj/structure/door_assembly/door_assembly_ext
+ opacity = 0
+ glass = 1
+ req_one_access = list(access_external_airlocks)
+ open_sound_powered = 'sound/machines/door/space1o.ogg'
+ close_sound_powered = 'sound/machines/door/space1c.ogg'
+
+/obj/machinery/door/airlock/glass
+ name = "Glass Airlock"
+ icon = 'icons/obj/doors/Doorglass.dmi'
+ hitsound = 'sound/effects/Glasshit.ogg'
+ open_sound_powered = 'sound/machines/door/hall1o.ogg'
+ close_sound_powered = 'sound/machines/door/hall1c.ogg'
+ legacy_open_powered = 'sound/machines/door/windowdoor.ogg'
+ maxhealth = 300
+ explosion_resistance = 5
+ opacity = 0
+ glass = 1
+
+/obj/machinery/door/airlock/centcom
+ name = "Centcom Airlock"
+ icon = 'icons/obj/doors/Doorele.dmi'
+ req_one_access = list(access_cent_general)
+ opacity = 1
+ open_sound_powered = 'sound/machines/door/cmd3o.ogg'
+ close_sound_powered = 'sound/machines/door/cmd3c.ogg'
+
+/obj/machinery/door/airlock/glass_centcom
+ name = "Airlock"
+ icon = 'icons/obj/doors/Dooreleglass.dmi'
+ opacity = 0
+ glass = 1
+ open_sound_powered = 'sound/machines/door/cmd3o.ogg'
+ close_sound_powered = 'sound/machines/door/cmd3c.ogg'
+
+/obj/machinery/door/airlock/vault
+ name = "Vault"
+ icon = 'icons/obj/doors/vault.dmi'
+ explosion_resistance = 20
+ opacity = 1
+ secured_wires = 1
+ assembly_type = /obj/structure/door_assembly/door_assembly_highsecurity //Until somebody makes better sprites.
+ req_one_access = list(access_heads_vault)
+ open_sound_powered = 'sound/machines/door/vault1o.ogg'
+ close_sound_powered = 'sound/machines/door/vault1c.ogg'
+
+/obj/machinery/door/airlock/vault/bolted
+ icon_state = "door_locked"
+ locked = 1
+
+/obj/machinery/door/airlock/freezer
+ name = "Freezer Airlock"
+ icon = 'icons/obj/doors/Doorfreezer.dmi'
+ opacity = 1
+ assembly_type = /obj/structure/door_assembly/door_assembly_fre
+
+/obj/machinery/door/airlock/hatch
+ name = "Airtight Hatch"
+ icon = 'icons/obj/doors/Doorhatchele.dmi'
+ explosion_resistance = 20
+ opacity = 1
+ assembly_type = /obj/structure/door_assembly/door_assembly_hatch
+ req_one_access = list(access_maint_tunnels)
+ open_sound_powered = 'sound/machines/door/hatchopen.ogg'
+ close_sound_powered = 'sound/machines/door/hatchclose.ogg'
+ open_sound_unpowered = 'sound/machines/door/hatchforced.ogg'
+
+/obj/machinery/door/airlock/maintenance_hatch
+ name = "Maintenance Hatch"
+ icon = 'icons/obj/doors/Doorhatchmaint2.dmi'
+ explosion_resistance = 20
+ opacity = 1
+ assembly_type = /obj/structure/door_assembly/door_assembly_mhatch
+ req_one_access = list(access_maint_tunnels)
+ open_sound_powered = 'sound/machines/door/hatchopen.ogg'
+ close_sound_powered = 'sound/machines/door/hatchclose.ogg'
+ open_sound_unpowered = 'sound/machines/door/hatchforced.ogg'
+
+/obj/machinery/door/airlock/glass_command
+ name = "Command Airlock"
+ icon = 'icons/obj/doors/Doorcomglass.dmi'
+ hitsound = 'sound/effects/Glasshit.ogg'
+ maxhealth = 300
+ explosion_resistance = 5
+ opacity = 0
+ assembly_type = /obj/structure/door_assembly/door_assembly_com
+ glass = 1
+ req_one_access = list(access_heads)
+ department_open_powered = 'sound/machines/door/cmd1o.ogg'
+ department_close_powered = 'sound/machines/door/cmd1c.ogg'
+
+/obj/machinery/door/airlock/glass_engineering
+ name = "Engineering Airlock"
+ icon = 'icons/obj/doors/Doorengglass.dmi'
+ hitsound = 'sound/effects/Glasshit.ogg'
+ maxhealth = 300
+ explosion_resistance = 5
+ opacity = 0
+ assembly_type = /obj/structure/door_assembly/door_assembly_eng
+ glass = 1
+ req_one_access = list(access_engine)
+ department_open_powered = 'sound/machines/door/eng1o.ogg'
+ department_close_powered = 'sound/machines/door/eng1c.ogg'
+
+/obj/machinery/door/airlock/glass_engineeringatmos
+ name = "Atmospherics Airlock"
+ icon = 'icons/obj/doors/Doorengatmoglass.dmi'
+ hitsound = 'sound/effects/Glasshit.ogg'
+ maxhealth = 300
+ explosion_resistance = 5
+ opacity = 0
+ assembly_type = /obj/structure/door_assembly/door_assembly_eat
+ glass = 1
+ req_one_access = list(access_atmospherics)
+ department_open_powered = 'sound/machines/door/eng1o.ogg'
+ department_close_powered = 'sound/machines/door/eng1c.ogg'
+
+/obj/machinery/door/airlock/glass_security
+ name = "Security Airlock"
+ icon = 'icons/obj/doors/Doorsecglass.dmi'
+ hitsound = 'sound/effects/Glasshit.ogg'
+ maxhealth = 300
+ explosion_resistance = 5
+ opacity = 0
+ assembly_type = /obj/structure/door_assembly/door_assembly_sec
+ glass = 1
+ req_one_access = list(access_security)
+ department_open_powered = 'sound/machines/door/sec1o.ogg'
+ department_close_powered = 'sound/machines/door/sec1c.ogg'
+
+/obj/machinery/door/airlock/glass_medical
+ name = "Medical Airlock"
+ icon = 'icons/obj/doors/Doormedglass.dmi'
+ hitsound = 'sound/effects/Glasshit.ogg'
+ maxhealth = 300
+ explosion_resistance = 5
+ opacity = 0
+ assembly_type = /obj/structure/door_assembly/door_assembly_med
+ glass = 1
+ req_one_access = list(access_medical)
+ department_open_powered = 'sound/machines/door/med1o.ogg'
+ department_close_powered = 'sound/machines/door/med1c.ogg'
+
+/obj/machinery/door/airlock/mining
+ name = "Mining Airlock"
+ icon = 'icons/obj/doors/Doormining.dmi'
+ assembly_type = /obj/structure/door_assembly/door_assembly_min
+ req_one_access = list(access_mining)
+ department_open_powered = 'sound/machines/door/cgo1o.ogg'
+ department_close_powered = 'sound/machines/door/cgo1c.ogg'
+
+/obj/machinery/door/airlock/atmos
+ name = "Atmospherics Airlock"
+ icon = 'icons/obj/doors/Dooratmo.dmi'
+ assembly_type = /obj/structure/door_assembly/door_assembly_atmo
+ req_one_access = list(access_atmospherics)
+ department_open_powered = 'sound/machines/door/eng1o.ogg'
+ department_close_powered = 'sound/machines/door/eng1c.ogg'
+
+/obj/machinery/door/airlock/research
+ name = "Research Airlock"
+ icon = 'icons/obj/doors/Doorresearch.dmi'
+ assembly_type = /obj/structure/door_assembly/door_assembly_research
+ department_open_powered = 'sound/machines/door/sci1o.ogg'
+ department_close_powered = 'sound/machines/door/sci1c.ogg'
+
+/obj/machinery/door/airlock/glass_research
+ name = "Research Airlock"
+ icon = 'icons/obj/doors/Doorresearchglass.dmi'
+ hitsound = 'sound/effects/Glasshit.ogg'
+ maxhealth = 300
+ explosion_resistance = 5
+ opacity = 0
+ assembly_type = /obj/structure/door_assembly/door_assembly_research
+ glass = 1
+ req_one_access = list(access_research)
+ department_open_powered = 'sound/machines/door/sci1o.ogg'
+ department_close_powered = 'sound/machines/door/sci1c.ogg'
+
+/obj/machinery/door/airlock/glass_mining
+ name = "Mining Airlock"
+ icon = 'icons/obj/doors/Doorminingglass.dmi'
+ hitsound = 'sound/effects/Glasshit.ogg'
+ maxhealth = 300
+ explosion_resistance = 5
+ opacity = 0
+ assembly_type = /obj/structure/door_assembly/door_assembly_min
+ glass = 1
+ req_one_access = list(access_mining)
+ department_open_powered = 'sound/machines/door/cgo1o.ogg'
+ department_close_powered = 'sound/machines/door/cgo1c.ogg'
+
+/obj/machinery/door/airlock/glass_atmos
+ name = "Atmospherics Airlock"
+ icon = 'icons/obj/doors/Dooratmoglass.dmi'
+ hitsound = 'sound/effects/Glasshit.ogg'
+ maxhealth = 300
+ explosion_resistance = 5
+ opacity = 0
+ assembly_type = /obj/structure/door_assembly/door_assembly_atmo
+ glass = 1
+ req_one_access = list(access_atmospherics)
+ department_open_powered = 'sound/machines/door/eng1o.ogg'
+ department_close_powered = 'sound/machines/door/eng1c.ogg'
+
+/obj/machinery/door/airlock/gold
+ name = "Gold Airlock"
+ icon = 'icons/obj/doors/Doorgold.dmi'
+ mineral = "gold"
+
+/obj/machinery/door/airlock/silver
+ name = "Silver Airlock"
+ icon = 'icons/obj/doors/Doorsilver.dmi'
+ mineral = "silver"
+
+/obj/machinery/door/airlock/diamond
+ name = "Diamond Airlock"
+ icon = 'icons/obj/doors/Doordiamond.dmi'
+ mineral = "diamond"
+
+/obj/machinery/door/airlock/uranium
+ name = "Uranium Airlock"
+ desc = "And they said I was crazy."
+ icon = 'icons/obj/doors/Dooruranium.dmi'
+ mineral = "uranium"
+ var/last_event = 0
+ var/rad_power = 7.5
+
+/obj/machinery/door/airlock/process()
+ // Deliberate no call to parent.
+ if(main_power_lost_until > 0 && world.time >= main_power_lost_until)
+ regainMainPower()
+
+ if(backup_power_lost_until > 0 && world.time >= backup_power_lost_until)
+ regainBackupPower()
+
+ else if(electrified_until > 0 && world.time >= electrified_until)
+ electrify(0)
+
+ if (..() == PROCESS_KILL && !(main_power_lost_until > 0 || backup_power_lost_until > 0 || electrified_until > 0))
+ . = PROCESS_KILL
+
+/obj/machinery/door/airlock/uranium/process()
+ if(world.time > last_event+20)
+ if(prob(50))
+ SSradiation.radiate(src, rad_power)
+ last_event = world.time
+ ..()
+
+/obj/machinery/door/airlock/phoron
+ name = "Phoron Airlock"
+ desc = "No way this can end badly."
+ icon = 'icons/obj/doors/Doorphoron.dmi'
+ mineral = "phoron"
+
+/obj/machinery/door/airlock/phoron/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+ if(exposed_temperature > 300)
+ PhoronBurn(exposed_temperature)
+
+/obj/machinery/door/airlock/phoron/proc/ignite(exposed_temperature)
+ if(exposed_temperature > 300)
+ PhoronBurn(exposed_temperature)
+
+/obj/machinery/door/airlock/phoron/proc/PhoronBurn(temperature)
+ for(var/turf/simulated/floor/target_tile in range(2,loc))
+ target_tile.assume_gas("phoron", 35, 400+T0C)
+ spawn (0) target_tile.hotspot_expose(temperature, 400)
+ for(var/turf/simulated/wall/W in range(3,src))
+ W.burn((temperature/4))//Added so that you can't set off a massive chain reaction with a small flame
+ for(var/obj/machinery/door/airlock/phoron/D in range(3,src))
+ D.ignite(temperature/4)
+ new/obj/structure/door_assembly( src.loc )
+ qdel(src)
+
+/obj/machinery/door/airlock/sandstone
+ name = "Sandstone Airlock"
+ icon = 'icons/obj/doors/Doorsand.dmi'
+ mineral = "sandstone"
+
+/obj/machinery/door/airlock/science
+ name = "Research Airlock"
+ icon = 'icons/obj/doors/Doorsci.dmi'
+ assembly_type = /obj/structure/door_assembly/door_assembly_science
+ req_one_access = list(access_research)
+ department_open_powered = 'sound/machines/door/sci1o.ogg'
+ department_close_powered = 'sound/machines/door/sci1c.ogg'
+
+/obj/machinery/door/airlock/glass_science
+ name = "Glass Airlocks"
+ icon = 'icons/obj/doors/Doorsciglass.dmi'
+ opacity = 0
+ assembly_type = /obj/structure/door_assembly/door_assembly_science
+ glass = 1
+ req_one_access = list(access_research)
+ department_open_powered = 'sound/machines/door/sci1o.ogg'
+ department_close_powered = 'sound/machines/door/sci1c.ogg'
+
+/obj/machinery/door/airlock/highsecurity
+ name = "Secure Airlock"
+ icon = 'icons/obj/doors/hightechsecurity.dmi'
+ explosion_resistance = 20
+ secured_wires = 1
+ assembly_type = /obj/structure/door_assembly/door_assembly_highsecurity
+ req_one_access = list(access_heads_vault)
+ open_sound_powered = 'sound/machines/door/secure1o.ogg'
+ close_sound_powered = 'sound/machines/door/secure1c.ogg'
+
+/obj/machinery/door/airlock/voidcraft
+ name = "voidcraft hatch"
+ desc = "It's an extra resilient airlock intended for spacefaring vessels."
+ icon = 'icons/obj/doors/shuttledoors.dmi'
+ explosion_resistance = 20
+ opacity = 0
+ glass = 1
+ assembly_type = /obj/structure/door_assembly/door_assembly_voidcraft
+ open_sound_powered = 'sound/machines/door/shuttle1o.ogg'
+ close_sound_powered = 'sound/machines/door/shuttle1c.ogg'
+
+// Airlock opens from top-bottom instead of left-right.
+/obj/machinery/door/airlock/voidcraft/vertical
+ icon = 'icons/obj/doors/shuttledoors_vertical.dmi'
+ assembly_type = /obj/structure/door_assembly/door_assembly_voidcraft/vertical
+ open_sound_powered = 'sound/machines/door/shuttle1o.ogg'
+ close_sound_powered = 'sound/machines/door/shuttle1c.ogg'
+
+
+/datum/category_item/catalogue/anomalous/precursor_a/alien_airlock
+ name = "Precursor Alpha Object - Doors"
+ desc = "This object appears to be used in order to restrict or allow access to \
+ rooms based on its physical state. In other words, a door. \
+ Despite being designed and created by unknown ancient alien hands, this door has \
+ a large number of similarities to the conventional airlock, such as being driven by \
+ electricity, opening and closing by physically moving, and being air tight. \
+ It also operates by responding to signals through internal electrical conduits. \
+ These characteristics make it possible for one with experience with a multitool \
+ to manipulate the door.\
+
\
+ The symbol on the door does not match any living species' patterns, giving further \
+ implications that this door is very old, and yet it remains operational after \
+ thousands of years. It is unknown if that is due to superb construction, or \
+ unseen autonomous maintenance having been performed."
+ value = CATALOGUER_REWARD_EASY
+
+/obj/machinery/door/airlock/alien
+ name = "alien airlock"
+ desc = "You're fairly sure this is a door."
+ catalogue_data = list(/datum/category_item/catalogue/anomalous/precursor_a/alien_airlock)
+ icon = 'icons/obj/doors/Dooralien.dmi'
+ explosion_resistance = 20
+ secured_wires = TRUE
+ hackProof = TRUE
+ assembly_type = /obj/structure/door_assembly/door_assembly_alien
+ req_one_access = list(access_alien)
+
+/obj/machinery/door/airlock/alien/locked
+ icon_state = "door_locked"
+ locked = TRUE
+
+/obj/machinery/door/airlock/alien/public // Entry to UFO.
+ req_one_access = list()
+ normalspeed = FALSE // So it closes faster and hopefully keeps the warm air inside.
+
+/*
+About the new airlock wires panel:
+* An airlock wire dialog can be accessed by the normal way or by using wirecutters or a multitool on the door while the wire-panel is open. This would show the following wires, which you can either wirecut/mend or send a multitool pulse through. There are 9 wires.
+* one wire from the ID scanner. Sending a pulse through this flashes the red light on the door (if the door has power). If you cut this wire, the door will stop recognizing valid IDs. (If the door has 0000 access, it still opens and closes, though)
+* two wires for power. Sending a pulse through either one causes a breaker to trip, disabling the door for 10 seconds if backup power is connected, or 1 minute if not (or until backup power comes back on, whichever is shorter). Cutting either one disables the main door power, but unless backup power is also cut, the backup power re-powers the door in 10 seconds. While unpowered, the door may be open, but bolts-raising will not work. Cutting these wires may electrocute the user.
+* one wire for door bolts. Sending a pulse through this drops door bolts (whether the door is powered or not) or raises them (if it is). Cutting this wire also drops the door bolts, and mending it does not raise them. If the wire is cut, trying to raise the door bolts will not work.
+* two wires for backup power. Sending a pulse through either one causes a breaker to trip, but this does not disable it unless main power is down too (in which case it is disabled for 1 minute or however long it takes main power to come back, whichever is shorter). Cutting either one disables the backup door power (allowing it to be crowbarred open, but disabling bolts-raising), but may electocute the user.
+* one wire for opening the door. Sending a pulse through this while the door has power makes it open the door if no access is required.
+* one wire for AI control. Sending a pulse through this blocks AI control for a second or so (which is enough to see the AI control light on the panel dialog go off and back on again). Cutting this prevents the AI from controlling the door unless it has hacked the door through the power connection (which takes about a minute). If both main and backup power are cut, as well as this wire, then the AI cannot operate or hack the door at all.
+* one wire for electrifying the door. Sending a pulse through this electrifies the door for 30 seconds. Cutting this wire electrifies the door, so that the next person to touch the door without insulated gloves gets electrocuted. (Currently it is also STAYING electrified until someone mends the wire)
+* one wire for controling door safetys. When active, door does not close on someone. When cut, door will ruin someone's shit. When pulsed, door will immedately ruin someone's shit.
+* one wire for controlling door speed. When active, dor closes at normal rate. When cut, door does not close manually. When pulsed, door attempts to close every tick.
+*/
+
+
+
+/obj/machinery/door/airlock/bumpopen(mob/living/user as mob) //Airlocks now zap you when you 'bump' them open when they're electrified. --NeoFite
+ if(!issilicon(usr))
+ if(src.isElectrified())
+ if(!src.justzap)
+ if(src.shock(user, 100))
+ src.justzap = 1
+ spawn (10)
+ src.justzap = 0
+ return
+ else /*if(src.justzap)*/
+ return
+ ..(user)
+
+/obj/machinery/door/airlock/proc/isElectrified()
+ if(src.electrified_until != 0)
+ return 1
+ return 0
+
+/obj/machinery/door/airlock/proc/canAIControl()
+ return ((src.aiControlDisabled!=1) && (!src.isAllPowerLoss()));
+
+/obj/machinery/door/airlock/proc/canAIHack()
+ return ((src.aiControlDisabled==1) && (!hackProof) && (!src.isAllPowerLoss()));
+
+/obj/machinery/door/airlock/proc/arePowerSystemsOn()
+ if (stat & (NOPOWER|BROKEN))
+ return 0
+ return (src.main_power_lost_until==0 || src.backup_power_lost_until==0)
+
+/obj/machinery/door/airlock/requiresID()
+ return !(wires.is_cut(WIRE_IDSCAN) || aiDisabledIdScanner)
+
+/obj/machinery/door/airlock/proc/isAllPowerLoss()
+ if(stat & (NOPOWER|BROKEN))
+ return 1
+ if(mainPowerCablesCut() && backupPowerCablesCut())
+ return 1
+ return 0
+
+/obj/machinery/door/airlock/proc/mainPowerCablesCut()
+ return wires.is_cut(WIRE_MAIN_POWER1) || wires.is_cut(WIRE_MAIN_POWER2)
+
+/obj/machinery/door/airlock/proc/backupPowerCablesCut()
+ return wires.is_cut(WIRE_BACKUP_POWER1) || wires.is_cut(WIRE_BACKUP_POWER2)
+
+/obj/machinery/door/airlock/proc/loseMainPower()
+ main_power_lost_until = mainPowerCablesCut() ? -1 : world.time + SecondsToTicks(60)
+
+ // If backup power is permanently disabled then activate in 10 seconds if possible, otherwise it's already enabled or a timer is already running
+ if(backup_power_lost_until == -1 && !backupPowerCablesCut())
+ backup_power_lost_until = world.time + SecondsToTicks(10)
+
+ if(main_power_lost_until > 0 || backup_power_lost_until > 0)
+ START_MACHINE_PROCESSING(src)
+
+ // Disable electricity if required
+ if(electrified_until && isAllPowerLoss())
+ electrify(0)
+
+ update_icon()
+
+/obj/machinery/door/airlock/proc/loseBackupPower()
+ backup_power_lost_until = backupPowerCablesCut() ? -1 : world.time + SecondsToTicks(60)
+
+ if(backup_power_lost_until > 0)
+ START_MACHINE_PROCESSING(src)
+
+ // Disable electricity if required
+ if(electrified_until && isAllPowerLoss())
+ electrify(0)
+
+ update_icon()
+
+/obj/machinery/door/airlock/proc/regainMainPower()
+ if(!mainPowerCablesCut())
+ main_power_lost_until = 0
+ // If backup power is currently active then disable, otherwise let it count down and disable itself later
+ if(!backup_power_lost_until)
+ backup_power_lost_until = -1
+
+ update_icon()
+
+/obj/machinery/door/airlock/proc/regainBackupPower()
+ if(!backupPowerCablesCut())
+ // Restore backup power only if main power is offline, otherwise permanently disable
+ backup_power_lost_until = main_power_lost_until == 0 ? -1 : 0
+
+ update_icon()
+
+/obj/machinery/door/airlock/proc/electrify(var/duration, var/feedback = 0)
+ var/message = ""
+ if(wires.is_cut(WIRE_ELECTRIFY) && arePowerSystemsOn())
+ message = text("The electrification wire is cut - Door permanently electrified.")
+ src.electrified_until = -1
+ else if(duration && !arePowerSystemsOn())
+ message = text("The door is unpowered - Cannot electrify the door.")
+ src.electrified_until = 0
+ else if(!duration && electrified_until != 0)
+ message = "The door is now un-electrified."
+ src.electrified_until = 0
+ else if(duration) //electrify door for the given duration seconds
+ if(usr)
+ shockedby += text("\[[time_stamp()]\] - [usr](ckey:[usr.ckey])")
+ add_attack_logs(usr,name,"Electrified a door")
+ else
+ shockedby += text("\[[time_stamp()]\] - EMP)")
+ message = "The door is now electrified [duration == -1 ? "permanently" : "for [duration] second\s"]."
+ src.electrified_until = duration == -1 ? -1 : world.time + SecondsToTicks(duration)
+
+ if(electrified_until > 0)
+ START_MACHINE_PROCESSING(src)
+
+ if(feedback && message)
+ to_chat(usr,message)
+
+/obj/machinery/door/airlock/proc/set_idscan(var/activate, var/feedback = 0)
+ var/message = ""
+ if(wires.is_cut(WIRE_IDSCAN))
+ message = "The IdScan wire is cut - IdScan feature permanently disabled."
+ else if(activate && src.aiDisabledIdScanner)
+ src.aiDisabledIdScanner = 0
+ message = "IdScan feature has been enabled."
+ else if(!activate && !src.aiDisabledIdScanner)
+ src.aiDisabledIdScanner = 1
+ message = "IdScan feature has been disabled."
+
+ if(feedback && message)
+ to_chat(usr,message)
+
+/obj/machinery/door/airlock/proc/set_safeties(var/activate, var/feedback = 0)
+ var/message = ""
+ // Safeties! We don't need no stinking safeties!
+ if (wires.is_cut(WIRE_SAFETY))
+ message = text("The safety wire is cut - Cannot enable safeties.")
+ else if (!activate && src.safe)
+ safe = 0
+ else if (activate && !src.safe)
+ safe = 1
+
+ if(feedback && message)
+ to_chat(usr,message)
+
+// shock user with probability prb (if all connections & power are working)
+// returns 1 if shocked, 0 otherwise
+// The preceding comment was borrowed from the grille's shock script
+/obj/machinery/door/airlock/shock(mob/living/user, prb)
+ if(!arePowerSystemsOn())
+ return 0
+ if(hasShocked)
+ return 0 //Already shocked someone recently?
+ if(..())
+ hasShocked = 1
+ sleep(10)
+ hasShocked = 0
+ return 1
+ else
+ return 0
+
+
+/obj/machinery/door/airlock/update_icon()
+ cut_overlays()
+ if(density)
+ if(locked && lights && src.arePowerSystemsOn())
+ icon_state = "door_locked"
+ else
+ icon_state = "door_closed"
+ if(p_open || welded)
+ cut_overlays()
+ if(p_open)
+ add_overlay("panel_open")
+ if (!(stat & NOPOWER))
+ if(stat & BROKEN)
+ add_overlay("sparks_broken")
+ else if (health < maxhealth * 3/4)
+ add_overlay("sparks_damaged")
+ if(welded)
+ add_overlay("welded")
+ else if (health < maxhealth * 3/4 && !(stat & NOPOWER))
+ add_overlay("sparks_damaged")
+ else
+ icon_state = "door_open"
+ if((stat & BROKEN) && !(stat & NOPOWER))
+ add_overlay("sparks_open")
+ return
+
+/obj/machinery/door/airlock/do_animate(animation)
+ switch(animation)
+ if("opening")
+ cut_overlay()
+ if(p_open)
+ spawn(2) // The only work around that works. Downside is that the door will be gone for a millisecond.
+ flick("o_door_opening", src) //can not use flick due to BYOND bug updating overlays right before flicking
+ update_icon()
+ else
+ flick("door_opening", src)//[stat ? "_stat":]
+ update_icon()
+ if("closing")
+ cut_overlay()
+ if(p_open)
+ spawn(2)
+ flick("o_door_closing", src)
+ update_icon()
+ else
+ flick("door_closing", src)
+ update_icon()
+ if("spark")
+ if(density)
+ flick("door_spark", src)
+ if("deny")
+ if(density && src.arePowerSystemsOn())
+ flick("door_deny", src)
+ playsound(src, denied_sound, 50, 0, 3)
+ return
+
+/obj/machinery/door/airlock/attack_ai(mob/user as mob)
+ tgui_interact(user)
+
+/obj/machinery/door/airlock/attack_ghost(mob/user)
+ tgui_interact(user)
+
+/obj/machinery/door/airlock/tgui_interact(mob/user, datum/tgui/ui)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "AiAirlock", name)
+ ui.open()
+ return TRUE
+
+/obj/machinery/door/airlock/tgui_data(mob/user)
+ var/list/data = list()
+
+ var/list/power = list()
+ power["main"] = main_power_lost_until > 0 ? 0 : 2
+ power["main_timeleft"] = round(main_power_lost_until > 0 ? max(main_power_lost_until - world.time, 0) / 10 : main_power_lost_until, 1)
+ power["backup"] = backup_power_lost_until > 0 ? 0 : 2
+ power["backup_timeleft"] = round(backup_power_lost_until > 0 ? max(backup_power_lost_until - world.time, 0) / 10 : backup_power_lost_until, 1)
+ data["power"] = power
+
+ data["shock"] = (electrified_until == 0) ? 2 : 0
+ data["shock_timeleft"] = round(electrified_until > 0 ? max(electrified_until - world.time, 0) / 10 : electrified_until, 1)
+ data["id_scanner"] = !aiDisabledIdScanner
+ data["locked"] = locked // bolted
+ data["lights"] = lights // bolt lights
+ data["safe"] = safe // safeties
+ data["speed"] = normalspeed // safe speed
+ data["welded"] = welded // welded
+ data["opened"] = !density // opened
+
+ var/list/wire = list()
+ wire["main_1"] = !wires.is_cut(WIRE_MAIN_POWER1)
+ wire["main_2"] = !wires.is_cut(WIRE_MAIN_POWER2)
+ wire["backup_1"] = !wires.is_cut(WIRE_BACKUP_POWER1)
+ wire["backup_2"] = !wires.is_cut(WIRE_BACKUP_POWER2)
+ wire["shock"] = !wires.is_cut(WIRE_ELECTRIFY)
+ wire["id_scanner"] = !wires.is_cut(WIRE_IDSCAN)
+ wire["bolts"] = !wires.is_cut(WIRE_DOOR_BOLTS)
+ wire["lights"] = !wires.is_cut(WIRE_BOLT_LIGHT)
+ wire["safe"] = !wires.is_cut(WIRE_SAFETY)
+ wire["timing"] = !wires.is_cut(WIRE_SPEED)
+
+ data["wires"] = wire
+ return data
+
+/obj/machinery/door/airlock/proc/hack(mob/user as mob)
+ if(src.aiHacking==0)
+ src.aiHacking=1
+ spawn(20)
+ //TODO: Make this take a minute
+ to_chat(user, "Airlock AI control has been blocked. Beginning fault-detection.")
+ sleep(50)
+ if(src.canAIControl())
+ to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.")
+ src.aiHacking=0
+ return
+ else if(!src.canAIHack(user))
+ to_chat(user, "We've lost our connection! Unable to hack airlock.")
+ src.aiHacking=0
+ return
+ to_chat(user, "Fault confirmed: airlock control wire disabled or cut.")
+ sleep(20)
+ to_chat(user, "Attempting to hack into airlock. This may take some time.")
+ sleep(200)
+ if(src.canAIControl())
+ to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.")
+ src.aiHacking=0
+ return
+ else if(!src.canAIHack(user))
+ to_chat(user, "We've lost our connection! Unable to hack airlock.")
+ src.aiHacking=0
+ return
+ to_chat(user, "Upload access confirmed. Loading control program into airlock software.")
+ sleep(170)
+ if(src.canAIControl())
+ to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.")
+ src.aiHacking=0
+ return
+ else if(!src.canAIHack(user))
+ to_chat(user, "We've lost our connection! Unable to hack airlock.")
+ src.aiHacking=0
+ return
+ to_chat(user, "Transfer complete. Forcing airlock to execute program.")
+ sleep(50)
+ //disable blocked control
+ src.aiControlDisabled = 2
+ to_chat(user, "Receiving control information from airlock.")
+ sleep(10)
+ //bring up airlock dialog
+ src.aiHacking = 0
+ if (user)
+ src.attack_ai(user)
+
+/obj/machinery/door/airlock/CanPass(atom/movable/mover, turf/target)
+ if (src.isElectrified())
+ if (istype(mover, /obj/item))
+ var/obj/item/i = mover
+ if (i.matter && (DEFAULT_WALL_MATERIAL in i.matter) && i.matter[DEFAULT_WALL_MATERIAL] > 0)
+ var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
+ s.set_up(5, 1, src)
+ s.start()
+ return ..()
+
+/obj/machinery/door/airlock/attack_hand(mob/user as mob)
+ if(!istype(usr, /mob/living/silicon))
+ if(src.isElectrified())
+ if(src.shock(user, 100))
+ return
+
+ if(istype(user, /mob/living/carbon/human))
+ var/mob/living/carbon/human/X = user
+ if(istype(X.species, /datum/species/xenos))
+ src.attack_alien(user)
+ return
+
+ if(src.p_open)
+ user.set_machine(src)
+ wires.Interact(user)
+ else
+ ..(user)
+ return
+
+/obj/machinery/door/airlock/tgui_act(action, params)
+ if(..())
+ return TRUE
+ if(!user_allowed(usr))
+ return TRUE
+
+ switch(action)
+ if("disrupt-main")
+ if(!main_power_lost_until)
+ loseMainPower()
+ update_icon()
+ else
+ to_chat(usr, "Main power is already offline.")
+ . = TRUE
+ if("disrupt-backup")
+ if(!backup_power_lost_until)
+ loseBackupPower()
+ update_icon()
+ else
+ to_chat(usr, "Backup power is already offline.")
+ . = TRUE
+ if("shock-restore")
+ electrify(0, 1)
+ . = TRUE
+ if("shock-temp")
+ electrify(30, 1)
+ . = TRUE
+ if("shock-perm")
+ electrify(-1, 1)
+ . = TRUE
+ if("idscan-toggle")
+ set_idscan(aiDisabledIdScanner, 1)
+ . = TRUE
+ // if("emergency-toggle")
+ // toggle_emergency(usr)
+ // . = TRUE
+ if("bolt-toggle")
+ toggle_bolt(usr)
+ . = TRUE
+ if("light-toggle")
+ if(wires.is_cut(WIRE_BOLT_LIGHT))
+ to_chat(usr, "The bolt lights wire is cut - The door bolt lights are permanently disabled.")
+ return
+ lights = !lights
+ update_icon()
+ . = TRUE
+ if("safe-toggle")
+ set_safeties(!safe, 1)
+ . = TRUE
+ if("speed-toggle")
+ if(wires.is_cut(WIRE_SPEED))
+ to_chat(usr, "The timing wire is cut - Cannot alter timing.")
+ return
+ normalspeed = !normalspeed
+ . = TRUE
+ if("open-close")
+ user_toggle_open(usr)
+ . = TRUE
+
+ update_icon()
+ return 1
+
+/obj/machinery/door/airlock/proc/user_allowed(mob/user)
+ var/allowed = (issilicon(user) && canAIControl(user))
+ if(!allowed && isobserver(user))
+ var/mob/observer/dead/D = user
+ if(D.can_admin_interact())
+ allowed = TRUE
+ return allowed
+
+/obj/machinery/door/airlock/proc/toggle_bolt(mob/user)
+ if(!user_allowed(user))
+ return
+ if(wires.is_cut(WIRE_DOOR_BOLTS))
+ to_chat(user, "The door bolt drop wire is cut - you can't toggle the door bolts.")
+ return
+ if(locked)
+ if(!arePowerSystemsOn())
+ to_chat(user, "The door has no power - you can't raise the door bolts.")
+ else
+ unlock()
+ to_chat(user, "The door bolts have been raised.")
+ // log_combat(user, src, "unbolted")
+ else
+ lock()
+ to_chat(user, "The door bolts have been dropped.")
+ // log_combat(user, src, "bolted")
+
+/obj/machinery/door/airlock/proc/user_toggle_open(mob/user)
+ if(!user_allowed(user))
+ return
+ if(welded)
+ to_chat(user, text("The airlock has been welded shut!"))
+ else if(locked)
+ to_chat(user, text("The door bolts are down!"))
+ else if(!density)
+ close()
+ else
+ open()
+
+/obj/machinery/door/airlock/proc/can_remove_electronics()
+ return src.p_open && (operating < 0 || (!operating && welded && !src.arePowerSystemsOn() && density && (!src.locked || (stat & BROKEN))))
+
+/obj/machinery/door/airlock/attackby(obj/item/C, mob/user as mob)
+ //to_world("airlock attackby src [src] obj [C] mob [user]")
+ if(!istype(usr, /mob/living/silicon))
+ if(src.isElectrified())
+ if(src.shock(user, 75))
+ return
+ if(istype(C, /obj/item/taperoll))
+ return
+
+ src.add_fingerprint(user)
+ if(istype(C, /mob/living))
+ ..()
+ return
+ if(!repairing && istype(C, /obj/item/weldingtool) && !( src.operating > 0 ) && src.density)
+ var/obj/item/weldingtool/W = C
+ if(W.remove_fuel(0,user))
+ if(!src.welded)
+ src.welded = 1
+ else
+ src.welded = null
+ playsound(src, C.usesound, 75, 1)
+ src.update_icon()
+ return
+ else
+ return
+ else if(C.is_screwdriver()) //we don't want screwdrivers to toggle the door, so...
+ if (src.p_open)
+ if (stat & BROKEN)
+ to_chat(usr, "The panel is broken and cannot be closed.")
+ else //close the panel, do the sound, update the icon, but don't toggle the door
+ src.p_open = FALSE
+ playsound(src, C.usesound, 50, 1)
+ src.update_icon()
+ return
+ else //open the panel, do the sound, update the icon, open the wires menu but don't toggle the door
+ src.p_open = TRUE
+ playsound(src, C.usesound, 50, 1)
+ src.update_icon()
+ return src.attack_hand(user)
+ else if(C.is_wirecutter())
+ return src.attack_hand(user)
+ else if(istype(C, /obj/item/multitool))
+ return src.attack_hand(user)
+ else if(istype(C, /obj/item/assembly/signaler))
+ return src.attack_hand(user)
+ else if(istype(C, /obj/item/pai_cable)) // -- TLE
+ var/obj/item/pai_cable/cable = C
+ cable.plugin(src, user)
+ else if(!repairing && C.is_crowbar())
+ if(can_remove_electronics())
+ playsound(src, C.usesound, 75, 1)
+ user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics from the airlock assembly.")
+ if(do_after(user,40 * C.toolspeed))
+ to_chat(user, "You removed the airlock electronics!")
+
+ var/obj/structure/door_assembly/da = new assembly_type(src.loc)
+ if (istype(da, /obj/structure/door_assembly/multi_tile))
+ da.set_dir(src.dir)
+
+ da.anchored = 1
+ if(mineral)
+ da.glass = mineral
+ //else if(glass)
+ else if(glass && !da.glass)
+ da.glass = 1
+ da.state = 1
+ da.created_name = src.name
+ da.update_state()
+
+ if(operating == -1 || (stat & BROKEN))
+ new /obj/item/circuitboard/broken(src.loc)
+ operating = 0
+ else
+ if (!electronics) create_electronics()
+
+ electronics.loc = src.loc
+ electronics = null
+
+ qdel(src)
+ return
+ else if(arePowerSystemsOn())
+ to_chat(user, "The airlock's motors resist your efforts to force it.")
+ else if(locked)
+ to_chat(user, "The airlock's bolts prevent it from being forced.")
+ else
+ if(density)
+ spawn(0) open(1)
+ else
+ spawn(0) close(1)
+
+ // Check if we're using a crowbar or armblade, and if the airlock's unpowered for whatever reason (off, broken, etc).
+ if((C.pry == 1) && !arePowerSystemsOn())
+ if(locked)
+ to_chat(user, "The airlock's bolts prevent it from being forced.")
+ else if( !welded && !operating )
+ if(istype(C, /obj/item/material/twohanded/fireaxe)) // If this is a fireaxe, make sure it's held in two hands.
+ var/obj/item/material/twohanded/fireaxe/F = C
+ if(!F.wielded)
+ to_chat(user, "You need to be wielding \the [F] to do that.")
+ return
+ // At this point, it's an armblade or a fireaxe that passed the wielded test, let's try to open it.
+ if(density)
+ spawn(0)
+ open(1)
+ else
+ spawn(0)
+ close(1)
+ else
+ ..()
+ return
+
+/obj/machinery/door/airlock/phoron/attackby(C as obj, mob/user as mob)
+ if(C)
+ ignite(is_hot(C))
+ ..()
+
+/obj/machinery/door/airlock/set_broken()
+ src.p_open = TRUE
+ stat |= BROKEN
+ if (secured_wires)
+ lock()
+ for (var/mob/O in viewers(src, null))
+ if ((O.client && !( O.blinded )))
+ O.show_message("[src.name]'s control panel bursts open, sparks spewing out!")
+ playsound(src.loc, 'sound/machines/airlock_break.ogg', 100, 1)
+ var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
+ s.set_up(5, 1, src)
+ s.start()
+
+ update_icon()
+ return
+
+/obj/machinery/door/airlock/open(var/forced=0)
+ if(!can_open(forced))
+ return 0
+ use_power(360) //360 W seems much more appropriate for an actuator moving an industrial door capable of crushing people
+
+ //if the door is unpowered then it doesn't make sense to hear the woosh of a pneumatic actuator
+ for(var/P in player_list)
+ var/mob/M = P
+ if(!M || !M.client)
+ continue
+ var/old_sounds = M.client.is_preference_enabled(/datum/client_preference/old_door_sounds)
+ var/department_door_sounds = M.client.is_preference_enabled(/datum/client_preference/department_door_sounds)
+ var/sound
+ var/volume
+ if(old_sounds) // Do we have old sounds enabled? Play these even if we have department door sounds enabled.
+ if(arePowerSystemsOn())
+ sound = legacy_open_powered
+ volume = 50
+ else
+ sound = open_sound_unpowered
+ volume = 75
+ else if(!old_sounds && department_door_sounds && src.department_open_powered) // Else, we have old sounds disabled, the door has per-department door sounds, and we have chosen to play department door sounds, use these.
+ if(arePowerSystemsOn())
+ sound = department_open_powered
+ volume = 50
+ else
+ sound = open_sound_unpowered
+ volume = 75
+ else // Else, play these.
+ if(arePowerSystemsOn())
+ sound = open_sound_powered
+ volume = 50
+ else
+ sound = open_sound_unpowered
+ volume = 75
+
+ var/turf/T = get_turf(M)
+ var/distance = get_dist(T, get_turf(src))
+ if(distance <= world.view * 2)
+ if(T && T.z == get_z(src))
+ M.playsound_local(get_turf(src), sound, volume, 1, null, 0, TRUE, sound(sound), volume_channel = VOLUME_CHANNEL_DOORS)
+
+ if(src.closeOther != null && istype(src.closeOther, /obj/machinery/door/airlock/) && !src.closeOther.density)
+ src.closeOther.close()
+ return ..()
+
+/obj/machinery/door/airlock/can_open(var/forced=0)
+ if(!forced)
+ if(!arePowerSystemsOn() || wires.is_cut(WIRE_OPEN_DOOR))
+ return 0
+
+ if(locked || welded)
+ return 0
+ return ..()
+
+/obj/machinery/door/airlock/can_close(var/forced=0)
+ if(locked || welded)
+ return 0
+
+ if(!forced)
+ //despite the name, this wire is for general door control.
+ if(!arePowerSystemsOn() || wires.is_cut(WIRE_OPEN_DOOR))
+ return 0
+
+ return ..()
+
+/atom/movable/proc/blocks_airlock()
+ return density
+
+/obj/machinery/door/blocks_airlock()
+ return 0
+
+/obj/machinery/mech_sensor/blocks_airlock()
+ return 0
+
+/mob/living/blocks_airlock()
+ return 1
+
+/atom/movable/proc/airlock_crush(var/crush_damage)
+ return 0
+
+/obj/machinery/portable_atmospherics/canister/airlock_crush(var/crush_damage)
+ . = ..()
+ health -= crush_damage
+ healthcheck()
+
+/obj/effect/energy_field/airlock_crush(var/crush_damage)
+ adjust_strength(crush_damage)
+
+/obj/structure/closet/airlock_crush(var/crush_damage)
+ ..()
+ damage(crush_damage)
+ for(var/atom/movable/AM in src)
+ AM.airlock_crush()
+ return 1
+
+/mob/living/airlock_crush(var/crush_damage)
+ . = ..()
+ adjustBruteLoss(crush_damage)
+ SetStunned(5)
+ SetWeakened(5)
+ var/turf/T = get_turf(src)
+ T.add_blood(src)
+ return 1
+
+/mob/living/carbon/airlock_crush(var/crush_damage)
+ . = ..()
+ if(can_feel_pain())
+ emote("scream")
+
+/mob/living/silicon/robot/airlock_crush(var/crush_damage)
+ adjustBruteLoss(crush_damage)
+ return 0
+
+/obj/machinery/door/airlock/close(var/forced=0)
+ if(!can_close(forced))
+ return 0
+
+ if(safe)
+ for(var/turf/turf in locs)
+ for(var/atom/movable/AM in turf)
+ if(AM.blocks_airlock())
+ if(!has_beeped)
+ playsound(src, 'sound/machines/buzz-two.ogg', 50, 0)
+ has_beeped = 1
+ close_door_at = world.time + 6
+ return
+
+ for(var/turf/turf in locs)
+ for(var/atom/movable/AM in turf)
+ if(AM.airlock_crush(DOOR_CRUSH_DAMAGE))
+ take_damage(DOOR_CRUSH_DAMAGE)
+
+ use_power(360) //360 W seems much more appropriate for an actuator moving an industrial door capable of crushing people
+ has_beeped = 0
+ for(var/P in player_list)
+ var/mob/M = P
+ if(!M || !M.client)
+ continue
+ var/old_sounds = M.client.is_preference_enabled(/datum/client_preference/old_door_sounds)
+ var/department_door_sounds = M.client.is_preference_enabled(/datum/client_preference/department_door_sounds)
+ var/sound
+ var/volume
+ if(old_sounds)
+ if(arePowerSystemsOn())
+ sound = legacy_close_powered
+ volume = 50
+ else
+ sound = open_sound_unpowered
+ volume = 75
+ else if(!old_sounds && department_door_sounds && src.department_close_powered) // Else, we have old sounds disabled, the door has per-department door sounds, and we have chosen to play department door sounds, use these.
+ if(arePowerSystemsOn())
+ sound = department_close_powered
+ volume = 50
+ else
+ sound = open_sound_unpowered
+ volume = 75
+ else
+ if(arePowerSystemsOn())
+ sound = close_sound_powered
+ volume = 50
+ else
+ sound = open_sound_unpowered
+ volume = 75
+
+ var/turf/T = get_turf(M)
+ var/distance = get_dist(T, get_turf(src))
+ if(distance <= world.view * 2)
+ if(T && T.z == get_z(src))
+ M.playsound_local(get_turf(src), sound, volume, 1, null, 0, TRUE, sound(sound), volume_channel = VOLUME_CHANNEL_DOORS)
+ for(var/turf/turf in locs)
+ var/obj/structure/window/killthis = (locate(/obj/structure/window) in turf)
+ if(killthis)
+ killthis.ex_act(2)//Smashin windows
+ return ..()
+
+/obj/machinery/door/airlock/proc/lock(var/forced=0)
+ if(locked)
+ return 0
+
+ if (operating && !forced) return 0
+
+ src.locked = 1
+ playsound(src, bolt_down_sound, 30, 0, 3, volume_channel = VOLUME_CHANNEL_DOORS)
+ for(var/mob/M in range(1,src))
+ M.show_message("You hear a click from the bottom of the door.", 2)
+ update_icon()
+ return 1
+
+/obj/machinery/door/airlock/proc/unlock(var/forced=0)
+ if(!src.locked)
+ return
+
+ if (!forced)
+ if(operating || !src.arePowerSystemsOn() || wires.is_cut(WIRE_DOOR_BOLTS)) return
+
+ src.locked = 0
+ playsound(src, bolt_up_sound, 30, 0, 3, volume_channel = VOLUME_CHANNEL_DOORS)
+ for(var/mob/M in range(1,src))
+ M.show_message("You hear a click from the bottom of the door.", 2)
+ update_icon()
+ return 1
+
+/obj/machinery/door/airlock/allowed(mob/M)
+ if(locked)
+ return 0
+ return ..(M)
+
+/obj/machinery/door/airlock/Initialize(var/ml, var/obj/structure/door_assembly/assembly=null)
+
+ if(src.closeOtherId != null)
+ for (var/obj/machinery/door/airlock/A in machines)
+ if(A.closeOtherId == src.closeOtherId && A != src)
+ src.closeOther = A
+ break
+ name = "\improper [name]"
+
+ . = ..()
+
+ //if assembly is given, create the new door from the assembly
+ if (assembly && istype(assembly))
+ assembly_type = assembly.type
+
+ electronics = assembly.electronics
+ electronics.loc = src
+
+ //update the door's access to match the electronics'
+ secured_wires = electronics.secure
+ if(electronics.one_access)
+ LAZYCLEARLIST(req_access)
+ req_one_access = src.electronics.conf_access
+ else
+ LAZYCLEARLIST(req_one_access)
+ req_access = src.electronics.conf_access
+
+ //get the name from the assembly
+ if(assembly.created_name)
+ name = assembly.created_name
+ else
+ name = "[istext(assembly.glass) ? "[assembly.glass] airlock" : assembly.base_name]"
+
+ //get the dir from the assembly
+ set_dir(assembly.dir)
+
+ //wires
+ var/turf/T = get_turf(src)
+ if(T && (T.z in using_map.admin_levels))
+ secured_wires = 1
+ if (secured_wires)
+ wires = new/datum/wires/airlock/secure(src)
+ else
+ wires = new/datum/wires/airlock(src)
+
+ if(frequency)
+ set_frequency(frequency)
+ update_icon()
+
+/obj/machinery/door/airlock/Destroy()
+ qdel(wires)
+ wires = null
+ return ..()
+
+// Most doors will never be deconstructed over the course of a round,
+// so as an optimization defer the creation of electronics until
+// the airlock is deconstructed
+/obj/machinery/door/airlock/proc/create_electronics()
+ //create new electronics
+ if (secured_wires)
+ src.electronics = new/obj/item/airlock_electronics/secure( src.loc )
+ else
+ src.electronics = new/obj/item/airlock_electronics( src.loc )
+
+ //update the electronics to match the door's access
+ if(LAZYLEN(req_access))
+ electronics.conf_access = req_access
+ else if (LAZYLEN(req_one_access))
+ electronics.conf_access = req_one_access
+ electronics.one_access = 1
+
+/obj/machinery/door/airlock/emp_act(var/severity)
+ if(prob(40/severity))
+ var/duration = world.time + SecondsToTicks(30 / severity)
+ if(duration > electrified_until)
+ electrify(duration)
+ ..()
+
+/obj/machinery/door/airlock/power_change() //putting this is obj/machinery/door itself makes non-airlock doors turn invisible for some reason
+ ..()
+ if(stat & NOPOWER)
+ // If we lost power, disable electrification
+ // Keeping door lights on, runs on internal battery or something.
+ electrified_until = 0
+ update_icon()
+
+/obj/machinery/door/airlock/proc/prison_open()
+ if(arePowerSystemsOn())
+ src.unlock()
+ src.open()
+ src.lock()
+ return
+
+
+/obj/machinery/door/airlock/rcd_values(mob/living/user, obj/item/rcd/the_rcd, passed_mode)
+ switch(passed_mode)
+ if(RCD_DECONSTRUCT)
+ // Old RCD code made it cost 10 units to decon an airlock.
+ // Now the new one costs ten "sheets".
+ return list(
+ RCD_VALUE_MODE = RCD_DECONSTRUCT,
+ RCD_VALUE_DELAY = 5 SECONDS,
+ RCD_VALUE_COST = RCD_SHEETS_PER_MATTER_UNIT * 10
+ )
+ return FALSE
+
+/obj/machinery/door/airlock/rcd_act(mob/living/user, obj/item/rcd/the_rcd, passed_mode)
+ switch(passed_mode)
+ if(RCD_DECONSTRUCT)
+ to_chat(user, span("notice", "You deconstruct \the [src]."))
+ qdel(src)
+ return TRUE
+ return FALSE
+>>>>>>> 6b909477bca... the little construction pr (#9002)
diff --git a/code/game/machinery/frame.dm b/code/game/machinery/frame.dm
index c3fa1701fd4..786e7f39c17 100644
--- a/code/game/machinery/frame.dm
+++ b/code/game/machinery/frame.dm
@@ -202,11 +202,22 @@
frame_class = FRAME_CLASS_MACHINE
frame_size = 3
+<<<<<<< HEAD
/datum/frame/frame_types/injector_maker
name = "Ready-to-Use Medicine 3000"
frame_class = FRAME_CLASS_MACHINE
circuit = /obj/machinery/atmospheric_field_generator
frame_size = 3
+=======
+/datum/frame/frame_types/electrochromic_button
+ name = "Electrochromic Window Button"
+ frame_class = FRAME_CLASS_ALARM
+ frame_size = 1
+ frame_style = FRAME_STYLE_WALL
+ x_offset = 24
+ y_offset = 24
+
+>>>>>>> 6b909477bca... the little construction pr (#9002)
//////////////////////////////
// Frame Object (Structure)
diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm
index e5fedd49cc6..5af1e32ea19 100644
--- a/code/game/objects/items/stacks/tiles/tile_types.dm
+++ b/code/game/objects/items/stacks/tiles/tile_types.dm
@@ -20,9 +20,50 @@
drop_sound = 'sound/items/drop/axe.ogg'
pickup_sound = 'sound/items/pickup/axe.ogg'
+//crafting / welding vars
+ var/datum/material/material //*sigh* i guess this is how we're doing this.
+ var/craftable = FALSE //set to TRUE for tiles you can craft stuff from directly, like grass
+ var/can_weld = FALSE //set to TRUE for tiles you can reforge into their components via welding, like metal
+ var/welds_into = /obj/item/stack/material/steel //what you get from the welding. defaults to steel.
+ var/default_type = DEFAULT_WALL_MATERIAL
+
+
+
/obj/item/stack/tile/Initialize()
. = ..()
randpixel_xy()
+ if(craftable)
+ material = get_material_by_name("[default_type]")
+ if(!material)
+ return INITIALIZE_HINT_QDEL
+ if(material) //sanity check
+ recipes = material.get_recipes()
+ stacktype = material.stack_type
+
+/obj/item/stack/tile/attackby(obj/item/W as obj, mob/user as mob)
+ if (istype(W, /obj/item/weldingtool))
+ var/obj/item/weldingtool/WT = W
+
+ if(can_weld == FALSE)
+ to_chat("You can't reform these into their original components.")
+ return
+
+ if(get_amount() < 4)
+ to_chat(user, "You need at least four tiles to do this.")
+ return
+
+ if(WT.remove_fuel(0,user))
+ new welds_into(usr.loc)
+ usr.update_icon()
+ visible_message("\The [src] is shaped by [user.name] with the welding tool.","You hear welding.")
+ var/obj/item/stack/tile/T = src
+ src = null
+ var/replace = (user.get_inactive_hand()==T)
+ T.use(4)
+ if (!T && replace)
+ user.put_in_hands(welds_into)
+ return TRUE
+ return ..()
/*
* Grass
@@ -32,6 +73,7 @@
singular_name = "grass floor tile"
desc = "A patch of grass like they often use on golf courses."
icon_state = "tile_grass"
+ default_type = "grass"
force = 1.0
throwforce = 1.0
throw_speed = 5
@@ -41,6 +83,7 @@
no_variants = FALSE
drop_sound = 'sound/items/drop/herb.ogg'
pickup_sound = 'sound/items/pickup/herb.ogg'
+ craftable = TRUE
/*
* Wood
@@ -187,6 +230,7 @@
throw_speed = 5
throw_range = 20
no_variants = FALSE
+ can_weld = TRUE
/obj/item/stack/tile/floor/red
name = "red floor tile"
@@ -217,21 +261,36 @@
name = "steel floor tile"
singular_name = "steel floor tile"
icon_state = "tile_steel"
+<<<<<<< HEAD
matter = list(MAT_PLASTEEL = SHEET_MATERIAL_AMOUNT / 4)
+=======
+ matter = list("plasteel" = SHEET_MATERIAL_AMOUNT / 4)
+ welds_into = /obj/item/stack/material/plasteel
+>>>>>>> 6b909477bca... the little construction pr (#9002)
no_variants = FALSE
/obj/item/stack/tile/floor/steel
name = "steel floor tile"
singular_name = "steel floor tile"
icon_state = "tile_steel"
+<<<<<<< HEAD
matter = list(MAT_PLASTEEL = SHEET_MATERIAL_AMOUNT / 4)
+=======
+ matter = list("plasteel" = SHEET_MATERIAL_AMOUNT / 4)
+ welds_into = /obj/item/stack/material/plasteel
+>>>>>>> 6b909477bca... the little construction pr (#9002)
no_variants = FALSE
/obj/item/stack/tile/floor/white
name = "white floor tile"
singular_name = "white floor tile"
icon_state = "tile_white"
+<<<<<<< HEAD
matter = list(MAT_PLASTIC = SHEET_MATERIAL_AMOUNT / 4)
+=======
+ matter = list("plastic" = SHEET_MATERIAL_AMOUNT / 4)
+ welds_into = /obj/item/stack/material/plastic
+>>>>>>> 6b909477bca... the little construction pr (#9002)
no_variants = FALSE
/obj/item/stack/tile/floor/yellow
@@ -245,14 +304,24 @@
name = "dark floor tile"
singular_name = "dark floor tile"
icon_state = "tile_steel"
+<<<<<<< HEAD
matter = list(MAT_PLASTEEL = SHEET_MATERIAL_AMOUNT / 4)
+=======
+ matter = list("plasteel" = SHEET_MATERIAL_AMOUNT / 4)
+ welds_into = /obj/item/stack/material/plasteel
+>>>>>>> 6b909477bca... the little construction pr (#9002)
no_variants = FALSE
/obj/item/stack/tile/floor/freezer
name = "freezer floor tile"
singular_name = "freezer floor tile"
icon_state = "tile_freezer"
+<<<<<<< HEAD
matter = list(MAT_PLASTIC = SHEET_MATERIAL_AMOUNT / 4)
+=======
+ matter = list("plastic" = SHEET_MATERIAL_AMOUNT / 4)
+ welds_into = /obj/item/stack/material/plastic
+>>>>>>> 6b909477bca... the little construction pr (#9002)
no_variants = FALSE
/obj/item/stack/tile/floor/cyborg
@@ -264,6 +333,7 @@
charge_costs = list(250)
stacktype = /obj/item/stack/tile/floor
build_type = /obj/item/stack/tile/floor
+ can_weld = FALSE //we're not going there
/obj/item/stack/tile/linoleum
name = "linoleum"
@@ -276,6 +346,7 @@
throw_range = 20
flags = 0
no_variants = FALSE
+ can_weld = FALSE
/obj/item/stack/tile/wmarble
name = "light marble tile"
@@ -288,6 +359,8 @@
throw_range = 20
flags = 0
no_variants = FALSE
+ can_weld = TRUE
+ welds_into = /obj/item/stack/material/marble
/obj/item/stack/tile/bmarble
name = "dark marble tile"
@@ -300,12 +373,15 @@
throw_range = 20
flags = 0
no_variants = FALSE
+ can_weld = TRUE
+ welds_into = /obj/item/stack/material/marble
/obj/item/stack/tile/roofing
name = "roofing"
singular_name = "roofing"
desc = "A section of roofing material. You can use it to repair the ceiling, or expand it."
icon_state = "techtile_grid"
+ can_weld = FALSE //roofing can also be made from wood, so let's not open that can of worms today
/obj/item/stack/tile/roofing/cyborg
name = "roofing synthesizer"
@@ -313,4 +389,9 @@
uses_charge = 1
charge_costs = list(250)
stacktype = /obj/item/stack/tile/roofing
- build_type = /obj/item/stack/tile/roofing
\ No newline at end of file
+<<<<<<< HEAD
+ build_type = /obj/item/stack/tile/roofing
+=======
+ build_type = /obj/item/stack/tile/roofing
+ can_weld = FALSE
+>>>>>>> 6b909477bca... the little construction pr (#9002)
diff --git a/code/game/objects/items/weapons/circuitboards/frame.dm b/code/game/objects/items/weapons/circuitboards/frame.dm
index 000cd011f6f..ef1e041fb7f 100644
--- a/code/game/objects/items/weapons/circuitboards/frame.dm
+++ b/code/game/objects/items/weapons/circuitboards/frame.dm
@@ -74,6 +74,12 @@
board_type = new /datum/frame/frame_types/geiger
matter = list(MAT_STEEL = 50, MAT_GLASS = 50)
+/obj/item/circuitboard/electrochromic
+ name = T_BOARD("electrochromic button")
+ build_path = /obj/machinery/button/windowtint
+ board_type = new /datum/frame/frame_types/electrochromic_button
+ matter = list(MAT_STEEL = 50, "glass" = 50)
+
//Computer
/obj/item/weapon/circuitboard/holopad
diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm
index 30999cd3d6e..d5fcf7e8d1d 100644
--- a/code/game/objects/structures/lattice.dm
+++ b/code/game/objects/structures/lattice.dm
@@ -69,9 +69,12 @@
return
if (istype(C, /obj/item/stack/rods))
var/obj/item/stack/rods/R = C
- if(R.use(2))
+ if(R.get_amount() < 2)
+ to_chat(user, "You need at least two rods to form a catwalk here.")
+ else
to_chat(user, "You start connecting \the [R.name] to \the [src.name] ...")
if(do_after(user, 5 SECONDS))
+ R.use(2) //2023-02-27 bugfix to prevent rods being used without catwalk creation
src.alpha = 0 // Note: I don't know why this is set, Eris did it, just trusting for now. ~Leshana
new /obj/structure/catwalk(src.loc)
qdel(src)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index fa9d9dc2a0f..04d8b44d99f 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
/obj/structure/window
name = "window"
desc = "A window."
@@ -695,3 +696,711 @@
qdel(src)
return TRUE
return FALSE
+=======
+/obj/structure/window
+ name = "window"
+ desc = "A window."
+ icon = 'icons/obj/structures.dmi'
+ density = 1
+ can_atmos_pass = ATMOS_PASS_PROC
+ w_class = ITEMSIZE_NORMAL
+
+ layer = WINDOW_LAYER
+ pressure_resistance = 4*ONE_ATMOSPHERE
+ anchored = 1.0
+ atom_flags = ATOM_HAS_TRANSITION_PRIORITY
+ var/maxhealth = 14.0
+ var/maximal_heat = T0C + 100 // Maximal heat before this window begins taking damage from fire
+ var/damage_per_fire_tick = 2.0 // Amount of damage per fire tick. Regular windows are not fireproof so they might as well break quickly.
+ var/health
+ var/force_threshold = 0
+ var/ini_dir = null
+ var/state = 2
+ var/reinf = 0
+ var/basestate
+ var/shardtype = /obj/item/material/shard
+ var/glasstype = null // Set this in subtypes. Null is assumed strange or otherwise impossible to dismantle, such as for shuttle glass.
+ var/silicate = 0 // number of units of silicate
+ var/fulltile = FALSE // Set to true on full-tile variants.
+
+/obj/structure/window/examine(mob/user)
+ . = ..()
+
+ if(health == maxhealth)
+ . += "It looks fully intact."
+ else
+ var/perc = health / maxhealth
+ if(perc > 0.75)
+ . += "It has a few cracks."
+ else if(perc > 0.5)
+ . += "It looks slightly damaged."
+ else if(perc > 0.25)
+ . += "It looks moderately damaged."
+ else
+ . += "It looks heavily damaged."
+ if(silicate)
+ if (silicate < 30)
+ . += "It has a thin layer of silicate."
+ else if (silicate < 70)
+ . += "It is covered in silicate."
+ else
+ . += "There is a thick layer of silicate covering it."
+
+/obj/structure/window/examine_icon()
+ return icon(icon=initial(icon),icon_state=initial(icon_state))
+
+/obj/structure/window/take_damage(var/damage = 0, var/sound_effect = 1)
+ var/initialhealth = health
+
+ if(silicate)
+ damage = damage * (1 - silicate / 200)
+
+ health = max(0, health - damage)
+
+ if(health <= 0)
+ shatter()
+ else
+ if(sound_effect)
+ playsound(src, 'sound/effects/Glasshit.ogg', 100, 1)
+ if(health < maxhealth / 4 && initialhealth >= maxhealth / 4)
+ visible_message("[src] looks like it's about to shatter!" )
+ update_icon()
+ else if(health < maxhealth / 2 && initialhealth >= maxhealth / 2)
+ visible_message("[src] looks seriously damaged!" )
+ update_icon()
+ else if(health < maxhealth * 3/4 && initialhealth >= maxhealth * 3/4)
+ visible_message("Cracks begin to appear in [src]!" )
+ update_icon()
+ return
+
+/obj/structure/window/proc/apply_silicate(var/amount)
+ if(health < maxhealth) // Mend the damage
+ health = min(health + amount * 3, maxhealth)
+ if(health == maxhealth)
+ visible_message("[src] looks fully repaired." )
+ else // Reinforce
+ silicate = min(silicate + amount, 100)
+ updateSilicate()
+
+/obj/structure/window/proc/updateSilicate()
+ cut_overlays()
+ update_icon()
+
+ var/image/img = image(src)
+ img.color = "#ffffff"
+ img.alpha = silicate * 255 / 100
+ add_overlay(img)
+
+/obj/structure/window/proc/shatter(var/display_message = 1)
+ playsound(src, "shatter", 70, 1)
+ if(display_message)
+ visible_message("[src] shatters!")
+ new shardtype(loc)
+ if(reinf)
+ new /obj/item/stack/rods(loc)
+ if(is_fulltile())
+ new shardtype(loc) //todo pooling?
+ if(reinf)
+ new /obj/item/stack/rods(loc)
+ qdel(src)
+ return
+
+
+/obj/structure/window/bullet_act(var/obj/item/projectile/Proj)
+
+ var/proj_damage = Proj.get_structure_damage()
+ if(!proj_damage) return
+
+ ..()
+ take_damage(proj_damage)
+ return
+
+
+/obj/structure/window/ex_act(severity)
+ switch(severity)
+ if(1.0)
+ qdel(src)
+ return
+ if(2.0)
+ shatter(0)
+ return
+ if(3.0)
+ if(prob(50))
+ shatter(0)
+ return
+
+/obj/structure/window/blob_act()
+ take_damage(50)
+
+/obj/structure/window/CanPass(atom/movable/mover, turf/target)
+ if(istype(mover) && mover.checkpass(PASSGLASS))
+ return TRUE
+ if(is_fulltile())
+ return FALSE //full tile window, you can't move into it!
+ if((get_dir(loc, target) & dir) || (get_dir(mover, target) == turn(dir, 180)))
+ return !density
+ else
+ return TRUE
+
+/obj/structure/window/CanZASPass(turf/T, is_zone)
+ if(is_fulltile() || get_dir(T, loc) == turn(dir, 180)) // Make sure we're handling the border correctly.
+ return !anchored // If it's anchored, it'll block air.
+ return TRUE // Don't stop airflow from the other sides.
+
+/obj/structure/window/CheckExit(atom/movable/O as mob|obj, target as turf)
+ if(istype(O) && O.checkpass(PASSGLASS))
+ return 1
+ if(get_dir(O.loc, target) == dir)
+ return 0
+ return 1
+
+/obj/structure/window/hitby(AM as mob|obj)
+ ..()
+ visible_message("[src] was hit by [AM].")
+ var/tforce = 0
+ if(ismob(AM))
+ tforce = 40
+ else if(isobj(AM))
+ var/obj/item/I = AM
+ tforce = I.throwforce
+ if(reinf) tforce *= 0.25
+ if(health - tforce <= 7 && !reinf)
+ anchored = 0
+ update_verbs()
+ update_nearby_icons()
+ step(src, get_dir(AM, src))
+ take_damage(tforce)
+
+/obj/structure/window/attack_tk(mob/user as mob)
+ user.visible_message("Something knocks on [src].")
+ playsound(src, 'sound/effects/Glasshit.ogg', 50, 1)
+
+/obj/structure/window/attack_hand(mob/user as mob)
+ user.setClickCooldown(user.get_attack_speed())
+ if(HULK in user.mutations)
+ user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!"))
+ user.visible_message("[user] smashes through [src]!")
+ user.do_attack_animation(src)
+ shatter()
+
+ else if (usr.a_intent == I_HURT)
+
+ if (istype(usr,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = usr
+ if(H.species.can_shred(H))
+ attack_generic(H,25)
+ return
+
+ playsound(src, 'sound/effects/glassknock.ogg', 80, 1)
+ user.do_attack_animation(src)
+ usr.visible_message("\The [usr] bangs against \the [src]!",
+ "You bang against \the [src]!",
+ "You hear a banging sound.")
+ else
+ playsound(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.")
+ return
+
+/obj/structure/window/attack_generic(var/mob/user, var/damage)
+ user.setClickCooldown(user.get_attack_speed())
+ if(!damage)
+ return
+ if(damage >= STRUCTURE_MIN_DAMAGE_THRESHOLD)
+ visible_message("[user] smashes into [src]!")
+ if(reinf)
+ damage = damage / 2
+ take_damage(damage)
+ else
+ visible_message("\The [user] bonks \the [src] harmlessly.")
+ user.do_attack_animation(src)
+ return 1
+
+/obj/structure/window/attackby(obj/item/W as obj, mob/user as mob)
+ if(!istype(W)) return//I really wish I did not need this
+
+ // Fixing.
+ if(istype(W, /obj/item/weldingtool) && user.a_intent == I_HELP)
+ var/obj/item/weldingtool/WT = W
+ if(health < maxhealth)
+ if(WT.remove_fuel(1 ,user))
+ to_chat(user, "You begin repairing [src]...")
+ playsound(src, WT.usesound, 50, 1)
+ if(do_after(user, 40 * WT.toolspeed, target = src))
+ health = maxhealth
+ // playsound(src, 'sound/items/Welder.ogg', 50, 1)
+ update_icon()
+ to_chat(user, "You repair [src].")
+ else
+ to_chat(user, "[src] is already in good condition!")
+ return
+
+ // Slamming.
+ if (istype(W, /obj/item/grab) && get_dist(src,user)<2)
+ var/obj/item/grab/G = W
+ 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
+ switch (state)
+ if(1)
+ M.visible_message("[user] slams [M] against \the [src]!")
+ M.apply_damage(7)
+ hit(10)
+ if(2)
+ M.visible_message("[user] bashes [M] against \the [src]!")
+ if (prob(50))
+ M.Weaken(1)
+ M.apply_damage(10)
+ hit(25)
+ if(3)
+ M.visible_message("[user] crushes [M] against \the [src]!")
+ M.Weaken(5)
+ M.apply_damage(20)
+ hit(50)
+ return
+
+ if(W.item_flags & NOBLUDGEON) return
+
+ if(W.is_screwdriver())
+ if(reinf && state >= 1)
+ state = 3 - state
+ update_nearby_icons()
+ playsound(src, W.usesound, 75, 1)
+ to_chat(user, "You have [state == 1 ? "un" : ""]fastened the window [state ? "from" : "to"] the frame.")
+ else if(reinf && state == 0)
+ anchored = !anchored
+ update_nearby_icons()
+ update_verbs()
+ playsound(src, W.usesound, 75, 1)
+ to_chat(user, "You have [anchored ? "" : "un"]fastened the frame [anchored ? "to" : "from"] the floor.")
+ else if(!reinf)
+ anchored = !anchored
+ update_nearby_icons()
+ update_verbs()
+ playsound(src, W.usesound, 75, 1)
+ to_chat(user, "You have [anchored ? "" : "un"]fastened the window [anchored ? "to" : "from"] the floor.")
+ else if(W.is_crowbar() && reinf && state <= 1)
+ state = 1 - state
+ playsound(src, W.usesound, 75, 1)
+ to_chat(user, "You have pried the window [state ? "into" : "out of"] the frame.")
+ else if(W.is_wrench() && !anchored && (!state || !reinf))
+ if(!glasstype)
+ to_chat(user, "You're not sure how to dismantle \the [src] properly.")
+ else
+ playsound(src, W.usesound, 75, 1)
+ visible_message("[user] dismantles \the [src].")
+ var/obj/item/stack/material/mats = new glasstype(loc)
+ if(is_fulltile())
+ mats.amount = 4
+ qdel(src)
+ else if(istype(W, /obj/item/stack/cable_coil) && reinf && state == 0 && !istype(src, /obj/structure/window/reinforced/polarized))
+ var/obj/item/stack/cable_coil/C = W
+ if (C.use(1))
+ playsound(src, 'sound/effects/sparks1.ogg', 75, 1)
+ user.visible_message( \
+ "\The [user] begins to wire \the [src] for electrochromic tinting.", \
+ "You begin to wire \the [src] for electrochromic tinting.", \
+ "You hear sparks.")
+ if(do_after(user, 20 * C.toolspeed, src) && state == 0)
+ playsound(src, 'sound/items/Deconstruct.ogg', 50, 1)
+ var/obj/structure/window/reinforced/polarized/P = new(loc, dir)
+ if(is_fulltile())
+ P.fulltile = TRUE
+ P.icon_state = "fwindow"
+ P.maxhealth = maxhealth
+ P.health = health
+ P.state = state
+ P.anchored = anchored
+ qdel(src)
+ else if(istype(W,/obj/item/frame) && anchored)
+ var/obj/item/frame/F = W
+ F.try_build(src, user)
+ else
+ user.setClickCooldown(user.get_attack_speed(W))
+ if(W.damtype == BRUTE || W.damtype == BURN)
+ user.do_attack_animation(src)
+ hit(W.force)
+ if(health <= 7)
+ anchored = 0
+ update_nearby_icons()
+ step(src, get_dir(user, src))
+ else
+ playsound(src, 'sound/effects/Glasshit.ogg', 75, 1)
+ ..()
+ return
+
+/obj/structure/window/proc/hit(var/damage, var/sound_effect = 1)
+ if(damage < force_threshold || force_threshold < 0)
+ return
+ if(reinf) damage *= 0.5
+ take_damage(damage)
+ return
+
+
+/obj/structure/window/verb/rotate_counterclockwise()
+ set name = "Rotate Window Counterclockwise"
+ set category = "Object"
+ set src in oview(1)
+
+ if(usr.incapacitated())
+ return 0
+
+ if(is_fulltile())
+ return 0
+
+ if(anchored)
+ to_chat(usr, "It is fastened to the floor therefore you can't rotate it!")
+ return 0
+
+ update_nearby_tiles(need_rebuild=1) //Compel updates before
+ src.set_dir(turn(src.dir, 90))
+ updateSilicate()
+ update_nearby_tiles(need_rebuild=1)
+ return
+
+
+/obj/structure/window/verb/rotate_clockwise()
+ set name = "Rotate Window Clockwise"
+ set category = "Object"
+ set src in oview(1)
+
+ if(usr.incapacitated())
+ return 0
+
+ if(is_fulltile())
+ return 0
+
+ if(anchored)
+ to_chat(usr, "It is fastened to the floor therefore you can't rotate it!")
+ return 0
+
+ update_nearby_tiles(need_rebuild=1) //Compel updates before
+ src.set_dir(turn(src.dir, 270))
+ updateSilicate()
+ update_nearby_tiles(need_rebuild=1)
+ return
+
+/obj/structure/window/Initialize(var/ml, start_dir=null, constructed=0)
+ . = ..()
+
+ if (start_dir)
+ set_dir(start_dir)
+
+ //player-constructed windows
+ if (constructed)
+ anchored = 0
+ state = 0
+ update_verbs()
+
+ health = maxhealth
+
+ ini_dir = dir
+
+ update_nearby_tiles(need_rebuild=1)
+ update_nearby_icons()
+
+ for(var/obj/structure/table/T in view(src, 1))
+ T.update_connections()
+ T.update_icon()
+
+/obj/structure/window/Destroy()
+ density = 0
+ update_nearby_tiles()
+ var/turf/location = loc
+ . = ..()
+ for(var/obj/structure/window/W in orange(location, 1))
+ W.update_icon()
+ for(var/obj/structure/table/T in view(location, 1))
+ T.update_connections()
+ T.update_icon()
+
+/obj/structure/window/Move()
+ var/ini_dir = dir
+ update_nearby_tiles(need_rebuild=1)
+ var/oldloc = loc
+ . = ..()
+ set_dir(ini_dir)
+ update_nearby_tiles(need_rebuild=1)
+ if(loc != oldloc)
+ for(var/obj/structure/table/T in view(oldloc, 1) | view(loc, 1))
+ T.update_connections()
+ T.update_icon()
+
+//checks if this window is full-tile one
+/obj/structure/window/proc/is_fulltile()
+ return fulltile
+
+/obj/structure/window/is_between_turfs(var/turf/origin, var/turf/target)
+ if(fulltile)
+ return TRUE
+ return ..()
+
+//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()
+ update_icon()
+ for(var/obj/structure/window/W in orange(src, 1))
+ W.update_icon()
+
+//Updates the availabiliy of the rotation verbs
+/obj/structure/window/proc/update_verbs()
+ if(anchored || is_fulltile())
+ verbs -= /obj/structure/window/verb/rotate_counterclockwise
+ verbs -= /obj/structure/window/verb/rotate_clockwise
+ else if(!is_fulltile())
+ verbs += /obj/structure/window/verb/rotate_counterclockwise
+ verbs += /obj/structure/window/verb/rotate_clockwise
+
+//merges adjacent full-tile windows into one (blatant ripoff from game/smoothwall.dm)
+/obj/structure/window/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
+ cut_overlays()
+ if(!is_fulltile())
+ // Rotate the sprite somewhat so non-fulltiled windows can be seen as needing repair.
+ var/full_tilt_degrees = 15
+ var/tilt_to_apply = abs((health / maxhealth) - 1)
+ if(tilt_to_apply && prob(50))
+ tilt_to_apply = -tilt_to_apply
+ adjust_rotation(LERP(0, full_tilt_degrees, tilt_to_apply))
+
+ icon_state = "[basestate]"
+ return
+ var/list/dirs = list()
+ if(anchored)
+ for(var/obj/structure/window/W in orange(src,1))
+ if(W.anchored && W.density && W.glasstype == src.glasstype && W.is_fulltile()) //Only counts anchored, not-destroyed fill-tile windows.
+ dirs += get_dir(src, W)
+
+ var/list/connections = dirs_to_corner_states(dirs)
+
+ icon_state = ""
+ var/list/add = list()
+ for(var/i = 1 to 4)
+ var/image/image = image(icon, "[basestate][connections[i]]", dir = 1<<(i-1))
+ add += image
+ add_overlay(add)
+
+ // Damage overlays.
+ var/ratio = health / maxhealth
+ ratio = CEILING(ratio * 4, 1) * 25
+
+ if(ratio > 75)
+ return
+ add_overlay(image(icon, "damage[ratio]", layer = layer + 0.1))
+
+ return
+
+/obj/structure/window/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+ if(exposed_temperature > maximal_heat)
+ hit(damage_per_fire_tick, 0)
+ ..()
+
+
+
+/obj/structure/window/basic
+ desc = "It looks thin and flimsy. A few knocks with... almost anything, really should shatter it."
+ icon_state = "window"
+ basestate = "window"
+ glasstype = /obj/item/stack/material/glass
+ maximal_heat = T0C + 100
+ damage_per_fire_tick = 2.0
+ maxhealth = 12.0
+ force_threshold = 3
+
+/obj/structure/window/basic/full
+ icon_state = "window-full"
+ maxhealth = 24
+ fulltile = TRUE
+
+/obj/structure/window/phoronbasic
+ name = "phoron window"
+ desc = "A borosilicate alloy window. It seems to be quite strong."
+ basestate = "phoronwindow"
+ icon_state = "phoronwindow"
+ shardtype = /obj/item/material/shard/phoron
+ glasstype = /obj/item/stack/material/glass/phoronglass
+ maximal_heat = T0C + 2000
+ damage_per_fire_tick = 1.0
+ maxhealth = 40.0
+ force_threshold = 5
+
+/obj/structure/window/phoronbasic/full
+ icon_state = "phoronwindow-full"
+ maxhealth = 80
+ fulltile = TRUE
+
+/obj/structure/window/phoronreinforced
+ name = "reinforced borosilicate window"
+ desc = "A borosilicate alloy window, with rods supporting it. It seems to be very strong."
+ basestate = "phoronrwindow"
+ icon_state = "phoronrwindow"
+ shardtype = /obj/item/material/shard/phoron
+ glasstype = /obj/item/stack/material/glass/phoronrglass
+ reinf = 1
+ maximal_heat = T0C + 4000
+ damage_per_fire_tick = 1.0 // This should last for 80 fire ticks if the window is not damaged at all. The idea is that borosilicate windows have something like ablative layer that protects them for a while.
+ maxhealth = 80.0
+ force_threshold = 10
+
+/obj/structure/window/phoronreinforced/full
+ icon_state = "phoronrwindow-full"
+ maxhealth = 160
+ fulltile = TRUE
+
+/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"
+ maxhealth = 40.0
+ reinf = 1
+ maximal_heat = T0C + 750
+ damage_per_fire_tick = 2.0
+ glasstype = /obj/item/stack/material/glass/reinforced
+ force_threshold = 6
+
+/obj/structure/window/reinforced/full
+ icon_state = "rwindow-full"
+ maxhealth = 80
+ fulltile = TRUE
+
+/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"
+ 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"
+ basestate = "fwindow"
+ maxhealth = 30
+ force_threshold = 5
+
+/obj/structure/window/shuttle
+ name = "shuttle window"
+ desc = "It looks rather strong. Might take a few good hits to shatter it."
+ icon = 'icons/obj/podwindows.dmi'
+ icon_state = "window"
+ basestate = "window"
+ maxhealth = 40
+ reinf = 1
+ basestate = "w"
+ dir = 5
+ force_threshold = 7
+
+/obj/structure/window/reinforced/polarized
+ name = "electrochromic window"
+ desc = "Adjusts its tint with voltage. Might take a few good hits to shatter it."
+ var/id
+
+/obj/structure/window/reinforced/polarized/full
+ icon_state = "rwindow-full"
+ maxhealth = 80
+ fulltile = TRUE
+
+/obj/structure/window/reinforced/polarized/attackby(obj/item/W as obj, mob/user as mob)
+ if(istype(W, /obj/item/multitool) && !anchored) // Only allow programming if unanchored!
+ var/obj/item/multitool/MT = W
+ // First check if they have a windowtint button buffered
+ if(istype(MT.connectable, /obj/machinery/button/windowtint))
+ var/obj/machinery/button/windowtint/buffered_button = MT.connectable
+ src.id = buffered_button.id
+ to_chat(user, "\The [src] is linked to \the [buffered_button] with ID '[id]'.")
+ return TRUE
+ // Otherwise fall back to asking them... and remind them what the current ID is.
+ if(id)
+ to_chat(user, "The window's current ID is [id].")
+ var/t = sanitizeSafe(input(user, "Enter the new ID for the window.", src.name, null), MAX_NAME_LEN)
+ if(t && in_range(src, user))
+ src.id = t
+ to_chat(user, "The new ID of \the [src] is '[id]'.")
+ return TRUE
+ . = ..()
+
+/obj/structure/window/reinforced/polarized/proc/toggle()
+ if(opacity)
+ animate(src, color="#FFFFFF", time=5)
+ set_opacity(0)
+ else
+ animate(src, color="#222222", time=5)
+ set_opacity(1)
+
+
+
+/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
+ circuit = /obj/item/circuitboard/electrochromic
+
+/obj/machinery/button/windowtint/attack_hand(mob/user as mob)
+ if(..())
+ return 1
+
+ toggle_tint()
+
+/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)
+ spawn(0)
+ W.toggle()
+ return
+
+/obj/machinery/button/windowtint/power_change()
+ ..()
+ if(active && !powered(power_channel))
+ toggle_tint()
+
+/obj/machinery/button/windowtint/update_icon()
+ icon_state = "light[active]"
+
+/obj/machinery/button/windowtint/attackby(obj/item/W as obj, mob/user as mob)
+ if(default_deconstruction_screwdriver(user, W))
+ return
+ else if(alarm_deconstruction_wirecutters(user, W))
+ return
+ else if(istype(W, /obj/item/multitool))
+ var/obj/item/multitool/MT = W
+ if(!id)
+ // If no ID is set yet (newly built button?) let them select an ID for first-time use!
+ var/t = sanitizeSafe(input(user, "Enter an ID for \the [src].", src.name, null), MAX_NAME_LEN)
+ if(t && in_range(src, user))
+ src.id = t
+ to_chat(user, "The new ID of \the [src] is '[id]'. To reset this, rebuild the control.")
+ if(id)
+ // It already has an ID (or they just set one), buffer it for copying to windows.
+ to_chat(user, "You store \the [src] ID ('[id]') in \the [MT]'s buffer!")
+ MT.connectable = src
+ MT.update_icon()
+ return TRUE
+ . = ..()
+
+/obj/structure/window/rcd_values(mob/living/user, obj/item/rcd/the_rcd, passed_mode)
+ switch(passed_mode)
+ if(RCD_DECONSTRUCT)
+ return list(
+ RCD_VALUE_MODE = RCD_DECONSTRUCT,
+ RCD_VALUE_DELAY = 5 SECONDS,
+ RCD_VALUE_COST = RCD_SHEETS_PER_MATTER_UNIT * 5
+ )
+
+/obj/structure/window/rcd_act(mob/living/user, obj/item/rcd/the_rcd, passed_mode)
+ switch(passed_mode)
+ if(RCD_DECONSTRUCT)
+ to_chat(user, span("notice", "You deconstruct \the [src]."))
+ qdel(src)
+ return TRUE
+ return FALSE
+>>>>>>> 6b909477bca... the little construction pr (#9002)
diff --git a/code/modules/materials/materials/organic/grass.dm b/code/modules/materials/materials/organic/grass.dm
new file mode 100644
index 00000000000..4f2af4541e6
--- /dev/null
+++ b/code/modules/materials/materials/organic/grass.dm
@@ -0,0 +1,31 @@
+/datum/material/grass
+ name = MAT_GRASS
+ display_name = "grass"
+ stack_type = /obj/item/stack/tile/grass
+ ignition_point = T0C+300
+ melting_point = T0C+300
+ protectiveness = 0
+ conductive = 0
+ integrity = 10
+ supply_conversion_value = 1
+
+/datum/material/grass/generate_recipes()
+ recipes = list(
+ new /datum/stack_recipe_list("bushes and flowers",list(
+ new /datum/stack_recipe("bush", /obj/structure/flora/ausbushes, 3, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"),
+ new /datum/stack_recipe("reed bush", /obj/structure/flora/ausbushes/reedbush, 3, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"),
+ new /datum/stack_recipe("leafy bush", /obj/structure/flora/ausbushes/leafybush, 3, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"),
+ new /datum/stack_recipe("pale bush", /obj/structure/flora/ausbushes/palebush, 3, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"),
+ new /datum/stack_recipe("stalky bush", /obj/structure/flora/ausbushes/stalkybush, 3, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"),
+ new /datum/stack_recipe("grassy bush", /obj/structure/flora/ausbushes/grassybush, 3, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"),
+ new /datum/stack_recipe("ferny bush", /obj/structure/flora/ausbushes/fernybush, 3, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"),
+ new /datum/stack_recipe("sunny bush", /obj/structure/flora/ausbushes/sunnybush, 3, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"),
+ new /datum/stack_recipe("pointy bush", /obj/structure/flora/ausbushes/pointybush, 3, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"),
+ new /datum/stack_recipe("lavender grass", /obj/structure/flora/ausbushes/lavendergrass, 3, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"),
+ new /datum/stack_recipe("yellow-and-white flowers", /obj/structure/flora/ausbushes/ywflowers, 3, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"),
+ new /datum/stack_recipe("blue-and-red flowers", /obj/structure/flora/ausbushes/brflowers, 3, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"),
+ new /datum/stack_recipe("pink-and-purple flowers", /obj/structure/flora/ausbushes/ppflowers, 3, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"),
+ new /datum/stack_recipe("sparse grass", /obj/structure/flora/ausbushes/sparsegrass, 3, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"),
+ new /datum/stack_recipe("full grass", /obj/structure/flora/ausbushes/fullgrass, 3, one_per_turf = 0, on_floor = 1, recycle_material = "[name]")
+ ))
+ )
\ No newline at end of file
diff --git a/polaris.dme b/polaris.dme
new file mode 100644
index 00000000000..fdc64f9104d
--- /dev/null
+++ b/polaris.dme
@@ -0,0 +1,3357 @@
+// DM Environment file for baystation12.dme.
+// All manual changes should be made outside the BEGIN_ and END_ blocks.
+// New source code should be placed in .dm files: choose File/New --> Code File.
+// BEGIN_INTERNALS
+// END_INTERNALS
+// BEGIN_FILE_DIR
+#define FILE_DIR .
+// END_FILE_DIR
+// BEGIN_PREFERENCES
+#define DEBUG
+// END_PREFERENCES
+// BEGIN_INCLUDE
+#include "code\__spaceman_dmm.dm"
+#include "code\_macros.dm"
+#include "code\_map_tests.dm"
+#include "code\_unit_tests.dm"
+#include "code\global.dm"
+#include "code\global_init.dm"
+#include "code\hub.dm"
+#include "code\names.dm"
+#include "code\stylesheet.dm"
+#include "code\world.dm"
+#include "code\__datastructures\globals.dm"
+#include "code\__defines\_compile_options.dm"
+#include "code\__defines\_lists.dm"
+#include "code\__defines\_planes+layers.dm"
+#include "code\__defines\_protect.dm"
+#include "code\__defines\_tick.dm"
+#include "code\__defines\admin.dm"
+#include "code\__defines\ai.dm"
+#include "code\__defines\appearance.dm"
+#include "code\__defines\atc.dm"
+#include "code\__defines\atmos.dm"
+#include "code\__defines\callbacks.dm"
+#include "code\__defines\chemistry.dm"
+#include "code\__defines\color.dm"
+#include "code\__defines\construction.dm"
+#include "code\__defines\crafting.dm"
+#include "code\__defines\damage_organs.dm"
+#include "code\__defines\dna.dm"
+#include "code\__defines\events.dm"
+#include "code\__defines\flags.dm"
+#include "code\__defines\gamemode.dm"
+#include "code\__defines\holomap.dm"
+#include "code\__defines\hoses.dm"
+#include "code\__defines\input.dm"
+#include "code\__defines\integrated_circuits.dm"
+#include "code\__defines\inventory_sizes.dm"
+#include "code\__defines\is_helpers.dm"
+#include "code\__defines\items_clothing.dm"
+#include "code\__defines\lighting.dm"
+#include "code\__defines\machinery.dm"
+#include "code\__defines\map.dm"
+#include "code\__defines\materials.dm"
+#include "code\__defines\math.dm"
+#include "code\__defines\math_physics.dm"
+#include "code\__defines\MC.dm"
+#include "code\__defines\misc.dm"
+#include "code\__defines\mobs.dm"
+#include "code\__defines\movement.dm"
+#include "code\__defines\objects.dm"
+#include "code\__defines\overmap.dm"
+#include "code\__defines\pda.dm"
+#include "code\__defines\planets.dm"
+#include "code\__defines\preferences.dm"
+#include "code\__defines\process_scheduler.dm"
+#include "code\__defines\qdel.dm"
+#include "code\__defines\research.dm"
+#include "code\__defines\rust_g.dm"
+#include "code\__defines\shuttle.dm"
+#include "code\__defines\sound.dm"
+#include "code\__defines\species_languages.dm"
+#include "code\__defines\sqlite_defines.dm"
+#include "code\__defines\subsystems.dm"
+#include "code\__defines\supply.dm"
+#include "code\__defines\targeting.dm"
+#include "code\__defines\tgui.dm"
+#include "code\__defines\tools.dm"
+#include "code\__defines\turfs.dm"
+#include "code\__defines\typeids.dm"
+#include "code\__defines\unit_tests.dm"
+#include "code\__defines\vote.dm"
+#include "code\__defines\vv.dm"
+#include "code\__defines\webhooks.dm"
+#include "code\__defines\wires.dm"
+#include "code\__defines\xenoarcheaology.dm"
+#include "code\__defines\ZAS.dm"
+#include "code\__defines\dcs\flags.dm"
+#include "code\__defines\dcs\helpers.dm"
+#include "code\__defines\dcs\signals.dm"
+#include "code\_global_vars\bitfields.dm"
+#include "code\_global_vars\misc.dm"
+#include "code\_global_vars\mobs.dm"
+#include "code\_global_vars\sensitive.dm"
+#include "code\_global_vars\lists\mapping.dm"
+#include "code\_global_vars\lists\misc.dm"
+#include "code\_global_vars\lists\species.dm"
+#include "code\_helpers\_global_objects.dm"
+#include "code\_helpers\_lists.dm"
+#include "code\_helpers\atmospherics.dm"
+#include "code\_helpers\atom_movables.dm"
+#include "code\_helpers\client.dm"
+#include "code\_helpers\events.dm"
+#include "code\_helpers\files.dm"
+#include "code\_helpers\game.dm"
+#include "code\_helpers\global_lists.dm"
+#include "code\_helpers\icons.dm"
+#include "code\_helpers\image.dm"
+#include "code\_helpers\logging.dm"
+#include "code\_helpers\matrices.dm"
+#include "code\_helpers\mobs.dm"
+#include "code\_helpers\names.dm"
+#include "code\_helpers\sanitize_values.dm"
+#include "code\_helpers\storage.dm"
+#include "code\_helpers\string_lists.dm"
+#include "code\_helpers\text.dm"
+#include "code\_helpers\time.dm"
+#include "code\_helpers\turfs.dm"
+#include "code\_helpers\type2type.dm"
+#include "code\_helpers\unsorted.dm"
+#include "code\_helpers\view.dm"
+#include "code\_helpers\visual_filters.dm"
+#include "code\_helpers\sorts\__main.dm"
+#include "code\_helpers\sorts\comparators.dm"
+#include "code\_helpers\sorts\TimSort.dm"
+#include "code\_onclick\_defines.dm"
+#include "code\_onclick\adjacent.dm"
+#include "code\_onclick\ai.dm"
+#include "code\_onclick\click.dm"
+#include "code\_onclick\cyborg.dm"
+#include "code\_onclick\drag_drop.dm"
+#include "code\_onclick\item_attack.dm"
+#include "code\_onclick\observer.dm"
+#include "code\_onclick\other_mobs.dm"
+#include "code\_onclick\rig.dm"
+#include "code\_onclick\telekinesis.dm"
+#include "code\_onclick\hud\_defines.dm"
+#include "code\_onclick\hud\ability_screen_objects.dm"
+#include "code\_onclick\hud\action.dm"
+#include "code\_onclick\hud\ai.dm"
+#include "code\_onclick\hud\alert.dm"
+#include "code\_onclick\hud\alien_larva.dm"
+#include "code\_onclick\hud\fullscreen.dm"
+#include "code\_onclick\hud\ghost.dm"
+#include "code\_onclick\hud\gun_mode.dm"
+#include "code\_onclick\hud\hud.dm"
+#include "code\_onclick\hud\human.dm"
+#include "code\_onclick\hud\map_popups.dm"
+#include "code\_onclick\hud\minihud.dm"
+#include "code\_onclick\hud\minihud_mapper.dm"
+#include "code\_onclick\hud\minihud_rigmech.dm"
+#include "code\_onclick\hud\movable_screen_objects.dm"
+#include "code\_onclick\hud\picture_in_picture.dm"
+#include "code\_onclick\hud\radial.dm"
+#include "code\_onclick\hud\radial_persistent.dm"
+#include "code\_onclick\hud\robot.dm"
+#include "code\_onclick\hud\screen_objects.dm"
+#include "code\_onclick\hud\skybox.dm"
+#include "code\_onclick\hud\spell_screen_objects.dm"
+#include "code\ATMOSPHERICS\_atmos_setup.dm"
+#include "code\ATMOSPHERICS\_atmospherics_helpers.dm"
+#include "code\ATMOSPHERICS\atmospherics.dm"
+#include "code\ATMOSPHERICS\datum_pipe_network.dm"
+#include "code\ATMOSPHERICS\datum_pipeline.dm"
+#include "code\ATMOSPHERICS\components\portables_connector.dm"
+#include "code\ATMOSPHERICS\components\shutoff.dm"
+#include "code\ATMOSPHERICS\components\tvalve.dm"
+#include "code\ATMOSPHERICS\components\valve.dm"
+#include "code\ATMOSPHERICS\components\binary_devices\binary_atmos_base.dm"
+#include "code\ATMOSPHERICS\components\binary_devices\circulator.dm"
+#include "code\ATMOSPHERICS\components\binary_devices\dp_vent_pump.dm"
+#include "code\ATMOSPHERICS\components\binary_devices\passive_gate.dm"
+#include "code\ATMOSPHERICS\components\binary_devices\pump.dm"
+#include "code\ATMOSPHERICS\components\binary_devices\volume_pump.dm"
+#include "code\ATMOSPHERICS\components\omni_devices\_omni_extras.dm"
+#include "code\ATMOSPHERICS\components\omni_devices\filter.dm"
+#include "code\ATMOSPHERICS\components\omni_devices\mixer.dm"
+#include "code\ATMOSPHERICS\components\omni_devices\omni_base.dm"
+#include "code\ATMOSPHERICS\components\trinary_devices\filter.dm"
+#include "code\ATMOSPHERICS\components\trinary_devices\mixer.dm"
+#include "code\ATMOSPHERICS\components\trinary_devices\trinary_base.dm"
+#include "code\ATMOSPHERICS\components\unary\cold_sink.dm"
+#include "code\ATMOSPHERICS\components\unary\heat_exchanger.dm"
+#include "code\ATMOSPHERICS\components\unary\heat_source.dm"
+#include "code\ATMOSPHERICS\components\unary\outlet_injector.dm"
+#include "code\ATMOSPHERICS\components\unary\unary_base.dm"
+#include "code\ATMOSPHERICS\components\unary\vent_pump.dm"
+#include "code\ATMOSPHERICS\components\unary\vent_scrubber.dm"
+#include "code\ATMOSPHERICS\pipes\cap.dm"
+#include "code\ATMOSPHERICS\pipes\he_pipes.dm"
+#include "code\ATMOSPHERICS\pipes\manifold.dm"
+#include "code\ATMOSPHERICS\pipes\manifold4w.dm"
+#include "code\ATMOSPHERICS\pipes\pipe_base.dm"
+#include "code\ATMOSPHERICS\pipes\simple.dm"
+#include "code\ATMOSPHERICS\pipes\tank.dm"
+#include "code\ATMOSPHERICS\pipes\universal.dm"
+#include "code\ATMOSPHERICS\pipes\vent.dm"
+#include "code\controllers\autotransfer.dm"
+#include "code\controllers\communications.dm"
+#include "code\controllers\configuration.dm"
+#include "code\controllers\controller.dm"
+#include "code\controllers\emergency_shuttle_controller.dm"
+#include "code\controllers\failsafe.dm"
+#include "code\controllers\globals.dm"
+#include "code\controllers\hooks-defs.dm"
+#include "code\controllers\hooks.dm"
+#include "code\controllers\master.dm"
+#include "code\controllers\master_controller.dm"
+#include "code\controllers\subsystem.dm"
+#include "code\controllers\verbs.dm"
+#include "code\controllers\observer_listener\atom\observer.dm"
+#include "code\controllers\subsystems\ai.dm"
+#include "code\controllers\subsystems\aifast.dm"
+#include "code\controllers\subsystems\air.dm"
+#include "code\controllers\subsystems\airflow.dm"
+#include "code\controllers\subsystems\alarm.dm"
+#include "code\controllers\subsystems\antag.dm"
+#include "code\controllers\subsystems\assets.dm"
+#include "code\controllers\subsystems\atoms.dm"
+#include "code\controllers\subsystems\character_setup.dm"
+#include "code\controllers\subsystems\chat.dm"
+#include "code\controllers\subsystems\chemistry.dm"
+#include "code\controllers\subsystems\circuits.dm"
+#include "code\controllers\subsystems\dcs.dm"
+#include "code\controllers\subsystems\events.dm"
+#include "code\controllers\subsystems\events2.dm"
+#include "code\controllers\subsystems\game_master.dm"
+#include "code\controllers\subsystems\garbage.dm"
+#include "code\controllers\subsystems\holomaps.dm"
+#include "code\controllers\subsystems\inactivity.dm"
+#include "code\controllers\subsystems\init_misc_early.dm"
+#include "code\controllers\subsystems\input.dm"
+#include "code\controllers\subsystems\job.dm"
+#include "code\controllers\subsystems\lighting.dm"
+#include "code\controllers\subsystems\machines.dm"
+#include "code\controllers\subsystems\mapping.dm"
+#include "code\controllers\subsystems\misc_slow.dm"
+#include "code\controllers\subsystems\mobs.dm"
+#include "code\controllers\subsystems\nanoui.dm"
+#include "code\controllers\subsystems\nightshift.dm"
+#include "code\controllers\subsystems\open_space.dm"
+#include "code\controllers\subsystems\orbits.dm"
+#include "code\controllers\subsystems\overlays.dm"
+#include "code\controllers\subsystems\persistence.dm"
+#include "code\controllers\subsystems\planets.dm"
+#include "code\controllers\subsystems\radiation.dm"
+#include "code\controllers\subsystems\shuttles.dm"
+#include "code\controllers\subsystems\skybox.dm"
+#include "code\controllers\subsystems\sqlite.dm"
+#include "code\controllers\subsystems\sun.dm"
+#include "code\controllers\subsystems\supply.dm"
+#include "code\controllers\subsystems\tgui.dm"
+#include "code\controllers\subsystems\ticker.dm"
+#include "code\controllers\subsystems\time_track.dm"
+#include "code\controllers\subsystems\timer.dm"
+#include "code\controllers\subsystems\typing.dm"
+#include "code\controllers\subsystems\vote.dm"
+#include "code\controllers\subsystems\webhooks.dm"
+#include "code\controllers\subsystems\xenoarch.dm"
+#include "code\controllers\subsystems\processing\fastprocess.dm"
+#include "code\controllers\subsystems\processing\obj.dm"
+#include "code\controllers\subsystems\processing\processing.dm"
+#include "code\controllers\subsystems\processing\projectiles.dm"
+#include "code\controllers\subsystems\processing\turfs.dm"
+#include "code\core\atom\Transform.dm"
+#include "code\core\datum\IsAbstract.dm"
+#include "code\core\image\Transform.dm"
+#include "code\core\matrix\Transform.dm"
+#include "code\datums\ai_law_sets.dm"
+#include "code\datums\ai_laws.dm"
+#include "code\datums\beam.dm"
+#include "code\datums\browser.dm"
+#include "code\datums\callback.dm"
+#include "code\datums\category.dm"
+#include "code\datums\chat_message.dm"
+#include "code\datums\datacore.dm"
+#include "code\datums\datum.dm"
+#include "code\datums\datumvars.dm"
+#include "code\datums\EPv2.dm"
+#include "code\datums\ghost_query.dm"
+#include "code\datums\hierarchy.dm"
+#include "code\datums\mind.dm"
+#include "code\datums\mixed.dm"
+#include "code\datums\modules.dm"
+#include "code\datums\move_intent.dm"
+#include "code\datums\mutable_appearance.dm"
+#include "code\datums\orbit.dm"
+#include "code\datums\organs.dm"
+#include "code\datums\position_point_vector.dm"
+#include "code\datums\progressbar.dm"
+#include "code\datums\riding.dm"
+#include "code\datums\soul_link.dm"
+#include "code\datums\sun.dm"
+#include "code\datums\weakref.dm"
+#include "code\datums\audio\_audio.dm"
+#include "code\datums\audio\_tracks.dm"
+#include "code\datums\audio\jukebox.dm"
+#include "code\datums\autolathe\arms.dm"
+#include "code\datums\autolathe\autolathe.dm"
+#include "code\datums\autolathe\devices.dm"
+#include "code\datums\autolathe\engineering.dm"
+#include "code\datums\autolathe\general.dm"
+#include "code\datums\autolathe\materials.dm"
+#include "code\datums\autolathe\medical.dm"
+#include "code\datums\autolathe\tools.dm"
+#include "code\datums\components\_component.dm"
+#include "code\datums\components\crafting\crafting.dm"
+#include "code\datums\components\crafting\crafting_external.dm"
+#include "code\datums\components\crafting\recipes.dm"
+#include "code\datums\components\crafting\tool_quality.dm"
+#include "code\datums\components\crafting\recipes\archery.dm"
+#include "code\datums\elements\_element.dm"
+#include "code\datums\game_masters\_common.dm"
+#include "code\datums\game_masters\default.dm"
+#include "code\datums\game_masters\other_game_masters.dm"
+#include "code\datums\helper_datums\construction_datum.dm"
+#include "code\datums\helper_datums\events.dm"
+#include "code\datums\helper_datums\getrev.dm"
+#include "code\datums\helper_datums\teleport.dm"
+#include "code\datums\helper_datums\topic_input.dm"
+#include "code\datums\licenses\license.dm"
+#include "code\datums\locations\locations.dm"
+#include "code\datums\locations\nyx.dm"
+#include "code\datums\locations\qerrvallis.dm"
+#include "code\datums\locations\s_randarr.dm"
+#include "code\datums\locations\sol.dm"
+#include "code\datums\locations\tau_ceti.dm"
+#include "code\datums\locations\uueoa_esa.dm"
+#include "code\datums\locations\vir.dm"
+#include "code\datums\looping_sounds\_looping_sound.dm"
+#include "code\datums\looping_sounds\item_sounds.dm"
+#include "code\datums\looping_sounds\machinery_sounds.dm"
+#include "code\datums\looping_sounds\sequence.dm"
+#include "code\datums\looping_sounds\weather_sounds.dm"
+#include "code\datums\managed_browsers\_managed_browser.dm"
+#include "code\datums\managed_browsers\changelingevolution.dm"
+#include "code\datums\managed_browsers\feedback_form.dm"
+#include "code\datums\managed_browsers\feedback_viewer.dm"
+#include "code\datums\observation\_debug.dm"
+#include "code\datums\observation\_defines.dm"
+#include "code\datums\observation\destroyed.dm"
+#include "code\datums\observation\dir_set.dm"
+#include "code\datums\observation\equipped.dm"
+#include "code\datums\observation\helpers.dm"
+#include "code\datums\observation\logged_in.dm"
+#include "code\datums\observation\moved.dm"
+#include "code\datums\observation\observation.dm"
+#include "code\datums\observation\power_change.dm"
+#include "code\datums\observation\shuttle_added.dm"
+#include "code\datums\observation\shuttle_moved.dm"
+#include "code\datums\observation\stat_set.dm"
+#include "code\datums\observation\turf_changed.dm"
+#include "code\datums\observation\turf_enterexit.dm"
+#include "code\datums\observation\unequipped.dm"
+#include "code\datums\observation\z_moved.dm"
+#include "code\datums\observation\~cleanup.dm"
+#include "code\datums\outfits\_defines.dm"
+#include "code\datums\outfits\horror_killers.dm"
+#include "code\datums\outfits\misc.dm"
+#include "code\datums\outfits\nanotrasen.dm"
+#include "code\datums\outfits\outfit.dm"
+#include "code\datums\outfits\pirates.dm"
+#include "code\datums\outfits\spec_op.dm"
+#include "code\datums\outfits\tournament.dm"
+#include "code\datums\outfits\vox.dm"
+#include "code\datums\outfits\wizardry.dm"
+#include "code\datums\outfits\costumes\costume.dm"
+#include "code\datums\outfits\costumes\halloween.dm"
+#include "code\datums\outfits\jobs\cargo.dm"
+#include "code\datums\outfits\jobs\civilian.dm"
+#include "code\datums\outfits\jobs\command.dm"
+#include "code\datums\outfits\jobs\engineering.dm"
+#include "code\datums\outfits\jobs\job.dm"
+#include "code\datums\outfits\jobs\medical.dm"
+#include "code\datums\outfits\jobs\misc.dm"
+#include "code\datums\outfits\jobs\science.dm"
+#include "code\datums\outfits\jobs\security.dm"
+#include "code\datums\outfits\military\fleet.dm"
+#include "code\datums\outfits\military\marines.dm"
+#include "code\datums\outfits\military\military.dm"
+#include "code\datums\outfits\military\sifguard.dm"
+#include "code\datums\repositories\ammomaterial.dm"
+#include "code\datums\repositories\cameras.dm"
+#include "code\datums\repositories\crew.dm"
+#include "code\datums\repositories\decls.dm"
+#include "code\datums\repositories\repository.dm"
+#include "code\datums\repositories\unique.dm"
+#include "code\datums\roundstats\_defines_local.dm"
+#include "code\datums\roundstats\departmentgoal.dm"
+#include "code\datums\roundstats\roundstats.dm"
+#include "code\datums\supplypacks\atmospherics.dm"
+#include "code\datums\supplypacks\contraband.dm"
+#include "code\datums\supplypacks\costumes.dm"
+#include "code\datums\supplypacks\engineering.dm"
+#include "code\datums\supplypacks\hospitality.dm"
+#include "code\datums\supplypacks\hydroponics.dm"
+#include "code\datums\supplypacks\materials.dm"
+#include "code\datums\supplypacks\medical.dm"
+#include "code\datums\supplypacks\misc.dm"
+#include "code\datums\supplypacks\munitions.dm"
+#include "code\datums\supplypacks\recreation.dm"
+#include "code\datums\supplypacks\robotics.dm"
+#include "code\datums\supplypacks\science.dm"
+#include "code\datums\supplypacks\security.dm"
+#include "code\datums\supplypacks\supply.dm"
+#include "code\datums\supplypacks\supplypacks.dm"
+#include "code\datums\supplypacks\voidsuits.dm"
+#include "code\datums\underwear\bottom.dm"
+#include "code\datums\underwear\socks.dm"
+#include "code\datums\underwear\top.dm"
+#include "code\datums\underwear\undershirts.dm"
+#include "code\datums\underwear\underwear.dm"
+#include "code\datums\uplink\ammunition.dm"
+#include "code\datums\uplink\announcements.dm"
+#include "code\datums\uplink\armor.dm"
+#include "code\datums\uplink\backup.dm"
+#include "code\datums\uplink\badassery.dm"
+#include "code\datums\uplink\grenades.dm"
+#include "code\datums\uplink\hardsuit_modules.dm"
+#include "code\datums\uplink\implants.dm"
+#include "code\datums\uplink\medical.dm"
+#include "code\datums\uplink\resources.dm"
+#include "code\datums\uplink\stealth_items.dm"
+#include "code\datums\uplink\stealthy_weapons.dm"
+#include "code\datums\uplink\telecrystals.dm"
+#include "code\datums\uplink\tools.dm"
+#include "code\datums\uplink\uplink_categories.dm"
+#include "code\datums\uplink\uplink_items.dm"
+#include "code\datums\uplink\visible_weapons.dm"
+#include "code\datums\vending\stored_item.dm"
+#include "code\datums\vending\vending.dm"
+#include "code\datums\wires\airlock.dm"
+#include "code\datums\wires\alarm.dm"
+#include "code\datums\wires\apc.dm"
+#include "code\datums\wires\autolathe.dm"
+#include "code\datums\wires\camera.dm"
+#include "code\datums\wires\explosive.dm"
+#include "code\datums\wires\grid_checker.dm"
+#include "code\datums\wires\jukebox.dm"
+#include "code\datums\wires\particle_accelerator.dm"
+#include "code\datums\wires\radio.dm"
+#include "code\datums\wires\robot.dm"
+#include "code\datums\wires\seedstorage.dm"
+#include "code\datums\wires\smartfridge.dm"
+#include "code\datums\wires\smes.dm"
+#include "code\datums\wires\suit_storage_unit.dm"
+#include "code\datums\wires\tesla_coil.dm"
+#include "code\datums\wires\vending.dm"
+#include "code\datums\wires\wires.dm"
+#include "code\defines\gases.dm"
+#include "code\defines\obj.dm"
+#include "code\defines\obj\weapon.dm"
+#include "code\defines\procs\announce.dm"
+#include "code\defines\procs\AStar.dm"
+#include "code\defines\procs\dbcore.dm"
+#include "code\defines\procs\radio.dm"
+#include "code\defines\procs\statistics.dm"
+#include "code\game\atoms.dm"
+#include "code\game\atoms_movable.dm"
+#include "code\game\base_turf.dm"
+#include "code\game\periodic_news.dm"
+#include "code\game\response_team.dm"
+#include "code\game\shuttle_engines.dm"
+#include "code\game\skincmd.dm"
+#include "code\game\sound.dm"
+#include "code\game\trader_visit.dm"
+#include "code\game\world.dm"
+#include "code\game\area\ai_monitored.dm"
+#include "code\game\area\areas.dm"
+#include "code\game\area\asteroid_areas.dm"
+#include "code\game\area\Space Station 13 areas.dm"
+#include "code\game\area\ss13_deprecated_areas.dm"
+#include "code\game\dna\dna2.dm"
+#include "code\game\dna\dna2_domutcheck.dm"
+#include "code\game\dna\dna2_helpers.dm"
+#include "code\game\dna\dna_modifier.dm"
+#include "code\game\dna\genes\disabilities.dm"
+#include "code\game\dna\genes\gene.dm"
+#include "code\game\dna\genes\powers.dm"
+#include "code\game\gamemodes\events.dm"
+#include "code\game\gamemodes\game_mode.dm"
+#include "code\game\gamemodes\game_mode_latespawn.dm"
+#include "code\game\gamemodes\objective.dm"
+#include "code\game\gamemodes\setupgame.dm"
+#include "code\game\gamemodes\calamity\calamity.dm"
+#include "code\game\gamemodes\changeling\absorbed_dna.dm"
+#include "code\game\gamemodes\changeling\changeling.dm"
+#include "code\game\gamemodes\changeling\changeling_evolutiontree.dm"
+#include "code\game\gamemodes\changeling\changeling_powers.dm"
+#include "code\game\gamemodes\changeling\generic_equip_procs.dm"
+#include "code\game\gamemodes\changeling\modularchangling.dm"
+#include "code\game\gamemodes\changeling\powers\absorb.dm"
+#include "code\game\gamemodes\changeling\powers\armblade.dm"
+#include "code\game\gamemodes\changeling\powers\armor.dm"
+#include "code\game\gamemodes\changeling\powers\augmented_eyesight.dm"
+#include "code\game\gamemodes\changeling\powers\bioelectrogenesis.dm"
+#include "code\game\gamemodes\changeling\powers\blind_sting.dm"
+#include "code\game\gamemodes\changeling\powers\boost_range.dm"
+#include "code\game\gamemodes\changeling\powers\cryo_sting.dm"
+#include "code\game\gamemodes\changeling\powers\darkvision.dm"
+#include "code\game\gamemodes\changeling\powers\deaf_sting.dm"
+#include "code\game\gamemodes\changeling\powers\delayed_toxin_sting.dm"
+#include "code\game\gamemodes\changeling\powers\digital_camo.dm"
+#include "code\game\gamemodes\changeling\powers\electric_lockpick.dm"
+#include "code\game\gamemodes\changeling\powers\endoarmor.dm"
+#include "code\game\gamemodes\changeling\powers\enfeebling_string.dm"
+#include "code\game\gamemodes\changeling\powers\engorged_glands.dm"
+#include "code\game\gamemodes\changeling\powers\enrage.dm"
+#include "code\game\gamemodes\changeling\powers\epinephrine_overdose.dm"
+#include "code\game\gamemodes\changeling\powers\escape_restraints.dm"
+#include "code\game\gamemodes\changeling\powers\extract_dna_sting.dm"
+#include "code\game\gamemodes\changeling\powers\fabricate_clothing.dm"
+#include "code\game\gamemodes\changeling\powers\fake_death.dm"
+#include "code\game\gamemodes\changeling\powers\fleshmend.dm"
+#include "code\game\gamemodes\changeling\powers\hivemind.dm"
+#include "code\game\gamemodes\changeling\powers\mimic_voice.dm"
+#include "code\game\gamemodes\changeling\powers\panacea.dm"
+#include "code\game\gamemodes\changeling\powers\rapid_regen.dm"
+#include "code\game\gamemodes\changeling\powers\recursive_enhancement.dm"
+#include "code\game\gamemodes\changeling\powers\respec.dm"
+#include "code\game\gamemodes\changeling\powers\revive.dm"
+#include "code\game\gamemodes\changeling\powers\self_respiration.dm"
+#include "code\game\gamemodes\changeling\powers\shriek.dm"
+#include "code\game\gamemodes\changeling\powers\silence_sting.dm"
+#include "code\game\gamemodes\changeling\powers\transform.dm"
+#include "code\game\gamemodes\changeling\powers\visible_camouflage.dm"
+#include "code\game\gamemodes\cult\construct_spells.dm"
+#include "code\game\gamemodes\cult\cult.dm"
+#include "code\game\gamemodes\cult\cult_items.dm"
+#include "code\game\gamemodes\cult\cult_structures.dm"
+#include "code\game\gamemodes\cult\hell_universe.dm"
+#include "code\game\gamemodes\cult\narsie.dm"
+#include "code\game\gamemodes\cult\ritual.dm"
+#include "code\game\gamemodes\cult\runes.dm"
+#include "code\game\gamemodes\cult\soulstone.dm"
+#include "code\game\gamemodes\cult\talisman.dm"
+#include "code\game\gamemodes\cult\cultify\mob.dm"
+#include "code\game\gamemodes\cult\cultify\obj.dm"
+#include "code\game\gamemodes\cult\cultify\turf.dm"
+#include "code\game\gamemodes\endgame\endgame.dm"
+#include "code\game\gamemodes\endgame\supermatter_cascade\blob.dm"
+#include "code\game\gamemodes\endgame\supermatter_cascade\portal.dm"
+#include "code\game\gamemodes\endgame\supermatter_cascade\universe.dm"
+#include "code\game\gamemodes\events\black_hole.dm"
+#include "code\game\gamemodes\events\clang.dm"
+#include "code\game\gamemodes\events\dust.dm"
+#include "code\game\gamemodes\events\power_failure.dm"
+#include "code\game\gamemodes\events\wormholes.dm"
+#include "code\game\gamemodes\events\holidays\Christmas.dm"
+#include "code\game\gamemodes\events\holidays\Holidays.dm"
+#include "code\game\gamemodes\events\holidays\Other.dm"
+#include "code\game\gamemodes\extended\extended.dm"
+#include "code\game\gamemodes\heist\heist.dm"
+#include "code\game\gamemodes\infiltrator\infiltrator.dm"
+#include "code\game\gamemodes\malfunction\malf_hardware.dm"
+#include "code\game\gamemodes\malfunction\malf_research.dm"
+#include "code\game\gamemodes\malfunction\malf_research_ability.dm"
+#include "code\game\gamemodes\malfunction\malfunction.dm"
+#include "code\game\gamemodes\malfunction\newmalf_ability_trees\HARDWARE.dm"
+#include "code\game\gamemodes\malfunction\newmalf_ability_trees\HELPERS.dm"
+#include "code\game\gamemodes\malfunction\newmalf_ability_trees\tree_interdiction.dm"
+#include "code\game\gamemodes\malfunction\newmalf_ability_trees\tree_manipulation.dm"
+#include "code\game\gamemodes\malfunction\newmalf_ability_trees\tree_networking.dm"
+#include "code\game\gamemodes\meteor\meteor.dm"
+#include "code\game\gamemodes\meteor\meteors.dm"
+#include "code\game\gamemodes\mixed\conflux.dm"
+#include "code\game\gamemodes\mixed\infestation.dm"
+#include "code\game\gamemodes\mixed\intrigue.dm"
+#include "code\game\gamemodes\mixed\lizard.dm"
+#include "code\game\gamemodes\mixed\mercrenegade.dm"
+#include "code\game\gamemodes\mixed\mercwiz.dm"
+#include "code\game\gamemodes\mixed\paranoia.dm"
+#include "code\game\gamemodes\mixed\traitorling.dm"
+#include "code\game\gamemodes\mixed\traitorrenegade.dm"
+#include "code\game\gamemodes\mixed\uprising.dm"
+#include "code\game\gamemodes\mixed\visitors.dm"
+#include "code\game\gamemodes\ninja\ninja.dm"
+#include "code\game\gamemodes\nuclear\nuclear.dm"
+#include "code\game\gamemodes\nuclear\pinpointer.dm"
+#include "code\game\gamemodes\revolution\revolution.dm"
+#include "code\game\gamemodes\technomancer\catalog.dm"
+#include "code\game\gamemodes\technomancer\clothing.dm"
+#include "code\game\gamemodes\technomancer\core_obj.dm"
+#include "code\game\gamemodes\technomancer\equipment.dm"
+#include "code\game\gamemodes\technomancer\instability.dm"
+#include "code\game\gamemodes\technomancer\spell_objs.dm"
+#include "code\game\gamemodes\technomancer\spell_objs_helpers.dm"
+#include "code\game\gamemodes\technomancer\technomancer.dm"
+#include "code\game\gamemodes\technomancer\assistance\assistance.dm"
+#include "code\game\gamemodes\technomancer\devices\boots_of_speed.dm"
+#include "code\game\gamemodes\technomancer\devices\disposable_teleporter.dm"
+#include "code\game\gamemodes\technomancer\devices\gloves_of_regen.dm"
+#include "code\game\gamemodes\technomancer\devices\hypos.dm"
+#include "code\game\gamemodes\technomancer\devices\implants.dm"
+#include "code\game\gamemodes\technomancer\devices\shield_armor.dm"
+#include "code\game\gamemodes\technomancer\devices\tesla_armor.dm"
+#include "code\game\gamemodes\technomancer\spells\abjuration.dm"
+#include "code\game\gamemodes\technomancer\spells\apportation.dm"
+#include "code\game\gamemodes\technomancer\spells\audible_deception.dm"
+#include "code\game\gamemodes\technomancer\spells\blink.dm"
+#include "code\game\gamemodes\technomancer\spells\chroma.dm"
+#include "code\game\gamemodes\technomancer\spells\condensation.dm"
+#include "code\game\gamemodes\technomancer\spells\control.dm"
+#include "code\game\gamemodes\technomancer\spells\dispel.dm"
+#include "code\game\gamemodes\technomancer\spells\energy_siphon.dm"
+#include "code\game\gamemodes\technomancer\spells\flame_tongue.dm"
+#include "code\game\gamemodes\technomancer\spells\gambit.dm"
+#include "code\game\gamemodes\technomancer\spells\illusion.dm"
+#include "code\game\gamemodes\technomancer\spells\instability_tap.dm"
+#include "code\game\gamemodes\technomancer\spells\mark_recall.dm"
+#include "code\game\gamemodes\technomancer\spells\mend_organs.dm"
+#include "code\game\gamemodes\technomancer\spells\oxygenate.dm"
+#include "code\game\gamemodes\technomancer\spells\passwall.dm"
+#include "code\game\gamemodes\technomancer\spells\phase_shift.dm"
+#include "code\game\gamemodes\technomancer\spells\radiance.dm"
+#include "code\game\gamemodes\technomancer\spells\reflect.dm"
+#include "code\game\gamemodes\technomancer\spells\resurrect.dm"
+#include "code\game\gamemodes\technomancer\spells\shared_burden.dm"
+#include "code\game\gamemodes\technomancer\spells\shield.dm"
+#include "code\game\gamemodes\technomancer\spells\targeting_matrix.dm"
+#include "code\game\gamemodes\technomancer\spells\track.dm"
+#include "code\game\gamemodes\technomancer\spells\warp_strike.dm"
+#include "code\game\gamemodes\technomancer\spells\aura\aura.dm"
+#include "code\game\gamemodes\technomancer\spells\aura\biomed_aura.dm"
+#include "code\game\gamemodes\technomancer\spells\aura\fire_aura.dm"
+#include "code\game\gamemodes\technomancer\spells\aura\frost_aura.dm"
+#include "code\game\gamemodes\technomancer\spells\aura\shock_aura.dm"
+#include "code\game\gamemodes\technomancer\spells\aura\unstable_aura.dm"
+#include "code\game\gamemodes\technomancer\spells\modifier\corona.dm"
+#include "code\game\gamemodes\technomancer\spells\modifier\haste.dm"
+#include "code\game\gamemodes\technomancer\spells\modifier\mend_all.dm"
+#include "code\game\gamemodes\technomancer\spells\modifier\mend_life.dm"
+#include "code\game\gamemodes\technomancer\spells\modifier\mend_synthetic.dm"
+#include "code\game\gamemodes\technomancer\spells\modifier\modifier.dm"
+#include "code\game\gamemodes\technomancer\spells\modifier\purify.dm"
+#include "code\game\gamemodes\technomancer\spells\modifier\repel_missiles.dm"
+#include "code\game\gamemodes\technomancer\spells\projectile\beam.dm"
+#include "code\game\gamemodes\technomancer\spells\projectile\chain_lightning.dm"
+#include "code\game\gamemodes\technomancer\spells\projectile\force_missile.dm"
+#include "code\game\gamemodes\technomancer\spells\projectile\ionic_bolt.dm"
+#include "code\game\gamemodes\technomancer\spells\projectile\lesser_chain_lightning.dm"
+#include "code\game\gamemodes\technomancer\spells\projectile\lightning.dm"
+#include "code\game\gamemodes\technomancer\spells\projectile\overload.dm"
+#include "code\game\gamemodes\technomancer\spells\projectile\projectile.dm"
+#include "code\game\gamemodes\technomancer\spells\spawner\darkness.dm"
+#include "code\game\gamemodes\technomancer\spells\spawner\destablize.dm"
+#include "code\game\gamemodes\technomancer\spells\spawner\fire_blast.dm"
+#include "code\game\gamemodes\technomancer\spells\spawner\pulsar.dm"
+#include "code\game\gamemodes\technomancer\spells\spawner\spawner.dm"
+#include "code\game\gamemodes\technomancer\spells\summon\summon.dm"
+#include "code\game\gamemodes\technomancer\spells\summon\summon_creature.dm"
+#include "code\game\gamemodes\technomancer\spells\summon\summon_ward.dm"
+#include "code\game\gamemodes\traitor\traitor.dm"
+#include "code\game\gamemodes\wizard\wizard.dm"
+#include "code\game\jobs\_access_defs.dm"
+#include "code\game\jobs\access.dm"
+#include "code\game\jobs\access_datum.dm"
+#include "code\game\jobs\job_controller.dm"
+#include "code\game\jobs\jobs.dm"
+#include "code\game\jobs\job\_alt_title.dm"
+#include "code\game\jobs\job\assistant.dm"
+#include "code\game\jobs\job\captain.dm"
+#include "code\game\jobs\job\civilian.dm"
+#include "code\game\jobs\job\civilian_chaplain.dm"
+#include "code\game\jobs\job\department.dm"
+#include "code\game\jobs\job\engineering.dm"
+#include "code\game\jobs\job\job.dm"
+#include "code\game\jobs\job\medical.dm"
+#include "code\game\jobs\job\science.dm"
+#include "code\game\jobs\job\security.dm"
+#include "code\game\jobs\job\silicon.dm"
+#include "code\game\machinery\adv_med.dm"
+#include "code\game\machinery\ai_slipper.dm"
+#include "code\game\machinery\air_alarm.dm"
+#include "code\game\machinery\atm_ret_field.dm"
+#include "code\game\machinery\atmo_control.dm"
+#include "code\game\machinery\autolathe.dm"
+#include "code\game\machinery\Beacon.dm"
+#include "code\game\machinery\biogenerator.dm"
+#include "code\game\machinery\bioprinter.dm"
+#include "code\game\machinery\buttons.dm"
+#include "code\game\machinery\CableLayer.dm"
+#include "code\game\machinery\cell_charger.dm"
+#include "code\game\machinery\cloning.dm"
+#include "code\game\machinery\cryo.dm"
+#include "code\game\machinery\cryopod.dm"
+#include "code\game\machinery\deployable.dm"
+#include "code\game\machinery\door_control.dm"
+#include "code\game\machinery\doppler_array.dm"
+#include "code\game\machinery\exonet_node.dm"
+#include "code\game\machinery\fire_alarm.dm"
+#include "code\game\machinery\flasher.dm"
+#include "code\game\machinery\floodlight.dm"
+#include "code\game\machinery\floor_light.dm"
+#include "code\game\machinery\floorlayer.dm"
+#include "code\game\machinery\frame.dm"
+#include "code\game\machinery\hologram.dm"
+#include "code\game\machinery\holosign.dm"
+#include "code\game\machinery\igniter.dm"
+#include "code\game\machinery\iv_drip.dm"
+#include "code\game\machinery\jukebox.dm"
+#include "code\game\machinery\lightswitch.dm"
+#include "code\game\machinery\machinery.dm"
+#include "code\game\machinery\machinery_power.dm"
+#include "code\game\machinery\magnet.dm"
+#include "code\game\machinery\mass_driver.dm"
+#include "code\game\machinery\navbeacon.dm"
+#include "code\game\machinery\neonsign.dm"
+#include "code\game\machinery\newscaster.dm"
+#include "code\game\machinery\nuclear_bomb.dm"
+#include "code\game\machinery\OpTable.dm"
+#include "code\game\machinery\overview.dm"
+#include "code\game\machinery\oxygen_pump.dm"
+#include "code\game\machinery\pda_multicaster.dm"
+#include "code\game\machinery\pointdefense.dm"
+#include "code\game\machinery\portable_turret.dm"
+#include "code\game\machinery\recharger.dm"
+#include "code\game\machinery\rechargestation.dm"
+#include "code\game\machinery\requests_console.dm"
+#include "code\game\machinery\robot_fabricator.dm"
+#include "code\game\machinery\seed_extractor.dm"
+#include "code\game\machinery\Sleeper.dm"
+#include "code\game\machinery\spaceheater.dm"
+#include "code\game\machinery\status_display.dm"
+#include "code\game\machinery\status_display_ai.dm"
+#include "code\game\machinery\suit_storage_unit.dm"
+#include "code\game\machinery\supply_display.dm"
+#include "code\game\machinery\supplybeacon.dm"
+#include "code\game\machinery\syndicatebeacon.dm"
+#include "code\game\machinery\teleporter.dm"
+#include "code\game\machinery\transportpod.dm"
+#include "code\game\machinery\turret_control.dm"
+#include "code\game\machinery\wall_frames.dm"
+#include "code\game\machinery\washing_machine.dm"
+#include "code\game\machinery\wishgranter.dm"
+#include "code\game\machinery\atmoalter\area_atmos_computer.dm"
+#include "code\game\machinery\atmoalter\canister.dm"
+#include "code\game\machinery\atmoalter\clamp.dm"
+#include "code\game\machinery\atmoalter\meter.dm"
+#include "code\game\machinery\atmoalter\portable_atmospherics.dm"
+#include "code\game\machinery\atmoalter\pump.dm"
+#include "code\game\machinery\atmoalter\scrubber.dm"
+#include "code\game\machinery\camera\camera.dm"
+#include "code\game\machinery\camera\camera_assembly.dm"
+#include "code\game\machinery\camera\motion.dm"
+#include "code\game\machinery\camera\presets.dm"
+#include "code\game\machinery\camera\tracking.dm"
+#include "code\game\machinery\computer\ai_core.dm"
+#include "code\game\machinery\computer\aifixer.dm"
+#include "code\game\machinery\computer\arcade.dm"
+#include "code\game\machinery\computer\atmos_alert.dm"
+#include "code\game\machinery\computer\atmos_control.dm"
+#include "code\game\machinery\computer\camera.dm"
+#include "code\game\machinery\computer\card.dm"
+#include "code\game\machinery\computer\cloning.dm"
+#include "code\game\machinery\computer\communications.dm"
+#include "code\game\machinery\computer\computer.dm"
+#include "code\game\machinery\computer\crew.dm"
+#include "code\game\machinery\computer\guestpass.dm"
+#include "code\game\machinery\computer\law.dm"
+#include "code\game\machinery\computer\medical.dm"
+#include "code\game\machinery\computer\message.dm"
+#include "code\game\machinery\computer\Operating.dm"
+#include "code\game\machinery\computer\pod.dm"
+#include "code\game\machinery\computer\prisoner.dm"
+#include "code\game\machinery\computer\prisonshuttle.dm"
+#include "code\game\machinery\computer\RCON_Console.dm"
+#include "code\game\machinery\computer\robot.dm"
+#include "code\game\machinery\computer\security.dm"
+#include "code\game\machinery\computer\shutoff_monitor.dm"
+#include "code\game\machinery\computer\shuttle.dm"
+#include "code\game\machinery\computer\skills.dm"
+#include "code\game\machinery\computer\specops_shuttle.dm"
+#include "code\game\machinery\computer\station_alert.dm"
+#include "code\game\machinery\computer\supply.dm"
+#include "code\game\machinery\computer\syndicate_specops_shuttle.dm"
+#include "code\game\machinery\doors\airlock.dm"
+#include "code\game\machinery\doors\airlock_control.dm"
+#include "code\game\machinery\doors\airlock_electronics.dm"
+#include "code\game\machinery\doors\alarmlock.dm"
+#include "code\game\machinery\doors\blast_door.dm"
+#include "code\game\machinery\doors\brigdoors.dm"
+#include "code\game\machinery\doors\checkForMultipleDoors.dm"
+#include "code\game\machinery\doors\door.dm"
+#include "code\game\machinery\doors\firedoor.dm"
+#include "code\game\machinery\doors\firedoor_assembly.dm"
+#include "code\game\machinery\doors\multi_tile.dm"
+#include "code\game\machinery\doors\unpowered.dm"
+#include "code\game\machinery\doors\windowdoor.dm"
+#include "code\game\machinery\embedded_controller\airlock_controllers.dm"
+#include "code\game\machinery\embedded_controller\airlock_docking_controller.dm"
+#include "code\game\machinery\embedded_controller\airlock_docking_controller_multi.dm"
+#include "code\game\machinery\embedded_controller\airlock_program.dm"
+#include "code\game\machinery\embedded_controller\docking_program.dm"
+#include "code\game\machinery\embedded_controller\docking_program_multi.dm"
+#include "code\game\machinery\embedded_controller\embedded_controller_base.dm"
+#include "code\game\machinery\embedded_controller\embedded_program_base.dm"
+#include "code\game\machinery\embedded_controller\mapping_helpers.dm"
+#include "code\game\machinery\embedded_controller\simple_docking_controller.dm"
+#include "code\game\machinery\pipe\construction.dm"
+#include "code\game\machinery\pipe\pipe_dispenser.dm"
+#include "code\game\machinery\pipe\pipe_recipes.dm"
+#include "code\game\machinery\pipe\pipelayer.dm"
+#include "code\game\machinery\telecomms\broadcaster.dm"
+#include "code\game\machinery\telecomms\logbrowser.dm"
+#include "code\game\machinery\telecomms\machine_interactions.dm"
+#include "code\game\machinery\telecomms\presets.dm"
+#include "code\game\machinery\telecomms\telecommunications.dm"
+#include "code\game\machinery\telecomms\telemonitor.dm"
+#include "code\game\machinery\telecomms\traffic_control.dm"
+#include "code\game\machinery\virtual_reality\ar_console.dm"
+#include "code\game\machinery\virtual_reality\vr_console.dm"
+#include "code\game\magic\Uristrunes.dm"
+#include "code\game\mecha\mech_bay.dm"
+#include "code\game\mecha\mech_fabricator.dm"
+#include "code\game\mecha\mech_prosthetics.dm"
+#include "code\game\mecha\mech_sensor.dm"
+#include "code\game\mecha\mecha.dm"
+#include "code\game\mecha\mecha_actions.dm"
+#include "code\game\mecha\mecha_appearance.dm"
+#include "code\game\mecha\mecha_construction_paths.dm"
+#include "code\game\mecha\mecha_control_console.dm"
+#include "code\game\mecha\mecha_helpers.dm"
+#include "code\game\mecha\mecha_parts.dm"
+#include "code\game\mecha\mecha_wreckage.dm"
+#include "code\game\mecha\combat\combat.dm"
+#include "code\game\mecha\combat\durand.dm"
+#include "code\game\mecha\combat\fighter.dm"
+#include "code\game\mecha\combat\gorilla.dm"
+#include "code\game\mecha\combat\gygax.dm"
+#include "code\game\mecha\combat\marauder.dm"
+#include "code\game\mecha\combat\phazon.dm"
+#include "code\game\mecha\components\_component.dm"
+#include "code\game\mecha\components\actuators.dm"
+#include "code\game\mecha\components\armor.dm"
+#include "code\game\mecha\components\electrical.dm"
+#include "code\game\mecha\components\hull.dm"
+#include "code\game\mecha\components\lifesupport.dm"
+#include "code\game\mecha\equipment\mecha_equipment.dm"
+#include "code\game\mecha\equipment\mecha_equipment_dynamicprocs.dm"
+#include "code\game\mecha\equipment\tools\armor_melee.dm"
+#include "code\game\mecha\equipment\tools\armor_ranged.dm"
+#include "code\game\mecha\equipment\tools\cable_layer.dm"
+#include "code\game\mecha\equipment\tools\catapult.dm"
+#include "code\game\mecha\equipment\tools\clamp.dm"
+#include "code\game\mecha\equipment\tools\cloak.dm"
+#include "code\game\mecha\equipment\tools\drill.dm"
+#include "code\game\mecha\equipment\tools\energy_relay.dm"
+#include "code\game\mecha\equipment\tools\extinguisher.dm"
+#include "code\game\mecha\equipment\tools\generator.dm"
+#include "code\game\mecha\equipment\tools\hardpoint_actuator.dm"
+#include "code\game\mecha\equipment\tools\inflatables.dm"
+#include "code\game\mecha\equipment\tools\jetpack.dm"
+#include "code\game\mecha\equipment\tools\jumpjet.dm"
+#include "code\game\mecha\equipment\tools\orescanner.dm"
+#include "code\game\mecha\equipment\tools\passenger.dm"
+#include "code\game\mecha\equipment\tools\powertool.dm"
+#include "code\game\mecha\equipment\tools\rcd.dm"
+#include "code\game\mecha\equipment\tools\repair_droid.dm"
+#include "code\game\mecha\equipment\tools\running_board.dm"
+#include "code\game\mecha\equipment\tools\shield.dm"
+#include "code\game\mecha\equipment\tools\shield_omni.dm"
+#include "code\game\mecha\equipment\tools\sleeper.dm"
+#include "code\game\mecha\equipment\tools\speedboost.dm"
+#include "code\game\mecha\equipment\tools\syringe_gun.dm"
+#include "code\game\mecha\equipment\tools\teleporter.dm"
+#include "code\game\mecha\equipment\tools\tools.dm"
+#include "code\game\mecha\equipment\tools\weldinglaser.dm"
+#include "code\game\mecha\equipment\tools\wormhole.dm"
+#include "code\game\mecha\equipment\weapons\honk.dm"
+#include "code\game\mecha\equipment\weapons\weapons.dm"
+#include "code\game\mecha\equipment\weapons\ballistic\automatic.dm"
+#include "code\game\mecha\equipment\weapons\ballistic\ballistic.dm"
+#include "code\game\mecha\equipment\weapons\ballistic\mortar.dm"
+#include "code\game\mecha\equipment\weapons\ballistic\shotgun.dm"
+#include "code\game\mecha\equipment\weapons\defense\shocker.dm"
+#include "code\game\mecha\equipment\weapons\energy\energy.dm"
+#include "code\game\mecha\equipment\weapons\energy\ion.dm"
+#include "code\game\mecha\equipment\weapons\energy\laser.dm"
+#include "code\game\mecha\equipment\weapons\energy\phased.dm"
+#include "code\game\mecha\equipment\weapons\energy\pulse.dm"
+#include "code\game\mecha\equipment\weapons\energy\stun.dm"
+#include "code\game\mecha\equipment\weapons\explosive\grenade.dm"
+#include "code\game\mecha\equipment\weapons\explosive\missile.dm"
+#include "code\game\mecha\equipment\weapons\fire\flamethrower.dm"
+#include "code\game\mecha\equipment\weapons\fire\incendiary.dm"
+#include "code\game\mecha\medical\medical.dm"
+#include "code\game\mecha\medical\odysseus.dm"
+#include "code\game\mecha\medical\serenity.dm"
+#include "code\game\mecha\space\hoverpod.dm"
+#include "code\game\mecha\space\shuttle.dm"
+#include "code\game\mecha\working\ripley.dm"
+#include "code\game\mecha\working\working.dm"
+#include "code\game\objects\banners.dm"
+#include "code\game\objects\buckling.dm"
+#include "code\game\objects\empulse.dm"
+#include "code\game\objects\explosion.dm"
+#include "code\game\objects\explosion_recursive.dm"
+#include "code\game\objects\items.dm"
+#include "code\game\objects\objs.dm"
+#include "code\game\objects\structures.dm"
+#include "code\game\objects\weapons.dm"
+#include "code\game\objects\effects\bump_teleporter.dm"
+#include "code\game\objects\effects\glowshroom.dm"
+#include "code\game\objects\effects\item_pickup_ghost.dm"
+#include "code\game\objects\effects\landmarks.dm"
+#include "code\game\objects\effects\misc.dm"
+#include "code\game\objects\effects\overlays.dm"
+#include "code\game\objects\effects\portals.dm"
+#include "code\game\objects\effects\spiders.dm"
+#include "code\game\objects\effects\step_triggers.dm"
+#include "code\game\objects\effects\zone_divider.dm"
+#include "code\game\objects\effects\alien\aliens.dm"
+#include "code\game\objects\effects\chem\chemsmoke.dm"
+#include "code\game\objects\effects\chem\coating.dm"
+#include "code\game\objects\effects\chem\foam.dm"
+#include "code\game\objects\effects\chem\water.dm"
+#include "code\game\objects\effects\decals\cleanable.dm"
+#include "code\game\objects\effects\decals\crayon.dm"
+#include "code\game\objects\effects\decals\misc.dm"
+#include "code\game\objects\effects\decals\remains.dm"
+#include "code\game\objects\effects\decals\warning_stripes.dm"
+#include "code\game\objects\effects\decals\Cleanable\aliens.dm"
+#include "code\game\objects\effects\decals\Cleanable\fuel.dm"
+#include "code\game\objects\effects\decals\Cleanable\humans.dm"
+#include "code\game\objects\effects\decals\Cleanable\misc.dm"
+#include "code\game\objects\effects\decals\Cleanable\robots.dm"
+#include "code\game\objects\effects\decals\Cleanable\tracks.dm"
+#include "code\game\objects\effects\decals\posters\bs12.dm"
+#include "code\game\objects\effects\decals\posters\polarisposters.dm"
+#include "code\game\objects\effects\decals\posters\posters.dm"
+#include "code\game\objects\effects\map_effects\beam_point.dm"
+#include "code\game\objects\effects\map_effects\effect_emitter.dm"
+#include "code\game\objects\effects\map_effects\map_effects.dm"
+#include "code\game\objects\effects\map_effects\perma_light.dm"
+#include "code\game\objects\effects\map_effects\portal.dm"
+#include "code\game\objects\effects\map_effects\radiation_emitter.dm"
+#include "code\game\objects\effects\map_effects\screen_shaker.dm"
+#include "code\game\objects\effects\map_effects\sound_emitter.dm"
+#include "code\game\objects\effects\prop\columnblast.dm"
+#include "code\game\objects\effects\prop\snake.dm"
+#include "code\game\objects\effects\spawners\bombspawner.dm"
+#include "code\game\objects\effects\spawners\gibs.dm"
+#include "code\game\objects\effects\spawners\graffiti.dm"
+#include "code\game\objects\effects\temporary_visuals\miscellaneous.dm"
+#include "code\game\objects\effects\temporary_visuals\temporary_visual.dm"
+#include "code\game\objects\effects\temporary_visuals\projectiles\impact.dm"
+#include "code\game\objects\effects\temporary_visuals\projectiles\muzzle.dm"
+#include "code\game\objects\effects\temporary_visuals\projectiles\projectile_effects.dm"
+#include "code\game\objects\effects\temporary_visuals\projectiles\tracer.dm"
+#include "code\game\objects\items\antag_spawners.dm"
+#include "code\game\objects\items\apc_frame.dm"
+#include "code\game\objects\items\bells.dm"
+#include "code\game\objects\items\blueprints.dm"
+#include "code\game\objects\items\bodybag.dm"
+#include "code\game\objects\items\contraband.dm"
+#include "code\game\objects\items\crayons.dm"
+#include "code\game\objects\items\glassjar.dm"
+#include "code\game\objects\items\gunbox.dm"
+#include "code\game\objects\items\magazine.dm"
+#include "code\game\objects\items\paintkit.dm"
+#include "code\game\objects\items\poi_items.dm"
+#include "code\game\objects\items\robobag.dm"
+#include "code\game\objects\items\shooting_range.dm"
+#include "code\game\objects\items\tailoring.dm"
+#include "code\game\objects\items\trash.dm"
+#include "code\game\objects\items\trash_material.dm"
+#include "code\game\objects\items\uav.dm"
+#include "code\game\objects\items\devices\ai_detector.dm"
+#include "code\game\objects\items\devices\aicard.dm"
+#include "code\game\objects\items\devices\binoculars.dm"
+#include "code\game\objects\items\devices\chameleonproj.dm"
+#include "code\game\objects\items\devices\debugger.dm"
+#include "code\game\objects\items\devices\defib.dm"
+#include "code\game\objects\items\devices\flash.dm"
+#include "code\game\objects\items\devices\flashlight.dm"
+#include "code\game\objects\items\devices\floor_painter.dm"
+#include "code\game\objects\items\devices\geiger.dm"
+#include "code\game\objects\items\devices\gps.dm"
+#include "code\game\objects\items\devices\hacktool.dm"
+#include "code\game\objects\items\devices\holowarrant.dm"
+#include "code\game\objects\items\devices\laserpointer.dm"
+#include "code\game\objects\items\devices\lightreplacer.dm"
+#include "code\game\objects\items\devices\megaphone.dm"
+#include "code\game\objects\items\devices\modkit.dm"
+#include "code\game\objects\items\devices\multitool.dm"
+#include "code\game\objects\items\devices\paicard.dm"
+#include "code\game\objects\items\devices\pipe_painter.dm"
+#include "code\game\objects\items\devices\powersink.dm"
+#include "code\game\objects\items\devices\scanners.dm"
+#include "code\game\objects\items\devices\spy_bug.dm"
+#include "code\game\objects\items\devices\suit_cooling.dm"
+#include "code\game\objects\items\devices\t_scanner.dm"
+#include "code\game\objects\items\devices\taperecorder.dm"
+#include "code\game\objects\items\devices\text_to_speech.dm"
+#include "code\game\objects\items\devices\traitordevices.dm"
+#include "code\game\objects\items\devices\transfer_valve.dm"
+#include "code\game\objects\items\devices\translator.dm"
+#include "code\game\objects\items\devices\tvcamera.dm"
+#include "code\game\objects\items\devices\uplink.dm"
+#include "code\game\objects\items\devices\uplink_random_lists.dm"
+#include "code\game\objects\items\devices\violin.dm"
+#include "code\game\objects\items\devices\whistle.dm"
+#include "code\game\objects\items\devices\communicator\communicator.dm"
+#include "code\game\objects\items\devices\communicator\helper.dm"
+#include "code\game\objects\items\devices\communicator\integrated.dm"
+#include "code\game\objects\items\devices\communicator\messaging.dm"
+#include "code\game\objects\items\devices\communicator\phone.dm"
+#include "code\game\objects\items\devices\communicator\UI.dm"
+#include "code\game\objects\items\devices\radio\beacon.dm"
+#include "code\game\objects\items\devices\radio\electropack.dm"
+#include "code\game\objects\items\devices\radio\encryptionkey.dm"
+#include "code\game\objects\items\devices\radio\headset.dm"
+#include "code\game\objects\items\devices\radio\intercom.dm"
+#include "code\game\objects\items\devices\radio\jammer.dm"
+#include "code\game\objects\items\devices\radio\radio.dm"
+#include "code\game\objects\items\devices\radio\radiopack.dm"
+#include "code\game\objects\items\mines\_mine.dm"
+#include "code\game\objects\items\mines\_mine_payload.dm"
+#include "code\game\objects\items\mines\mine_assembly.dm"
+#include "code\game\objects\items\mines\mine_dnascamble.dm"
+#include "code\game\objects\items\mines\mine_emp.dm"
+#include "code\game\objects\items\mines\mine_frag.dm"
+#include "code\game\objects\items\mines\mine_incendiary.dm"
+#include "code\game\objects\items\mines\mine_kick.dm"
+#include "code\game\objects\items\mines\mine_napalm.dm"
+#include "code\game\objects\items\mines\mine_sleeping.dm"
+#include "code\game\objects\items\mines\mine_stun.dm"
+#include "code\game\objects\items\mines\mine_training.dm"
+#include "code\game\objects\items\robot\robot_items.dm"
+#include "code\game\objects\items\robot\robot_parts.dm"
+#include "code\game\objects\items\robot\robot_upgrades.dm"
+#include "code\game\objects\items\stacks\marker_beacons.dm"
+#include "code\game\objects\items\stacks\matter_synth.dm"
+#include "code\game\objects\items\stacks\medical.dm"
+#include "code\game\objects\items\stacks\nanopaste.dm"
+#include "code\game\objects\items\stacks\sandbags.dm"
+#include "code\game\objects\items\stacks\stack.dm"
+#include "code\game\objects\items\stacks\telecrystal.dm"
+#include "code\game\objects\items\stacks\tickets.dm"
+#include "code\game\objects\items\stacks\tiles\fifty_spawner_tiles.dm"
+#include "code\game\objects\items\stacks\tiles\tile_types.dm"
+#include "code\game\objects\items\toys\godfigures.dm"
+#include "code\game\objects\items\toys\mech_toys.dm"
+#include "code\game\objects\items\toys\toys.dm"
+#include "code\game\objects\items\weapons\AI_modules.dm"
+#include "code\game\objects\items\weapons\augment_items.dm"
+#include "code\game\objects\items\weapons\autopsy.dm"
+#include "code\game\objects\items\weapons\bones.dm"
+#include "code\game\objects\items\weapons\candle.dm"
+#include "code\game\objects\items\weapons\canes.dm"
+#include "code\game\objects\items\weapons\chewables.dm"
+#include "code\game\objects\items\weapons\cigs_lighters.dm"
+#include "code\game\objects\items\weapons\clown_items.dm"
+#include "code\game\objects\items\weapons\cosmetics.dm"
+#include "code\game\objects\items\weapons\dna_injector.dm"
+#include "code\game\objects\items\weapons\ecigs.dm"
+#include "code\game\objects\items\weapons\explosives.dm"
+#include "code\game\objects\items\weapons\extinguisher.dm"
+#include "code\game\objects\items\weapons\flamethrower.dm"
+#include "code\game\objects\items\weapons\gift_wrappaper.dm"
+#include "code\game\objects\items\weapons\handcuffs.dm"
+#include "code\game\objects\items\weapons\improvised_components.dm"
+#include "code\game\objects\items\weapons\manuals.dm"
+#include "code\game\objects\items\weapons\mop.dm"
+#include "code\game\objects\items\weapons\mop_deploy.dm"
+#include "code\game\objects\items\weapons\paint.dm"
+#include "code\game\objects\items\weapons\paiwire.dm"
+#include "code\game\objects\items\weapons\policetape.dm"
+#include "code\game\objects\items\weapons\RCD.dm"
+#include "code\game\objects\items\weapons\RPD.dm"
+#include "code\game\objects\items\weapons\RSF.dm"
+#include "code\game\objects\items\weapons\scrolls.dm"
+#include "code\game\objects\items\weapons\shields.dm"
+#include "code\game\objects\items\weapons\stunbaton.dm"
+#include "code\game\objects\items\weapons\surgery_tools.dm"
+#include "code\game\objects\items\weapons\swords_axes_etc.dm"
+#include "code\game\objects\items\weapons\syndie.dm"
+#include "code\game\objects\items\weapons\tape.dm"
+#include "code\game\objects\items\weapons\teleportation.dm"
+#include "code\game\objects\items\weapons\towels.dm"
+#include "code\game\objects\items\weapons\traps.dm"
+#include "code\game\objects\items\weapons\trays.dm"
+#include "code\game\objects\items\weapons\weaponry.dm"
+#include "code\game\objects\items\weapons\weldbackpack.dm"
+#include "code\game\objects\items\weapons\circuitboards\broken.dm"
+#include "code\game\objects\items\weapons\circuitboards\circuitboard.dm"
+#include "code\game\objects\items\weapons\circuitboards\frame.dm"
+#include "code\game\objects\items\weapons\circuitboards\mecha.dm"
+#include "code\game\objects\items\weapons\circuitboards\other.dm"
+#include "code\game\objects\items\weapons\circuitboards\computer\air_management.dm"
+#include "code\game\objects\items\weapons\circuitboards\computer\camera_monitor.dm"
+#include "code\game\objects\items\weapons\circuitboards\computer\computer.dm"
+#include "code\game\objects\items\weapons\circuitboards\computer\research.dm"
+#include "code\game\objects\items\weapons\circuitboards\computer\shuttle.dm"
+#include "code\game\objects\items\weapons\circuitboards\computer\supply.dm"
+#include "code\game\objects\items\weapons\circuitboards\computer\telecomms.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\biogenerator.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\cloning.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\engineering.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\fluidpump.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\jukebox.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\kitchen_appliances.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\mech_recharger.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\mining_drill.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\pacman.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\papershredder.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\power.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\recharge_station.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\research.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\shieldgen.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\ships.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\telecomms.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\unary_atmos.dm"
+#include "code\game\objects\items\weapons\grenades\anti_photon_grenade.dm"
+#include "code\game\objects\items\weapons\grenades\chem_grenade.dm"
+#include "code\game\objects\items\weapons\grenades\concussion.dm"
+#include "code\game\objects\items\weapons\grenades\emgrenade.dm"
+#include "code\game\objects\items\weapons\grenades\explosive.dm"
+#include "code\game\objects\items\weapons\grenades\flashbang.dm"
+#include "code\game\objects\items\weapons\grenades\grenade.dm"
+#include "code\game\objects\items\weapons\grenades\projectile.dm"
+#include "code\game\objects\items\weapons\grenades\smokebomb.dm"
+#include "code\game\objects\items\weapons\grenades\spawnergrenade.dm"
+#include "code\game\objects\items\weapons\grenades\supermatter.dm"
+#include "code\game\objects\items\weapons\id cards\cards.dm"
+#include "code\game\objects\items\weapons\id cards\id_stacks.dm"
+#include "code\game\objects\items\weapons\id cards\station_ids.dm"
+#include "code\game\objects\items\weapons\id cards\syndicate_ids.dm"
+#include "code\game\objects\items\weapons\implants\implant.dm"
+#include "code\game\objects\items\weapons\implants\implantaugment.dm"
+#include "code\game\objects\items\weapons\implants\implantcase.dm"
+#include "code\game\objects\items\weapons\implants\implantchair.dm"
+#include "code\game\objects\items\weapons\implants\implantcircuits.dm"
+#include "code\game\objects\items\weapons\implants\implantdud.dm"
+#include "code\game\objects\items\weapons\implants\implanter.dm"
+#include "code\game\objects\items\weapons\implants\implantfreedom.dm"
+#include "code\game\objects\items\weapons\implants\implantlanguage.dm"
+#include "code\game\objects\items\weapons\implants\implantpad.dm"
+#include "code\game\objects\items\weapons\implants\implantrestrainingbolt.dm"
+#include "code\game\objects\items\weapons\implants\implantuplink.dm"
+#include "code\game\objects\items\weapons\implants\neuralbasic.dm"
+#include "code\game\objects\items\weapons\material\ashtray.dm"
+#include "code\game\objects\items\weapons\material\bats.dm"
+#include "code\game\objects\items\weapons\material\chainsaw.dm"
+#include "code\game\objects\items\weapons\material\foam.dm"
+#include "code\game\objects\items\weapons\material\gravemarker.dm"
+#include "code\game\objects\items\weapons\material\kitchen.dm"
+#include "code\game\objects\items\weapons\material\knives.dm"
+#include "code\game\objects\items\weapons\material\material_armor.dm"
+#include "code\game\objects\items\weapons\material\material_weapons.dm"
+#include "code\game\objects\items\weapons\material\misc.dm"
+#include "code\game\objects\items\weapons\material\shards.dm"
+#include "code\game\objects\items\weapons\material\swords.dm"
+#include "code\game\objects\items\weapons\material\thrown.dm"
+#include "code\game\objects\items\weapons\material\twohanded.dm"
+#include "code\game\objects\items\weapons\material\whetstone.dm"
+#include "code\game\objects\items\weapons\melee\deflect.dm"
+#include "code\game\objects\items\weapons\melee\energy.dm"
+#include "code\game\objects\items\weapons\melee\misc.dm"
+#include "code\game\objects\items\weapons\storage\backpack.dm"
+#include "code\game\objects\items\weapons\storage\bags.dm"
+#include "code\game\objects\items\weapons\storage\belt.dm"
+#include "code\game\objects\items\weapons\storage\bible.dm"
+#include "code\game\objects\items\weapons\storage\boxes.dm"
+#include "code\game\objects\items\weapons\storage\briefcase.dm"
+#include "code\game\objects\items\weapons\storage\fancy.dm"
+#include "code\game\objects\items\weapons\storage\firstaid.dm"
+#include "code\game\objects\items\weapons\storage\internal.dm"
+#include "code\game\objects\items\weapons\storage\laundry_basket.dm"
+#include "code\game\objects\items\weapons\storage\lockbox.dm"
+#include "code\game\objects\items\weapons\storage\misc.dm"
+#include "code\game\objects\items\weapons\storage\mre.dm"
+#include "code\game\objects\items\weapons\storage\quickdraw.dm"
+#include "code\game\objects\items\weapons\storage\secure.dm"
+#include "code\game\objects\items\weapons\storage\storage.dm"
+#include "code\game\objects\items\weapons\storage\toolbox.dm"
+#include "code\game\objects\items\weapons\storage\uplink_kits.dm"
+#include "code\game\objects\items\weapons\storage\wallets.dm"
+#include "code\game\objects\items\weapons\storage\bags\ore.dm"
+#include "code\game\objects\items\weapons\tanks\jetpack.dm"
+#include "code\game\objects\items\weapons\tanks\tank_types.dm"
+#include "code\game\objects\items\weapons\tanks\tanks.dm"
+#include "code\game\objects\items\weapons\tools\crowbar.dm"
+#include "code\game\objects\items\weapons\tools\screwdriver.dm"
+#include "code\game\objects\items\weapons\tools\weldingtool.dm"
+#include "code\game\objects\items\weapons\tools\wirecutters.dm"
+#include "code\game\objects\items\weapons\tools\wrench.dm"
+#include "code\game\objects\random\_random.dm"
+#include "code\game\objects\random\anomalous.dm"
+#include "code\game\objects\random\guns_and_ammo.dm"
+#include "code\game\objects\random\maintenance.dm"
+#include "code\game\objects\random\mapping.dm"
+#include "code\game\objects\random\mechs.dm"
+#include "code\game\objects\random\misc.dm"
+#include "code\game\objects\random\mob.dm"
+#include "code\game\objects\random\spacesuits.dm"
+#include "code\game\objects\random\unidentified\medicine.dm"
+#include "code\game\objects\structures\animal_den.dm"
+#include "code\game\objects\structures\barricades.dm"
+#include "code\game\objects\structures\barsign.dm"
+#include "code\game\objects\structures\bedsheet_bin.dm"
+#include "code\game\objects\structures\bonfire.dm"
+#include "code\game\objects\structures\catwalk.dm"
+#include "code\game\objects\structures\cliff.dm"
+#include "code\game\objects\structures\coathanger.dm"
+#include "code\game\objects\structures\curtains.dm"
+#include "code\game\objects\structures\displaycase.dm"
+#include "code\game\objects\structures\dogbed.dm"
+#include "code\game\objects\structures\door_assembly.dm"
+#include "code\game\objects\structures\electricchair.dm"
+#include "code\game\objects\structures\extinguisher.dm"
+#include "code\game\objects\structures\fence.dm"
+#include "code\game\objects\structures\fireaxe.dm"
+#include "code\game\objects\structures\fitness.dm"
+#include "code\game\objects\structures\girders.dm"
+#include "code\game\objects\structures\gravemarker.dm"
+#include "code\game\objects\structures\grille.dm"
+#include "code\game\objects\structures\handrail.dm"
+#include "code\game\objects\structures\holoplant.dm"
+#include "code\game\objects\structures\inflatable.dm"
+#include "code\game\objects\structures\janicart.dm"
+#include "code\game\objects\structures\kitchen_spike.dm"
+#include "code\game\objects\structures\lattice.dm"
+#include "code\game\objects\structures\ledges.dm"
+#include "code\game\objects\structures\lightpost.dm"
+#include "code\game\objects\structures\loot_piles.dm"
+#include "code\game\objects\structures\mirror.dm"
+#include "code\game\objects\structures\mop_bucket.dm"
+#include "code\game\objects\structures\morgue.dm"
+#include "code\game\objects\structures\musician.dm"
+#include "code\game\objects\structures\plasticflaps.dm"
+#include "code\game\objects\structures\railing.dm"
+#include "code\game\objects\structures\safe.dm"
+#include "code\game\objects\structures\salvageable.dm"
+#include "code\game\objects\structures\signs.dm"
+#include "code\game\objects\structures\simple_doors.dm"
+#include "code\game\objects\structures\snowman.dm"
+#include "code\game\objects\structures\stasis_cage.dm"
+#include "code\game\objects\structures\tank_dispenser.dm"
+#include "code\game\objects\structures\target_stake.dm"
+#include "code\game\objects\structures\transit_tubes.dm"
+#include "code\game\objects\structures\under_wardrobe.dm"
+#include "code\game\objects\structures\watercloset.dm"
+#include "code\game\objects\structures\windoor_assembly.dm"
+#include "code\game\objects\structures\window.dm"
+#include "code\game\objects\structures\window_spawner.dm"
+#include "code\game\objects\structures\crates_lockers\__closets.dm"
+#include "code\game\objects\structures\crates_lockers\_closets_appearance_definitions.dm"
+#include "code\game\objects\structures\crates_lockers\crates.dm"
+#include "code\game\objects\structures\crates_lockers\largecrate.dm"
+#include "code\game\objects\structures\crates_lockers\vehiclecage.dm"
+#include "code\game\objects\structures\crates_lockers\closets\coffin.dm"
+#include "code\game\objects\structures\crates_lockers\closets\crittercrate.dm"
+#include "code\game\objects\structures\crates_lockers\closets\fitness.dm"
+#include "code\game\objects\structures\crates_lockers\closets\gimmick.dm"
+#include "code\game\objects\structures\crates_lockers\closets\job_closets.dm"
+#include "code\game\objects\structures\crates_lockers\closets\l3closet.dm"
+#include "code\game\objects\structures\crates_lockers\closets\malfunction.dm"
+#include "code\game\objects\structures\crates_lockers\closets\statue.dm"
+#include "code\game\objects\structures\crates_lockers\closets\syndicate.dm"
+#include "code\game\objects\structures\crates_lockers\closets\utility_closets.dm"
+#include "code\game\objects\structures\crates_lockers\closets\walllocker.dm"
+#include "code\game\objects\structures\crates_lockers\closets\wardrobe.dm"
+#include "code\game\objects\structures\crates_lockers\closets\secure\bar.dm"
+#include "code\game\objects\structures\crates_lockers\closets\secure\cargo.dm"
+#include "code\game\objects\structures\crates_lockers\closets\secure\engineering.dm"
+#include "code\game\objects\structures\crates_lockers\closets\secure\freezer.dm"
+#include "code\game\objects\structures\crates_lockers\closets\secure\guncabinet.dm"
+#include "code\game\objects\structures\crates_lockers\closets\secure\hydroponics.dm"
+#include "code\game\objects\structures\crates_lockers\closets\secure\medical.dm"
+#include "code\game\objects\structures\crates_lockers\closets\secure\personal.dm"
+#include "code\game\objects\structures\crates_lockers\closets\secure\scientist.dm"
+#include "code\game\objects\structures\crates_lockers\closets\secure\secure_closets.dm"
+#include "code\game\objects\structures\crates_lockers\closets\secure\security.dm"
+#include "code\game\objects\structures\flora\flora.dm"
+#include "code\game\objects\structures\flora\grass.dm"
+#include "code\game\objects\structures\flora\trees.dm"
+#include "code\game\objects\structures\ghost_pods\ghost_pods.dm"
+#include "code\game\objects\structures\ghost_pods\human.dm"
+#include "code\game\objects\structures\ghost_pods\mysterious.dm"
+#include "code\game\objects\structures\ghost_pods\silicon.dm"
+#include "code\game\objects\structures\props\alien_props.dm"
+#include "code\game\objects\structures\props\beam_prism.dm"
+#include "code\game\objects\structures\props\billboard.dm"
+#include "code\game\objects\structures\props\blackbox.dm"
+#include "code\game\objects\structures\props\esoteric.dm"
+#include "code\game\objects\structures\props\fake_ai.dm"
+#include "code\game\objects\structures\props\fences.dm"
+#include "code\game\objects\structures\props\machines.dm"
+#include "code\game\objects\structures\props\nest.dm"
+#include "code\game\objects\structures\props\projectile_lock.dm"
+#include "code\game\objects\structures\props\prop.dm"
+#include "code\game\objects\structures\props\puzzledoor.dm"
+#include "code\game\objects\structures\props\rocks.dm"
+#include "code\game\objects\structures\props\statue.dm"
+#include "code\game\objects\structures\props\swarm.dm"
+#include "code\game\objects\structures\props\transmitter.dm"
+#include "code\game\objects\structures\props\warfare.dm"
+#include "code\game\objects\structures\stool_bed_chair_nest\alien_nests.dm"
+#include "code\game\objects\structures\stool_bed_chair_nest\bed.dm"
+#include "code\game\objects\structures\stool_bed_chair_nest\chairs.dm"
+#include "code\game\objects\structures\stool_bed_chair_nest\stools.dm"
+#include "code\game\objects\structures\stool_bed_chair_nest\wheelchair.dm"
+#include "code\game\objects\structures\stool_bed_chair_nest\wheelchair_item.dm"
+#include "code\game\turfs\simulated.dm"
+#include "code\game\turfs\turf.dm"
+#include "code\game\turfs\turf_changing.dm"
+#include "code\game\turfs\turf_flick_animations.dm"
+#include "code\game\turfs\unsimulated.dm"
+#include "code\game\turfs\flooring\flooring.dm"
+#include "code\game\turfs\flooring\flooring_decals.dm"
+#include "code\game\turfs\flooring\flooring_premade.dm"
+#include "code\game\turfs\initialization\init.dm"
+#include "code\game\turfs\initialization\maintenance.dm"
+#include "code\game\turfs\simulated\floor.dm"
+#include "code\game\turfs\simulated\floor_acts.dm"
+#include "code\game\turfs\simulated\floor_attackby.dm"
+#include "code\game\turfs\simulated\floor_damage.dm"
+#include "code\game\turfs\simulated\floor_icon.dm"
+#include "code\game\turfs\simulated\floor_static.dm"
+#include "code\game\turfs\simulated\floor_types.dm"
+#include "code\game\turfs\simulated\floor_types_eris.dm"
+#include "code\game\turfs\simulated\lava.dm"
+#include "code\game\turfs\simulated\wall_attacks.dm"
+#include "code\game\turfs\simulated\wall_icon.dm"
+#include "code\game\turfs\simulated\wall_types.dm"
+#include "code\game\turfs\simulated\walls.dm"
+#include "code\game\turfs\simulated\water.dm"
+#include "code\game\turfs\simulated\dungeon\floor.dm"
+#include "code\game\turfs\simulated\dungeon\wall.dm"
+#include "code\game\turfs\simulated\outdoors\dirt.dm"
+#include "code\game\turfs\simulated\outdoors\grass.dm"
+#include "code\game\turfs\simulated\outdoors\grass_random.dm"
+#include "code\game\turfs\simulated\outdoors\outdoors.dm"
+#include "code\game\turfs\simulated\outdoors\outdoors_attackby.dm"
+#include "code\game\turfs\simulated\outdoors\sidewalk.dm"
+#include "code\game\turfs\simulated\outdoors\sky.dm"
+#include "code\game\turfs\simulated\outdoors\snow.dm"
+#include "code\game\turfs\snow\snow.dm"
+#include "code\game\turfs\space\cracked_asteroid.dm"
+#include "code\game\turfs\space\space.dm"
+#include "code\game\turfs\space\transit.dm"
+#include "code\game\turfs\unsimulated\beach.dm"
+#include "code\game\turfs\unsimulated\floor.dm"
+#include "code\game\turfs\unsimulated\planetary.dm"
+#include "code\game\turfs\unsimulated\shuttle.dm"
+#include "code\game\turfs\unsimulated\walls.dm"
+#include "code\game\verbs\suicide.dm"
+#include "code\js\byjax.dm"
+#include "code\js\menus.dm"
+#include "code\modules\admin\admin.dm"
+#include "code\modules\admin\admin_attack_log.dm"
+#include "code\modules\admin\admin_investigate.dm"
+#include "code\modules\admin\admin_memo.dm"
+#include "code\modules\admin\admin_ranks.dm"
+#include "code\modules\admin\admin_secrets.dm"
+#include "code\modules\admin\admin_tools.dm"
+#include "code\modules\admin\admin_verb_lists.dm"
+#include "code\modules\admin\admin_verbs.dm"
+#include "code\modules\admin\banjob.dm"
+#include "code\modules\admin\create_mob.dm"
+#include "code\modules\admin\create_object.dm"
+#include "code\modules\admin\create_turf.dm"
+#include "code\modules\admin\fix_player_notes_listing.dm"
+#include "code\modules\admin\holder2.dm"
+#include "code\modules\admin\IsBanned.dm"
+#include "code\modules\admin\map_capture.dm"
+#include "code\modules\admin\NewBan.dm"
+#include "code\modules\admin\news.dm"
+#include "code\modules\admin\persistence.dm"
+#include "code\modules\admin\player_notes.dm"
+#include "code\modules\admin\player_panel.dm"
+#include "code\modules\admin\topic.dm"
+#include "code\modules\admin\ToRban.dm"
+#include "code\modules\admin\callproc\callproc.dm"
+#include "code\modules\admin\DB ban\functions.dm"
+#include "code\modules\admin\permissionverbs\permissionedit.dm"
+#include "code\modules\admin\secrets\admin_secrets\admin_logs.dm"
+#include "code\modules\admin\secrets\admin_secrets\alter_narsie.dm"
+#include "code\modules\admin\secrets\admin_secrets\bombing_list.dm"
+#include "code\modules\admin\secrets\admin_secrets\jump_shuttle.dm"
+#include "code\modules\admin\secrets\admin_secrets\launch_shuttle.dm"
+#include "code\modules\admin\secrets\admin_secrets\launch_shuttle_forced.dm"
+#include "code\modules\admin\secrets\admin_secrets\list_dna.dm"
+#include "code\modules\admin\secrets\admin_secrets\list_fingerprints.dm"
+#include "code\modules\admin\secrets\admin_secrets\move_shuttle.dm"
+#include "code\modules\admin\secrets\admin_secrets\prison_warp.dm"
+#include "code\modules\admin\secrets\admin_secrets\show_ai_laws.dm"
+#include "code\modules\admin\secrets\admin_secrets\show_crew_manifest.dm"
+#include "code\modules\admin\secrets\admin_secrets\show_game_mode.dm"
+#include "code\modules\admin\secrets\admin_secrets\show_law_changes.dm"
+#include "code\modules\admin\secrets\admin_secrets\show_signalers.dm"
+#include "code\modules\admin\secrets\admin_secrets\traitors_and_objectives.dm"
+#include "code\modules\admin\secrets\final_solutions\summon_narsie.dm"
+#include "code\modules\admin\secrets\final_solutions\supermatter_cascade.dm"
+#include "code\modules\admin\secrets\fun_secrets\break_all_lights.dm"
+#include "code\modules\admin\secrets\fun_secrets\break_some_lights.dm"
+#include "code\modules\admin\secrets\fun_secrets\fix_all_lights.dm"
+#include "code\modules\admin\secrets\fun_secrets\ghost_mode.dm"
+#include "code\modules\admin\secrets\fun_secrets\paintball_mode.dm"
+#include "code\modules\admin\secrets\fun_secrets\power_all_smes.dm"
+#include "code\modules\admin\secrets\fun_secrets\power_failure_begin.dm"
+#include "code\modules\admin\secrets\fun_secrets\power_failure_end.dm"
+#include "code\modules\admin\secrets\fun_secrets\remove_all_clothing.dm"
+#include "code\modules\admin\secrets\fun_secrets\remove_internal_clothing.dm"
+#include "code\modules\admin\secrets\fun_secrets\send_strike_team.dm"
+#include "code\modules\admin\secrets\fun_secrets\toggle_bomb_cap.dm"
+#include "code\modules\admin\secrets\fun_secrets\triple_ai_mode.dm"
+#include "code\modules\admin\secrets\fun_secrets\turn_humans_into_corgies.dm"
+#include "code\modules\admin\secrets\fun_secrets\turn_humans_into_monkeys.dm"
+#include "code\modules\admin\secrets\random_events\gravity.dm"
+#include "code\modules\admin\secrets\random_events\trigger_cordical_borer_infestation.dm"
+#include "code\modules\admin\secrets\random_events\trigger_xenomorph_infestation.dm"
+#include "code\modules\admin\verbs\adminhelp.dm"
+#include "code\modules\admin\verbs\adminjump.dm"
+#include "code\modules\admin\verbs\adminpm.dm"
+#include "code\modules\admin\verbs\adminsay.dm"
+#include "code\modules\admin\verbs\antag-ooc.dm"
+#include "code\modules\admin\verbs\atmosdebug.dm"
+#include "code\modules\admin\verbs\BrokenInhands.dm"
+#include "code\modules\admin\verbs\buildmode.dm"
+#include "code\modules\admin\verbs\change_appearance.dm"
+#include "code\modules\admin\verbs\check_customitem_activity.dm"
+#include "code\modules\admin\verbs\cinematic.dm"
+#include "code\modules\admin\verbs\custom_event.dm"
+#include "code\modules\admin\verbs\dbcon_fix.dm"
+#include "code\modules\admin\verbs\deadsay.dm"
+#include "code\modules\admin\verbs\debug.dm"
+#include "code\modules\admin\verbs\diagnostics.dm"
+#include "code\modules\admin\verbs\dice.dm"
+#include "code\modules\admin\verbs\fps.dm"
+#include "code\modules\admin\verbs\getlogs.dm"
+#include "code\modules\admin\verbs\grief_fixers.dm"
+#include "code\modules\admin\verbs\lightning_strike.dm"
+#include "code\modules\admin\verbs\map_template_loadverb.dm"
+#include "code\modules\admin\verbs\mapping.dm"
+#include "code\modules\admin\verbs\panicbunker.dm"
+#include "code\modules\admin\verbs\playsound.dm"
+#include "code\modules\admin\verbs\possess.dm"
+#include "code\modules\admin\verbs\pray.dm"
+#include "code\modules\admin\verbs\randomverbs.dm"
+#include "code\modules\admin\verbs\smite.dm"
+#include "code\modules\admin\verbs\striketeam.dm"
+#include "code\modules\admin\verbs\tripAI.dm"
+#include "code\modules\admin\verbs\SDQL2\SDQL_2.dm"
+#include "code\modules\admin\verbs\SDQL2\SDQL_2_parser.dm"
+#include "code\modules\admin\verbs\SDQL2\SDQL_2_wrappers.dm"
+#include "code\modules\admin\view_variables\admin_delete.dm"
+#include "code\modules\admin\view_variables\debug_variables.dm"
+#include "code\modules\admin\view_variables\get_variables.dm"
+#include "code\modules\admin\view_variables\helpers.dm"
+#include "code\modules\admin\view_variables\mass_edit_variables.dm"
+#include "code\modules\admin\view_variables\modify_variables.dm"
+#include "code\modules\admin\view_variables\topic.dm"
+#include "code\modules\admin\view_variables\topic_list.dm"
+#include "code\modules\admin\view_variables\view_variables.dm"
+#include "code\modules\admin\view_variables\view_variables_global.dm"
+#include "code\modules\ai\_defines.dm"
+#include "code\modules\ai\ai_holder.dm"
+#include "code\modules\ai\ai_holder_combat.dm"
+#include "code\modules\ai\ai_holder_combat_unseen.dm"
+#include "code\modules\ai\ai_holder_communication.dm"
+#include "code\modules\ai\ai_holder_cooperation.dm"
+#include "code\modules\ai\ai_holder_debug.dm"
+#include "code\modules\ai\ai_holder_disabled.dm"
+#include "code\modules\ai\ai_holder_fleeing.dm"
+#include "code\modules\ai\ai_holder_follow.dm"
+#include "code\modules\ai\ai_holder_movement.dm"
+#include "code\modules\ai\ai_holder_pathfinding.dm"
+#include "code\modules\ai\ai_holder_targeting.dm"
+#include "code\modules\ai\interfaces.dm"
+#include "code\modules\ai\say_list.dm"
+#include "code\modules\ai\ai_holder_subtypes\simple_mob_ai.dm"
+#include "code\modules\ai\ai_holder_subtypes\slime_xenobio_ai.dm"
+#include "code\modules\ai\ai_holder_subtypes\xeno_alien_ai.dm"
+#include "code\modules\alarm\alarm.dm"
+#include "code\modules\alarm\alarm_handler.dm"
+#include "code\modules\alarm\atmosphere_alarm.dm"
+#include "code\modules\alarm\camera_alarm.dm"
+#include "code\modules\alarm\fire_alarm.dm"
+#include "code\modules\alarm\motion_alarm.dm"
+#include "code\modules\alarm\power_alarm.dm"
+#include "code\modules\antagonist\antagonist.dm"
+#include "code\modules\antagonist\antagonist_add.dm"
+#include "code\modules\antagonist\antagonist_create.dm"
+#include "code\modules\antagonist\antagonist_equip.dm"
+#include "code\modules\antagonist\antagonist_factions.dm"
+#include "code\modules\antagonist\antagonist_helpers.dm"
+#include "code\modules\antagonist\antagonist_objectives.dm"
+#include "code\modules\antagonist\antagonist_panel.dm"
+#include "code\modules\antagonist\antagonist_place.dm"
+#include "code\modules\antagonist\antagonist_print.dm"
+#include "code\modules\antagonist\antagonist_update.dm"
+#include "code\modules\antagonist\alien\borer.dm"
+#include "code\modules\antagonist\alien\xenomorph.dm"
+#include "code\modules\antagonist\outsider\commando.dm"
+#include "code\modules\antagonist\outsider\deathsquad.dm"
+#include "code\modules\antagonist\outsider\ert.dm"
+#include "code\modules\antagonist\outsider\mercenary.dm"
+#include "code\modules\antagonist\outsider\ninja.dm"
+#include "code\modules\antagonist\outsider\raider.dm"
+#include "code\modules\antagonist\outsider\technomancer.dm"
+#include "code\modules\antagonist\outsider\trader.dm"
+#include "code\modules\antagonist\outsider\wizard.dm"
+#include "code\modules\antagonist\station\changeling.dm"
+#include "code\modules\antagonist\station\cultist.dm"
+#include "code\modules\antagonist\station\infiltrator.dm"
+#include "code\modules\antagonist\station\loyalist.dm"
+#include "code\modules\antagonist\station\renegade.dm"
+#include "code\modules\antagonist\station\revolutionary.dm"
+#include "code\modules\antagonist\station\rogue_ai.dm"
+#include "code\modules\antagonist\station\stowaway.dm"
+#include "code\modules\antagonist\station\thug.dm"
+#include "code\modules\antagonist\station\traitor.dm"
+#include "code\modules\artifice\cursedform.dm"
+#include "code\modules\artifice\deadringer.dm"
+#include "code\modules\artifice\telecube.dm"
+#include "code\modules\assembly\assembly.dm"
+#include "code\modules\assembly\helpers.dm"
+#include "code\modules\assembly\holder.dm"
+#include "code\modules\assembly\igniter.dm"
+#include "code\modules\assembly\infrared.dm"
+#include "code\modules\assembly\mousetrap.dm"
+#include "code\modules\assembly\proximity.dm"
+#include "code\modules\assembly\shock_kit.dm"
+#include "code\modules\assembly\signaler.dm"
+#include "code\modules\assembly\timer.dm"
+#include "code\modules\assembly\voice.dm"
+#include "code\modules\asset_cache\asset_cache.dm"
+#include "code\modules\asset_cache\asset_cache_client.dm"
+#include "code\modules\asset_cache\asset_cache_item.dm"
+#include "code\modules\asset_cache\asset_list.dm"
+#include "code\modules\asset_cache\asset_list_items.dm"
+#include "code\modules\awaymissions\bluespaceartillery.dm"
+#include "code\modules\awaymissions\corpse.dm"
+#include "code\modules\awaymissions\exile.dm"
+#include "code\modules\awaymissions\gateway.dm"
+#include "code\modules\awaymissions\loot.dm"
+#include "code\modules\awaymissions\pamphlet.dm"
+#include "code\modules\awaymissions\trigger.dm"
+#include "code\modules\awaymissions\zlevel.dm"
+#include "code\modules\blob2\_defines.dm"
+#include "code\modules\blob2\blobs\base_blob.dm"
+#include "code\modules\blob2\blobs\core.dm"
+#include "code\modules\blob2\blobs\factory.dm"
+#include "code\modules\blob2\blobs\node.dm"
+#include "code\modules\blob2\blobs\normal.dm"
+#include "code\modules\blob2\blobs\resource.dm"
+#include "code\modules\blob2\blobs\shield.dm"
+#include "code\modules\blob2\overmind\overmind.dm"
+#include "code\modules\blob2\overmind\powers.dm"
+#include "code\modules\blob2\overmind\types.dm"
+#include "code\modules\blob2\overmind\types\barnacle.dm"
+#include "code\modules\blob2\overmind\types\blazing_oil.dm"
+#include "code\modules\blob2\overmind\types\classic.dm"
+#include "code\modules\blob2\overmind\types\cryogenic_goo.dm"
+#include "code\modules\blob2\overmind\types\ectoplasmic_horror.dm"
+#include "code\modules\blob2\overmind\types\electromagnetic_web.dm"
+#include "code\modules\blob2\overmind\types\energized_jelly.dm"
+#include "code\modules\blob2\overmind\types\explosive_lattice.dm"
+#include "code\modules\blob2\overmind\types\fabrication_swarm.dm"
+#include "code\modules\blob2\overmind\types\fulminant_organism.dm"
+#include "code\modules\blob2\overmind\types\fungal_bloom.dm"
+#include "code\modules\blob2\overmind\types\grey_goo.dm"
+#include "code\modules\blob2\overmind\types\pressurized_slime.dm"
+#include "code\modules\blob2\overmind\types\radioactive_ooze.dm"
+#include "code\modules\blob2\overmind\types\ravenous_macrophage.dm"
+#include "code\modules\blob2\overmind\types\reactive_spines.dm"
+#include "code\modules\blob2\overmind\types\roiling_mold.dm"
+#include "code\modules\blob2\overmind\types\shifting_fragments.dm"
+#include "code\modules\blob2\overmind\types\synchronous_mesh.dm"
+#include "code\modules\blob2\overmind\types\volatile_alluvium.dm"
+#include "code\modules\busy_space\air_traffic.dm"
+#include "code\modules\busy_space\locations.dm"
+#include "code\modules\busy_space\loremaster.dm"
+#include "code\modules\busy_space\missions.dm"
+#include "code\modules\busy_space\organizations.dm"
+#include "code\modules\busy_space\systems.dm"
+#include "code\modules\catalogue\atoms.dm"
+#include "code\modules\catalogue\catalogue_data.dm"
+#include "code\modules\catalogue\cataloguer.dm"
+#include "code\modules\catalogue\cataloguer_visuals.dm"
+#include "code\modules\client\client defines.dm"
+#include "code\modules\client\client procs.dm"
+#include "code\modules\client\movement.dm"
+#include "code\modules\client\preferences.dm"
+#include "code\modules\client\preferences_factions.dm"
+#include "code\modules\client\preferences_savefile.dm"
+#include "code\modules\client\preferences_spawnpoints.dm"
+#include "code\modules\client\preferences_toggle_procs.dm"
+#include "code\modules\client\spam_prevention.dm"
+#include "code\modules\client\ui_style.dm"
+#include "code\modules\client\preference_setup\_defines.dm"
+#include "code\modules\client\preference_setup\preference_setup.dm"
+#include "code\modules\client\preference_setup\antagonism\01_basic.dm"
+#include "code\modules\client\preference_setup\antagonism\02_candidacy.dm"
+#include "code\modules\client\preference_setup\general\01_basic.dm"
+#include "code\modules\client\preference_setup\general\02_language.dm"
+#include "code\modules\client\preference_setup\general\03_body.dm"
+#include "code\modules\client\preference_setup\general\04_equipment.dm"
+#include "code\modules\client\preference_setup\general\05_background.dm"
+#include "code\modules\client\preference_setup\general\06_flavor.dm"
+#include "code\modules\client\preference_setup\global\01_ui.dm"
+#include "code\modules\client\preference_setup\global\02_settings.dm"
+#include "code\modules\client\preference_setup\global\03_pai.dm"
+#include "code\modules\client\preference_setup\global\setting_datums.dm"
+#include "code\modules\client\preference_setup\loadout\gear_tweaks.dm"
+#include "code\modules\client\preference_setup\loadout\loadout.dm"
+#include "code\modules\client\preference_setup\loadout\loadout_accessories.dm"
+#include "code\modules\client\preference_setup\loadout\loadout_contraband.dm"
+#include "code\modules\client\preference_setup\loadout\loadout_cosmetics.dm"
+#include "code\modules\client\preference_setup\loadout\loadout_cyberware.dm"
+#include "code\modules\client\preference_setup\loadout\loadout_ears.dm"
+#include "code\modules\client\preference_setup\loadout\loadout_eyes.dm"
+#include "code\modules\client\preference_setup\loadout\loadout_general.dm"
+#include "code\modules\client\preference_setup\loadout\loadout_gloves.dm"
+#include "code\modules\client\preference_setup\loadout\loadout_head.dm"
+#include "code\modules\client\preference_setup\loadout\loadout_mask.dm"
+#include "code\modules\client\preference_setup\loadout\loadout_shoes.dm"
+#include "code\modules\client\preference_setup\loadout\loadout_smoking.dm"
+#include "code\modules\client\preference_setup\loadout\loadout_suit.dm"
+#include "code\modules\client\preference_setup\loadout\loadout_uniform.dm"
+#include "code\modules\client\preference_setup\loadout\loadout_utility.dm"
+#include "code\modules\client\preference_setup\loadout\loadout_xeno.dm"
+#include "code\modules\client\preference_setup\occupation\occupation.dm"
+#include "code\modules\client\preference_setup\skills\skills.dm"
+#include "code\modules\client\preference_setup\traits\trait_defines.dm"
+#include "code\modules\client\preference_setup\traits\traits.dm"
+#include "code\modules\client\preference_setup\volume_sliders\01_volume.dm"
+#include "code\modules\client\verbs\advanced_who.dm"
+#include "code\modules\client\verbs\ignore.dm"
+#include "code\modules\client\verbs\ooc.dm"
+#include "code\modules\client\verbs\ping.dm"
+#include "code\modules\client\verbs\who.dm"
+#include "code\modules\clothing\chameleon.dm"
+#include "code\modules\clothing\clothing.dm"
+#include "code\modules\clothing\clothing_accessories.dm"
+#include "code\modules\clothing\clothing_icons.dm"
+#include "code\modules\clothing\ears\earrings.dm"
+#include "code\modules\clothing\ears\ears.dm"
+#include "code\modules\clothing\ears\headphones.dm"
+#include "code\modules\clothing\glasses\glasses.dm"
+#include "code\modules\clothing\glasses\hud.dm"
+#include "code\modules\clothing\gloves\antagonist.dm"
+#include "code\modules\clothing\gloves\arm_guards.dm"
+#include "code\modules\clothing\gloves\boxing.dm"
+#include "code\modules\clothing\gloves\color.dm"
+#include "code\modules\clothing\gloves\gauntlets.dm"
+#include "code\modules\clothing\gloves\miscellaneous.dm"
+#include "code\modules\clothing\head\collectable.dm"
+#include "code\modules\clothing\head\flowercrowns.dm"
+#include "code\modules\clothing\head\hardhat.dm"
+#include "code\modules\clothing\head\helmet.dm"
+#include "code\modules\clothing\head\hood.dm"
+#include "code\modules\clothing\head\jobs.dm"
+#include "code\modules\clothing\head\misc.dm"
+#include "code\modules\clothing\head\misc_special.dm"
+#include "code\modules\clothing\head\pilot_helmet.dm"
+#include "code\modules\clothing\head\soft_caps.dm"
+#include "code\modules\clothing\head\solgov.dm"
+#include "code\modules\clothing\masks\boxing.dm"
+#include "code\modules\clothing\masks\breath.dm"
+#include "code\modules\clothing\masks\gasmask.dm"
+#include "code\modules\clothing\masks\hailer.dm"
+#include "code\modules\clothing\masks\miscellaneous.dm"
+#include "code\modules\clothing\masks\voice.dm"
+#include "code\modules\clothing\rings\material.dm"
+#include "code\modules\clothing\rings\rings.dm"
+#include "code\modules\clothing\shoes\boots.dm"
+#include "code\modules\clothing\shoes\colour.dm"
+#include "code\modules\clothing\shoes\leg_guards.dm"
+#include "code\modules\clothing\shoes\magboots.dm"
+#include "code\modules\clothing\shoes\miscellaneous.dm"
+#include "code\modules\clothing\shoes\xeno\teshari.dm"
+#include "code\modules\clothing\spacesuits\alien.dm"
+#include "code\modules\clothing\spacesuits\breaches.dm"
+#include "code\modules\clothing\spacesuits\miscellaneous.dm"
+#include "code\modules\clothing\spacesuits\spacesuits.dm"
+#include "code\modules\clothing\spacesuits\syndi.dm"
+#include "code\modules\clothing\spacesuits\rig\rig.dm"
+#include "code\modules\clothing\spacesuits\rig\rig_attackby.dm"
+#include "code\modules\clothing\spacesuits\rig\rig_pieces.dm"
+#include "code\modules\clothing\spacesuits\rig\rig_tgui.dm"
+#include "code\modules\clothing\spacesuits\rig\rig_verbs.dm"
+#include "code\modules\clothing\spacesuits\rig\rig_wiring.dm"
+#include "code\modules\clothing\spacesuits\rig\modules\modules.dm"
+#include "code\modules\clothing\spacesuits\rig\modules\specific\ai_container.dm"
+#include "code\modules\clothing\spacesuits\rig\modules\specific\chem_dispenser.dm"
+#include "code\modules\clothing\spacesuits\rig\modules\specific\cleaner_launcher.dm"
+#include "code\modules\clothing\spacesuits\rig\modules\specific\cloak.dm"
+#include "code\modules\clothing\spacesuits\rig\modules\specific\datajack.dm"
+#include "code\modules\clothing\spacesuits\rig\modules\specific\device.dm"
+#include "code\modules\clothing\spacesuits\rig\modules\specific\electrowarfare.dm"
+#include "code\modules\clothing\spacesuits\rig\modules\specific\grenade_launcher.dm"
+#include "code\modules\clothing\spacesuits\rig\modules\specific\inhand_fabricator.dm"
+#include "code\modules\clothing\spacesuits\rig\modules\specific\jetpack.dm"
+#include "code\modules\clothing\spacesuits\rig\modules\specific\metalfoam_launcher.dm"
+#include "code\modules\clothing\spacesuits\rig\modules\specific\mounted_gun.dm"
+#include "code\modules\clothing\spacesuits\rig\modules\specific\powersink.dm"
+#include "code\modules\clothing\spacesuits\rig\modules\specific\self_destruct.dm"
+#include "code\modules\clothing\spacesuits\rig\modules\specific\sprinter.dm"
+#include "code\modules\clothing\spacesuits\rig\modules\specific\teleporter.dm"
+#include "code\modules\clothing\spacesuits\rig\modules\specific\vision.dm"
+#include "code\modules\clothing\spacesuits\rig\modules\specific\voice.dm"
+#include "code\modules\clothing\spacesuits\rig\suits\alien.dm"
+#include "code\modules\clothing\spacesuits\rig\suits\combat.dm"
+#include "code\modules\clothing\spacesuits\rig\suits\ert.dm"
+#include "code\modules\clothing\spacesuits\rig\suits\light.dm"
+#include "code\modules\clothing\spacesuits\rig\suits\merc.dm"
+#include "code\modules\clothing\spacesuits\rig\suits\pmc.dm"
+#include "code\modules\clothing\spacesuits\rig\suits\robotics.dm"
+#include "code\modules\clothing\spacesuits\rig\suits\station.dm"
+#include "code\modules\clothing\spacesuits\void\event.dm"
+#include "code\modules\clothing\spacesuits\void\merc.dm"
+#include "code\modules\clothing\spacesuits\void\misc.dm"
+#include "code\modules\clothing\spacesuits\void\station.dm"
+#include "code\modules\clothing\spacesuits\void\void.dm"
+#include "code\modules\clothing\spacesuits\void\wizard.dm"
+#include "code\modules\clothing\spacesuits\void\zaddat.dm"
+#include "code\modules\clothing\suits\armor.dm"
+#include "code\modules\clothing\suits\bio.dm"
+#include "code\modules\clothing\suits\hooded.dm"
+#include "code\modules\clothing\suits\jobs.dm"
+#include "code\modules\clothing\suits\labcoat.dm"
+#include "code\modules\clothing\suits\miscellaneous.dm"
+#include "code\modules\clothing\suits\solgov.dm"
+#include "code\modules\clothing\suits\storage.dm"
+#include "code\modules\clothing\suits\utility.dm"
+#include "code\modules\clothing\suits\wiz_robe.dm"
+#include "code\modules\clothing\suits\aliens\tajara.dm"
+#include "code\modules\clothing\suits\aliens\teshari.dm"
+#include "code\modules\clothing\suits\aliens\unathi.dm"
+#include "code\modules\clothing\suits\aliens\vox.dm"
+#include "code\modules\clothing\under\color.dm"
+#include "code\modules\clothing\under\costume.dm"
+#include "code\modules\clothing\under\miscellaneous.dm"
+#include "code\modules\clothing\under\pants.dm"
+#include "code\modules\clothing\under\shorts.dm"
+#include "code\modules\clothing\under\solgov.dm"
+#include "code\modules\clothing\under\syndicate.dm"
+#include "code\modules\clothing\under\accessories\accessory.dm"
+#include "code\modules\clothing\under\accessories\armband.dm"
+#include "code\modules\clothing\under\accessories\armor.dm"
+#include "code\modules\clothing\under\accessories\badges.dm"
+#include "code\modules\clothing\under\accessories\clothing.dm"
+#include "code\modules\clothing\under\accessories\holster.dm"
+#include "code\modules\clothing\under\accessories\lockets.dm"
+#include "code\modules\clothing\under\accessories\permits.dm"
+#include "code\modules\clothing\under\accessories\storage.dm"
+#include "code\modules\clothing\under\accessories\torch.dm"
+#include "code\modules\clothing\under\accessories\crafted\poncho.dm"
+#include "code\modules\clothing\under\accessories\temperature\poncho.dm"
+#include "code\modules\clothing\under\jobs\civilian.dm"
+#include "code\modules\clothing\under\jobs\engineering.dm"
+#include "code\modules\clothing\under\jobs\medsci.dm"
+#include "code\modules\clothing\under\jobs\security.dm"
+#include "code\modules\clothing\under\xenos\teshari.dm"
+#include "code\modules\clothing\under\xenos\vox.dm"
+#include "code\modules\compass\_compass.dm"
+#include "code\modules\compass\compass_holder.dm"
+#include "code\modules\compass\compass_waypoint.dm"
+#include "code\modules\compass\~compass.dm"
+#include "code\modules\customitems\item_spawning.dm"
+#include "code\modules\detectivework\footprints.dm"
+#include "code\modules\detectivework\forensics.dm"
+#include "code\modules\detectivework\microscope\dnascanner.dm"
+#include "code\modules\detectivework\microscope\microscope.dm"
+#include "code\modules\detectivework\tools\crimekit.dm"
+#include "code\modules\detectivework\tools\evidencebag.dm"
+#include "code\modules\detectivework\tools\luminol.dm"
+#include "code\modules\detectivework\tools\rag.dm"
+#include "code\modules\detectivework\tools\sample_kits.dm"
+#include "code\modules\detectivework\tools\scanner.dm"
+#include "code\modules\detectivework\tools\storage.dm"
+#include "code\modules\detectivework\tools\swabs.dm"
+#include "code\modules\detectivework\tools\uvlight.dm"
+#include "code\modules\economy\Accounts.dm"
+#include "code\modules\economy\Accounts_DB.dm"
+#include "code\modules\economy\ATM.dm"
+#include "code\modules\economy\cash.dm"
+#include "code\modules\economy\cash_register.dm"
+#include "code\modules\economy\coins.dm"
+#include "code\modules\economy\economy_misc.dm"
+#include "code\modules\economy\EFTPOS.dm"
+#include "code\modules\economy\Events.dm"
+#include "code\modules\economy\Events_Mundane.dm"
+#include "code\modules\economy\lorenews.dm"
+#include "code\modules\economy\mint.dm"
+#include "code\modules\economy\money_bag.dm"
+#include "code\modules\economy\price_list.dm"
+#include "code\modules\economy\retail_scanner.dm"
+#include "code\modules\economy\TradeDestinations.dm"
+#include "code\modules\economy\vending.dm"
+#include "code\modules\economy\vending_machines.dm"
+#include "code\modules\effects\vfx\_effect_system.dm"
+#include "code\modules\effects\vfx\explosion.dm"
+#include "code\modules\effects\vfx\explosion_particles.dm"
+#include "code\modules\effects\vfx\ion_trail.dm"
+#include "code\modules\effects\vfx\smoke.dm"
+#include "code\modules\effects\vfx\sparks.dm"
+#include "code\modules\effects\vfx\steam.dm"
+#include "code\modules\emotes\emote_define.dm"
+#include "code\modules\emotes\emote_mob.dm"
+#include "code\modules\emotes\definitions\_mob.dm"
+#include "code\modules\emotes\definitions\_species.dm"
+#include "code\modules\emotes\definitions\audible.dm"
+#include "code\modules\emotes\definitions\audible_cough.dm"
+#include "code\modules\emotes\definitions\audible_scream.dm"
+#include "code\modules\emotes\definitions\audible_slap.dm"
+#include "code\modules\emotes\definitions\audible_snap.dm"
+#include "code\modules\emotes\definitions\audible_sneeze.dm"
+#include "code\modules\emotes\definitions\audible_whistle.dm"
+#include "code\modules\emotes\definitions\exertion.dm"
+#include "code\modules\emotes\definitions\human.dm"
+#include "code\modules\emotes\definitions\slimes.dm"
+#include "code\modules\emotes\definitions\synthetics.dm"
+#include "code\modules\emotes\definitions\visible.dm"
+#include "code\modules\emotes\definitions\visible_animated.dm"
+#include "code\modules\emotes\definitions\visible_vomit.dm"
+#include "code\modules\error_handler\_defines.dm"
+#include "code\modules\error_handler\error_handler.dm"
+#include "code\modules\error_handler\error_viewer.dm"
+#include "code\modules\error_handler\~defines.dm"
+#include "code\modules\events\apc_damage.dm"
+#include "code\modules\events\atmos_leak.dm"
+#include "code\modules\events\aurora_caelus.dm"
+#include "code\modules\events\blob.dm"
+#include "code\modules\events\brand_intelligence.dm"
+#include "code\modules\events\camera_damage.dm"
+#include "code\modules\events\canister_leak.dm"
+#include "code\modules\events\carp_migration.dm"
+#include "code\modules\events\comms_blackout.dm"
+#include "code\modules\events\communications_blackout.dm"
+#include "code\modules\events\dust.dm"
+#include "code\modules\events\electrical_storm.dm"
+#include "code\modules\events\event.dm"
+#include "code\modules\events\event_container.dm"
+#include "code\modules\events\event_dynamic.dm"
+#include "code\modules\events\event_manager.dm"
+#include "code\modules\events\gravity.dm"
+#include "code\modules\events\grid_check.dm"
+#include "code\modules\events\infestation.dm"
+#include "code\modules\events\ion_storm.dm"
+#include "code\modules\events\meteors.dm"
+#include "code\modules\events\money_hacker.dm"
+#include "code\modules\events\money_lotto.dm"
+#include "code\modules\events\money_spam.dm"
+#include "code\modules\events\prison_break.dm"
+#include "code\modules\events\radiation_storm.dm"
+#include "code\modules\events\random_antagonist.dm"
+#include "code\modules\events\rogue_drones.dm"
+#include "code\modules\events\shipping_error.dm"
+#include "code\modules\events\solar_storm.dm"
+#include "code\modules\events\space_ninja.dm"
+#include "code\modules\events\spacevine.dm"
+#include "code\modules\events\spider_infestation.dm"
+#include "code\modules\events\spontaneous_appendicitis.dm"
+#include "code\modules\events\wallrot.dm"
+#include "code\modules\examine\examine.dm"
+#include "code\modules\examine\stat_icons.dm"
+#include "code\modules\examine\descriptions\armor.dm"
+#include "code\modules\examine\descriptions\atmospherics.dm"
+#include "code\modules\examine\descriptions\containers.dm"
+#include "code\modules\examine\descriptions\devices.dm"
+#include "code\modules\examine\descriptions\engineering.dm"
+#include "code\modules\examine\descriptions\machines.dm"
+#include "code\modules\examine\descriptions\medical.dm"
+#include "code\modules\examine\descriptions\mobs.dm"
+#include "code\modules\examine\descriptions\paperwork.dm"
+#include "code\modules\examine\descriptions\stacks.dm"
+#include "code\modules\examine\descriptions\structures.dm"
+#include "code\modules\examine\descriptions\telecomms.dm"
+#include "code\modules\examine\descriptions\turfs.dm"
+#include "code\modules\examine\descriptions\weapons.dm"
+#include "code\modules\ext_scripts\irc.dm"
+#include "code\modules\ext_scripts\python.dm"
+#include "code\modules\fishing\fishing.dm"
+#include "code\modules\fishing\fishing_net.dm"
+#include "code\modules\fishing\fishing_rod.dm"
+#include "code\modules\flufftext\Dreaming.dm"
+#include "code\modules\flufftext\Hallucination.dm"
+#include "code\modules\flufftext\look_up.dm"
+#include "code\modules\food\food.dm"
+#include "code\modules\food\recipe.dm"
+#include "code\modules\food\recipe_dump.dm"
+#include "code\modules\food\recipes_fryer.dm"
+#include "code\modules\food\recipes_grill.dm"
+#include "code\modules\food\recipes_microwave.dm"
+#include "code\modules\food\recipes_oven.dm"
+#include "code\modules\food\drinkingglass\drinkingglass.dm"
+#include "code\modules\food\drinkingglass\extras.dm"
+#include "code\modules\food\drinkingglass\glass_boxes.dm"
+#include "code\modules\food\drinkingglass\glass_types.dm"
+#include "code\modules\food\drinkingglass\metaglass.dm"
+#include "code\modules\food\drinkingglass\mugs.dm"
+#include "code\modules\food\drinkingglass\shaker.dm"
+#include "code\modules\food\food\cans.dm"
+#include "code\modules\food\food\condiment.dm"
+#include "code\modules\food\food\drinks.dm"
+#include "code\modules\food\food\lunch.dm"
+#include "code\modules\food\food\sandwich.dm"
+#include "code\modules\food\food\snacks.dm"
+#include "code\modules\food\food\thecake.dm"
+#include "code\modules\food\food\drinks\bottle.dm"
+#include "code\modules\food\food\drinks\cup.dm"
+#include "code\modules\food\food\drinks\drinkingglass.dm"
+#include "code\modules\food\food\drinks\jar.dm"
+#include "code\modules\food\food\drinks\bottle\robot.dm"
+#include "code\modules\food\food\snacks\meat.dm"
+#include "code\modules\food\glass\bottle.dm"
+#include "code\modules\food\glass\bottle\robot.dm"
+#include "code\modules\food\kitchen\gibber.dm"
+#include "code\modules\food\kitchen\icecream.dm"
+#include "code\modules\food\kitchen\microwave.dm"
+#include "code\modules\food\kitchen\cooking_machines\_appliance.dm"
+#include "code\modules\food\kitchen\cooking_machines\_cooker.dm"
+#include "code\modules\food\kitchen\cooking_machines\_cooker_output.dm"
+#include "code\modules\food\kitchen\cooking_machines\_mixer.dm"
+#include "code\modules\food\kitchen\cooking_machines\candy.dm"
+#include "code\modules\food\kitchen\cooking_machines\cereal.dm"
+#include "code\modules\food\kitchen\cooking_machines\container.dm"
+#include "code\modules\food\kitchen\cooking_machines\fryer.dm"
+#include "code\modules\food\kitchen\cooking_machines\grill.dm"
+#include "code\modules\food\kitchen\cooking_machines\oven.dm"
+#include "code\modules\food\kitchen\smartfridge\drying_rack.dm"
+#include "code\modules\food\kitchen\smartfridge\engineering.dm"
+#include "code\modules\food\kitchen\smartfridge\hydroponics.dm"
+#include "code\modules\food\kitchen\smartfridge\medical.dm"
+#include "code\modules\food\kitchen\smartfridge\smartfridge.dm"
+#include "code\modules\gamemaster\defines.dm"
+#include "code\modules\gamemaster\event2\event.dm"
+#include "code\modules\gamemaster\event2\meta.dm"
+#include "code\modules\gamemaster\event2\events\ghost_pod_spawner.dm"
+#include "code\modules\gamemaster\event2\events\mob_spawning.dm"
+#include "code\modules\gamemaster\event2\events\cargo\shipping_error.dm"
+#include "code\modules\gamemaster\event2\events\command\manifest_malfunction.dm"
+#include "code\modules\gamemaster\event2\events\command\money_hacker.dm"
+#include "code\modules\gamemaster\event2\events\command\raise_funds.dm"
+#include "code\modules\gamemaster\event2\events\engineering\airlock_failure.dm"
+#include "code\modules\gamemaster\event2\events\engineering\blob.dm"
+#include "code\modules\gamemaster\event2\events\engineering\brand_intelligence.dm"
+#include "code\modules\gamemaster\event2\events\engineering\camera_damage.dm"
+#include "code\modules\gamemaster\event2\events\engineering\canister_leak.dm"
+#include "code\modules\gamemaster\event2\events\engineering\dust.dm"
+#include "code\modules\gamemaster\event2\events\engineering\gas_leak.dm"
+#include "code\modules\gamemaster\event2\events\engineering\grid_check.dm"
+#include "code\modules\gamemaster\event2\events\engineering\space_meteor_defense.dm"
+#include "code\modules\gamemaster\event2\events\engineering\spacevine.dm"
+#include "code\modules\gamemaster\event2\events\engineering\wallrot.dm"
+#include "code\modules\gamemaster\event2\events\engineering\window_break.dm"
+#include "code\modules\gamemaster\event2\events\everyone\comms_blackout.dm"
+#include "code\modules\gamemaster\event2\events\everyone\electrical_fault.dm"
+#include "code\modules\gamemaster\event2\events\everyone\gravity.dm"
+#include "code\modules\gamemaster\event2\events\everyone\infestation.dm"
+#include "code\modules\gamemaster\event2\events\everyone\pda_spam.dm"
+#include "code\modules\gamemaster\event2\events\everyone\radiation_storm.dm"
+#include "code\modules\gamemaster\event2\events\everyone\random_antag.dm"
+#include "code\modules\gamemaster\event2\events\everyone\solar_storm.dm"
+#include "code\modules\gamemaster\event2\events\everyone\sudden_weather_shift.dm"
+#include "code\modules\gamemaster\event2\events\legacy\legacy.dm"
+#include "code\modules\gamemaster\event2\events\medical\appendicitis.dm"
+#include "code\modules\gamemaster\event2\events\medical\virus.dm"
+#include "code\modules\gamemaster\event2\events\security\carp_migration.dm"
+#include "code\modules\gamemaster\event2\events\security\drill_announcement.dm"
+#include "code\modules\gamemaster\event2\events\security\prison_break.dm"
+#include "code\modules\gamemaster\event2\events\security\rogue_drones.dm"
+#include "code\modules\gamemaster\event2\events\security\security_advisement.dm"
+#include "code\modules\gamemaster\event2\events\security\spider_infestation.dm"
+#include "code\modules\gamemaster\event2\events\security\stowaway.dm"
+#include "code\modules\gamemaster\event2\events\security\surprise_carp.dm"
+#include "code\modules\gamemaster\event2\events\security\swarm_boarder.dm"
+#include "code\modules\gamemaster\event2\events\synthetic\ion_storm.dm"
+#include "code\modules\games\cah.dm"
+#include "code\modules\games\cah_black_cards.dm"
+#include "code\modules\games\cah_white_cards.dm"
+#include "code\modules\games\cardemon.dm"
+#include "code\modules\games\cards.dm"
+#include "code\modules\games\dice.dm"
+#include "code\modules\games\spaceball_cards.dm"
+#include "code\modules\games\tarot.dm"
+#include "code\modules\genetics\side_effects.dm"
+#include "code\modules\ghosttrap\trap.dm"
+#include "code\modules\holodeck\HolodeckControl.dm"
+#include "code\modules\holodeck\HolodeckObjects.dm"
+#include "code\modules\holodeck\HolodeckPrograms.dm"
+#include "code\modules\holomap\generate_holomap.dm"
+#include "code\modules\holomap\holomap_area.dm"
+#include "code\modules\holomap\holomap_datum.dm"
+#include "code\modules\holomap\mapper.dm"
+#include "code\modules\holomap\station_holomap.dm"
+#include "code\modules\hydroponics\_hydro_setup.dm"
+#include "code\modules\hydroponics\grown.dm"
+#include "code\modules\hydroponics\grown_inedible.dm"
+#include "code\modules\hydroponics\grown_predefined.dm"
+#include "code\modules\hydroponics\grown_sif.dm"
+#include "code\modules\hydroponics\seed.dm"
+#include "code\modules\hydroponics\seed_controller.dm"
+#include "code\modules\hydroponics\seed_gene_mut.dm"
+#include "code\modules\hydroponics\seed_machines.dm"
+#include "code\modules\hydroponics\seed_mobs.dm"
+#include "code\modules\hydroponics\seed_packets.dm"
+#include "code\modules\hydroponics\seed_storage.dm"
+#include "code\modules\hydroponics\beekeeping\beehive.dm"
+#include "code\modules\hydroponics\seedtypes\amauri.dm"
+#include "code\modules\hydroponics\seedtypes\ambrosia.dm"
+#include "code\modules\hydroponics\seedtypes\apples.dm"
+#include "code\modules\hydroponics\seedtypes\banana.dm"
+#include "code\modules\hydroponics\seedtypes\berries.dm"
+#include "code\modules\hydroponics\seedtypes\cabbage.dm"
+#include "code\modules\hydroponics\seedtypes\carrots.dm"
+#include "code\modules\hydroponics\seedtypes\celery.dm"
+#include "code\modules\hydroponics\seedtypes\cherries.dm"
+#include "code\modules\hydroponics\seedtypes\chili.dm"
+#include "code\modules\hydroponics\seedtypes\citrus.dm"
+#include "code\modules\hydroponics\seedtypes\cocoa.dm"
+#include "code\modules\hydroponics\seedtypes\corn.dm"
+#include "code\modules\hydroponics\seedtypes\diona.dm"
+#include "code\modules\hydroponics\seedtypes\durian.dm"
+#include "code\modules\hydroponics\seedtypes\dyn.dm"
+#include "code\modules\hydroponics\seedtypes\eggplant.dm"
+#include "code\modules\hydroponics\seedtypes\eki.dm"
+#include "code\modules\hydroponics\seedtypes\flowers.dm"
+#include "code\modules\hydroponics\seedtypes\gelthi.dm"
+#include "code\modules\hydroponics\seedtypes\grapes.dm"
+#include "code\modules\hydroponics\seedtypes\grass.dm"
+#include "code\modules\hydroponics\seedtypes\guali.dm"
+#include "code\modules\hydroponics\seedtypes\guami.dm"
+#include "code\modules\hydroponics\seedtypes\jurlmah.dm"
+#include "code\modules\hydroponics\seedtypes\kirani.dm"
+#include "code\modules\hydroponics\seedtypes\kudzu.dm"
+#include "code\modules\hydroponics\seedtypes\lettuce.dm"
+#include "code\modules\hydroponics\seedtypes\malanitear.dm"
+#include "code\modules\hydroponics\seedtypes\mushrooms.dm"
+#include "code\modules\hydroponics\seedtypes\nettles.dm"
+#include "code\modules\hydroponics\seedtypes\nutmeg.dm"
+#include "code\modules\hydroponics\seedtypes\onion.dm"
+#include "code\modules\hydroponics\seedtypes\peanuts.dm"
+#include "code\modules\hydroponics\seedtypes\pineapple.dm"
+#include "code\modules\hydroponics\seedtypes\potato.dm"
+#include "code\modules\hydroponics\seedtypes\pumpkin.dm"
+#include "code\modules\hydroponics\seedtypes\qalozyn.dm"
+#include "code\modules\hydroponics\seedtypes\qazal.dm"
+#include "code\modules\hydroponics\seedtypes\qlort.dm"
+#include "code\modules\hydroponics\seedtypes\rhubarb.dm"
+#include "code\modules\hydroponics\seedtypes\rice.dm"
+#include "code\modules\hydroponics\seedtypes\selemhand.dm"
+#include "code\modules\hydroponics\seedtypes\soybean.dm"
+#include "code\modules\hydroponics\seedtypes\sugarcane.dm"
+#include "code\modules\hydroponics\seedtypes\surik.dm"
+#include "code\modules\hydroponics\seedtypes\telriis.dm"
+#include "code\modules\hydroponics\seedtypes\thaadra.dm"
+#include "code\modules\hydroponics\seedtypes\tobacco.dm"
+#include "code\modules\hydroponics\seedtypes\tomatoes.dm"
+#include "code\modules\hydroponics\seedtypes\vale.dm"
+#include "code\modules\hydroponics\seedtypes\vanilla.dm"
+#include "code\modules\hydroponics\seedtypes\wabback.dm"
+#include "code\modules\hydroponics\seedtypes\watermelon.dm"
+#include "code\modules\hydroponics\seedtypes\weeds.dm"
+#include "code\modules\hydroponics\seedtypes\wheat.dm"
+#include "code\modules\hydroponics\seedtypes\whitebeets.dm"
+#include "code\modules\hydroponics\seedtypes\wurmwoad.dm"
+#include "code\modules\hydroponics\seedtypes\xeno.dm"
+#include "code\modules\hydroponics\spreading\spreading.dm"
+#include "code\modules\hydroponics\spreading\spreading_growth.dm"
+#include "code\modules\hydroponics\spreading\spreading_response.dm"
+#include "code\modules\hydroponics\trays\tray.dm"
+#include "code\modules\hydroponics\trays\tray_process.dm"
+#include "code\modules\hydroponics\trays\tray_reagents.dm"
+#include "code\modules\hydroponics\trays\tray_soil.dm"
+#include "code\modules\hydroponics\trays\tray_tools.dm"
+#include "code\modules\hydroponics\trays\tray_update_icons.dm"
+#include "code\modules\identification\identification.dm"
+#include "code\modules\identification\item_procs.dm"
+#include "code\modules\integrated_electronics\_defines.dm"
+#include "code\modules\integrated_electronics\core\assemblies.dm"
+#include "code\modules\integrated_electronics\core\detailer.dm"
+#include "code\modules\integrated_electronics\core\helpers.dm"
+#include "code\modules\integrated_electronics\core\integrated_circuit.dm"
+#include "code\modules\integrated_electronics\core\pins.dm"
+#include "code\modules\integrated_electronics\core\printer.dm"
+#include "code\modules\integrated_electronics\core\tools.dm"
+#include "code\modules\integrated_electronics\core\assemblies\clothing.dm"
+#include "code\modules\integrated_electronics\core\assemblies\device.dm"
+#include "code\modules\integrated_electronics\core\assemblies\generic.dm"
+#include "code\modules\integrated_electronics\core\assemblies\implant.dm"
+#include "code\modules\integrated_electronics\core\special_pins\boolean_pin.dm"
+#include "code\modules\integrated_electronics\core\special_pins\char_pin.dm"
+#include "code\modules\integrated_electronics\core\special_pins\color_pin.dm"
+#include "code\modules\integrated_electronics\core\special_pins\dir_pin.dm"
+#include "code\modules\integrated_electronics\core\special_pins\list_pin.dm"
+#include "code\modules\integrated_electronics\core\special_pins\number_pin.dm"
+#include "code\modules\integrated_electronics\core\special_pins\ref_pin.dm"
+#include "code\modules\integrated_electronics\core\special_pins\string_pin.dm"
+#include "code\modules\integrated_electronics\passive\passive.dm"
+#include "code\modules\integrated_electronics\passive\power.dm"
+#include "code\modules\integrated_electronics\subtypes\arithmetic.dm"
+#include "code\modules\integrated_electronics\subtypes\built_in.dm"
+#include "code\modules\integrated_electronics\subtypes\converters.dm"
+#include "code\modules\integrated_electronics\subtypes\data_transfer.dm"
+#include "code\modules\integrated_electronics\subtypes\input.dm"
+#include "code\modules\integrated_electronics\subtypes\lists.dm"
+#include "code\modules\integrated_electronics\subtypes\logic.dm"
+#include "code\modules\integrated_electronics\subtypes\manipulation.dm"
+#include "code\modules\integrated_electronics\subtypes\memory.dm"
+#include "code\modules\integrated_electronics\subtypes\output.dm"
+#include "code\modules\integrated_electronics\subtypes\power.dm"
+#include "code\modules\integrated_electronics\subtypes\reagents.dm"
+#include "code\modules\integrated_electronics\subtypes\smart.dm"
+#include "code\modules\integrated_electronics\subtypes\time.dm"
+#include "code\modules\integrated_electronics\subtypes\trig.dm"
+#include "code\modules\integrated_electronics\~defines\~defines.dm"
+#include "code\modules\keybindings\bindings_atom.dm"
+#include "code\modules\keybindings\bindings_movekeys.dm"
+#include "code\modules\keybindings\setup.dm"
+#include "code\modules\library\lib_items.dm"
+#include "code\modules\library\lib_machines.dm"
+#include "code\modules\library\lib_readme.dm"
+#include "code\modules\library\hardcode_library\_library.dm"
+#include "code\modules\library\hardcode_library\fiction\APsychonaut.dm"
+#include "code\modules\library\hardcode_library\fiction\battlefieldcommander.dm"
+#include "code\modules\library\hardcode_library\fiction\PortedBooks.dm"
+#include "code\modules\library\hardcode_library\fiction\schnayy.dm"
+#include "code\modules\library\hardcode_library\non-fiction\PortedBooks.dm"
+#include "code\modules\library\hardcode_library\reference\PortedBooks.dm"
+#include "code\modules\library\hardcode_library\reference\Schnayy.dm"
+#include "code\modules\library\hardcode_library\religious\PortedBooks.dm"
+#include "code\modules\lighting\lighting_area.dm"
+#include "code\modules\lighting\lighting_atom.dm"
+#include "code\modules\lighting\lighting_corner.dm"
+#include "code\modules\lighting\lighting_overlay.dm"
+#include "code\modules\lighting\lighting_setup.dm"
+#include "code\modules\lighting\lighting_source.dm"
+#include "code\modules\lighting\lighting_turf.dm"
+#include "code\modules\looking_glass\lg_area.dm"
+#include "code\modules\looking_glass\lg_console.dm"
+#include "code\modules\looking_glass\lg_imageholder.dm"
+#include "code\modules\looking_glass\lg_turfs.dm"
+#include "code\modules\lore_codex\codex.dm"
+#include "code\modules\lore_codex\codex_tree.dm"
+#include "code\modules\lore_codex\pages.dm"
+#include "code\modules\lore_codex\legal_code_data\corporate_regulations.dm"
+#include "code\modules\lore_codex\legal_code_data\main.dm"
+#include "code\modules\lore_codex\legal_code_data\sif_law.dm"
+#include "code\modules\lore_codex\legal_code_data\sop.dm"
+#include "code\modules\lore_codex\lore_data\important_locations.dm"
+#include "code\modules\lore_codex\lore_data\main.dm"
+#include "code\modules\lore_codex\lore_data\orgs.dm"
+#include "code\modules\lore_codex\lore_data\political_parties.dm"
+#include "code\modules\lore_codex\lore_data\species.dm"
+#include "code\modules\lore_codex\news_data\main.dm"
+#include "code\modules\lore_codex\robutt_data\bybrand.dm"
+#include "code\modules\lore_codex\robutt_data\main_robutts.dm"
+#include "code\modules\lore_codex\robutt_data\more.dm"
+#include "code\modules\maps\tg\dmm_suite.dm"
+#include "code\modules\maps\tg\map_template.dm"
+#include "code\modules\maps\tg\reader.dm"
+#include "code\modules\materials\fifty_spawner.dm"
+#include "code\modules\materials\fifty_spawner_mats.dm"
+#include "code\modules\materials\material_synth.dm"
+#include "code\modules\materials\materials\_materials.dm"
+#include "code\modules\materials\materials\alien_alloy.dm"
+#include "code\modules\materials\materials\cult.dm"
+#include "code\modules\materials\materials\gems.dm"
+#include "code\modules\materials\materials\glass.dm"
+#include "code\modules\materials\materials\holographic.dm"
+#include "code\modules\materials\materials\plastic.dm"
+#include "code\modules\materials\materials\snow.dm"
+#include "code\modules\materials\materials\stone.dm"
+#include "code\modules\materials\materials\supermatter.dm"
+#include "code\modules\materials\materials\metals\hull.dm"
+#include "code\modules\materials\materials\metals\metals.dm"
+#include "code\modules\materials\materials\metals\plasteel.dm"
+#include "code\modules\materials\materials\metals\steel.dm"
+#include "code\modules\materials\materials\organic\animal_products.dm"
+#include "code\modules\materials\materials\organic\cloth.dm"
+#include "code\modules\materials\materials\organic\grass.dm"
+#include "code\modules\materials\materials\organic\leather.dm"
+#include "code\modules\materials\materials\organic\resin.dm"
+#include "code\modules\materials\materials\organic\wood.dm"
+#include "code\modules\materials\sheets\_sheets.dm"
+#include "code\modules\materials\sheets\gems.dm"
+#include "code\modules\materials\sheets\glass.dm"
+#include "code\modules\materials\sheets\plastic.dm"
+#include "code\modules\materials\sheets\snow.dm"
+#include "code\modules\materials\sheets\stone.dm"
+#include "code\modules\materials\sheets\supermatter.dm"
+#include "code\modules\materials\sheets\metals\hull.dm"
+#include "code\modules\materials\sheets\metals\metal.dm"
+#include "code\modules\materials\sheets\metals\rods.dm"
+#include "code\modules\materials\sheets\organic\animal_products.dm"
+#include "code\modules\materials\sheets\organic\resin.dm"
+#include "code\modules\materials\sheets\organic\textiles.dm"
+#include "code\modules\materials\sheets\organic\wood.dm"
+#include "code\modules\materials\sheets\organic\tanning\hide.dm"
+#include "code\modules\materials\sheets\organic\tanning\hide_hairless.dm"
+#include "code\modules\materials\sheets\organic\tanning\leather_wet.dm"
+#include "code\modules\materials\sheets\organic\tanning\tanning_rack.dm"
+#include "code\modules\metric\activity.dm"
+#include "code\modules\metric\count.dm"
+#include "code\modules\metric\department.dm"
+#include "code\modules\metric\metric.dm"
+#include "code\modules\mining\abandonedcrates.dm"
+#include "code\modules\mining\alloys.dm"
+#include "code\modules\mining\fulton.dm"
+#include "code\modules\mining\mine_items.dm"
+#include "code\modules\mining\mine_outcrops.dm"
+#include "code\modules\mining\mine_turfs.dm"
+#include "code\modules\mining\mineral_effect.dm"
+#include "code\modules\mining\ore.dm"
+#include "code\modules\mining\ore_box.dm"
+#include "code\modules\mining\ore_datum.dm"
+#include "code\modules\mining\drilling\drill.dm"
+#include "code\modules\mining\drilling\scanner.dm"
+#include "code\modules\mining\machinery\machine_input_output_plates.dm"
+#include "code\modules\mining\machinery\machine_processing.dm"
+#include "code\modules\mining\machinery\machine_stacking.dm"
+#include "code\modules\mining\machinery\machine_unloading.dm"
+#include "code\modules\mining\ore_redemption_machine\construction.dm"
+#include "code\modules\mining\ore_redemption_machine\equipment_vendor.dm"
+#include "code\modules\mining\ore_redemption_machine\mine_point_items.dm"
+#include "code\modules\mining\ore_redemption_machine\survey_vendor.dm"
+#include "code\modules\mob\animations.dm"
+#include "code\modules\mob\death.dm"
+#include "code\modules\mob\emote.dm"
+#include "code\modules\mob\gender.dm"
+#include "code\modules\mob\hear_say.dm"
+#include "code\modules\mob\holder.dm"
+#include "code\modules\mob\inventory.dm"
+#include "code\modules\mob\login.dm"
+#include "code\modules\mob\logout.dm"
+#include "code\modules\mob\mob.dm"
+#include "code\modules\mob\mob_defines.dm"
+#include "code\modules\mob\mob_grab.dm"
+#include "code\modules\mob\mob_grab_specials.dm"
+#include "code\modules\mob\mob_helpers.dm"
+#include "code\modules\mob\mob_movement.dm"
+#include "code\modules\mob\mob_planes.dm"
+#include "code\modules\mob\mob_transformation_simple.dm"
+#include "code\modules\mob\say.dm"
+#include "code\modules\mob\skillset.dm"
+#include "code\modules\mob\transform_procs.dm"
+#include "code\modules\mob\update_icons.dm"
+#include "code\modules\mob\_modifiers\aura.dm"
+#include "code\modules\mob\_modifiers\changeling.dm"
+#include "code\modules\mob\_modifiers\cloning.dm"
+#include "code\modules\mob\_modifiers\feysight.dm"
+#include "code\modules\mob\_modifiers\fire.dm"
+#include "code\modules\mob\_modifiers\medical.dm"
+#include "code\modules\mob\_modifiers\modifiers.dm"
+#include "code\modules\mob\_modifiers\modifiers_misc.dm"
+#include "code\modules\mob\_modifiers\traits.dm"
+#include "code\modules\mob\_modifiers\traits_phobias.dm"
+#include "code\modules\mob\_modifiers\unholy.dm"
+#include "code\modules\mob\dead\corpse.dm"
+#include "code\modules\mob\dead\death.dm"
+#include "code\modules\mob\dead\observer\login.dm"
+#include "code\modules\mob\dead\observer\logout.dm"
+#include "code\modules\mob\dead\observer\observer.dm"
+#include "code\modules\mob\dead\observer\say.dm"
+#include "code\modules\mob\freelook\chunk.dm"
+#include "code\modules\mob\freelook\eye.dm"
+#include "code\modules\mob\freelook\life.dm"
+#include "code\modules\mob\freelook\update_triggers.dm"
+#include "code\modules\mob\freelook\visualnet.dm"
+#include "code\modules\mob\freelook\ai\cameranet.dm"
+#include "code\modules\mob\freelook\ai\chunk.dm"
+#include "code\modules\mob\freelook\ai\eye.dm"
+#include "code\modules\mob\freelook\ai\update_triggers.dm"
+#include "code\modules\mob\freelook\mask\chunk.dm"
+#include "code\modules\mob\freelook\mask\cultnet.dm"
+#include "code\modules\mob\freelook\mask\eye.dm"
+#include "code\modules\mob\freelook\mask\update_triggers.dm"
+#include "code\modules\mob\language\generic.dm"
+#include "code\modules\mob\language\language.dm"
+#include "code\modules\mob\language\monkey.dm"
+#include "code\modules\mob\language\outsider.dm"
+#include "code\modules\mob\language\station.dm"
+#include "code\modules\mob\language\synthetic.dm"
+#include "code\modules\mob\living\autohiss.dm"
+#include "code\modules\mob\living\butchering.dm"
+#include "code\modules\mob\living\damage_procs.dm"
+#include "code\modules\mob\living\death.dm"
+#include "code\modules\mob\living\default_language.dm"
+#include "code\modules\mob\living\inventory.dm"
+#include "code\modules\mob\living\life.dm"
+#include "code\modules\mob\living\living.dm"
+#include "code\modules\mob\living\living_defense.dm"
+#include "code\modules\mob\living\living_defines.dm"
+#include "code\modules\mob\living\living_movement.dm"
+#include "code\modules\mob\living\living_powers.dm"
+#include "code\modules\mob\living\login.dm"
+#include "code\modules\mob\living\logout.dm"
+#include "code\modules\mob\living\organs.dm"
+#include "code\modules\mob\living\riding.dm"
+#include "code\modules\mob\living\say.dm"
+#include "code\modules\mob\living\status_indicators.dm"
+#include "code\modules\mob\living\bot\bot.dm"
+#include "code\modules\mob\living\bot\cleanbot.dm"
+#include "code\modules\mob\living\bot\ed209bot.dm"
+#include "code\modules\mob\living\bot\edCLNbot.dm"
+#include "code\modules\mob\living\bot\farmbot.dm"
+#include "code\modules\mob\living\bot\floorbot.dm"
+#include "code\modules\mob\living\bot\medbot.dm"
+#include "code\modules\mob\living\bot\mulebot.dm"
+#include "code\modules\mob\living\bot\secbot.dm"
+#include "code\modules\mob\living\bot\SLed209bot.dm"
+#include "code\modules\mob\living\carbon\breathe.dm"
+#include "code\modules\mob\living\carbon\carbon.dm"
+#include "code\modules\mob\living\carbon\carbon_defense.dm"
+#include "code\modules\mob\living\carbon\carbon_defines.dm"
+#include "code\modules\mob\living\carbon\carbon_powers.dm"
+#include "code\modules\mob\living\carbon\give.dm"
+#include "code\modules\mob\living\carbon\resist.dm"
+#include "code\modules\mob\living\carbon\shock.dm"
+#include "code\modules\mob\living\carbon\taste.dm"
+#include "code\modules\mob\living\carbon\viruses.dm"
+#include "code\modules\mob\living\carbon\brain\brain.dm"
+#include "code\modules\mob\living\carbon\brain\death.dm"
+#include "code\modules\mob\living\carbon\brain\emote.dm"
+#include "code\modules\mob\living\carbon\brain\life.dm"
+#include "code\modules\mob\living\carbon\brain\login.dm"
+#include "code\modules\mob\living\carbon\brain\MMI.dm"
+#include "code\modules\mob\living\carbon\brain\say.dm"
+#include "code\modules\mob\living\carbon\human\appearance.dm"
+#include "code\modules\mob\living\carbon\human\death.dm"
+#include "code\modules\mob\living\carbon\human\emote.dm"
+#include "code\modules\mob\living\carbon\human\examine.dm"
+#include "code\modules\mob\living\carbon\human\gradient.dm"
+#include "code\modules\mob\living\carbon\human\human.dm"
+#include "code\modules\mob\living\carbon\human\human_attackhand.dm"
+#include "code\modules\mob\living\carbon\human\human_damage.dm"
+#include "code\modules\mob\living\carbon\human\human_defense.dm"
+#include "code\modules\mob\living\carbon\human\human_defines.dm"
+#include "code\modules\mob\living\carbon\human\human_helpers.dm"
+#include "code\modules\mob\living\carbon\human\human_modular_limbs.dm"
+#include "code\modules\mob\living\carbon\human\human_movement.dm"
+#include "code\modules\mob\living\carbon\human\human_organs.dm"
+#include "code\modules\mob\living\carbon\human\human_powers.dm"
+#include "code\modules\mob\living\carbon\human\human_resist.dm"
+#include "code\modules\mob\living\carbon\human\human_species.dm"
+#include "code\modules\mob\living\carbon\human\inventory.dm"
+#include "code\modules\mob\living\carbon\human\life.dm"
+#include "code\modules\mob\living\carbon\human\login.dm"
+#include "code\modules\mob\living\carbon\human\logout.dm"
+#include "code\modules\mob\living\carbon\human\MedicalSideEffects.dm"
+#include "code\modules\mob\living\carbon\human\npcs.dm"
+#include "code\modules\mob\living\carbon\human\say.dm"
+#include "code\modules\mob\living\carbon\human\stripping.dm"
+#include "code\modules\mob\living\carbon\human\unarmed_attack.dm"
+#include "code\modules\mob\living\carbon\human\update_icons.dm"
+#include "code\modules\mob\living\carbon\human\ai_controlled\ai_controlled.dm"
+#include "code\modules\mob\living\carbon\human\descriptors\_descriptors.dm"
+#include "code\modules\mob\living\carbon\human\descriptors\descriptors_generic.dm"
+#include "code\modules\mob\living\carbon\human\descriptors\descriptors_skrell.dm"
+#include "code\modules\mob\living\carbon\human\descriptors\descriptors_vox.dm"
+#include "code\modules\mob\living\carbon\human\species\species.dm"
+#include "code\modules\mob\living\carbon\human\species\species_adjust.dm"
+#include "code\modules\mob\living\carbon\human\species\species_attack.dm"
+#include "code\modules\mob\living\carbon\human\species\species_getters.dm"
+#include "code\modules\mob\living\carbon\human\species\species_helpers.dm"
+#include "code\modules\mob\living\carbon\human\species\species_hud.dm"
+#include "code\modules\mob\living\carbon\human\species\species_shapeshift.dm"
+#include "code\modules\mob\living\carbon\human\species\outsider\event.dm"
+#include "code\modules\mob\living\carbon\human\species\outsider\replicant.dm"
+#include "code\modules\mob\living\carbon\human\species\outsider\shadow.dm"
+#include "code\modules\mob\living\carbon\human\species\outsider\skeleton.dm"
+#include "code\modules\mob\living\carbon\human\species\outsider\vox.dm"
+#include "code\modules\mob\living\carbon\human\species\station\golem.dm"
+#include "code\modules\mob\living\carbon\human\species\station\human_subspecies.dm"
+#include "code\modules\mob\living\carbon\human\species\station\monkey.dm"
+#include "code\modules\mob\living\carbon\human\species\station\prometheans.dm"
+#include "code\modules\mob\living\carbon\human\species\station\station.dm"
+#include "code\modules\mob\living\carbon\human\species\station\teshari.dm"
+#include "code\modules\mob\living\carbon\human\species\virtual_reality\avatar.dm"
+#include "code\modules\mob\living\carbon\human\species\virtual_reality\opaque_form.dm"
+#include "code\modules\mob\living\carbon\human\species\xenomorphs\alien_powers.dm"
+#include "code\modules\mob\living\carbon\human\species\xenomorphs\alien_species.dm"
+#include "code\modules\mob\living\carbon\human\species\xenomorphs\xenomorphs.dm"
+#include "code\modules\mob\living\carbon\nymph\diona.dm"
+#include "code\modules\mob\living\carbon\nymph\diona_attacks.dm"
+#include "code\modules\mob\living\carbon\nymph\diona_powers.dm"
+#include "code\modules\mob\living\carbon\nymph\life.dm"
+#include "code\modules\mob\living\carbon\nymph\progression.dm"
+#include "code\modules\mob\living\carbon\nymph\say_understands.dm"
+#include "code\modules\mob\living\carbon\nymph\update_icons.dm"
+#include "code\modules\mob\living\silicon\death.dm"
+#include "code\modules\mob\living\silicon\emote.dm"
+#include "code\modules\mob\living\silicon\laws.dm"
+#include "code\modules\mob\living\silicon\login.dm"
+#include "code\modules\mob\living\silicon\say.dm"
+#include "code\modules\mob\living\silicon\silicon.dm"
+#include "code\modules\mob\living\silicon\subystems.dm"
+#include "code\modules\mob\living\silicon\ai\ai.dm"
+#include "code\modules\mob\living\silicon\ai\ai_movement.dm"
+#include "code\modules\mob\living\silicon\ai\ai_remote_control.dm"
+#include "code\modules\mob\living\silicon\ai\death.dm"
+#include "code\modules\mob\living\silicon\ai\examine.dm"
+#include "code\modules\mob\living\silicon\ai\icons.dm"
+#include "code\modules\mob\living\silicon\ai\latejoin.dm"
+#include "code\modules\mob\living\silicon\ai\laws.dm"
+#include "code\modules\mob\living\silicon\ai\life.dm"
+#include "code\modules\mob\living\silicon\ai\login.dm"
+#include "code\modules\mob\living\silicon\ai\logout.dm"
+#include "code\modules\mob\living\silicon\ai\malf.dm"
+#include "code\modules\mob\living\silicon\ai\multicam.dm"
+#include "code\modules\mob\living\silicon\decoy\death.dm"
+#include "code\modules\mob\living\silicon\decoy\decoy.dm"
+#include "code\modules\mob\living\silicon\decoy\life.dm"
+#include "code\modules\mob\living\silicon\pai\admin.dm"
+#include "code\modules\mob\living\silicon\pai\death.dm"
+#include "code\modules\mob\living\silicon\pai\examine.dm"
+#include "code\modules\mob\living\silicon\pai\life.dm"
+#include "code\modules\mob\living\silicon\pai\pai.dm"
+#include "code\modules\mob\living\silicon\pai\personality.dm"
+#include "code\modules\mob\living\silicon\pai\recruit.dm"
+#include "code\modules\mob\living\silicon\pai\say.dm"
+#include "code\modules\mob\living\silicon\pai\software.dm"
+#include "code\modules\mob\living\silicon\pai\software_modules.dm"
+#include "code\modules\mob\living\silicon\robot\analyzer.dm"
+#include "code\modules\mob\living\silicon\robot\component.dm"
+#include "code\modules\mob\living\silicon\robot\custom_sprites.dm"
+#include "code\modules\mob\living\silicon\robot\death.dm"
+#include "code\modules\mob\living\silicon\robot\emote.dm"
+#include "code\modules\mob\living\silicon\robot\examine.dm"
+#include "code\modules\mob\living\silicon\robot\inventory.dm"
+#include "code\modules\mob\living\silicon\robot\laws.dm"
+#include "code\modules\mob\living\silicon\robot\life.dm"
+#include "code\modules\mob\living\silicon\robot\login.dm"
+#include "code\modules\mob\living\silicon\robot\photos.dm"
+#include "code\modules\mob\living\silicon\robot\robot.dm"
+#include "code\modules\mob\living\silicon\robot\robot_damage.dm"
+#include "code\modules\mob\living\silicon\robot\robot_items.dm"
+#include "code\modules\mob\living\silicon\robot\robot_movement.dm"
+#include "code\modules\mob\living\silicon\robot\robot_remote_control.dm"
+#include "code\modules\mob\living\silicon\robot\drone\drone.dm"
+#include "code\modules\mob\living\silicon\robot\drone\drone_abilities.dm"
+#include "code\modules\mob\living\silicon\robot\drone\drone_console.dm"
+#include "code\modules\mob\living\silicon\robot\drone\drone_damage.dm"
+#include "code\modules\mob\living\silicon\robot\drone\drone_items.dm"
+#include "code\modules\mob\living\silicon\robot\drone\drone_manufacturer.dm"
+#include "code\modules\mob\living\silicon\robot\drone\drone_say.dm"
+#include "code\modules\mob\living\silicon\robot\drone\swarm.dm"
+#include "code\modules\mob\living\silicon\robot\drone\swarm_abilities.dm"
+#include "code\modules\mob\living\silicon\robot\drone\swarm_items.dm"
+#include "code\modules\mob\living\silicon\robot\robot_modules\event.dm"
+#include "code\modules\mob\living\silicon\robot\robot_modules\station.dm"
+#include "code\modules\mob\living\silicon\robot\robot_modules\swarm.dm"
+#include "code\modules\mob\living\silicon\robot\robot_modules\syndicate.dm"
+#include "code\modules\mob\living\silicon\robot\subtypes\gravekeeper.dm"
+#include "code\modules\mob\living\silicon\robot\subtypes\lost_drone.dm"
+#include "code\modules\mob\living\silicon\robot\subtypes\syndicate.dm"
+#include "code\modules\mob\living\silicon\robot\subtypes\thinktank\_thinktank.dm"
+#include "code\modules\mob\living\silicon\robot\subtypes\thinktank\thinktank_icon.dm"
+#include "code\modules\mob\living\silicon\robot\subtypes\thinktank\thinktank_interactions.dm"
+#include "code\modules\mob\living\silicon\robot\subtypes\thinktank\thinktank_module.dm"
+#include "code\modules\mob\living\silicon\robot\subtypes\thinktank\thinktank_storage.dm"
+#include "code\modules\mob\living\silicon\robot\subtypes\thinktank\thinktank_subtypes.dm"
+#include "code\modules\mob\living\simple_mob\appearance.dm"
+#include "code\modules\mob\living\simple_mob\butchering.dm"
+#include "code\modules\mob\living\simple_mob\combat.dm"
+#include "code\modules\mob\living\simple_mob\defense.dm"
+#include "code\modules\mob\living\simple_mob\hands.dm"
+#include "code\modules\mob\living\simple_mob\harvesting.dm"
+#include "code\modules\mob\living\simple_mob\healing.dm"
+#include "code\modules\mob\living\simple_mob\life.dm"
+#include "code\modules\mob\living\simple_mob\on_click.dm"
+#include "code\modules\mob\living\simple_mob\simple_hud.dm"
+#include "code\modules\mob\living\simple_mob\simple_mob.dm"
+#include "code\modules\mob\living\simple_mob\taming.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\_animal_harness.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\animal.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\borer\borer.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\borer\borer_captive.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\borer\borer_powers.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\farm animals\chicken.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\farm animals\cow.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\farm animals\goat.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\_giant_spider.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\carrier.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\electric.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\frost.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\hunter.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\lurker.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\nurse.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\pepper.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\phorogenic.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\thermic.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\tunneler.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\webslinger.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\crab.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\fish.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\lizard.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\misc.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\mouse.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\passive.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\penguin.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\possum.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\pets\bird.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\pets\cat.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\pets\dog.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\pets\karik.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\pets\parrot.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\diyaab.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\duck.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\frostfly.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\glitterfly.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\hare.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\hooligan_crab.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\kururak.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\leech.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\moth.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\pillbug.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\racoon.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\savik.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\shantak.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\sif.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\siffet.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\grafadreka\grafadreka.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\grafadreka\grafadreka_ai.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\grafadreka\grafadreka_emotes.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\grafadreka\grafadreka_harness.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\grafadreka\grafadreka_hatchling.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\grafadreka\grafadreka_interaction.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\grafadreka\grafadreka_misc.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\grafadreka\grafadreka_trained.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\space\alien.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\space\bats.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\space\bear.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\space\carp.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\space\goose.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\space\space.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\space\worm.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\blob\blob.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\blob\spore.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\humanoid\clown.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\humanoid\humanoid.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\humanoid\pirates.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\humanoid\russian.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\humanoid\mercs\mercs.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\illusion\illusion.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\golem.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mechanical.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\viscerator.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\drones\combat_drone.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\drones\mining_drone.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\hivebot\hivebot.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\hivebot\ranged_damage.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\hivebot\support.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\hivebot\tank.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\adv_dark_gygax.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\combat_mecha.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\durand.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\gygax.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\hoverpod.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\marauder.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\mecha.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\odysseus.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\phazon.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\ripley.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\ward\monitor_ward.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\ward\ward.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\occult\creature.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\occult\faithless.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\occult\constructs\_construct.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\occult\constructs\artificer.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\occult\constructs\harvester.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\occult\constructs\juggernaut.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\occult\constructs\shade.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\occult\constructs\wraith.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\plant\tomato.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\plant\tree.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\slime\slime.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\slime\feral\feral.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\combat.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\consumption.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\defense.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\discipline.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\subtypes.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\xenobio.dm"
+#include "code\modules\mob\living\voice\voice.dm"
+#include "code\modules\mob\new_player\login.dm"
+#include "code\modules\mob\new_player\logout.dm"
+#include "code\modules\mob\new_player\new_player.dm"
+#include "code\modules\mob\new_player\news.dm"
+#include "code\modules\mob\new_player\poll.dm"
+#include "code\modules\mob\new_player\preferences_setup.dm"
+#include "code\modules\mob\new_player\skill.dm"
+#include "code\modules\mob\new_player\sprite_accessories.dm"
+#include "code\modules\mob\new_player\sprite_accessories_ear.dm"
+#include "code\modules\mob\new_player\sprite_accessories_extra.dm"
+#include "code\modules\mob\new_player\sprite_accessories_tail.dm"
+#include "code\modules\mob\new_player\sprite_accessories_wing.dm"
+#include "code\modules\modular_computers\laptop_vendor.dm"
+#include "code\modules\modular_computers\computers\modular_computer\core.dm"
+#include "code\modules\modular_computers\computers\modular_computer\damage.dm"
+#include "code\modules\modular_computers\computers\modular_computer\hardware.dm"
+#include "code\modules\modular_computers\computers\modular_computer\interaction.dm"
+#include "code\modules\modular_computers\computers\modular_computer\power.dm"
+#include "code\modules\modular_computers\computers\modular_computer\ui.dm"
+#include "code\modules\modular_computers\computers\modular_computer\variables.dm"
+#include "code\modules\modular_computers\computers\subtypes\dev_console.dm"
+#include "code\modules\modular_computers\computers\subtypes\dev_laptop.dm"
+#include "code\modules\modular_computers\computers\subtypes\dev_tablet.dm"
+#include "code\modules\modular_computers\computers\subtypes\dev_telescreen.dm"
+#include "code\modules\modular_computers\computers\subtypes\preset_console.dm"
+#include "code\modules\modular_computers\computers\subtypes\preset_laptop.dm"
+#include "code\modules\modular_computers\computers\subtypes\preset_tablet.dm"
+#include "code\modules\modular_computers\computers\subtypes\preset_telescreen.dm"
+#include "code\modules\modular_computers\file_system\computer_file.dm"
+#include "code\modules\modular_computers\file_system\data.dm"
+#include "code\modules\modular_computers\file_system\news_article.dm"
+#include "code\modules\modular_computers\file_system\program.dm"
+#include "code\modules\modular_computers\file_system\program_events.dm"
+#include "code\modules\modular_computers\file_system\programs\antagonist\access_decrypter.dm"
+#include "code\modules\modular_computers\file_system\programs\antagonist\dos.dm"
+#include "code\modules\modular_computers\file_system\programs\antagonist\hacked_camera.dm"
+#include "code\modules\modular_computers\file_system\programs\antagonist\revelation.dm"
+#include "code\modules\modular_computers\file_system\programs\command\card.dm"
+#include "code\modules\modular_computers\file_system\programs\command\comm.dm"
+#include "code\modules\modular_computers\file_system\programs\engineering\alarm_monitor.dm"
+#include "code\modules\modular_computers\file_system\programs\engineering\atmos_control.dm"
+#include "code\modules\modular_computers\file_system\programs\engineering\power_monitor.dm"
+#include "code\modules\modular_computers\file_system\programs\engineering\rcon_console.dm"
+#include "code\modules\modular_computers\file_system\programs\engineering\shutoff_monitor.dm"
+#include "code\modules\modular_computers\file_system\programs\engineering\supermatter_monitor.dm"
+#include "code\modules\modular_computers\file_system\programs\generic\camera.dm"
+#include "code\modules\modular_computers\file_system\programs\generic\configurator.dm"
+#include "code\modules\modular_computers\file_system\programs\generic\email_client.dm"
+#include "code\modules\modular_computers\file_system\programs\generic\file_browser.dm"
+#include "code\modules\modular_computers\file_system\programs\generic\game.dm"
+#include "code\modules\modular_computers\file_system\programs\generic\news_browser.dm"
+#include "code\modules\modular_computers\file_system\programs\generic\ntdownloader.dm"
+#include "code\modules\modular_computers\file_system\programs\generic\ntnrc_client.dm"
+#include "code\modules\modular_computers\file_system\programs\generic\nttransfer.dm"
+#include "code\modules\modular_computers\file_system\programs\generic\uav.dm"
+#include "code\modules\modular_computers\file_system\programs\generic\wordprocessor.dm"
+#include "code\modules\modular_computers\file_system\programs\medical\suit_sensors.dm"
+#include "code\modules\modular_computers\file_system\programs\research\email_administration.dm"
+#include "code\modules\modular_computers\file_system\programs\research\ntmonitor.dm"
+#include "code\modules\modular_computers\file_system\programs\security\alarm_monitor.dm"
+#include "code\modules\modular_computers\file_system\programs\security\digitalwarrant.dm"
+#include "code\modules\modular_computers\file_system\programs\ships\navigation.dm"
+#include "code\modules\modular_computers\hardware\_hardware.dm"
+#include "code\modules\modular_computers\hardware\battery_module.dm"
+#include "code\modules\modular_computers\hardware\card_slot.dm"
+#include "code\modules\modular_computers\hardware\hard_drive.dm"
+#include "code\modules\modular_computers\hardware\nano_printer.dm"
+#include "code\modules\modular_computers\hardware\network_card.dm"
+#include "code\modules\modular_computers\hardware\portable_hard_drive.dm"
+#include "code\modules\modular_computers\hardware\processor_unit.dm"
+#include "code\modules\modular_computers\hardware\tesla_link.dm"
+#include "code\modules\modular_computers\NTNet\NTNet.dm"
+#include "code\modules\modular_computers\NTNet\NTNet_relay.dm"
+#include "code\modules\modular_computers\NTNet\emails\email_account.dm"
+#include "code\modules\modular_computers\NTNet\emails\email_message.dm"
+#include "code\modules\modular_computers\NTNet\NTNRC\conversation.dm"
+#include "code\modules\multi-tile\multi-tile.dm"
+#include "code\modules\multiz\_stubs.dm"
+#include "code\modules\multiz\basic.dm"
+#include "code\modules\multiz\hoist.dm"
+#include "code\modules\multiz\ladders.dm"
+#include "code\modules\multiz\movement.dm"
+#include "code\modules\multiz\pipes.dm"
+#include "code\modules\multiz\stairs.dm"
+#include "code\modules\multiz\turf.dm"
+#include "code\modules\multiz\zshadow.dm"
+#include "code\modules\nano\nanoexternal.dm"
+#include "code\modules\nano\nanomanager.dm"
+#include "code\modules\nano\nanomapgen.dm"
+#include "code\modules\nano\nanoui.dm"
+#include "code\modules\nano\interaction\admin.dm"
+#include "code\modules\nano\interaction\base.dm"
+#include "code\modules\nano\interaction\conscious.dm"
+#include "code\modules\nano\interaction\contained.dm"
+#include "code\modules\nano\interaction\default.dm"
+#include "code\modules\nano\interaction\interactive.dm"
+#include "code\modules\nano\interaction\inventory.dm"
+#include "code\modules\nano\interaction\inventory_deep.dm"
+#include "code\modules\nano\interaction\outside.dm"
+#include "code\modules\nano\interaction\physical.dm"
+#include "code\modules\nano\interaction\remote.dm"
+#include "code\modules\nano\interaction\self.dm"
+#include "code\modules\nano\interaction\zlevel.dm"
+#include "code\modules\nano\modules\nano_module.dm"
+#include "code\modules\news\news_init.dm"
+#include "code\modules\news\newspaper.dm"
+#include "code\modules\news\newspaper_layout.dm"
+#include "code\modules\organs\blood.dm"
+#include "code\modules\organs\misc.dm"
+#include "code\modules\organs\organ.dm"
+#include "code\modules\organs\organ_external.dm"
+#include "code\modules\organs\organ_icon.dm"
+#include "code\modules\organs\organ_stump.dm"
+#include "code\modules\organs\pain.dm"
+#include "code\modules\organs\robolimbs.dm"
+#include "code\modules\organs\robolimbs_custom.dm"
+#include "code\modules\organs\wound.dm"
+#include "code\modules\organs\internal\_organ_internal.dm"
+#include "code\modules\organs\internal\appendix.dm"
+#include "code\modules\organs\internal\augment.dm"
+#include "code\modules\organs\internal\brain.dm"
+#include "code\modules\organs\internal\eyes.dm"
+#include "code\modules\organs\internal\heart.dm"
+#include "code\modules\organs\internal\intestine.dm"
+#include "code\modules\organs\internal\kidneys.dm"
+#include "code\modules\organs\internal\liver.dm"
+#include "code\modules\organs\internal\lungs.dm"
+#include "code\modules\organs\internal\spleen.dm"
+#include "code\modules\organs\internal\stomach.dm"
+#include "code\modules\organs\internal\voicebox.dm"
+#include "code\modules\organs\internal\augment\armmounted.dm"
+#include "code\modules\organs\internal\augment\bio.dm"
+#include "code\modules\organs\internal\robotic\diagnostic.dm"
+#include "code\modules\organs\internal\robotic\heatsink.dm"
+#include "code\modules\organs\internal\robotic\robotic.dm"
+#include "code\modules\organs\subtypes\diona.dm"
+#include "code\modules\organs\subtypes\indestructible.dm"
+#include "code\modules\organs\subtypes\machine.dm"
+#include "code\modules\organs\subtypes\neaera.dm"
+#include "code\modules\organs\subtypes\replicant.dm"
+#include "code\modules\organs\subtypes\skrell.dm"
+#include "code\modules\organs\subtypes\slime.dm"
+#include "code\modules\organs\subtypes\standard.dm"
+#include "code\modules\organs\subtypes\tajaran.dm"
+#include "code\modules\organs\subtypes\unathi.dm"
+#include "code\modules\organs\subtypes\unbreakable.dm"
+#include "code\modules\organs\subtypes\unseverable.dm"
+#include "code\modules\organs\subtypes\vox.dm"
+#include "code\modules\organs\subtypes\xenos.dm"
+#include "code\modules\overmap\helpers.dm"
+#include "code\modules\overmap\overmap_object.dm"
+#include "code\modules\overmap\overmap_planet.dm"
+#include "code\modules\overmap\overmap_shuttle.dm"
+#include "code\modules\overmap\sectors.dm"
+#include "code\modules\overmap\spacetravel.dm"
+#include "code\modules\overmap\turfs.dm"
+#include "code\modules\overmap\events\event_handler.dm"
+#include "code\modules\overmap\events\generation.dm"
+#include "code\modules\overmap\events\overmap_event.dm"
+#include "code\modules\overmap\ships\landable.dm"
+#include "code\modules\overmap\ships\ship.dm"
+#include "code\modules\overmap\ships\computers\computer_shims.dm"
+#include "code\modules\overmap\ships\computers\engine_control.dm"
+#include "code\modules\overmap\ships\computers\helm.dm"
+#include "code\modules\overmap\ships\computers\sensors.dm"
+#include "code\modules\overmap\ships\computers\ship.dm"
+#include "code\modules\overmap\ships\computers\shuttle.dm"
+#include "code\modules\overmap\ships\engines\engine.dm"
+#include "code\modules\overmap\ships\engines\gas_thruster.dm"
+#include "code\modules\overmap\ships\engines\ion_thruster.dm"
+#include "code\modules\paperwork\adminpaper.dm"
+#include "code\modules\paperwork\carbonpaper.dm"
+#include "code\modules\paperwork\clipboard.dm"
+#include "code\modules\paperwork\faxmachine.dm"
+#include "code\modules\paperwork\filingcabinet.dm"
+#include "code\modules\paperwork\folders.dm"
+#include "code\modules\paperwork\handlabeler.dm"
+#include "code\modules\paperwork\paper.dm"
+#include "code\modules\paperwork\paper_bundle.dm"
+#include "code\modules\paperwork\paper_sticky.dm"
+#include "code\modules\paperwork\paperbin.dm"
+#include "code\modules\paperwork\paperplane.dm"
+#include "code\modules\paperwork\papershredder.dm"
+#include "code\modules\paperwork\pen.dm"
+#include "code\modules\paperwork\photocopier.dm"
+#include "code\modules\paperwork\photography.dm"
+#include "code\modules\paperwork\silicon_photography.dm"
+#include "code\modules\paperwork\stamps.dm"
+#include "code\modules\pda\ai.dm"
+#include "code\modules\pda\app.dm"
+#include "code\modules\pda\cart.dm"
+#include "code\modules\pda\cart_apps.dm"
+#include "code\modules\pda\core_apps.dm"
+#include "code\modules\pda\messenger.dm"
+#include "code\modules\pda\messenger_plugins.dm"
+#include "code\modules\pda\pda.dm"
+#include "code\modules\pda\pda_subtypes.dm"
+#include "code\modules\pda\pda_tgui.dm"
+#include "code\modules\pda\radio.dm"
+#include "code\modules\pda\utilities.dm"
+#include "code\modules\persistence\filth.dm"
+#include "code\modules\persistence\graffiti.dm"
+#include "code\modules\persistence\noticeboard.dm"
+#include "code\modules\persistence\datum\persistence_datum.dm"
+#include "code\modules\persistence\effects\filth.dm"
+#include "code\modules\persistence\effects\graffiti.dm"
+#include "code\modules\persistence\effects\paper.dm"
+#include "code\modules\persistence\effects\paper_sticky.dm"
+#include "code\modules\persistence\effects\trash.dm"
+#include "code\modules\persistence\storage\smartfridge.dm"
+#include "code\modules\persistence\storage\storage.dm"
+#include "code\modules\planet\planet.dm"
+#include "code\modules\planet\sif.dm"
+#include "code\modules\planet\time.dm"
+#include "code\modules\planet\weather.dm"
+#include "code\modules\power\apc.dm"
+#include "code\modules\power\batteryrack.dm"
+#include "code\modules\power\breaker_box.dm"
+#include "code\modules\power\cable.dm"
+#include "code\modules\power\cable_ender.dm"
+#include "code\modules\power\cable_heavyduty.dm"
+#include "code\modules\power\cell.dm"
+#include "code\modules\power\debug_items.dm"
+#include "code\modules\power\generator.dm"
+#include "code\modules\power\gravitygenerator.dm"
+#include "code\modules\power\grid_checker.dm"
+#include "code\modules\power\lighting.dm"
+#include "code\modules\power\port_gen.dm"
+#include "code\modules\power\power.dm"
+#include "code\modules\power\powernet.dm"
+#include "code\modules\power\smes.dm"
+#include "code\modules\power\smes_construction.dm"
+#include "code\modules\power\solar.dm"
+#include "code\modules\power\terminal.dm"
+#include "code\modules\power\tracker.dm"
+#include "code\modules\power\turbine.dm"
+#include "code\modules\power\antimatter\containment_jar.dm"
+#include "code\modules\power\antimatter\control.dm"
+#include "code\modules\power\antimatter\shielding.dm"
+#include "code\modules\power\cells\device_cells.dm"
+#include "code\modules\power\cells\esoteric_cells.dm"
+#include "code\modules\power\cells\power_cells.dm"
+#include "code\modules\power\fusion\_setup.dm"
+#include "code\modules\power\fusion\fusion_circuits.dm"
+#include "code\modules\power\fusion\fusion_particle_catcher.dm"
+#include "code\modules\power\fusion\fusion_reactions.dm"
+#include "code\modules\power\fusion\magpower.dm"
+#include "code\modules\power\fusion\core\_core.dm"
+#include "code\modules\power\fusion\core\core_control.dm"
+#include "code\modules\power\fusion\core\core_field.dm"
+#include "code\modules\power\fusion\fuel_assembly\fuel_assembly.dm"
+#include "code\modules\power\fusion\fuel_assembly\fuel_compressor.dm"
+#include "code\modules\power\fusion\fuel_assembly\fuel_control.dm"
+#include "code\modules\power\fusion\fuel_assembly\fuel_injector.dm"
+#include "code\modules\power\fusion\gyrotron\gyrotron.dm"
+#include "code\modules\power\fusion\gyrotron\gyrotron_control.dm"
+#include "code\modules\power\sensors\powernet_sensor.dm"
+#include "code\modules\power\sensors\sensor_monitoring.dm"
+#include "code\modules\power\singularity\act.dm"
+#include "code\modules\power\singularity\collector.dm"
+#include "code\modules\power\singularity\containment_field.dm"
+#include "code\modules\power\singularity\emitter.dm"
+#include "code\modules\power\singularity\field_generator.dm"
+#include "code\modules\power\singularity\generator.dm"
+#include "code\modules\power\singularity\investigate.dm"
+#include "code\modules\power\singularity\singularity.dm"
+#include "code\modules\power\singularity\particle_accelerator\particle.dm"
+#include "code\modules\power\singularity\particle_accelerator\particle_accelerator.dm"
+#include "code\modules\power\singularity\particle_accelerator\particle_chamber.dm"
+#include "code\modules\power\singularity\particle_accelerator\particle_control.dm"
+#include "code\modules\power\singularity\particle_accelerator\particle_emitter.dm"
+#include "code\modules\power\singularity\particle_accelerator\particle_power.dm"
+#include "code\modules\power\singularity\particle_accelerator\particle_smasher.dm"
+#include "code\modules\power\supermatter\setup_supermatter.dm"
+#include "code\modules\power\supermatter\supermatter.dm"
+#include "code\modules\power\tesla\coil.dm"
+#include "code\modules\power\tesla\energy_ball.dm"
+#include "code\modules\power\tesla\generator.dm"
+#include "code\modules\power\tesla\telsa_construction.dm"
+#include "code\modules\power\tesla\tesla_act.dm"
+#include "code\modules\projectiles\ammunition.dm"
+#include "code\modules\projectiles\broken.dm"
+#include "code\modules\projectiles\dnalocking.dm"
+#include "code\modules\projectiles\gun.dm"
+#include "code\modules\projectiles\projectile.dm"
+#include "code\modules\projectiles\ammunition\magazines.dm"
+#include "code\modules\projectiles\ammunition\magnetic.dm"
+#include "code\modules\projectiles\ammunition\rounds.dm"
+#include "code\modules\projectiles\ammunition\smartmag.dm"
+#include "code\modules\projectiles\brokenguns\energy.dm"
+#include "code\modules\projectiles\brokenguns\launcher.dm"
+#include "code\modules\projectiles\brokenguns\magnetic.dm"
+#include "code\modules\projectiles\brokenguns\projectile.dm"
+#include "code\modules\projectiles\guns\energy.dm"
+#include "code\modules\projectiles\guns\launcher.dm"
+#include "code\modules\projectiles\guns\magic.dm"
+#include "code\modules\projectiles\guns\modular_guns.dm"
+#include "code\modules\projectiles\guns\projectile.dm"
+#include "code\modules\projectiles\guns\vox.dm"
+#include "code\modules\projectiles\guns\energy\hooklauncher.dm"
+#include "code\modules\projectiles\guns\energy\laser.dm"
+#include "code\modules\projectiles\guns\energy\nuclear.dm"
+#include "code\modules\projectiles\guns\energy\phase.dm"
+#include "code\modules\projectiles\guns\energy\pulse.dm"
+#include "code\modules\projectiles\guns\energy\special.dm"
+#include "code\modules\projectiles\guns\energy\stun.dm"
+#include "code\modules\projectiles\guns\energy\temperature.dm"
+#include "code\modules\projectiles\guns\launcher\bows.dm"
+#include "code\modules\projectiles\guns\launcher\crossbow.dm"
+#include "code\modules\projectiles\guns\launcher\grenade_launcher.dm"
+#include "code\modules\projectiles\guns\launcher\pneumatic.dm"
+#include "code\modules\projectiles\guns\launcher\rocket.dm"
+#include "code\modules\projectiles\guns\launcher\syringe_gun.dm"
+#include "code\modules\projectiles\guns\magic\fireball.dm"
+#include "code\modules\projectiles\guns\magnetic\bore.dm"
+#include "code\modules\projectiles\guns\magnetic\gasthrower.dm"
+#include "code\modules\projectiles\guns\magnetic\magnetic.dm"
+#include "code\modules\projectiles\guns\magnetic\magnetic_construction.dm"
+#include "code\modules\projectiles\guns\magnetic\magnetic_railgun.dm"
+#include "code\modules\projectiles\guns\projectile\automatic.dm"
+#include "code\modules\projectiles\guns\projectile\boltaction.dm"
+#include "code\modules\projectiles\guns\projectile\caseless.dm"
+#include "code\modules\projectiles\guns\projectile\contender.dm"
+#include "code\modules\projectiles\guns\projectile\dartgun.dm"
+#include "code\modules\projectiles\guns\projectile\pistol.dm"
+#include "code\modules\projectiles\guns\projectile\revolver.dm"
+#include "code\modules\projectiles\guns\projectile\semiauto.dm"
+#include "code\modules\projectiles\guns\projectile\shotgun.dm"
+#include "code\modules\projectiles\guns\projectile\sniper.dm"
+#include "code\modules\projectiles\guns\projectile\toy.dm"
+#include "code\modules\projectiles\guns\projectile\sniper\collapsible_sniper.dm"
+#include "code\modules\projectiles\projectile\arc.dm"
+#include "code\modules\projectiles\projectile\beams.dm"
+#include "code\modules\projectiles\projectile\blob.dm"
+#include "code\modules\projectiles\projectile\bullets.dm"
+#include "code\modules\projectiles\projectile\change.dm"
+#include "code\modules\projectiles\projectile\energy.dm"
+#include "code\modules\projectiles\projectile\explosive.dm"
+#include "code\modules\projectiles\projectile\force.dm"
+#include "code\modules\projectiles\projectile\hook.dm"
+#include "code\modules\projectiles\projectile\magic.dm"
+#include "code\modules\projectiles\projectile\magnetic.dm"
+#include "code\modules\projectiles\projectile\pellets.dm"
+#include "code\modules\projectiles\projectile\scatter.dm"
+#include "code\modules\projectiles\projectile\special.dm"
+#include "code\modules\projectiles\projectile\trace.dm"
+#include "code\modules\projectiles\targeting\targeting_client.dm"
+#include "code\modules\projectiles\targeting\targeting_gun.dm"
+#include "code\modules\projectiles\targeting\targeting_mob.dm"
+#include "code\modules\projectiles\targeting\targeting_overlay.dm"
+#include "code\modules\projectiles\targeting\targeting_triggers.dm"
+#include "code\modules\radiation\radiation.dm"
+#include "code\modules\random_map\_random_map_setup.dm"
+#include "code\modules\random_map\random_map.dm"
+#include "code\modules\random_map\random_map_verbs.dm"
+#include "code\modules\random_map\automata\automata.dm"
+#include "code\modules\random_map\automata\caves.dm"
+#include "code\modules\random_map\building\building.dm"
+#include "code\modules\random_map\drop\drop_types.dm"
+#include "code\modules\random_map\drop\droppod.dm"
+#include "code\modules\random_map\drop\droppod_doors.dm"
+#include "code\modules\random_map\drop\supply.dm"
+#include "code\modules\random_map\mazes\maze.dm"
+#include "code\modules\random_map\mazes\maze_cell.dm"
+#include "code\modules\random_map\meteor\meteor.dm"
+#include "code\modules\random_map\noise\desert.dm"
+#include "code\modules\random_map\noise\noise.dm"
+#include "code\modules\random_map\noise\ore.dm"
+#include "code\modules\random_map\noise\tundra.dm"
+#include "code\modules\reagents\Chemistry-Colours.dm"
+#include "code\modules\reagents\Chemistry-Logging.dm"
+#include "code\modules\reagents\Chemistry-Metabolism.dm"
+#include "code\modules\reagents\holder\distilling.dm"
+#include "code\modules\reagents\holder\holder.dm"
+#include "code\modules\reagents\hoses\connector.dm"
+#include "code\modules\reagents\hoses\hose.dm"
+#include "code\modules\reagents\hoses\hose_connector.dm"
+#include "code\modules\reagents\machinery\chem_master.dm"
+#include "code\modules\reagents\machinery\chemalyzer.dm"
+#include "code\modules\reagents\machinery\distillery.dm"
+#include "code\modules\reagents\machinery\grinder.dm"
+#include "code\modules\reagents\machinery\pump.dm"
+#include "code\modules\reagents\machinery\dispenser\_defines.dm"
+#include "code\modules\reagents\machinery\dispenser\cartridge.dm"
+#include "code\modules\reagents\machinery\dispenser\cartridge_presets.dm"
+#include "code\modules\reagents\machinery\dispenser\cartridge_spawn.dm"
+#include "code\modules\reagents\machinery\dispenser\dispenser2.dm"
+#include "code\modules\reagents\machinery\dispenser\dispenser2_energy.dm"
+#include "code\modules\reagents\machinery\dispenser\dispenser_presets.dm"
+#include "code\modules\reagents\machinery\dispenser\reagent_tank.dm"
+#include "code\modules\reagents\machinery\dispenser\supply.dm"
+#include "code\modules\reagents\reactions\_reactions.dm"
+#include "code\modules\reagents\reactions\distilling\distilling.dm"
+#include "code\modules\reagents\reactions\fusion\fusion.dm"
+#include "code\modules\reagents\reactions\instant\drinks.dm"
+#include "code\modules\reagents\reactions\instant\food.dm"
+#include "code\modules\reagents\reactions\instant\instant.dm"
+#include "code\modules\reagents\reactions\instant\vox.dm"
+#include "code\modules\reagents\reagent_containers\_reagent_containers.dm"
+#include "code\modules\reagents\reagent_containers\blood_pack.dm"
+#include "code\modules\reagents\reagent_containers\borghypo.dm"
+#include "code\modules\reagents\reagent_containers\dropper.dm"
+#include "code\modules\reagents\reagent_containers\glass.dm"
+#include "code\modules\reagents\reagent_containers\hypospray.dm"
+#include "code\modules\reagents\reagent_containers\patch.dm"
+#include "code\modules\reagents\reagent_containers\pill.dm"
+#include "code\modules\reagents\reagent_containers\spray.dm"
+#include "code\modules\reagents\reagent_containers\syringes.dm"
+#include "code\modules\reagents\reagent_containers\unidentified_hypospray.dm"
+#include "code\modules\reagents\reagents\_helpers.dm"
+#include "code\modules\reagents\reagents\_reagents.dm"
+#include "code\modules\reagents\reagents\core.dm"
+#include "code\modules\reagents\reagents\dispenser.dm"
+#include "code\modules\reagents\reagents\drugs.dm"
+#include "code\modules\reagents\reagents\food_drinks.dm"
+#include "code\modules\reagents\reagents\medicine.dm"
+#include "code\modules\reagents\reagents\modifiers.dm"
+#include "code\modules\reagents\reagents\other.dm"
+#include "code\modules\reagents\reagents\toxins.dm"
+#include "code\modules\reagents\reagents\vox.dm"
+#include "code\modules\recycling\conveyor2.dm"
+#include "code\modules\recycling\disposal-construction.dm"
+#include "code\modules\recycling\disposal.dm"
+#include "code\modules\recycling\sortingmachinery.dm"
+#include "code\modules\research\circuitprinter.dm"
+#include "code\modules\research\designs.dm"
+#include "code\modules\research\destructive_analyzer.dm"
+#include "code\modules\research\mechfab_designs.dm"
+#include "code\modules\research\message_server.dm"
+#include "code\modules\research\prosfab_designs.dm"
+#include "code\modules\research\protolathe.dm"
+#include "code\modules\research\rdconsole.dm"
+#include "code\modules\research\rdmachines.dm"
+#include "code\modules\research\research.dm"
+#include "code\modules\research\server.dm"
+#include "code\modules\research\designs\ai_holders.dm"
+#include "code\modules\research\designs\bag_of_holding.dm"
+#include "code\modules\research\designs\beakers.dm"
+#include "code\modules\research\designs\bio_devices.dm"
+#include "code\modules\research\designs\circuit_assembly.dm"
+#include "code\modules\research\designs\engineering.dm"
+#include "code\modules\research\designs\HUDs.dm"
+#include "code\modules\research\designs\implants.dm"
+#include "code\modules\research\designs\locator_devices.dm"
+#include "code\modules\research\designs\medical.dm"
+#include "code\modules\research\designs\mining_toys.dm"
+#include "code\modules\research\designs\misc.dm"
+#include "code\modules\research\designs\modular_computer.dm"
+#include "code\modules\research\designs\pdas.dm"
+#include "code\modules\research\designs\power_cells.dm"
+#include "code\modules\research\designs\precursor.dm"
+#include "code\modules\research\designs\stock_parts.dm"
+#include "code\modules\research\designs\subspace_parts.dm"
+#include "code\modules\research\designs\tech_disks.dm"
+#include "code\modules\research\designs\weapons.dm"
+#include "code\modules\research\designs\xenoarch_toys.dm"
+#include "code\modules\research\designs\xenobio_toys.dm"
+#include "code\modules\research\designs\circuits\ai_modules.dm"
+#include "code\modules\research\designs\circuits\circuits.dm"
+#include "code\modules\research\designs\circuits\disks.dm"
+#include "code\modules\scripting\Errors.dm"
+#include "code\modules\scripting\IDE.dm"
+#include "code\modules\scripting\Options.dm"
+#include "code\modules\scripting\stack.dm"
+#include "code\modules\scripting\AST\AST Nodes.dm"
+#include "code\modules\scripting\AST\Blocks.dm"
+#include "code\modules\scripting\AST\Statements.dm"
+#include "code\modules\scripting\AST\Operators\Binary Operators.dm"
+#include "code\modules\scripting\AST\Operators\Unary Operators.dm"
+#include "code\modules\scripting\Implementations\_Logic.dm"
+#include "code\modules\scripting\Implementations\Telecomms.dm"
+#include "code\modules\scripting\Interpreter\Evaluation.dm"
+#include "code\modules\scripting\Interpreter\Interaction.dm"
+#include "code\modules\scripting\Interpreter\Interpreter.dm"
+#include "code\modules\scripting\Interpreter\Scope.dm"
+#include "code\modules\scripting\Parser\Expressions.dm"
+#include "code\modules\scripting\Parser\Keywords.dm"
+#include "code\modules\scripting\Parser\Parser.dm"
+#include "code\modules\scripting\Scanner\Scanner.dm"
+#include "code\modules\scripting\Scanner\Tokens.dm"
+#include "code\modules\security levels\keycard authentication.dm"
+#include "code\modules\security levels\security levels.dm"
+#include "code\modules\shieldgen\directional_shield.dm"
+#include "code\modules\shieldgen\emergency_shield.dm"
+#include "code\modules\shieldgen\energy_field.dm"
+#include "code\modules\shieldgen\handheld_defuser.dm"
+#include "code\modules\shieldgen\sheldwallgen.dm"
+#include "code\modules\shieldgen\shield_capacitor.dm"
+#include "code\modules\shieldgen\shield_diffuser.dm"
+#include "code\modules\shieldgen\shield_gen.dm"
+#include "code\modules\shieldgen\shield_gen_external.dm"
+#include "code\modules\shuttles\antagonist.dm"
+#include "code\modules\shuttles\departmental.dm"
+#include "code\modules\shuttles\escape_pods.dm"
+#include "code\modules\shuttles\landmarks.dm"
+#include "code\modules\shuttles\shuttle.dm"
+#include "code\modules\shuttles\shuttle_arrivals.dm"
+#include "code\modules\shuttles\shuttle_autodock.dm"
+#include "code\modules\shuttles\shuttle_console.dm"
+#include "code\modules\shuttles\shuttle_console_multi.dm"
+#include "code\modules\shuttles\shuttle_emergency.dm"
+#include "code\modules\shuttles\shuttle_ferry.dm"
+#include "code\modules\shuttles\shuttle_specops.dm"
+#include "code\modules\shuttles\shuttle_supply.dm"
+#include "code\modules\shuttles\shuttles_multi.dm"
+#include "code\modules\shuttles\shuttles_web.dm"
+#include "code\modules\shuttles\web_datums.dm"
+#include "code\modules\spells\artifacts.dm"
+#include "code\modules\spells\construct_spells.dm"
+#include "code\modules\spells\no_clothes.dm"
+#include "code\modules\spells\spell_code.dm"
+#include "code\modules\spells\spell_projectile.dm"
+#include "code\modules\spells\spellbook.dm"
+#include "code\modules\spells\spells.dm"
+#include "code\modules\spells\aoe_turf\aoe_turf.dm"
+#include "code\modules\spells\aoe_turf\blink.dm"
+#include "code\modules\spells\aoe_turf\charge.dm"
+#include "code\modules\spells\aoe_turf\disable_tech.dm"
+#include "code\modules\spells\aoe_turf\knock.dm"
+#include "code\modules\spells\aoe_turf\smoke.dm"
+#include "code\modules\spells\aoe_turf\summons.dm"
+#include "code\modules\spells\aoe_turf\conjure\conjure.dm"
+#include "code\modules\spells\aoe_turf\conjure\construct.dm"
+#include "code\modules\spells\aoe_turf\conjure\forcewall.dm"
+#include "code\modules\spells\general\area_teleport.dm"
+#include "code\modules\spells\general\rune_write.dm"
+#include "code\modules\spells\targeted\ethereal_jaunt.dm"
+#include "code\modules\spells\targeted\genetic.dm"
+#include "code\modules\spells\targeted\harvest.dm"
+#include "code\modules\spells\targeted\mind_transfer.dm"
+#include "code\modules\spells\targeted\shift.dm"
+#include "code\modules\spells\targeted\subjugate.dm"
+#include "code\modules\spells\targeted\targeted.dm"
+#include "code\modules\spells\targeted\equip\equip.dm"
+#include "code\modules\spells\targeted\equip\horsemask.dm"
+#include "code\modules\spells\targeted\projectile\dumbfire.dm"
+#include "code\modules\spells\targeted\projectile\fireball.dm"
+#include "code\modules\spells\targeted\projectile\magic_missile.dm"
+#include "code\modules\spells\targeted\projectile\projectile.dm"
+#include "code\modules\surgery\_defines.dm"
+#include "code\modules\surgery\bones.dm"
+#include "code\modules\surgery\encased.dm"
+#include "code\modules\surgery\external_repair.dm"
+#include "code\modules\surgery\face.dm"
+#include "code\modules\surgery\generic.dm"
+#include "code\modules\surgery\implant.dm"
+#include "code\modules\surgery\limb_reattach.dm"
+#include "code\modules\surgery\neck.dm"
+#include "code\modules\surgery\organs_internal.dm"
+#include "code\modules\surgery\other.dm"
+#include "code\modules\surgery\robotics.dm"
+#include "code\modules\surgery\surgery.dm"
+#include "code\modules\surgery\~defines.dm"
+#include "code\modules\tables\bench.dm"
+#include "code\modules\tables\flipping.dm"
+#include "code\modules\tables\interactions.dm"
+#include "code\modules\tables\presets.dm"
+#include "code\modules\tables\rack.dm"
+#include "code\modules\tables\tables.dm"
+#include "code\modules\tension\tension.dm"
+#include "code\modules\tgui\external.dm"
+#include "code\modules\tgui\modal.dm"
+#include "code\modules\tgui\states.dm"
+#include "code\modules\tgui\tgui.dm"
+#include "code\modules\tgui\tgui_window.dm"
+#include "code\modules\tgui\modules\_base.dm"
+#include "code\modules\tgui\modules\alarm.dm"
+#include "code\modules\tgui\modules\appearance_changer.dm"
+#include "code\modules\tgui\modules\atmos_control.dm"
+#include "code\modules\tgui\modules\camera.dm"
+#include "code\modules\tgui\modules\communications.dm"
+#include "code\modules\tgui\modules\crew_monitor.dm"
+#include "code\modules\tgui\modules\gyrotron_control.dm"
+#include "code\modules\tgui\modules\law_manager.dm"
+#include "code\modules\tgui\modules\overmap.dm"
+#include "code\modules\tgui\modules\power_monitor.dm"
+#include "code\modules\tgui\modules\rcon.dm"
+#include "code\modules\tgui\modules\rustcore_monitor.dm"
+#include "code\modules\tgui\modules\rustfuel_control.dm"
+#include "code\modules\tgui\modules\shutoff_monitor.dm"
+#include "code\modules\tgui\modules\supermatter_monitor.dm"
+#include "code\modules\tgui\modules\ntos-only\cardmod.dm"
+#include "code\modules\tgui\modules\ntos-only\configurator.dm"
+#include "code\modules\tgui\modules\ntos-only\email.dm"
+#include "code\modules\tgui\modules\ntos-only\uav.dm"
+#include "code\modules\tgui\states\admin.dm"
+#include "code\modules\tgui\states\always.dm"
+#include "code\modules\tgui\states\conscious.dm"
+#include "code\modules\tgui\states\contained.dm"
+#include "code\modules\tgui\states\deep_inventory.dm"
+#include "code\modules\tgui\states\default.dm"
+#include "code\modules\tgui\states\hands.dm"
+#include "code\modules\tgui\states\human_adjacent.dm"
+#include "code\modules\tgui\states\inventory.dm"
+#include "code\modules\tgui\states\not_incapacitated.dm"
+#include "code\modules\tgui\states\notcontained.dm"
+#include "code\modules\tgui\states\ntos.dm"
+#include "code\modules\tgui\states\observer.dm"
+#include "code\modules\tgui\states\physical.dm"
+#include "code\modules\tgui\states\self.dm"
+#include "code\modules\tgui\states\zlevel.dm"
+#include "code\modules\tooltip\tooltip.dm"
+#include "code\modules\turbolift\_turbolift.dm"
+#include "code\modules\turbolift\turbolift.dm"
+#include "code\modules\turbolift\turbolift_areas.dm"
+#include "code\modules\turbolift\turbolift_console.dm"
+#include "code\modules\turbolift\turbolift_door.dm"
+#include "code\modules\turbolift\turbolift_floor.dm"
+#include "code\modules\turbolift\turbolift_map.dm"
+#include "code\modules\turbolift\turbolift_turfs.dm"
+#include "code\modules\vchat\vchat_client.dm"
+#include "code\modules\vchat\vchat_db.dm"
+#include "code\modules\vehicles\bike.dm"
+#include "code\modules\vehicles\boat.dm"
+#include "code\modules\vehicles\cargo_train.dm"
+#include "code\modules\vehicles\construction.dm"
+#include "code\modules\vehicles\quad.dm"
+#include "code\modules\vehicles\snowmobile.dm"
+#include "code\modules\vehicles\train.dm"
+#include "code\modules\vehicles\vehicle.dm"
+#include "code\modules\ventcrawl\ventcrawl.dm"
+#include "code\modules\ventcrawl\ventcrawl_atmospherics.dm"
+#include "code\modules\ventcrawl\ventcrawl_multiz.dm"
+#include "code\modules\ventcrawl\ventcrawl_verb.dm"
+#include "code\modules\virus2\admin.dm"
+#include "code\modules\virus2\analyser.dm"
+#include "code\modules\virus2\antibodies.dm"
+#include "code\modules\virus2\centrifuge.dm"
+#include "code\modules\virus2\curer.dm"
+#include "code\modules\virus2\disease2.dm"
+#include "code\modules\virus2\diseasesplicer.dm"
+#include "code\modules\virus2\dishincubator.dm"
+#include "code\modules\virus2\effect.dm"
+#include "code\modules\virus2\helpers.dm"
+#include "code\modules\virus2\isolator.dm"
+#include "code\modules\virus2\items_devices.dm"
+#include "code\modules\webhooks\_webhook.dm"
+#include "code\modules\webhooks\webhook_ahelp2discord.dm"
+#include "code\modules\webhooks\webhook_custom_event.dm"
+#include "code\modules\webhooks\webhook_fax2discord.dm"
+#include "code\modules\webhooks\webhook_roundend.dm"
+#include "code\modules\webhooks\webhook_roundprep.dm"
+#include "code\modules\webhooks\webhook_roundstart.dm"
+#include "code\modules\whitelist\admin_ops.dm"
+#include "code\modules\whitelist\legacy.dm"
+#include "code\modules\whitelist\phony_paths.dm"
+#include "code\modules\whitelist\whitelist.dm"
+#include "code\modules\xenoarcheaology\anomaly_container.dm"
+#include "code\modules\xenoarcheaology\boulder.dm"
+#include "code\modules\xenoarcheaology\effect.dm"
+#include "code\modules\xenoarcheaology\effect_master.dm"
+#include "code\modules\xenoarcheaology\manuals.dm"
+#include "code\modules\xenoarcheaology\misc.dm"
+#include "code\modules\xenoarcheaology\sampling.dm"
+#include "code\modules\xenoarcheaology\artifacts\artifact.dm"
+#include "code\modules\xenoarcheaology\artifacts\artifact_find.dm"
+#include "code\modules\xenoarcheaology\artifacts\autocloner.dm"
+#include "code\modules\xenoarcheaology\artifacts\crystal.dm"
+#include "code\modules\xenoarcheaology\artifacts\gigadrill.dm"
+#include "code\modules\xenoarcheaology\artifacts\replicator.dm"
+#include "code\modules\xenoarcheaology\artifacts\predefined\_predefined.dm"
+#include "code\modules\xenoarcheaology\artifacts\predefined\hungry_statue.dm"
+#include "code\modules\xenoarcheaology\effects\animate_anomaly.dm"
+#include "code\modules\xenoarcheaology\effects\badfeeling.dm"
+#include "code\modules\xenoarcheaology\effects\berserk.dm"
+#include "code\modules\xenoarcheaology\effects\blast_shielding.dm"
+#include "code\modules\xenoarcheaology\effects\cannibal.dm"
+#include "code\modules\xenoarcheaology\effects\cellcharge.dm"
+#include "code\modules\xenoarcheaology\effects\celldrain.dm"
+#include "code\modules\xenoarcheaology\effects\cold.dm"
+#include "code\modules\xenoarcheaology\effects\electric_field.dm"
+#include "code\modules\xenoarcheaology\effects\emp.dm"
+#include "code\modules\xenoarcheaology\effects\extinguisher.dm"
+#include "code\modules\xenoarcheaology\effects\faraday.dm"
+#include "code\modules\xenoarcheaology\effects\feysight.dm"
+#include "code\modules\xenoarcheaology\effects\forcefield.dm"
+#include "code\modules\xenoarcheaology\effects\fortify.dm"
+#include "code\modules\xenoarcheaology\effects\gaia.dm"
+#include "code\modules\xenoarcheaology\effects\gasco2.dm"
+#include "code\modules\xenoarcheaology\effects\gasnitro.dm"
+#include "code\modules\xenoarcheaology\effects\gasoxy.dm"
+#include "code\modules\xenoarcheaology\effects\gasphoron.dm"
+#include "code\modules\xenoarcheaology\effects\gassleeping.dm"
+#include "code\modules\xenoarcheaology\effects\goodfeeling.dm"
+#include "code\modules\xenoarcheaology\effects\gravitational_waves.dm"
+#include "code\modules\xenoarcheaology\effects\heal.dm"
+#include "code\modules\xenoarcheaology\effects\heat.dm"
+#include "code\modules\xenoarcheaology\effects\hurt.dm"
+#include "code\modules\xenoarcheaology\effects\indiscriminate_spines.dm"
+#include "code\modules\xenoarcheaology\effects\lifedrain.dm"
+#include "code\modules\xenoarcheaology\effects\lifesteal.dm"
+#include "code\modules\xenoarcheaology\effects\noxious.dm"
+#include "code\modules\xenoarcheaology\effects\poltergeist.dm"
+#include "code\modules\xenoarcheaology\effects\radiate.dm"
+#include "code\modules\xenoarcheaology\effects\resurrect.dm"
+#include "code\modules\xenoarcheaology\effects\roboheal.dm"
+#include "code\modules\xenoarcheaology\effects\robohurt.dm"
+#include "code\modules\xenoarcheaology\effects\sleepy.dm"
+#include "code\modules\xenoarcheaology\effects\sprinting.dm"
+#include "code\modules\xenoarcheaology\effects\stun.dm"
+#include "code\modules\xenoarcheaology\effects\sweating_reagents.dm"
+#include "code\modules\xenoarcheaology\effects\teleport.dm"
+#include "code\modules\xenoarcheaology\effects\tesla.dm"
+#include "code\modules\xenoarcheaology\effects\vampire.dm"
+#include "code\modules\xenoarcheaology\finds\eguns.dm"
+#include "code\modules\xenoarcheaology\finds\find_spawning.dm"
+#include "code\modules\xenoarcheaology\finds\finds.dm"
+#include "code\modules\xenoarcheaology\finds\finds_defines.dm"
+#include "code\modules\xenoarcheaology\finds\fossils.dm"
+#include "code\modules\xenoarcheaology\finds\misc.dm"
+#include "code\modules\xenoarcheaology\finds\special.dm"
+#include "code\modules\xenoarcheaology\finds\talking.dm"
+#include "code\modules\xenoarcheaology\tools\ano_device_battery.dm"
+#include "code\modules\xenoarcheaology\tools\artifact_analyser.dm"
+#include "code\modules\xenoarcheaology\tools\artifact_harvester.dm"
+#include "code\modules\xenoarcheaology\tools\artifact_scanner.dm"
+#include "code\modules\xenoarcheaology\tools\coolant_tank.dm"
+#include "code\modules\xenoarcheaology\tools\equipment.dm"
+#include "code\modules\xenoarcheaology\tools\geosample_scanner.dm"
+#include "code\modules\xenoarcheaology\tools\suspension_generator.dm"
+#include "code\modules\xenoarcheaology\tools\tools.dm"
+#include "code\modules\xenoarcheaology\tools\tools_pickaxe.dm"
+#include "code\modules\xenobio\items\extracts.dm"
+#include "code\modules\xenobio\items\slime_objects.dm"
+#include "code\modules\xenobio\items\slimepotions.dm"
+#include "code\modules\xenobio\items\weapons.dm"
+#include "code\modules\xenobio\machinery\processor.dm"
+#include "code\modules\xgm\xgm_gas_data.dm"
+#include "code\modules\xgm\xgm_gas_mixture.dm"
+#include "code\unit_tests\decl_tests.dm"
+#include "code\unit_tests\language_tests.dm"
+#include "code\unit_tests\loadout_tests.dm"
+#include "code\unit_tests\map_tests.dm"
+#include "code\unit_tests\mob_tests.dm"
+#include "code\unit_tests\music_test.dm"
+#include "code\unit_tests\recipe_tests.dm"
+#include "code\unit_tests\research_tests.dm"
+#include "code\unit_tests\sqlite_tests.dm"
+#include "code\unit_tests\subsystem_tests.dm"
+#include "code\unit_tests\unit_test.dm"
+#include "code\unit_tests\zas_tests.dm"
+#include "code\unit_tests\integrated_circuits\arithmetic.dm"
+#include "code\unit_tests\integrated_circuits\circuits.dm"
+#include "code\unit_tests\integrated_circuits\converter.dm"
+#include "code\unit_tests\integrated_circuits\logic.dm"
+#include "code\unit_tests\integrated_circuits\trig.dm"
+#include "code\ZAS\Airflow.dm"
+#include "code\ZAS\Atom.dm"
+#include "code\ZAS\Connection.dm"
+#include "code\ZAS\ConnectionGroup.dm"
+#include "code\ZAS\ConnectionManager.dm"
+#include "code\ZAS\Controller.dm"
+#include "code\ZAS\Debug.dm"
+#include "code\ZAS\Diagnostic.dm"
+#include "code\ZAS\Fire.dm"
+#include "code\ZAS\Phoron.dm"
+#include "code\ZAS\Turf.dm"
+#include "code\ZAS\Variable Settings.dm"
+#include "code\ZAS\Zone.dm"
+#include "interface\interface.dm"
+#include "interface\skin.dmf"
+#include "maps\cynosure\cynosure.dm"
+#include "maps\submaps\_helpers.dm"
+#include "maps\submaps\poi_landmark.dm"
+#include "maps\submaps\engine_submaps\engine_areas.dm"
+#include "maps\submaps\engine_submaps\southern_cross\_engine_submaps.dm"
+#include "maps\submaps\space_submaps\space.dm"
+#include "maps\submaps\space_submaps\vox_derelict\vox_derelict.dm"
+#include "maps\submaps\surface_submaps\mountains\mountains.dm"
+#include "maps\submaps\surface_submaps\mountains\mountains_areas.dm"
+#include "maps\submaps\surface_submaps\plains\plains.dm"
+#include "maps\submaps\surface_submaps\plains\plains_areas.dm"
+#include "maps\submaps\surface_submaps\wilderness\wilderness.dm"
+#include "maps\submaps\surface_submaps\wilderness\wilderness_areas.dm"
+#include "maps\~map_system\maps.dm"
+// END_INCLUDE