diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm
index a5e1563972..0aae436dcb 100644
--- a/code/ATMOSPHERICS/atmospherics.dm
+++ b/code/ATMOSPHERICS/atmospherics.dm
@@ -35,8 +35,8 @@ Pipelines + Other Objects -> Pipe network
var/obj/machinery/atmospherics/node1
var/obj/machinery/atmospherics/node2
-/obj/machinery/atmospherics/New(loc, newdir)
- ..()
+/obj/machinery/atmospherics/Initialize(var/ml, newdir)
+ . = ..()
if(!icon_manager)
icon_manager = new()
if(!isnull(newdir))
diff --git a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm
index cc280d97cc..6b49555a3a 100644
--- a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm
@@ -9,8 +9,8 @@
var/datum/pipe_network/network1
var/datum/pipe_network/network2
-/obj/machinery/atmospherics/binary/New()
- ..()
+/obj/machinery/atmospherics/binary/Initialize()
+ . = ..()
air1 = new
air2 = new
diff --git a/code/ATMOSPHERICS/components/binary_devices/circulator.dm b/code/ATMOSPHERICS/components/binary_devices/circulator.dm
index c5fe955523..cca0593f1a 100644
--- a/code/ATMOSPHERICS/components/binary_devices/circulator.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/circulator.dm
@@ -24,8 +24,8 @@
density = TRUE
-/obj/machinery/atmospherics/binary/circulator/New()
- ..()
+/obj/machinery/atmospherics/binary/circulator/Initialize()
+ . = ..()
desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]."
air1.volume = 400
diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm
index aebea38901..131c7888e8 100644
--- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm
@@ -42,8 +42,10 @@
//2: Do not pass input_pressure_min
//4: Do not pass output_pressure_max
-/obj/machinery/atmospherics/binary/dp_vent_pump/New()
- ..()
+/obj/machinery/atmospherics/binary/dp_vent_pump/Initialize()
+ . = ..()
+ if(frequency)
+ set_frequency(frequency)
air1.volume = ATMOS_DEFAULT_VOLUME_PUMP
air2.volume = ATMOS_DEFAULT_VOLUME_PUMP
icon = null
@@ -55,8 +57,8 @@
/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume
name = "Large Dual Port Air Vent"
-/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume/New()
- ..()
+/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume/Initialize()
+ . = ..()
air1.volume = ATMOS_DEFAULT_VOLUME_PUMP + 800
air2.volume = ATMOS_DEFAULT_VOLUME_PUMP + 800
@@ -194,11 +196,6 @@
return 1
-/obj/machinery/atmospherics/binary/dp_vent_pump/Initialize()
- . = ..()
- if(frequency)
- set_frequency(frequency)
-
/obj/machinery/atmospherics/binary/dp_vent_pump/examine(mob/user)
. = ..()
if(Adjacent(user))
diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
index 7b8b7155f6..54093251d4 100644
--- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
@@ -27,10 +27,12 @@
var/id = null
var/datum/radio_frequency/radio_connection
-/obj/machinery/atmospherics/binary/passive_gate/New()
- ..()
+/obj/machinery/atmospherics/binary/passive_gate/Initialize()
+ . = ..()
air1.volume = ATMOS_DEFAULT_VOLUME_PUMP * 2.5
air2.volume = ATMOS_DEFAULT_VOLUME_PUMP * 2.5
+ if(frequency)
+ set_frequency(frequency)
/obj/machinery/atmospherics/binary/passive_gate/Destroy()
unregister_radio(src, frequency)
@@ -166,14 +168,8 @@
)
radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA)
-
return 1
-/obj/machinery/atmospherics/binary/passive_gate/Initialize()
- . = ..()
- if(frequency)
- set_frequency(frequency)
-
/obj/machinery/atmospherics/binary/passive_gate/receive_signal(datum/signal/signal)
if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command"))
return 0
diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm
index 665d912b00..8d2b4662b3 100644
--- a/code/ATMOSPHERICS/components/binary_devices/pump.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm
@@ -37,10 +37,12 @@ Thus, the two variables affect pump operation are set in New():
var/id = null
var/datum/radio_frequency/radio_connection
-/obj/machinery/atmospherics/binary/pump/New()
- ..()
+/obj/machinery/atmospherics/binary/pump/Initialize()
+ . = ..()
air1.volume = ATMOS_DEFAULT_VOLUME_PUMP
air2.volume = ATMOS_DEFAULT_VOLUME_PUMP
+ if(frequency)
+ set_frequency(frequency)
/obj/machinery/atmospherics/binary/pump/Destroy()
unregister_radio(src, frequency)
@@ -166,11 +168,6 @@ Thus, the two variables affect pump operation are set in New():
return data
-/obj/machinery/atmospherics/binary/pump/Initialize()
- . = ..()
- if(frequency)
- set_frequency(frequency)
-
/obj/machinery/atmospherics/binary/pump/receive_signal(datum/signal/signal)
if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command"))
return 0
diff --git a/code/ATMOSPHERICS/components/omni_devices/filter.dm b/code/ATMOSPHERICS/components/omni_devices/filter.dm
index dae4648790..4310b16705 100644
--- a/code/ATMOSPHERICS/components/omni_devices/filter.dm
+++ b/code/ATMOSPHERICS/components/omni_devices/filter.dm
@@ -20,8 +20,8 @@
var/list/filtering_outputs = list() //maps gasids to gas_mixtures
-/obj/machinery/atmospherics/omni/atmos_filter/New()
- ..()
+/obj/machinery/atmospherics/omni/atmos_filter/Initialize()
+ . = ..()
rebuild_filtering_list()
for(var/datum/omni_port/P in ports)
P.air.volume = ATMOS_DEFAULT_VOLUME_FILTER
diff --git a/code/ATMOSPHERICS/components/omni_devices/mixer.dm b/code/ATMOSPHERICS/components/omni_devices/mixer.dm
index 077be63b30..7f422df44a 100644
--- a/code/ATMOSPHERICS/components/omni_devices/mixer.dm
+++ b/code/ATMOSPHERICS/components/omni_devices/mixer.dm
@@ -24,8 +24,8 @@
var/list/mixing_inputs = list()
-/obj/machinery/atmospherics/omni/mixer/New()
- ..()
+/obj/machinery/atmospherics/omni/mixer/Initialize()
+ . = ..()
if(mapper_set())
var/con = 0
for(var/datum/omni_port/P in ports)
diff --git a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm
index f0c5498fb3..f19fc58fcf 100644
--- a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm
+++ b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm
@@ -25,8 +25,8 @@
var/list/ports = new()
-/obj/machinery/atmospherics/omni/New()
- ..()
+/obj/machinery/atmospherics/omni/Initialize()
+ . = ..()
icon_state = "base"
ports = new()
diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm
index 48085569bc..7e76971377 100755
--- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm
+++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm
@@ -39,8 +39,8 @@
if(frequency)
radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA)
-/obj/machinery/atmospherics/trinary/atmos_filter/New()
- ..()
+/obj/machinery/atmospherics/trinary/atmos_filter/Initialize()
+ . = ..()
switch(filter_type)
if(0) //removing hydrocarbons
filtered_out = list("phoron")
@@ -56,6 +56,8 @@
air1.volume = ATMOS_DEFAULT_VOLUME_FILTER
air2.volume = ATMOS_DEFAULT_VOLUME_FILTER
air3.volume = ATMOS_DEFAULT_VOLUME_FILTER
+ if(frequency)
+ set_frequency(frequency)
/obj/machinery/atmospherics/trinary/atmos_filter/Destroy()
unregister_radio(src, frequency)
@@ -106,11 +108,6 @@
return 1
-/obj/machinery/atmospherics/trinary/atmos_filter/Initialize()
- . = ..()
- if(frequency)
- set_frequency(frequency)
-
/obj/machinery/atmospherics/trinary/atmos_filter/attack_hand(user) // -- TLE
if(..())
return
diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm
index 8cecbc6c65..87b1eea40c 100644
--- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm
+++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm
@@ -37,8 +37,8 @@
icon_state += "off"
update_use_power(USE_POWER_OFF)
-/obj/machinery/atmospherics/trinary/mixer/New()
- ..()
+/obj/machinery/atmospherics/trinary/mixer/Initialize()
+ . = ..()
air1.volume = ATMOS_DEFAULT_VOLUME_MIXER
air2.volume = ATMOS_DEFAULT_VOLUME_MIXER
air3.volume = ATMOS_DEFAULT_VOLUME_MIXER * 1.5
diff --git a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm
index eaae718b2e..538451bbf6 100644
--- a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm
+++ b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm
@@ -17,8 +17,8 @@
var/datum/pipe_network/network2
var/datum/pipe_network/network3
-/obj/machinery/atmospherics/trinary/New()
- ..()
+/obj/machinery/atmospherics/trinary/Initialize()
+ . = ..()
air1 = new
air2 = new
diff --git a/code/ATMOSPHERICS/components/unary/outlet_injector.dm b/code/ATMOSPHERICS/components/unary/outlet_injector.dm
index b4991c0e5d..951426f0bc 100644
--- a/code/ATMOSPHERICS/components/unary/outlet_injector.dm
+++ b/code/ATMOSPHERICS/components/unary/outlet_injector.dm
@@ -24,9 +24,11 @@
level = 1
-/obj/machinery/atmospherics/unary/outlet_injector/New()
- ..()
+/obj/machinery/atmospherics/unary/outlet_injector/Initialize()
+ . = ..()
air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 500 //Give it a small reservoir for injecting. Also allows it to have a higher flow rate limit than vent pumps, to differentiate injectors a bit more.
+ if(frequency)
+ set_frequency(frequency)
/obj/machinery/atmospherics/unary/outlet_injector/Destroy()
unregister_radio(src, frequency)
@@ -122,11 +124,6 @@
return 1
-/obj/machinery/atmospherics/unary/outlet_injector/Initialize()
- . = ..()
- if(frequency)
- set_frequency(frequency)
-
/obj/machinery/atmospherics/unary/outlet_injector/receive_signal(datum/signal/signal)
if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command"))
return 0
diff --git a/code/ATMOSPHERICS/components/unary/unary_base.dm b/code/ATMOSPHERICS/components/unary/unary_base.dm
index 12d6822ad4..a20a860b02 100644
--- a/code/ATMOSPHERICS/components/unary/unary_base.dm
+++ b/code/ATMOSPHERICS/components/unary/unary_base.dm
@@ -13,8 +13,8 @@
var/welded = 0 //defining this here for ventcrawl stuff
-/obj/machinery/atmospherics/unary/New()
- ..()
+/obj/machinery/atmospherics/unary/Initialize()
+ . = ..()
air_contents = new
air_contents.volume = 200
diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm
index 191478b60e..65d0cbc662 100644
--- a/code/ATMOSPHERICS/components/unary/vent_pump.dm
+++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm
@@ -79,9 +79,6 @@
/obj/machinery/atmospherics/unary/vent_pump/Initialize()
. = ..()
soundloop = new(list(src), FALSE)
-
-/obj/machinery/atmospherics/unary/vent_pump/New()
- ..()
air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP
icon = null
@@ -109,8 +106,8 @@
icon_connect_type = "-aux"
connect_types = CONNECT_TYPE_AUX //connects to aux pipes
-/obj/machinery/atmospherics/unary/vent_pump/high_volume/New()
- ..()
+/obj/machinery/atmospherics/unary/vent_pump/high_volume/Initialize()
+ . = ..()
air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 800
// VOREStation Edit Start - Wall mounted vents
@@ -134,8 +131,8 @@
power_channel = ENVIRON
power_rating = 30000 //15 kW ~ 20 HP
-/obj/machinery/atmospherics/unary/vent_pump/engine/New()
- ..()
+/obj/machinery/atmospherics/unary/vent_pump/engine/Initialize()
+ . = ..()
air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 500 //meant to match air injector
/obj/machinery/atmospherics/unary/vent_pump/update_icon(var/safety = 0)
diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
index 8b481a6d8c..129afcbad9 100644
--- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
+++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
@@ -32,8 +32,8 @@
use_power = USE_POWER_IDLE
icon_state = "map_scrubber_on"
-/obj/machinery/atmospherics/unary/vent_scrubber/New()
- ..()
+/obj/machinery/atmospherics/unary/vent_scrubber/Initialize()
+ . = ..()
air_contents.volume = ATMOS_DEFAULT_VOLUME_FILTER
icon = null
diff --git a/code/ATMOSPHERICS/pipes/he_pipes.dm b/code/ATMOSPHERICS/pipes/he_pipes.dm
index 89ecf1e2bb..11802b9f64 100644
--- a/code/ATMOSPHERICS/pipes/he_pipes.dm
+++ b/code/ATMOSPHERICS/pipes/he_pipes.dm
@@ -23,8 +23,8 @@
buckle_lying = 1
// BubbleWrap
-/obj/machinery/atmospherics/pipe/simple/heat_exchanging/New()
- ..()
+/obj/machinery/atmospherics/pipe/simple/heat_exchanging/Initialize()
+ . = ..()
// BubbleWrap END
color = "#404040" //we don't make use of the fancy overlay system for colours, use this to set the default.
diff --git a/code/ATMOSPHERICS/pipes/manifold.dm b/code/ATMOSPHERICS/pipes/manifold.dm
index a02f0e66de..88cb10994e 100644
--- a/code/ATMOSPHERICS/pipes/manifold.dm
+++ b/code/ATMOSPHERICS/pipes/manifold.dm
@@ -19,8 +19,8 @@
level = 1
-/obj/machinery/atmospherics/pipe/manifold/New()
- ..()
+/obj/machinery/atmospherics/pipe/manifold/Initialize()
+ . = ..()
alpha = 255
icon = null
diff --git a/code/ATMOSPHERICS/pipes/manifold4w.dm b/code/ATMOSPHERICS/pipes/manifold4w.dm
index eac8494a65..3773ebce73 100644
--- a/code/ATMOSPHERICS/pipes/manifold4w.dm
+++ b/code/ATMOSPHERICS/pipes/manifold4w.dm
@@ -20,8 +20,8 @@
level = 1
-/obj/machinery/atmospherics/pipe/manifold4w/New()
- ..()
+/obj/machinery/atmospherics/pipe/manifold4w/Initialize()
+ . = ..()
alpha = 255
icon = null
diff --git a/code/ATMOSPHERICS/pipes/pipe_base.dm b/code/ATMOSPHERICS/pipes/pipe_base.dm
index 0d687b8db0..04b4595421 100644
--- a/code/ATMOSPHERICS/pipes/pipe_base.dm
+++ b/code/ATMOSPHERICS/pipes/pipe_base.dm
@@ -24,10 +24,10 @@
/obj/machinery/atmospherics/pipe/drain_power()
return -1
-/obj/machinery/atmospherics/pipe/New()
+/obj/machinery/atmospherics/pipe/Initialize()
if(istype(get_turf(src), /turf/simulated/wall) || istype(get_turf(src), /turf/simulated/shuttle/wall) || istype(get_turf(src), /turf/unsimulated/wall))
level = 1
- ..()
+ . = ..()
/obj/machinery/atmospherics/pipe/hides_under_flooring()
return level != 2
diff --git a/code/ATMOSPHERICS/pipes/simple.dm b/code/ATMOSPHERICS/pipes/simple.dm
index 1f427fb151..2d81d4d0c0 100644
--- a/code/ATMOSPHERICS/pipes/simple.dm
+++ b/code/ATMOSPHERICS/pipes/simple.dm
@@ -26,8 +26,8 @@
level = 1
-/obj/machinery/atmospherics/pipe/simple/New()
- ..()
+/obj/machinery/atmospherics/pipe/simple/Initialize()
+ . = ..()
// Pipe colors and icon states are handled by an image cache - so color and icon should
// be null. For mapping purposes color is defined in the object definitions.
diff --git a/code/ATMOSPHERICS/pipes/tank.dm b/code/ATMOSPHERICS/pipes/tank.dm
index 6380786288..89a1d06d6a 100644
--- a/code/ATMOSPHERICS/pipes/tank.dm
+++ b/code/ATMOSPHERICS/pipes/tank.dm
@@ -18,9 +18,9 @@
pipe_flags = PIPING_DEFAULT_LAYER_ONLY
density = TRUE
-/obj/machinery/atmospherics/pipe/tank/New()
+/obj/machinery/atmospherics/pipe/tank/Initialize()
icon_state = "air"
- ..()
+ . = ..()
/obj/machinery/atmospherics/pipe/tank/init_dir()
initialize_directions = dir
@@ -74,30 +74,25 @@
name = "Pressure Tank (Air)"
icon_state = "air_map"
-/obj/machinery/atmospherics/pipe/tank/air/New()
+/obj/machinery/atmospherics/pipe/tank/air/Initialize()
air_temporary = new
air_temporary.volume = volume
air_temporary.temperature = T20C
-
air_temporary.adjust_multi("oxygen", (start_pressure*O2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature), \
"nitrogen",(start_pressure*N2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature))
-
-
- ..()
+ . = ..()
icon_state = "air"
/obj/machinery/atmospherics/pipe/tank/oxygen
name = "Pressure Tank (Oxygen)"
icon_state = "o2_map"
-/obj/machinery/atmospherics/pipe/tank/oxygen/New()
+/obj/machinery/atmospherics/pipe/tank/oxygen/Initialize()
air_temporary = new
air_temporary.volume = volume
air_temporary.temperature = T20C
-
air_temporary.adjust_gas("oxygen", (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature))
-
- ..()
+ . = ..()
icon_state = "o2"
/obj/machinery/atmospherics/pipe/tank/nitrogen
@@ -105,28 +100,24 @@
icon_state = "n2_map"
volume = 40000 //Vorestation edit
-/obj/machinery/atmospherics/pipe/tank/nitrogen/New()
+/obj/machinery/atmospherics/pipe/tank/nitrogen/Initialize()
air_temporary = new
air_temporary.volume = volume
air_temporary.temperature = T20C
-
air_temporary.adjust_gas("nitrogen", (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature))
-
- ..()
+ . = ..()
icon_state = "n2"
/obj/machinery/atmospherics/pipe/tank/carbon_dioxide
name = "Pressure Tank (Carbon Dioxide)"
icon_state = "co2_map"
-/obj/machinery/atmospherics/pipe/tank/carbon_dioxide/New()
+/obj/machinery/atmospherics/pipe/tank/carbon_dioxide/Initialize()
air_temporary = new
air_temporary.volume = volume
air_temporary.temperature = T20C
-
air_temporary.adjust_gas("carbon_dioxide", (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature))
-
- ..()
+ . = ..()
icon_state = "co2"
/obj/machinery/atmospherics/pipe/tank/phoron
@@ -134,26 +125,22 @@
icon_state = "phoron_map"
connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_FUEL
-/obj/machinery/atmospherics/pipe/tank/phoron/New()
+/obj/machinery/atmospherics/pipe/tank/phoron/Initialize()
air_temporary = new
air_temporary.volume = volume
air_temporary.temperature = T20C
-
air_temporary.adjust_gas("phoron", (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature))
-
- ..()
+ . = ..()
icon_state = "phoron"
/obj/machinery/atmospherics/pipe/tank/nitrous_oxide
name = "Pressure Tank (Nitrous Oxide)"
icon_state = "n2o_map"
-/obj/machinery/atmospherics/pipe/tank/nitrous_oxide/New()
+/obj/machinery/atmospherics/pipe/tank/nitrous_oxide/Initialize()
air_temporary = new
air_temporary.volume = volume
air_temporary.temperature = T0C
-
air_temporary.adjust_gas("nitrous_oxide", (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature))
-
- ..()
+ . = ..()
icon_state = "n2o"
diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm
index 015ffa36a9..cd765f0757 100644
--- a/code/ZAS/Fire.dm
+++ b/code/ZAS/Fire.dm
@@ -179,8 +179,8 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
animate(src, color = fire_color(air_contents.temperature), 5)
set_light(l_color = color)
-/obj/fire/New(newLoc,fl)
- ..()
+/obj/fire/Initialize(var/ml, fl)
+ . = ..()
if(!istype(loc, /turf))
qdel(src)
diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm
index 8ed8125dac..0c93c81e28 100644
--- a/code/__defines/subsystems.dm
+++ b/code/__defines/subsystems.dm
@@ -19,9 +19,10 @@
#define TIMER_ID_NULL -1
-#define INITIALIZATION_INSSATOMS 0 //New should not call Initialize
-#define INITIALIZATION_INNEW_MAPLOAD 1 //New should call Initialize(TRUE)
-#define INITIALIZATION_INNEW_REGULAR 2 //New should call Initialize(FALSE)
+#define INITIALIZATION_INSSATOMS 0 //New should not call Initialize
+#define INITIALIZATION_INSSATOMS_LATE 1 //New should not call Initialize; after the first pass is complete (handled differently)
+#define INITIALIZATION_INNEW_MAPLOAD 2 //New should call Initialize(TRUE)
+#define INITIALIZATION_INNEW_REGULAR 3 //New should call Initialize(FALSE)
#define INITIALIZE_HINT_NORMAL 0 //Nothing happens
#define INITIALIZE_HINT_LATELOAD 1 //Call LateInitialize
diff --git a/code/_helpers/turfs.dm b/code/_helpers/turfs.dm
index cc90829619..e609d85289 100644
--- a/code/_helpers/turfs.dm
+++ b/code/_helpers/turfs.dm
@@ -111,7 +111,7 @@
if(istype(T,/turf/simulated/shuttle))
shuttlework = 1
var/turf/simulated/shuttle/SS = T
- if(!SS.landed_holder) SS.landed_holder = new(turf = SS)
+ if(!SS.landed_holder) SS.landed_holder = new(SS)
X = SS.landed_holder.land_on(B)
//Generic non-shuttle turf move.
diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm
index 9dbc7c0d99..17d953fcff 100644
--- a/code/_helpers/unsorted.dm
+++ b/code/_helpers/unsorted.dm
@@ -720,7 +720,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
if(istype(T,/turf/simulated/shuttle))
shuttlework = 1
var/turf/simulated/shuttle/SS = T
- if(!SS.landed_holder) SS.landed_holder = new(turf = SS)
+ if(!SS.landed_holder) SS.landed_holder = new(SS)
X = SS.landed_holder.land_on(B)
//Generic non-shuttle turf move.
@@ -1192,8 +1192,9 @@ var/mob/dview/dview_mob = new
color = origin.color
set_light(origin.light_range, origin.light_power, origin.light_color)
-/mob/dview/New()
- ..()
+INITIALIZE_IMMEDIATE(/mob/dview)
+/mob/dview/Initialize()
+ . = ..()
// We don't want to be in any mob lists; we're a dummy not a mob.
mob_list -= src
if(stat == DEAD)
diff --git a/code/_onclick/hud/ability_screen_objects.dm b/code/_onclick/hud/ability_screen_objects.dm
index cb500b4fe3..64465f0429 100644
--- a/code/_onclick/hud/ability_screen_objects.dm
+++ b/code/_onclick/hud/ability_screen_objects.dm
@@ -12,12 +12,13 @@
var/mob/my_mob = null // The mob that possesses this hud object.
-/obj/screen/movable/ability_master/New(owner)
+/obj/screen/movable/ability_master/Initialize(ml, owner)
+ . = ..()
if(owner)
my_mob = owner
update_abilities(0, owner)
else
- message_admins("ERROR: ability_master's New() was not given an owner argument. This is a bug.")
+ message_admins("ERROR: ability_master's Initialize() was not given an owner argument. This is a bug.")
/obj/screen/movable/ability_master/Destroy()
. = ..()
@@ -178,10 +179,16 @@
ability_master.toggle_open(1)
client.screen -= ability_master
+<<<<<<< HEAD
/mob/New()
..()
if(!ability_master) //VOREStation Edit: S H A D E K I N
ability_master = new /obj/screen/movable/ability_master(src)
+=======
+/mob/Initialize()
+ . = ..()
+ ability_master = new /obj/screen/movable/ability_master(null, src)
+>>>>>>> 2f0a618d451... /atom New() => Initialize() [MDB IGNORE] (#8298)
///////////ACTUAL ABILITIES////////////
//This is what you click to do things//
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index 00446add6d..910646f261 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -650,8 +650,9 @@
plane = PLANE_PLAYER_HUD_ABOVE
var/client/holder
-/obj/screen/splash/New(client/C, visible)
- . = ..()
+INITIALIZE_IMMEDIATE(/obj/screen/splash)
+/obj/screen/splash/Initialize(var/ml, client/C, visible)
+ . = ..(ml)
holder = C
@@ -719,6 +720,9 @@
var/obj/screen/mapper/extras_holder/extras_holder
/obj/screen/movable/mapper_holder/Initialize(mapload, newowner)
+
+ . = ..()
+
owner = newowner
mask_full = new(src) // Full white square mask
@@ -806,8 +810,8 @@
mouse_opacity = 0
var/obj/screen/movable/mapper_holder/parent
-/obj/screen/mapper/New()
- ..()
+/obj/screen/mapper/Initialize()
+ . = ..()
parent = loc
/obj/screen/mapper/Destroy()
diff --git a/code/controllers/emergency_shuttle_controller.dm b/code/controllers/emergency_shuttle_controller.dm
index b5fa776f7f..41c57ecb72 100644
--- a/code/controllers/emergency_shuttle_controller.dm
+++ b/code/controllers/emergency_shuttle_controller.dm
@@ -251,8 +251,8 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle = new
layer = TURF_LAYER
plane = TURF_PLANE
-/obj/effect/bgstar/New()
- ..()
+/obj/effect/bgstar/Initialize()
+ . = ..()
pixel_x += rand(-2,30)
pixel_y += rand(-2,30)
var/starnum = pick("1", "1", "1", "2", "3", "4")
diff --git a/code/controllers/subsystems/atoms.dm b/code/controllers/subsystems/atoms.dm
index a62c5265c5..75d097e611 100644
--- a/code/controllers/subsystems/atoms.dm
+++ b/code/controllers/subsystems/atoms.dm
@@ -8,33 +8,33 @@ SUBSYSTEM_DEF(atoms)
init_order = INIT_ORDER_ATOMS
flags = SS_NO_FIRE
- var/static/initialized = INITIALIZATION_INSSATOMS
- // var/list/created_atoms // This is never used, so don't bother. ~Leshana
- var/static/old_initialized
+ // override and GetArguments() exists for mod-override/downstream hook functionality.
+ // Useful for total-overhaul type modifications.
+ var/adjust_init_arguments = FALSE
+
+ var/atom_init_stage = INITIALIZATION_INSSATOMS
+ var/old_init_stage
var/list/late_loaders
- var/list/created_atoms
-
var/list/BadInitializeCalls = list()
/datum/controller/subsystem/atoms/Initialize(timeofday)
setupgenetics() //to set the mutations' place in structural enzymes, so initializers know where to put mutations.
- initialized = INITIALIZATION_INNEW_MAPLOAD
- to_world_log("Initializing objects")
- admin_notice("Initializing objects", R_DEBUG)
+ atom_init_stage = INITIALIZATION_INNEW_MAPLOAD
InitializeAtoms()
return ..()
-/datum/controller/subsystem/atoms/proc/InitializeAtoms(list/atoms)
- if(initialized == INITIALIZATION_INSSATOMS)
+/datum/controller/subsystem/atoms/proc/InitializeAtoms(var/list/supplied_atoms)
+
+ if(atom_init_stage <= INITIALIZATION_INSSATOMS_LATE)
return
- initialized = INITIALIZATION_INNEW_MAPLOAD
+ atom_init_stage = INITIALIZATION_INNEW_MAPLOAD
LAZYINITLIST(late_loaders)
- var/count
var/list/mapload_arg = list(TRUE)
+<<<<<<< HEAD
if(atoms)
created_atoms = list()
count = atoms.len
@@ -42,32 +42,47 @@ SUBSYSTEM_DEF(atoms)
if(!A.initialized)
if(InitAtom(A, mapload_arg))
atoms -= A
- CHECK_TICK
- else
- count = 0
- for(var/atom/A in world) // This must be world, since this operation adds all the atoms to their specific lists.
+=======
+ var/count = LAZYLEN(supplied_atoms)
+ if(count)
+ while(supplied_atoms.len)
+ var/atom/A = supplied_atoms[supplied_atoms.len]
+ supplied_atoms.len--
if(!A.initialized)
- InitAtom(A, mapload_arg)
+ InitAtom(A, GetArguments(A, mapload_arg))
+>>>>>>> 2f0a618d451... /atom New() => Initialize() [MDB IGNORE] (#8298)
+ CHECK_TICK
+ else if(!subsystem_initialized)
+ // If wondering why not just store all atoms in a list and use the block above: that turns out unbearably expensive.
+ // Instead, atoms without extra arguments in New created on server start are fished out of world directly.
+ // We do this exactly once.
+
+ for(var/atom/A in world)
+ if(!A.initialized)
+ InitAtom(A, GetArguments(A, mapload_arg, FALSE))
++count
CHECK_TICK
- log_world("Initialized [count] atoms")
+ report_progress("Initialized [count] atom\s")
- initialized = INITIALIZATION_INNEW_REGULAR
+ atom_init_stage = INITIALIZATION_INNEW_REGULAR
if(late_loaders.len)
+<<<<<<< HEAD
for(var/atom/A as anything in late_loaders)
A.LateInitialize()
CHECK_TICK
testing("Late initialized [late_loaders.len] atoms")
+=======
+ for(var/I in late_loaders)
+ var/atom/A = I
+ A.LateInitialize(arglist(late_loaders[A]))
+ report_progress("Late initialized [late_loaders.len] atom\s")
+>>>>>>> 2f0a618d451... /atom New() => Initialize() [MDB IGNORE] (#8298)
late_loaders.Cut()
- // Nothing ever checks return value of this proc, so don't bother. If this ever changes fix code in /atom/New() ~Leshana
- // if(atoms)
- // . = created_atoms + atoms
- // created_atoms = null
-
/datum/controller/subsystem/atoms/proc/InitAtom(atom/A, list/arguments)
+ LAZYREMOVE(global.pre_init_created_atoms, A)
var/the_type = A.type
if(QDELING(A))
BadInitializeCalls[the_type] |= BAD_INIT_QDEL_BEFORE
@@ -86,9 +101,9 @@ SUBSYSTEM_DEF(atoms)
switch(result)
if(INITIALIZE_HINT_LATELOAD)
if(arguments[1]) //mapload
- late_loaders += A
+ late_loaders[A] = arguments
else
- A.LateInitialize()
+ A.LateInitialize(arglist(arguments))
if(INITIALIZE_HINT_QDEL)
qdel(A)
qdeleted = TRUE
@@ -102,18 +117,37 @@ SUBSYSTEM_DEF(atoms)
return qdeleted || QDELING(A)
+// override and GetArguments() exists for mod-override/downstream hook functionality.
+// Useful for total-overhaul type modifications.
+/atom/proc/AdjustInitializeArguments(list/arguments)
+ // Lists are passed by reference so can simply modify the arguments list without returning it
+
+/datum/controller/subsystem/atoms/proc/GetArguments(atom/A, list/mapload_arg, created=TRUE)
+ if(!created && !adjust_init_arguments)
+ return mapload_arg // Performance optimization. Nothing to do.
+ var/list/arguments = mapload_arg.Copy()
+ var/extra_args = LAZYACCESS(global.pre_init_created_atoms, A)
+ if(created && extra_args)
+ arguments += extra_args
+ if(adjust_init_arguments)
+ A.AdjustInitializeArguments(arguments)
+ return arguments
+
+/datum/controller/subsystem/atoms/stat_entry(msg)
+ ..("Bad Initialize Calls:[BadInitializeCalls.len]")
+
/datum/controller/subsystem/atoms/proc/map_loader_begin()
- old_initialized = initialized
- initialized = INITIALIZATION_INSSATOMS
+ old_init_stage = atom_init_stage
+ atom_init_stage = INITIALIZATION_INSSATOMS_LATE
/datum/controller/subsystem/atoms/proc/map_loader_stop()
- initialized = old_initialized
+ atom_init_stage = old_init_stage
/datum/controller/subsystem/atoms/Recover()
- initialized = SSatoms.initialized
- if(initialized == INITIALIZATION_INNEW_MAPLOAD)
+ atom_init_stage = SSatoms.atom_init_stage
+ if(atom_init_stage == INITIALIZATION_INNEW_MAPLOAD)
InitializeAtoms()
- old_initialized = SSatoms.old_initialized
+ old_init_stage = SSatoms.old_init_stage
BadInitializeCalls = SSatoms.BadInitializeCalls
/datum/controller/subsystem/atoms/proc/InitLog()
diff --git a/code/controllers/subsystems/open_space.dm b/code/controllers/subsystems/open_space.dm
new file mode 100644
index 0000000000..735a221f56
--- /dev/null
+++ b/code/controllers/subsystems/open_space.dm
@@ -0,0 +1,96 @@
+//
+// Controller handling icon updates of open space turfs
+//
+
+GLOBAL_VAR_INIT(open_space_initialised, FALSE)
+
+SUBSYSTEM_DEF(open_space)
+ name = "Open Space"
+ wait = 2 // 5 times per second.
+ init_order = INIT_ORDER_OPENSPACE
+ var/list/turfs_to_process = list() // List of turfs queued for update.
+ var/list/turfs_to_process_old = null // List of turfs currently being updated.
+ var/counter = 1 // Can't use .len because we need to iterate in order
+ var/static/image/over_OS_darkness // Image overlayed over the bottom turf with stuff in it.
+
+/datum/controller/subsystem/open_space/Initialize(timeofday)
+ over_OS_darkness = image('icons/turf/open_space.dmi', "black_open")
+ over_OS_darkness.plane = OVER_OPENSPACE_PLANE
+ over_OS_darkness.layer = MOB_LAYER
+ initialize_open_space()
+ // Pre-process open space turfs once before the round starts.
+ fire(FALSE, TRUE)
+ return ..()
+
+/datum/controller/subsystem/open_space/Recover()
+ flags |= SS_NO_INIT // Make extra sure we don't initialize twice.
+ . = ..()
+
+/datum/controller/subsystem/open_space/fire(resumed = 0, init_tick_checks = FALSE)
+ // We use a different list so any additions to the update lists during a delay from MC_TICK_CHECK
+ // don't cause things to be cut from the list without being updated.
+
+ //If we're not resuming, this must mean it's a new iteration so we have to grab the turfs
+ if (!resumed)
+ src.counter = 1
+ src.turfs_to_process_old = turfs_to_process
+ turfs_to_process = list()
+
+ //cache for sanic speed (lists are references anyways)
+ var/list/turfs_to_process_old = src.turfs_to_process_old
+ var/counter = src.counter
+ while(counter <= turfs_to_process_old.len)
+ var/turf/T = turfs_to_process_old[counter]
+ counter += 1
+ if(!QDELETED(T))
+ update_turf(T)
+ if (init_tick_checks)
+ CHECK_TICK // Used during initialization processing
+ else if (MC_TICK_CHECK)
+ src.counter = counter // Save for when we're resumed
+ return // Used during normal MC processing.
+
+/datum/controller/subsystem/open_space/proc/update_turf(var/turf/T)
+ for(var/atom/movable/A in T)
+ A.fall()
+ T.update_icon()
+
+/datum/controller/subsystem/open_space/proc/add_turf(var/turf/T, var/recursive = 0)
+ ASSERT(isturf(T))
+ // Check for multiple additions
+ // Pointless to process the same turf twice. But we need to push it to the end of the list
+ // because any turfs below it need to process first.
+ turfs_to_process -= T
+ turfs_to_process += T
+ if(recursive > 0)
+ var/turf/above = GetAbove(T)
+ if(above && isopenspace(above))
+ add_turf(above, recursive)
+
+// Queue the initial updates of open space turfs when the game starts. This will lag!
+/datum/controller/subsystem/open_space/proc/initialize_open_space()
+ // Do initial setup from bottom to top.
+ for(var/zlevel = 1 to world.maxz)
+ for(var/turf/simulated/open/T in block(locate(1, 1, zlevel), locate(world.maxx, world.maxy, zlevel)))
+ add_turf(T)
+ CHECK_TICK
+ GLOB.open_space_initialised = TRUE
+
+/datum/controller/subsystem/open_space/stat_entry(msg_prefix)
+ return ..("T [turfs_to_process.len]")
+
+/obj/update_icon()
+ . = ..()
+ if(GLOB.open_space_initialised && !invisibility && isturf(loc))
+ var/turf/T = GetAbove(src)
+ if(isopenspace(T))
+ // log_debug("[T] ([T.x],[T.y],[T.z]) queued for update for [src].update_icon()")
+ SSopen_space.add_turf(T, 1)
+
+// We probably should hook Destroy() If we can think of something more efficient, lets hear it.
+/obj/Destroy()
+ if(GLOB.open_space_initialised && !invisibility && isturf(loc))
+ var/turf/T = GetAbove(src)
+ if(isopenspace(T))
+ SSopen_space.add_turf(T, 1)
+ . = ..() // Important that this be at the bottom, or we will have been moved to nullspace.
diff --git a/code/controllers/subsystems/ticker.dm b/code/controllers/subsystems/ticker.dm
index d3bb35e88d..f2776508e2 100644
--- a/code/controllers/subsystems/ticker.dm
+++ b/code/controllers/subsystems/ticker.dm
@@ -411,7 +411,7 @@ var/global/datum/controller/subsystem/ticker/ticker
if(new_char)
qdel(player)
if(new_char.client)
- var/obj/screen/splash/S = new(new_char.client, TRUE)
+ var/obj/screen/splash/S = new(null, new_char.client, TRUE)
S.Fade(TRUE)
// If they're a carbon, they can get manifested
diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm
index da3e8e1baf..9ba4923aa0 100644
--- a/code/controllers/verbs.dm
+++ b/code/controllers/verbs.dm
@@ -7,8 +7,9 @@
blocks_emissive = FALSE
var/target
-/obj/effect/statclick/New(loc, text, target) //Don't port this to Initialize it's too critical
- ..()
+INITIALIZE_IMMEDIATE(/obj/effect/statclick)
+/obj/effect/statclick/Initialize(ml, text, target)
+ . = ..(ml)
name = text
src.target = target
diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 96ce6d7356..506165642e 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -47,9 +47,9 @@
/obj/item/weapon/soap/deluxe
icon_state = "soapdeluxe"
-/obj/item/weapon/soap/deluxe/New()
+/obj/item/weapon/soap/deluxe/Initialize()
desc = "A deluxe Waffle Co. brand bar of soap. Smells of [pick("lavender", "vanilla", "strawberry", "chocolate" ,"space")]."
- ..()
+ . = ..()
/obj/item/weapon/soap/syndie
desc = "An untrustworthy bar of soap. Smells of fear."
@@ -406,10 +406,10 @@
drop_sound = 'sound/items/drop/component.ogg'
pickup_sound = 'sound/items/pickup/component.ogg'
-/obj/item/weapon/stock_parts/New()
+/obj/item/weapon/stock_parts/Initialize()
src.pixel_x = rand(-5.0, 5)
src.pixel_y = rand(-5.0, 5)
- ..()
+ . = ..()
/obj/item/weapon/stock_parts/get_rating()
return rating
@@ -434,7 +434,7 @@
var/charge = 0
var/max_charge = 1000
-/obj/item/weapon/stock_parts/capacitor/New()
+/obj/item/weapon/stock_parts/capacitor/Initialize()
. = ..()
max_charge *= rating
diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index 9127b34e66..e73b80ca03 100755
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -1832,24 +1832,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
icon_state = "Tactical"
ambience = AMBIENCE_HIGHSEC
-
-/*
- New()
- ..()
-
- spawn(10) //let objects set up first
- for(var/turf/turfToGrayscale in src)
- if(turfToGrayscale.icon)
- var/icon/newIcon = icon(turfToGrayscale.icon)
- newIcon.GrayScale()
- turfToGrayscale.icon = newIcon
- for(var/obj/objectToGrayscale in turfToGrayscale) //1 level deep, means tables, apcs, locker, etc, but not locker contents
- if(objectToGrayscale.icon)
- var/icon/newIcon = icon(objectToGrayscale.icon)
- newIcon.GrayScale()
- objectToGrayscale.icon = newIcon
-*/
-
/area/security/nuke_storage
name = "\improper Vault"
icon_state = "nuke_storage"
diff --git a/code/game/area/ai_monitored.dm b/code/game/area/ai_monitored.dm
index 84f2c8eb4e..fc218150d5 100644
--- a/code/game/area/ai_monitored.dm
+++ b/code/game/area/ai_monitored.dm
@@ -2,17 +2,12 @@
name = "AI Monitored Area"
var/obj/machinery/camera/motioncamera = null
-
-/area/ai_monitored/New()
- ..()
- // locate and store the motioncamera
- spawn (20) // spawn on a delay to let turfs/objs load
- for (var/obj/machinery/camera/M in src)
- if(M.isMotion())
- motioncamera = M
- M.area_motion = src
- return
- return
+/area/ai_monitored/LateInitialize()
+ . = ..()
+ for(var/obj/machinery/camera/M in src)
+ if(M.isMotion())
+ motioncamera = M
+ M.area_motion = src
/area/ai_monitored/Entered(atom/movable/O)
..()
@@ -22,5 +17,3 @@
/area/ai_monitored/Exited(atom/movable/O)
if (ismob(O) && motioncamera)
motioncamera.lostTarget(O)
-
-
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index e11bf6e2c2..67ffb298d2 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -19,7 +19,7 @@
var/debug = 0
var/requires_power = 1
- var/always_unpowered = 0 //this gets overriden to 1 for space in area/New()
+ var/always_unpowered = 0 //this gets overriden to 1 for space in area/Initialize()
// Power channel status - Is it currently energized?
var/power_equip = TRUE
@@ -54,10 +54,13 @@
var/no_spoilers = FALSE // If true, makes it much more difficult to see what is inside an area with things like mesons.
var/soundproofed = FALSE // If true, blocks sounds from other areas and prevents hearers on other areas from hearing the sounds within.
+/area/New()
+ icon_state = ""
+ luminosity = !dynamic_lighting
+ ..()
+
/area/Initialize()
. = ..()
- luminosity = !(dynamic_lighting)
- icon_state = ""
return INITIALIZE_HINT_LATELOAD // Areas tradiationally are initialized AFTER other atoms.
/area/LateInitialize()
@@ -69,6 +72,10 @@
if(no_spoilers)
set_spoiler_obfuscation(TRUE)
+ icon = 'icons/turf/areas.dmi'
+ icon_state = "white"
+ blend_mode = BLEND_MULTIPLY
+
// Changes the area of T to A. Do not do this manually.
// Area is expected to be a non-null instance.
/proc/ChangeArea(var/turf/T, var/area/A)
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 55b6938a7c..01be8f93d4 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -50,7 +50,9 @@
/// The chat color var, without alpha.
var/chat_color_hover
+var/global/list/pre_init_created_atoms // atom creation ordering means some stuff is trying to init before SSatoms exists, temp workaround
/atom/New(loc, ...)
+<<<<<<< HEAD
// Don't call ..() unless /datum/New() ever exists
// During dynamic mapload (reader.dm) this assigns the var overrides from the .dmm file
@@ -71,6 +73,22 @@
// var/list/created = SSatoms.created_atoms
// if(created)
// created += src
+=======
+ //atom creation method that preloads variables at creation
+ if(global.use_preloader && (src.type == global._preloader.target_path))//in case the instanciated atom is creating other atoms in New()
+ global._preloader.load(src)
+
+ var/do_initialize = SSatoms?.atom_init_stage
+ if(do_initialize > INITIALIZATION_INSSATOMS_LATE)
+ args[1] = do_initialize == INITIALIZATION_INNEW_MAPLOAD
+ SSatoms.InitAtom(src, args)
+ else
+ var/list/argument_list
+ if(length(args) > 1)
+ argument_list = args.Copy(2)
+ if(length(argument_list))
+ LAZYSET(global.pre_init_created_atoms, src, argument_list)
+>>>>>>> 2f0a618d451... /atom New() => Initialize() [MDB IGNORE] (#8298)
// Note: I removed "auto_init" feature (letting types disable auto-init) since it shouldn't be needed anymore.
// You can replicate the same by checking the value of the first parameter to initialize() ~Leshana
@@ -82,6 +100,8 @@
// Other parameters are passed from New (excluding loc), this does not happen if mapload is TRUE
// Must return an Initialize hint. Defined in code/__defines/subsystems.dm
/atom/proc/Initialize(mapload, ...)
+ SHOULD_CALL_PARENT(TRUE)
+ SHOULD_NOT_SLEEP(TRUE)
if(QDELETED(src))
stack_trace("GC: -- [type] had initialize() called after qdel() --")
if(initialized)
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 195e02e8fa..d16a6e74a6 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -418,10 +418,40 @@
continue
src.throw_impact(A,speed)
+<<<<<<< HEAD
/atom/movable/proc/throw_at(atom/target, range, speed, mob/thrower, spin = TRUE, datum/callback/callback) //If this returns FALSE then callback will not be called.
. = TRUE
if (!target || speed <= 0 || QDELETED(src) || (target.z != src.z))
return FALSE
+=======
+/atom/movable/proc/throw_at(atom/target, range, speed, thrower)
+ set waitfor = FALSE
+ if(!target || !src)
+ return 0
+ if(target.z != src.z)
+ return 0
+ //use a modified version of Bresenham's algorithm to get from the atom's current position to that of the target
+ src.throwing = 1
+ src.thrower = thrower
+ src.throw_source = get_turf(src) //store the origin turf
+ src.pixel_z = 0
+ if(usr)
+ if(HULK in usr.mutations)
+ src.throwing = 2 // really strong throw!
+
+ var/dist_travelled = 0
+ var/dist_since_sleep = 0
+ var/area/a = get_area(src.loc)
+
+ var/dist_x = abs(target.x - src.x)
+ var/dist_y = abs(target.y - src.y)
+
+ var/dx
+ if (target.x > src.x)
+ dx = EAST
+ else
+ dx = WEST
+>>>>>>> 2f0a618d451... /atom New() => Initialize() [MDB IGNORE] (#8298)
if (pulledby)
pulledby.stop_pulling()
@@ -442,10 +472,10 @@
var/atom/master = null
anchored = TRUE
-/atom/movable/overlay/New()
+/atom/movable/overlay/Initialize()
for(var/x in src.verbs)
src.verbs -= x
- ..()
+ . = ..()
/atom/movable/overlay/attackby(a, b)
if (src.master)
diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm
index 431b4e06f3..c960fc4772 100644
--- a/code/game/gamemodes/changeling/changeling_powers.dm
+++ b/code/game/gamemodes/changeling/changeling_powers.dm
@@ -88,7 +88,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E
verbs.Add(P.verbpath)
if(P.make_hud_button)
if(!src.ability_master)
- src.ability_master = new /obj/screen/movable/ability_master(src)
+ src.ability_master = new /obj/screen/movable/ability_master(null, src)
src.ability_master.add_ling_ability(
object_given = src,
verb_given = P.verbpath,
diff --git a/code/game/gamemodes/changeling/modularchangling.dm b/code/game/gamemodes/changeling/modularchangling.dm
index 5563d4f01b..e95148d80b 100644
--- a/code/game/gamemodes/changeling/modularchangling.dm
+++ b/code/game/gamemodes/changeling/modularchangling.dm
@@ -344,7 +344,7 @@ var/list/datum/power/changeling/powerinstances = list()
if(Thepower.make_hud_button && Thepower.isVerb)
if(!M.current.ability_master)
- M.current.ability_master = new /obj/screen/movable/ability_master(M.current)
+ M.current.ability_master = new /obj/screen/movable/ability_master(null, M.current)
M.current.ability_master.add_ling_ability(
object_given = M.current,
verb_given = Thepower.verbpath,
diff --git a/code/game/gamemodes/changeling/powers/armblade.dm b/code/game/gamemodes/changeling/powers/armblade.dm
index ffdc9b4ae3..6751821695 100644
--- a/code/game/gamemodes/changeling/powers/armblade.dm
+++ b/code/game/gamemodes/changeling/powers/armblade.dm
@@ -65,8 +65,8 @@
defend_chance = 40 // The base chance for the weapon to parry.
projectile_parry_chance = 15 // The base chance for a projectile to be deflected.
-/obj/item/weapon/melee/changeling/New(location)
- ..()
+/obj/item/weapon/melee/changeling/Initialize()
+ . = ..()
START_PROCESSING(SSobj, src)
if(ismob(loc))
visible_message("A grotesque weapon forms around [loc.name]\'s arm!",
diff --git a/code/game/gamemodes/changeling/powers/armor.dm b/code/game/gamemodes/changeling/powers/armor.dm
index 5a6db52833..390c10eea5 100644
--- a/code/game/gamemodes/changeling/powers/armor.dm
+++ b/code/game/gamemodes/changeling/powers/armor.dm
@@ -41,8 +41,8 @@
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) //No armor at all.
canremove = FALSE
-/obj/item/clothing/suit/space/changeling/New()
- ..()
+/obj/item/clothing/suit/space/changeling/Initialize()
+ . = ..()
if(ismob(loc))
loc.visible_message("[loc.name]\'s flesh rapidly inflates, forming a bloated mass around their body!",
"We inflate our flesh, creating a spaceproof suit!",
@@ -105,8 +105,8 @@
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
slowdown = 1.5
-/obj/item/clothing/suit/space/changeling/armored/New()
- ..()
+/obj/item/clothing/suit/space/changeling/armored/Initialize()
+ . = ..()
if(ismob(loc))
loc.visible_message("[loc.name]\'s flesh turns black, quickly transforming into a hard, chitinous mass!",
"We harden our flesh, creating a suit of armor!",
diff --git a/code/game/gamemodes/changeling/powers/bioelectrogenesis.dm b/code/game/gamemodes/changeling/powers/bioelectrogenesis.dm
index ca92d67ff7..d35a2f2161 100644
--- a/code/game/gamemodes/changeling/powers/bioelectrogenesis.dm
+++ b/code/game/gamemodes/changeling/powers/bioelectrogenesis.dm
@@ -113,7 +113,8 @@
agony_amount = 80
electrocute_amount = 20
-/obj/item/weapon/electric_hand/New()
+/obj/item/weapon/electric_hand/Initialize()
+ . = ..()
if(ismob(loc))
visible_message("Electrical arcs form around [loc.name]\'s hand!",
"We store a charge of electricity in our hand.",
diff --git a/code/game/gamemodes/changeling/powers/electric_lockpick.dm b/code/game/gamemodes/changeling/powers/electric_lockpick.dm
index 262d90429f..40ba101f4e 100644
--- a/code/game/gamemodes/changeling/powers/electric_lockpick.dm
+++ b/code/game/gamemodes/changeling/powers/electric_lockpick.dm
@@ -32,7 +32,8 @@
icon_state = "electric_hand"
show_examine = FALSE
-/obj/item/weapon/finger_lockpick/New()
+/obj/item/weapon/finger_lockpick/Initialize()
+ . = ..()
if(ismob(loc))
to_chat(loc, "We shape our finger to fit inside electronics, and are ready to force them open.")
diff --git a/code/game/gamemodes/changeling/powers/fabricate_clothing.dm b/code/game/gamemodes/changeling/powers/fabricate_clothing.dm
index c3c5f2aa15..91b58f42a2 100644
--- a/code/game/gamemodes/changeling/powers/fabricate_clothing.dm
+++ b/code/game/gamemodes/changeling/powers/fabricate_clothing.dm
@@ -264,12 +264,10 @@ var/global/list/changeling_fabricated_clothing = list(
access = null
canremove = FALSE
-/obj/item/weapon/card/id/syndicate/changeling/New(mob/user as mob)
- ..()
- registered_user = user
-
/obj/item/weapon/card/id/syndicate/changeling/Initialize()
. = ..()
+ if(ismob(loc))
+ registered_user = loc
access = null
/obj/item/weapon/card/id/syndicate/changeling/verb/shred()
diff --git a/code/game/gamemodes/cult/construct_spells.dm b/code/game/gamemodes/cult/construct_spells.dm
index 62cdd5bf48..57de2b4976 100644
--- a/code/game/gamemodes/cult/construct_spells.dm
+++ b/code/game/gamemodes/cult/construct_spells.dm
@@ -439,16 +439,9 @@
toggled = 0 // Mainly used for overlays.
cooldown = 0 // If set, will add a cooldown overlay and adjust click delay. Must be a multiple of 5 for overlays.
cast_sound = null // Sound file played when this is used.
+ needs_core = FALSE // Does not need a core.
var/last_castcheck = null // The last time this spell was cast.
-/obj/item/weapon/spell/construct/New()
- //..() //This kills the spell, because super on this calls the default spell's New, which checks for a core. Can't have that.
- if(isliving(loc))
- owner = loc
- if(!owner)
- qdel(src)
- update_icon()
-
/obj/item/weapon/spell/construct/adjust_instability(var/amount) //The only drawback to the boons of the geometer is the use of a mortal's blood as fuel. Constructs have already paid that price long ago.
return
diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm
index 3740010914..f8a12c3e3b 100644
--- a/code/game/gamemodes/cult/cult_structures.dm
+++ b/code/game/gamemodes/cult/cult_structures.dm
@@ -154,6 +154,7 @@
return
/obj/effect/gateway/active/Initialize()
+ . = ..()
addtimer(CALLBACK(src, .proc/spawn_and_qdel), rand(30, 60) SECONDS)
/obj/effect/gateway/active/proc/spawn_and_qdel()
diff --git a/code/game/gamemodes/cult/narsie.dm b/code/game/gamemodes/cult/narsie.dm
index 9c3504924f..d706703192 100644
--- a/code/game/gamemodes/cult/narsie.dm
+++ b/code/game/gamemodes/cult/narsie.dm
@@ -16,8 +16,8 @@ var/global/list/narsie_list = list()
consume_range = 3 //How many tiles out do we eat
-/obj/singularity/narsie/New()
- ..()
+/obj/singularity/narsie/Initialize()
+ . = ..()
narsie_list.Add(src)
/obj/singularity/narsie/Destroy()
@@ -40,8 +40,8 @@ var/global/list/narsie_list = list()
var/announce=1
var/cause_hell = 1
-/obj/singularity/narsie/large/New()
- ..()
+/obj/singularity/narsie/large/Initialize()
+ . = ..()
if(announce)
to_world("[uppertext(name)] HAS RISEN")
world << sound('sound/effects/weather/wind/wind_5_1.ogg')
@@ -358,6 +358,7 @@ var/global/list/narsie_list = list()
consume(T)
/obj/singularity/narsie/proc/narsie_spawn_animation()
+ set waitfor = FALSE
icon = 'icons/obj/narsie_spawn_anim.dmi'
dir = SOUTH
move_self = 0
diff --git a/code/game/gamemodes/endgame/supermatter_cascade/portal.dm b/code/game/gamemodes/endgame/supermatter_cascade/portal.dm
index a74867d990..20152de4bb 100644
--- a/code/game/gamemodes/endgame/supermatter_cascade/portal.dm
+++ b/code/game/gamemodes/endgame/supermatter_cascade/portal.dm
@@ -14,8 +14,13 @@
consume_range = 6
+<<<<<<< HEAD
/obj/singularity/narsie/large/exit/New()
..()
+=======
+/obj/singularity/narsie/large/exit/Initialize()
+ . = ..()
+>>>>>>> 2f0a618d451... /atom New() => Initialize() [MDB IGNORE] (#8298)
START_PROCESSING(SSobj, src)
/obj/singularity/narsie/large/exit/update_icon()
diff --git a/code/game/gamemodes/events/black_hole.dm b/code/game/gamemodes/events/black_hole.dm
index b18310ed88..2e62b4cf11 100644
--- a/code/game/gamemodes/events/black_hole.dm
+++ b/code/game/gamemodes/events/black_hole.dm
@@ -8,9 +8,9 @@
density = FALSE
anchored = TRUE
-/obj/effect/bhole/New()
- spawn(4)
- controller()
+/obj/effect/bhole/Initialize()
+ . = ..()
+ addtimer(CALLBACK(src, .proc/controller), 4)
/obj/effect/bhole/proc/controller()
while(src)
diff --git a/code/game/gamemodes/events/holidays/Christmas.dm b/code/game/gamemodes/events/holidays/Christmas.dm
index e0991edaa2..65d23e8f5f 100644
--- a/code/game/gamemodes/events/holidays/Christmas.dm
+++ b/code/game/gamemodes/events/holidays/Christmas.dm
@@ -23,9 +23,6 @@
desc = "Directions for use: Requires two people, one to pull each end."
var/cracked = 0
-/obj/item/weapon/toy/xmas_cracker/New()
- ..()
-
/obj/item/weapon/toy/xmas_cracker/attack(mob/target, mob/user)
if( !cracked && (istype(target,/mob/living/silicon) || (istype(target,/mob/living/carbon/human) && !target.get_active_hand())) && target.stat == CONSCIOUS)
target.visible_message("[user] and [target] pop \an [src]! *pop*", "You pull \an [src] with [target]! *pop*", "You hear a *pop*.")
diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm
index 950910fe5f..24e411a707 100644
--- a/code/game/gamemodes/meteor/meteors.dm
+++ b/code/game/gamemodes/meteor/meteors.dm
@@ -130,6 +130,7 @@
. = ..()
z_original = z
GLOB.meteor_list += src
+ SpinAnimation()
/obj/effect/meteor/Move()
if(z != z_original || loc == dest)
@@ -151,10 +152,6 @@
GLOB.meteor_list -= src
return ..()
-/obj/effect/meteor/New()
- ..()
- SpinAnimation()
-
/obj/effect/meteor/Bump(atom/A)
if(attempt_vr(src,"Bump_vr",list(A))) return //VOREStation Edit - allows meteors to be deflected by baseball bats
if(A)
diff --git a/code/game/gamemodes/technomancer/catalog.dm b/code/game/gamemodes/technomancer/catalog.dm
index 5dd0d64310..bcf80cee4b 100644
--- a/code/game/gamemodes/technomancer/catalog.dm
+++ b/code/game/gamemodes/technomancer/catalog.dm
@@ -73,8 +73,8 @@ var/list/all_technomancer_assistance = subtypesof(/datum/technomancer/assistance
// Proc: New()
// Parameters: 0
// Description: Sets up the catalog, as shown below.
-/obj/item/weapon/technomancer_catalog/New()
- ..()
+/obj/item/weapon/technomancer_catalog/Initialize()
+ . = ..()
set_up()
// Proc: set_up()
diff --git a/code/game/gamemodes/technomancer/core_obj.dm b/code/game/gamemodes/technomancer/core_obj.dm
index 0bdf378582..5e44b3b6da 100644
--- a/code/game/gamemodes/technomancer/core_obj.dm
+++ b/code/game/gamemodes/technomancer/core_obj.dm
@@ -37,8 +37,8 @@
var/max_summons = 10 // Maximum allowed summoned entities. Some cores will have different caps.
var/universal = FALSE // Allows non-technomancers to use the core - VOREStation Add
-/obj/item/weapon/technomancer_core/New()
- ..()
+/obj/item/weapon/technomancer_core/Initialize()
+ . = ..()
START_PROCESSING(SSobj, src)
/obj/item/weapon/technomancer_core/Destroy()
@@ -142,9 +142,10 @@
var/obj/item/weapon/technomancer_core/core = null
var/ability_icon_state = null
-/obj/spellbutton/New(loc, var/path, var/new_name, var/new_icon_state)
+/obj/spellbutton/Initialize(var/ml, var/path, var/new_name, var/new_icon_state)
+ . = ..()
if(!path || !ispath(path))
- message_admins("ERROR: /obj/spellbutton/New() was not given a proper path!")
+ message_admins("ERROR: /obj/spellbutton/Initialize() was not given a proper path!")
qdel(src)
src.name = new_name
src.spellpath = path
diff --git a/code/game/gamemodes/technomancer/devices/gloves_of_regen.dm b/code/game/gamemodes/technomancer/devices/gloves_of_regen.dm
index 9d78afe0b2..26dda90524 100644
--- a/code/game/gamemodes/technomancer/devices/gloves_of_regen.dm
+++ b/code/game/gamemodes/technomancer/devices/gloves_of_regen.dm
@@ -36,9 +36,9 @@
wearer.custom_pain("Your hands hurt like hell!",1)
wearer = null
-/obj/item/clothing/gloves/regen/New()
+/obj/item/clothing/gloves/regen/Initialize()
START_PROCESSING(SSobj, src)
- ..()
+ . = ..()
/obj/item/clothing/gloves/regen/Destroy()
wearer = null
diff --git a/code/game/gamemodes/technomancer/devices/shield_armor.dm b/code/game/gamemodes/technomancer/devices/shield_armor.dm
index eec695278f..eb11f761c7 100644
--- a/code/game/gamemodes/technomancer/devices/shield_armor.dm
+++ b/code/game/gamemodes/technomancer/devices/shield_armor.dm
@@ -24,8 +24,8 @@
var/datum/effect/effect/system/spark_spread/spark_system = null
var/block_percentage = 75
-/obj/item/clothing/suit/armor/shield/New()
- ..()
+/obj/item/clothing/suit/armor/shield/Initialize()
+ . = ..()
spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, src)
diff --git a/code/game/gamemodes/technomancer/equipment.dm b/code/game/gamemodes/technomancer/equipment.dm
index 940e31f3cd..aca1ec01af 100644
--- a/code/game/gamemodes/technomancer/equipment.dm
+++ b/code/game/gamemodes/technomancer/equipment.dm
@@ -108,7 +108,7 @@
name = "hypo belt"
desc = "A medical belt designed to carry autoinjectors and other medical equipment."
-/obj/item/weapon/storage/belt/medical/technomancer/New()
+/obj/item/weapon/storage/belt/medical/technomancer/Initialize()
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute(src)
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/burn(src)
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/toxin(src)
@@ -117,7 +117,7 @@
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain(src)
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/organ(src)
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/combat(src)
- ..()
+ . = ..()
/datum/technomancer/equipment/belt_of_holding
name = "Belt of Holding"
diff --git a/code/game/gamemodes/technomancer/spell_objs.dm b/code/game/gamemodes/technomancer/spell_objs.dm
index f8833d13b2..339ec59c23 100644
--- a/code/game/gamemodes/technomancer/spell_objs.dm
+++ b/code/game/gamemodes/technomancer/spell_objs.dm
@@ -18,6 +18,7 @@
var/toggled = 0 // Mainly used for overlays.
var/cooldown = 0 // If set, will add a cooldown overlay and adjust click delay. Must be a multiple of 5 for overlays.
var/cast_sound = null // Sound file played when this is used.
+ var/needs_core = TRUE // Does this spell need a core to be usable?
// Proc: on_use_cast()
// Parameters: 1 (user - the technomancer casting the spell)
@@ -110,18 +111,18 @@
// Proc: New()
// Parameters: 0
// Description: Sets owner to equal its loc, links to the owner's core, then applies overlays if needed.
-/obj/item/weapon/spell/New()
- ..()
+/obj/item/weapon/spell/Initialize()
+ . = ..()
if(isliving(loc))
owner = loc
if(owner)
core = owner.get_technomancer_core()
- if(!core)
+ if(!core && needs_core)
to_chat(owner, "You need a Core to do that.")
- qdel(src)
- return
-// if(istype(/obj/item/weapon/technomancer_core, owner.back))
-// core = owner.back
+ return INITIALIZE_HINT_QDEL
+ else
+ return INITIALIZE_HINT_QDEL
+
update_icon()
// Proc: Destroy()
diff --git a/code/game/gamemodes/technomancer/spells/aspect_aura.dm b/code/game/gamemodes/technomancer/spells/aspect_aura.dm
index eec4304d71..ec5c248639 100644
--- a/code/game/gamemodes/technomancer/spells/aspect_aura.dm
+++ b/code/game/gamemodes/technomancer/spells/aspect_aura.dm
@@ -41,8 +41,8 @@
aspect = ASPECT_CHROMATIC
var/glow_color = "#FFFFFF"
-/obj/item/weapon/spell/aura/New()
- ..()
+/obj/item/weapon/spell/aura/Initialize()
+ . = ..()
set_light(7, 4, l_color = glow_color)
START_PROCESSING(SSobj, src)
diff --git a/code/game/gamemodes/technomancer/spells/aura/aura.dm b/code/game/gamemodes/technomancer/spells/aura/aura.dm
index be986bb7ee..9bdffceac1 100644
--- a/code/game/gamemodes/technomancer/spells/aura/aura.dm
+++ b/code/game/gamemodes/technomancer/spells/aura/aura.dm
@@ -6,8 +6,8 @@
aspect = null
var/glow_color = "#FFFFFF"
-/obj/item/weapon/spell/aura/New()
- ..()
+/obj/item/weapon/spell/aura/Initialize()
+ . = ..()
set_light(calculate_spell_power(7), calculate_spell_power(4), l_color = glow_color)
START_PROCESSING(SSobj, src)
log_and_message_admins("has started casting [src].")
diff --git a/code/game/gamemodes/technomancer/spells/chroma.dm b/code/game/gamemodes/technomancer/spells/chroma.dm
index b87a82a0ae..dff834f668 100644
--- a/code/game/gamemodes/technomancer/spells/chroma.dm
+++ b/code/game/gamemodes/technomancer/spells/chroma.dm
@@ -14,8 +14,8 @@
aspect = ASPECT_LIGHT
var/color_to_use = "#FFFFFF"
-/obj/item/weapon/spell/chroma/New()
- ..()
+/obj/item/weapon/spell/chroma/Initialize()
+ . = ..()
set_light(6, 5, l_color = color_to_use)
/obj/effect/temporary_effect/chroma
diff --git a/code/game/gamemodes/technomancer/spells/energy_siphon.dm b/code/game/gamemodes/technomancer/spells/energy_siphon.dm
index 1659b8f17b..16b82068fd 100644
--- a/code/game/gamemodes/technomancer/spells/energy_siphon.dm
+++ b/code/game/gamemodes/technomancer/spells/energy_siphon.dm
@@ -20,8 +20,8 @@
var/list/things_to_siphon = list() //Things which are actually drained as a result of the above not being null.
var/flow_rate = 1000 // Limits how much electricity can be drained per second. Measured by default in god knows what.
-/obj/item/weapon/spell/energy_siphon/New()
- ..()
+/obj/item/weapon/spell/energy_siphon/Initialize()
+ . = ..()
START_PROCESSING(SSobj, src)
/obj/item/weapon/spell/energy_siphon/Destroy()
diff --git a/code/game/gamemodes/technomancer/spells/flame_tongue.dm b/code/game/gamemodes/technomancer/spells/flame_tongue.dm
index 9a52c5d82f..a0471fe4ad 100644
--- a/code/game/gamemodes/technomancer/spells/flame_tongue.dm
+++ b/code/game/gamemodes/technomancer/spells/flame_tongue.dm
@@ -14,8 +14,8 @@
aspect = ASPECT_FIRE
var/obj/item/weapon/weldingtool/spell/welder = null
-/obj/item/weapon/spell/flame_tongue/New()
- ..()
+/obj/item/weapon/spell/flame_tongue/Initialize()
+ . = ..()
set_light(3, 2, l_color = "#FF6A00")
visible_message("\The [loc]'s hand begins to emit a flame.")
welder = new /obj/item/weapon/weldingtool/spell(src)
diff --git a/code/game/gamemodes/technomancer/spells/insert/insert.dm b/code/game/gamemodes/technomancer/spells/insert/insert.dm
index 9ac0295e2b..0d537b35a9 100644
--- a/code/game/gamemodes/technomancer/spells/insert/insert.dm
+++ b/code/game/gamemodes/technomancer/spells/insert/insert.dm
@@ -11,8 +11,8 @@
var/obj/item/weapon/inserted_spell/inserting = null
var/allow_stacking = 0
-/obj/item/weapon/spell/insert/New()
- ..()
+/obj/item/weapon/spell/insert/Initialize()
+ . = ..()
set_light(spell_light_range, spell_light_intensity, l_color = light_color)
/obj/item/weapon/inserted_spell
@@ -20,9 +20,9 @@
var/mob/living/host = null
var/spell_power_at_creation = 1.0 // This is here because the spell object that made this object probably won't exist.
-/obj/item/weapon/inserted_spell/New(var/newloc, var/user, var/obj/item/weapon/spell/insert/inserter)
- ..(newloc)
- host = newloc
+/obj/item/weapon/inserted_spell/Initialize(var/ml, var/user, var/obj/item/weapon/spell/insert/inserter)
+ . = ..()
+ host = loc
origin = user
if(light_color)
spawn(1)
diff --git a/code/game/gamemodes/technomancer/spells/instability_tap.dm b/code/game/gamemodes/technomancer/spells/instability_tap.dm
index ad2c72518b..e5a80fdafc 100644
--- a/code/game/gamemodes/technomancer/spells/instability_tap.dm
+++ b/code/game/gamemodes/technomancer/spells/instability_tap.dm
@@ -14,8 +14,8 @@
cast_methods = CAST_USE
aspect = ASPECT_UNSTABLE
-/obj/item/weapon/spell/instability_tap/New()
- ..()
+/obj/item/weapon/spell/instability_tap/Initialize()
+ . = ..()
set_light(3, 2, l_color = "#FA58F4")
/obj/item/weapon/spell/instability_tap/on_use_cast(mob/user)
diff --git a/code/game/gamemodes/technomancer/spells/modifier/modifier.dm b/code/game/gamemodes/technomancer/spells/modifier/modifier.dm
index 3ea278286e..f612f00d3f 100644
--- a/code/game/gamemodes/technomancer/spells/modifier/modifier.dm
+++ b/code/game/gamemodes/technomancer/spells/modifier/modifier.dm
@@ -9,8 +9,8 @@
var/spell_light_intensity = 2
var/spell_light_range = 3
-/obj/item/weapon/spell/modifier/New()
- ..()
+/obj/item/weapon/spell/modifier/Initialize()
+ . = ..()
set_light(spell_light_range, spell_light_intensity, l_color = light_color)
/obj/item/weapon/spell/modifier/on_melee_cast(atom/hit_atom, mob/user)
diff --git a/code/game/gamemodes/technomancer/spells/phase_shift.dm b/code/game/gamemodes/technomancer/spells/phase_shift.dm
index 7cee437685..0a64aec0b6 100644
--- a/code/game/gamemodes/technomancer/spells/phase_shift.dm
+++ b/code/game/gamemodes/technomancer/spells/phase_shift.dm
@@ -15,8 +15,8 @@
cast_methods = CAST_USE
aspect = ASPECT_TELE
-/obj/item/weapon/spell/phase_shift/New()
- ..()
+/obj/item/weapon/spell/phase_shift/Initialize()
+ . = ..()
set_light(3, 2, l_color = "#FA58F4")
/obj/effect/phase_shift
@@ -28,8 +28,8 @@
/obj/effect/phase_shift/ex_act()
return
-/obj/effect/phase_shift/New()
- ..()
+/obj/effect/phase_shift/Initialize()
+ . = ..()
set_light(3, 5, l_color = "#FA58F4")
START_PROCESSING(SSobj, src)
diff --git a/code/game/gamemodes/technomancer/spells/radiance.dm b/code/game/gamemodes/technomancer/spells/radiance.dm
index d86428354e..80a7d76ec9 100644
--- a/code/game/gamemodes/technomancer/spells/radiance.dm
+++ b/code/game/gamemodes/technomancer/spells/radiance.dm
@@ -16,8 +16,8 @@
var/power = 250
toggled = 1
-/obj/item/weapon/spell/radiance/New()
- ..()
+/obj/item/weapon/spell/radiance/Initialize()
+ . = ..()
set_light(7, 4, l_color = "#D9D900")
START_PROCESSING(SSobj, src)
log_and_message_admins("has casted [src].")
diff --git a/code/game/gamemodes/technomancer/spells/reflect.dm b/code/game/gamemodes/technomancer/spells/reflect.dm
index 07f3595eda..b5ca6047a4 100644
--- a/code/game/gamemodes/technomancer/spells/reflect.dm
+++ b/code/game/gamemodes/technomancer/spells/reflect.dm
@@ -16,8 +16,8 @@
var/damage_to_energy_multiplier = 60.0 //Determines how much energy to charge for blocking, e.g. 20 damage attack = 1200 energy cost
var/datum/effect/effect/system/spark_spread/spark_system = null
-/obj/item/weapon/spell/reflect/New()
- ..()
+/obj/item/weapon/spell/reflect/Initialize()
+ . = ..()
set_light(3, 2, l_color = "#006AFF")
spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, src)
diff --git a/code/game/gamemodes/technomancer/spells/shield.dm b/code/game/gamemodes/technomancer/spells/shield.dm
index b11d5590b0..849ea56fbc 100644
--- a/code/game/gamemodes/technomancer/spells/shield.dm
+++ b/code/game/gamemodes/technomancer/spells/shield.dm
@@ -18,8 +18,8 @@
var/damage_to_energy_multiplier = 30.0 //Determines how much energy to charge for blocking, e.g. 20 damage attack = 600 energy cost
var/datum/effect/effect/system/spark_spread/spark_system = null
-/obj/item/weapon/spell/shield/New()
- ..()
+/obj/item/weapon/spell/shield/Initialize()
+ . = ..()
set_light(3, 2, l_color = "#006AFF")
spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, src)
diff --git a/code/game/gamemodes/technomancer/spells/spawner/darkness.dm b/code/game/gamemodes/technomancer/spells/spawner/darkness.dm
index f54f9b7502..9a1a7bd365 100644
--- a/code/game/gamemodes/technomancer/spells/spawner/darkness.dm
+++ b/code/game/gamemodes/technomancer/spells/spawner/darkness.dm
@@ -18,8 +18,8 @@
adjust_instability(4)
..()
-/obj/item/weapon/spell/spawner/darkness/New()
- ..()
+/obj/item/weapon/spell/spawner/darkness/Initialize()
+ . = ..()
set_light(6, -20, l_color = "#FFFFFF")
/obj/effect/temporary_effect/darkness
diff --git a/code/game/gamemodes/technomancer/spells/spawner/destablize.dm b/code/game/gamemodes/technomancer/spells/spawner/destablize.dm
index 9bf6b07281..a24c020989 100644
--- a/code/game/gamemodes/technomancer/spells/spawner/destablize.dm
+++ b/code/game/gamemodes/technomancer/spells/spawner/destablize.dm
@@ -14,8 +14,8 @@
aspect = ASPECT_UNSTABLE
spawner_type = /obj/effect/temporary_effect/destablize
-/obj/item/weapon/spell/spawner/destablize/New()
- ..()
+/obj/item/weapon/spell/spawner/destablize/Initialize()
+ . = ..()
set_light(3, 2, l_color = "#C26DDE")
/obj/item/weapon/spell/spawner/destablize/on_ranged_cast(atom/hit_atom, mob/user)
diff --git a/code/game/gamemodes/technomancer/spells/spawner/pulsar.dm b/code/game/gamemodes/technomancer/spells/spawner/pulsar.dm
index b56ea64e9c..1594286377 100644
--- a/code/game/gamemodes/technomancer/spells/spawner/pulsar.dm
+++ b/code/game/gamemodes/technomancer/spells/spawner/pulsar.dm
@@ -13,8 +13,8 @@
aspect = ASPECT_EMP
spawner_type = /obj/effect/temporary_effect/pulse/pulsar
-/obj/item/weapon/spell/spawner/pulsar/New()
- ..()
+/obj/item/weapon/spell/spawner/pulsar/Initialize()
+ . = ..()
set_light(3, 2, l_color = "#2ECCFA")
/obj/item/weapon/spell/spawner/pulsar/on_ranged_cast(atom/hit_atom, mob/user)
diff --git a/code/game/gamemodes/technomancer/spells/warp_strike.dm b/code/game/gamemodes/technomancer/spells/warp_strike.dm
index 83a2336ab6..b0f7712cfa 100644
--- a/code/game/gamemodes/technomancer/spells/warp_strike.dm
+++ b/code/game/gamemodes/technomancer/spells/warp_strike.dm
@@ -14,8 +14,8 @@
aspect = ASPECT_TELE
var/datum/effect/effect/system/spark_spread/sparks
-/obj/item/weapon/spell/warp_strike/New()
- ..()
+/obj/item/weapon/spell/warp_strike/Initialize()
+ . = ..()
sparks = new /datum/effect/effect/system/spark_spread()
sparks.set_up(5, 0, src)
sparks.attach(loc)
diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/Beacon.dm
index f1066caffc..7fc7fdf98c 100644
--- a/code/game/machinery/Beacon.dm
+++ b/code/game/machinery/Beacon.dm
@@ -10,8 +10,8 @@
idle_power_usage = 0
var/obj/item/device/radio/beacon/Beacon
-/obj/machinery/bluespace_beacon/New()
- ..()
+/obj/machinery/bluespace_beacon/Initialize()
+ . = ..()
var/turf/T = src.loc
Beacon = new /obj/item/device/radio/beacon
Beacon.invisibility = INVISIBILITY_MAXIMUM
diff --git a/code/game/machinery/CableLayer.dm b/code/game/machinery/CableLayer.dm
index 20677bb0ff..8556252788 100644
--- a/code/game/machinery/CableLayer.dm
+++ b/code/game/machinery/CableLayer.dm
@@ -8,9 +8,16 @@
var/max_cable = 100
var/on = 0
+<<<<<<< HEAD
/obj/machinery/cablelayer/New()
cable = new(src, 100)
..()
+=======
+/obj/machinery/cablelayer/Initialize()
+ cable = new(src)
+ cable.amount = 100
+ . = ..()
+>>>>>>> 2f0a618d451... /atom New() => Initialize() [MDB IGNORE] (#8298)
/obj/machinery/cablelayer/Moved(atom/old_loc, direction, forced = FALSE)
. = ..()
diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm
index 9a5eb65ba6..0e22433714 100644
--- a/code/game/machinery/OpTable.dm
+++ b/code/game/machinery/OpTable.dm
@@ -15,8 +15,8 @@
var/strapped = 0.0
var/obj/machinery/computer/operating/computer = null
-/obj/machinery/optable/New()
- ..()
+/obj/machinery/optable/Initialize()
+ . = ..()
for(var/direction in list(NORTH,EAST,SOUTH,WEST))
computer = locate(/obj/machinery/computer/operating, get_step(src, direction))
if(computer)
diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm
index f33549fc23..54bbc4baca 100644
--- a/code/game/machinery/adv_med.dm
+++ b/code/game/machinery/adv_med.dm
@@ -552,8 +552,8 @@
circuit = /obj/item/weapon/circuitboard/scanner_console
var/printing = null
-/obj/machinery/body_scanconsole/New()
- ..()
+/obj/machinery/body_scanconsole/Initialize()
+ . = ..()
findscanner()
/obj/machinery/body_scanconsole/Destroy()
diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm
index 86f55631a4..dd897f659d 100644
--- a/code/game/machinery/ai_slipper.dm
+++ b/code/game/machinery/ai_slipper.dm
@@ -14,8 +14,8 @@
var/cooldown_on = 0
req_access = list(access_ai_upload)
-/obj/machinery/ai_slipper/New()
- ..()
+/obj/machinery/ai_slipper/Initialize()
+ . = ..()
update_icon()
/obj/machinery/ai_slipper/power_change()
diff --git a/code/game/machinery/air_alarm.dm b/code/game/machinery/air_alarm.dm
index dd653d746a..8ac9ab86dc 100644
--- a/code/game/machinery/air_alarm.dm
+++ b/code/game/machinery/air_alarm.dm
@@ -120,6 +120,9 @@
if(!pixel_x && !pixel_y)
offset_airalarm()
first_run()
+ set_frequency(frequency)
+ if(!master_is_operating())
+ elect_master()
/obj/machinery/alarm/Destroy()
unregister_radio(src, frequency)
@@ -152,6 +155,7 @@
TLV["pressure"] = list(ONE_ATMOSPHERE * 0.80, ONE_ATMOSPHERE * 0.90, ONE_ATMOSPHERE * 1.10, ONE_ATMOSPHERE * 1.20) /* kpa */
TLV["temperature"] = list(T0C - 26, T0C, T0C + 40, T0C + 66) // K
+<<<<<<< HEAD
update_icon()
/obj/machinery/alarm/Initialize()
@@ -160,6 +164,8 @@
if(!master_is_operating())
elect_master()
+=======
+>>>>>>> 2f0a618d451... /atom New() => Initialize() [MDB IGNORE] (#8298)
/obj/machinery/alarm/process()
if((stat & (NOPOWER|BROKEN)) || shorted)
return
diff --git a/code/game/machinery/atmoalter/area_atmos_computer.dm b/code/game/machinery/atmoalter/area_atmos_computer.dm
index bfe95bada7..82f23e72a6 100644
--- a/code/game/machinery/atmoalter/area_atmos_computer.dm
+++ b/code/game/machinery/atmoalter/area_atmos_computer.dm
@@ -14,7 +14,7 @@
//Simple variable to prevent me from doing attack_hand in both this and the child computer
var/zone = "This computer is working on a wireless range, the range is currently limited to "
-/obj/machinery/computer/area_atmos/Initialize()
+/obj/machinery/computer/area_atmos/LateInitialize()
. = ..()
scanscrubbers()
diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm
index 783ee16225..06b78eda0f 100644
--- a/code/game/machinery/atmoalter/canister.dm
+++ b/code/game/machinery/atmoalter/canister.dm
@@ -368,30 +368,30 @@ update_flag
add_fingerprint(usr)
update_icon()
-/obj/machinery/portable_atmospherics/canister/phoron/New()
- ..()
+/obj/machinery/portable_atmospherics/canister/phoron/Initialize()
+ . = ..()
src.air_contents.adjust_gas("phoron", MolesForPressure())
src.update_icon()
return 1
-/obj/machinery/portable_atmospherics/canister/oxygen/New()
- ..()
+/obj/machinery/portable_atmospherics/canister/oxygen/Initialize()
+ . = ..()
src.air_contents.adjust_gas("oxygen", MolesForPressure())
src.update_icon()
return 1
-/obj/machinery/portable_atmospherics/canister/oxygen/prechilled/New()
- ..()
+/obj/machinery/portable_atmospherics/canister/oxygen/prechilled/Initialize()
+ . = ..()
src.air_contents.adjust_gas("oxygen", MolesForPressure())
src.air_contents.temperature = 80
src.update_icon()
return 1
-/obj/machinery/portable_atmospherics/canister/nitrous_oxide/New()
- ..()
+/obj/machinery/portable_atmospherics/canister/nitrous_oxide/Initialize()
+ . = ..()
air_contents.adjust_gas("nitrous_oxide", MolesForPressure())
src.update_icon()
@@ -407,23 +407,20 @@ update_flag
air_contents = new
return 1
-/obj/machinery/portable_atmospherics/canister/nitrogen/New()
-
- ..()
-
+/obj/machinery/portable_atmospherics/canister/nitrogen/Initialize()
+ . = ..()
src.air_contents.adjust_gas("nitrogen", MolesForPressure())
src.update_icon()
return 1
-/obj/machinery/portable_atmospherics/canister/carbon_dioxide/New()
- ..()
+/obj/machinery/portable_atmospherics/canister/carbon_dioxide/Initialize()
+ . = ..()
src.air_contents.adjust_gas("carbon_dioxide", MolesForPressure())
src.update_icon()
return 1
-
-/obj/machinery/portable_atmospherics/canister/air/New()
- ..()
+/obj/machinery/portable_atmospherics/canister/air/Initialize()
+ . = ..()
var/list/air_mix = StandardAirMix()
src.air_contents.adjust_multi("oxygen", air_mix["oxygen"], "nitrogen", air_mix["nitrogen"])
@@ -432,20 +429,20 @@ update_flag
//R-UST port
// Special types used for engine setup admin verb, they contain double amount of that of normal canister.
-/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup/New()
- ..()
+/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup/Initialize()
+ . = ..()
src.air_contents.adjust_gas("nitrogen", MolesForPressure())
src.update_icon()
return 1
-/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup/New()
- ..()
+/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup/Initialize()
+ . = ..()
src.air_contents.adjust_gas("carbon_dioxide", MolesForPressure())
src.update_icon()
return 1
-/obj/machinery/portable_atmospherics/canister/phoron/engine_setup/New()
- ..()
+/obj/machinery/portable_atmospherics/canister/phoron/engine_setup/Initialize()
+ . = ..()
src.air_contents.adjust_gas("phoron", MolesForPressure())
src.update_icon()
return 1
diff --git a/code/game/machinery/atmoalter/clamp.dm b/code/game/machinery/atmoalter/clamp.dm
index a77999a661..4467376601 100644
--- a/code/game/machinery/atmoalter/clamp.dm
+++ b/code/game/machinery/atmoalter/clamp.dm
@@ -14,8 +14,8 @@
var/datum/pipe_network/network_node1
var/datum/pipe_network/network_node2
-/obj/machinery/clamp/New(loc, var/obj/machinery/atmospherics/pipe/simple/to_attach = null)
- ..()
+/obj/machinery/clamp/Initialize(var/ml, var/obj/machinery/atmospherics/pipe/simple/to_attach = null)
+ . = ..()
if(istype(to_attach))
target = to_attach
else
@@ -23,7 +23,6 @@
if(target)
update_networks()
dir = target.dir
- return 1
/obj/machinery/clamp/proc/update_networks()
if(!target)
diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm
index e51b4825cc..b3f4a9c2d9 100644
--- a/code/game/machinery/atmoalter/portable_atmospherics.dm
+++ b/code/game/machinery/atmoalter/portable_atmospherics.dm
@@ -13,16 +13,10 @@
var/start_pressure = ONE_ATMOSPHERE
var/maximum_pressure = 90 * ONE_ATMOSPHERE
-/obj/machinery/portable_atmospherics/New()
- ..()
-
- air_contents.volume = volume
- air_contents.temperature = T20C
-
- return 1
-
/obj/machinery/portable_atmospherics/Initialize()
..()
+ air_contents.volume = volume
+ air_contents.temperature = T20C
return INITIALIZE_HINT_LATELOAD
/obj/machinery/portable_atmospherics/LateInitialize()
diff --git a/code/game/machinery/atmoalter/pump.dm b/code/game/machinery/atmoalter/pump.dm
index 1a502c675f..8d496eddde 100644
--- a/code/game/machinery/atmoalter/pump.dm
+++ b/code/game/machinery/atmoalter/pump.dm
@@ -21,8 +21,8 @@
/obj/machinery/portable_atmospherics/powered/pump/filled
start_pressure = 90 * ONE_ATMOSPHERE
-/obj/machinery/portable_atmospherics/powered/pump/New()
- ..()
+/obj/machinery/portable_atmospherics/powered/pump/Initialize()
+ . = ..()
cell = new/obj/item/weapon/cell/apc(src)
var/list/air_mix = StandardAirMix()
diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm
index 7ab58e2c88..80d053eb72 100644
--- a/code/game/machinery/atmoalter/scrubber.dm
+++ b/code/game/machinery/atmoalter/scrubber.dm
@@ -20,8 +20,8 @@
var/list/scrubbing_gas = list("phoron", "carbon_dioxide", "nitrous_oxide", "volatile_fuel")
-/obj/machinery/portable_atmospherics/powered/scrubber/New()
- ..()
+/obj/machinery/portable_atmospherics/powered/scrubber/Initialize()
+ . = ..()
cell = new/obj/item/weapon/cell/apc(src)
/obj/machinery/portable_atmospherics/powered/scrubber/emp_act(severity)
@@ -164,8 +164,8 @@
var/global/gid = 1
var/id = 0
-/obj/machinery/portable_atmospherics/powered/scrubber/huge/New()
- ..()
+/obj/machinery/portable_atmospherics/powered/scrubber/huge/Initialize()
+ . = ..()
cell = null
id = gid
diff --git a/code/game/machinery/bioprinter.dm b/code/game/machinery/bioprinter.dm
index d00efc79b6..1953db088b 100644
--- a/code/game/machinery/bioprinter.dm
+++ b/code/game/machinery/bioprinter.dm
@@ -337,7 +337,7 @@
var/matter_amount_per_sheet = 10
var/matter_type = MAT_STEEL
-/obj/machinery/organ_printer/robot/full/New()
+/obj/machinery/organ_printer/robot/full/Initialize()
. = ..()
stored_matter = max_stored_matter
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index 85f23cb1db..1928818a9a 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -42,7 +42,7 @@
var/list/camera_computers_using_this = list()
-/obj/machinery/camera/New()
+/obj/machinery/camera/Initialize()
wires = new(src)
assembly = new(src)
assembly.state = 4
@@ -61,12 +61,16 @@
error("[src.name] in [get_area(src)]has errored. [src.network?"Empty network list":"Null network list"]")
ASSERT(src.network)
ASSERT(src.network.len > 0)
+<<<<<<< HEAD
// VOREStation Edit Start - Make mapping with cameras easier
if(!c_tag)
var/area/A = get_area(src)
c_tag = "[A ? A.name : "Unknown"] #[rand(111,999)]"
..()
// VOREStation Edit End
+=======
+ . = ..()
+>>>>>>> 2f0a618d451... /atom New() => Initialize() [MDB IGNORE] (#8298)
/obj/machinery/camera/Destroy()
if(isMotion())
@@ -185,7 +189,7 @@
else
assembly.state = 1
to_chat(user, "You cut \the [src] free from the wall.")
- new /obj/item/stack/cable_coil(src.loc, length=2)
+ new /obj/item/stack/cable_coil(src.loc, 2)
assembly = null //so qdel doesn't eat it.
qdel(src)
diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm
index 7e1de88bbb..52741d6ebe 100644
--- a/code/game/machinery/camera/presets.dm
+++ b/code/game/machinery/camera/presets.dm
@@ -112,8 +112,8 @@ var/global/list/engineering_networks = list(
// EMP
-/obj/machinery/camera/emp_proof/New()
- ..()
+/obj/machinery/camera/emp_proof/Initialize()
+ . = ..()
upgradeEmpProof()
// X-RAY
@@ -133,14 +133,14 @@ var/global/list/engineering_networks = list(
/obj/machinery/camera/xray/research
network = list(NETWORK_RESEARCH)
-/obj/machinery/camera/xray/New()
- ..()
+/obj/machinery/camera/xray/Initialize()
+ . = ..()
upgradeXRay()
// MOTION
-/obj/machinery/camera/motion/New()
- ..()
+/obj/machinery/camera/motion/Initialize()
+ . = ..()
upgradeMotion()
/obj/machinery/camera/motion/engineering_outpost
@@ -155,8 +155,8 @@ var/global/list/engineering_networks = list(
/obj/machinery/camera/all/command
network = list(NETWORK_COMMAND)
-/obj/machinery/camera/all/New()
- ..()
+/obj/machinery/camera/all/Initialize()
+ . = ..()
upgradeEmpProof()
upgradeXRay()
upgradeMotion()
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 49c917f312..2d52929e72 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -456,8 +456,8 @@
icon_state = "pod_g"
-/obj/machinery/clonepod/full/New()
- ..()
+/obj/machinery/clonepod/full/Initialize()
+ . = ..()
for(var/i = 1 to container_limit)
containers += new /obj/item/weapon/reagent_containers/glass/bottle/biomass(src)
@@ -499,7 +499,8 @@
name = "data disk - 'God Emperor of Mankind'"
read_only = 1
-/obj/item/weapon/disk/data/demo/New()
+/obj/item/weapon/disk/data/demo/Initialize()
+ . = ..()
initializeDisk()
buf.types=DNA2_BUF_UE|DNA2_BUF_UI
//data = "066000033000000000AF00330660FF4DB002690"
@@ -514,8 +515,8 @@
name = "data disk - 'Mr. Muggles'"
read_only = 1
-/obj/item/weapon/disk/data/monkey/New()
- ..()
+/obj/item/weapon/disk/data/monkey/Initialize()
+ . = ..()
initializeDisk()
buf.types=DNA2_BUF_SE
var/list/new_SE=list(0x098,0x3E8,0x403,0x44C,0x39F,0x4B0,0x59D,0x514,0x5FC,0x578,0x5DC,0x640,0x6A4)
@@ -524,8 +525,8 @@
buf.dna.SE=new_SE
buf.dna.SetSEValueRange(MONKEYBLOCK,0xDAC, 0xFFF)
-/obj/item/weapon/disk/data/New()
- ..()
+/obj/item/weapon/disk/data/Initialize()
+ . = ..()
var/diskcolor = pick(0,1,2)
icon_state = "datadisk[diskcolor]"
@@ -545,8 +546,8 @@
name = "Diskette Box"
icon_state = "disk_kit"
-/obj/item/weapon/storage/box/disks/New()
- ..()
+/obj/item/weapon/storage/box/disks/Initialize()
+ . = ..()
new /obj/item/weapon/disk/data(src)
new /obj/item/weapon/disk/data(src)
new /obj/item/weapon/disk/data(src)
diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm
index 4efec263f8..11c07b74f2 100644
--- a/code/game/machinery/computer/Operating.dm
+++ b/code/game/machinery/computer/Operating.dm
@@ -20,8 +20,8 @@
var/healthAlarm = 50
var/oxy = 1 //oxygen beeping toggle
-/obj/machinery/computer/operating/New()
- ..()
+/obj/machinery/computer/operating/Initialize()
+ . = ..()
for(var/direction in list(NORTH,EAST,SOUTH,WEST))
table = locate(/obj/machinery/optable, get_step(src, direction))
if(table)
diff --git a/code/game/machinery/computer/RCON_Console.dm b/code/game/machinery/computer/RCON_Console.dm
index d6df0d2d6d..156f74ffa5 100644
--- a/code/game/machinery/computer/RCON_Console.dm
+++ b/code/game/machinery/computer/RCON_Console.dm
@@ -15,8 +15,8 @@
var/current_tag = null
var/datum/tgui_module/rcon/rcon
-/obj/machinery/computer/rcon/New()
- ..()
+/obj/machinery/computer/rcon/Initialize()
+ . = ..()
rcon = new(src)
/obj/machinery/computer/rcon/Destroy()
diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm
index 4061c677db..0a500bd127 100644
--- a/code/game/machinery/computer/arcade.dm
+++ b/code/game/machinery/computer/arcade.dm
@@ -96,9 +96,12 @@
/obj/machinery/computer/arcade/battle/Initialize()
. = ..()
+<<<<<<< HEAD
randomize_characters()
/obj/machinery/computer/arcade/battle/proc/randomize_characters()
+=======
+>>>>>>> 2f0a618d451... /atom New() => Initialize() [MDB IGNORE] (#8298)
var/name_action
var/name_part1
var/name_part2
@@ -344,8 +347,8 @@
var/gameStatus = ORION_STATUS_START
var/canContinueEvent = 0
-/obj/machinery/computer/arcade/orion_trail/New()
- ..()
+/obj/machinery/computer/arcade/orion_trail/Initialize()
+ . = ..()
// Sets up the main trail
stops = list("Pluto","Asteroid Belt","Proxima Centauri","Dead Space","Rigel Prime","Tau Ceti Beta","Black Hole","Space Outpost Beta-9","Orion Prime")
stopblurbs = list(
@@ -1234,8 +1237,8 @@
/// End Payment
-/obj/machinery/computer/arcade/clawmachine/New()
- ..()
+/obj/machinery/computer/arcade/clawmachine/Initialize()
+ . = ..()
/obj/machinery/computer/arcade/clawmachine/attack_hand(mob/living/user)
if(..())
diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm
index 24a7d21a5f..9bc132c7f1 100644
--- a/code/game/machinery/computer/atmos_alert.dm
+++ b/code/game/machinery/computer/atmos_alert.dm
@@ -12,8 +12,8 @@ var/global/list/minor_air_alarms = list()
icon_screen = "alert:0"
light_color = "#e6ffff"
-/obj/machinery/computer/atmos_alert/New()
- ..()
+/obj/machinery/computer/atmos_alert/Initialize()
+ . = ..()
atmosphere_alarm.register_alarm(src, /atom/proc/update_icon)
/obj/machinery/computer/atmos_alert/Destroy()
diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm
index 869756f987..4eac351ce1 100644
--- a/code/game/machinery/computer/atmos_control.dm
+++ b/code/game/machinery/computer/atmos_control.dm
@@ -15,9 +15,6 @@
var/list/monitored_alarm_ids = null
var/datum/tgui_module/atmos_control/atmos_control
-/obj/machinery/computer/atmoscontrol/New()
- ..()
-
/obj/machinery/computer/atmoscontrol/laptop //[TO DO] Change name to PCU and update mapdata to include replacement computers
name = "\improper Atmospherics PCU"
desc = "A personal computer unit. It seems to have only the Atmosphereics Control program installed."
diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm
index 1af31afe80..fa73834f6f 100644
--- a/code/game/machinery/computer/crew.dm
+++ b/code/game/machinery/computer/crew.dm
@@ -10,9 +10,9 @@
circuit = /obj/item/weapon/circuitboard/crew
var/datum/tgui_module/crew_monitor/crew_monitor
-/obj/machinery/computer/crew/New()
+/obj/machinery/computer/crew/Initialize()
crew_monitor = new(src)
- ..()
+ . = ..()
/obj/machinery/computer/crew/Destroy()
qdel(crew_monitor)
diff --git a/code/game/machinery/computer/guestpass.dm b/code/game/machinery/computer/guestpass.dm
index 1d5392fc54..debb4702e6 100644
--- a/code/game/machinery/computer/guestpass.dm
+++ b/code/game/machinery/computer/guestpass.dm
@@ -97,8 +97,8 @@
var/list/internal_log = list()
var/mode = 0 // 0 - making pass, 1 - viewing logs
-/obj/machinery/computer/guestpass/New()
- ..()
+/obj/machinery/computer/guestpass/Initialize()
+ . = ..()
uid = "[rand(100,999)]-G[rand(10,99)]"
diff --git a/code/game/machinery/computer/shutoff_monitor.dm b/code/game/machinery/computer/shutoff_monitor.dm
index 8cc101d804..37eb2060a7 100644
--- a/code/game/machinery/computer/shutoff_monitor.dm
+++ b/code/game/machinery/computer/shutoff_monitor.dm
@@ -7,8 +7,8 @@
circuit = /obj/item/weapon/circuitboard/shutoff_monitor
var/datum/tgui_module/shutoff_monitor/monitor
-/obj/machinery/computer/shutoff_monitor/New()
- ..()
+/obj/machinery/computer/shutoff_monitor/Initialize()
+ . = ..()
monitor = new(src)
/obj/machinery/computer/shutoff_monitor/Destroy()
diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm
index 35a060863e..90b323358f 100644
--- a/code/game/machinery/cryo.dm
+++ b/code/game/machinery/cryo.dm
@@ -27,24 +27,24 @@
var/image/fluid
-/obj/machinery/atmospherics/unary/cryo_cell/New()
- ..()
+/obj/machinery/atmospherics/unary/cryo_cell/Initialize()
+ . = ..()
icon = 'icons/obj/cryogenics_split.dmi'
icon_state = "base"
initialize_directions = dir
-/obj/machinery/atmospherics/unary/cryo_cell/Initialize()
- . = ..()
var/image/tank = image(icon,"tank")
tank.alpha = 200
tank.pixel_y = 18
tank.plane = MOB_PLANE
tank.layer = MOB_LAYER+0.2 //Above fluid
+
fluid = image(icon, "tube_filler")
fluid.pixel_y = 18
fluid.alpha = 200
fluid.plane = MOB_PLANE
fluid.layer = MOB_LAYER+0.1 //Below glass, above mob
+
add_overlay(tank)
update_icon()
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index be8639e4bc..8475dbb55b 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -288,9 +288,24 @@
time_till_despawn = 60 //1 second, because gateway.
+<<<<<<< HEAD
/obj/machinery/cryopod/New()
+=======
+/obj/machinery/cryopod/robot/door/checkpoint
+ name = "automated checkpoint"
+ desc = "A reinforced, automated checkpoint tracking arrivals and departures from the outpost. Beyond this vault is a small airstrip, then nothing but untamed wilderness."
+ on_store_message = "has departed from the colony."
+ on_store_name = "Travel Oversight"
+ on_enter_occupant_message = "The checkpoint unseals and grinds open, and you step through."
+ on_store_visible_message_1 = "grinds closed after"
+ on_store_visible_message_2 = "passes through it."
+ time_till_despawn = 10 // 1 second, because math
+
+/obj/machinery/cryopod/Initialize()
+ . = ..()
+>>>>>>> 2f0a618d451... /atom New() => Initialize() [MDB IGNORE] (#8298)
announce = new /obj/item/device/radio/intercom(src)
- ..()
+ find_control_computer()
/obj/machinery/cryopod/Destroy()
if(occupant)
@@ -298,11 +313,6 @@
occupant.resting = 1
return ..()
-/obj/machinery/cryopod/Initialize()
- . = ..()
-
- find_control_computer()
-
/obj/machinery/cryopod/proc/find_control_computer(urgent=0)
control_computer = null
diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm
index a72d814c79..9ea64dc99f 100644
--- a/code/game/machinery/deployable.dm
+++ b/code/game/machinery/deployable.dm
@@ -21,8 +21,8 @@ Deployable items
var/locked = 0.0
// req_access = list(access_maint_tunnels)
-/obj/machinery/deployable/barrier/New()
- ..()
+/obj/machinery/deployable/barrier/Initialize()
+ . = ..()
icon_state = "barrier[locked]"
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 7ff6f5971b..24cf36bce5 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
@@ -1553,3 +1554,1495 @@ 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/weapon/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/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
+ else if(user.hallucination > 50 && prob(10) && src.operating == 0)
+ to_chat(user, "You feel a powerful shock course through your body!")
+ user.halloss += 10
+ user.stunned += 10
+ 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/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()
+ if(overlays) overlays.Cut()
+ if(density)
+ if(locked && lights && src.arePowerSystemsOn())
+ icon_state = "door_locked"
+ else
+ icon_state = "door_closed"
+ if(p_open || welded)
+ overlays = list()
+ if(p_open)
+ overlays += image(icon, "panel_open")
+ if (!(stat & NOPOWER))
+ if(stat & BROKEN)
+ overlays += image(icon, "sparks_broken")
+ else if (health < maxhealth * 3/4)
+ overlays += image(icon, "sparks_damaged")
+ if(welded)
+ overlays += image(icon, "welded")
+ else if (health < maxhealth * 3/4 && !(stat & NOPOWER))
+ overlays += image(icon, "sparks_damaged")
+ else
+ icon_state = "door_open"
+ if((stat & BROKEN) && !(stat & NOPOWER))
+ overlays += image(icon, "sparks_open")
+ return
+
+/obj/machinery/door/airlock/do_animate(animation)
+ switch(animation)
+ if("opening")
+ if(overlays) overlays.Cut()
+ 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")
+ if(overlays) overlays.Cut()
+ 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/effect/system/spark_spread/s = new /datum/effect/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/weapon/weldingtool) && !( src.operating > 0 ) && src.density)
+ var/obj/item/weapon/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())
+ if (src.p_open)
+ if (stat & BROKEN)
+ to_chat(usr, "The panel is broken and cannot be closed.")
+ else
+ src.p_open = 0
+ playsound(src, C.usesound, 50, 1)
+ else
+ src.p_open = 1
+ playsound(src, C.usesound, 50, 1)
+ src.update_icon()
+ else if(C.is_wirecutter())
+ return src.attack_hand(user)
+ else if(istype(C, /obj/item/device/multitool))
+ return src.attack_hand(user)
+ else if(istype(C, /obj/item/device/assembly/signaler))
+ return src.attack_hand(user)
+ else if(istype(C, /obj/item/weapon/pai_cable)) // -- TLE
+ var/obj/item/weapon/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/weapon/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).
+ else if(istype(C, /obj/item/weapon))
+ var/obj/item/weapon/W = C
+ if((W.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/weapon/material/twohanded/fireaxe)) // If this is a fireaxe, make sure it's held in two hands.
+ var/obj/item/weapon/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
+ ..()
+ 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 = 1
+ 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!")
+
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/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/weapon/airlock_electronics/secure( src.loc )
+ else
+ src.electronics = new/obj/item/weapon/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/weapon/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/weapon/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
+>>>>>>> 2f0a618d451... /atom New() => Initialize() [MDB IGNORE] (#8298)
diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm
index 3c91bd7c02..9d3e7c4adf 100644
--- a/code/game/machinery/doors/airlock_control.dm
+++ b/code/game/machinery/doors/airlock_control.dm
@@ -132,14 +132,6 @@
frequency = new_frequency
radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK)
-
-/obj/machinery/door/airlock/Initialize()
- . = ..()
- if(frequency)
- set_frequency(frequency)
-
- update_icon()
-
/obj/machinery/door/airlock/Destroy()
if(frequency && radio_controller)
radio_controller.remove_object(src,frequency)
diff --git a/code/game/machinery/doors/alarmlock.dm b/code/game/machinery/doors/alarmlock.dm
index f7dda48feb..7508f559a8 100644
--- a/code/game/machinery/doors/alarmlock.dm
+++ b/code/game/machinery/doors/alarmlock.dm
@@ -9,10 +9,6 @@
var/air_frequency = 1437
autoclose = 0
-/obj/machinery/door/airlock/alarmlock/New()
- ..()
- air_connection = new
-
/obj/machinery/door/airlock/alarmlock/Destroy()
if(radio_controller)
radio_controller.remove_object(src,air_frequency)
@@ -22,8 +18,7 @@
. = ..()
radio_controller.remove_object(src, air_frequency)
air_connection = radio_controller.add_object(src, air_frequency, RADIO_TO_AIRALARM)
- open()
-
+ addtimer(CALLBACK(src, .proc/open), 0)
/obj/machinery/door/airlock/alarmlock/receive_signal(datum/signal/signal)
..()
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index fa31ef365f..fd4060db9c 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -53,7 +53,7 @@
visible_message("\The [user] bonks \the [src] harmlessly.")
user.do_attack_animation(src)
-/obj/machinery/door/New()
+/obj/machinery/door/Initialize()
. = ..()
if(density)
layer = closed_layer
diff --git a/code/game/machinery/doors/multi_tile.dm b/code/game/machinery/doors/multi_tile.dm
index 23b71bdb0f..3c01632191 100644
--- a/code/game/machinery/doors/multi_tile.dm
+++ b/code/game/machinery/doors/multi_tile.dm
@@ -7,7 +7,22 @@
open_sound_powered = 'sound/machines/door/WideOpen.ogg'
close_sound_powered = 'sound/machines/door/WideClose.ogg'
+<<<<<<< HEAD
/obj/machinery/door/airlock/multi_tile/Initialize(mapload)
+=======
+/obj/machinery/door/airlock/multi_tile/Initialize()
+ . = ..()
+ SetBounds()
+ if(opacity)
+ create_fillers()
+
+/obj/machinery/door/airlock/multi_tile/Destroy()
+ QDEL_NULL(filler1)
+ QDEL_NULL(filler2)
+ return ..()
+
+/obj/machinery/door/airlock/multi_tile/Moved(atom/old_loc, direction, forced = FALSE)
+>>>>>>> 2f0a618d451... /atom New() => Initialize() [MDB IGNORE] (#8298)
. = ..()
SetBounds()
RegisterSignal(src, COMSIG_MOVABLE_MOVED, .proc/SetBounds)
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index 28afc5e9ff..b11781dbb0 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -17,8 +17,8 @@
can_atmos_pass = ATMOS_PASS_PROC
air_properties_vary_with_direction = 1
-/obj/machinery/door/window/New()
- ..()
+/obj/machinery/door/window/Initialize()
+ . = ..()
update_nearby_tiles()
if(LAZYLEN(req_access))
src.icon_state = "[src.icon_state]"
diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm
index 7b8039cb6f..dd15e02a99 100644
--- a/code/game/machinery/doppler_array.dm
+++ b/code/game/machinery/doppler_array.dm
@@ -9,8 +9,8 @@ var/list/doppler_arrays = list()
icon_state = "doppler"
-/obj/machinery/doppler_array/New()
- ..()
+/obj/machinery/doppler_array/Initialize()
+ . = ..()
doppler_arrays += src
/obj/machinery/doppler_array/Destroy()
diff --git a/code/game/machinery/floodlight.dm b/code/game/machinery/floodlight.dm
index a5cc7d6750..39693f3e28 100644
--- a/code/game/machinery/floodlight.dm
+++ b/code/game/machinery/floodlight.dm
@@ -13,9 +13,9 @@
var/open = 0
var/brightness_on = 8 //can't remember what the maxed out value is
-/obj/machinery/floodlight/New()
+/obj/machinery/floodlight/Initialize()
+ . = ..()
cell = new(src)
- ..()
/obj/machinery/floodlight/update_icon()
cut_overlays()
diff --git a/code/game/machinery/floorlayer.dm b/code/game/machinery/floorlayer.dm
index dfbf3c38df..3be956bcae 100644
--- a/code/game/machinery/floorlayer.dm
+++ b/code/game/machinery/floorlayer.dm
@@ -8,9 +8,9 @@
var/obj/item/stack/tile/T
var/list/mode = list("dismantle"=0,"laying"=0,"collect"=0)
-/obj/machinery/floorlayer/New()
+/obj/machinery/floorlayer/Initialize()
+ . = ..()
T = new/obj/item/stack/tile/floor(src)
- ..()
/obj/machinery/floorlayer/Moved(atom/old_loc, direction, forced = FALSE)
. = ..()
diff --git a/code/game/machinery/frame.dm b/code/game/machinery/frame.dm
index d651ad2025..69652ef021 100644
--- a/code/game/machinery/frame.dm
+++ b/code/game/machinery/frame.dm
@@ -280,8 +280,8 @@
for(var/obj/ct as anything in req_components)
req_component_names[ct] = initial(ct.name)
-/obj/structure/frame/New(var/loc, var/dir, var/building = 0, var/datum/frame/frame_types/type, mob/user as mob)
- ..()
+/obj/structure/frame/Initialize(var/ml, var/dir, var/building = 0, var/datum/frame/frame_types/type, mob/user as mob)
+ . = ..()
if(building)
frame_type = type
state = FRAME_PLACED
diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm
index 060bd029fc..a511e09d9b 100755
--- a/code/game/machinery/igniter.dm
+++ b/code/game/machinery/igniter.dm
@@ -30,8 +30,8 @@
location.hotspot_expose(1000,500,1)
return 1
-/obj/machinery/igniter/New()
- ..()
+/obj/machinery/igniter/Initialize()
+ . = ..()
icon_state = "igniter[on]"
/obj/machinery/igniter/power_change()
@@ -58,9 +58,6 @@
idle_power_usage = 2
active_power_usage = 4
-/obj/machinery/sparker/New()
- ..()
-
/obj/machinery/sparker/power_change()
..()
if(!(stat & NOPOWER) && disable == 0)
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index 137d3a7adb..8df3b6bfe2 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -119,17 +119,20 @@ Class Procs:
var/speed_process = FALSE //If false, SSmachines. If true, SSfastprocess.
+<<<<<<< HEAD
blocks_emissive = EMISSIVE_BLOCK_GENERIC
/obj/machinery/New(l, d=0)
..()
if(isnum(d))
+=======
+/obj/machinery/Initialize(var/ml, d=0)
+ . = ..()
+ if(d)
+>>>>>>> 2f0a618d451... /atom New() => Initialize() [MDB IGNORE] (#8298)
set_dir(d)
if(ispath(circuit))
circuit = new circuit(src)
-
-/obj/machinery/Initialize(var/mapload)
- . = ..()
global.machines += src
if(ispath(circuit))
circuit = new circuit(src)
@@ -137,7 +140,7 @@ Class Procs:
START_MACHINE_PROCESSING(src)
else
START_PROCESSING(SSfastprocess, src)
- if(!mapload)
+ if(!ml)
power_change()
/obj/machinery/Destroy()
diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm
index f713cea2d0..603baf20df 100644
--- a/code/game/machinery/magnet.dm
+++ b/code/game/machinery/magnet.dm
@@ -27,8 +27,8 @@
var/center_y = 0
var/max_dist = 20 // absolute value of center_x,y cannot exceed this integer
-/obj/machinery/magnetic_module/New()
- ..()
+/obj/machinery/magnetic_module/Initialize()
+ . = ..()
var/turf/T = loc
hide(!T.is_plating())
center = T
@@ -209,8 +209,8 @@
var/datum/radio_frequency/radio_connection
-/obj/machinery/magnetic_controller/New()
- ..()
+/obj/machinery/magnetic_controller/Initialize()
+ . = ..()
if(autolink)
for(var/obj/machinery/magnetic_module/M in machines)
diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm
index 7e6721f109..7f200a4d0f 100644
--- a/code/game/machinery/mass_driver.dm
+++ b/code/game/machinery/mass_driver.dm
@@ -16,7 +16,7 @@
var/id = 1.0
var/drive_range = 50 //this is mostly irrelevant since current mass drivers throw into space, but you could make a lower-range mass driver for interstation transport or something I guess.
-/obj/machinery/mass_driver/New()
+/obj/machinery/mass_driver/Initialize()
. = ..()
default_apply_parts()
diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm
index 90a623d0b9..a0e5014606 100644
--- a/code/game/machinery/navbeacon.dm
+++ b/code/game/machinery/navbeacon.dm
@@ -18,8 +18,8 @@ var/global/list/navbeacons = list() // no I don't like putting this in, but it w
var/list/codes = list() // assoc. list of transponder codes
req_access = list(access_engine)
-/obj/machinery/navbeacon/New()
- ..()
+/obj/machinery/navbeacon/Initialize()
+ . = ..()
set_codes_from_txt(codes_txt)
if(freq)
warning("[src] at [x],[y],[z] has deprecated var freq=[freq]. Replace it with proper type.")
@@ -233,6 +233,6 @@ Transponder Codes: