diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm
index d696aad039..a72aae425b 100644
--- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm
@@ -194,7 +194,7 @@
return 1
-/obj/machinery/atmospherics/binary/dp_vent_pump/initialize()
+/obj/machinery/atmospherics/binary/dp_vent_pump/Initialize()
. = ..()
if(frequency)
set_frequency(frequency)
diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
index 3988b790c8..accedb543d 100644
--- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
@@ -129,7 +129,7 @@
return 1
-/obj/machinery/atmospherics/binary/passive_gate/initialize()
+/obj/machinery/atmospherics/binary/passive_gate/Initialize()
. = ..()
if(frequency)
set_frequency(frequency)
diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm
index b03206b262..cacdf5240b 100644
--- a/code/ATMOSPHERICS/components/binary_devices/pump.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm
@@ -149,7 +149,7 @@ Thus, the two variables affect pump operation are set in New():
ui.open() // open the new ui window
ui.set_auto_update(1) // auto update every Master Controller tick
-/obj/machinery/atmospherics/binary/pump/initialize()
+/obj/machinery/atmospherics/binary/pump/Initialize()
. = ..()
if(frequency)
set_frequency(frequency)
diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm
index 49cb05e9af..ea3bd60456 100755
--- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm
+++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm
@@ -105,7 +105,7 @@
return 1
-/obj/machinery/atmospherics/trinary/atmos_filter/initialize()
+/obj/machinery/atmospherics/trinary/atmos_filter/Initialize()
. = ..()
if(frequency)
set_frequency(frequency)
diff --git a/code/ATMOSPHERICS/components/tvalve.dm b/code/ATMOSPHERICS/components/tvalve.dm
index cfc990c6e5..c0d796d45b 100644
--- a/code/ATMOSPHERICS/components/tvalve.dm
+++ b/code/ATMOSPHERICS/components/tvalve.dm
@@ -302,7 +302,7 @@
-/obj/machinery/atmospherics/tvalve/digital/initialize()
+/obj/machinery/atmospherics/tvalve/digital/Initialize()
. = ..()
if(frequency)
set_frequency(frequency)
diff --git a/code/ATMOSPHERICS/components/unary/outlet_injector.dm b/code/ATMOSPHERICS/components/unary/outlet_injector.dm
index 4a9403a64b..ee1379ac28 100644
--- a/code/ATMOSPHERICS/components/unary/outlet_injector.dm
+++ b/code/ATMOSPHERICS/components/unary/outlet_injector.dm
@@ -122,7 +122,7 @@
return 1
-/obj/machinery/atmospherics/unary/outlet_injector/initialize()
+/obj/machinery/atmospherics/unary/outlet_injector/Initialize()
. = ..()
if(frequency)
set_frequency(frequency)
diff --git a/code/ATMOSPHERICS/components/valve.dm b/code/ATMOSPHERICS/components/valve.dm
index f385ae5ed6..2e5e3e08ee 100644
--- a/code/ATMOSPHERICS/components/valve.dm
+++ b/code/ATMOSPHERICS/components/valve.dm
@@ -263,7 +263,7 @@
if(frequency)
radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA)
-/obj/machinery/atmospherics/valve/digital/initialize()
+/obj/machinery/atmospherics/valve/digital/Initialize()
. = ..()
if(frequency)
set_frequency(frequency)
diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm
index 527bf55d93..ee5d3a4f23 100644
--- a/code/__defines/misc.dm
+++ b/code/__defines/misc.dm
@@ -258,7 +258,7 @@
// If the GLOB system is ever ported, you can change this macro in one place and have less work to do than you otherwise would.
#define GLOBAL_LIST_BOILERPLATE(LIST_NAME, PATH)\
var/global/list/##LIST_NAME = list();\
-##PATH/initialize(mapload, ...)\
+##PATH/Initialize(mapload, ...)\
{\
##LIST_NAME += src;\
return ..();\
diff --git a/code/controllers/subsystems/atoms.dm b/code/controllers/subsystems/atoms.dm
index 7dae153d66..60fccf6dd3 100644
--- a/code/controllers/subsystems/atoms.dm
+++ b/code/controllers/subsystems/atoms.dm
@@ -77,7 +77,7 @@ SUBSYSTEM_DEF(atoms)
var/start_tick = world.time
- var/result = A.initialize(arglist(arguments))
+ var/result = A.Initialize(arglist(arguments))
if(start_tick != world.time)
BadInitializeCalls[the_type] |= BAD_INIT_SLEPT
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index 5d318cf932..dbe6d45c30 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -59,7 +59,7 @@
..()
-/area/initialize()
+/area/Initialize()
. = ..()
return INITIALIZE_HINT_LATELOAD // Areas tradiationally are initialized AFTER other atoms.
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index d1289a23de..4d71c4af27 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -63,7 +63,7 @@
// Must not sleep!
// 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, ...)
+/atom/proc/Initialize(mapload, ...)
if(QDELETED(src))
crash_with("GC: -- [type] had initialize() called after qdel() --")
if(initialized)
diff --git a/code/game/gamemodes/changeling/powers/fabricate_clothing.dm b/code/game/gamemodes/changeling/powers/fabricate_clothing.dm
index d79af62b4c..b90b402e78 100644
--- a/code/game/gamemodes/changeling/powers/fabricate_clothing.dm
+++ b/code/game/gamemodes/changeling/powers/fabricate_clothing.dm
@@ -268,7 +268,7 @@ var/global/list/changeling_fabricated_clothing = list(
..()
registered_user = user
-/obj/item/weapon/card/id/syndicate/changeling/initialize()
+/obj/item/weapon/card/id/syndicate/changeling/Initialize()
. = ..()
access = null
diff --git a/code/game/gamemodes/technomancer/spells/control.dm b/code/game/gamemodes/technomancer/spells/control.dm
index 1c91862a4e..b41823dc54 100644
--- a/code/game/gamemodes/technomancer/spells/control.dm
+++ b/code/game/gamemodes/technomancer/spells/control.dm
@@ -76,7 +76,7 @@
continue
L.ai_holder.give_target(target)
-/obj/item/weapon/spell/control/initialize()
+/obj/item/weapon/spell/control/Initialize()
control_overlay = image('icons/obj/spells.dmi',"controlled")
return ..()
diff --git a/code/game/gamemodes/technomancer/spells/spawner/pulsar.dm b/code/game/gamemodes/technomancer/spells/spawner/pulsar.dm
index 18e5785a05..6dcd2cf4b2 100644
--- a/code/game/gamemodes/technomancer/spells/spawner/pulsar.dm
+++ b/code/game/gamemodes/technomancer/spells/spawner/pulsar.dm
@@ -30,7 +30,7 @@
var/pulses_remaining = 3
var/pulse_delay = 2 SECONDS
-/obj/effect/temporary_effect/pulse/initialize()
+/obj/effect/temporary_effect/pulse/Initialize()
spawn(0)
pulse_loop()
return ..()
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index de673cec37..49a4b342ef 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -181,7 +181,7 @@
RefreshParts()
-/obj/machinery/sleeper/initialize()
+/obj/machinery/sleeper/Initialize()
. = ..()
update_icon()
diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm
index 6b4013b820..d507403043 100644
--- a/code/game/machinery/alarm.dm
+++ b/code/game/machinery/alarm.dm
@@ -137,7 +137,7 @@
TLV["temperature"] = list(T0C - 26, T0C, T0C + 40, T0C + 66) // K
-/obj/machinery/alarm/initialize()
+/obj/machinery/alarm/Initialize()
. = ..()
set_frequency(frequency)
if(!master_is_operating())
@@ -1003,7 +1003,7 @@ FIRE ALARM
seclevel = newlevel
update_icon()
-/obj/machinery/firealarm/initialize()
+/obj/machinery/firealarm/Initialize()
. = ..()
if(z in using_map.contact_levels)
set_security_level(security_level? get_security_level() : "green")
diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm
index 59e9670d1f..839470f356 100644
--- a/code/game/machinery/atmo_control.dm
+++ b/code/game/machinery/atmo_control.dm
@@ -63,7 +63,7 @@
frequency = new_frequency
radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA)
-/obj/machinery/air_sensor/initialize()
+/obj/machinery/air_sensor/Initialize()
. = ..()
if(frequency)
set_frequency(frequency)
@@ -129,7 +129,7 @@ obj/machinery/computer/general_air_control/Destroy()
frequency = new_frequency
radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA)
-/obj/machinery/computer/general_air_control/initialize()
+/obj/machinery/computer/general_air_control/Initialize()
. = ..()
if(frequency)
set_frequency(frequency)
diff --git a/code/game/machinery/atmoalter/area_atmos_computer.dm b/code/game/machinery/atmoalter/area_atmos_computer.dm
index bd3b390fc8..d64013c9c5 100644
--- a/code/game/machinery/atmoalter/area_atmos_computer.dm
+++ b/code/game/machinery/atmoalter/area_atmos_computer.dm
@@ -14,11 +14,15 @@
//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 "
+<<<<<<< HEAD
/obj/machinery/computer/area_atmos/New()
..()
desc += "[range] meters."
/obj/machinery/computer/area_atmos/initialize()
+=======
+/obj/machinery/computer/area_atmos/Initialize()
+>>>>>>> 61df5b8... Merge pull request #5762 from kevinz000/initialize_caps
. = ..()
scanscrubbers()
@@ -72,7 +76,10 @@
[status]
Scan
"}
+<<<<<<< HEAD
+=======
+>>>>>>> 61df5b8... Merge pull request #5762 from kevinz000/initialize_caps
for(var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber in connectedscrubbers)
dat += {"
@@ -102,9 +109,15 @@
usr.set_machine(src)
src.add_fingerprint(usr)
+<<<<<<< HEAD
if(href_list["scan"])
scanscrubbers()
+=======
+
+ if(href_list["scan"])
+ scanscrubbers()
+>>>>>>> 61df5b8... Merge pull request #5762 from kevinz000/initialize_caps
else if(href_list["toggle"])
var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber = locate(href_list["scrub"])
@@ -118,6 +131,7 @@
scrubber.on = text2num(href_list["toggle"])
scrubber.update_icon()
+<<<<<<< HEAD
/obj/machinery/computer/area_atmos/proc/scanscrubbers()
connectedscrubbers.Cut()
@@ -136,6 +150,26 @@
return 1
return 0
+=======
+/obj/machinery/computer/area_atmos/proc/validscrubber(obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber as obj)
+ if(!isobj(scrubber) || get_dist(scrubber.loc, src.loc) > src.range || scrubber.loc.z != src.loc.z)
+ return FALSE
+ return TRUE
+
+/obj/machinery/computer/area_atmos/proc/scanscrubbers()
+ connectedscrubbers = new()
+
+ var/found = 0
+ for(var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber in range(range, src.loc))
+ if(istype(scrubber))
+ found = 1
+ connectedscrubbers += scrubber
+
+ if(!found)
+ status = "ERROR: No scrubber found!"
+
+ updateUsrDialog()
+>>>>>>> 61df5b8... Merge pull request #5762 from kevinz000/initialize_caps
// The one that only works in the same map area
/obj/machinery/computer/area_atmos/area
diff --git a/code/game/machinery/atmoalter/meter.dm b/code/game/machinery/atmoalter/meter.dm
index c96837265d..7ee37757cc 100644
--- a/code/game/machinery/atmoalter/meter.dm
+++ b/code/game/machinery/atmoalter/meter.dm
@@ -12,7 +12,7 @@
use_power = 1
idle_power_usage = 15
-/obj/machinery/meter/initialize()
+/obj/machinery/meter/Initialize()
. = ..()
if (!target)
target = select_target()
diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm
index 73f5abce4b..8778b4e5f3 100644
--- a/code/game/machinery/atmoalter/portable_atmospherics.dm
+++ b/code/game/machinery/atmoalter/portable_atmospherics.dm
@@ -26,7 +26,7 @@
QDEL_NULL(holding)
. = ..()
-/obj/machinery/portable_atmospherics/initialize()
+/obj/machinery/portable_atmospherics/Initialize()
. = ..()
spawn()
var/obj/machinery/atmospherics/portables_connector/port = locate() in loc
diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm
index 745bdc0694..c05a886046 100644
--- a/code/game/machinery/computer/camera.dm
+++ b/code/game/machinery/computer/camera.dm
@@ -225,7 +225,7 @@
circuit = /obj/item/weapon/circuitboard/security/telescreen/entertainment
var/obj/item/device/radio/radio = null
-/obj/machinery/computer/security/telescreen/entertainment/initialize()
+/obj/machinery/computer/security/telescreen/entertainment/Initialize()
. = ..()
radio = new(src)
radio.listening = TRUE
diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm
index cbf0041025..44a1f69945 100644
--- a/code/game/machinery/computer/cloning.dm
+++ b/code/game/machinery/computer/cloning.dm
@@ -16,7 +16,7 @@
var/loading = 0 // Nice loading text
-/obj/machinery/computer/cloning/initialize()
+/obj/machinery/computer/cloning/Initialize()
. = ..()
updatemodules()
diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm
index cb73fe4d7a..40a7551739 100644
--- a/code/game/machinery/computer/computer.dm
+++ b/code/game/machinery/computer/computer.dm
@@ -21,7 +21,7 @@
overlay_layer = layer
..()
-/obj/machinery/computer/initialize()
+/obj/machinery/computer/Initialize()
. = ..()
power_change()
update_icon()
diff --git a/code/game/machinery/computer/guestpass.dm b/code/game/machinery/computer/guestpass.dm
index 91a4a76bb8..f3e7eb33d6 100644
--- a/code/game/machinery/computer/guestpass.dm
+++ b/code/game/machinery/computer/guestpass.dm
@@ -54,7 +54,7 @@
expired = 1
return ..()
-/obj/item/weapon/card/id/guest/initialize()
+/obj/item/weapon/card/id/guest/Initialize()
. = ..()
processing_objects.Add(src)
update_icon()
diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm
index 670b637152..6fce75def7 100644
--- a/code/game/machinery/computer/message.dm
+++ b/code/game/machinery/computer/message.dm
@@ -71,7 +71,7 @@
icon_screen = initial(icon_screen)
..()
-/obj/machinery/computer/message_monitor/initialize()
+/obj/machinery/computer/message_monitor/Initialize()
//Is the server isn't linked to a server, and there's a server available, default it to the first one in the list.
if(!linkedServer)
if(message_servers && message_servers.len > 0)
diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm
index d3ab69b869..8bd2f91f89 100644
--- a/code/game/machinery/computer/station_alert.dm
+++ b/code/game/machinery/computer/station_alert.dm
@@ -17,7 +17,7 @@
monitor_type = /datum/nano_module/alarm_monitor/all
circuit = /obj/item/weapon/circuitboard/stationalert_all
-/obj/machinery/computer/station_alert/initialize()
+/obj/machinery/computer/station_alert/Initialize()
alarm_monitor = new monitor_type(src)
alarm_monitor.register_alarm(src, /obj/machinery/computer/station_alert/update_icon)
. = ..()
diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm
index 6993d988dd..809ada22c8 100644
--- a/code/game/machinery/cryo.dm
+++ b/code/game/machinery/cryo.dm
@@ -30,7 +30,7 @@
icon_state = "base"
initialize_directions = dir
-/obj/machinery/atmospherics/unary/cryo_cell/initialize()
+/obj/machinery/atmospherics/unary/cryo_cell/Initialize()
. = ..()
var/image/tank = image(icon,"tank")
tank.alpha = 200
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 389901c273..ec127a4599 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -303,7 +303,7 @@
occupant.resting = 1
return ..()
-/obj/machinery/cryopod/initialize()
+/obj/machinery/cryopod/Initialize()
. = ..()
find_control_computer()
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index fe82ca78a7..d1ee4846df 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -1205,7 +1205,7 @@ About the new airlock wires panel:
else
wires = new/datum/wires/airlock(src)
-/obj/machinery/door/airlock/initialize()
+/obj/machinery/door/airlock/Initialize()
if(src.closeOtherId != null)
for (var/obj/machinery/door/airlock/A in machines)
if(A.closeOtherId == src.closeOtherId && A != src)
diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm
index 295a7ff24f..cbd0875cd3 100644
--- a/code/game/machinery/doors/airlock_control.dm
+++ b/code/game/machinery/doors/airlock_control.dm
@@ -129,7 +129,7 @@ obj/machinery/door/airlock/proc/set_frequency(new_frequency)
radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK)
-obj/machinery/door/airlock/initialize()
+obj/machinery/door/airlock/Initialize()
. = ..()
if(frequency)
set_frequency(frequency)
@@ -203,7 +203,7 @@ obj/machinery/airlock_sensor/proc/set_frequency(new_frequency)
frequency = new_frequency
radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK)
-obj/machinery/airlock_sensor/initialize()
+obj/machinery/airlock_sensor/Initialize()
. = ..()
set_frequency(frequency)
@@ -276,7 +276,7 @@ obj/machinery/access_button/proc/set_frequency(new_frequency)
radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK)
-obj/machinery/access_button/initialize()
+obj/machinery/access_button/Initialize()
. = ..()
set_frequency(frequency)
diff --git a/code/game/machinery/doors/alarmlock.dm b/code/game/machinery/doors/alarmlock.dm
index 1c384a651d..f7dda48feb 100644
--- a/code/game/machinery/doors/alarmlock.dm
+++ b/code/game/machinery/doors/alarmlock.dm
@@ -18,7 +18,7 @@
radio_controller.remove_object(src,air_frequency)
..()
-/obj/machinery/door/airlock/alarmlock/initialize()
+/obj/machinery/door/airlock/alarmlock/Initialize()
. = ..()
radio_controller.remove_object(src, air_frequency)
air_connection = radio_controller.add_object(src, air_frequency, RADIO_TO_AIRALARM)
diff --git a/code/game/machinery/doors/blast_door.dm b/code/game/machinery/doors/blast_door.dm
index 693f213d2e..ab8819f8da 100644
--- a/code/game/machinery/doors/blast_door.dm
+++ b/code/game/machinery/doors/blast_door.dm
@@ -32,7 +32,7 @@
//turning this off prevents awkward zone geometry in places like medbay lobby, for example.
block_air_zones = 0
-/obj/machinery/door/blast/initialize()
+/obj/machinery/door/blast/Initialize()
. = ..()
implicit_material = get_material_by_name("plasteel")
diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm
index fe1d726d50..0935dfa724 100644
--- a/code/game/machinery/doors/brigdoors.dm
+++ b/code/game/machinery/doors/brigdoors.dm
@@ -31,7 +31,7 @@
maptext_height = 26
maptext_width = 32
-/obj/machinery/door_timer/initialize()
+/obj/machinery/door_timer/Initialize()
..()
//Doors need to go first, and can't rely on init order, so come back to me.
return INITIALIZE_HINT_LATELOAD
diff --git a/code/game/machinery/embedded_controller/airlock_controllers.dm b/code/game/machinery/embedded_controller/airlock_controllers.dm
index 6bf5fe0553..11893fa5ca 100644
--- a/code/game/machinery/embedded_controller/airlock_controllers.dm
+++ b/code/game/machinery/embedded_controller/airlock_controllers.dm
@@ -13,7 +13,7 @@
var/tag_secure = 0
var/cycle_to_external_air = 0
-/obj/machinery/embedded_controller/radio/airlock/initialize()
+/obj/machinery/embedded_controller/radio/airlock/Initialize()
. = ..()
program = new/datum/computer/file/embedded_program/airlock(src)
diff --git a/code/game/machinery/embedded_controller/airlock_docking_controller.dm b/code/game/machinery/embedded_controller/airlock_docking_controller.dm
index 86885ebd53..fa7d5dfa04 100644
--- a/code/game/machinery/embedded_controller/airlock_docking_controller.dm
+++ b/code/game/machinery/embedded_controller/airlock_docking_controller.dm
@@ -5,7 +5,7 @@
var/datum/computer/file/embedded_program/docking/airlock/docking_program
tag_secure = 1
-/obj/machinery/embedded_controller/radio/airlock/docking_port/initialize()
+/obj/machinery/embedded_controller/radio/airlock/docking_port/Initialize()
. = ..()
airlock_program = new/datum/computer/file/embedded_program/airlock/docking(src)
docking_program = new/datum/computer/file/embedded_program/docking/airlock(src, airlock_program)
diff --git a/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm b/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm
index 7c35568e51..bdce39de14 100644
--- a/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm
+++ b/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm
@@ -9,7 +9,7 @@
var/datum/computer/file/embedded_program/docking/multi/docking_program
-/obj/machinery/embedded_controller/radio/docking_port_multi/initialize()
+/obj/machinery/embedded_controller/radio/docking_port_multi/Initialize()
. = ..()
docking_program = new/datum/computer/file/embedded_program/docking/multi(src)
program = docking_program
@@ -55,7 +55,7 @@
var/datum/computer/file/embedded_program/airlock/multi_docking/airlock_program
tag_secure = 1
-/obj/machinery/embedded_controller/radio/airlock/docking_port_multi/initialize()
+/obj/machinery/embedded_controller/radio/airlock/docking_port_multi/Initialize()
. = ..()
airlock_program = new/datum/computer/file/embedded_program/airlock/multi_docking(src)
program = airlock_program
diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm
index 6833498b5f..17bf13181a 100644
--- a/code/game/machinery/embedded_controller/embedded_controller_base.dm
+++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm
@@ -57,7 +57,7 @@ obj/machinery/embedded_controller/radio/Destroy()
var/datum/radio_frequency/radio_connection
unacidable = 1
-/obj/machinery/embedded_controller/radio/initialize()
+/obj/machinery/embedded_controller/radio/Initialize()
. = ..()
set_frequency(frequency)
diff --git a/code/game/machinery/embedded_controller/simple_docking_controller.dm b/code/game/machinery/embedded_controller/simple_docking_controller.dm
index 9242afd762..8e5c941bbf 100644
--- a/code/game/machinery/embedded_controller/simple_docking_controller.dm
+++ b/code/game/machinery/embedded_controller/simple_docking_controller.dm
@@ -4,7 +4,7 @@
var/tag_door
var/datum/computer/file/embedded_program/docking/simple/docking_program
-/obj/machinery/embedded_controller/radio/simple_docking_controller/initialize()
+/obj/machinery/embedded_controller/radio/simple_docking_controller/Initialize()
. = ..()
docking_program = new/datum/computer/file/embedded_program/docking/simple(src)
program = docking_program
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index 5f5387184d..75a056dd1c 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -124,7 +124,7 @@ Class Procs:
if(circuit)
circuit = new circuit(src)
-/obj/machinery/initialize()
+/obj/machinery/Initialize()
. = ..()
global.machines += src
START_MACHINE_PROCESSING(src)
diff --git a/code/game/machinery/oxygen_pump.dm b/code/game/machinery/oxygen_pump.dm
index 2f781129b6..0720b03b26 100644
--- a/code/game/machinery/oxygen_pump.dm
+++ b/code/game/machinery/oxygen_pump.dm
@@ -22,7 +22,7 @@
idle_power_usage = 10
active_power_usage = 120 // No idea what the realistic amount would be.
-/obj/machinery/oxygen_pump/initialize()
+/obj/machinery/oxygen_pump/Initialize()
. = ..()
tank = new spawn_type (src)
contained = new mask_type (src)
diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm
index 0482e2f242..eb58a49959 100644
--- a/code/game/machinery/pipe/construction.dm
+++ b/code/game/machinery/pipe/construction.dm
@@ -38,7 +38,7 @@ Buildable meters
* @param loc Location
* @pipe_type
*/
-/obj/item/pipe/initialize(var/mapload, var/_pipe_type, var/_dir, var/obj/machinery/atmospherics/make_from)
+/obj/item/pipe/Initialize(var/mapload, var/_pipe_type, var/_dir, var/obj/machinery/atmospherics/make_from)
if(make_from)
make_from_existing(make_from)
else
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index e3a00abb4d..da85faf14a 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -62,7 +62,7 @@
return
// register for radio system
-/obj/machinery/status_display/initialize()
+/obj/machinery/status_display/Initialize()
. = ..()
if(radio_controller)
radio_controller.add_object(src, frequency)
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index 41130ad5b9..d94ac049b9 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -648,7 +648,7 @@
model_text = "Exploration"
departments = list("Exploration","Old Exploration")
-/obj/machinery/suit_cycler/exploreration/initialize()
+/obj/machinery/suit_cycler/exploreration/Initialize()
species -= SPECIES_TESHARI
return ..()
diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm
index ac85f8dba4..c1955399c2 100644
--- a/code/game/machinery/telecomms/telecomunications.dm
+++ b/code/game/machinery/telecomms/telecomunications.dm
@@ -122,7 +122,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
var/turf/position = get_turf(src)
listening_level = position.z
-/obj/machinery/telecomms/initialize()
+/obj/machinery/telecomms/Initialize()
if(autolinkers.len)
// Links nearby machines
if(!long_range_link)
@@ -317,7 +317,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
netspeed = 40
var/list/telecomms_map
-/obj/machinery/telecomms/hub/initialize()
+/obj/machinery/telecomms/hub/Initialize()
. = ..()
LAZYINITLIST(telecomms_map)
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
index 139fd8ecb9..1d3556b45e 100644
--- a/code/game/machinery/teleporter.dm
+++ b/code/game/machinery/teleporter.dm
@@ -17,7 +17,7 @@
underlays += image('icons/obj/stationobjs.dmi', icon_state = "telecomp-wires")
return
-/obj/machinery/computer/teleporter/initialize()
+/obj/machinery/computer/teleporter/Initialize()
. = ..()
var/obj/machinery/teleport/station/station
var/obj/machinery/teleport/hub/hub
diff --git a/code/game/machinery/turret_control.dm b/code/game/machinery/turret_control.dm
index d99795e6b3..c1911d6a05 100644
--- a/code/game/machinery/turret_control.dm
+++ b/code/game/machinery/turret_control.dm
@@ -45,7 +45,7 @@
A.turret_controls -= src
..()
-/obj/machinery/turretid/initialize()
+/obj/machinery/turretid/Initialize()
if(!control_area)
control_area = get_area(src)
else if(ispath(control_area))
diff --git a/code/game/machinery/vr_console.dm b/code/game/machinery/vr_console.dm
index 2b465e1265..b97f78cc2d 100644
--- a/code/game/machinery/vr_console.dm
+++ b/code/game/machinery/vr_console.dm
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
/obj/machinery/vr_sleeper
name = "virtual reality sleeper"
desc = "A fancy bed with built-in sensory I/O ports and connectors to interface users' minds with their bodies in virtual reality."
@@ -225,3 +226,232 @@
else
occupant.enter_vr(avatar)
+=======
+/obj/machinery/vr_sleeper
+ name = "virtual reality sleeper"
+ desc = "A fancy bed with built-in sensory I/O ports and connectors to interface users' minds with their bodies in virtual reality."
+ icon = 'icons/obj/Cryogenic2.dmi'
+ icon_state = "syndipod_0"
+ density = 1
+ anchored = 1
+ circuit = /obj/item/weapon/circuitboard/vr_sleeper
+ var/mob/living/carbon/human/occupant = null
+ var/mob/living/carbon/human/avatar = null
+ var/datum/mind/vr_mind = null
+
+ use_power = 1
+ idle_power_usage = 15
+ active_power_usage = 200
+ light_color = "#FF0000"
+
+/obj/machinery/vr_sleeper/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
+ component_parts += new /obj/item/stack/material/glass/reinforced(src, 2)
+
+ RefreshParts()
+
+/obj/machinery/vr_sleeper/Initialize()
+ . = ..()
+ update_icon()
+
+/obj/machinery/vr_sleeper/process()
+ if(stat & (NOPOWER|BROKEN))
+ return
+
+/obj/machinery/vr_sleeper/update_icon()
+ icon_state = "syndipod_[occupant ? "1" : "0"]"
+
+/obj/machinery/vr_sleeper/Topic(href, href_list)
+ if(..())
+ return 1
+
+ if(usr == occupant)
+ to_chat(usr, "You can't reach the controls from the inside.")
+ return
+
+ add_fingerprint(usr)
+
+ if(href_list["eject"])
+ go_out()
+
+ return 1
+
+/obj/machinery/vr_sleeper/attackby(var/obj/item/I, var/mob/user)
+ add_fingerprint(user)
+ if(default_deconstruction_screwdriver(user, I))
+ return
+ else if(default_deconstruction_crowbar(user, I))
+ if(occupant && avatar)
+ avatar.exit_vr()
+ avatar = null
+ go_out()
+ return
+
+
+/obj/machinery/vr_sleeper/MouseDrop_T(var/mob/target, var/mob/user)
+ if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user)|| !isliving(target))
+ return
+ go_in(target, user)
+
+
+
+/obj/machinery/sleeper/relaymove(var/mob/user)
+ ..()
+ if(usr.incapacitated())
+ return
+ go_out()
+
+
+
+/obj/machinery/vr_sleeper/emp_act(var/severity)
+ if(stat & (BROKEN|NOPOWER))
+ ..(severity)
+ return
+
+ if(occupant)
+ // This will eject the user from VR
+ // ### Fry the brain?
+ go_out()
+
+ ..(severity)
+
+/obj/machinery/vr_sleeper/verb/eject()
+ set src in oview(1)
+ set category = "Object"
+ set name = "Eject VR Capsule"
+
+ if(usr.incapacitated())
+ return
+
+ if(usr != occupant && avatar && alert(avatar, "Someone wants to remove you from virtual reality. Do you want to leave?", "Leave VR?", "Yes", "No") == "No")
+ return
+
+ // The player in VR is fine with leaving, kick them out and reset avatar
+ avatar.exit_vr()
+ avatar = null
+ go_out()
+ add_fingerprint(usr)
+
+/obj/machinery/vr_sleeper/verb/climb_in()
+ set src in oview(1)
+ set category = "Object"
+ set name = "Enter VR Capsule"
+
+ if(usr.incapacitated())
+ return
+ go_in(usr, usr)
+ add_fingerprint(usr)
+
+/obj/machinery/vr_sleeper/relaymove(mob/user as mob)
+ if(user.incapacitated())
+ return 0 //maybe they should be able to get out with cuffs, but whatever
+ go_out()
+
+/obj/machinery/vr_sleeper/proc/go_in(var/mob/M, var/mob/user)
+ if(!M)
+ return
+ if(stat & (BROKEN|NOPOWER))
+ return
+ if(!ishuman(M))
+ user << "\The [src] rejects [M] with a sharp beep."
+ if(occupant)
+ user << "\The [src] is already occupied."
+ return
+
+ if(M == user)
+ visible_message("\The [user] starts climbing into \the [src].")
+ else
+ visible_message("\The [user] starts putting [M] into \the [src].")
+
+ if(do_after(user, 20))
+ if(occupant)
+ to_chat(user, "\The [src] is already occupied.")
+ return
+ M.stop_pulling()
+ if(M.client)
+ M.client.perspective = EYE_PERSPECTIVE
+ M.client.eye = src
+ M.loc = src
+ update_use_power(2)
+ occupant = M
+
+ update_icon()
+
+ enter_vr()
+ return
+
+/obj/machinery/vr_sleeper/proc/go_out()
+ if(!occupant)
+ return
+
+ if(occupant.client)
+ occupant.client.eye = occupant.client.mob
+ occupant.client.perspective = MOB_PERSPECTIVE
+ occupant.loc = src.loc
+ occupant = null
+ for(var/atom/movable/A in src) // In case an object was dropped inside or something
+ if(A == circuit)
+ continue
+ if(A in component_parts)
+ continue
+ A.loc = src.loc
+ update_use_power(1)
+ update_icon()
+
+/obj/machinery/vr_sleeper/proc/enter_vr()
+
+ // No mob to transfer a mind from
+ if(!occupant)
+ return
+
+ // No mind to transfer
+ if(!occupant.mind)
+ return
+
+ // Mob doesn't have an active consciousness to send/receive from
+ if(occupant.stat != CONSCIOUS)
+ return
+
+ avatar = occupant.vr_link
+ // If they've already enterred VR, and are reconnecting, prompt if they want a new body
+ if(avatar && alert(occupant, "You already have a Virtual Reality avatar. Would you like to use it?", "New avatar", "Yes", "No") == "No")
+ // Delink the mob
+ occupant.vr_link = null
+ avatar = null
+
+ if(!avatar)
+ // Get the desired spawn location to put the body
+ var/S = null
+ var/list/vr_landmarks = list()
+ for(var/obj/effect/landmark/virtual_reality/sloc in landmarks_list)
+ vr_landmarks += sloc.name
+
+ S = input(occupant, "Please select a location to spawn your avatar at:", "Spawn location") as null|anything in vr_landmarks
+ if(!S)
+ return 0
+
+ for(var/obj/effect/landmark/virtual_reality/i in landmarks_list)
+ if(i.name == S)
+ S = i
+ break
+
+ avatar = new(S, "Virtual Reality Avatar")
+ // If the user has a non-default (Human) bodyshape, make it match theirs.
+ if(occupant.species.name != "Promethean" && occupant.species.name != "Human")
+ avatar.shapeshifter_change_shape(occupant.species.name)
+ avatar.forceMove(get_turf(S)) // Put the mob on the landmark, instead of inside it
+ avatar.Sleeping(1)
+
+ occupant.enter_vr(avatar)
+
+ // Prompt for username after they've enterred the body.
+ var/newname = sanitize(input(avatar, "You are entering virtual reality. Your username is currently [src.name]. Would you like to change it to something else?", "Name change") as null|text, MAX_NAME_LEN)
+ if (newname)
+ avatar.real_name = newname
+
+ else
+ occupant.enter_vr(avatar)
+
+>>>>>>> 61df5b8... Merge pull request #5762 from kevinz000/initialize_caps
diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm
index 8dcadc42b6..cf54e0fc3c 100644
--- a/code/game/mecha/equipment/tools/tools.dm
+++ b/code/game/mecha/equipment/tools/tools.dm
@@ -247,7 +247,7 @@
equip_type = EQUIP_SPECIAL
var/obj/item/weapon/rcd/electric/mounted/mecha/my_rcd = null
-/obj/item/mecha_parts/mecha_equipment/tool/rcd/initialize()
+/obj/item/mecha_parts/mecha_equipment/tool/rcd/Initialize()
my_rcd = new(src)
return ..()
diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index c289d79c69..5a80ed7cc3 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -38,7 +38,7 @@
files = new /datum/research(src) //Setup the research data holder.
return
-/obj/machinery/mecha_part_fabricator/initialize()
+/obj/machinery/mecha_part_fabricator/Initialize()
update_categories()
. = ..()
diff --git a/code/game/mecha/mech_prosthetics.dm b/code/game/mecha/mech_prosthetics.dm
index f6872478e0..c77bf27a92 100644
--- a/code/game/mecha/mech_prosthetics.dm
+++ b/code/game/mecha/mech_prosthetics.dm
@@ -39,7 +39,7 @@
files = new /datum/research(src) //Setup the research data holder.
return
-/obj/machinery/pros_fabricator/initialize()
+/obj/machinery/pros_fabricator/Initialize()
. = ..()
manufacturer = basic_robolimb.company
update_categories()
diff --git a/code/game/mecha/mech_sensor.dm b/code/game/mecha/mech_sensor.dm
index eee1ecefdb..3ac0361e48 100644
--- a/code/game/mecha/mech_sensor.dm
+++ b/code/game/mecha/mech_sensor.dm
@@ -69,7 +69,7 @@
else
icon_state = "airlock_sensor_off"
-/obj/machinery/mech_sensor/initialize()
+/obj/machinery/mech_sensor/Initialize()
. = ..()
set_frequency(frequency)
diff --git a/code/game/mecha/medical/medical.dm b/code/game/mecha/medical/medical.dm
index adb75800ea..90ab62681a 100644
--- a/code/game/mecha/medical/medical.dm
+++ b/code/game/mecha/medical/medical.dm
@@ -7,7 +7,7 @@
cargo_capacity = 1
-/obj/mecha/medical/initialize()
+/obj/mecha/medical/Initialize()
. = ..()
var/turf/T = get_turf(src)
if(isPlayerLevel(T.z))
diff --git a/code/game/mecha/working/working.dm b/code/game/mecha/working/working.dm
index dbdf68ce5b..f2149b1cdd 100644
--- a/code/game/mecha/working/working.dm
+++ b/code/game/mecha/working/working.dm
@@ -6,7 +6,7 @@
max_universal_equip = 1
max_special_equip = 1
-/obj/mecha/working/initialize()
+/obj/mecha/working/Initialize()
. = ..()
var/turf/T = get_turf(src)
if(isPlayerLevel(T.z))
diff --git a/code/game/objects/effects/decals/contraband.dm b/code/game/objects/effects/decals/contraband.dm
index 0d7370d269..c98cacb785 100644
--- a/code/game/objects/effects/decals/contraband.dm
+++ b/code/game/objects/effects/decals/contraband.dm
@@ -109,7 +109,7 @@
pixel_x = -32
pixel_y = 0
-/obj/structure/sign/poster/initialize()
+/obj/structure/sign/poster/Initialize()
. = ..()
if (poster_type)
var/path = text2path(poster_type)
diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm
index 6d9bb74faa..67e0a87e8d 100644
--- a/code/game/objects/effects/effect_system.dm
+++ b/code/game/objects/effects/effect_system.dm
@@ -103,7 +103,7 @@ steam.start() -- spawns the effect
if (istype(T, /turf))
T.hotspot_expose(1000,100)
-/obj/effect/effect/sparks/initialize()
+/obj/effect/effect/sparks/Initialize()
. = ..()
schedule_task_in(5 SECONDS, /proc/qdel, list(src))
diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm
index 50230eba17..193d24d4ab 100644
--- a/code/game/objects/effects/landmarks.dm
+++ b/code/game/objects/effects/landmarks.dm
@@ -83,7 +83,7 @@
/obj/effect/landmark/proc/delete()
delete_me = 1
-/obj/effect/landmark/initialize()
+/obj/effect/landmark/Initialize()
. = ..()
if(delete_me)
return INITIALIZE_HINT_QDEL
diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm
index d7db6f2a0c..5fca6fbecf 100644
--- a/code/game/objects/effects/misc.dm
+++ b/code/game/objects/effects/misc.dm
@@ -34,7 +34,7 @@
pixel_x = -32
pixel_y = -32
-/obj/effect/temporary_effect/cleave_attack/initialize() // Makes the slash fade smoothly. When completely transparent it should qdel itself.
+/obj/effect/temporary_effect/cleave_attack/Initialize() // Makes the slash fade smoothly. When completely transparent it should qdel itself.
. = ..()
animate(src, alpha = 0, time = time_to_die - 1)
@@ -44,7 +44,7 @@
icon_state = "shuttle_warning_still"
time_to_die = 4.9 SECONDS
-/obj/effect/temporary_effect/shuttle_landing/initialize()
+/obj/effect/temporary_effect/shuttle_landing/Initialize()
flick("shuttle_warning", src) // flick() forces the animation to always begin at the start.
. = ..()
@@ -60,7 +60,7 @@
time_to_die = 1 SECOND
pixel_x = -32
-/obj/effect/temporary_effect/lightning_strike/initialize()
+/obj/effect/temporary_effect/lightning_strike/Initialize()
icon_state += "[rand(1,2)]" // To have two variants of lightning sprites.
animate(src, alpha = 0, time = time_to_die - 1)
. = ..()
\ No newline at end of file
diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm
index f82bcefaa3..72ab9da44b 100644
--- a/code/game/objects/effects/spiders.dm
+++ b/code/game/objects/effects/spiders.dm
@@ -57,7 +57,7 @@
/obj/effect/spider/stickyweb
icon_state = "stickyweb1"
-/obj/effect/spider/stickyweb/initialize()
+/obj/effect/spider/stickyweb/Initialize()
if(prob(50))
icon_state = "stickyweb2"
return ..()
@@ -83,7 +83,7 @@
var/spiders_max = 24
var/spider_type = /obj/effect/spider/spiderling
-/obj/effect/spider/eggcluster/initialize()
+/obj/effect/spider/eggcluster/Initialize()
pixel_x = rand(3,-3)
pixel_y = rand(3,-3)
processing_objects |= src
diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm
index febfff6d0f..2ede69f232 100644
--- a/code/game/objects/effects/step_triggers.dm
+++ b/code/game/objects/effects/step_triggers.dm
@@ -128,7 +128,7 @@
var/obj/effect/landmark/the_landmark = null
var/landmark_id = null
-/obj/effect/step_trigger/teleporter/landmark/initialize()
+/obj/effect/step_trigger/teleporter/landmark/Initialize()
. = ..()
for(var/obj/effect/landmark/teleport_mark/mark in tele_landmarks)
if(mark.landmark_id == landmark_id)
diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm
index 4e28a370f7..8a9220e87f 100644
--- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm
+++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm
@@ -2,7 +2,7 @@
desc = "It's a decoy!"
duration = 15
-/obj/effect/temp_visual/decoy/initialize(mapload, atom/mimiced_atom, var/customappearance)
+/obj/effect/temp_visual/decoy/Initialize(mapload, atom/mimiced_atom, var/customappearance)
. = ..()
alpha = initial(alpha)
if(mimiced_atom)
@@ -13,7 +13,7 @@
if(customappearance)
appearance = customappearance
-/obj/effect/temp_visual/decoy/fading/initialize(mapload, atom/mimiced_atom)
+/obj/effect/temp_visual/decoy/fading/Initialize(mapload, atom/mimiced_atom)
. = ..()
animate(src, alpha = 0, time = duration)
diff --git a/code/game/objects/effects/temporary_visuals/temproary_visual.dm b/code/game/objects/effects/temporary_visuals/temproary_visual.dm
index 79a8797bae..c5038f1b28 100644
--- a/code/game/objects/effects/temporary_visuals/temproary_visual.dm
+++ b/code/game/objects/effects/temporary_visuals/temproary_visual.dm
@@ -8,7 +8,7 @@
var/duration = 10 //in deciseconds
var/randomdir = TRUE
-/obj/effect/temp_visual/initialize()
+/obj/effect/temp_visual/Initialize()
. = ..()
if(randomdir)
set_dir(pick(cardinal))
diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm
index cf91bbef3b..8f6533a702 100644
--- a/code/game/objects/items/devices/PDA/cart.dm
+++ b/code/game/objects/items/devices/PDA/cart.dm
@@ -108,7 +108,7 @@ var/list/civilian_cartridges = list(
icon_state = "cart-s"
access_security = 1
-/obj/item/weapon/cartridge/security/initialize()
+/obj/item/weapon/cartridge/security/Initialize()
radio = new /obj/item/radio/integrated/beepsky(src)
. = ..()
@@ -164,7 +164,7 @@ var/list/civilian_cartridges = list(
access_reagent_scanner = 1
access_atmos = 1
-/obj/item/weapon/cartridge/signal/initialize()
+/obj/item/weapon/cartridge/signal/Initialize()
radio = new /obj/item/radio/integrated/signal(src)
. = ..()
@@ -198,7 +198,7 @@ var/list/civilian_cartridges = list(
access_status_display = 1
access_security = 1
-/obj/item/weapon/cartridge/hos/initialize()
+/obj/item/weapon/cartridge/hos/Initialize()
radio = new /obj/item/radio/integrated/beepsky(src)
. = ..()
@@ -223,7 +223,7 @@ var/list/civilian_cartridges = list(
access_reagent_scanner = 1
access_atmos = 1
-/obj/item/weapon/cartridge/rd/initialize()
+/obj/item/weapon/cartridge/rd/Initialize()
radio = new /obj/item/radio/integrated/signal(src)
. = ..()
diff --git a/code/game/objects/items/devices/PDA/radio.dm b/code/game/objects/items/devices/PDA/radio.dm
index 9de35c2582..a5a76dd993 100644
--- a/code/game/objects/items/devices/PDA/radio.dm
+++ b/code/game/objects/items/devices/PDA/radio.dm
@@ -116,39 +116,37 @@
var/last_transmission
var/datum/radio_frequency/radio_connection
- initialize()
- if(!radio_controller)
- return
-
- if (src.frequency < PUBLIC_LOW_FREQ || src.frequency > PUBLIC_HIGH_FREQ)
- src.frequency = sanitize_frequency(src.frequency)
-
- set_frequency(frequency)
-
- proc/set_frequency(new_frequency)
- radio_controller.remove_object(src, frequency)
- frequency = new_frequency
- radio_connection = radio_controller.add_object(src, frequency)
-
- proc/send_signal(message="ACTIVATE")
-
- if(last_transmission && world.time < (last_transmission + 5))
- return
- last_transmission = world.time
-
- var/time = time2text(world.realtime,"hh:mm:ss")
- var/turf/T = get_turf(src)
- lastsignalers.Add("[time] : [usr.key] used [src] @ location ([T.x],[T.y],[T.z]) : [format_frequency(frequency)]/[code]")
-
- var/datum/signal/signal = new
- signal.source = src
- signal.encryption = code
- signal.data["message"] = message
-
- radio_connection.post_signal(src, signal)
-
+/obj/item/radio/integrated/signal/Initialize()
+ if(!radio_controller)
return
+ if (src.frequency < PUBLIC_LOW_FREQ || src.frequency > PUBLIC_HIGH_FREQ)
+ src.frequency = sanitize_frequency(src.frequency)
+
+ set_frequency(frequency)
+
+/obj/item/radio/integrated/signal/proc/set_frequency(new_frequency)
+ radio_controller.remove_object(src, frequency)
+ frequency = new_frequency
+ radio_connection = radio_controller.add_object(src, frequency)
+
+/obj/item/radio/integrated/signal/proc/send_signal(message="ACTIVATE")
+
+ if(last_transmission && world.time < (last_transmission + 5))
+ return
+ last_transmission = world.time
+
+ var/time = time2text(world.realtime,"hh:mm:ss")
+ var/turf/T = get_turf(src)
+ lastsignalers.Add("[time] : [usr.key] used [src] @ location ([T.x],[T.y],[T.z]) : [format_frequency(frequency)]/[code]")
+
+ var/datum/signal/signal = new
+ signal.source = src
+ signal.encryption = code
+ signal.data["message"] = message
+
+ radio_connection.post_signal(src, signal)
+
/obj/item/radio/integrated/signal/Destroy()
if(radio_controller)
radio_controller.remove_object(src, frequency)
diff --git a/code/game/objects/items/devices/communicator/cartridge.dm b/code/game/objects/items/devices/communicator/cartridge.dm
index 6b29f1121e..b5a46b4ebe 100644
--- a/code/game/objects/items/devices/communicator/cartridge.dm
+++ b/code/game/objects/items/devices/communicator/cartridge.dm
@@ -379,7 +379,7 @@
..()
internal_devices |= new /obj/item/device/halogen_counter(src)
-/obj/item/weapon/commcard/engineering/initialize()
+/obj/item/weapon/commcard/engineering/Initialize()
internal_data["grid_sensors"] = find_powernet_sensors()
internal_data["powernet_target"] = ""
@@ -616,7 +616,7 @@
internal_data["stat_display_active2"] = null
internal_data["stat_display_special"] = null
-/obj/item/weapon/commcard/head/initialize()
+/obj/item/weapon/commcard/head/Initialize()
// Have to register the commcard with the Radio controller to receive updates to the status displays
radio_controller.add_object(src, 1435)
..()
@@ -793,7 +793,7 @@
internal_devices |= new /obj.item/device/analyzer(src)
internal_devices |= new /obj/item/device/halogen_counter(src)
-/obj/item/weapon/commcard/head/ce/initialize()
+/obj/item/weapon/commcard/head/ce/Initialize()
internal_data["grid_sensors"] = find_powernet_sensors()
internal_data["powernet_target"] = ""
@@ -904,7 +904,7 @@
list("name" = "Shuttle Blast Door Control", "template" = "merc_blast_door_control.tmpl")
)
-/obj/item/weapon/commcard/mercenary/initialize()
+/obj/item/weapon/commcard/mercenary/Initialize()
internal_data["shuttle_door_code"] = "smindicate" // Copied from PDA code
internal_data["shuttle_doors"] = find_blast_doors()
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index b25d86897f..938cb24286 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -19,7 +19,7 @@
var/power_usage
var/power_use = 1
-/obj/item/device/flashlight/initialize()
+/obj/item/device/flashlight/Initialize()
. = ..()
update_icon()
diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm
index c62cb541ce..839dc7a2dc 100644
--- a/code/game/objects/items/devices/gps.dm
+++ b/code/game/objects/items/devices/gps.dm
@@ -17,7 +17,7 @@ var/list/GPS_list = list()
var/hide_signal = FALSE // If true, signal is not visible to other GPS devices.
var/can_hide_signal = FALSE // If it can toggle the above var.
-/obj/item/device/gps/initialize()
+/obj/item/device/gps/Initialize()
. = ..()
GPS_list += src
name = "global positioning system ([gps_tag])"
diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm
index a67a2bef7b..51d7e0a4b6 100644
--- a/code/game/objects/items/devices/radio/headset.dm
+++ b/code/game/objects/items/devices/radio/headset.dm
@@ -92,7 +92,7 @@
syndie = 1
ks1type = /obj/item/device/encryptionkey/raider
-/obj/item/device/radio/headset/raider/initialize()
+/obj/item/device/radio/headset/raider/Initialize()
. = ..()
set_frequency(RAID_FREQ)
diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index d462b670f9..9962b99cf2 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -54,7 +54,7 @@
/obj/item/device/radio/intercom/omni
name = "global announcer"
-/obj/item/device/radio/intercom/omni/initialize()
+/obj/item/device/radio/intercom/omni/Initialize()
channels = radiochannels.Copy()
return ..()
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index 9e03e7ff63..681956e6d0 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -81,7 +81,7 @@ var/global/list/default_medbay_channels = list(
return ..()
-/obj/item/device/radio/initialize()
+/obj/item/device/radio/Initialize()
. = ..()
if(frequency < RADIO_LOW_FREQ || frequency > RADIO_HIGH_FREQ)
frequency = sanitize_frequency(frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ)
diff --git a/code/game/objects/items/devices/tvcamera.dm b/code/game/objects/items/devices/tvcamera.dm
index be2b4c18e7..3fdaa5e79f 100644
--- a/code/game/objects/items/devices/tvcamera.dm
+++ b/code/game/objects/items/devices/tvcamera.dm
@@ -26,7 +26,7 @@
to_chat(usr, "Video feed is [camera.status ? "on" : "off"]")
to_chat(usr, "Audio feed is [radio.broadcasting ? "on" : "off"]")
-/obj/item/device/tvcamera/initialize()
+/obj/item/device/tvcamera/Initialize()
. = ..()
camera = new(src)
camera.c_tag = channel
diff --git a/code/game/objects/items/stacks/marker_beacons.dm b/code/game/objects/items/stacks/marker_beacons.dm
index f252ecae06..93462c640e 100644
--- a/code/game/objects/items/stacks/marker_beacons.dm
+++ b/code/game/objects/items/stacks/marker_beacons.dm
@@ -37,7 +37,7 @@ var/list/marker_beacon_colors = list(
/obj/item/stack/marker_beacon/hundred
amount = 100
-/obj/item/stack/marker_beacon/initialize()
+/obj/item/stack/marker_beacon/Initialize()
. = ..()
update_icon()
diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm
index a0587d5dbb..64f0ebab5e 100644
--- a/code/game/objects/items/weapons/RCD.dm
+++ b/code/game/objects/items/weapons/RCD.dm
@@ -28,7 +28,7 @@
var/material_to_use = DEFAULT_WALL_MATERIAL // So badmins can make RCDs that print diamond walls.
var/make_rwalls = FALSE // If true, when building walls, they will be reinforced.
-/obj/item/weapon/rcd/initialize()
+/obj/item/weapon/rcd/Initialize()
src.spark_system = new /datum/effect/effect/system/spark_spread
spark_system.set_up(5, 0, src)
spark_system.attach(src)
@@ -137,7 +137,7 @@
// RCD variants.
// This one starts full.
-/obj/item/weapon/rcd/loaded/initialize()
+/obj/item/weapon/rcd/loaded/Initialize()
stored_matter = max_stored_matter
return ..()
@@ -148,7 +148,7 @@
used in the construction of hulls for starships. Reload with compressed matter cartridges."
material_to_use = MAT_STEELHULL
-/obj/item/weapon/rcd/shipwright/loaded/initialize()
+/obj/item/weapon/rcd/shipwright/loaded/Initialize()
stored_matter = max_stored_matter
return ..()
@@ -162,7 +162,7 @@
toolspeed = 0.5 // Twice as fast.
max_stored_matter = RCD_MAX_CAPACITY * 3 // Three times capacity.
-/obj/item/weapon/rcd/advanced/loaded/initialize()
+/obj/item/weapon/rcd/advanced/loaded/Initialize()
stored_matter = max_stored_matter
return ..()
@@ -179,7 +179,7 @@
var/make_cell = TRUE // If false, initialize() won't spawn a cell for this.
var/electric_cost_coefficent = 83.33 // Higher numbers make it less efficent. 86.3... means it should matche the standard RCD capacity on a 10k cell.
-/obj/item/weapon/rcd/electric/initialize()
+/obj/item/weapon/rcd/electric/Initialize()
if(make_cell)
cell = new /obj/item/weapon/cell/high(src)
return ..()
diff --git a/code/game/objects/items/weapons/candle.dm b/code/game/objects/items/weapons/candle.dm
index 3f861b86d4..22a661fe77 100644
--- a/code/game/objects/items/weapons/candle.dm
+++ b/code/game/objects/items/weapons/candle.dm
@@ -85,13 +85,13 @@
/obj/item/weapon/flame/candle/everburn
wax = 99999
-/obj/item/weapon/flame/candle/everburn/initialize()
+/obj/item/weapon/flame/candle/everburn/Initialize()
. = ..()
light("\The [src] mysteriously lights itself!.")
/obj/item/weapon/flame/candle/candelabra/everburn
wax = 99999
-/obj/item/weapon/flame/candle/candelabra/everburn/initialize()
+/obj/item/weapon/flame/candle/candelabra/everburn/Initialize()
. = ..()
light("\The [src] mysteriously lights itself!.")
diff --git a/code/game/objects/items/weapons/id cards/station_ids.dm b/code/game/objects/items/weapons/id cards/station_ids.dm
index 8c29680fe0..c157d42492 100644
--- a/code/game/objects/items/weapons/id cards/station_ids.dm
+++ b/code/game/objects/items/weapons/id cards/station_ids.dm
@@ -121,7 +121,7 @@
return ..()
-/obj/item/weapon/card/id/initialize()
+/obj/item/weapon/card/id/Initialize()
. = ..()
var/datum/job/J = job_master.GetJob(rank)
if(J)
@@ -168,7 +168,7 @@
item_state = "tdgreen"
assignment = "Synthetic"
-/obj/item/weapon/card/id/synthetic/initialize()
+/obj/item/weapon/card/id/synthetic/Initialize()
. = ..()
access = get_all_station_access() + access_synth
@@ -179,11 +179,11 @@
registered_name = "Central Command"
assignment = "General"
-/obj/item/weapon/card/id/centcom/initialize()
+/obj/item/weapon/card/id/centcom/Initialize()
. = ..()
access = get_all_centcom_access()
-/obj/item/weapon/card/id/centcom/station/initialize()
+/obj/item/weapon/card/id/centcom/station/Initialize()
. = ..()
access |= get_all_station_access()
@@ -192,7 +192,7 @@
assignment = "Emergency Response Team"
icon_state = "centcom"
-/obj/item/weapon/card/id/centcom/ERT/initialize()
+/obj/item/weapon/card/id/centcom/ERT/Initialize()
. = ..()
access |= get_all_station_access()
diff --git a/code/game/objects/items/weapons/id cards/syndicate_ids.dm b/code/game/objects/items/weapons/id cards/syndicate_ids.dm
index 05528ca19b..e1ceb489dd 100644
--- a/code/game/objects/items/weapons/id cards/syndicate_ids.dm
+++ b/code/game/objects/items/weapons/id cards/syndicate_ids.dm
@@ -6,11 +6,11 @@
var/electronic_warfare = 1
var/mob/registered_user = null
-/obj/item/weapon/card/id/syndicate/initialize()
+/obj/item/weapon/card/id/syndicate/Initialize()
. = ..()
access = syndicate_access.Copy()
-/obj/item/weapon/card/id/syndicate/station_access/initialize()
+/obj/item/weapon/card/id/syndicate/station_access/Initialize()
. = ..() // Same as the normal Syndicate id, only already has all station access
access |= get_all_station_access()
diff --git a/code/game/objects/items/weapons/policetape.dm b/code/game/objects/items/weapons/policetape.dm
index d9a886029d..fcb2920aa0 100644
--- a/code/game/objects/items/weapons/policetape.dm
+++ b/code/game/objects/items/weapons/policetape.dm
@@ -14,7 +14,7 @@
var/apply_tape = FALSE
-/obj/item/taperoll/initialize()
+/obj/item/taperoll/Initialize()
. = ..()
if(apply_tape)
var/turf/T = get_turf(src)
diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm
index c1de372dc1..5a51eed695 100644
--- a/code/game/objects/items/weapons/storage/fancy.dm
+++ b/code/game/objects/items/weapons/storage/fancy.dm
@@ -92,7 +92,7 @@
/obj/item/weapon/pen/crayon/purple
)
-/obj/item/weapon/storage/fancy/crayons/initialize()
+/obj/item/weapon/storage/fancy/crayons/Initialize()
. = ..()
update_icon()
@@ -134,7 +134,7 @@
/obj/item/weapon/pen/crayon/marker/purple
)
-/obj/item/weapon/storage/fancy/markers/initialize()
+/obj/item/weapon/storage/fancy/markers/Initialize()
. = ..()
update_icon()
@@ -174,7 +174,7 @@
starts_with = list(/obj/item/clothing/mask/smokable/cigarette = 6)
var/brand = "\improper Trans-Stellar Duty-free"
-/obj/item/weapon/storage/fancy/cigarettes/initialize()
+/obj/item/weapon/storage/fancy/cigarettes/Initialize()
. = ..()
flags |= NOREACT
create_reagents(15 * storage_slots)//so people can inject cigarettes without opening a packet, now with being able to inject the whole one
@@ -280,7 +280,7 @@
icon_type = "cigar"
starts_with = list(/obj/item/clothing/mask/smokable/cigarette/cigar = 7)
-/obj/item/weapon/storage/fancy/cigar/initialize()
+/obj/item/weapon/storage/fancy/cigar/Initialize()
. = ..()
flags |= NOREACT
create_reagents(15 * storage_slots)
@@ -332,7 +332,7 @@
storage_slots = 6
req_access = list(access_virology)
-/obj/item/weapon/storage/lockbox/vials/initialize()
+/obj/item/weapon/storage/lockbox/vials/Initialize()
. = ..()
update_icon()
@@ -377,7 +377,7 @@
/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/truffle
)
-/obj/item/weapon/storage/fancy/heartbox/initialize()
+/obj/item/weapon/storage/fancy/heartbox/Initialize()
. = ..()
update_icon()
diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm
index d6aabf718f..d436af1936 100644
--- a/code/game/objects/items/weapons/storage/firstaid.dm
+++ b/code/game/objects/items/weapons/storage/firstaid.dm
@@ -17,7 +17,7 @@
max_storage_space = ITEMSIZE_COST_SMALL * 7 // 14
// var/list/icon_variety // VOREStation edit
-/obj/item/weapon/storage/firstaid/initialize()
+/obj/item/weapon/storage/firstaid/Initialize()
. = ..()
// if(icon_variety) // VOREStation edit
// icon_state = pick(icon_variety)
diff --git a/code/game/objects/items/weapons/storage/misc.dm b/code/game/objects/items/weapons/storage/misc.dm
index d103fbc6ef..9dca5c3edd 100644
--- a/code/game/objects/items/weapons/storage/misc.dm
+++ b/code/game/objects/items/weapons/storage/misc.dm
@@ -11,7 +11,7 @@
foldable = /obj/item/stack/material/cardboard
starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/donut/normal = 6)
-/obj/item/weapon/storage/box/donut/initialize()
+/obj/item/weapon/storage/box/donut/Initialize()
. = ..()
update_icon()
diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm
index 8d17a1a5c7..f400f87bb3 100644
--- a/code/game/objects/items/weapons/storage/storage.dm
+++ b/code/game/objects/items/weapons/storage/storage.dm
@@ -527,7 +527,7 @@
for(var/obj/item/I in contents)
remove_from_storage(I, T)
-/obj/item/weapon/storage/initialize()
+/obj/item/weapon/storage/Initialize()
. = ..()
if(allow_quick_empty)
diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm
index 7989c53f1d..6576578a80 100644
--- a/code/game/objects/items/weapons/storage/toolbox.dm
+++ b/code/game/objects/items/weapons/storage/toolbox.dm
@@ -24,7 +24,7 @@
/obj/item/weapon/extinguisher/mini,
/obj/item/device/radio
)
-/obj/item/weapon/storage/toolbox/emergency/initialize()
+/obj/item/weapon/storage/toolbox/emergency/Initialize()
if(prob(50))
new /obj/item/device/flashlight(src)
else
@@ -56,7 +56,7 @@
/obj/item/stack/cable_coil/random_belt,
/obj/item/stack/cable_coil/random_belt
)
-/obj/item/weapon/storage/toolbox/electrical/initialize()
+/obj/item/weapon/storage/toolbox/electrical/Initialize()
. = ..()
if(prob(5))
new /obj/item/clothing/gloves/yellow(src)
@@ -102,7 +102,7 @@
var/filled = FALSE
attack_verb = list("lunched")
-/obj/item/weapon/storage/toolbox/lunchbox/initialize()
+/obj/item/weapon/storage/toolbox/lunchbox/Initialize()
if(filled)
var/list/lunches = lunchables_lunches()
var/lunch = lunches[pick(lunches)]
diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm
index c66da84712..4291752587 100644
--- a/code/game/objects/items/weapons/storage/uplink_kits.dm
+++ b/code/game/objects/items/weapons/storage/uplink_kits.dm
@@ -1,4 +1,4 @@
-/obj/item/weapon/storage/box/syndicate/initialize()
+/obj/item/weapon/storage/box/syndicate/Initialize()
switch (pickweight(list("bloodyspai" = 1, "stealth" = 1, "screwed" = 1, "guns" = 1, "murder" = 1, "freedom" = 1, "hacker" = 1, "lordsingulo" = 1, "smoothoperator" = 1)))
if("bloodyspai")
new /obj/item/clothing/under/chameleon(src)
@@ -70,7 +70,7 @@
/obj/item/weapon/storage/box/syndie_kit/imp_freedom
name = "boxed freedom implant (with injector)"
-/obj/item/weapon/storage/box/syndie_kit/imp_freedom/initialize()
+/obj/item/weapon/storage/box/syndie_kit/imp_freedom/Initialize()
var/obj/item/weapon/implanter/O = new(src)
O.imp = new /obj/item/weapon/implant/freedom(O)
O.update()
@@ -87,7 +87,7 @@
/obj/item/weapon/storage/box/syndie_kit/imp_uplink
name = "boxed uplink implant (with injector)"
-/obj/item/weapon/storage/box/syndie_kit/imp_uplink/initialize()
+/obj/item/weapon/storage/box/syndie_kit/imp_uplink/Initialize()
var/obj/item/weapon/implanter/O = new(src)
O.imp = new /obj/item/weapon/implant/uplink(O)
O.update()
@@ -157,7 +157,7 @@
name = "\improper Tricky smokes"
desc = "Comes with the following brands of cigarettes, in this order: 2xFlash, 2xSmoke, 1xMindBreaker, 1xTricordrazine. Avoid mixing them up."
-/obj/item/weapon/storage/box/syndie_kit/cigarette/initialize()
+/obj/item/weapon/storage/box/syndie_kit/cigarette/Initialize()
. = ..()
var/obj/item/weapon/storage/fancy/cigarettes/pack
diff --git a/code/game/objects/random/_random.dm b/code/game/objects/random/_random.dm
index 29272a7247..1ef0b38f63 100644
--- a/code/game/objects/random/_random.dm
+++ b/code/game/objects/random/_random.dm
@@ -100,7 +100,7 @@ var/list/multi_point_spawns
var/id // Group id
var/weight // Probability weight for this spawn point
-/obj/random_multi/initialize()
+/obj/random_multi/Initialize()
. = ..()
weight = max(1, round(weight))
diff --git a/code/game/objects/structures/catwalk.dm b/code/game/objects/structures/catwalk.dm
index eda2c9346b..68b9ccc787 100644
--- a/code/game/objects/structures/catwalk.dm
+++ b/code/game/objects/structures/catwalk.dm
@@ -11,7 +11,7 @@
var/maxhealth = 100
anchored = 1.0
-/obj/structure/catwalk/initialize()
+/obj/structure/catwalk/Initialize()
. = ..()
for(var/obj/structure/catwalk/O in range(1))
O.update_icon()
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 3c3aa94c43..5c1c97eed3 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -32,7 +32,7 @@
var/list/starts_with
-/obj/structure/closet/initialize()
+/obj/structure/closet/Initialize()
. = ..()
if(starts_with)
create_objects_in_loc(src, starts_with)
diff --git a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm
index cad925f6e8..2621da2253 100644
--- a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm
@@ -16,7 +16,7 @@
starts_with = list(/obj/item/weapon/material/twohanded/fireaxe)
-/obj/structure/closet/fireaxecabinet/initialize()
+/obj/structure/closet/fireaxecabinet/Initialize()
..()
fireaxe = locate() in contents
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
index ef68d7ca60..8429b5abdd 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
@@ -22,7 +22,7 @@
/obj/item/clothing/gloves/fingerless,
/obj/item/clothing/head/soft)
-/obj/structure/closet/secure_closet/cargotech/initialize()
+/obj/structure/closet/secure_closet/cargotech/Initialize()
if(prob(75))
starts_with += /obj/item/weapon/storage/backpack
else
@@ -59,7 +59,7 @@
/obj/item/clothing/suit/storage/hooded/wintercoat/cargo,
/obj/item/clothing/shoes/boots/winter/supply)
-/obj/structure/closet/secure_closet/quartermaster/initialize()
+/obj/structure/closet/secure_closet/quartermaster/Initialize()
if(prob(75))
starts_with += /obj/item/weapon/storage/backpack
else
@@ -93,7 +93,7 @@
/obj/item/clothing/shoes/boots/winter/mining,
/obj/item/stack/marker_beacon/thirty)
-/obj/structure/closet/secure_closet/miner/initialize()
+/obj/structure/closet/secure_closet/miner/Initialize()
if(prob(50))
starts_with += /obj/item/weapon/storage/backpack/industrial
else
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
index 3ed5806143..8380c059ec 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
@@ -33,7 +33,7 @@
/obj/item/weapon/tank/emergency/oxygen/engi,
/obj/item/weapon/reagent_containers/spray/windowsealant) //VOREStation Add
-/obj/structure/closet/secure_closet/engineering_chief/initialize()
+/obj/structure/closet/secure_closet/engineering_chief/Initialize()
if(prob(50))
starts_with += /obj/item/weapon/storage/backpack/industrial
else
@@ -100,7 +100,7 @@
/obj/item/weapon/tank/emergency/oxygen/engi,
/obj/item/weapon/reagent_containers/spray/windowsealant) //VOREStation Add
-/obj/structure/closet/secure_closet/engineering_personal/initialize()
+/obj/structure/closet/secure_closet/engineering_personal/Initialize()
if(prob(50))
starts_with += /obj/item/weapon/storage/backpack/industrial
else
@@ -135,7 +135,7 @@
/obj/item/clothing/shoes/boots/winter/atmos,
/obj/item/weapon/tank/emergency/oxygen/engi)
-/obj/structure/closet/secure_closet/atmos_personal/initialize()
+/obj/structure/closet/secure_closet/atmos_personal/Initialize()
if(prob(50))
starts_with += /obj/item/weapon/storage/backpack/industrial
else
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm
index 62497919fc..2be8e52db1 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm
@@ -9,7 +9,7 @@
icon_opened = "base"
req_one_access = list(access_armory)
-/obj/structure/closet/secure_closet/guncabinet/initialize()
+/obj/structure/closet/secure_closet/guncabinet/Initialize()
. = ..()
update_icon()
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm
index c2a8a40e7e..c27f80d998 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm
@@ -21,7 +21,7 @@
/obj/item/clothing/suit/storage/hooded/wintercoat/hydro,
/obj/item/clothing/shoes/boots/winter/hydro)
-/obj/structure/closet/secure_closet/hydroponics/initialize()
+/obj/structure/closet/secure_closet/hydroponics/Initialize()
if(prob(50))
starts_with += /obj/item/clothing/suit/storage/apron
else
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
index 471fa446fb..86cb24dc8c 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
@@ -60,7 +60,7 @@
/obj/item/clothing/head/nursehat,
/obj/item/weapon/storage/box/freezer = 3)
-/obj/structure/closet/secure_closet/medical3/initialize()
+/obj/structure/closet/secure_closet/medical3/Initialize()
if(prob(50))
starts_with += /obj/item/weapon/storage/backpack/medic
else
@@ -170,7 +170,7 @@
/obj/item/clothing/shoes/white,
/obj/item/weapon/reagent_containers/glass/beaker/vial) //VOREStation Add
-/obj/structure/closet/secure_closet/CMO/initialize()
+/obj/structure/closet/secure_closet/CMO/Initialize()
if(prob(50))
starts_with += /obj/item/weapon/storage/backpack/medic
else
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
index b7a09db3c4..454fab779d 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
@@ -7,7 +7,7 @@
starts_with = list(
/obj/item/device/radio/headset)
-/obj/structure/closet/secure_closet/personal/initialize()
+/obj/structure/closet/secure_closet/personal/Initialize()
if(prob(50))
starts_with += /obj/item/weapon/storage/backpack
else
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
index 64cb0920f3..4e78a613e4 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
@@ -18,7 +18,7 @@
/obj/item/clothing/suit/storage/hooded/wintercoat/science,
/obj/item/clothing/shoes/boots/winter/science)
-/obj/structure/closet/secure_closet/scientist/initialize()
+/obj/structure/closet/secure_closet/scientist/Initialize()
if(prob(50))
starts_with += /obj/item/weapon/storage/backpack/dufflebag/sci
else
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index 06ed1b9451..0f6253ac6e 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -121,7 +121,7 @@
/obj/item/device/flashlight/maglight,
/obj/item/clothing/mask/gas/half)
-/obj/structure/closet/secure_closet/hos/initialize()
+/obj/structure/closet/secure_closet/hos/Initialize()
if(prob(50))
starts_with += /obj/item/weapon/storage/backpack/security
else
@@ -170,7 +170,7 @@
/obj/item/device/megaphone,
/obj/item/clothing/mask/gas/half)
-/obj/structure/closet/secure_closet/warden/initialize()
+/obj/structure/closet/secure_closet/warden/Initialize()
if(prob(50))
starts_with += /obj/item/weapon/storage/backpack/security
else
@@ -214,7 +214,7 @@
/obj/item/clothing/shoes/boots/winter/security,
/obj/item/device/flashlight/maglight)
-/obj/structure/closet/secure_closet/security/initialize()
+/obj/structure/closet/secure_closet/security/Initialize()
if(prob(50))
starts_with += /obj/item/weapon/storage/backpack/security
else
@@ -223,22 +223,22 @@
starts_with += /obj/item/weapon/storage/backpack/dufflebag/sec
return ..()
-/obj/structure/closet/secure_closet/security/cargo/initialize()
+/obj/structure/closet/secure_closet/security/cargo/Initialize()
starts_with += /obj/item/clothing/accessory/armband/cargo
starts_with += /obj/item/device/encryptionkey/headset_cargo
return ..()
-/obj/structure/closet/secure_closet/security/engine/initialize()
+/obj/structure/closet/secure_closet/security/engine/Initialize()
starts_with += /obj/item/clothing/accessory/armband/engine
starts_with += /obj/item/device/encryptionkey/headset_eng
return ..()
-/obj/structure/closet/secure_closet/security/science/initialize()
+/obj/structure/closet/secure_closet/security/science/Initialize()
starts_with += /obj/item/clothing/accessory/armband/science
starts_with += /obj/item/device/encryptionkey/headset_sci
return ..()
-/obj/structure/closet/secure_closet/security/med/initialize()
+/obj/structure/closet/secure_closet/security/med/Initialize()
starts_with += /obj/item/clothing/accessory/armband/medblue
starts_with += /obj/item/device/encryptionkey/headset_med
return ..()
diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
index 1194b7f9fa..f608c05b26 100644
--- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm
+++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
@@ -48,7 +48,7 @@
/obj/structure/closet/syndicate/resources
desc = "An old, dusty locker."
-/obj/structure/closet/syndicate/resources/initialize()
+/obj/structure/closet/syndicate/resources/Initialize()
. = ..()
if(!contents.len)
var/common_min = 30 //Minimum amount of minerals in the stack for common minerals
@@ -103,7 +103,7 @@
/obj/structure/closet/syndicate/resources/everything
desc = "It's an emergency storage closet for repairs."
-/obj/structure/closet/syndicate/resources/everything/initialize()
+/obj/structure/closet/syndicate/resources/everything/Initialize()
var/list/resources = list(
/obj/item/stack/material/steel,
/obj/item/stack/material/glass,
diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
index 1336890b13..b15f45d6fb 100644
--- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
@@ -19,7 +19,7 @@
icon_closed = "emergency"
icon_opened = "emergencyopen"
-/obj/structure/closet/emcloset/initialize()
+/obj/structure/closet/emcloset/Initialize()
switch (pickweight(list("small" = 55, "aid" = 25, "tank" = 10, "both" = 10)))
if ("small")
starts_with = list(
@@ -106,7 +106,7 @@
icon_closed = "toolcloset"
icon_opened = "toolclosetopen"
-/obj/structure/closet/toolcloset/initialize()
+/obj/structure/closet/toolcloset/Initialize()
starts_with = list()
if(prob(40))
starts_with += /obj/item/clothing/suit/storage/hazardvest
diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
index 2a7d883d95..e2c562dd3e 100644
--- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
@@ -22,7 +22,7 @@
/obj/item/clothing/accessory/armband = 3,
/obj/item/clothing/accessory/holster/waist = 3)
-/obj/structure/closet/wardrobe/red/initialize()
+/obj/structure/closet/wardrobe/red/Initialize()
if(prob(50))
starts_with += /obj/item/weapon/storage/backpack/security
else
@@ -223,7 +223,7 @@
/obj/item/weapon/storage/backpack/toxins,
/obj/item/weapon/storage/backpack/satchel/tox)
-/obj/structure/closet/wardrobe/science_white/initialize()
+/obj/structure/closet/wardrobe/science_white/Initialize()
if(prob(50))
starts_with += /obj/item/weapon/storage/backpack/dufflebag/sci
else
@@ -249,7 +249,7 @@
/obj/item/weapon/storage/backpack/toxins,
/obj/item/weapon/storage/backpack/satchel/tox)
-/obj/structure/closet/wardrobe/robotics_black/initialize()
+/obj/structure/closet/wardrobe/robotics_black/Initialize()
if(prob(50))
starts_with += /obj/item/weapon/storage/backpack/dufflebag/sci
else
@@ -401,7 +401,7 @@
/obj/item/clothing/gloves/black,
/obj/item/clothing/under/pants/camo)
-/obj/structure/closet/wardrobe/tactical/initialize()
+/obj/structure/closet/wardrobe/tactical/Initialize()
if(prob(25))
starts_with += /obj/item/weapon/storage/belt/security/tactical/bandolier
else
diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm
index 91642e434e..a7a4b77823 100644
--- a/code/game/objects/structures/crates_lockers/largecrate.dm
+++ b/code/game/objects/structures/crates_lockers/largecrate.dm
@@ -6,7 +6,7 @@
density = 1
var/list/starts_with
-/obj/structure/largecrate/initialize()
+/obj/structure/largecrate/Initialize()
. = ..()
if(starts_with)
create_objects_in_loc(src, starts_with)
@@ -63,7 +63,7 @@
desc = "It comes in a box for the consumer's sake. ..How is this lighter?"
icon_state = "vehiclecrate"
-/obj/structure/largecrate/vehicle/initialize()
+/obj/structure/largecrate/vehicle/Initialize()
..()
spawn(1)
for(var/obj/O in contents)
diff --git a/code/game/objects/structures/crates_lockers/vehiclecage.dm b/code/game/objects/structures/crates_lockers/vehiclecage.dm
index 9915ca6a7b..bd525832c1 100644
--- a/code/game/objects/structures/crates_lockers/vehiclecage.dm
+++ b/code/game/objects/structures/crates_lockers/vehiclecage.dm
@@ -13,7 +13,7 @@
if(my_vehicle)
to_chat(user, "It seems to contain \the [my_vehicle].")
-/obj/structure/vehiclecage/initialize()
+/obj/structure/vehiclecage/Initialize()
. = ..()
if(my_vehicle_type)
my_vehicle = new my_vehicle_type(src)
diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm
index 25febad1a3..0bea284126 100644
--- a/code/game/objects/structures/flora.dm
+++ b/code/game/objects/structures/flora.dm
@@ -304,7 +304,7 @@
light_power = 0.6
light_color = "#FF6633"
-/obj/structure/flora/sif/subterranean/initialize()
+/obj/structure/flora/sif/subterranean/Initialize()
icon_state = "[initial(icon_state)][rand(1,2)]"
. = ..()
@@ -313,6 +313,6 @@
desc = "This is a mysterious looking plant. They kind of look like eyeballs. Creepy."
icon_state = "eyeplant"
-/obj/structure/flora/sif/eyes/initialize()
+/obj/structure/flora/sif/eyes/Initialize()
icon_state = "[initial(icon_state)][rand(1,3)]"
. = ..()
diff --git a/code/game/objects/structures/ghost_pods/ghost_pods.dm b/code/game/objects/structures/ghost_pods/ghost_pods.dm
index 16dcd2ddb7..811fc47736 100644
--- a/code/game/objects/structures/ghost_pods/ghost_pods.dm
+++ b/code/game/objects/structures/ghost_pods/ghost_pods.dm
@@ -59,7 +59,7 @@
var/delay_to_self_open = 10 MINUTES // How long to wait for first attempt. Note that the timer by default starts when the pod is created.
var/delay_to_try_again = 20 MINUTES // How long to wait if first attempt fails. Set to 0 to never try again.
-/obj/structure/ghost_pod/automatic/initialize()
+/obj/structure/ghost_pod/automatic/Initialize()
. = ..()
spawn(delay_to_self_open)
if(src)
diff --git a/code/game/objects/structures/holoplant.dm b/code/game/objects/structures/holoplant.dm
index 1f762c027a..bbd92b81ee 100644
--- a/code/game/objects/structures/holoplant.dm
+++ b/code/game/objects/structures/holoplant.dm
@@ -17,7 +17,7 @@
"plant-13"
)
-/obj/machinery/holoplant/initialize()
+/obj/machinery/holoplant/Initialize()
. = ..()
activate()
@@ -101,5 +101,5 @@
/obj/machinery/holoplant/shipped
anchored = FALSE
-/obj/machinery/holoplant/shipped/initialize()
+/obj/machinery/holoplant/shipped/Initialize()
. = ..()
\ No newline at end of file
diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm
index d9ec122c55..443491d633 100644
--- a/code/game/objects/structures/lattice.dm
+++ b/code/game/objects/structures/lattice.dm
@@ -9,7 +9,7 @@
plane = PLATING_PLANE
// flags = CONDUCT
-/obj/structure/lattice/initialize()
+/obj/structure/lattice/Initialize()
. = ..()
if(!(istype(src.loc, /turf/space) || istype(src.loc, /turf/simulated/open) || istype(src.loc, /turf/simulated/mineral)))
diff --git a/code/game/objects/structures/loot_piles.dm b/code/game/objects/structures/loot_piles.dm
index 44f11b73fe..17d1ca4984 100644
--- a/code/game/objects/structures/loot_piles.dm
+++ b/code/game/objects/structures/loot_piles.dm
@@ -115,7 +115,7 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
var/path = pick(rare_loot)
return new path(src)
-/obj/structure/loot_pile/initialize()
+/obj/structure/loot_pile/Initialize()
if(icon_states_to_use && icon_states_to_use.len)
icon_state = pick(icon_states_to_use)
. = ..()
diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm
index 64ef2f926b..2aa11fffa5 100644
--- a/code/game/objects/structures/noticeboard.dm
+++ b/code/game/objects/structures/noticeboard.dm
@@ -19,7 +19,7 @@
update_icon()
return
-/obj/structure/noticeboard/initialize()
+/obj/structure/noticeboard/Initialize()
for(var/obj/item/I in loc)
if(notices > 4) break
if(istype(I, /obj/item/weapon/paper))
diff --git a/code/game/objects/structures/props/alien_props.dm b/code/game/objects/structures/props/alien_props.dm
index fa11e27b15..67a5b0d094 100644
--- a/code/game/objects/structures/props/alien_props.dm
+++ b/code/game/objects/structures/props/alien_props.dm
@@ -59,7 +59,7 @@
var/static/list/possible_states = list("health", "spider", "slime", "emp", "species", "egg", "vent", "mindshock", "viral", "gland")
var/static/list/possible_tech = list(TECH_MATERIAL, TECH_ENGINEERING, TECH_PHORON, TECH_POWER, TECH_BIO, TECH_COMBAT, TECH_MAGNET, TECH_DATA)
-/obj/item/prop/alien/junk/initialize()
+/obj/item/prop/alien/junk/Initialize()
. = ..()
icon_state = pick(possible_states)
var/list/techs = possible_tech.Copy()
diff --git a/code/game/objects/structures/props/beam_prism.dm b/code/game/objects/structures/props/beam_prism.dm
index 44df2eb68b..f5c4c3d3c0 100644
--- a/code/game/objects/structures/props/beam_prism.dm
+++ b/code/game/objects/structures/props/beam_prism.dm
@@ -26,7 +26,7 @@
interaction_message = "The prismatic turret seems to be able to rotate."
-/obj/structure/prop/prism/initialize()
+/obj/structure/prop/prism/Initialize()
if(degrees_from_north)
animate(src, transform = turn(NORTH, degrees_from_north), time = 3)
@@ -196,7 +196,7 @@
for(var/obj/structure/prop/prism/P in my_turrets)
P.rotate_auto(new_bearing)
-/obj/structure/prop/prismcontrol/initialize()
+/obj/structure/prop/prismcontrol/Initialize()
..()
if(my_turrets.len) //Preset controls.
for(var/obj/structure/prop/prism/P in my_turrets)
diff --git a/code/game/objects/structures/props/nest.dm b/code/game/objects/structures/props/nest.dm
index 4b54d010cf..89d94871ed 100644
--- a/code/game/objects/structures/props/nest.dm
+++ b/code/game/objects/structures/props/nest.dm
@@ -19,7 +19,7 @@
var/tally = 0 //The counter referenced against total_creature_max, or just to see how many mobs it has spawned.
var/total_creature_max //If set, it can spawn this many creatures, total, ever.
-/obj/structure/prop/nest/initialize()
+/obj/structure/prop/nest/Initialize()
..()
den_mobs = list()
processing_objects |= src
diff --git a/code/game/objects/structures/props/puzzledoor.dm b/code/game/objects/structures/props/puzzledoor.dm
index b9a32fc0dc..70d6508202 100644
--- a/code/game/objects/structures/props/puzzledoor.dm
+++ b/code/game/objects/structures/props/puzzledoor.dm
@@ -31,7 +31,7 @@
visible_message("\The [src] is completely unaffected by the blast.")
return
-/obj/machinery/door/blast/puzzle/initialize()
+/obj/machinery/door/blast/puzzle/Initialize()
. = ..()
implicit_material = get_material_by_name("dungeonium")
if(locks.len)
diff --git a/code/game/objects/structures/railing.dm b/code/game/objects/structures/railing.dm
index 18e45af166..b100237dac 100644
--- a/code/game/objects/structures/railing.dm
+++ b/code/game/objects/structures/railing.dm
@@ -23,7 +23,7 @@
if(climbable)
verbs += /obj/structure/proc/climb_on
-/obj/structure/railing/initialize()
+/obj/structure/railing/Initialize()
. = ..()
if(src.anchored)
update_icon(0)
diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm
index 37edb603c1..9de9dc082b 100644
--- a/code/game/objects/structures/safe.dm
+++ b/code/game/objects/structures/safe.dm
@@ -30,7 +30,7 @@ FLOOR SAFES
tumbler_2_open = rand(0, 72)
-/obj/structure/safe/initialize()
+/obj/structure/safe/Initialize()
. = ..()
for(var/obj/item/I in loc)
if(space >= maxspace)
@@ -175,7 +175,7 @@ obj/structure/safe/ex_act(severity)
plane = TURF_PLANE
layer = ABOVE_UTILITY
-/obj/structure/safe/floor/initialize()
+/obj/structure/safe/floor/Initialize()
. = ..()
var/turf/T = loc
if(istype(T) && !T.is_plating())
diff --git a/code/game/objects/structures/window_spawner.dm b/code/game/objects/structures/window_spawner.dm
index e2714be757..52a8458077 100644
--- a/code/game/objects/structures/window_spawner.dm
+++ b/code/game/objects/structures/window_spawner.dm
@@ -25,7 +25,7 @@
/obj/effect/wingrille_spawn/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0)
return FALSE
-/obj/effect/wingrille_spawn/initialize()
+/obj/effect/wingrille_spawn/Initialize()
. = ..()
if(!win_path)
return
diff --git a/code/game/shuttle_engines.dm b/code/game/shuttle_engines.dm
index c76967545e..03e8c25e6d 100644
--- a/code/game/shuttle_engines.dm
+++ b/code/game/shuttle_engines.dm
@@ -17,7 +17,7 @@
if(!height || air_group) return 0
else return ..()
-/obj/structure/shuttle/window/initialize()
+/obj/structure/shuttle/window/Initialize()
. = ..()
auto_join()
diff --git a/code/game/turfs/flooring/flooring_decals.dm b/code/game/turfs/flooring/flooring_decals.dm
index 8d24e46765..f69d676ccd 100644
--- a/code/game/turfs/flooring/flooring_decals.dm
+++ b/code/game/turfs/flooring/flooring_decals.dm
@@ -14,7 +14,7 @@ var/list/floor_decals = list()
if(newcolour) color = newcolour
..(newloc)
-/obj/effect/floor_decal/initialize()
+/obj/effect/floor_decal/Initialize()
add_to_turf_decals()
initialized = TRUE
return INITIALIZE_HINT_QDEL
@@ -40,7 +40,7 @@ var/list/floor_decals = list()
/obj/effect/floor_decal/reset
name = "reset marker"
-/obj/effect/floor_decal/reset/initialize()
+/obj/effect/floor_decal/reset/Initialize()
var/turf/T = get_turf(src)
if(T.decals && T.decals.len)
T.decals.Cut()
diff --git a/code/game/turfs/flooring/flooring_premade.dm b/code/game/turfs/flooring/flooring_premade.dm
index e3e955ff17..d4874aa48b 100644
--- a/code/game/turfs/flooring/flooring_premade.dm
+++ b/code/game/turfs/flooring/flooring_premade.dm
@@ -71,7 +71,7 @@
/turf/simulated/floor/wood/broken
icon_state = "wood_broken0" // This gets changed when spawned.
-/turf/simulated/floor/wood/broken/initialize()
+/turf/simulated/floor/wood/broken/Initialize()
break_tile()
return ..()
@@ -84,7 +84,7 @@
/turf/simulated/floor/wood/sif/broken
icon_state = "sifwood_broken0" // This gets changed when spawned.
-/turf/simulated/floor/wood/sif/broken/initialize()
+/turf/simulated/floor/wood/sif/broken/Initialize()
break_tile()
return ..()
@@ -244,7 +244,7 @@
oxygen = 0
nitrogen = 0
-/turf/simulated/floor/reinforced/n20/initialize()
+/turf/simulated/floor/reinforced/n20/Initialize()
. = ..()
if(!air) make_air()
air.adjust_gas("sleeping_agent", ATMOSTANK_NITROUSOXIDE)
diff --git a/code/game/turfs/simulated/dungeon/wall.dm b/code/game/turfs/simulated/dungeon/wall.dm
index c1a02cde66..6c39e01798 100644
--- a/code/game/turfs/simulated/dungeon/wall.dm
+++ b/code/game/turfs/simulated/dungeon/wall.dm
@@ -32,7 +32,7 @@
mining_overlay_cache["rock_side_[place_dir]"] = image('icons/turf/walls.dmi', "rock_side", dir = place_dir)
T.add_overlay(mining_overlay_cache["rock_side_[place_dir]"])
-/turf/simulated/wall/solidrock/initialize()
+/turf/simulated/wall/solidrock/Initialize()
icon_state = base_state
update_icon(1)
diff --git a/code/game/turfs/simulated/floor_types.dm b/code/game/turfs/simulated/floor_types.dm
index 316153ebc0..d670fc3a40 100644
--- a/code/game/turfs/simulated/floor_types.dm
+++ b/code/game/turfs/simulated/floor_types.dm
@@ -185,7 +185,7 @@
light_color = "#66ffff" // Bright cyan.
block_tele = TRUE
-/turf/simulated/shuttle/floor/alien/initialize()
+/turf/simulated/shuttle/floor/alien/Initialize()
. = ..()
icon_state = "alienpod[rand(1, 9)]"
@@ -213,8 +213,9 @@
takes_underlays = 1
blocks_air = 1 //I'd make these unsimulated but it just fucks with so much stuff so many other places.
- initialize()
- icon_state = "carry_ingame"
+/turf/simulated/shuttle/plating/carry/Initialize()
+ . = ..()
+ icon_state = "carry_ingame"
/turf/simulated/shuttle/plating/airless/carry
name = "airless carry turf"
@@ -223,8 +224,9 @@
takes_underlays = 1
blocks_air = 1
- initialize()
- icon_state = "carry_ingame"
+/turf/simulated/shuttle/plating/airless/carry/Initialize()
+ . = ..()
+ icon_state = "carry_ingame"
/turf/simulated/shuttle/plating/skipjack //Skipjack plating
oxygen = 0
diff --git a/code/game/turfs/simulated/outdoors/grass.dm b/code/game/turfs/simulated/outdoors/grass.dm
index 218291815f..1258349bbf 100644
--- a/code/game/turfs/simulated/outdoors/grass.dm
+++ b/code/game/turfs/simulated/outdoors/grass.dm
@@ -29,12 +29,12 @@ var/list/grass_types = list(
/obj/structure/flora/sif/eyes
)
-/turf/simulated/floor/outdoors/grass/sif/initialize()
+/turf/simulated/floor/outdoors/grass/sif/Initialize()
if(tree_chance && prob(tree_chance))
new /obj/structure/flora/tree/sif(src)
. = ..()
-/turf/simulated/floor/outdoors/grass/initialize()
+/turf/simulated/floor/outdoors/grass/Initialize()
if(prob(50))
icon_state = "[initial(icon_state)]2"
//edge_blending_priority++
diff --git a/code/game/turfs/simulated/outdoors/outdoors.dm b/code/game/turfs/simulated/outdoors/outdoors.dm
index 6843a78264..b59523a679 100644
--- a/code/game/turfs/simulated/outdoors/outdoors.dm
+++ b/code/game/turfs/simulated/outdoors/outdoors.dm
@@ -20,7 +20,7 @@ var/list/turf_edge_cache = list()
// When a turf gets demoted or promoted, this list gets adjusted. The top-most layer is the layer on the bottom of the list, due to how pop() works.
var/list/turf_layers = list(/turf/simulated/floor/outdoors/rocks)
-/turf/simulated/floor/outdoors/initialize()
+/turf/simulated/floor/outdoors/Initialize()
update_icon()
. = ..()
diff --git a/code/game/turfs/simulated/outdoors/sky.dm b/code/game/turfs/simulated/outdoors/sky.dm
index 468b893b33..3188302288 100644
--- a/code/game/turfs/simulated/outdoors/sky.dm
+++ b/code/game/turfs/simulated/outdoors/sky.dm
@@ -12,7 +12,7 @@
nitrogen = 0
phoron = 0
-/turf/simulated/sky/initialize()
+/turf/simulated/sky/Initialize()
. = ..()
SSplanets.addTurf(src)
set_light(2, 2, "#FFFFFF")
diff --git a/code/game/turfs/simulated/wall_types.dm b/code/game/turfs/simulated/wall_types.dm
index 9048bb5a49..37bf0d7541 100644
--- a/code/game/turfs/simulated/wall_types.dm
+++ b/code/game/turfs/simulated/wall_types.dm
@@ -154,7 +154,7 @@
//To allow mappers to rename shuttle walls to like "redfloor interior" or whatever for ease of use.
name = true_name
-/turf/simulated/shuttle/wall/initialize()
+/turf/simulated/shuttle/wall/Initialize()
. = ..()
if(join_group)
@@ -235,7 +235,7 @@
/turf/simulated/shuttle/wall/voidcraft/green
stripe_color = "#00FF00"
-/turf/simulated/shuttle/wall/voidcraft/initialize()
+/turf/simulated/shuttle/wall/voidcraft/Initialize()
. = ..()
update_icon()
diff --git a/code/game/turfs/simulated/water.dm b/code/game/turfs/simulated/water.dm
index 7ed1ad2965..abf8bb9579 100644
--- a/code/game/turfs/simulated/water.dm
+++ b/code/game/turfs/simulated/water.dm
@@ -16,7 +16,7 @@
var/depth = 1 // Higher numbers indicates deeper water.
-/turf/simulated/floor/water/initialize()
+/turf/simulated/floor/water/Initialize()
. = ..()
update_icon()
diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm
index d9a41718a8..55e0dd3b67 100644
--- a/code/game/turfs/space/space.dm
+++ b/code/game/turfs/space/space.dm
@@ -10,7 +10,7 @@
var/keep_sprite = FALSE
// heat_capacity = 700000 No.
-/turf/space/initialize()
+/turf/space/Initialize()
. = ..()
if(!keep_sprite)
icon_state = "[((x + y) ^ ~(x * y) + z) % 25]"
diff --git a/code/modules/ai/ai_holder.dm b/code/modules/ai/ai_holder.dm
index 2c7e02ecef..4ef5507d5b 100644
--- a/code/modules/ai/ai_holder.dm
+++ b/code/modules/ai/ai_holder.dm
@@ -6,7 +6,7 @@
var/datum/ai_holder/ai_holder = null
var/ai_holder_type = null // Which ai_holder datum to give to the mob when initialized. If null, nothing happens.
-/mob/living/initialize()
+/mob/living/Initialize()
if(ai_holder_type)
ai_holder = new ai_holder_type(src)
return ..()
diff --git a/code/modules/ai/say_list.dm b/code/modules/ai/say_list.dm
index 43732abf0c..9eba02b9b1 100644
--- a/code/modules/ai/say_list.dm
+++ b/code/modules/ai/say_list.dm
@@ -9,7 +9,7 @@
var/datum/say_list/say_list = null
var/say_list_type = /datum/say_list // Type to give us on initialization. Default has empty lists, so the mob will be silent.
-/mob/living/initialize()
+/mob/living/Initialize()
if(say_list_type)
say_list = new say_list_type(src)
return ..()
diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm
index d1602f479b..115ecaa54d 100644
--- a/code/modules/awaymissions/corpse.dm
+++ b/code/modules/awaymissions/corpse.dm
@@ -26,7 +26,7 @@
var/species = SPECIES_HUMAN
delete_me = TRUE
-/obj/effect/landmark/corpse/initialize()
+/obj/effect/landmark/corpse/Initialize()
..()
createCorpse()
return INITIALIZE_HINT_QDEL
diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm
index 558dc668b0..cee8fb73b0 100644
--- a/code/modules/awaymissions/gateway.dm
+++ b/code/modules/awaymissions/gateway.dm
@@ -8,7 +8,7 @@
var/active = 0
-/obj/machinery/gateway/initialize()
+/obj/machinery/gateway/Initialize()
update_icon()
if(dir == SOUTH)
density = 0
@@ -34,7 +34,7 @@
var/wait = 0 //this just grabs world.time at world start
var/obj/machinery/gateway/centeraway/awaygate = null
-/obj/machinery/gateway/centerstation/initialize()
+/obj/machinery/gateway/centerstation/Initialize()
update_icon()
wait = world.time + config.gateway_delay //+ thirty minutes default
awaygate = locate(/obj/machinery/gateway/centeraway)
@@ -164,7 +164,7 @@ obj/machinery/gateway/centerstation/process()
var/obj/machinery/gateway/centeraway/stationgate = null
-/obj/machinery/gateway/centeraway/initialize()
+/obj/machinery/gateway/centeraway/Initialize()
update_icon()
stationgate = locate(/obj/machinery/gateway/centerstation)
. = ..()
diff --git a/code/modules/awaymissions/loot.dm b/code/modules/awaymissions/loot.dm
index 6ca57138b6..1c1d901161 100644
--- a/code/modules/awaymissions/loot.dm
+++ b/code/modules/awaymissions/loot.dm
@@ -5,7 +5,7 @@
var/lootdoubles = 0 //if the same item can be spawned twice
var/loot = "" //a list of possible items to spawn- a string of paths
-/obj/effect/spawner/lootdrop/initialize()
+/obj/effect/spawner/lootdrop/Initialize()
..()
var/list/things = params2list(loot)
diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm
index 1c643f7995..a456e85939 100644
--- a/code/modules/clothing/gloves/color.dm
+++ b/code/modules/clothing/gloves/color.dm
@@ -12,7 +12,7 @@
siemens_coefficient = 1 //Set to a default of 1, gets overridden in initialize()
permeability_coefficient = 0.05
-/obj/item/clothing/gloves/fyellow/initialize()
+/obj/item/clothing/gloves/fyellow/Initialize()
. = ..()
//Picks a value between 0 and 1.25, in 5% increments // VOREStation edit
var/shock_pick = rand(0,25) // VOREStation Edit
diff --git a/code/modules/clothing/head/pilot_helmet.dm b/code/modules/clothing/head/pilot_helmet.dm
index feb60ae3a3..ee95c7c937 100644
--- a/code/modules/clothing/head/pilot_helmet.dm
+++ b/code/modules/clothing/head/pilot_helmet.dm
@@ -23,7 +23,7 @@
var/list/raw_images
var/last_status
-/obj/item/clothing/head/pilot/initialize()
+/obj/item/clothing/head/pilot/Initialize()
. = ..()
images = list()
diff --git a/code/modules/food/kitchen/icecream.dm b/code/modules/food/kitchen/icecream.dm
index 09cb3289ed..821e118c01 100644
--- a/code/modules/food/kitchen/icecream.dm
+++ b/code/modules/food/kitchen/icecream.dm
@@ -51,7 +51,7 @@
else
return "vanilla"
-/obj/machinery/icecream_vat/initialize()
+/obj/machinery/icecream_vat/Initialize()
. = ..()
create_reagents(100)
while(product_types.len < 6)
diff --git a/code/modules/holodeck/HolodeckObjects.dm b/code/modules/holodeck/HolodeckObjects.dm
index 8dd32997a7..9ffeb100d7 100644
--- a/code/modules/holodeck/HolodeckObjects.dm
+++ b/code/modules/holodeck/HolodeckObjects.dm
@@ -104,7 +104,7 @@
base_icon = 'icons/turf/flooring/asteroid.dmi'
initial_flooring = null
-/turf/simulated/floor/holofloor/desert/initialize()
+/turf/simulated/floor/holofloor/desert/Initialize()
. = ..()
if(prob(10))
add_overlay("asteroid[rand(0,9)]")
diff --git a/code/modules/holomap/station_holomap.dm b/code/modules/holomap/station_holomap.dm
index 6c11a36611..d38875f220 100644
--- a/code/modules/holomap/station_holomap.dm
+++ b/code/modules/holomap/station_holomap.dm
@@ -38,7 +38,7 @@
SSholomaps.station_holomaps += src
flags |= ON_BORDER // Why? It doesn't help if its not density
-/obj/machinery/station_map/initialize()
+/obj/machinery/station_map/Initialize()
. = ..()
if(SSholomaps.holomaps_initialized)
spawn(1) // Tragically we need to spawn this in order to give the frame construcing us time to set pixel_x/y
diff --git a/code/modules/hydroponics/seed_packets.dm b/code/modules/hydroponics/seed_packets.dm
index 0689f428b6..f4b8b951a5 100644
--- a/code/modules/hydroponics/seed_packets.dm
+++ b/code/modules/hydroponics/seed_packets.dm
@@ -13,7 +13,7 @@ GLOBAL_LIST_BOILERPLATE(all_seed_packs, /obj/item/seeds)
var/datum/seed/seed
var/modified = 0
-/obj/item/seeds/initialize()
+/obj/item/seeds/Initialize()
update_seed()
. = ..()
@@ -75,7 +75,7 @@ GLOBAL_LIST_BOILERPLATE(all_seed_packs, /obj/item/seeds)
/obj/item/seeds/random
seed_type = null
-/obj/item/seeds/random/initialize()
+/obj/item/seeds/random/Initialize()
seed = plant_controller.create_random_seed()
seed_type = seed.name
. = ..()
diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm
index 8db9f7a8f1..5dad0b9c21 100644
--- a/code/modules/hydroponics/trays/tray.dm
+++ b/code/modules/hydroponics/trays/tray.dm
@@ -165,7 +165,7 @@
nymph.visible_message("[nymph] rolls around in [src] for a bit.","You roll around in [src] for a bit.")
return
-/obj/machinery/portable_atmospherics/hydroponics/initialize()
+/obj/machinery/portable_atmospherics/hydroponics/Initialize()
. = ..()
temp_chem_holder = new()
temp_chem_holder.create_reagents(10)
diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm
index 8367e2096a..7c6ad87a00 100644
--- a/code/modules/integrated_electronics/core/assemblies.dm
+++ b/code/modules/integrated_electronics/core/assemblies.dm
@@ -20,7 +20,7 @@
var/detail_color = COLOR_ASSEMBLY_BLACK
-/obj/item/device/electronic_assembly/initialize()
+/obj/item/device/electronic_assembly/Initialize()
battery = new(src)
processing_objects |= src
return ..()
diff --git a/code/modules/integrated_electronics/core/assemblies/clothing.dm b/code/modules/integrated_electronics/core/assemblies/clothing.dm
index f8a5b31f3f..4415d367f8 100644
--- a/code/modules/integrated_electronics/core/assemblies/clothing.dm
+++ b/code/modules/integrated_electronics/core/assemblies/clothing.dm
@@ -108,7 +108,7 @@
icon_state = "circuitry"
worn_state = "circuitry"
-/obj/item/clothing/under/circuitry/initialize()
+/obj/item/clothing/under/circuitry/Initialize()
setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing)
return ..()
@@ -121,7 +121,7 @@
icon_state = "circuitry"
item_state = "circuitry"
-/obj/item/clothing/gloves/circuitry/initialize()
+/obj/item/clothing/gloves/circuitry/Initialize()
setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing/small)
return ..()
@@ -134,7 +134,7 @@
icon_state = "circuitry"
item_state = "night" // The on-mob sprite would be identical anyways.
-/obj/item/clothing/glasses/circuitry/initialize()
+/obj/item/clothing/glasses/circuitry/Initialize()
setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing/small)
return ..()
@@ -146,7 +146,7 @@
icon_state = "circuitry"
item_state = "circuitry"
-/obj/item/clothing/shoes/circuitry/initialize()
+/obj/item/clothing/shoes/circuitry/Initialize()
setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing/small)
return ..()
@@ -158,7 +158,7 @@
icon_state = "circuitry"
item_state = "circuitry"
-/obj/item/clothing/head/circuitry/initialize()
+/obj/item/clothing/head/circuitry/Initialize()
setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing/small)
return ..()
@@ -170,7 +170,7 @@
icon_state = "circuitry"
item_state = "circuitry"
-/obj/item/clothing/ears/circuitry/initialize()
+/obj/item/clothing/ears/circuitry/Initialize()
setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing/small)
return ..()
@@ -182,6 +182,6 @@
icon_state = "circuitry"
item_state = "circuitry"
-/obj/item/clothing/suit/circuitry/initialize()
+/obj/item/clothing/suit/circuitry/Initialize()
setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing/large)
return ..()
\ No newline at end of file
diff --git a/code/modules/integrated_electronics/core/detailer.dm b/code/modules/integrated_electronics/core/detailer.dm
index cd1696aecc..4c1c509384 100644
--- a/code/modules/integrated_electronics/core/detailer.dm
+++ b/code/modules/integrated_electronics/core/detailer.dm
@@ -25,7 +25,7 @@
"hot pink" = COLOR_ASSEMBLY_HOT_PINK
)
-/obj/item/device/integrated_electronics/detailer/initialize()
+/obj/item/device/integrated_electronics/detailer/Initialize()
update_icon()
return ..()
diff --git a/code/modules/integrated_electronics/passive/power.dm b/code/modules/integrated_electronics/passive/power.dm
index 829027303c..8fe37874e7 100644
--- a/code/modules/integrated_electronics/passive/power.dm
+++ b/code/modules/integrated_electronics/passive/power.dm
@@ -191,7 +191,7 @@
var/obj/machinery/power/circuit_io/IO = null // Dummy power machine to move energy in/out without a bunch of code duplication.
var/throughput = 10000 // Give/take up to 10kW.
-/obj/item/integrated_circuit/passive/power/powernet/initialize()
+/obj/item/integrated_circuit/passive/power/powernet/Initialize()
IO = new(src)
return ..()
diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm
index c2e640403a..08f4975e5c 100644
--- a/code/modules/integrated_electronics/subtypes/input.dm
+++ b/code/modules/integrated_electronics/subtypes/input.dm
@@ -353,7 +353,7 @@
var/code = 30
var/datum/radio_frequency/radio_connection
-/obj/item/integrated_circuit/input/signaler/initialize()
+/obj/item/integrated_circuit/input/signaler/Initialize()
. = ..()
set_frequency(frequency)
// Set the pins so when someone sees them, they won't show as null
diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm
index 63f855b8a4..734a2bcfa5 100644
--- a/code/modules/library/lib_items.dm
+++ b/code/modules/library/lib_items.dm
@@ -19,7 +19,7 @@
density = 1
opacity = 1
-/obj/structure/bookcase/initialize()
+/obj/structure/bookcase/Initialize()
. = ..()
for(var/obj/item/I in loc)
if(istype(I, /obj/item/weapon/book))
diff --git a/code/modules/lighting/lighting_overlay.dm b/code/modules/lighting/lighting_overlay.dm
index 5e97aa6818..eb5097cf5b 100644
--- a/code/modules/lighting/lighting_overlay.dm
+++ b/code/modules/lighting/lighting_overlay.dm
@@ -18,7 +18,7 @@
var/needs_update = FALSE
-/atom/movable/lighting_overlay/initialize()
+/atom/movable/lighting_overlay/Initialize()
// doesn't need special init
initialized = TRUE
return INITIALIZE_HINT_NORMAL
diff --git a/code/modules/lore_codex/codex.dm b/code/modules/lore_codex/codex.dm
index 5f5f521267..126c470de4 100644
--- a/code/modules/lore_codex/codex.dm
+++ b/code/modules/lore_codex/codex.dm
@@ -8,7 +8,7 @@
var/datum/codex_tree/tree = null
var/root_type = /datum/lore/codex/category/main_virgo_lore //Runtimes on codex_tree.dm, line 18 with a null here
-/obj/item/weapon/book/codex/initialize()
+/obj/item/weapon/book/codex/Initialize()
tree = new(src, root_type)
. = ..()
diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm
index dd9c068a17..d07a52a2f2 100644
--- a/code/modules/mining/fulton.dm
+++ b/code/modules/mining/fulton.dm
@@ -158,7 +158,7 @@ var/global/list/total_extraction_beacons = list()
density = FALSE
var/beacon_network = "station"
-/obj/structure/extraction_point/initialize()
+/obj/structure/extraction_point/Initialize()
. = ..()
name += " ([rand(100,999)]) ([get_area_name(src, TRUE)])"
global.total_extraction_beacons += src
diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm
index f02c686921..f03cc9ef75 100644
--- a/code/modules/mining/machine_processing.dm
+++ b/code/modules/mining/machine_processing.dm
@@ -16,7 +16,7 @@
var/obj/machinery/mineral/processing_unit/machine = null
var/show_all_ores = FALSE
-/obj/machinery/mineral/processing_unit_console/initialize()
+/obj/machinery/mineral/processing_unit_console/Initialize()
. = ..()
src.machine = locate(/obj/machinery/mineral/processing_unit) in range(5, src)
if (machine)
@@ -192,7 +192,7 @@
ores_processing[OD.name] = 0
ores_stored[OD.name] = 0
-/obj/machinery/mineral/processing_unit/initialize()
+/obj/machinery/mineral/processing_unit/Initialize()
. = ..()
// TODO - Eschew input/output machinery and just use dirs ~Leshana
//Locate our output and input machinery.
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index a52dc5a69e..c253301d1a 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -121,7 +121,7 @@ var/list/mining_overlay_cache = list()
//Cache hit
return mining_overlay_cache["[cache_id]_[direction]"]
-/turf/simulated/mineral/initialize()
+/turf/simulated/mineral/Initialize()
. = ..()
if(prob(20))
overlay_detail = "asteroid[rand(0,9)]"
diff --git a/code/modules/mining/ore_redemption_machine/equipment_vendor.dm b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm
index ae9661a13a..ad76d5b25b 100644
--- a/code/modules/mining/ore_redemption_machine/equipment_vendor.dm
+++ b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm
@@ -66,7 +66,7 @@
src.equipment_path = path
src.cost = cost
-/obj/machinery/power/quantumpad/initialize()
+/obj/machinery/power/quantumpad/Initialize()
. = ..()
default_apply_parts()
diff --git a/code/modules/mining/resonator.dm b/code/modules/mining/resonator.dm
index 1e96dc775b..bfbd29b830 100644
--- a/code/modules/mining/resonator.dm
+++ b/code/modules/mining/resonator.dm
@@ -57,7 +57,7 @@
mouse_opacity = 0
var/resonance_damage = 20
-/obj/effect/resonance/initialize(mapload, var/creator = null, var/timetoburst)
+/obj/effect/resonance/Initialize(mapload, var/creator = null, var/timetoburst)
. = ..()
// Start small and grow to big size as we are about to burst
transform = matrix()*0.75
@@ -101,7 +101,7 @@
layer = ABOVE_MOB_LAYER
duration = 4
-/obj/effect/temp_visual/resonance_crush/initialize()
+/obj/effect/temp_visual/resonance_crush/Initialize()
. = ..()
transform = matrix()*1.5
animate(src, transform = matrix()*0.1, alpha = 50, time = 4)
diff --git a/code/modules/mob/living/bot/bot.dm b/code/modules/mob/living/bot/bot.dm
index 12715a4c2b..04797f6a2e 100644
--- a/code/modules/mob/living/bot/bot.dm
+++ b/code/modules/mob/living/bot/bot.dm
@@ -52,7 +52,7 @@
access_scanner.req_one_access = req_one_access.Copy()
// Make sure mapped in units start turned on.
-/mob/living/bot/initialize()
+/mob/living/bot/Initialize()
. = ..()
if(on)
turn_on() // Update lights and other stuff
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index cc795d088d..7e4d921ca3 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -810,7 +810,7 @@ var/list/ai_verbs_default = list(
/mob/living/silicon/ai/announcer/
is_dummy = 1
-/mob/living/silicon/ai/announcer/initialize()
+/mob/living/silicon/ai/announcer/Initialize()
. = ..()
mob_list -= src
living_mob_list -= src
diff --git a/code/modules/mob/living/simple_animal/aliens/mimic.dm b/code/modules/mob/living/simple_animal/aliens/mimic.dm
index cb81bb9aaf..da254315be 100644
--- a/code/modules/mob/living/simple_animal/aliens/mimic.dm
+++ b/code/modules/mob/living/simple_animal/aliens/mimic.dm
@@ -68,7 +68,7 @@
var/attempt_open = 0
// Pickup loot
-/mob/living/simple_mob/hostile/mimic/crate/initialize()
+/mob/living/simple_animal/hostile/mimic/crate/Initialize()
. = ..()
for(var/obj/item/I in loc)
I.forceMove(src)
diff --git a/code/modules/mob/living/simple_animal/animals/slime.dm b/code/modules/mob/living/simple_animal/animals/slime.dm
index 323c31ed1e..7db2392808 100644
--- a/code/modules/mob/living/simple_animal/animals/slime.dm
+++ b/code/modules/mob/living/simple_animal/animals/slime.dm
@@ -27,7 +27,7 @@
icon_living = "rainbow baby slime"
icon_dead = "rainbow baby slime dead"
-/mob/living/simple_mob/old_slime/science/initialize()
+/mob/living/simple_animal/slime/science/Initialize()
. = ..()
overlays.Cut()
overlays += "aslime-:33"
diff --git a/code/modules/mob/living/simple_mob/simple_mob.dm b/code/modules/mob/living/simple_mob/simple_mob.dm
index c1e6b91adb..9ad2ec58be 100644
--- a/code/modules/mob/living/simple_mob/simple_mob.dm
+++ b/code/modules/mob/living/simple_mob/simple_mob.dm
@@ -150,7 +150,7 @@
var/supernatural = FALSE // Ditto.
-/mob/living/simple_mob/initialize()
+/mob/living/simple_mob/Initialize()
verbs -= /mob/verb/observe
health = maxHealth
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm
index 92f4e51c9c..b5b4489f57 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm
@@ -1,237 +1,237 @@
-// Borers are probably still going to be buggy as fuck, this is just bringing their mob defines up to the new system.
-// IMO they're a relic of several ages we're long past, their code and their design showing this plainly, but removing them would
-// make certain people Unhappy so here we are. They need a complete redesign but thats beyond the scope of the rewrite.
-
-/mob/living/simple_mob/animal/borer
- name = "cortical borer"
- desc = "A small, quivering sluglike creature."
- icon_state = "brainslug"
- item_state = "brainslug"
- icon_living = "brainslug"
- icon_dead = "brainslug_dead"
-
- response_help = "pokes"
- response_disarm = "prods"
- response_harm = "stomps on"
- attacktext = list("nipped")
- friendly = list("prods")
-
- status_flags = CANPUSH
- pass_flags = PASSTABLE
- movement_cooldown = 5
-
- universal_understand = TRUE
- can_be_antagged = TRUE
-
- holder_type = /obj/item/weapon/holder/borer
- ai_holder_type = null // This is player-controlled, always.
-
- var/chemicals = 10 // A resource used for reproduction and powers.
- var/mob/living/carbon/human/host = null // The humanoid host for the brain worm.
- var/true_name = null // String used when speaking among other worms.
- var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth.
- var/controlling = FALSE // Used in human death ceck.
- var/docile = FALSE // Sugar can stop borers from acting.
- var/has_reproduced = FALSE
- var/roundstart = FALSE // If true, spawning won't try to pull a ghost.
- var/used_dominate // world.time when the dominate power was last used.
-
-
-/mob/living/simple_mob/animal/borer/roundstart
- roundstart = TRUE
-
-/mob/living/simple_mob/animal/borer/Login()
- ..()
- if(mind)
- borers.add_antagonist(mind)
-
-/mob/living/simple_mob/animal/borer/initialize()
- add_language("Cortical Link")
-
- verbs += /mob/living/proc/ventcrawl
- verbs += /mob/living/proc/hide
-
- true_name = "[pick("Primary","Secondary","Tertiary","Quaternary")] [rand(1000,9999)]"
-
- if(!roundstart)
- request_player()
-
- return ..()
-
-/mob/living/simple_mob/animal/borer/handle_special()
- if(host && !stat && !host.stat)
- // Handle docility.
- if(host.reagents.has_reagent("sugar") && !docile)
- var/message = "You feel the soporific flow of sugar in your host's blood, lulling you into docility."
- var/target = controlling ? host : src
- to_chat(target, span("warning", message))
- docile = TRUE
-
- else if(docile)
- var/message = "You shake off your lethargy as the sugar leaves your host's blood."
- var/target = controlling ? host : src
- to_chat(target, span("notice", message))
- docile = FALSE
-
- // Chem regen.
- if(chemicals < 250)
- chemicals++
-
- // Control stuff.
- if(controlling)
- if(docile)
- to_chat(host, span("warning", "You are feeling far too docile to continue controlling your host..."))
- host.release_control()
- return
-
- if(prob(5))
- host.adjustBrainLoss(0.1)
-
- if(prob(host.brainloss/20))
- host.say("*[pick(list("blink","blink_r","choke","aflap","drool","twitch","twitch_v","gasp"))]")
-
-/mob/living/simple_mob/animal/borer/Stat()
- ..()
- if(client.statpanel == "Status")
- statpanel("Status")
- if(emergency_shuttle)
- var/eta_status = emergency_shuttle.get_status_panel_eta()
- if(eta_status)
- stat(null, eta_status)
- stat("Chemicals", chemicals)
-
-/mob/living/simple_mob/animal/borer/proc/detatch()
- if(!host || !controlling)
- return
-
- if(istype(host, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = host
- var/obj/item/organ/external/head = H.get_organ(BP_HEAD)
- if(head)
- head.implants -= src
-
- controlling = FALSE
-
- host.remove_language("Cortical Link")
- host.verbs -= /mob/living/carbon/proc/release_control
- host.verbs -= /mob/living/carbon/proc/punish_host
- host.verbs -= /mob/living/carbon/proc/spawn_larvae
-
- if(host_brain)
- // these are here so bans and multikey warnings are not triggered on the wrong people when ckey is changed.
- // computer_id and IP are not updated magically on their own in offline mobs -walter0o
-
- // This shit need to die in a phoron fire.
-
- // host -> self
- var/h2s_id = host.computer_id
- var/h2s_ip= host.lastKnownIP
- host.computer_id = null
- host.lastKnownIP = null
-
- src.ckey = host.ckey
-
- if(!src.computer_id)
- src.computer_id = h2s_id
-
- if(!host_brain.lastKnownIP)
- src.lastKnownIP = h2s_ip
-
- // brain -> host
- var/b2h_id = host_brain.computer_id
- var/b2h_ip= host_brain.lastKnownIP
- host_brain.computer_id = null
- host_brain.lastKnownIP = null
-
- host.ckey = host_brain.ckey
-
- if(!host.computer_id)
- host.computer_id = b2h_id
-
- if(!host.lastKnownIP)
- host.lastKnownIP = b2h_ip
-
- qdel(host_brain)
-
-
-/mob/living/simple_mob/animal/borer/proc/leave_host()
- if(!host)
- return
-
- if(host.mind)
- borers.remove_antagonist(host.mind)
-
- forceMove(get_turf(host))
-
- reset_view(null)
- machine = null
-
- host.reset_view(null)
- host.machine = null
- host = null
-
-/mob/living/simple_mob/animal/borer/proc/request_player()
- var/datum/ghost_query/Q = new /datum/ghost_query/borer()
- var/list/winner = Q.query() // This will sleep the proc for awhile.
- if(winner.len)
- var/mob/observer/dead/D = winner[1]
- transfer_personality(D)
-
-/mob/living/simple_mob/animal/borer/proc/transfer_personality(mob/candidate)
- if(!candidate || !candidate.mind)
- return
-
- src.mind = candidate.mind
- candidate.mind.current = src
- ckey = candidate.ckey
-
- if(mind)
- mind.assigned_role = "Cortical Borer"
- mind.special_role = "Cortical Borer"
-
- to_chat(src, span("notice", "You are a cortical borer! You are a brain slug that worms its way \
- into the head of its victim. Use stealth, persuasion and your powers of mind control to keep you, \
- your host and your eventual spawn safe and warm."))
- to_chat(src, "You can speak to your victim with say, to other borers with say :x, and use your Abilities tab to access powers.")
-
-/mob/living/simple_mob/animal/borer/cannot_use_vents()
- return
-
-// This is awful but its literally say code.
-/mob/living/simple_mob/animal/borer/say(message)
- message = sanitize(message)
- message = capitalize(message)
-
- if(!message)
- return
-
- if(stat >= DEAD)
- return say_dead(message)
- else if(stat)
- return
-
- if(client && client.prefs.muted & MUTE_IC)
- to_chat(src, span("danger", "You cannot speak in IC (muted)."))
- return
-
- if(copytext(message, 1, 2) == "*")
- return emote(copytext(message, 2))
-
- var/datum/language/L = parse_language(message)
- if(L && L.flags & HIVEMIND)
- L.broadcast(src,trim(copytext(message,3)), src.true_name)
- return
-
- if(!host)
- //TODO: have this pick a random mob within 3 tiles to speak for the borer.
- to_chat(src, span("warning", "You have no host to speak to."))
- return //No host, no audible speech.
-
- to_chat(src, "You drop words into [host]'s mind: \"[message]\"")
- to_chat(host, "Your own thoughts speak: \"[message]\"")
-
- for(var/mob/M in player_list)
- if(istype(M, /mob/new_player))
- continue
- else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears))
- to_chat(M, "[src.true_name] whispers to [host], \"[message]\"")
+// Borers are probably still going to be buggy as fuck, this is just bringing their mob defines up to the new system.
+// IMO they're a relic of several ages we're long past, their code and their design showing this plainly, but removing them would
+// make certain people Unhappy so here we are. They need a complete redesign but thats beyond the scope of the rewrite.
+
+/mob/living/simple_mob/animal/borer
+ name = "cortical borer"
+ desc = "A small, quivering sluglike creature."
+ icon_state = "brainslug"
+ item_state = "brainslug"
+ icon_living = "brainslug"
+ icon_dead = "brainslug_dead"
+
+ response_help = "pokes"
+ response_disarm = "prods"
+ response_harm = "stomps on"
+ attacktext = list("nipped")
+ friendly = list("prods")
+
+ status_flags = CANPUSH
+ pass_flags = PASSTABLE
+ movement_cooldown = 5
+
+ universal_understand = TRUE
+ can_be_antagged = TRUE
+
+ holder_type = /obj/item/weapon/holder/borer
+ ai_holder_type = null // This is player-controlled, always.
+
+ var/chemicals = 10 // A resource used for reproduction and powers.
+ var/mob/living/carbon/human/host = null // The humanoid host for the brain worm.
+ var/true_name = null // String used when speaking among other worms.
+ var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth.
+ var/controlling = FALSE // Used in human death ceck.
+ var/docile = FALSE // Sugar can stop borers from acting.
+ var/has_reproduced = FALSE
+ var/roundstart = FALSE // If true, spawning won't try to pull a ghost.
+ var/used_dominate // world.time when the dominate power was last used.
+
+
+/mob/living/simple_mob/animal/borer/roundstart
+ roundstart = TRUE
+
+/mob/living/simple_mob/animal/borer/Login()
+ ..()
+ if(mind)
+ borers.add_antagonist(mind)
+
+/mob/living/simple_mob/animal/borer/Initialize()
+ add_language("Cortical Link")
+
+ verbs += /mob/living/proc/ventcrawl
+ verbs += /mob/living/proc/hide
+
+ true_name = "[pick("Primary","Secondary","Tertiary","Quaternary")] [rand(1000,9999)]"
+
+ if(!roundstart)
+ request_player()
+
+ return ..()
+
+/mob/living/simple_mob/animal/borer/handle_special()
+ if(host && !stat && !host.stat)
+ // Handle docility.
+ if(host.reagents.has_reagent("sugar") && !docile)
+ var/message = "You feel the soporific flow of sugar in your host's blood, lulling you into docility."
+ var/target = controlling ? host : src
+ to_chat(target, span("warning", message))
+ docile = TRUE
+
+ else if(docile)
+ var/message = "You shake off your lethargy as the sugar leaves your host's blood."
+ var/target = controlling ? host : src
+ to_chat(target, span("notice", message))
+ docile = FALSE
+
+ // Chem regen.
+ if(chemicals < 250)
+ chemicals++
+
+ // Control stuff.
+ if(controlling)
+ if(docile)
+ to_chat(host, span("warning", "You are feeling far too docile to continue controlling your host..."))
+ host.release_control()
+ return
+
+ if(prob(5))
+ host.adjustBrainLoss(0.1)
+
+ if(prob(host.brainloss/20))
+ host.say("*[pick(list("blink","blink_r","choke","aflap","drool","twitch","twitch_v","gasp"))]")
+
+/mob/living/simple_mob/animal/borer/Stat()
+ ..()
+ if(client.statpanel == "Status")
+ statpanel("Status")
+ if(emergency_shuttle)
+ var/eta_status = emergency_shuttle.get_status_panel_eta()
+ if(eta_status)
+ stat(null, eta_status)
+ stat("Chemicals", chemicals)
+
+/mob/living/simple_mob/animal/borer/proc/detatch()
+ if(!host || !controlling)
+ return
+
+ if(istype(host, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = host
+ var/obj/item/organ/external/head = H.get_organ(BP_HEAD)
+ if(head)
+ head.implants -= src
+
+ controlling = FALSE
+
+ host.remove_language("Cortical Link")
+ host.verbs -= /mob/living/carbon/proc/release_control
+ host.verbs -= /mob/living/carbon/proc/punish_host
+ host.verbs -= /mob/living/carbon/proc/spawn_larvae
+
+ if(host_brain)
+ // these are here so bans and multikey warnings are not triggered on the wrong people when ckey is changed.
+ // computer_id and IP are not updated magically on their own in offline mobs -walter0o
+
+ // This shit need to die in a phoron fire.
+
+ // host -> self
+ var/h2s_id = host.computer_id
+ var/h2s_ip= host.lastKnownIP
+ host.computer_id = null
+ host.lastKnownIP = null
+
+ src.ckey = host.ckey
+
+ if(!src.computer_id)
+ src.computer_id = h2s_id
+
+ if(!host_brain.lastKnownIP)
+ src.lastKnownIP = h2s_ip
+
+ // brain -> host
+ var/b2h_id = host_brain.computer_id
+ var/b2h_ip= host_brain.lastKnownIP
+ host_brain.computer_id = null
+ host_brain.lastKnownIP = null
+
+ host.ckey = host_brain.ckey
+
+ if(!host.computer_id)
+ host.computer_id = b2h_id
+
+ if(!host.lastKnownIP)
+ host.lastKnownIP = b2h_ip
+
+ qdel(host_brain)
+
+
+/mob/living/simple_mob/animal/borer/proc/leave_host()
+ if(!host)
+ return
+
+ if(host.mind)
+ borers.remove_antagonist(host.mind)
+
+ forceMove(get_turf(host))
+
+ reset_view(null)
+ machine = null
+
+ host.reset_view(null)
+ host.machine = null
+ host = null
+
+/mob/living/simple_mob/animal/borer/proc/request_player()
+ var/datum/ghost_query/Q = new /datum/ghost_query/borer()
+ var/list/winner = Q.query() // This will sleep the proc for awhile.
+ if(winner.len)
+ var/mob/observer/dead/D = winner[1]
+ transfer_personality(D)
+
+/mob/living/simple_mob/animal/borer/proc/transfer_personality(mob/candidate)
+ if(!candidate || !candidate.mind)
+ return
+
+ src.mind = candidate.mind
+ candidate.mind.current = src
+ ckey = candidate.ckey
+
+ if(mind)
+ mind.assigned_role = "Cortical Borer"
+ mind.special_role = "Cortical Borer"
+
+ to_chat(src, span("notice", "You are a cortical borer! You are a brain slug that worms its way \
+ into the head of its victim. Use stealth, persuasion and your powers of mind control to keep you, \
+ your host and your eventual spawn safe and warm."))
+ to_chat(src, "You can speak to your victim with say, to other borers with say :x, and use your Abilities tab to access powers.")
+
+/mob/living/simple_mob/animal/borer/cannot_use_vents()
+ return
+
+// This is awful but its literally say code.
+/mob/living/simple_mob/animal/borer/say(message)
+ message = sanitize(message)
+ message = capitalize(message)
+
+ if(!message)
+ return
+
+ if(stat >= DEAD)
+ return say_dead(message)
+ else if(stat)
+ return
+
+ if(client && client.prefs.muted & MUTE_IC)
+ to_chat(src, span("danger", "You cannot speak in IC (muted)."))
+ return
+
+ if(copytext(message, 1, 2) == "*")
+ return emote(copytext(message, 2))
+
+ var/datum/language/L = parse_language(message)
+ if(L && L.flags & HIVEMIND)
+ L.broadcast(src,trim(copytext(message,3)), src.true_name)
+ return
+
+ if(!host)
+ //TODO: have this pick a random mob within 3 tiles to speak for the borer.
+ to_chat(src, span("warning", "You have no host to speak to."))
+ return //No host, no audible speech.
+
+ to_chat(src, "You drop words into [host]'s mind: \"[message]\"")
+ to_chat(host, "Your own thoughts speak: \"[message]\"")
+
+ for(var/mob/M in player_list)
+ if(istype(M, /mob/new_player))
+ continue
+ else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears))
+ to_chat(M, "[src.true_name] whispers to [host], \"[message]\"")
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/carrier.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/carrier.dm
index 0d5218030d..c17dd9b448 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/carrier.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/carrier.dm
@@ -26,7 +26,7 @@
var/swarmling_faction = "spiders"
var/swarmling_prob = 10 // Odds that a spiderling will be a swarmling instead.
-/mob/living/simple_mob/animal/giant_spider/carrier/initialize()
+/mob/living/simple_mob/animal/giant_spider/carrier/Initialize()
spiderling_count = rand(5, 10)
adjust_scale(1.2)
return ..()
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/pepper.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/pepper.dm
index 1c2eaa6dda..a788465e5f 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/pepper.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/pepper.dm
@@ -16,6 +16,6 @@
poison_per_bite = 5
poison_type = "condensedcapsaicin_v"
-/mob/living/simple_mob/animal/giant_spider/pepper/initialize()
+/mob/living/simple_mob/animal/giant_spider/pepper/Initialize()
adjust_scale(1.1)
return ..()
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/phorogenic.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/phorogenic.dm
index d9508a05d8..4b239ee5c3 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/phorogenic.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/phorogenic.dm
@@ -30,7 +30,7 @@
var/explosion_delay_lower = 1 SECOND // Lower bound for explosion delay.
var/explosion_delay_upper = 2 SECONDS // Upper bound.
-/mob/living/simple_mob/animal/giant_spider/phorogenic/initialize()
+/mob/living/simple_mob/animal/giant_spider/phorogenic/Initialize()
adjust_scale(1.25)
return ..()
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm
index 57557ec9ca..8205cd109f 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm
@@ -1,146 +1,146 @@
-/mob/living/simple_mob/animal/passive/cat
- name = "cat"
- desc = "A domesticated, feline pet. Has a tendency to adopt crewmembers."
- tt_desc = "E Felis silvestris catus"
- icon_state = "cat2"
- item_state = "cat2"
- icon_living = "cat2"
- icon_dead = "cat2_dead"
- icon_rest = "cat2_rest"
-
- movement_cooldown = 0.5 SECONDS
-
- see_in_dark = 6 // Not sure if this actually works.
- response_help = "pets"
- response_disarm = "gently pushes aside"
- response_harm = "kicks"
-
- holder_type = /obj/item/weapon/holder/cat
- mob_size = MOB_SMALL
-
- has_langs = list("Cat")
-
- var/mob/living/friend = null // Our best pal, who we'll follow. Meow.
- var/friend_name = null //VOREStation Edit - Lock befriending to this character
-
-/mob/living/simple_mob/animal/passive/cat/handle_special()
- if(!stat && prob(2)) // spooky
- var/mob/observer/dead/spook = locate() in range(src, 5)
- if(spook)
- var/turf/T = get_turf(spook)
- var/list/visible = list()
- for(var/obj/O in T.contents)
- if(!O.invisibility && O.name)
- visible += O
- if(visible.len)
- var/atom/A = pick(visible)
- visible_emote("suddenly stops and stares at something unseen[istype(A) ? " near [A]":""].")
-
-// Instakills mice.
-/mob/living/simple_mob/animal/passive/cat/apply_melee_effects(var/atom/A)
- if(ismouse(A))
- var/mob/living/simple_mob/animal/passive/mouse/mouse = A
- if(mouse.getMaxHealth() < 20) // In case a badmin makes giant mice or something.
- mouse.splat()
- visible_emote(pick("bites \the [mouse]!", "toys with \the [mouse].", "chomps on \the [mouse]!"))
- else
- ..()
-
-/mob/living/simple_mob/animal/passive/cat/IIsAlly(mob/living/L)
- if(L == friend) // Always be pals with our special friend.
- return TRUE
-
- . = ..()
-
- if(.) // We're pals, but they might be a dirty mouse...
- if(ismouse(L))
- return FALSE // Cats and mice can never get along.
-
-/mob/living/simple_mob/animal/passive/cat/verb/become_friends()
- set name = "Become Friends"
- set category = "IC"
- set src in view(1)
-
- var/mob/living/L = usr
- if(!istype(L))
- return // Fuck off ghosts.
-
- if(friend)
- if(friend == usr)
- to_chat(L, span("notice", "\The [src] is already your friend! Meow!"))
- return
- else
- to_chat(L, span("warning", "\The [src] ignores you."))
- return
-
- //VOREStation Edit Start - Adds friend_name var checks
- if(!friend_name || L.real_name == friend_name)
- friend = L
- face_atom(L)
- to_chat(L, span("notice", "\The [src] is now your friend! Meow."))
- visible_emote(pick("nuzzles [friend].", "brushes against [friend].", "rubs against [friend].", "purrs."))
-
- if(has_AI())
- var/datum/ai_holder/AI = ai_holder
- AI.set_follow(friend)
- else
- to_chat(L, span("notice", "[src] ignores you."))
- //VOREStation Edit End
-
-//RUNTIME IS ALIVE! SQUEEEEEEEE~
-/mob/living/simple_mob/animal/passive/cat/runtime
- name = "Runtime"
- desc = "Her fur has the look and feel of velvet, and her tail quivers occasionally."
- tt_desc = "E Felis silvestris medicalis" // a hypoallergenic breed produced by NT for... medical purposes? Sure.
- gender = FEMALE
- icon_state = "cat"
- item_state = "cat"
- icon_living = "cat"
- icon_dead = "cat_dead"
- icon_rest = "cat_rest"
-
-/mob/living/simple_mob/animal/passive/cat/kitten
- name = "kitten"
- desc = "D'aaawwww"
- icon_state = "kitten"
- item_state = "kitten"
- icon_living = "kitten"
- icon_dead = "kitten_dead"
- gender = NEUTER
- holder_type = /obj/item/weapon/holder/cat/kitten //VOREStation Edit
-
-/mob/living/simple_mob/animal/passive/cat/kitten/initialize()
- if(gender == NEUTER)
- gender = pick(MALE, FEMALE)
- return ..()
-
-// Leaving this here for now.
-/obj/item/weapon/holder/cat/fluff/bones
- name = "Bones"
- desc = "It's Bones! Meow."
- gender = MALE
- icon_state = "cat3"
-
-/mob/living/simple_mob/animal/passive/cat/bones
- name = "Bones"
- desc = "That's Bones the cat. He's a laid back, black cat. Meow."
- gender = MALE
- icon_state = "cat3"
- item_state = "cat3"
- icon_living = "cat3"
- icon_dead = "cat3_dead"
- icon_rest = "cat3_rest"
- holder_type = /obj/item/weapon/holder/cat/fluff/bones
-
-
-/datum/say_list/cat
- speak = list("Meow!","Esp!","Purr!","HSSSSS")
- emote_hear = list("meows","mews")
- emote_see = list("shakes their head", "shivers")
- say_maybe_target = list("Meow?","Mew?","Mao?")
- say_got_target = list("MEOW!","HSSSS!","REEER!")
-
-// VOREStation Edit - Adds generic tactical kittens
-/obj/item/weapon/holder/cat/kitten
- icon_state = "kitten"
- w_class = ITEMSIZE_SMALL
+/mob/living/simple_mob/animal/passive/cat
+ name = "cat"
+ desc = "A domesticated, feline pet. Has a tendency to adopt crewmembers."
+ tt_desc = "E Felis silvestris catus"
+ icon_state = "cat2"
+ item_state = "cat2"
+ icon_living = "cat2"
+ icon_dead = "cat2_dead"
+ icon_rest = "cat2_rest"
+
+ movement_cooldown = 0.5 SECONDS
+
+ see_in_dark = 6 // Not sure if this actually works.
+ response_help = "pets"
+ response_disarm = "gently pushes aside"
+ response_harm = "kicks"
+
+ holder_type = /obj/item/weapon/holder/cat
+ mob_size = MOB_SMALL
+
+ has_langs = list("Cat")
+
+ var/mob/living/friend = null // Our best pal, who we'll follow. Meow.
+ var/friend_name = null //VOREStation Edit - Lock befriending to this character
+
+/mob/living/simple_mob/animal/passive/cat/handle_special()
+ if(!stat && prob(2)) // spooky
+ var/mob/observer/dead/spook = locate() in range(src, 5)
+ if(spook)
+ var/turf/T = get_turf(spook)
+ var/list/visible = list()
+ for(var/obj/O in T.contents)
+ if(!O.invisibility && O.name)
+ visible += O
+ if(visible.len)
+ var/atom/A = pick(visible)
+ visible_emote("suddenly stops and stares at something unseen[istype(A) ? " near [A]":""].")
+
+// Instakills mice.
+/mob/living/simple_mob/animal/passive/cat/apply_melee_effects(var/atom/A)
+ if(ismouse(A))
+ var/mob/living/simple_mob/animal/passive/mouse/mouse = A
+ if(mouse.getMaxHealth() < 20) // In case a badmin makes giant mice or something.
+ mouse.splat()
+ visible_emote(pick("bites \the [mouse]!", "toys with \the [mouse].", "chomps on \the [mouse]!"))
+ else
+ ..()
+
+/mob/living/simple_mob/animal/passive/cat/IIsAlly(mob/living/L)
+ if(L == friend) // Always be pals with our special friend.
+ return TRUE
+
+ . = ..()
+
+ if(.) // We're pals, but they might be a dirty mouse...
+ if(ismouse(L))
+ return FALSE // Cats and mice can never get along.
+
+/mob/living/simple_mob/animal/passive/cat/verb/become_friends()
+ set name = "Become Friends"
+ set category = "IC"
+ set src in view(1)
+
+ var/mob/living/L = usr
+ if(!istype(L))
+ return // Fuck off ghosts.
+
+ if(friend)
+ if(friend == usr)
+ to_chat(L, span("notice", "\The [src] is already your friend! Meow!"))
+ return
+ else
+ to_chat(L, span("warning", "\The [src] ignores you."))
+ return
+
+ //VOREStation Edit Start - Adds friend_name var checks
+ if(!friend_name || L.real_name == friend_name)
+ friend = L
+ face_atom(L)
+ to_chat(L, span("notice", "\The [src] is now your friend! Meow."))
+ visible_emote(pick("nuzzles [friend].", "brushes against [friend].", "rubs against [friend].", "purrs."))
+
+ if(has_AI())
+ var/datum/ai_holder/AI = ai_holder
+ AI.set_follow(friend)
+ else
+ to_chat(L, span("notice", "[src] ignores you."))
+ //VOREStation Edit End
+
+//RUNTIME IS ALIVE! SQUEEEEEEEE~
+/mob/living/simple_mob/animal/passive/cat/runtime
+ name = "Runtime"
+ desc = "Her fur has the look and feel of velvet, and her tail quivers occasionally."
+ tt_desc = "E Felis silvestris medicalis" // a hypoallergenic breed produced by NT for... medical purposes? Sure.
+ gender = FEMALE
+ icon_state = "cat"
+ item_state = "cat"
+ icon_living = "cat"
+ icon_dead = "cat_dead"
+ icon_rest = "cat_rest"
+
+/mob/living/simple_mob/animal/passive/cat/kitten
+ name = "kitten"
+ desc = "D'aaawwww"
+ icon_state = "kitten"
+ item_state = "kitten"
+ icon_living = "kitten"
+ icon_dead = "kitten_dead"
+ gender = NEUTER
+ holder_type = /obj/item/weapon/holder/cat/kitten //VOREStation Edit
+
+/mob/living/simple_mob/animal/passive/cat/kitten/Initialize()
+ if(gender == NEUTER)
+ gender = pick(MALE, FEMALE)
+ return ..()
+
+// Leaving this here for now.
+/obj/item/weapon/holder/cat/fluff/bones
+ name = "Bones"
+ desc = "It's Bones! Meow."
+ gender = MALE
+ icon_state = "cat3"
+
+/mob/living/simple_mob/animal/passive/cat/bones
+ name = "Bones"
+ desc = "That's Bones the cat. He's a laid back, black cat. Meow."
+ gender = MALE
+ icon_state = "cat3"
+ item_state = "cat3"
+ icon_living = "cat3"
+ icon_dead = "cat3_dead"
+ icon_rest = "cat3_rest"
+ holder_type = /obj/item/weapon/holder/cat/fluff/bones
+
+
+/datum/say_list/cat
+ speak = list("Meow!","Esp!","Purr!","HSSSSS")
+ emote_hear = list("meows","mews")
+ emote_see = list("shakes their head", "shivers")
+ say_maybe_target = list("Meow?","Mew?","Mao?")
+ say_got_target = list("MEOW!","HSSSS!","REEER!")
+
+// VOREStation Edit - Adds generic tactical kittens
+/obj/item/weapon/holder/cat/kitten
+ icon_state = "kitten"
+ w_class = ITEMSIZE_SMALL
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/parrot.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/parrot.dm
index bedd95e3ce..44c9ad1b8b 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/pets/parrot.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/parrot.dm
@@ -1,252 +1,252 @@
-// Parrots can talk, and may repeat things it hears.
-/mob/living/simple_mob/animal/passive/bird/parrot
- name = "parrot"
- description_info = "You can give it a headset by clicking on it with a headset. \
- To remove it, click the bird while on grab intent."
- has_langs = list("Galactic Common", "Bird")
-
- ai_holder_type = /datum/ai_holder/simple_mob/passive/parrot
-
- // A headset, so that talking parrots can yell at the crew over comms.
- // If set to a type, on initialize it will be instantiated into that type.
- var/obj/item/device/radio/headset/my_headset = null
-
-// Say list
-/datum/say_list/bird/poly
- speak = list(
- "Poly wanna cracker!",
- "Check the singulo, you chucklefucks!",
- "Wire the solars, you lazy bums!",
- "WHO TOOK THE DAMN HARDSUITS?",
- "OH GOD ITS FREE CALL THE SHUTTLE",
- "Danger! Crystal hyperstructure instability!",
- "CRYSTAL DELAMINATION IMMINENT.",
- "Tweet tweet, I'm a Teshari.",
- "Chitters.",
- "Meteors have been detected on a collision course with the station!"
- )
-
-// Lets the AI use headsets.
-// Player-controlled parrots will need to do it manually.
-/mob/living/simple_mob/animal/passive/bird/parrot/ISay(message)
- if(my_headset && prob(50))
- var/list/keys = list()
- for(var/channel in my_headset.channels)
- var/key = get_radio_key_from_channel(channel)
- if(key)
- keys += key
- if(keys.len)
- var/key_used = pick(keys)
- return say("[key_used] [message]")
- return say(message)
-
-// Ugly saycode so parrots can use their headsets.
-/mob/living/simple_mob/animal/passive/bird/parrot/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
- ..()
- if(message_mode)
- if(my_headset && istype(my_headset, /obj/item/device/radio))
- my_headset.talk_into(src, message, message_mode, verb, speaking)
- used_radios += my_headset
-
-// Clicked on while holding an object.
-/mob/living/simple_mob/animal/passive/bird/parrot/attackby(obj/item/I, mob/user)
- if(istype(I, /obj/item/device/radio/headset))
- give_headset(I, user)
- return
- return ..()
-
-// Clicked on by empty hand.
-/mob/living/simple_mob/animal/passive/bird/parrot/attack_hand(mob/living/L)
- if(L.a_intent == I_GRAB && my_headset)
- remove_headset(L)
- else
- ..()
-
-
-/mob/living/simple_mob/animal/passive/bird/parrot/proc/give_headset(obj/item/device/radio/headset/new_headset, mob/living/user)
- if(!istype(new_headset))
- to_chat(user, span("warning", "\The [new_headset] isn't a headset."))
- return
- if(my_headset)
- to_chat(user, span("warning", "\The [src] is already wearing \a [my_headset]."))
- return
- else
- user.drop_item(new_headset)
- my_headset = new_headset
- new_headset.forceMove(src)
- to_chat(user, span("warning", "You place \a [new_headset] on \the [src]. You monster."))
- to_chat(src, span("notice", "\The [user] gives you \a [new_headset]. You should put it to good use immediately."))
- return
-
-/mob/living/simple_mob/animal/passive/bird/parrot/proc/remove_headset(mob/living/user)
- if(!my_headset)
- to_chat(user, "\The [src] doesn't have a headset to remove, thankfully.")
- else
- ISay("BAWWWWWK LEAVE THE HEADSET BAWKKKKK!")
- my_headset.forceMove(get_turf(src))
- user.put_in_hands(my_headset)
- to_chat(user, span("notice", "You take away \the [src]'s [my_headset.name]. Finally."))
- to_chat(src, span("warning", "\The [user] takes your [my_headset.name] away! How cruel!"))
- my_headset = null
-
-/mob/living/simple_mob/animal/passive/bird/parrot/examine(mob/user)
- ..()
- if(my_headset)
- to_chat(user, "It is wearing \a [my_headset].")
-
-/mob/living/simple_mob/animal/passive/bird/parrot/initialize()
- if(my_headset)
- my_headset = new my_headset(src)
- return ..()
-
-// Subtypes.
-
-// Best Bird
-/mob/living/simple_mob/animal/passive/bird/parrot/poly
- name = "Poly"
- desc = "It's a parrot. An expert on quantum cracker theory."
- icon_state = "poly"
- icon_rest = "poly-held"
- icon_dead = "poly-dead"
- tt_desc = "E Ara macao"
- my_headset = /obj/item/device/radio/headset/headset_eng
- say_list_type = /datum/say_list/bird/poly
-
-// Best Bird with best headset.
-/mob/living/simple_mob/animal/passive/bird/parrot/poly/ultimate
- my_headset = /obj/item/device/radio/headset/omni
-
-/mob/living/simple_mob/animal/passive/bird/parrot/kea
- name = "kea"
- desc = "A species of parrot. On Earth, they are unique among other parrots for residing in alpine climates. \
- They are known to be intelligent and curious, which has made some consider them a pest."
- icon_state = "kea"
- icon_rest = "kea-held"
- icon_dead = "kea-dead"
- tt_desc = "E Nestor notabilis"
-
-/mob/living/simple_mob/animal/passive/bird/parrot/eclectus
- name = "eclectus"
- desc = "A species of parrot, this species features extreme sexual dimorphism in their plumage's colors. \
- A male eclectus has emerald green plumage, where as a female eclectus has red and purple plumage."
- icon_state = "eclectus"
- icon_rest = "eclectus-held"
- icon_dead = "eclectus-dead"
- tt_desc = "E Eclectus roratus"
-
-/mob/living/simple_mob/animal/passive/bird/parrot/eclectus/initialize()
- gender = pick(MALE, FEMALE)
- if(gender == FEMALE)
- icon_state = "eclectusf"
- icon_rest = "eclectusf-held"
- icon_dead = "eclectusf-dead"
- return ..()
-
-/mob/living/simple_mob/animal/passive/bird/parrot/grey_parrot
- name = "grey parrot"
- desc = "A species of parrot. This one is predominantly grey, but has red tail feathers."
- icon_state = "agrey"
- icon_rest = "agrey-held"
- icon_dead = "agrey-dead"
- tt_desc = "E Psittacus erithacus"
-
-/mob/living/simple_mob/animal/passive/bird/parrot/black_headed_caique
- name = "black-headed caique"
- desc = "A species of parrot, these birds have a distinct black color on their heads, distinguishing them from their relative Caiques."
- icon_state = "bcaique"
- icon_rest = "bcaique-held"
- icon_dead = "bcaique-dead"
- tt_desc = "E Pionites melanocephalus"
-
-/mob/living/simple_mob/animal/passive/bird/parrot/white_caique
- name = "white-bellied caique"
- desc = "A species of parrot, they are also known as the Green-Thighed Parrot."
- icon_state = "wcaique"
- icon_rest = "wcaique-held"
- icon_dead = "wcaique-dead"
- tt_desc = "E Pionites leucogaster"
-
-/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar
- name = "budgerigar"
- desc = "A species of parrot, they are also known as the common parakeet, or in some circles, the budgie. \
- This one is has its natural colors of green and yellow."
- icon_state = "gbudge"
- icon_rest = "gbudge-held"
- icon_dead = "gbudge-dead"
- tt_desc = "E Melopsittacus undulatus"
-
-/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/blue
- icon_state = "bbudge"
- icon_rest = "bbudge-held"
- icon_dead = "bbudge-dead"
- desc = "A species of parrot, they are also known as the common parakeet, or in some circles, the budgie. \
- This one has a mutation which altered its color to be blue instead of green and yellow."
-
-/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/bluegreen
- icon_state = "bgbudge"
- icon_rest = "bgbudge-held"
- icon_dead = "bgbudge-dead"
- desc = "A species of parrot, they are also known as the common parakeet, or in some circles, the budgie. \
- This one has a mutation which altered its color to be a mix of blue and green."
-
-/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel
- name = "cockatiel"
- desc = "A species of parrot. This one has a highly visible crest."
- icon_state = "tiel"
- icon_rest = "tiel-held"
- icon_dead = "tiel-dead"
- tt_desc = "E Nymphicus hollandicus"
-
-/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/white
- icon_state = "wtiel"
- icon_rest = "wtiel-held"
- icon_dead = "wtiel-dead"
-
-/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/yellowish
- icon_state = "luttiel"
- icon_rest = "luttiel-held"
- icon_dead = "luttiel-dead"
-
-/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/grey
- icon_state = "blutiel" // idk why this is blu.
- icon_rest = "blutiel-held"
- icon_dead = "blutiel-dead"
-
-// This actually might be the yellow-crested cockatoo but idk.
-/mob/living/simple_mob/animal/passive/bird/parrot/sulphur_cockatoo
- name = "sulphur-crested cockatoo"
- desc = "A species of parrot. This one has an expressive yellow crest. Their underwing and tail feathers are also yellow."
- icon_state = "too"
- icon_rest = "too-held"
- icon_dead = "too-dead"
- tt_desc = "E Cacatua galerita"
-
-// This was originally called 'hooded_too', which might not mean the unbrella cockatoo but idk.
-/mob/living/simple_mob/animal/passive/bird/parrot/white_cockatoo
- name = "white cockatoo"
- desc = "A species of parrot. This one is also known as the Umbrella Cockatoo, due to the semicircular shape of its crest."
- icon_state = "utoo"
- icon_rest = "utoo-held"
- icon_dead = "utoo-dead"
- tt_desc = "E Cacatua alba"
-
-/mob/living/simple_mob/animal/passive/bird/parrot/pink_cockatoo
- name = "pink cockatoo"
- desc = "A species of parrot. This one is also known as Major Mitchell's cockatoo, \
- in honor of a human surveyor and explorer who existed before humans fully explored their home planet."
- icon_state = "mtoo"
- icon_rest = "mtoo-held"
- icon_dead = "mtoo-dead"
- tt_desc = "E Lophochroa leadbeateri"
-
-
-// AI
-/datum/ai_holder/simple_mob/passive/parrot
- speak_chance = 2
- base_wander_delay = 8
-
-/datum/ai_holder/simple_mob/passive/parrot/on_hear_say(mob/living/speaker, message)
- if(holder.stat || !holder.say_list || !message || speaker == holder)
- return
- var/datum/say_list/S = holder.say_list
+// Parrots can talk, and may repeat things it hears.
+/mob/living/simple_mob/animal/passive/bird/parrot
+ name = "parrot"
+ description_info = "You can give it a headset by clicking on it with a headset. \
+ To remove it, click the bird while on grab intent."
+ has_langs = list("Galactic Common", "Bird")
+
+ ai_holder_type = /datum/ai_holder/simple_mob/passive/parrot
+
+ // A headset, so that talking parrots can yell at the crew over comms.
+ // If set to a type, on initialize it will be instantiated into that type.
+ var/obj/item/device/radio/headset/my_headset = null
+
+// Say list
+/datum/say_list/bird/poly
+ speak = list(
+ "Poly wanna cracker!",
+ "Check the singulo, you chucklefucks!",
+ "Wire the solars, you lazy bums!",
+ "WHO TOOK THE DAMN HARDSUITS?",
+ "OH GOD ITS FREE CALL THE SHUTTLE",
+ "Danger! Crystal hyperstructure instability!",
+ "CRYSTAL DELAMINATION IMMINENT.",
+ "Tweet tweet, I'm a Teshari.",
+ "Chitters.",
+ "Meteors have been detected on a collision course with the station!"
+ )
+
+// Lets the AI use headsets.
+// Player-controlled parrots will need to do it manually.
+/mob/living/simple_mob/animal/passive/bird/parrot/ISay(message)
+ if(my_headset && prob(50))
+ var/list/keys = list()
+ for(var/channel in my_headset.channels)
+ var/key = get_radio_key_from_channel(channel)
+ if(key)
+ keys += key
+ if(keys.len)
+ var/key_used = pick(keys)
+ return say("[key_used] [message]")
+ return say(message)
+
+// Ugly saycode so parrots can use their headsets.
+/mob/living/simple_mob/animal/passive/bird/parrot/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
+ ..()
+ if(message_mode)
+ if(my_headset && istype(my_headset, /obj/item/device/radio))
+ my_headset.talk_into(src, message, message_mode, verb, speaking)
+ used_radios += my_headset
+
+// Clicked on while holding an object.
+/mob/living/simple_mob/animal/passive/bird/parrot/attackby(obj/item/I, mob/user)
+ if(istype(I, /obj/item/device/radio/headset))
+ give_headset(I, user)
+ return
+ return ..()
+
+// Clicked on by empty hand.
+/mob/living/simple_mob/animal/passive/bird/parrot/attack_hand(mob/living/L)
+ if(L.a_intent == I_GRAB && my_headset)
+ remove_headset(L)
+ else
+ ..()
+
+
+/mob/living/simple_mob/animal/passive/bird/parrot/proc/give_headset(obj/item/device/radio/headset/new_headset, mob/living/user)
+ if(!istype(new_headset))
+ to_chat(user, span("warning", "\The [new_headset] isn't a headset."))
+ return
+ if(my_headset)
+ to_chat(user, span("warning", "\The [src] is already wearing \a [my_headset]."))
+ return
+ else
+ user.drop_item(new_headset)
+ my_headset = new_headset
+ new_headset.forceMove(src)
+ to_chat(user, span("warning", "You place \a [new_headset] on \the [src]. You monster."))
+ to_chat(src, span("notice", "\The [user] gives you \a [new_headset]. You should put it to good use immediately."))
+ return
+
+/mob/living/simple_mob/animal/passive/bird/parrot/proc/remove_headset(mob/living/user)
+ if(!my_headset)
+ to_chat(user, "\The [src] doesn't have a headset to remove, thankfully.")
+ else
+ ISay("BAWWWWWK LEAVE THE HEADSET BAWKKKKK!")
+ my_headset.forceMove(get_turf(src))
+ user.put_in_hands(my_headset)
+ to_chat(user, span("notice", "You take away \the [src]'s [my_headset.name]. Finally."))
+ to_chat(src, span("warning", "\The [user] takes your [my_headset.name] away! How cruel!"))
+ my_headset = null
+
+/mob/living/simple_mob/animal/passive/bird/parrot/examine(mob/user)
+ ..()
+ if(my_headset)
+ to_chat(user, "It is wearing \a [my_headset].")
+
+/mob/living/simple_mob/animal/passive/bird/parrot/Initialize()
+ if(my_headset)
+ my_headset = new my_headset(src)
+ return ..()
+
+// Subtypes.
+
+// Best Bird
+/mob/living/simple_mob/animal/passive/bird/parrot/poly
+ name = "Poly"
+ desc = "It's a parrot. An expert on quantum cracker theory."
+ icon_state = "poly"
+ icon_rest = "poly-held"
+ icon_dead = "poly-dead"
+ tt_desc = "E Ara macao"
+ my_headset = /obj/item/device/radio/headset/headset_eng
+ say_list_type = /datum/say_list/bird/poly
+
+// Best Bird with best headset.
+/mob/living/simple_mob/animal/passive/bird/parrot/poly/ultimate
+ my_headset = /obj/item/device/radio/headset/omni
+
+/mob/living/simple_mob/animal/passive/bird/parrot/kea
+ name = "kea"
+ desc = "A species of parrot. On Earth, they are unique among other parrots for residing in alpine climates. \
+ They are known to be intelligent and curious, which has made some consider them a pest."
+ icon_state = "kea"
+ icon_rest = "kea-held"
+ icon_dead = "kea-dead"
+ tt_desc = "E Nestor notabilis"
+
+/mob/living/simple_mob/animal/passive/bird/parrot/eclectus
+ name = "eclectus"
+ desc = "A species of parrot, this species features extreme sexual dimorphism in their plumage's colors. \
+ A male eclectus has emerald green plumage, where as a female eclectus has red and purple plumage."
+ icon_state = "eclectus"
+ icon_rest = "eclectus-held"
+ icon_dead = "eclectus-dead"
+ tt_desc = "E Eclectus roratus"
+
+/mob/living/simple_mob/animal/passive/bird/parrot/eclectus/Initialize()
+ gender = pick(MALE, FEMALE)
+ if(gender == FEMALE)
+ icon_state = "eclectusf"
+ icon_rest = "eclectusf-held"
+ icon_dead = "eclectusf-dead"
+ return ..()
+
+/mob/living/simple_mob/animal/passive/bird/parrot/grey_parrot
+ name = "grey parrot"
+ desc = "A species of parrot. This one is predominantly grey, but has red tail feathers."
+ icon_state = "agrey"
+ icon_rest = "agrey-held"
+ icon_dead = "agrey-dead"
+ tt_desc = "E Psittacus erithacus"
+
+/mob/living/simple_mob/animal/passive/bird/parrot/black_headed_caique
+ name = "black-headed caique"
+ desc = "A species of parrot, these birds have a distinct black color on their heads, distinguishing them from their relative Caiques."
+ icon_state = "bcaique"
+ icon_rest = "bcaique-held"
+ icon_dead = "bcaique-dead"
+ tt_desc = "E Pionites melanocephalus"
+
+/mob/living/simple_mob/animal/passive/bird/parrot/white_caique
+ name = "white-bellied caique"
+ desc = "A species of parrot, they are also known as the Green-Thighed Parrot."
+ icon_state = "wcaique"
+ icon_rest = "wcaique-held"
+ icon_dead = "wcaique-dead"
+ tt_desc = "E Pionites leucogaster"
+
+/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar
+ name = "budgerigar"
+ desc = "A species of parrot, they are also known as the common parakeet, or in some circles, the budgie. \
+ This one is has its natural colors of green and yellow."
+ icon_state = "gbudge"
+ icon_rest = "gbudge-held"
+ icon_dead = "gbudge-dead"
+ tt_desc = "E Melopsittacus undulatus"
+
+/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/blue
+ icon_state = "bbudge"
+ icon_rest = "bbudge-held"
+ icon_dead = "bbudge-dead"
+ desc = "A species of parrot, they are also known as the common parakeet, or in some circles, the budgie. \
+ This one has a mutation which altered its color to be blue instead of green and yellow."
+
+/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/bluegreen
+ icon_state = "bgbudge"
+ icon_rest = "bgbudge-held"
+ icon_dead = "bgbudge-dead"
+ desc = "A species of parrot, they are also known as the common parakeet, or in some circles, the budgie. \
+ This one has a mutation which altered its color to be a mix of blue and green."
+
+/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel
+ name = "cockatiel"
+ desc = "A species of parrot. This one has a highly visible crest."
+ icon_state = "tiel"
+ icon_rest = "tiel-held"
+ icon_dead = "tiel-dead"
+ tt_desc = "E Nymphicus hollandicus"
+
+/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/white
+ icon_state = "wtiel"
+ icon_rest = "wtiel-held"
+ icon_dead = "wtiel-dead"
+
+/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/yellowish
+ icon_state = "luttiel"
+ icon_rest = "luttiel-held"
+ icon_dead = "luttiel-dead"
+
+/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/grey
+ icon_state = "blutiel" // idk why this is blu.
+ icon_rest = "blutiel-held"
+ icon_dead = "blutiel-dead"
+
+// This actually might be the yellow-crested cockatoo but idk.
+/mob/living/simple_mob/animal/passive/bird/parrot/sulphur_cockatoo
+ name = "sulphur-crested cockatoo"
+ desc = "A species of parrot. This one has an expressive yellow crest. Their underwing and tail feathers are also yellow."
+ icon_state = "too"
+ icon_rest = "too-held"
+ icon_dead = "too-dead"
+ tt_desc = "E Cacatua galerita"
+
+// This was originally called 'hooded_too', which might not mean the unbrella cockatoo but idk.
+/mob/living/simple_mob/animal/passive/bird/parrot/white_cockatoo
+ name = "white cockatoo"
+ desc = "A species of parrot. This one is also known as the Umbrella Cockatoo, due to the semicircular shape of its crest."
+ icon_state = "utoo"
+ icon_rest = "utoo-held"
+ icon_dead = "utoo-dead"
+ tt_desc = "E Cacatua alba"
+
+/mob/living/simple_mob/animal/passive/bird/parrot/pink_cockatoo
+ name = "pink cockatoo"
+ desc = "A species of parrot. This one is also known as Major Mitchell's cockatoo, \
+ in honor of a human surveyor and explorer who existed before humans fully explored their home planet."
+ icon_state = "mtoo"
+ icon_rest = "mtoo-held"
+ icon_dead = "mtoo-dead"
+ tt_desc = "E Lophochroa leadbeateri"
+
+
+// AI
+/datum/ai_holder/simple_mob/passive/parrot
+ speak_chance = 2
+ base_wander_delay = 8
+
+/datum/ai_holder/simple_mob/passive/parrot/on_hear_say(mob/living/speaker, message)
+ if(holder.stat || !holder.say_list || !message || speaker == holder)
+ return
+ var/datum/say_list/S = holder.say_list
S.speak |= message
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm
index 0148a39954..24e74a56f3 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm
@@ -1,70 +1,70 @@
-// Shantaks are essentially sif wolves.
-
-/mob/living/simple_mob/animal/sif/shantak
- name = "shantak"
- desc = "A piglike creature with a bright iridiscent mane that sparkles as though lit by an inner light. \
- Don't be fooled by its beauty though."
- tt_desc = "S Choeros shantak"
-
- faction = "shantak"
-
- icon_state = "shantak"
- icon_living = "shantak"
- icon_dead = "shantak_dead"
- icon = 'icons/jungle.dmi'
-
- maxHealth = 75
-
- movement_cooldown = 5
-
- melee_damage_lower = 6
- melee_damage_upper = 14
- base_attack_cooldown = 1 SECOND
- melee_attack_delay = 0.5 SECONDS
- attack_armor_pen = 5
- attack_sharp = TRUE
- attack_edge = TRUE
- attacktext = list("gouged")
-
- say_list_type = /datum/say_list/shantak
-
-/datum/say_list/shantak
- speak = list("Shuhn.","Shrunnph?","Shunpf.")
- emote_see = list("scratches the ground", "shakes out its mane", "clinks gently as it moves")
-
-
-// The pack leader.
-// Will command other shantaks to follow it.
-/mob/living/simple_mob/animal/sif/shantak/leader
- name = "big shantak"
- desc = "A piglike creature with a bright iridiscent mane that sparkles as though lit by an inner light. \
- This one seems bigger than the others, and has a commanding presence."
- icon_scale = 1.5
- maxHealth = 125
- player_msg = "You have the ability to command other shantaks to follow you."
-
-/mob/living/simple_mob/animal/sif/shantak/leader/verb/rally_pack()
- set name = "Rally Pack"
- set desc = "Commands your fellow packmembers to follow you, the leader."
- set category = "Abilities"
-
- for(var/mob/living/simple_mob/animal/sif/shantak/S in hearers(7, src))
- if(istype(S, /mob/living/simple_mob/animal/sif/shantak/leader)) // Leaders won't follow other leaders. Also avoids trying to follow ourselves.
- continue
- if(!S.ai_holder)
- continue
- if(S.faction != src.faction)
- continue
- var/datum/ai_holder/AI = S.ai_holder
- AI.set_follow(src)
-
-// Variant that automatically commands nearby allies to follow it when created.
-// Suggested to spawn last so it can rally up all the shantaks easily before hunting for tasty explorers.
-/mob/living/simple_mob/animal/sif/shantak/leader/autofollow/initialize()
- rally_pack()
- return ..()
-
-
-// These ones only retaliate. Used for a PoI.
-/mob/living/simple_mob/animal/sif/shantak/retaliate
+// Shantaks are essentially sif wolves.
+
+/mob/living/simple_mob/animal/sif/shantak
+ name = "shantak"
+ desc = "A piglike creature with a bright iridiscent mane that sparkles as though lit by an inner light. \
+ Don't be fooled by its beauty though."
+ tt_desc = "S Choeros shantak"
+
+ faction = "shantak"
+
+ icon_state = "shantak"
+ icon_living = "shantak"
+ icon_dead = "shantak_dead"
+ icon = 'icons/jungle.dmi'
+
+ maxHealth = 75
+
+ movement_cooldown = 5
+
+ melee_damage_lower = 6
+ melee_damage_upper = 14
+ base_attack_cooldown = 1 SECOND
+ melee_attack_delay = 0.5 SECONDS
+ attack_armor_pen = 5
+ attack_sharp = TRUE
+ attack_edge = TRUE
+ attacktext = list("gouged")
+
+ say_list_type = /datum/say_list/shantak
+
+/datum/say_list/shantak
+ speak = list("Shuhn.","Shrunnph?","Shunpf.")
+ emote_see = list("scratches the ground", "shakes out its mane", "clinks gently as it moves")
+
+
+// The pack leader.
+// Will command other shantaks to follow it.
+/mob/living/simple_mob/animal/sif/shantak/leader
+ name = "big shantak"
+ desc = "A piglike creature with a bright iridiscent mane that sparkles as though lit by an inner light. \
+ This one seems bigger than the others, and has a commanding presence."
+ icon_scale = 1.5
+ maxHealth = 125
+ player_msg = "You have the ability to command other shantaks to follow you."
+
+/mob/living/simple_mob/animal/sif/shantak/leader/verb/rally_pack()
+ set name = "Rally Pack"
+ set desc = "Commands your fellow packmembers to follow you, the leader."
+ set category = "Abilities"
+
+ for(var/mob/living/simple_mob/animal/sif/shantak/S in hearers(7, src))
+ if(istype(S, /mob/living/simple_mob/animal/sif/shantak/leader)) // Leaders won't follow other leaders. Also avoids trying to follow ourselves.
+ continue
+ if(!S.ai_holder)
+ continue
+ if(S.faction != src.faction)
+ continue
+ var/datum/ai_holder/AI = S.ai_holder
+ AI.set_follow(src)
+
+// Variant that automatically commands nearby allies to follow it when created.
+// Suggested to spawn last so it can rally up all the shantaks easily before hunting for tasty explorers.
+/mob/living/simple_mob/animal/sif/shantak/leader/autofollow/Initialize()
+ rally_pack()
+ return ..()
+
+
+// These ones only retaliate. Used for a PoI.
+/mob/living/simple_mob/animal/sif/shantak/retaliate
ai_holder_type = /datum/ai_holder/simple_mob/retaliate
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm
index e1327f033b..62acbf2a3d 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm
@@ -1,128 +1,128 @@
-// Space carp show up as a random event to wreck hapless people in space or near windows.
-// They generally fit the archetype of 'fast but fragile'.
-// This is compensated by being in groups (usually).
-/mob/living/simple_mob/animal/space/carp
- name = "space carp"
- desc = "A ferocious, fang-bearing creature that resembles a fish."
- icon_state = "carp"
- icon_living = "carp"
- icon_dead = "carp_dead"
- icon_gib = "carp_gib"
-
- faction = "carp"
- maxHealth = 25
- health = 25
- movement_cooldown = 0 // Carp go fast
- hovering = TRUE
-
- response_help = "pets the"
- response_disarm = "gently pushes aside the"
- response_harm = "hits the"
-
- melee_damage_lower = 7 // About 14 DPS.
- melee_damage_upper = 7
- base_attack_cooldown = 10 // One attack a second.
- attack_sharp = TRUE
- attack_sound = 'sound/weapons/bite.ogg'
- attacktext = list("bitten")
-
- meat_amount = 1
- meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat
-
- ai_holder_type = /datum/ai_holder/simple_mob/melee
-
- var/knockdown_chance = 15
-
-/mob/living/simple_mob/animal/space/carp/apply_melee_effects(var/atom/A)
- if(isliving(A))
- var/mob/living/L = A
- if(prob(knockdown_chance))
- L.Weaken(3)
- L.visible_message(span("danger", "\The [src] knocks down \the [L]!"))
-
-// Subtypes.
-
-// Won't wander away.
-/mob/living/simple_mob/animal/space/carp/event
- ai_holder_type = /datum/ai_holder/simple_mob/event
-
-
-/mob/living/simple_mob/animal/space/carp/large
- name = "elder carp"
- desc = "An older, more matured carp. Few survive to this age due to their aggressiveness."
- icon = 'icons/mob/64x32.dmi'
- icon_state = "shark"
- icon_living = "shark"
- icon_dead = "shark_dead"
-
- maxHealth = 50
- health = 50
- movement_cooldown = 5 // Slower than the younger carp.
- mob_size = MOB_LARGE
-
- pixel_x = -16
- default_pixel_x = -16
-
- meat_amount = 3
-
-
-/mob/living/simple_mob/animal/space/carp/large/huge
- name = "great white carp"
- desc = "A very rare breed of carp- and a very aggressive one."
- icon = 'icons/mob/64x64.dmi'
- icon_dead = "megacarp_dead"
- icon_living = "megacarp"
- icon_state = "megacarp"
-
- maxHealth = 230
- health = 230
- movement_cooldown = 10
-
- melee_damage_lower = 15 // About 20 DPS.
- melee_damage_upper = 25
-
- pixel_y = -16
- default_pixel_y = -16
-
- meat_amount = 10
-
-
-/mob/living/simple_mob/animal/space/carp/holographic
- name = "holographic carp"
- desc = "An obviously holographic, but still ferocious looking carp."
- // Might be worth using a filter similar to AI holograms in the future.
- icon = 'icons/mob/AI.dmi'
- icon_state = "holo4"
- icon_living = "holo4"
- icon_dead = "holo4"
- alpha = 127
- icon_gib = null
- meat_amount = 0
- meat_type = null
-
- mob_class = MOB_CLASS_PHOTONIC // Xeno-taser won't work on this as its not a 'real' carp.
-
-/mob/living/simple_mob/animal/space/carp/holographic/initialize()
- set_light(2) // Hologram lighting.
- return ..()
-
-// Presumably the holodeck emag code requires this.
-// Pass TRUE to make safe. Pass FALSE to make unsafe.
-/mob/living/simple_mob/animal/space/carp/holographic/proc/set_safety(safe)
- if(!isnull(get_AI_stance())) // Will return null if lacking an AI holder or a player is controlling it w/o autopilot var.
- ai_holder.hostile = !safe // Inverted so safe = TRUE means hostility = FALSE.
- ai_holder.forget_everything() // Reset state so it'll stop chewing on its target.
-
-// Called on death.
-/mob/living/simple_mob/animal/space/carp/holographic/proc/derez()
- visible_message(span("notice", "\The [src] fades away!"))
- qdel(src)
-
-/mob/living/simple_mob/animal/space/carp/holographic/gib()
- derez() // Holograms can't gib.
-
-/mob/living/simple_mob/animal/space/carp/holographic/death()
- ..()
- derez()
-
-
+// Space carp show up as a random event to wreck hapless people in space or near windows.
+// They generally fit the archetype of 'fast but fragile'.
+// This is compensated by being in groups (usually).
+/mob/living/simple_mob/animal/space/carp
+ name = "space carp"
+ desc = "A ferocious, fang-bearing creature that resembles a fish."
+ icon_state = "carp"
+ icon_living = "carp"
+ icon_dead = "carp_dead"
+ icon_gib = "carp_gib"
+
+ faction = "carp"
+ maxHealth = 25
+ health = 25
+ movement_cooldown = 0 // Carp go fast
+ hovering = TRUE
+
+ response_help = "pets the"
+ response_disarm = "gently pushes aside the"
+ response_harm = "hits the"
+
+ melee_damage_lower = 7 // About 14 DPS.
+ melee_damage_upper = 7
+ base_attack_cooldown = 10 // One attack a second.
+ attack_sharp = TRUE
+ attack_sound = 'sound/weapons/bite.ogg'
+ attacktext = list("bitten")
+
+ meat_amount = 1
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat
+
+ ai_holder_type = /datum/ai_holder/simple_mob/melee
+
+ var/knockdown_chance = 15
+
+/mob/living/simple_mob/animal/space/carp/apply_melee_effects(var/atom/A)
+ if(isliving(A))
+ var/mob/living/L = A
+ if(prob(knockdown_chance))
+ L.Weaken(3)
+ L.visible_message(span("danger", "\The [src] knocks down \the [L]!"))
+
+// Subtypes.
+
+// Won't wander away.
+/mob/living/simple_mob/animal/space/carp/event
+ ai_holder_type = /datum/ai_holder/simple_mob/event
+
+
+/mob/living/simple_mob/animal/space/carp/large
+ name = "elder carp"
+ desc = "An older, more matured carp. Few survive to this age due to their aggressiveness."
+ icon = 'icons/mob/64x32.dmi'
+ icon_state = "shark"
+ icon_living = "shark"
+ icon_dead = "shark_dead"
+
+ maxHealth = 50
+ health = 50
+ movement_cooldown = 5 // Slower than the younger carp.
+ mob_size = MOB_LARGE
+
+ pixel_x = -16
+ default_pixel_x = -16
+
+ meat_amount = 3
+
+
+/mob/living/simple_mob/animal/space/carp/large/huge
+ name = "great white carp"
+ desc = "A very rare breed of carp- and a very aggressive one."
+ icon = 'icons/mob/64x64.dmi'
+ icon_dead = "megacarp_dead"
+ icon_living = "megacarp"
+ icon_state = "megacarp"
+
+ maxHealth = 230
+ health = 230
+ movement_cooldown = 10
+
+ melee_damage_lower = 15 // About 20 DPS.
+ melee_damage_upper = 25
+
+ pixel_y = -16
+ default_pixel_y = -16
+
+ meat_amount = 10
+
+
+/mob/living/simple_mob/animal/space/carp/holographic
+ name = "holographic carp"
+ desc = "An obviously holographic, but still ferocious looking carp."
+ // Might be worth using a filter similar to AI holograms in the future.
+ icon = 'icons/mob/AI.dmi'
+ icon_state = "holo4"
+ icon_living = "holo4"
+ icon_dead = "holo4"
+ alpha = 127
+ icon_gib = null
+ meat_amount = 0
+ meat_type = null
+
+ mob_class = MOB_CLASS_PHOTONIC // Xeno-taser won't work on this as its not a 'real' carp.
+
+/mob/living/simple_mob/animal/space/carp/holographic/Initialize()
+ set_light(2) // Hologram lighting.
+ return ..()
+
+// Presumably the holodeck emag code requires this.
+// Pass TRUE to make safe. Pass FALSE to make unsafe.
+/mob/living/simple_mob/animal/space/carp/holographic/proc/set_safety(safe)
+ if(!isnull(get_AI_stance())) // Will return null if lacking an AI holder or a player is controlling it w/o autopilot var.
+ ai_holder.hostile = !safe // Inverted so safe = TRUE means hostility = FALSE.
+ ai_holder.forget_everything() // Reset state so it'll stop chewing on its target.
+
+// Called on death.
+/mob/living/simple_mob/animal/space/carp/holographic/proc/derez()
+ visible_message(span("notice", "\The [src] fades away!"))
+ qdel(src)
+
+/mob/living/simple_mob/animal/space/carp/holographic/gib()
+ derez() // Holograms can't gib.
+
+/mob/living/simple_mob/animal/space/carp/holographic/death()
+ ..()
+ derez()
+
+
diff --git a/code/modules/mob/living/simple_mob/subtypes/blob/spore.dm b/code/modules/mob/living/simple_mob/subtypes/blob/spore.dm
index fd91b00b33..e7bf5861f2 100644
--- a/code/modules/mob/living/simple_mob/subtypes/blob/spore.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/blob/spore.dm
@@ -1,148 +1,148 @@
-// Spores are made from blob factories.
-// They are very weak and expendable, but can overwhelm when a lot of them are together.
-// When attacking, spores will hit harder if near other friendly spores.
-// Some blobs can infest dead non-robotic mobs, making them into Not Zombies.
-
-/mob/living/simple_mob/blob/spore
- name = "blob spore"
- desc = "A floating, fragile spore."
-
- icon_state = "blobpod"
- icon_living = "blobpod"
- glow_range = 3
- glow_intensity = 5
- layer = ABOVE_MOB_LAYER // Over the blob.
-
- health = 30
- maxHealth = 30
- melee_damage_lower = 2
- melee_damage_upper = 4
- movement_cooldown = 0
- hovering = TRUE
-
- attacktext = list("slams into")
- attack_sound = 'sound/effects/slime_squish.ogg'
- say_list_type = /datum/say_list/spore
-
- var/mob/living/carbon/human/infested = null // The human this thing is totally not making into a zombie.
- var/can_infest = FALSE
- var/is_infesting = FALSE
-
-/datum/say_list/spore
- emote_see = list("sways", "inflates briefly")
-
-/datum/say_list/infested
- emote_see = list("shambles around", "twitches", "stares")
-
-
-/mob/living/simple_mob/blob/spore/infesting
- name = "infesting blob spore"
- can_infest = TRUE
-
-/mob/living/simple_mob/blob/spore/weak
- name = "fragile blob spore"
- health = 15
- maxHealth = 15
- melee_damage_lower = 1
- melee_damage_upper = 2
-
-/mob/living/simple_mob/blob/spore/initialize(mapload, var/obj/structure/blob/factory/my_factory)
- if(istype(my_factory))
- factory = my_factory
- factory.spores += src
- return ..()
-
-/mob/living/simple_mob/blob/spore/Destroy()
- if(factory)
- factory.spores -= src
- factory = null
- if(infested)
- infested.forceMove(get_turf(src))
- visible_message(span("warning", "\The [infested] falls to the ground as the blob spore bursts."))
- infested = null
- return ..()
-
-/mob/living/simple_mob/blob/spore/death(gibbed, deathmessage = "bursts!")
- if(overmind)
- overmind.blob_type.on_spore_death(src)
- ..(gibbed, deathmessage)
- qdel(src)
-
-/mob/living/simple_mob/blob/spore/update_icons()
- ..() // This will cut our overlays.
-
- if(overmind)
- color = overmind.blob_type.complementary_color
- glow_color = color
- glow_toggle = TRUE
- else
- color = null
- glow_color = null
- glow_toggle = FALSE
-
- if(is_infesting)
- icon = infested.icon
- copy_overlays(infested)
- // overlays = infested.overlays
- var/mutable_appearance/blob_head_overlay = mutable_appearance('icons/mob/blob.dmi', "blob_head")
- if(overmind)
- blob_head_overlay.color = overmind.blob_type.complementary_color
- color = initial(color)//looks better.
- // overlays += blob_head_overlay
- add_overlay(blob_head_overlay, TRUE)
-
-/mob/living/simple_mob/blob/spore/handle_special()
- ..()
- if(can_infest && !is_infesting && isturf(loc))
- for(var/mob/living/carbon/human/H in view(src,1))
- if(H.stat != DEAD) // We want zombies.
- continue
- if(H.isSynthetic()) // Not philosophical zombies.
- continue
- infest(H)
- break
-
- if(factory && z != factory.z) // This is to prevent spores getting lost in space and making the factory useless.
- qdel(src)
-
-/mob/living/simple_mob/blob/spore/proc/infest(mob/living/carbon/human/H)
- is_infesting = TRUE
- if(H.wear_suit)
- var/obj/item/clothing/suit/A = H.wear_suit
- if(A.armor && A.armor["melee"])
- maxHealth += A.armor["melee"] //That zombie's got armor, I want armor!
-
- maxHealth += 40
- health = maxHealth
- name = "Infested [H.real_name]" // Not using the Z word.
- desc = "A parasitic organism attached to a deceased body, controlling it directly as if it were a puppet."
- melee_damage_lower += 8 // 10 total.
- melee_damage_upper += 11 // 15 total.
- attacktext = list("claws")
-
- H.forceMove(src)
- infested = H
-
- say_list = new /datum/say_list/infested()
-
- update_icons()
- visible_message(span("warning", "The corpse of [H.name] suddenly rises!"))
-
-/mob/living/simple_mob/blob/spore/GetIdCard()
- if(infested) // If we've infested someone, use their ID.
- return infested.GetIdCard()
-
-/mob/living/simple_mob/blob/spore/apply_bonus_melee_damage(A, damage_to_do)
- var/helpers = 0
- for(var/mob/living/simple_mob/blob/spore/S in view(1, src))
- if(S == src) // Don't count ourselves.
- continue
- if(!IIsAlly(S)) // Only friendly spores make us stronger.
- continue
- // Friendly spores contribute 1/4th of their averaged attack power to our attack.
- damage_to_do += ((S.melee_damage_lower + S.melee_damage_upper) / 2) / 4
- helpers++
-
- if(helpers)
- to_chat(src, span("notice", "Your attack is assisted by [helpers] other spore\s."))
+// Spores are made from blob factories.
+// They are very weak and expendable, but can overwhelm when a lot of them are together.
+// When attacking, spores will hit harder if near other friendly spores.
+// Some blobs can infest dead non-robotic mobs, making them into Not Zombies.
+
+/mob/living/simple_mob/blob/spore
+ name = "blob spore"
+ desc = "A floating, fragile spore."
+
+ icon_state = "blobpod"
+ icon_living = "blobpod"
+ glow_range = 3
+ glow_intensity = 5
+ layer = ABOVE_MOB_LAYER // Over the blob.
+
+ health = 30
+ maxHealth = 30
+ melee_damage_lower = 2
+ melee_damage_upper = 4
+ movement_cooldown = 0
+ hovering = TRUE
+
+ attacktext = list("slams into")
+ attack_sound = 'sound/effects/slime_squish.ogg'
+ say_list_type = /datum/say_list/spore
+
+ var/mob/living/carbon/human/infested = null // The human this thing is totally not making into a zombie.
+ var/can_infest = FALSE
+ var/is_infesting = FALSE
+
+/datum/say_list/spore
+ emote_see = list("sways", "inflates briefly")
+
+/datum/say_list/infested
+ emote_see = list("shambles around", "twitches", "stares")
+
+
+/mob/living/simple_mob/blob/spore/infesting
+ name = "infesting blob spore"
+ can_infest = TRUE
+
+/mob/living/simple_mob/blob/spore/weak
+ name = "fragile blob spore"
+ health = 15
+ maxHealth = 15
+ melee_damage_lower = 1
+ melee_damage_upper = 2
+
+/mob/living/simple_mob/blob/spore/Initialize(mapload, var/obj/structure/blob/factory/my_factory)
+ if(istype(my_factory))
+ factory = my_factory
+ factory.spores += src
+ return ..()
+
+/mob/living/simple_mob/blob/spore/Destroy()
+ if(factory)
+ factory.spores -= src
+ factory = null
+ if(infested)
+ infested.forceMove(get_turf(src))
+ visible_message(span("warning", "\The [infested] falls to the ground as the blob spore bursts."))
+ infested = null
+ return ..()
+
+/mob/living/simple_mob/blob/spore/death(gibbed, deathmessage = "bursts!")
+ if(overmind)
+ overmind.blob_type.on_spore_death(src)
+ ..(gibbed, deathmessage)
+ qdel(src)
+
+/mob/living/simple_mob/blob/spore/update_icons()
+ ..() // This will cut our overlays.
+
+ if(overmind)
+ color = overmind.blob_type.complementary_color
+ glow_color = color
+ glow_toggle = TRUE
+ else
+ color = null
+ glow_color = null
+ glow_toggle = FALSE
+
+ if(is_infesting)
+ icon = infested.icon
+ copy_overlays(infested)
+ // overlays = infested.overlays
+ var/mutable_appearance/blob_head_overlay = mutable_appearance('icons/mob/blob.dmi', "blob_head")
+ if(overmind)
+ blob_head_overlay.color = overmind.blob_type.complementary_color
+ color = initial(color)//looks better.
+ // overlays += blob_head_overlay
+ add_overlay(blob_head_overlay, TRUE)
+
+/mob/living/simple_mob/blob/spore/handle_special()
+ ..()
+ if(can_infest && !is_infesting && isturf(loc))
+ for(var/mob/living/carbon/human/H in view(src,1))
+ if(H.stat != DEAD) // We want zombies.
+ continue
+ if(H.isSynthetic()) // Not philosophical zombies.
+ continue
+ infest(H)
+ break
+
+ if(factory && z != factory.z) // This is to prevent spores getting lost in space and making the factory useless.
+ qdel(src)
+
+/mob/living/simple_mob/blob/spore/proc/infest(mob/living/carbon/human/H)
+ is_infesting = TRUE
+ if(H.wear_suit)
+ var/obj/item/clothing/suit/A = H.wear_suit
+ if(A.armor && A.armor["melee"])
+ maxHealth += A.armor["melee"] //That zombie's got armor, I want armor!
+
+ maxHealth += 40
+ health = maxHealth
+ name = "Infested [H.real_name]" // Not using the Z word.
+ desc = "A parasitic organism attached to a deceased body, controlling it directly as if it were a puppet."
+ melee_damage_lower += 8 // 10 total.
+ melee_damage_upper += 11 // 15 total.
+ attacktext = list("claws")
+
+ H.forceMove(src)
+ infested = H
+
+ say_list = new /datum/say_list/infested()
+
+ update_icons()
+ visible_message(span("warning", "The corpse of [H.name] suddenly rises!"))
+
+/mob/living/simple_mob/blob/spore/GetIdCard()
+ if(infested) // If we've infested someone, use their ID.
+ return infested.GetIdCard()
+
+/mob/living/simple_mob/blob/spore/apply_bonus_melee_damage(A, damage_to_do)
+ var/helpers = 0
+ for(var/mob/living/simple_mob/blob/spore/S in view(1, src))
+ if(S == src) // Don't count ourselves.
+ continue
+ if(!IIsAlly(S)) // Only friendly spores make us stronger.
+ continue
+ // Friendly spores contribute 1/4th of their averaged attack power to our attack.
+ damage_to_do += ((S.melee_damage_lower + S.melee_damage_upper) / 2) / 4
+ helpers++
+
+ if(helpers)
+ to_chat(src, span("notice", "Your attack is assisted by [helpers] other spore\s."))
return damage_to_do
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/combat_drone.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/combat_drone.dm
index 8731a06764..8e5f6ef2a0 100644
--- a/code/modules/mob/living/simple_mob/subtypes/mechanical/combat_drone.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/combat_drone.dm
@@ -33,7 +33,7 @@
var/datum/effect/effect/system/ion_trail_follow/ion_trail = null
var/obj/item/shield_projector/shields = null
-/mob/living/simple_mob/mechanical/combat_drone/initialize()
+/mob/living/simple_mob/mechanical/combat_drone/Initialize()
ion_trail = new
ion_trail.set_up(src)
ion_trail.start()
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/golem.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/golem.dm
index cffa9cb134..a8b918fc71 100644
--- a/code/modules/mob/living/simple_mob/subtypes/mechanical/golem.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/golem.dm
@@ -1,152 +1,152 @@
-// The GOLEM is a spell-flinging synthetic.
-
-/mob/living/simple_mob/mechanical/technomancer_golem
- name = "unknown synthetic"
- desc = "A rather unusual looking synthetic."
- icon = 'icons/mob/mob.dmi'
- icon_state = "golem"
- health = 300
- maxHealth = 300
-
- faction = "golem"
-
- response_help = "pets"
- response_disarm = "pushes away"
- response_harm = "punches"
- harm_intent_damage = 3
- friendly = "hugs"
-
- melee_damage_lower = 30 // It has a built in esword.
- melee_damage_upper = 30
- attack_sound = 'sound/weapons/blade1.ogg'
- attacktext = list("slashed")
- melee_attack_delay = 0.5 SECONDS // Even has custom attack animations.
- ranged_attack_delay = 0.5 SECONDS
- special_attack_delay = 1 SECOND
-
- special_attack_min_range = 0
- special_attack_max_range = 7
-
- ai_holder_type = /datum/ai_holder/simple_mob/melee
-
- var/obj/item/weapon/technomancer_core/golem/core = null
- var/obj/item/weapon/spell/active_spell = null // Shield and ranged spells
- var/mob/living/master = null
- var/casting = FALSE // Used to ensure the correct animation is played. Testing if a spell exists won't always work as some spells delete themselves upon use.
-
- var/list/known_spells = list(
- "beam" = /obj/item/weapon/spell/projectile/beam,
- "chain lightning" = /obj/item/weapon/spell/projectile/chain_lightning,
- "force missile" = /obj/item/weapon/spell/projectile/force_missile,
- "ionic bolt" = /obj/item/weapon/spell/projectile/ionic_bolt,
- "lightning" = /obj/item/weapon/spell/projectile/lightning,
- "blink" = /obj/item/weapon/spell/blink,
- "dispel" = /obj/item/weapon/spell/dispel,
- "oxygenate" = /obj/item/weapon/spell/oxygenate,
- "mend life" = /obj/item/weapon/spell/modifier/mend_life,
- "mend synthetic" = /obj/item/weapon/spell/modifier/mend_synthetic,
- "mend organs" = /obj/item/weapon/spell/mend_organs,
- "purify" = /obj/item/weapon/spell/modifier/purify,
- "resurrect" = /obj/item/weapon/spell/resurrect,
- "passwall" = /obj/item/weapon/spell/passwall,
- "repel missiles" = /obj/item/weapon/spell/modifier/repel_missiles,
- "corona" = /obj/item/weapon/spell/modifier/corona,
- "haste" = /obj/item/weapon/spell/modifier/haste
- )
-
-/mob/living/simple_mob/mechanical/technomancer_golem/initialize()
- core = new(src)
- return ..()
-
-/mob/living/simple_mob/mechanical/technomancer_golem/Destroy()
- qdel(core)
- return ..()
-
-/mob/living/simple_mob/mechanical/technomancer_golem/unref_spell()
- active_spell = null
- return ..()
-
-/mob/living/simple_mob/mechanical/technomancer_golem/death()
- ..()
- visible_message("\The [src] disintegrates!")
- new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc)
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(3, 1, src)
- s.start()
- qdel(src)
-
-/mob/living/simple_mob/mechanical/technomancer_golem/place_spell_in_hand(var/path)
- if(!path || !ispath(path))
- return FALSE
- if(active_spell)
- qdel(active_spell)
-
- active_spell = new path(src)
-
-/mob/living/simple_mob/mechanical/technomancer_golem/verb/test_giving_spells()
- var/choice = input(usr, "What spell?", "Give spell") as null|anything in known_spells
- if(choice)
- place_spell_in_hand(known_spells[choice])
- else
- qdel(active_spell)
-
-/mob/living/simple_mob/mechanical/technomancer_golem/get_technomancer_core()
- return core
-
-/mob/living/simple_mob/mechanical/technomancer_golem/can_special_attack(atom/A)
- if(active_spell) // Don't bother checking everything else if no spell is ready.
- return ..()
- return FALSE
-
-/mob/living/simple_mob/mechanical/technomancer_golem/should_special_attack(atom/A)
- return instability < 50 // Don't kill ourselves by casting everything.
-
-
-/mob/living/simple_mob/mechanical/technomancer_golem/do_special_attack(atom/A)
- var/proximity = Adjacent(A)
- if(active_spell)
- if(proximity && active_spell.cast_methods & CAST_MELEE) // Use melee method if available and close enough.
- return active_spell.on_melee_cast(A, src)
- else if(active_spell.cast_methods & CAST_RANGED) // Otherwise use ranged if possible. Will also work for point-blank range.
- return active_spell.on_ranged_cast(A, src)
- return ..()
-
-/mob/living/simple_mob/mechanical/technomancer_golem/melee_pre_animation(atom/A)
- if(active_spell && active_spell.cast_methods & CAST_MELEE|CAST_RANGED) // If they're trying to melee-cast a spell, use the special animation instead.
- special_pre_animation(A)
- return
-
- flick("golem_pre_melee", src) // To force the animation to restart.
- icon_living = "golem_pre_melee" // The animation will hold after this point until melee_post_animation() gets called.
- icon_state = "golem_pre_melee"
- setClickCooldown(2)
-
-/mob/living/simple_mob/mechanical/technomancer_golem/melee_post_animation(atom/A)
- if(casting) // Some spells delete themselves when used, so we use a different variable set earlier instead.
- special_post_animation(A)
- return
-
- flick("golem_post_melee", src)
- icon_living = "golem"
- icon_state = "golem"
- setClickCooldown(6)
-
-/mob/living/simple_mob/mechanical/technomancer_golem/ranged_pre_animation(atom/A)
- flick("golem_pre_ranged", src)
- icon_living = "golem_pre_ranged"
- icon_state = "golem_pre_ranged"
- setClickCooldown(5)
-
-/mob/living/simple_mob/mechanical/technomancer_golem/ranged_post_animation(atom/A)
- flick("golem_post_ranged", src)
- icon_living = "golem"
- icon_state = "golem"
- setClickCooldown(5)
-
-/mob/living/simple_mob/mechanical/technomancer_golem/special_pre_animation(atom/A)
- casting = TRUE
- ranged_pre_animation(A) // Both have the same animation.
-
-/mob/living/simple_mob/mechanical/technomancer_golem/special_post_animation(atom/A)
- casting = FALSE
+// The GOLEM is a spell-flinging synthetic.
+
+/mob/living/simple_mob/mechanical/technomancer_golem
+ name = "unknown synthetic"
+ desc = "A rather unusual looking synthetic."
+ icon = 'icons/mob/mob.dmi'
+ icon_state = "golem"
+ health = 300
+ maxHealth = 300
+
+ faction = "golem"
+
+ response_help = "pets"
+ response_disarm = "pushes away"
+ response_harm = "punches"
+ harm_intent_damage = 3
+ friendly = "hugs"
+
+ melee_damage_lower = 30 // It has a built in esword.
+ melee_damage_upper = 30
+ attack_sound = 'sound/weapons/blade1.ogg'
+ attacktext = list("slashed")
+ melee_attack_delay = 0.5 SECONDS // Even has custom attack animations.
+ ranged_attack_delay = 0.5 SECONDS
+ special_attack_delay = 1 SECOND
+
+ special_attack_min_range = 0
+ special_attack_max_range = 7
+
+ ai_holder_type = /datum/ai_holder/simple_mob/melee
+
+ var/obj/item/weapon/technomancer_core/golem/core = null
+ var/obj/item/weapon/spell/active_spell = null // Shield and ranged spells
+ var/mob/living/master = null
+ var/casting = FALSE // Used to ensure the correct animation is played. Testing if a spell exists won't always work as some spells delete themselves upon use.
+
+ var/list/known_spells = list(
+ "beam" = /obj/item/weapon/spell/projectile/beam,
+ "chain lightning" = /obj/item/weapon/spell/projectile/chain_lightning,
+ "force missile" = /obj/item/weapon/spell/projectile/force_missile,
+ "ionic bolt" = /obj/item/weapon/spell/projectile/ionic_bolt,
+ "lightning" = /obj/item/weapon/spell/projectile/lightning,
+ "blink" = /obj/item/weapon/spell/blink,
+ "dispel" = /obj/item/weapon/spell/dispel,
+ "oxygenate" = /obj/item/weapon/spell/oxygenate,
+ "mend life" = /obj/item/weapon/spell/modifier/mend_life,
+ "mend synthetic" = /obj/item/weapon/spell/modifier/mend_synthetic,
+ "mend organs" = /obj/item/weapon/spell/mend_organs,
+ "purify" = /obj/item/weapon/spell/modifier/purify,
+ "resurrect" = /obj/item/weapon/spell/resurrect,
+ "passwall" = /obj/item/weapon/spell/passwall,
+ "repel missiles" = /obj/item/weapon/spell/modifier/repel_missiles,
+ "corona" = /obj/item/weapon/spell/modifier/corona,
+ "haste" = /obj/item/weapon/spell/modifier/haste
+ )
+
+/mob/living/simple_mob/mechanical/technomancer_golem/Initialize()
+ core = new(src)
+ return ..()
+
+/mob/living/simple_mob/mechanical/technomancer_golem/Destroy()
+ qdel(core)
+ return ..()
+
+/mob/living/simple_mob/mechanical/technomancer_golem/unref_spell()
+ active_spell = null
+ return ..()
+
+/mob/living/simple_mob/mechanical/technomancer_golem/death()
+ ..()
+ visible_message("\The [src] disintegrates!")
+ new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc)
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(3, 1, src)
+ s.start()
+ qdel(src)
+
+/mob/living/simple_mob/mechanical/technomancer_golem/place_spell_in_hand(var/path)
+ if(!path || !ispath(path))
+ return FALSE
+ if(active_spell)
+ qdel(active_spell)
+
+ active_spell = new path(src)
+
+/mob/living/simple_mob/mechanical/technomancer_golem/verb/test_giving_spells()
+ var/choice = input(usr, "What spell?", "Give spell") as null|anything in known_spells
+ if(choice)
+ place_spell_in_hand(known_spells[choice])
+ else
+ qdel(active_spell)
+
+/mob/living/simple_mob/mechanical/technomancer_golem/get_technomancer_core()
+ return core
+
+/mob/living/simple_mob/mechanical/technomancer_golem/can_special_attack(atom/A)
+ if(active_spell) // Don't bother checking everything else if no spell is ready.
+ return ..()
+ return FALSE
+
+/mob/living/simple_mob/mechanical/technomancer_golem/should_special_attack(atom/A)
+ return instability < 50 // Don't kill ourselves by casting everything.
+
+
+/mob/living/simple_mob/mechanical/technomancer_golem/do_special_attack(atom/A)
+ var/proximity = Adjacent(A)
+ if(active_spell)
+ if(proximity && active_spell.cast_methods & CAST_MELEE) // Use melee method if available and close enough.
+ return active_spell.on_melee_cast(A, src)
+ else if(active_spell.cast_methods & CAST_RANGED) // Otherwise use ranged if possible. Will also work for point-blank range.
+ return active_spell.on_ranged_cast(A, src)
+ return ..()
+
+/mob/living/simple_mob/mechanical/technomancer_golem/melee_pre_animation(atom/A)
+ if(active_spell && active_spell.cast_methods & CAST_MELEE|CAST_RANGED) // If they're trying to melee-cast a spell, use the special animation instead.
+ special_pre_animation(A)
+ return
+
+ flick("golem_pre_melee", src) // To force the animation to restart.
+ icon_living = "golem_pre_melee" // The animation will hold after this point until melee_post_animation() gets called.
+ icon_state = "golem_pre_melee"
+ setClickCooldown(2)
+
+/mob/living/simple_mob/mechanical/technomancer_golem/melee_post_animation(atom/A)
+ if(casting) // Some spells delete themselves when used, so we use a different variable set earlier instead.
+ special_post_animation(A)
+ return
+
+ flick("golem_post_melee", src)
+ icon_living = "golem"
+ icon_state = "golem"
+ setClickCooldown(6)
+
+/mob/living/simple_mob/mechanical/technomancer_golem/ranged_pre_animation(atom/A)
+ flick("golem_pre_ranged", src)
+ icon_living = "golem_pre_ranged"
+ icon_state = "golem_pre_ranged"
+ setClickCooldown(5)
+
+/mob/living/simple_mob/mechanical/technomancer_golem/ranged_post_animation(atom/A)
+ flick("golem_post_ranged", src)
+ icon_living = "golem"
+ icon_state = "golem"
+ setClickCooldown(5)
+
+/mob/living/simple_mob/mechanical/technomancer_golem/special_pre_animation(atom/A)
+ casting = TRUE
+ ranged_pre_animation(A) // Both have the same animation.
+
+/mob/living/simple_mob/mechanical/technomancer_golem/special_post_animation(atom/A)
+ casting = FALSE
ranged_post_animation(A)
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/support.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/support.dm
index 360686d591..243a67e4f5 100644
--- a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/support.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/support.dm
@@ -46,7 +46,7 @@
// Variant that automatically commands nearby allies to follow it when created.
// Useful to avoid having to manually set follow to a lot of hivebots that are gonna die in the next minute anyways.
-/mob/living/simple_mob/mechanical/hivebot/support/commander/autofollow/initialize()
+/mob/living/simple_mob/mechanical/hivebot/support/commander/autofollow/Initialize()
for(var/mob/living/L in hearers(7, src))
if(!L.ai_holder)
continue
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm
index c20d623c53..df94a4f904 100644
--- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm
@@ -1,53 +1,53 @@
-// Durands are slow, tanky, beefy, and hit really hard.
-// They can also root themselves to become even tankier.
-// The AI doesn't do this currently.
-
-/mob/living/simple_mob/mechanical/mecha/combat/durand
- name = "durand"
- desc = "An aging combat exosuit utilized by many corporations. It was originally developed to fight in the First Contact War."
- icon_state = "durand"
- movement_cooldown = 10
- wreckage = /obj/structure/loot_pile/mecha/durand
-
- maxHealth = 400
- deflect_chance = 20
- armor = list(
- "melee" = 50,
- "bullet" = 35,
- "laser" = 15,
- "energy" = 10,
- "bomb" = 20,
- "bio" = 100,
- "rad" = 100
- )
- melee_damage_lower = 40
- melee_damage_upper = 40
- base_attack_cooldown = 2 SECONDS
- projectiletype = /obj/item/projectile/beam/heavylaser
-
- var/defense_mode = FALSE
- var/defense_deflect = 35
-
-/mob/living/simple_mob/mechanical/mecha/combat/durand/proc/set_defense_mode(new_mode)
- defense_mode = new_mode
- deflect_chance = defense_mode ? defense_deflect : initial(deflect_chance)
- to_chat(src, span("notice", "You [defense_mode ? "en" : "dis"]able defense mode."))
-
-/mob/living/simple_mob/mechanical/mecha/combat/durand/SelfMove(turf/n, direct)
- if(defense_mode)
- to_chat(src, span("warning", "You are in defense mode, you cannot move."))
- return FALSE
- return ..()
-
-// So players can toggle it too.
-/mob/living/simple_mob/mechanical/mecha/combat/durand/verb/toggle_defense_mode()
- set name = "Toggle Defense Mode"
- set desc = "Toggles a special mode which makes you immobile and much more resilient."
- set category = "Abilities"
-
- set_defense_mode(!defense_mode)
-
-// Variant that starts in defense mode, perhaps for PoIs.
-/mob/living/simple_mob/mechanical/mecha/combat/durand/defensive/initialize()
- set_defense_mode(TRUE)
- return ..()
+// Durands are slow, tanky, beefy, and hit really hard.
+// They can also root themselves to become even tankier.
+// The AI doesn't do this currently.
+
+/mob/living/simple_mob/mechanical/mecha/combat/durand
+ name = "durand"
+ desc = "An aging combat exosuit utilized by many corporations. It was originally developed to fight in the First Contact War."
+ icon_state = "durand"
+ movement_cooldown = 10
+ wreckage = /obj/structure/loot_pile/mecha/durand
+
+ maxHealth = 400
+ deflect_chance = 20
+ armor = list(
+ "melee" = 50,
+ "bullet" = 35,
+ "laser" = 15,
+ "energy" = 10,
+ "bomb" = 20,
+ "bio" = 100,
+ "rad" = 100
+ )
+ melee_damage_lower = 40
+ melee_damage_upper = 40
+ base_attack_cooldown = 2 SECONDS
+ projectiletype = /obj/item/projectile/beam/heavylaser
+
+ var/defense_mode = FALSE
+ var/defense_deflect = 35
+
+/mob/living/simple_mob/mechanical/mecha/combat/durand/proc/set_defense_mode(new_mode)
+ defense_mode = new_mode
+ deflect_chance = defense_mode ? defense_deflect : initial(deflect_chance)
+ to_chat(src, span("notice", "You [defense_mode ? "en" : "dis"]able defense mode."))
+
+/mob/living/simple_mob/mechanical/mecha/combat/durand/SelfMove(turf/n, direct)
+ if(defense_mode)
+ to_chat(src, span("warning", "You are in defense mode, you cannot move."))
+ return FALSE
+ return ..()
+
+// So players can toggle it too.
+/mob/living/simple_mob/mechanical/mecha/combat/durand/verb/toggle_defense_mode()
+ set name = "Toggle Defense Mode"
+ set desc = "Toggles a special mode which makes you immobile and much more resilient."
+ set category = "Abilities"
+
+ set_defense_mode(!defense_mode)
+
+// Variant that starts in defense mode, perhaps for PoIs.
+/mob/living/simple_mob/mechanical/mecha/combat/durand/defensive/Initialize()
+ set_defense_mode(TRUE)
+ return ..()
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/hoverpod.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/hoverpod.dm
index 29f102b9b9..9256fcd15a 100644
--- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/hoverpod.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/hoverpod.dm
@@ -1,27 +1,27 @@
-// Ranged, and capable of flight.
-/mob/living/simple_mob/mechanical/mecha/hoverpod
- name = "hover pod"
- desc = "Stubby and round, this space-capable craft is an ancient favorite. It has a jury-rigged welder-laser."
- icon_state = "engineering_pod"
- movement_sound = 'sound/machines/hiss.ogg'
- wreckage = /obj/structure/loot_pile/mecha/hoverpod
-
- maxHealth = 150
- hovering = TRUE // Can fly.
-
- projectiletype = /obj/item/projectile/beam
- base_attack_cooldown = 2 SECONDS
-
- var/datum/effect/effect/system/ion_trail_follow/ion_trail
-
-/mob/living/simple_mob/mechanical/mecha/hoverpod/manned
- pilot_type = /mob/living/simple_mob/humanoid/merc/ranged
-
-/mob/living/simple_mob/mechanical/mecha/hoverpod/initialize()
- ion_trail = new /datum/effect/effect/system/ion_trail_follow()
- ion_trail.set_up(src)
- ion_trail.start()
- return ..()
-
-/mob/living/simple_mob/mechanical/mecha/hoverpod/Process_Spacemove(var/check_drift = 0)
+// Ranged, and capable of flight.
+/mob/living/simple_mob/mechanical/mecha/hoverpod
+ name = "hover pod"
+ desc = "Stubby and round, this space-capable craft is an ancient favorite. It has a jury-rigged welder-laser."
+ icon_state = "engineering_pod"
+ movement_sound = 'sound/machines/hiss.ogg'
+ wreckage = /obj/structure/loot_pile/mecha/hoverpod
+
+ maxHealth = 150
+ hovering = TRUE // Can fly.
+
+ projectiletype = /obj/item/projectile/beam
+ base_attack_cooldown = 2 SECONDS
+
+ var/datum/effect/effect/system/ion_trail_follow/ion_trail
+
+/mob/living/simple_mob/mechanical/mecha/hoverpod/manned
+ pilot_type = /mob/living/simple_mob/humanoid/merc/ranged
+
+/mob/living/simple_mob/mechanical/mecha/hoverpod/Initialize()
+ ion_trail = new /datum/effect/effect/system/ion_trail_follow()
+ ion_trail.set_up(src)
+ ion_trail.start()
+ return ..()
+
+/mob/living/simple_mob/mechanical/mecha/hoverpod/Process_Spacemove(var/check_drift = 0)
return TRUE
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm
index 7aa24bdf74..d29981726d 100644
--- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm
@@ -1,141 +1,141 @@
-// Mecha simple_mobs are essentially fake mechs. Generally tough and scary to fight.
-// By default, they're automatically piloted by some kind of drone AI. They can be set to be "piloted" instead with a var.
-// Tries to be as similar to the real deal as possible.
-
-/mob/living/simple_mob/mechanical/mecha
- name = "mecha"
- desc = "A big stompy mech!"
- icon = 'icons/mecha/mecha.dmi'
-
- faction = "syndicate"
- movement_cooldown = 5
- movement_sound = "mechstep" // This gets fed into playsound(), which can also take strings as a 'group' of sound files.
- turn_sound = 'sound/mecha/mechturn.ogg'
- maxHealth = 300
- mob_size = MOB_LARGE
-
- // Very close to the base 'damage_absorption' var on the base mecha class.
- armor = list(
- "melee" = 20,
- "bullet" = 10,
- "laser" = 0,
- "energy" = 0,
- "bomb" = 0,
- "bio" = 100,
- "rad" = 100
- )
-
- response_help = "taps on"
- response_disarm = "knocks on"
- response_harm = "uselessly hits"
- harm_intent_damage = 0
-
- ai_holder_type = /datum/ai_holder/simple_mob/melee
- say_list_type = /datum/say_list/malf_drone
-
- var/datum/effect/effect/system/spark_spread/sparks
- var/wreckage = /obj/effect/decal/mecha_wreckage/gygax/dark
- var/pilot_type = null // Set to spawn a pilot when destroyed. Setting this also makes the mecha vulnerable to things that affect sentient minds.
- var/deflect_chance = 10 // Chance to outright stop an attack, just like a normal exosuit.
- var/has_repair_droid = FALSE // If true, heals 2 damage every tick and gets a repair droid overlay.
-
-
-/mob/living/simple_mob/mechanical/mecha/initialize()
- sparks = new (src)
- sparks.set_up(3, 1, src)
- sparks.attach(src)
-
- if(!pilot_type)
- name = "autonomous [initial(name)]"
- desc = "[initial(desc)] It appears to be piloted by a drone intelligence."
- else
- say_list_type = /datum/say_list/merc
-
- if(has_repair_droid)
- update_icon()
-
- return ..()
-
-/mob/living/simple_mob/mechanical/mecha/Destroy()
- qdel(sparks)
- return ..()
-
-/mob/living/simple_mob/mechanical/mecha/death()
- ..(0,"explodes!") // Do everything else first.
-
- // Make the exploding more convincing with an actual explosion and some sparks.
- sparks.start()
- explosion(get_turf(src), 0, 0, 1, 3)
-
- // 'Eject' our pilot, if one exists.
- if(pilot_type)
- var/mob/living/L = new pilot_type(loc)
- L.faction = src.faction
-
- new wreckage(loc) // Leave some wreckage.
-
- qdel(src) // Then delete us since we don't actually have a body.
-
-/mob/living/simple_mob/mechanical/mecha/handle_special()
- if(has_repair_droid)
- adjustBruteLoss(-2)
- adjustFireLoss(-2)
- adjustToxLoss(-2)
- adjustOxyLoss(-2)
- adjustCloneLoss(-2)
- ..()
-
-/mob/living/simple_mob/mechanical/mecha/update_icon()
- ..() // Cuts everything else, so do that first.
- if(has_repair_droid)
- add_overlay(image(icon = 'icons/mecha/mecha_equipment.dmi', icon_state = "repair_droid"))
-
-/mob/living/simple_mob/mechanical/mecha/bullet_act()
- . = ..()
- sparks.start()
-
-/mob/living/simple_mob/mechanical/mecha/speech_bubble_appearance()
- return pilot_type ? "" : ..()
-
-// Piloted mechs are controlled by (presumably) something humanoid so they are vulnerable to certain things.
-/mob/living/simple_mob/mechanical/mecha/is_sentient()
- return pilot_type ? TRUE : FALSE
-
-/*
-// Real mechs can't turn and run at the same time. This tries to simulate that.
-// Commented out because the AI can't handle it sadly.
-/mob/living/simple_mob/mechanical/mecha/SelfMove(turf/n, direct)
- if(direct != dir)
- set_dir(direct)
- return FALSE // We didn't actually move, and returning FALSE means the mob can try to actually move almost immediately and not have to wait the full movement cooldown.
- return ..()
-*/
-
-/mob/living/simple_mob/mechanical/mecha/bullet_act(obj/item/projectile/P)
- if(prob(deflect_chance))
- visible_message(span("warning", "\The [P] is deflected by \the [src]'s armor!"))
- deflect_sprite()
- return 0
- return ..()
-
-/mob/living/simple_mob/mechanical/mecha/proc/deflect_sprite()
- var/image/deflect_image = image('icons/effects/effects.dmi', "deflect_static")
- add_overlay(deflect_image)
- sleep(1 SECOND)
- cut_overlay(deflect_image)
- qdel(deflect_image)
-// flick_overlay_view(deflect_image, src, duration = 1 SECOND, gc_after = TRUE)
-
-/mob/living/simple_mob/mechanical/mecha/attackby(obj/item/I, mob/user)
- if(prob(deflect_chance))
- visible_message(span("warning", "\The [user]'s [I] bounces off \the [src]'s armor!"))
- deflect_sprite()
- user.setClickCooldown(user.get_attack_speed(I))
- return
- ..()
-
-/mob/living/simple_mob/mechanical/mecha/ex_act(severity)
- if(prob(deflect_chance))
- severity++ // This somewhat misleadingly makes it less severe.
- deflect_sprite()
+// Mecha simple_mobs are essentially fake mechs. Generally tough and scary to fight.
+// By default, they're automatically piloted by some kind of drone AI. They can be set to be "piloted" instead with a var.
+// Tries to be as similar to the real deal as possible.
+
+/mob/living/simple_mob/mechanical/mecha
+ name = "mecha"
+ desc = "A big stompy mech!"
+ icon = 'icons/mecha/mecha.dmi'
+
+ faction = "syndicate"
+ movement_cooldown = 5
+ movement_sound = "mechstep" // This gets fed into playsound(), which can also take strings as a 'group' of sound files.
+ turn_sound = 'sound/mecha/mechturn.ogg'
+ maxHealth = 300
+ mob_size = MOB_LARGE
+
+ // Very close to the base 'damage_absorption' var on the base mecha class.
+ armor = list(
+ "melee" = 20,
+ "bullet" = 10,
+ "laser" = 0,
+ "energy" = 0,
+ "bomb" = 0,
+ "bio" = 100,
+ "rad" = 100
+ )
+
+ response_help = "taps on"
+ response_disarm = "knocks on"
+ response_harm = "uselessly hits"
+ harm_intent_damage = 0
+
+ ai_holder_type = /datum/ai_holder/simple_mob/melee
+ say_list_type = /datum/say_list/malf_drone
+
+ var/datum/effect/effect/system/spark_spread/sparks
+ var/wreckage = /obj/effect/decal/mecha_wreckage/gygax/dark
+ var/pilot_type = null // Set to spawn a pilot when destroyed. Setting this also makes the mecha vulnerable to things that affect sentient minds.
+ var/deflect_chance = 10 // Chance to outright stop an attack, just like a normal exosuit.
+ var/has_repair_droid = FALSE // If true, heals 2 damage every tick and gets a repair droid overlay.
+
+
+/mob/living/simple_mob/mechanical/mecha/Initialize()
+ sparks = new (src)
+ sparks.set_up(3, 1, src)
+ sparks.attach(src)
+
+ if(!pilot_type)
+ name = "autonomous [initial(name)]"
+ desc = "[initial(desc)] It appears to be piloted by a drone intelligence."
+ else
+ say_list_type = /datum/say_list/merc
+
+ if(has_repair_droid)
+ update_icon()
+
+ return ..()
+
+/mob/living/simple_mob/mechanical/mecha/Destroy()
+ qdel(sparks)
+ return ..()
+
+/mob/living/simple_mob/mechanical/mecha/death()
+ ..(0,"explodes!") // Do everything else first.
+
+ // Make the exploding more convincing with an actual explosion and some sparks.
+ sparks.start()
+ explosion(get_turf(src), 0, 0, 1, 3)
+
+ // 'Eject' our pilot, if one exists.
+ if(pilot_type)
+ var/mob/living/L = new pilot_type(loc)
+ L.faction = src.faction
+
+ new wreckage(loc) // Leave some wreckage.
+
+ qdel(src) // Then delete us since we don't actually have a body.
+
+/mob/living/simple_mob/mechanical/mecha/handle_special()
+ if(has_repair_droid)
+ adjustBruteLoss(-2)
+ adjustFireLoss(-2)
+ adjustToxLoss(-2)
+ adjustOxyLoss(-2)
+ adjustCloneLoss(-2)
+ ..()
+
+/mob/living/simple_mob/mechanical/mecha/update_icon()
+ ..() // Cuts everything else, so do that first.
+ if(has_repair_droid)
+ add_overlay(image(icon = 'icons/mecha/mecha_equipment.dmi', icon_state = "repair_droid"))
+
+/mob/living/simple_mob/mechanical/mecha/bullet_act()
+ . = ..()
+ sparks.start()
+
+/mob/living/simple_mob/mechanical/mecha/speech_bubble_appearance()
+ return pilot_type ? "" : ..()
+
+// Piloted mechs are controlled by (presumably) something humanoid so they are vulnerable to certain things.
+/mob/living/simple_mob/mechanical/mecha/is_sentient()
+ return pilot_type ? TRUE : FALSE
+
+/*
+// Real mechs can't turn and run at the same time. This tries to simulate that.
+// Commented out because the AI can't handle it sadly.
+/mob/living/simple_mob/mechanical/mecha/SelfMove(turf/n, direct)
+ if(direct != dir)
+ set_dir(direct)
+ return FALSE // We didn't actually move, and returning FALSE means the mob can try to actually move almost immediately and not have to wait the full movement cooldown.
+ return ..()
+*/
+
+/mob/living/simple_mob/mechanical/mecha/bullet_act(obj/item/projectile/P)
+ if(prob(deflect_chance))
+ visible_message(span("warning", "\The [P] is deflected by \the [src]'s armor!"))
+ deflect_sprite()
+ return 0
+ return ..()
+
+/mob/living/simple_mob/mechanical/mecha/proc/deflect_sprite()
+ var/image/deflect_image = image('icons/effects/effects.dmi', "deflect_static")
+ add_overlay(deflect_image)
+ sleep(1 SECOND)
+ cut_overlay(deflect_image)
+ qdel(deflect_image)
+// flick_overlay_view(deflect_image, src, duration = 1 SECOND, gc_after = TRUE)
+
+/mob/living/simple_mob/mechanical/mecha/attackby(obj/item/I, mob/user)
+ if(prob(deflect_chance))
+ visible_message(span("warning", "\The [user]'s [I] bounces off \the [src]'s armor!"))
+ deflect_sprite()
+ user.setClickCooldown(user.get_attack_speed(I))
+ return
+ ..()
+
+/mob/living/simple_mob/mechanical/mecha/ex_act(severity)
+ if(prob(deflect_chance))
+ severity++ // This somewhat misleadingly makes it less severe.
+ deflect_sprite()
..(severity)
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/slime/slime.dm b/code/modules/mob/living/simple_mob/subtypes/slime/slime.dm
index dd756d267f..cbb0df1a29 100644
--- a/code/modules/mob/living/simple_mob/subtypes/slime/slime.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/slime/slime.dm
@@ -1,216 +1,216 @@
-// The top-level slime defines. Xenobio slimes and feral slimes will inherit from this.
-
-/mob/living/simple_mob/slime
- name = "slime"
- desc = "It's a slime."
- tt_desc = "A Macrolimbus vulgaris"
- icon = 'icons/mob/slime2.dmi'
- icon_state = "slime baby"
- icon_living = "slime baby"
- icon_dead = "slime baby dead"
- var/shiny = FALSE // If true, will add a 'shiny' overlay.
- var/icon_state_override = null // Used for special slime appearances like the rainbow slime.
- color = "#CACACA"
- glow_range = 3
- glow_intensity = 2
- gender = NEUTER
-
- faction = "slime" // Note that slimes are hostile to other slimes of different color regardless of faction (unless Unified).
- maxHealth = 150
- movement_cooldown = 0
- pass_flags = PASSTABLE
- makes_dirt = FALSE // Goop
- mob_class = MOB_CLASS_SLIME
-
- response_help = "pets"
-
- // Atmos stuff.
- minbodytemp = T0C-30
- heat_damage_per_tick = 0
- cold_damage_per_tick = 40
-
- min_oxy = 0
- max_oxy = 0
- min_tox = 0
- max_tox = 0
- min_co2 = 0
- max_co2 = 0
- min_n2 = 0
- max_n2 = 0
- unsuitable_atoms_damage = 0
- shock_resist = 0.5 // Slimes are resistant to electricity, and it actually charges them.
- taser_kill = FALSE
- water_resist = 0 // Slimes are very weak to water.
-
- melee_damage_lower = 10
- melee_damage_upper = 15
- base_attack_cooldown = 10 // One attack a second.
- attack_sound = 'sound/weapons/bite.ogg'
- attacktext = list("glomped")
- speak_emote = list("chirps")
- friendly = list("pokes")
-
- ai_holder_type = /datum/ai_holder/simple_mob/melee
- say_list_type = /datum/say_list/slime
-
- var/cores = 1 // How many cores you get when placed in a Processor.
- var/obj/item/clothing/head/hat = null // The hat the slime may be wearing.
- var/slime_color = "grey" // Used for updating the name and for slime color-ism.
- var/unity = FALSE // If true, slimes will consider other colors as their own. Other slimes will see this slime as the same color as well.
- var/coretype = /obj/item/slime_extract/grey // What core is inside the slime, and what you get from the processor.
- var/reagent_injected = null // Some slimes inject reagents on attack. This tells the game what reagent to use.
- var/injection_amount = 5 // This determines how much.
- var/mood = ":3" // Icon to use to display 'mood', as an overlay.
-
- can_enter_vent_with = list(/obj/item/clothing/head)
-
-/datum/say_list/slime
- speak = list("Blorp...", "Blop...")
- emote_see = list("bounces", "jiggles", "sways")
- emote_hear = list("squishes")
-
-/mob/living/simple_mob/slime/initialize()
- verbs += /mob/living/proc/ventcrawl
- update_mood()
- glow_color = color
- handle_light()
- update_icon()
- return ..()
-
-/mob/living/simple_mob/slime/Destroy()
- if(hat)
- drop_hat()
- return ..()
-
-/mob/living/simple_mob/slime/death()
- // Make dead slimes stop glowing.
- glow_toggle = FALSE
- handle_light()
- ..()
-
-/mob/living/simple_mob/slime/revive()
- // Make revived slimes resume glowing.
- glow_toggle = initial(glow_toggle)
- handle_light()
- ..()
-
-/mob/living/simple_mob/slime/update_icon()
- ..() // Do the regular stuff first.
-
- if(stat != DEAD)
- // General slime shine.
- var/image/I = image(icon, src, "slime light")
- I.appearance_flags = RESET_COLOR
- add_overlay(I)
-
- // 'Shiny' overlay, for gemstone-slimes.
- if(shiny)
- I = image(icon, src, "slime shiny")
- I.appearance_flags = RESET_COLOR
- add_overlay(I)
-
- // Mood overlay.
- I = image(icon, src, "aslime-[mood]")
- I.appearance_flags = RESET_COLOR
- add_overlay(I)
-
- // Hat simulator.
- if(hat)
- var/hat_state = hat.item_state ? hat.item_state : hat.icon_state
- var/image/I = image('icons/mob/head.dmi', src, hat_state)
- I.pixel_y = -7 // Slimes are small.
- I.appearance_flags = RESET_COLOR
- add_overlay(I)
-
-// Controls the 'mood' overlay. Overrided in subtypes for specific behaviour.
-/mob/living/simple_mob/slime/proc/update_mood()
- mood = "feral" // This is to avoid another override in the /feral subtype.
-
-/mob/living/simple_mob/slime/proc/unify()
- unity = TRUE
-
-// Interface override, because slimes are supposed to attack other slimes of different color regardless of faction
-// (unless Unified, of course).
-/mob/living/simple_mob/slime/IIsAlly(mob/living/L)
- . = ..()
- if(.) // Need to do an additional check if its another slime.
- if(istype(L, /mob/living/simple_mob/slime))
- var/mob/living/simple_mob/slime/S = L
- if(S.slime_color != src.slime_color)
- if(S.unity || src.unity)
- return TRUE
- return FALSE
- // The other stuff was already checked in parent proc, and the . variable will implicitly return the correct value.
-
-// Slimes regenerate passively.
-/mob/living/simple_mob/slime/handle_special()
- adjustOxyLoss(-1)
- adjustToxLoss(-1)
- adjustFireLoss(-1)
- adjustCloneLoss(-1)
- adjustBruteLoss(-1)
-
-// Clicked on by empty hand.
-/mob/living/simple_mob/slime/attack_hand(mob/living/L)
- if(L.a_intent == I_GRAB && hat)
- remove_hat(L)
- else
- ..()
-
-// Clicked on while holding an object.
-/mob/living/simple_mob/slime/attackby(obj/item/I, mob/user)
- if(istype(I, /obj/item/clothing/head)) // Handle hat simulator.
- give_hat(I, user)
- return
-
- // Otherwise they're probably fighting the slime.
- if(prob(25))
- visible_message(span("warning", "\The [user]'s [I] passes right through \the [src]!"))
- user.setClickCooldown(user.get_attack_speed(I))
- return
- ..()
-
-// Called when hit with an active slimebaton (or xeno taser).
-// Subtypes react differently.
-/mob/living/simple_mob/slime/proc/slimebatoned(mob/living/user, amount)
- return
-
-// Hat simulator
-/mob/living/simple_mob/slime/proc/give_hat(var/obj/item/clothing/head/new_hat, var/mob/living/user)
- if(!istype(new_hat))
- to_chat(user, span("warning", "\The [new_hat] isn't a hat."))
- return
- if(hat)
- to_chat(user, span("warning", "\The [src] is already wearing \a [hat]."))
- return
- else
- user.drop_item(new_hat)
- hat = new_hat
- new_hat.forceMove(src)
- to_chat(user, span("notice", "You place \a [new_hat] on \the [src]. How adorable!"))
- update_icon()
- return
-
-/mob/living/simple_mob/slime/proc/remove_hat(var/mob/living/user)
- if(!hat)
- to_chat(user, "\The [src] doesn't have a hat to remove.")
- else
- hat.forceMove(get_turf(src))
- user.put_in_hands(hat)
- to_chat(user, "You take away \the [src]'s [hat.name]. How mean.")
- hat = null
- update_icon()
-
-/mob/living/simple_mob/slime/proc/drop_hat()
- if(!hat)
- return
- hat.forceMove(get_turf(src))
- hat = null
- update_icon()
-
-/mob/living/simple_mob/slime/speech_bubble_appearance()
- return "slime"
-
-/mob/living/simple_mob/slime/proc/squish()
- playsound(src.loc, 'sound/effects/slime_squish.ogg', 50, 0)
+// The top-level slime defines. Xenobio slimes and feral slimes will inherit from this.
+
+/mob/living/simple_mob/slime
+ name = "slime"
+ desc = "It's a slime."
+ tt_desc = "A Macrolimbus vulgaris"
+ icon = 'icons/mob/slime2.dmi'
+ icon_state = "slime baby"
+ icon_living = "slime baby"
+ icon_dead = "slime baby dead"
+ var/shiny = FALSE // If true, will add a 'shiny' overlay.
+ var/icon_state_override = null // Used for special slime appearances like the rainbow slime.
+ color = "#CACACA"
+ glow_range = 3
+ glow_intensity = 2
+ gender = NEUTER
+
+ faction = "slime" // Note that slimes are hostile to other slimes of different color regardless of faction (unless Unified).
+ maxHealth = 150
+ movement_cooldown = 0
+ pass_flags = PASSTABLE
+ makes_dirt = FALSE // Goop
+ mob_class = MOB_CLASS_SLIME
+
+ response_help = "pets"
+
+ // Atmos stuff.
+ minbodytemp = T0C-30
+ heat_damage_per_tick = 0
+ cold_damage_per_tick = 40
+
+ min_oxy = 0
+ max_oxy = 0
+ min_tox = 0
+ max_tox = 0
+ min_co2 = 0
+ max_co2 = 0
+ min_n2 = 0
+ max_n2 = 0
+ unsuitable_atoms_damage = 0
+ shock_resist = 0.5 // Slimes are resistant to electricity, and it actually charges them.
+ taser_kill = FALSE
+ water_resist = 0 // Slimes are very weak to water.
+
+ melee_damage_lower = 10
+ melee_damage_upper = 15
+ base_attack_cooldown = 10 // One attack a second.
+ attack_sound = 'sound/weapons/bite.ogg'
+ attacktext = list("glomped")
+ speak_emote = list("chirps")
+ friendly = list("pokes")
+
+ ai_holder_type = /datum/ai_holder/simple_mob/melee
+ say_list_type = /datum/say_list/slime
+
+ var/cores = 1 // How many cores you get when placed in a Processor.
+ var/obj/item/clothing/head/hat = null // The hat the slime may be wearing.
+ var/slime_color = "grey" // Used for updating the name and for slime color-ism.
+ var/unity = FALSE // If true, slimes will consider other colors as their own. Other slimes will see this slime as the same color as well.
+ var/coretype = /obj/item/slime_extract/grey // What core is inside the slime, and what you get from the processor.
+ var/reagent_injected = null // Some slimes inject reagents on attack. This tells the game what reagent to use.
+ var/injection_amount = 5 // This determines how much.
+ var/mood = ":3" // Icon to use to display 'mood', as an overlay.
+
+ can_enter_vent_with = list(/obj/item/clothing/head)
+
+/datum/say_list/slime
+ speak = list("Blorp...", "Blop...")
+ emote_see = list("bounces", "jiggles", "sways")
+ emote_hear = list("squishes")
+
+/mob/living/simple_mob/slime/Initialize()
+ verbs += /mob/living/proc/ventcrawl
+ update_mood()
+ glow_color = color
+ handle_light()
+ update_icon()
+ return ..()
+
+/mob/living/simple_mob/slime/Destroy()
+ if(hat)
+ drop_hat()
+ return ..()
+
+/mob/living/simple_mob/slime/death()
+ // Make dead slimes stop glowing.
+ glow_toggle = FALSE
+ handle_light()
+ ..()
+
+/mob/living/simple_mob/slime/revive()
+ // Make revived slimes resume glowing.
+ glow_toggle = initial(glow_toggle)
+ handle_light()
+ ..()
+
+/mob/living/simple_mob/slime/update_icon()
+ ..() // Do the regular stuff first.
+
+ if(stat != DEAD)
+ // General slime shine.
+ var/image/I = image(icon, src, "slime light")
+ I.appearance_flags = RESET_COLOR
+ add_overlay(I)
+
+ // 'Shiny' overlay, for gemstone-slimes.
+ if(shiny)
+ I = image(icon, src, "slime shiny")
+ I.appearance_flags = RESET_COLOR
+ add_overlay(I)
+
+ // Mood overlay.
+ I = image(icon, src, "aslime-[mood]")
+ I.appearance_flags = RESET_COLOR
+ add_overlay(I)
+
+ // Hat simulator.
+ if(hat)
+ var/hat_state = hat.item_state ? hat.item_state : hat.icon_state
+ var/image/I = image('icons/mob/head.dmi', src, hat_state)
+ I.pixel_y = -7 // Slimes are small.
+ I.appearance_flags = RESET_COLOR
+ add_overlay(I)
+
+// Controls the 'mood' overlay. Overrided in subtypes for specific behaviour.
+/mob/living/simple_mob/slime/proc/update_mood()
+ mood = "feral" // This is to avoid another override in the /feral subtype.
+
+/mob/living/simple_mob/slime/proc/unify()
+ unity = TRUE
+
+// Interface override, because slimes are supposed to attack other slimes of different color regardless of faction
+// (unless Unified, of course).
+/mob/living/simple_mob/slime/IIsAlly(mob/living/L)
+ . = ..()
+ if(.) // Need to do an additional check if its another slime.
+ if(istype(L, /mob/living/simple_mob/slime))
+ var/mob/living/simple_mob/slime/S = L
+ if(S.slime_color != src.slime_color)
+ if(S.unity || src.unity)
+ return TRUE
+ return FALSE
+ // The other stuff was already checked in parent proc, and the . variable will implicitly return the correct value.
+
+// Slimes regenerate passively.
+/mob/living/simple_mob/slime/handle_special()
+ adjustOxyLoss(-1)
+ adjustToxLoss(-1)
+ adjustFireLoss(-1)
+ adjustCloneLoss(-1)
+ adjustBruteLoss(-1)
+
+// Clicked on by empty hand.
+/mob/living/simple_mob/slime/attack_hand(mob/living/L)
+ if(L.a_intent == I_GRAB && hat)
+ remove_hat(L)
+ else
+ ..()
+
+// Clicked on while holding an object.
+/mob/living/simple_mob/slime/attackby(obj/item/I, mob/user)
+ if(istype(I, /obj/item/clothing/head)) // Handle hat simulator.
+ give_hat(I, user)
+ return
+
+ // Otherwise they're probably fighting the slime.
+ if(prob(25))
+ visible_message(span("warning", "\The [user]'s [I] passes right through \the [src]!"))
+ user.setClickCooldown(user.get_attack_speed(I))
+ return
+ ..()
+
+// Called when hit with an active slimebaton (or xeno taser).
+// Subtypes react differently.
+/mob/living/simple_mob/slime/proc/slimebatoned(mob/living/user, amount)
+ return
+
+// Hat simulator
+/mob/living/simple_mob/slime/proc/give_hat(var/obj/item/clothing/head/new_hat, var/mob/living/user)
+ if(!istype(new_hat))
+ to_chat(user, span("warning", "\The [new_hat] isn't a hat."))
+ return
+ if(hat)
+ to_chat(user, span("warning", "\The [src] is already wearing \a [hat]."))
+ return
+ else
+ user.drop_item(new_hat)
+ hat = new_hat
+ new_hat.forceMove(src)
+ to_chat(user, span("notice", "You place \a [new_hat] on \the [src]. How adorable!"))
+ update_icon()
+ return
+
+/mob/living/simple_mob/slime/proc/remove_hat(var/mob/living/user)
+ if(!hat)
+ to_chat(user, "\The [src] doesn't have a hat to remove.")
+ else
+ hat.forceMove(get_turf(src))
+ user.put_in_hands(hat)
+ to_chat(user, "You take away \the [src]'s [hat.name]. How mean.")
+ hat = null
+ update_icon()
+
+/mob/living/simple_mob/slime/proc/drop_hat()
+ if(!hat)
+ return
+ hat.forceMove(get_turf(src))
+ hat = null
+ update_icon()
+
+/mob/living/simple_mob/slime/speech_bubble_appearance()
+ return "slime"
+
+/mob/living/simple_mob/slime/proc/squish()
+ playsound(src.loc, 'sound/effects/slime_squish.ogg', 50, 0)
visible_message("\The [src] squishes!")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/subtypes.dm b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/subtypes.dm
index 03cd14eb3a..cd8c840d1f 100644
--- a/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/subtypes.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/subtypes.dm
@@ -1,784 +1,784 @@
-// Here are where all the other colors of slime live.
-// They will generally fight each other if not Unified, meaning the xenobiologist has to seperate them.
-
-// Tier 1.
-
-/mob/living/simple_mob/slime/xenobio/purple
- desc = "This slime is rather toxic to handle, as it is poisonous."
- color = "#CC23FF"
- slime_color = "purple"
- coretype = /obj/item/slime_extract/purple
- reagent_injected = "toxin"
-
- description_info = "This slime spreads a toxin when it attacks. A biosuit or other thick armor can protect from the toxic attack."
- player_msg = "You inject a harmful toxin when attacking."
-
- slime_mutation = list(
- /mob/living/simple_mob/slime/xenobio/dark_purple,
- /mob/living/simple_mob/slime/xenobio/dark_blue,
- /mob/living/simple_mob/slime/xenobio/green,
- /mob/living/simple_mob/slime/xenobio
- )
-
-/mob/living/simple_mob/slime/xenobio/orange
- desc = "This slime is known to be flammable and can ignite enemies."
- color = "#FFA723"
- slime_color = "orange"
- coretype = /obj/item/slime_extract/orange
- melee_damage_lower = 5
- melee_damage_upper = 5
- heat_resist = 1
-
- description_info = "The slime is immune to burning attacks, and attacks from this slime will burn you, and can ignite you. \
- A firesuit can protect from the burning attacks of this slime."
- player_msg = "You inflict burning attacks, which causes additional damage, makes the target more flammable, and has a chance to ignite them.
\
- You are also immune to burning attacks."
-
- slime_mutation = list(
- /mob/living/simple_mob/slime/xenobio/dark_purple,
- /mob/living/simple_mob/slime/xenobio/yellow,
- /mob/living/simple_mob/slime/xenobio/red,
- /mob/living/simple_mob/slime/xenobio
- )
-
-/mob/living/simple_mob/slime/xenobio/orange/apply_melee_effects(atom/A)
- ..()
- if(isliving(A))
- var/mob/living/L = A
- L.inflict_heat_damage(is_adult ? 10 : 5)
- to_chat(src, span("span", "You burn \the [L]."))
- to_chat(L, span("danger", "You've been burned by \the [src]!"))
- L.adjust_fire_stacks(1)
- if(prob(12))
- L.IgniteMob()
-
-/mob/living/simple_mob/slime/xenobio/blue
- desc = "This slime produces 'cryotoxin' and uses it against their foes. Very deadly to other slimes."
- color = "#19FFFF"
- slime_color = "blue"
- coretype = /obj/item/slime_extract/blue
- reagent_injected = "cryotoxin"
- cold_resist = 0.50 // Not as strong as dark blue, which has immunity.
-
- description_info = "The slime is resistant to the cold, and attacks from this slime can inject cryotoxin into you. \
- A biosuit or other thick armor can protect from the injection."
- player_msg = "You inject cryotoxin on attack, which causes them to get very cold, slowing them down and harming them over time.
\
- You are also resistant to cold attacks."
-
- slime_mutation = list(
- /mob/living/simple_mob/slime/xenobio/dark_blue,
- /mob/living/simple_mob/slime/xenobio/silver,
- /mob/living/simple_mob/slime/xenobio/pink,
- /mob/living/simple_mob/slime/xenobio
- )
-
-
-/mob/living/simple_mob/slime/xenobio/metal
- desc = "This slime is a lot more resilient than the others, due to having a metamorphic metallic and sloped surface."
- color = "#5F5F5F"
- slime_color = "metal"
- shiny = TRUE
- coretype = /obj/item/slime_extract/metal
-
- description_info = "This slime is a lot more durable and tough to damage than the others. It also seems to provoke others to attack it over others."
- player_msg = "You are more resilient and armored than more slimes. Your attacks will also encourage less intelligent enemies to focus on you."
-
- maxHealth = 250
- maxHealth_adult = 350
-
- // The sloped armor.
- // It's resistant to most weapons (but a spraybottle still kills it rather fast).
- armor = list(
- "melee" = 25,
- "bullet" = 25,
- "laser" = 25,
- "energy" = 50,
- "bomb" = 80,
- "bio" = 100,
- "rad" = 100
- )
-
- armor_soak = list(
- "melee" = 5,
- "bullet" = 5,
- "laser" = 5,
- "energy" = 0,
- "bomb" = 0,
- "bio" = 0,
- "rad" = 0
- )
-
- slime_mutation = list(
- /mob/living/simple_mob/slime/xenobio/silver,
- /mob/living/simple_mob/slime/xenobio/yellow,
- /mob/living/simple_mob/slime/xenobio/gold,
- /mob/living/simple_mob/slime/xenobio
- )
-
-/mob/living/simple_mob/slime/xenobio/metal/apply_melee_effects(atom/A)
- ..()
- if(isliving(A))
- var/mob/living/L = A
- L.taunt(src, TRUE) // We're the party tank now.
-
-// Tier 2
-
-/mob/living/simple_mob/slime/xenobio/yellow
- desc = "This slime is very conductive, and is known to use electricity as a means of defense moreso than usual for slimes."
- color = "#FFF423"
- slime_color = "yellow"
- coretype = /obj/item/slime_extract/yellow
- melee_damage_lower = 5
- melee_damage_upper = 5
- shock_resist = 1
-
- projectiletype = /obj/item/projectile/beam/lightning/slime
- projectilesound = 'sound/effects/lightningbolt.ogg'
- glow_toggle = TRUE
-
- description_info = "In addition to being immune to electrical shocks, this slime will fire ranged lightning attacks at \
- enemies if they are at range, inflict shocks upon entities they attack, and generate electricity for their stun \
- attack faster than usual. Insulative or reflective armor can protect from these attacks."
- player_msg = "You have a ranged electric attack. You also shock enemies you attack, and your electric stun attack charges passively.
\
- You are also immune to shocking attacks."
-
- slime_mutation = list(
- /mob/living/simple_mob/slime/xenobio/bluespace,
- /mob/living/simple_mob/slime/xenobio/bluespace,
- /mob/living/simple_mob/slime/xenobio/metal,
- /mob/living/simple_mob/slime/xenobio/orange
- )
-
-/mob/living/simple_mob/slime/xenobio/yellow/apply_melee_effects(atom/A)
- ..()
- if(isliving(A))
- var/mob/living/L = A
- L.inflict_shock_damage(is_adult ? 10 : 5)
- to_chat(src, span("span", "You shock \the [L]."))
- to_chat(L, span("danger", "You've been shocked by \the [src]!"))
-
-/mob/living/simple_mob/slime/xenobio/yellow/handle_special()
- if(stat == CONSCIOUS)
- if(prob(25))
- power_charge = between(0, power_charge + 1, 10)
- ..()
-
-/obj/item/projectile/beam/lightning/slime
- power = 10
- fire_sound = 'sound/effects/lightningbolt.ogg'
-
-
-/mob/living/simple_mob/slime/xenobio/dark_purple
- desc = "This slime produces ever-coveted phoron. Risky to handle but very much worth it."
- color = "#660088"
- slime_color = "dark purple"
- coretype = /obj/item/slime_extract/dark_purple
- reagent_injected = "phoron"
-
- description_info = "This slime applies phoron to enemies it attacks. A biosuit or other thick armor can protect from the toxic attack. \
- If hit with a burning attack, it will erupt in flames."
- player_msg = "You inject phoron into enemies you attack.
\
- You will erupt into flames if harmed by fire!"
-
- slime_mutation = list(
- /mob/living/simple_mob/slime/xenobio/purple,
- /mob/living/simple_mob/slime/xenobio/orange,
- /mob/living/simple_mob/slime/xenobio/ruby,
- /mob/living/simple_mob/slime/xenobio/ruby
- )
-
-/mob/living/simple_mob/slime/xenobio/dark_purple/proc/ignite()
- visible_message(span("critical", "\The [src] erupts in an inferno!"))
- for(var/turf/simulated/target_turf in view(2, src))
- target_turf.assume_gas("phoron", 30, 1500+T0C)
- spawn(0)
- target_turf.hotspot_expose(1500+T0C, 400)
- qdel(src)
-
-/mob/living/simple_mob/slime/xenobio/dark_purple/ex_act(severity)
- log_and_message_admins("[src] ignited due to a chain reaction with an explosion.")
- ignite()
-
-/mob/living/simple_mob/slime/xenobio/dark_purple/fire_act(datum/gas_mixture/air, temperature, volume)
- log_and_message_admins("[src] ignited due to exposure to fire.")
- ignite()
-
-/mob/living/simple_mob/slime/xenobio/dark_purple/bullet_act(var/obj/item/projectile/P, var/def_zone)
- if(P.damage_type && P.damage_type == BURN && P.damage) // Most bullets won't trigger the explosion, as a mercy towards Security.
- log_and_message_admins("[src] ignited due to bring hit by a burning projectile[P.firer ? " by [key_name(P.firer)]" : ""].")
- ignite()
- else
- ..()
-
-/mob/living/simple_mob/slime/xenobio/dark_purple/attackby(var/obj/item/weapon/W, var/mob/user)
- if(istype(W) && W.force && W.damtype == BURN)
- log_and_message_admins("[src] ignited due to being hit with a burning weapon ([W]) by [key_name(user)].")
- ignite()
- else
- ..()
-
-
-
-/mob/living/simple_mob/slime/xenobio/dark_blue
- desc = "This slime makes other entities near it feel much colder, and is more resilient to the cold. It tends to kill other slimes rather quickly."
- color = "#2398FF"
- glow_toggle = TRUE
- slime_color = "dark blue"
- coretype = /obj/item/slime_extract/dark_blue
- melee_damage_lower = 5
- melee_damage_upper = 5
- cold_resist = 1
-
- description_info = "This slime is immune to the cold, however water will still kill it. Its presense, as well as its attacks, will \
- also cause you additional harm from the cold. A winter coat or other cold-resistant clothing can protect from this."
- player_msg = "You are immune to the cold, inflict additional cold damage on attack, and cause nearby entities to suffer from coldness."
-
- slime_mutation = list(
- /mob/living/simple_mob/slime/xenobio/purple,
- /mob/living/simple_mob/slime/xenobio/blue,
- /mob/living/simple_mob/slime/xenobio/cerulean,
- /mob/living/simple_mob/slime/xenobio/cerulean
- )
-
- minbodytemp = 0
- cold_damage_per_tick = 0
-
-/mob/living/simple_mob/slime/xenobio/dark_blue/handle_special()
- if(stat != DEAD)
- cold_aura()
- ..()
-
-/mob/living/simple_mob/slime/xenobio/dark_blue/proc/cold_aura()
- for(var/mob/living/L in view(2, src))
- if(L == src)
- continue
- chill(L)
-
- var/turf/T = get_turf(src)
- var/datum/gas_mixture/env = T.return_air()
- if(env)
- env.add_thermal_energy(-10 * 1000)
-
-/mob/living/simple_mob/slime/xenobio/dark_blue/apply_melee_effects(atom/A)
- ..()
- if(isliving(A))
- var/mob/living/L = A
- chill(L)
- to_chat(src, span("span", "You chill \the [L]."))
- to_chat(L, span("danger", "You've been chilled by \the [src]!"))
-
-
-/mob/living/simple_mob/slime/xenobio/dark_blue/proc/chill(mob/living/L)
- L.inflict_cold_damage(is_adult ? 10 : 5)
- if(L.get_cold_protection() < 1 && L.has_AI()) // Harmful auras will make the AI react to its bearer.
- L.ai_holder.react_to_attack(src)
-
-
-/mob/living/simple_mob/slime/xenobio/silver
- desc = "This slime is shiny, and can deflect lasers or other energy weapons directed at it."
- color = "#AAAAAA"
- slime_color = "silver"
- coretype = /obj/item/slime_extract/silver
- shiny = TRUE
-
- description_info = "Tasers, including the slime version, are ineffective against this slime. The slimebation still works."
- player_msg = "You automatically reflect lasers, beams, and tasers that hit you."
-
- slime_mutation = list(
- /mob/living/simple_mob/slime/xenobio/metal,
- /mob/living/simple_mob/slime/xenobio/blue,
- /mob/living/simple_mob/slime/xenobio/amber,
- /mob/living/simple_mob/slime/xenobio/amber
- )
-
-/mob/living/simple_mob/slime/xenobio/silver/bullet_act(var/obj/item/projectile/P, var/def_zone)
- if(istype(P,/obj/item/projectile/beam) || istype(P, /obj/item/projectile/energy))
- visible_message(span("danger", "\The [src] reflects \the [P]!"))
-
- // Find a turf near or on the original location to bounce to
- var/new_x = P.starting.x + pick(0, 0, 0, -1, 1, -2, 2)
- var/new_y = P.starting.y + pick(0, 0, 0, -1, 1, -2, 2)
- var/turf/curloc = get_turf(src)
-
- // redirect the projectile
- P.redirect(new_x, new_y, curloc, src)
- P.reflected = TRUE
- return PROJECTILE_CONTINUE // complete projectile permutation
- else
- ..()
-
-
-// Tier 3
-
-/mob/living/simple_mob/slime/xenobio/bluespace
- desc = "Trapping this slime in a cell is generally futile, as it can teleport at will."
- color = null
- slime_color = "bluespace"
- icon_state_override = "bluespace"
- coretype = /obj/item/slime_extract/bluespace
-
- description_info = "This slime will teleport to attack something if it is within a range of seven tiles. The teleport has a cooldown of five seconds."
- player_msg = "You can teleport at will to a specific tile by clicking on it at range. This has a five second cooldown."
-
- slime_mutation = list(
- /mob/living/simple_mob/slime/xenobio/bluespace,
- /mob/living/simple_mob/slime/xenobio/bluespace,
- /mob/living/simple_mob/slime/xenobio/yellow,
- /mob/living/simple_mob/slime/xenobio/yellow
- )
-
- special_attack_min_range = 3
- special_attack_max_range = 7
- special_attack_cooldown = 5 SECONDS
-
-/mob/living/simple_mob/slime/xenobio/bluespace/do_special_attack(atom/A)
- // Teleport attack.
- if(!A)
- to_chat(src, span("warning", "There's nothing to teleport to."))
- return FALSE
-
- var/list/nearby_things = range(1, A)
- var/list/valid_turfs = list()
-
- // All this work to just go to a non-dense tile.
- for(var/turf/potential_turf in nearby_things)
- var/valid_turf = TRUE
- if(potential_turf.density)
- continue
- for(var/atom/movable/AM in potential_turf)
- if(AM.density)
- valid_turf = FALSE
- if(valid_turf)
- valid_turfs.Add(potential_turf)
-
- var/turf/T = get_turf(src)
- var/turf/target_turf = pick(valid_turfs)
-
- if(!target_turf)
- to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to."))
- return FALSE
-
- var/datum/effect/effect/system/spark_spread/s1 = new /datum/effect/effect/system/spark_spread
- s1.set_up(5, 1, T)
- var/datum/effect/effect/system/spark_spread/s2 = new /datum/effect/effect/system/spark_spread
- s2.set_up(5, 1, target_turf)
-
-
- T.visible_message(span("notice", "\The [src] vanishes!"))
- s1.start()
-
- forceMove(target_turf)
- playsound(target_turf, 'sound/effects/phasein.ogg', 50, 1)
- to_chat(src, span("notice", "You teleport to \the [target_turf]."))
-
- target_turf.visible_message(span("warning", "\The [src] appears!"))
- s2.start()
-
- if(Adjacent(A))
- attack_target(A)
-
-
-/mob/living/simple_mob/slime/xenobio/ruby
- desc = "This slime has great physical strength."
- color = "#FF3333"
- slime_color = "ruby"
- shiny = TRUE
- glow_toggle = TRUE
- coretype = /obj/item/slime_extract/ruby
-
- description_info = "This slime is unnaturally stronger, allowing it to hit much harder, take less damage, and be stunned for less time. \
- Their glomp attacks also send the victim flying."
- player_msg = "Your attacks knock back the target a fair distance.
\
- You also hit harder, take less damage, and stuns affect you for less time."
-
- melee_attack_delay = 1 SECOND
-
- slime_mutation = list(
- /mob/living/simple_mob/slime/xenobio/dark_purple,
- /mob/living/simple_mob/slime/xenobio/dark_purple,
- /mob/living/simple_mob/slime/xenobio/ruby,
- /mob/living/simple_mob/slime/xenobio/ruby
- )
-
-/mob/living/simple_mob/slime/xenobio/ruby/initialize()
- add_modifier(/datum/modifier/slime_strength, null, src) // Slime is always swole.
- return ..()
-
-/mob/living/simple_mob/slime/xenobio/ruby/apply_melee_effects(atom/A)
- ..()
-
- if(isliving(A) && a_intent == I_HURT)
- var/mob/living/L = A
- if(L.mob_size <= MOB_MEDIUM)
- visible_message(span("danger", "\The [src] sends \the [L] flying with the impact!"))
- playsound(src, "punch", 50, 1)
- L.Weaken(1)
- var/throwdir = get_dir(src, L)
- L.throw_at(get_edge_target_turf(L, throwdir), 3, 1, src)
- else
- to_chat(L, span("warning", "\The [src] hits you with incredible force, but you remain in place."))
-
-
-/mob/living/simple_mob/slime/xenobio/amber
- desc = "This slime seems to be an expert in the culinary arts, as they create their own food to share with others. \
- They would probably be very important to other slimes, if the other colors didn't try to kill them."
- color = "#FFBB00"
- slime_color = "amber"
- shiny = TRUE
- glow_toggle = TRUE
- coretype = /obj/item/slime_extract/amber
-
- description_info = "This slime feeds nearby entities passively while it is alive. This can cause uncontrollable \
- slime growth and reproduction if not kept in check. The amber slime cannot feed itself, but can be fed by other amber slimes."
- player_msg = "You passively provide nutrition to nearby entities."
-
- slime_mutation = list(
- /mob/living/simple_mob/slime/xenobio/silver,
- /mob/living/simple_mob/slime/xenobio/silver,
- /mob/living/simple_mob/slime/xenobio/amber,
- /mob/living/simple_mob/slime/xenobio/amber
- )
-
-/mob/living/simple_mob/slime/xenobio/amber/handle_special()
- if(stat != DEAD)
- feed_aura()
- ..()
-
-/mob/living/simple_mob/slime/xenobio/amber/proc/feed_aura()
- for(var/mob/living/L in view(2, src))
- if(L == src) // Don't feed themselves, or it is impossible to stop infinite slimes without killing all of the ambers.
- continue
- if(istype(L, /mob/living/simple_mob/slime/xenobio))
- var/mob/living/simple_mob/slime/xenobio/X = L
- X.adjust_nutrition(rand(15, 25))
- if(ishuman(L))
- var/mob/living/carbon/human/H = L
- if(H.isSynthetic())
- continue
- H.nutrition = between(0, H.nutrition + rand(15, 25), 800)
-
-/mob/living/simple_mob/slime/xenobio/cerulean
- desc = "This slime is generally superior in a wide range of attributes, compared to the common slime. The jack of all trades, but master of none."
- color = "#4F7EAA"
- slime_color = "cerulean"
- coretype = /obj/item/slime_extract/cerulean
-
- // Less than the specialized slimes, but higher than the rest.
- maxHealth = 200
- maxHealth_adult = 250
-
- melee_damage_lower = 10
- melee_damage_upper = 30
-
- movement_cooldown = 0 // This actually isn't any faster due to AI limitations that hopefully the timer subsystem can fix in the future.
-
- slime_mutation = list(
- /mob/living/simple_mob/slime/xenobio/dark_blue,
- /mob/living/simple_mob/slime/xenobio/dark_blue,
- /mob/living/simple_mob/slime/xenobio/cerulean,
- /mob/living/simple_mob/slime/xenobio/cerulean
- )
-
-// Tier 4
-
-/mob/living/simple_mob/slime/xenobio/red
- desc = "This slime is full of energy, and very aggressive. 'The red ones go faster.' seems to apply here."
- color = "#FF3333"
- slime_color = "red"
- coretype = /obj/item/slime_extract/red
- movement_cooldown = 0 // See above.
-
- description_info = "This slime is faster than the others. Attempting to discipline this slime will always cause it to go rabid and berserk."
-
- slime_mutation = list(
- /mob/living/simple_mob/slime/xenobio/red,
- /mob/living/simple_mob/slime/xenobio/oil,
- /mob/living/simple_mob/slime/xenobio/oil,
- /mob/living/simple_mob/slime/xenobio/orange
- )
-
- ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime/red // Will enrage if disciplined.
-
-
-/mob/living/simple_mob/slime/xenobio/green
- desc = "This slime is radioactive."
- color = "#14FF20"
- slime_color = "green"
- coretype = /obj/item/slime_extract/green
- glow_toggle = TRUE
- reagent_injected = "radium"
- var/rads = 25
-
- description_info = "This slime will irradiate anything nearby passively, and will inject radium on attack. \
- A radsuit or other thick and radiation-hardened armor can protect from this. It will only radiate while alive."
- player_msg = "You passively irradiate your surroundings.
\
- You also inject radium on attack."
-
- slime_mutation = list(
- /mob/living/simple_mob/slime/xenobio/purple,
- /mob/living/simple_mob/slime/xenobio/green,
- /mob/living/simple_mob/slime/xenobio/emerald,
- /mob/living/simple_mob/slime/xenobio/emerald
- )
-
-/mob/living/simple_mob/slime/xenobio/green/handle_special()
- if(stat != DEAD)
- irradiate()
- ..()
-
-/mob/living/simple_mob/slime/xenobio/green/proc/irradiate()
- radiation_repository.radiate(src, rads)
-
-
-
-/mob/living/simple_mob/slime/xenobio/pink
- desc = "This slime has regenerative properties."
- color = "#FF0080"
- slime_color = "pink"
- coretype = /obj/item/slime_extract/pink
- glow_toggle = TRUE
-
- description_info = "This slime will passively heal nearby entities within two tiles, including itself. It will only do this while alive."
- player_msg = "You passively heal yourself and nearby allies."
-
- slime_mutation = list(
- /mob/living/simple_mob/slime/xenobio/blue,
- /mob/living/simple_mob/slime/xenobio/light_pink,
- /mob/living/simple_mob/slime/xenobio/light_pink,
- /mob/living/simple_mob/slime/xenobio/pink
- )
-
-/mob/living/simple_mob/slime/xenobio/pink/handle_special()
- if(stat != DEAD)
- heal_aura()
- ..()
-
-/mob/living/simple_mob/slime/xenobio/pink/proc/heal_aura()
- for(var/mob/living/L in view(src, 2))
- if(L.stat == DEAD || !IIsAlly(L))
- continue
- L.add_modifier(/datum/modifier/aura/slime_heal, null, src)
-
-/datum/modifier/aura/slime_heal
- name = "slime mending"
- desc = "You feel somewhat gooy."
- mob_overlay_state = "pink_sparkles"
- stacks = MODIFIER_STACK_FORBID
- aura_max_distance = 2
-
- on_created_text = "Twinkling spores of goo surround you. It makes you feel healthier."
- on_expired_text = "The spores of goo have faded, although you feel much healthier than before."
-
-/datum/modifier/aura/slime_heal/tick()
- if(holder.stat == DEAD)
- expire()
-
- if(ishuman(holder)) // Robolimbs need this code sadly.
- var/mob/living/carbon/human/H = holder
- for(var/obj/item/organ/external/E in H.organs)
- var/obj/item/organ/external/O = E
- O.heal_damage(2, 2, 0, 1)
- else
- holder.adjustBruteLoss(-2)
- holder.adjustFireLoss(-2)
-
- holder.adjustToxLoss(-2)
- holder.adjustOxyLoss(-2)
- holder.adjustCloneLoss(-1)
-
-
-/mob/living/simple_mob/slime/xenobio/gold
- desc = "This slime absorbs energy, and cannot be stunned by normal means."
- color = "#EEAA00"
- shiny = TRUE
- slime_color = "gold"
- coretype = /obj/item/slime_extract/gold
- description_info = "This slime is immune to the slimebaton and taser, and will actually charge the slime, however it will still discipline the slime."
-
- slime_mutation = list(
- /mob/living/simple_mob/slime/xenobio/metal,
- /mob/living/simple_mob/slime/xenobio/gold,
- /mob/living/simple_mob/slime/xenobio/sapphire,
- /mob/living/simple_mob/slime/xenobio/sapphire
- )
-
-/mob/living/simple_mob/slime/xenobio/gold/slimebatoned(mob/living/user, amount)
- power_charge = between(0, power_charge + amount, 10)
-
-/mob/living/simple_mob/slime/xenobio/gold/get_description_interaction() // So it doesn't say to use a baton on them.
- return list()
-
-
-// Tier 5
-
-/mob/living/simple_mob/slime/xenobio/oil
- desc = "This slime is explosive and volatile. Smoking near it is probably a bad idea."
- color = "#333333"
- slime_color = "oil"
- shiny = TRUE
- coretype = /obj/item/slime_extract/oil
-
- description_info = "If this slime suffers damage from a fire or heat based source, or if it is caught inside \
- an explosion, it will explode. Oil slimes will also suicide-bomb themselves when fighting something that is not a monkey or slime."
- player_msg = "You will explode if struck by a burning attack, or if you hit an enemy with a melee attack that is not a monkey or another slime."
-
- slime_mutation = list(
- /mob/living/simple_mob/slime/xenobio/oil,
- /mob/living/simple_mob/slime/xenobio/oil,
- /mob/living/simple_mob/slime/xenobio/red,
- /mob/living/simple_mob/slime/xenobio/red
- )
-
-/mob/living/simple_mob/slime/xenobio/oil/proc/explode()
- if(stat != DEAD)
- explosion(src.loc, 0, 2, 4) // A bit weaker since the suicide charger tended to gib the poor sod being targeted.
- if(src) // Delete ourselves if the explosion didn't do it.
- qdel(src)
-
-/mob/living/simple_mob/slime/xenobio/oil/apply_melee_effects(atom/A)
- if(isliving(A))
- var/mob/living/L = A
- if(ishuman(L))
- var/mob/living/carbon/human/H = A
- if(istype(H.species, /datum/species/monkey))
- return ..()// Don't blow up when just eatting monkeys.
-
- else if(isslime(L))
- return ..()
-
- // Otherwise blow ourselves up.
- say(pick("Sacrifice...!", "Sssss...", "Boom...!"))
- set_AI_busy(TRUE)
- sleep(2 SECONDS)
- log_and_message_admins("[src] has suicide-bombed themselves while trying to kill \the [L].")
- explode()
-
- return ..()
-
-/mob/living/simple_mob/slime/xenobio/oil/ex_act(severity)
- log_and_message_admins("[src] exploded due to a chain reaction with another explosion.")
- explode()
-
-/mob/living/simple_mob/slime/xenobio/oil/fire_act(datum/gas_mixture/air, temperature, volume)
- log_and_message_admins("[src] exploded due to exposure to fire.")
- explode()
-
-/mob/living/simple_mob/slime/xenobio/oil/bullet_act(obj/item/projectile/P, def_zone)
- if(P.damage_type && P.damage_type == BURN && P.damage) // Most bullets won't trigger the explosion, as a mercy towards Security.
- log_and_message_admins("[src] exploded due to bring hit by a burning projectile[P.firer ? " by [key_name(P.firer)]" : ""].")
- explode()
- else
- ..()
-
-/mob/living/simple_mob/slime/xenobio/oil/attackby(obj/item/weapon/W, mob/living/user)
- if(istype(W) && W.force && W.damtype == BURN)
- log_and_message_admins("[src] exploded due to being hit with a burning weapon ([W]) by [key_name(user)].")
- explode()
- else
- ..()
-
-
-/mob/living/simple_mob/slime/xenobio/sapphire
- desc = "This slime seems a bit brighter than the rest, both figuratively and literally."
- color = "#2398FF"
- slime_color = "sapphire"
- shiny = TRUE
- glow_toggle = TRUE
- coretype = /obj/item/slime_extract/sapphire
- ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime/sapphire
-
- description_info = "This slime uses more robust tactics when fighting and won't hold back, so it is dangerous to be alone \
- with one if hostile, and especially dangerous if they outnumber you."
-
- slime_mutation = list(
- /mob/living/simple_mob/slime/xenobio/sapphire,
- /mob/living/simple_mob/slime/xenobio/sapphire,
- /mob/living/simple_mob/slime/xenobio/gold,
- /mob/living/simple_mob/slime/xenobio/gold
- )
-
-
-/mob/living/simple_mob/slime/xenobio/emerald
- desc = "This slime is faster than usual, even more so than the red slimes."
- color = "#22FF22"
- shiny = TRUE
- glow_toggle = TRUE
- slime_color = "emerald"
- coretype = /obj/item/slime_extract/emerald
-
- description_info = "This slime will make everything around it, and itself, faster for a few seconds, if close by."
-
- slime_mutation = list(
- /mob/living/simple_mob/slime/xenobio/green,
- /mob/living/simple_mob/slime/xenobio/green,
- /mob/living/simple_mob/slime/xenobio/emerald,
- /mob/living/simple_mob/slime/xenobio/emerald
- )
-
-/mob/living/simple_mob/slime/xenobio/emerald/handle_special()
- if(stat != DEAD)
- zoom_aura()
- ..()
-
-/mob/living/simple_mob/slime/xenobio/emerald/proc/zoom_aura()
- for(var/mob/living/L in view(src, 2))
- if(L.stat == DEAD || !IIsAlly(L))
- continue
- L.add_modifier(/datum/modifier/technomancer/haste, 5 SECONDS, src)
-
-
-/mob/living/simple_mob/slime/xenobio/light_pink
- desc = "This slime seems a lot more peaceful than the others."
- color = "#FF8888"
- slime_color = "light pink"
- coretype = /obj/item/slime_extract/light_pink
-
- description_info = "This slime is effectively always disciplined initially."
-
- slime_mutation = list(
- /mob/living/simple_mob/slime/xenobio/pink,
- /mob/living/simple_mob/slime/xenobio/pink,
- /mob/living/simple_mob/slime/xenobio/light_pink,
- /mob/living/simple_mob/slime/xenobio/light_pink
- )
-
- ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime/light_pink
-
-// Special
-/mob/living/simple_mob/slime/xenobio/rainbow
- desc = "This slime changes colors constantly."
- color = null // Uses a special icon_state.
- slime_color = "rainbow"
- coretype = /obj/item/slime_extract/rainbow
- icon_state_override = "rainbow"
- unity = TRUE
-
- description_info = "This slime is considered to be the same color as all other slime colors at the same time for the purposes of \
- other slimes being friendly to them, and therefore will never be harmed by another slime. \
- Attacking this slime will provoke the wrath of all slimes within range."
- player_msg = "You are considered to be the same color as every slime, \
- meaning that you are considered an ally to all slimes."
-
- slime_mutation = list(
- /mob/living/simple_mob/slime/xenobio/rainbow,
- /mob/living/simple_mob/slime/xenobio/rainbow,
- /mob/living/simple_mob/slime/xenobio/rainbow,
- /mob/living/simple_mob/slime/xenobio/rainbow
- )
-
-/mob/living/simple_mob/slime/xenobio/rainbow/initialize()
- unify()
- return ..()
-
-// The RD's pet slime.
-/mob/living/simple_mob/slime/xenobio/rainbow/kendrick
- name = "Kendrick"
- desc = "The Research Director's pet slime. It shifts colors constantly."
- rainbow_core_candidate = FALSE
- // Doing pacify() in initialize() won't actually pacify the AI due to the ai_holder not existing due to parent initialize() not being called yet.
- // Instead lets just give them an ai_holder that does that for us.
- ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime/passive
-
-/mob/living/simple_mob/slime/xenobio/rainbow/kendrick/initialize()
- pacify() // So the physical mob also gets made harmless.
+// Here are where all the other colors of slime live.
+// They will generally fight each other if not Unified, meaning the xenobiologist has to seperate them.
+
+// Tier 1.
+
+/mob/living/simple_mob/slime/xenobio/purple
+ desc = "This slime is rather toxic to handle, as it is poisonous."
+ color = "#CC23FF"
+ slime_color = "purple"
+ coretype = /obj/item/slime_extract/purple
+ reagent_injected = "toxin"
+
+ description_info = "This slime spreads a toxin when it attacks. A biosuit or other thick armor can protect from the toxic attack."
+ player_msg = "You inject a harmful toxin when attacking."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/dark_purple,
+ /mob/living/simple_mob/slime/xenobio/dark_blue,
+ /mob/living/simple_mob/slime/xenobio/green,
+ /mob/living/simple_mob/slime/xenobio
+ )
+
+/mob/living/simple_mob/slime/xenobio/orange
+ desc = "This slime is known to be flammable and can ignite enemies."
+ color = "#FFA723"
+ slime_color = "orange"
+ coretype = /obj/item/slime_extract/orange
+ melee_damage_lower = 5
+ melee_damage_upper = 5
+ heat_resist = 1
+
+ description_info = "The slime is immune to burning attacks, and attacks from this slime will burn you, and can ignite you. \
+ A firesuit can protect from the burning attacks of this slime."
+ player_msg = "You inflict burning attacks, which causes additional damage, makes the target more flammable, and has a chance to ignite them.
\
+ You are also immune to burning attacks."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/dark_purple,
+ /mob/living/simple_mob/slime/xenobio/yellow,
+ /mob/living/simple_mob/slime/xenobio/red,
+ /mob/living/simple_mob/slime/xenobio
+ )
+
+/mob/living/simple_mob/slime/xenobio/orange/apply_melee_effects(atom/A)
+ ..()
+ if(isliving(A))
+ var/mob/living/L = A
+ L.inflict_heat_damage(is_adult ? 10 : 5)
+ to_chat(src, span("span", "You burn \the [L]."))
+ to_chat(L, span("danger", "You've been burned by \the [src]!"))
+ L.adjust_fire_stacks(1)
+ if(prob(12))
+ L.IgniteMob()
+
+/mob/living/simple_mob/slime/xenobio/blue
+ desc = "This slime produces 'cryotoxin' and uses it against their foes. Very deadly to other slimes."
+ color = "#19FFFF"
+ slime_color = "blue"
+ coretype = /obj/item/slime_extract/blue
+ reagent_injected = "cryotoxin"
+ cold_resist = 0.50 // Not as strong as dark blue, which has immunity.
+
+ description_info = "The slime is resistant to the cold, and attacks from this slime can inject cryotoxin into you. \
+ A biosuit or other thick armor can protect from the injection."
+ player_msg = "You inject cryotoxin on attack, which causes them to get very cold, slowing them down and harming them over time.
\
+ You are also resistant to cold attacks."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/dark_blue,
+ /mob/living/simple_mob/slime/xenobio/silver,
+ /mob/living/simple_mob/slime/xenobio/pink,
+ /mob/living/simple_mob/slime/xenobio
+ )
+
+
+/mob/living/simple_mob/slime/xenobio/metal
+ desc = "This slime is a lot more resilient than the others, due to having a metamorphic metallic and sloped surface."
+ color = "#5F5F5F"
+ slime_color = "metal"
+ shiny = TRUE
+ coretype = /obj/item/slime_extract/metal
+
+ description_info = "This slime is a lot more durable and tough to damage than the others. It also seems to provoke others to attack it over others."
+ player_msg = "You are more resilient and armored than more slimes. Your attacks will also encourage less intelligent enemies to focus on you."
+
+ maxHealth = 250
+ maxHealth_adult = 350
+
+ // The sloped armor.
+ // It's resistant to most weapons (but a spraybottle still kills it rather fast).
+ armor = list(
+ "melee" = 25,
+ "bullet" = 25,
+ "laser" = 25,
+ "energy" = 50,
+ "bomb" = 80,
+ "bio" = 100,
+ "rad" = 100
+ )
+
+ armor_soak = list(
+ "melee" = 5,
+ "bullet" = 5,
+ "laser" = 5,
+ "energy" = 0,
+ "bomb" = 0,
+ "bio" = 0,
+ "rad" = 0
+ )
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/silver,
+ /mob/living/simple_mob/slime/xenobio/yellow,
+ /mob/living/simple_mob/slime/xenobio/gold,
+ /mob/living/simple_mob/slime/xenobio
+ )
+
+/mob/living/simple_mob/slime/xenobio/metal/apply_melee_effects(atom/A)
+ ..()
+ if(isliving(A))
+ var/mob/living/L = A
+ L.taunt(src, TRUE) // We're the party tank now.
+
+// Tier 2
+
+/mob/living/simple_mob/slime/xenobio/yellow
+ desc = "This slime is very conductive, and is known to use electricity as a means of defense moreso than usual for slimes."
+ color = "#FFF423"
+ slime_color = "yellow"
+ coretype = /obj/item/slime_extract/yellow
+ melee_damage_lower = 5
+ melee_damage_upper = 5
+ shock_resist = 1
+
+ projectiletype = /obj/item/projectile/beam/lightning/slime
+ projectilesound = 'sound/effects/lightningbolt.ogg'
+ glow_toggle = TRUE
+
+ description_info = "In addition to being immune to electrical shocks, this slime will fire ranged lightning attacks at \
+ enemies if they are at range, inflict shocks upon entities they attack, and generate electricity for their stun \
+ attack faster than usual. Insulative or reflective armor can protect from these attacks."
+ player_msg = "You have a ranged electric attack. You also shock enemies you attack, and your electric stun attack charges passively.
\
+ You are also immune to shocking attacks."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/bluespace,
+ /mob/living/simple_mob/slime/xenobio/bluespace,
+ /mob/living/simple_mob/slime/xenobio/metal,
+ /mob/living/simple_mob/slime/xenobio/orange
+ )
+
+/mob/living/simple_mob/slime/xenobio/yellow/apply_melee_effects(atom/A)
+ ..()
+ if(isliving(A))
+ var/mob/living/L = A
+ L.inflict_shock_damage(is_adult ? 10 : 5)
+ to_chat(src, span("span", "You shock \the [L]."))
+ to_chat(L, span("danger", "You've been shocked by \the [src]!"))
+
+/mob/living/simple_mob/slime/xenobio/yellow/handle_special()
+ if(stat == CONSCIOUS)
+ if(prob(25))
+ power_charge = between(0, power_charge + 1, 10)
+ ..()
+
+/obj/item/projectile/beam/lightning/slime
+ power = 10
+ fire_sound = 'sound/effects/lightningbolt.ogg'
+
+
+/mob/living/simple_mob/slime/xenobio/dark_purple
+ desc = "This slime produces ever-coveted phoron. Risky to handle but very much worth it."
+ color = "#660088"
+ slime_color = "dark purple"
+ coretype = /obj/item/slime_extract/dark_purple
+ reagent_injected = "phoron"
+
+ description_info = "This slime applies phoron to enemies it attacks. A biosuit or other thick armor can protect from the toxic attack. \
+ If hit with a burning attack, it will erupt in flames."
+ player_msg = "You inject phoron into enemies you attack.
\
+ You will erupt into flames if harmed by fire!"
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/purple,
+ /mob/living/simple_mob/slime/xenobio/orange,
+ /mob/living/simple_mob/slime/xenobio/ruby,
+ /mob/living/simple_mob/slime/xenobio/ruby
+ )
+
+/mob/living/simple_mob/slime/xenobio/dark_purple/proc/ignite()
+ visible_message(span("critical", "\The [src] erupts in an inferno!"))
+ for(var/turf/simulated/target_turf in view(2, src))
+ target_turf.assume_gas("phoron", 30, 1500+T0C)
+ spawn(0)
+ target_turf.hotspot_expose(1500+T0C, 400)
+ qdel(src)
+
+/mob/living/simple_mob/slime/xenobio/dark_purple/ex_act(severity)
+ log_and_message_admins("[src] ignited due to a chain reaction with an explosion.")
+ ignite()
+
+/mob/living/simple_mob/slime/xenobio/dark_purple/fire_act(datum/gas_mixture/air, temperature, volume)
+ log_and_message_admins("[src] ignited due to exposure to fire.")
+ ignite()
+
+/mob/living/simple_mob/slime/xenobio/dark_purple/bullet_act(var/obj/item/projectile/P, var/def_zone)
+ if(P.damage_type && P.damage_type == BURN && P.damage) // Most bullets won't trigger the explosion, as a mercy towards Security.
+ log_and_message_admins("[src] ignited due to bring hit by a burning projectile[P.firer ? " by [key_name(P.firer)]" : ""].")
+ ignite()
+ else
+ ..()
+
+/mob/living/simple_mob/slime/xenobio/dark_purple/attackby(var/obj/item/weapon/W, var/mob/user)
+ if(istype(W) && W.force && W.damtype == BURN)
+ log_and_message_admins("[src] ignited due to being hit with a burning weapon ([W]) by [key_name(user)].")
+ ignite()
+ else
+ ..()
+
+
+
+/mob/living/simple_mob/slime/xenobio/dark_blue
+ desc = "This slime makes other entities near it feel much colder, and is more resilient to the cold. It tends to kill other slimes rather quickly."
+ color = "#2398FF"
+ glow_toggle = TRUE
+ slime_color = "dark blue"
+ coretype = /obj/item/slime_extract/dark_blue
+ melee_damage_lower = 5
+ melee_damage_upper = 5
+ cold_resist = 1
+
+ description_info = "This slime is immune to the cold, however water will still kill it. Its presense, as well as its attacks, will \
+ also cause you additional harm from the cold. A winter coat or other cold-resistant clothing can protect from this."
+ player_msg = "You are immune to the cold, inflict additional cold damage on attack, and cause nearby entities to suffer from coldness."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/purple,
+ /mob/living/simple_mob/slime/xenobio/blue,
+ /mob/living/simple_mob/slime/xenobio/cerulean,
+ /mob/living/simple_mob/slime/xenobio/cerulean
+ )
+
+ minbodytemp = 0
+ cold_damage_per_tick = 0
+
+/mob/living/simple_mob/slime/xenobio/dark_blue/handle_special()
+ if(stat != DEAD)
+ cold_aura()
+ ..()
+
+/mob/living/simple_mob/slime/xenobio/dark_blue/proc/cold_aura()
+ for(var/mob/living/L in view(2, src))
+ if(L == src)
+ continue
+ chill(L)
+
+ var/turf/T = get_turf(src)
+ var/datum/gas_mixture/env = T.return_air()
+ if(env)
+ env.add_thermal_energy(-10 * 1000)
+
+/mob/living/simple_mob/slime/xenobio/dark_blue/apply_melee_effects(atom/A)
+ ..()
+ if(isliving(A))
+ var/mob/living/L = A
+ chill(L)
+ to_chat(src, span("span", "You chill \the [L]."))
+ to_chat(L, span("danger", "You've been chilled by \the [src]!"))
+
+
+/mob/living/simple_mob/slime/xenobio/dark_blue/proc/chill(mob/living/L)
+ L.inflict_cold_damage(is_adult ? 10 : 5)
+ if(L.get_cold_protection() < 1 && L.has_AI()) // Harmful auras will make the AI react to its bearer.
+ L.ai_holder.react_to_attack(src)
+
+
+/mob/living/simple_mob/slime/xenobio/silver
+ desc = "This slime is shiny, and can deflect lasers or other energy weapons directed at it."
+ color = "#AAAAAA"
+ slime_color = "silver"
+ coretype = /obj/item/slime_extract/silver
+ shiny = TRUE
+
+ description_info = "Tasers, including the slime version, are ineffective against this slime. The slimebation still works."
+ player_msg = "You automatically reflect lasers, beams, and tasers that hit you."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/metal,
+ /mob/living/simple_mob/slime/xenobio/blue,
+ /mob/living/simple_mob/slime/xenobio/amber,
+ /mob/living/simple_mob/slime/xenobio/amber
+ )
+
+/mob/living/simple_mob/slime/xenobio/silver/bullet_act(var/obj/item/projectile/P, var/def_zone)
+ if(istype(P,/obj/item/projectile/beam) || istype(P, /obj/item/projectile/energy))
+ visible_message(span("danger", "\The [src] reflects \the [P]!"))
+
+ // Find a turf near or on the original location to bounce to
+ var/new_x = P.starting.x + pick(0, 0, 0, -1, 1, -2, 2)
+ var/new_y = P.starting.y + pick(0, 0, 0, -1, 1, -2, 2)
+ var/turf/curloc = get_turf(src)
+
+ // redirect the projectile
+ P.redirect(new_x, new_y, curloc, src)
+ P.reflected = TRUE
+ return PROJECTILE_CONTINUE // complete projectile permutation
+ else
+ ..()
+
+
+// Tier 3
+
+/mob/living/simple_mob/slime/xenobio/bluespace
+ desc = "Trapping this slime in a cell is generally futile, as it can teleport at will."
+ color = null
+ slime_color = "bluespace"
+ icon_state_override = "bluespace"
+ coretype = /obj/item/slime_extract/bluespace
+
+ description_info = "This slime will teleport to attack something if it is within a range of seven tiles. The teleport has a cooldown of five seconds."
+ player_msg = "You can teleport at will to a specific tile by clicking on it at range. This has a five second cooldown."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/bluespace,
+ /mob/living/simple_mob/slime/xenobio/bluespace,
+ /mob/living/simple_mob/slime/xenobio/yellow,
+ /mob/living/simple_mob/slime/xenobio/yellow
+ )
+
+ special_attack_min_range = 3
+ special_attack_max_range = 7
+ special_attack_cooldown = 5 SECONDS
+
+/mob/living/simple_mob/slime/xenobio/bluespace/do_special_attack(atom/A)
+ // Teleport attack.
+ if(!A)
+ to_chat(src, span("warning", "There's nothing to teleport to."))
+ return FALSE
+
+ var/list/nearby_things = range(1, A)
+ var/list/valid_turfs = list()
+
+ // All this work to just go to a non-dense tile.
+ for(var/turf/potential_turf in nearby_things)
+ var/valid_turf = TRUE
+ if(potential_turf.density)
+ continue
+ for(var/atom/movable/AM in potential_turf)
+ if(AM.density)
+ valid_turf = FALSE
+ if(valid_turf)
+ valid_turfs.Add(potential_turf)
+
+ var/turf/T = get_turf(src)
+ var/turf/target_turf = pick(valid_turfs)
+
+ if(!target_turf)
+ to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to."))
+ return FALSE
+
+ var/datum/effect/effect/system/spark_spread/s1 = new /datum/effect/effect/system/spark_spread
+ s1.set_up(5, 1, T)
+ var/datum/effect/effect/system/spark_spread/s2 = new /datum/effect/effect/system/spark_spread
+ s2.set_up(5, 1, target_turf)
+
+
+ T.visible_message(span("notice", "\The [src] vanishes!"))
+ s1.start()
+
+ forceMove(target_turf)
+ playsound(target_turf, 'sound/effects/phasein.ogg', 50, 1)
+ to_chat(src, span("notice", "You teleport to \the [target_turf]."))
+
+ target_turf.visible_message(span("warning", "\The [src] appears!"))
+ s2.start()
+
+ if(Adjacent(A))
+ attack_target(A)
+
+
+/mob/living/simple_mob/slime/xenobio/ruby
+ desc = "This slime has great physical strength."
+ color = "#FF3333"
+ slime_color = "ruby"
+ shiny = TRUE
+ glow_toggle = TRUE
+ coretype = /obj/item/slime_extract/ruby
+
+ description_info = "This slime is unnaturally stronger, allowing it to hit much harder, take less damage, and be stunned for less time. \
+ Their glomp attacks also send the victim flying."
+ player_msg = "Your attacks knock back the target a fair distance.
\
+ You also hit harder, take less damage, and stuns affect you for less time."
+
+ melee_attack_delay = 1 SECOND
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/dark_purple,
+ /mob/living/simple_mob/slime/xenobio/dark_purple,
+ /mob/living/simple_mob/slime/xenobio/ruby,
+ /mob/living/simple_mob/slime/xenobio/ruby
+ )
+
+/mob/living/simple_mob/slime/xenobio/ruby/Initialize()
+ add_modifier(/datum/modifier/slime_strength, null, src) // Slime is always swole.
+ return ..()
+
+/mob/living/simple_mob/slime/xenobio/ruby/apply_melee_effects(atom/A)
+ ..()
+
+ if(isliving(A) && a_intent == I_HURT)
+ var/mob/living/L = A
+ if(L.mob_size <= MOB_MEDIUM)
+ visible_message(span("danger", "\The [src] sends \the [L] flying with the impact!"))
+ playsound(src, "punch", 50, 1)
+ L.Weaken(1)
+ var/throwdir = get_dir(src, L)
+ L.throw_at(get_edge_target_turf(L, throwdir), 3, 1, src)
+ else
+ to_chat(L, span("warning", "\The [src] hits you with incredible force, but you remain in place."))
+
+
+/mob/living/simple_mob/slime/xenobio/amber
+ desc = "This slime seems to be an expert in the culinary arts, as they create their own food to share with others. \
+ They would probably be very important to other slimes, if the other colors didn't try to kill them."
+ color = "#FFBB00"
+ slime_color = "amber"
+ shiny = TRUE
+ glow_toggle = TRUE
+ coretype = /obj/item/slime_extract/amber
+
+ description_info = "This slime feeds nearby entities passively while it is alive. This can cause uncontrollable \
+ slime growth and reproduction if not kept in check. The amber slime cannot feed itself, but can be fed by other amber slimes."
+ player_msg = "You passively provide nutrition to nearby entities."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/silver,
+ /mob/living/simple_mob/slime/xenobio/silver,
+ /mob/living/simple_mob/slime/xenobio/amber,
+ /mob/living/simple_mob/slime/xenobio/amber
+ )
+
+/mob/living/simple_mob/slime/xenobio/amber/handle_special()
+ if(stat != DEAD)
+ feed_aura()
+ ..()
+
+/mob/living/simple_mob/slime/xenobio/amber/proc/feed_aura()
+ for(var/mob/living/L in view(2, src))
+ if(L == src) // Don't feed themselves, or it is impossible to stop infinite slimes without killing all of the ambers.
+ continue
+ if(istype(L, /mob/living/simple_mob/slime/xenobio))
+ var/mob/living/simple_mob/slime/xenobio/X = L
+ X.adjust_nutrition(rand(15, 25))
+ if(ishuman(L))
+ var/mob/living/carbon/human/H = L
+ if(H.isSynthetic())
+ continue
+ H.nutrition = between(0, H.nutrition + rand(15, 25), 800)
+
+/mob/living/simple_mob/slime/xenobio/cerulean
+ desc = "This slime is generally superior in a wide range of attributes, compared to the common slime. The jack of all trades, but master of none."
+ color = "#4F7EAA"
+ slime_color = "cerulean"
+ coretype = /obj/item/slime_extract/cerulean
+
+ // Less than the specialized slimes, but higher than the rest.
+ maxHealth = 200
+ maxHealth_adult = 250
+
+ melee_damage_lower = 10
+ melee_damage_upper = 30
+
+ movement_cooldown = 0 // This actually isn't any faster due to AI limitations that hopefully the timer subsystem can fix in the future.
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/dark_blue,
+ /mob/living/simple_mob/slime/xenobio/dark_blue,
+ /mob/living/simple_mob/slime/xenobio/cerulean,
+ /mob/living/simple_mob/slime/xenobio/cerulean
+ )
+
+// Tier 4
+
+/mob/living/simple_mob/slime/xenobio/red
+ desc = "This slime is full of energy, and very aggressive. 'The red ones go faster.' seems to apply here."
+ color = "#FF3333"
+ slime_color = "red"
+ coretype = /obj/item/slime_extract/red
+ movement_cooldown = 0 // See above.
+
+ description_info = "This slime is faster than the others. Attempting to discipline this slime will always cause it to go rabid and berserk."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/red,
+ /mob/living/simple_mob/slime/xenobio/oil,
+ /mob/living/simple_mob/slime/xenobio/oil,
+ /mob/living/simple_mob/slime/xenobio/orange
+ )
+
+ ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime/red // Will enrage if disciplined.
+
+
+/mob/living/simple_mob/slime/xenobio/green
+ desc = "This slime is radioactive."
+ color = "#14FF20"
+ slime_color = "green"
+ coretype = /obj/item/slime_extract/green
+ glow_toggle = TRUE
+ reagent_injected = "radium"
+ var/rads = 25
+
+ description_info = "This slime will irradiate anything nearby passively, and will inject radium on attack. \
+ A radsuit or other thick and radiation-hardened armor can protect from this. It will only radiate while alive."
+ player_msg = "You passively irradiate your surroundings.
\
+ You also inject radium on attack."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/purple,
+ /mob/living/simple_mob/slime/xenobio/green,
+ /mob/living/simple_mob/slime/xenobio/emerald,
+ /mob/living/simple_mob/slime/xenobio/emerald
+ )
+
+/mob/living/simple_mob/slime/xenobio/green/handle_special()
+ if(stat != DEAD)
+ irradiate()
+ ..()
+
+/mob/living/simple_mob/slime/xenobio/green/proc/irradiate()
+ radiation_repository.radiate(src, rads)
+
+
+
+/mob/living/simple_mob/slime/xenobio/pink
+ desc = "This slime has regenerative properties."
+ color = "#FF0080"
+ slime_color = "pink"
+ coretype = /obj/item/slime_extract/pink
+ glow_toggle = TRUE
+
+ description_info = "This slime will passively heal nearby entities within two tiles, including itself. It will only do this while alive."
+ player_msg = "You passively heal yourself and nearby allies."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/blue,
+ /mob/living/simple_mob/slime/xenobio/light_pink,
+ /mob/living/simple_mob/slime/xenobio/light_pink,
+ /mob/living/simple_mob/slime/xenobio/pink
+ )
+
+/mob/living/simple_mob/slime/xenobio/pink/handle_special()
+ if(stat != DEAD)
+ heal_aura()
+ ..()
+
+/mob/living/simple_mob/slime/xenobio/pink/proc/heal_aura()
+ for(var/mob/living/L in view(src, 2))
+ if(L.stat == DEAD || !IIsAlly(L))
+ continue
+ L.add_modifier(/datum/modifier/aura/slime_heal, null, src)
+
+/datum/modifier/aura/slime_heal
+ name = "slime mending"
+ desc = "You feel somewhat gooy."
+ mob_overlay_state = "pink_sparkles"
+ stacks = MODIFIER_STACK_FORBID
+ aura_max_distance = 2
+
+ on_created_text = "Twinkling spores of goo surround you. It makes you feel healthier."
+ on_expired_text = "The spores of goo have faded, although you feel much healthier than before."
+
+/datum/modifier/aura/slime_heal/tick()
+ if(holder.stat == DEAD)
+ expire()
+
+ if(ishuman(holder)) // Robolimbs need this code sadly.
+ var/mob/living/carbon/human/H = holder
+ for(var/obj/item/organ/external/E in H.organs)
+ var/obj/item/organ/external/O = E
+ O.heal_damage(2, 2, 0, 1)
+ else
+ holder.adjustBruteLoss(-2)
+ holder.adjustFireLoss(-2)
+
+ holder.adjustToxLoss(-2)
+ holder.adjustOxyLoss(-2)
+ holder.adjustCloneLoss(-1)
+
+
+/mob/living/simple_mob/slime/xenobio/gold
+ desc = "This slime absorbs energy, and cannot be stunned by normal means."
+ color = "#EEAA00"
+ shiny = TRUE
+ slime_color = "gold"
+ coretype = /obj/item/slime_extract/gold
+ description_info = "This slime is immune to the slimebaton and taser, and will actually charge the slime, however it will still discipline the slime."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/metal,
+ /mob/living/simple_mob/slime/xenobio/gold,
+ /mob/living/simple_mob/slime/xenobio/sapphire,
+ /mob/living/simple_mob/slime/xenobio/sapphire
+ )
+
+/mob/living/simple_mob/slime/xenobio/gold/slimebatoned(mob/living/user, amount)
+ power_charge = between(0, power_charge + amount, 10)
+
+/mob/living/simple_mob/slime/xenobio/gold/get_description_interaction() // So it doesn't say to use a baton on them.
+ return list()
+
+
+// Tier 5
+
+/mob/living/simple_mob/slime/xenobio/oil
+ desc = "This slime is explosive and volatile. Smoking near it is probably a bad idea."
+ color = "#333333"
+ slime_color = "oil"
+ shiny = TRUE
+ coretype = /obj/item/slime_extract/oil
+
+ description_info = "If this slime suffers damage from a fire or heat based source, or if it is caught inside \
+ an explosion, it will explode. Oil slimes will also suicide-bomb themselves when fighting something that is not a monkey or slime."
+ player_msg = "You will explode if struck by a burning attack, or if you hit an enemy with a melee attack that is not a monkey or another slime."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/oil,
+ /mob/living/simple_mob/slime/xenobio/oil,
+ /mob/living/simple_mob/slime/xenobio/red,
+ /mob/living/simple_mob/slime/xenobio/red
+ )
+
+/mob/living/simple_mob/slime/xenobio/oil/proc/explode()
+ if(stat != DEAD)
+ explosion(src.loc, 0, 2, 4) // A bit weaker since the suicide charger tended to gib the poor sod being targeted.
+ if(src) // Delete ourselves if the explosion didn't do it.
+ qdel(src)
+
+/mob/living/simple_mob/slime/xenobio/oil/apply_melee_effects(atom/A)
+ if(isliving(A))
+ var/mob/living/L = A
+ if(ishuman(L))
+ var/mob/living/carbon/human/H = A
+ if(istype(H.species, /datum/species/monkey))
+ return ..()// Don't blow up when just eatting monkeys.
+
+ else if(isslime(L))
+ return ..()
+
+ // Otherwise blow ourselves up.
+ say(pick("Sacrifice...!", "Sssss...", "Boom...!"))
+ set_AI_busy(TRUE)
+ sleep(2 SECONDS)
+ log_and_message_admins("[src] has suicide-bombed themselves while trying to kill \the [L].")
+ explode()
+
+ return ..()
+
+/mob/living/simple_mob/slime/xenobio/oil/ex_act(severity)
+ log_and_message_admins("[src] exploded due to a chain reaction with another explosion.")
+ explode()
+
+/mob/living/simple_mob/slime/xenobio/oil/fire_act(datum/gas_mixture/air, temperature, volume)
+ log_and_message_admins("[src] exploded due to exposure to fire.")
+ explode()
+
+/mob/living/simple_mob/slime/xenobio/oil/bullet_act(obj/item/projectile/P, def_zone)
+ if(P.damage_type && P.damage_type == BURN && P.damage) // Most bullets won't trigger the explosion, as a mercy towards Security.
+ log_and_message_admins("[src] exploded due to bring hit by a burning projectile[P.firer ? " by [key_name(P.firer)]" : ""].")
+ explode()
+ else
+ ..()
+
+/mob/living/simple_mob/slime/xenobio/oil/attackby(obj/item/weapon/W, mob/living/user)
+ if(istype(W) && W.force && W.damtype == BURN)
+ log_and_message_admins("[src] exploded due to being hit with a burning weapon ([W]) by [key_name(user)].")
+ explode()
+ else
+ ..()
+
+
+/mob/living/simple_mob/slime/xenobio/sapphire
+ desc = "This slime seems a bit brighter than the rest, both figuratively and literally."
+ color = "#2398FF"
+ slime_color = "sapphire"
+ shiny = TRUE
+ glow_toggle = TRUE
+ coretype = /obj/item/slime_extract/sapphire
+ ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime/sapphire
+
+ description_info = "This slime uses more robust tactics when fighting and won't hold back, so it is dangerous to be alone \
+ with one if hostile, and especially dangerous if they outnumber you."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/sapphire,
+ /mob/living/simple_mob/slime/xenobio/sapphire,
+ /mob/living/simple_mob/slime/xenobio/gold,
+ /mob/living/simple_mob/slime/xenobio/gold
+ )
+
+
+/mob/living/simple_mob/slime/xenobio/emerald
+ desc = "This slime is faster than usual, even more so than the red slimes."
+ color = "#22FF22"
+ shiny = TRUE
+ glow_toggle = TRUE
+ slime_color = "emerald"
+ coretype = /obj/item/slime_extract/emerald
+
+ description_info = "This slime will make everything around it, and itself, faster for a few seconds, if close by."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/green,
+ /mob/living/simple_mob/slime/xenobio/green,
+ /mob/living/simple_mob/slime/xenobio/emerald,
+ /mob/living/simple_mob/slime/xenobio/emerald
+ )
+
+/mob/living/simple_mob/slime/xenobio/emerald/handle_special()
+ if(stat != DEAD)
+ zoom_aura()
+ ..()
+
+/mob/living/simple_mob/slime/xenobio/emerald/proc/zoom_aura()
+ for(var/mob/living/L in view(src, 2))
+ if(L.stat == DEAD || !IIsAlly(L))
+ continue
+ L.add_modifier(/datum/modifier/technomancer/haste, 5 SECONDS, src)
+
+
+/mob/living/simple_mob/slime/xenobio/light_pink
+ desc = "This slime seems a lot more peaceful than the others."
+ color = "#FF8888"
+ slime_color = "light pink"
+ coretype = /obj/item/slime_extract/light_pink
+
+ description_info = "This slime is effectively always disciplined initially."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/pink,
+ /mob/living/simple_mob/slime/xenobio/pink,
+ /mob/living/simple_mob/slime/xenobio/light_pink,
+ /mob/living/simple_mob/slime/xenobio/light_pink
+ )
+
+ ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime/light_pink
+
+// Special
+/mob/living/simple_mob/slime/xenobio/rainbow
+ desc = "This slime changes colors constantly."
+ color = null // Uses a special icon_state.
+ slime_color = "rainbow"
+ coretype = /obj/item/slime_extract/rainbow
+ icon_state_override = "rainbow"
+ unity = TRUE
+
+ description_info = "This slime is considered to be the same color as all other slime colors at the same time for the purposes of \
+ other slimes being friendly to them, and therefore will never be harmed by another slime. \
+ Attacking this slime will provoke the wrath of all slimes within range."
+ player_msg = "You are considered to be the same color as every slime, \
+ meaning that you are considered an ally to all slimes."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/rainbow,
+ /mob/living/simple_mob/slime/xenobio/rainbow,
+ /mob/living/simple_mob/slime/xenobio/rainbow,
+ /mob/living/simple_mob/slime/xenobio/rainbow
+ )
+
+/mob/living/simple_mob/slime/xenobio/rainbow/Initialize()
+ unify()
+ return ..()
+
+// The RD's pet slime.
+/mob/living/simple_mob/slime/xenobio/rainbow/kendrick
+ name = "Kendrick"
+ desc = "The Research Director's pet slime. It shifts colors constantly."
+ rainbow_core_candidate = FALSE
+ // Doing pacify() in initialize() won't actually pacify the AI due to the ai_holder not existing due to parent initialize() not being called yet.
+ // Instead lets just give them an ai_holder that does that for us.
+ ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime/passive
+
+/mob/living/simple_mob/slime/xenobio/rainbow/kendrick/Initialize()
+ pacify() // So the physical mob also gets made harmless.
return ..()
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/xenobio.dm b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/xenobio.dm
index 582e2bf20a..8103abf0d8 100644
--- a/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/xenobio.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/xenobio.dm
@@ -1,276 +1,278 @@
-// These slimes have the mechanics xenobiologists care about, such as reproduction, mutating into new colors, and being able to submit through fear.
-
-/mob/living/simple_mob/slime/xenobio
- desc = "The most basic of slimes. The grey slime has no remarkable qualities, however it remains one of the most useful colors for scientists."
- layer = MOB_LAYER + 1 // Need them on top of other mobs or it looks weird when consuming something.
- ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime // This should never be changed for xenobio slimes.
- var/is_adult = FALSE // Slimes turn into adults when fed enough. Adult slimes are somewhat stronger, and can reproduce if fed enough.
- var/maxHealth_adult = 200
- var/power_charge = 0 // Disarm attacks can shock someone if high/lucky enough.
- var/mob/living/victim = null // the person the slime is currently feeding on
- var/rainbow_core_candidate = TRUE // If false, rainbow cores cannot make this type randomly.
- var/mutation_chance = 25 // Odds of spawning as a new color when reproducing. Can be modified by certain xenobio products. Carried across generations of slimes.
- var/list/slime_mutation = list(
- /mob/living/simple_mob/slime/xenobio/orange,
- /mob/living/simple_mob/slime/xenobio/metal,
- /mob/living/simple_mob/slime/xenobio/blue,
- /mob/living/simple_mob/slime/xenobio/purple
- )
- var/amount_grown = 0 // controls how long the slime has been overfed, if 10, grows or reproduces
- var/number = 0 // This is used to make the slime semi-unique for indentification.
- var/harmless = FALSE // Set to true when pacified. Makes the slime harmless, not get hungry, and not be able to grow/reproduce.
-
-/mob/living/simple_mob/slime/xenobio/initialize(mapload, var/mob/living/simple_mob/slime/xenobio/my_predecessor)
- ASSERT(ispath(ai_holder_type, /datum/ai_holder/simple_mob/xenobio_slime))
- number = rand(1, 1000)
- update_name()
-
- . = ..() // This will make the AI and do the other mob constructor things. It will also return the default hint at the end.
-
- if(my_predecessor)
- inherit_information(my_predecessor)
-
-/mob/living/simple_mob/slime/xenobio/Destroy()
- if(victim)
- stop_consumption() // Unbuckle us from our victim.
- return ..()
-
-// Called when a slime makes another slime by splitting. The predecessor slime will be deleted shortly afterwards.
-/mob/living/simple_mob/slime/xenobio/proc/inherit_information(var/mob/living/simple_mob/slime/xenobio/predecessor)
- if(!predecessor)
- return
-
- var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
- var/datum/ai_holder/simple_mob/xenobio_slime/previous_AI = predecessor.ai_holder
- ASSERT(istype(AI))
- ASSERT(istype(previous_AI))
-
- // Now to transfer the information.
- // Newly made slimes are bit more rebellious than their predecessors, but they also somewhat forget the atrocities the xenobiologist may have done.
- AI.discipline = max(previous_AI.discipline - 1, 0)
- AI.obedience = max(previous_AI.obedience - 1, 0)
- AI.resentment = max(previous_AI.resentment - 1, 0)
- AI.rabid = previous_AI.rabid
-
-/mob/living/simple_mob/slime/xenobio/update_icon()
- icon_living = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_adult ? "adult" : "baby"][victim ? " eating" : ""]"
- icon_dead = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_adult ? "adult" : "baby"] dead"
- icon_rest = icon_dead
- ..() // This will apply the correct icon_state and do the other overlay-related things.
-
-
-/mob/living/simple_mob/slime/xenobio/handle_special()
- if(stat != DEAD)
- handle_nutrition()
-
- if(victim)
- handle_consumption()
-
- handle_stuttering() // ??
-
- ..()
-
-/mob/living/simple_mob/slime/xenobio/examine(mob/user)
- ..()
- if(hat)
- to_chat(user, "It is wearing \a [hat].")
-
- if(stat == DEAD)
- to_chat(user, "It appears to be dead.")
- else if(incapacitated(INCAPACITATION_DISABLED))
- to_chat(user, "It appears to be incapacitated.")
- else if(harmless)
- to_chat(user, "It appears to have been pacified.")
- else
- if(has_AI())
- var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
- if(AI.rabid)
- to_chat(user, "It seems very, very angry and upset.")
- else if(AI.obedience >= 5)
- to_chat(user, "It looks rather obedient.")
- else if(AI.discipline)
- to_chat(user, "It has been subjugated by force, at least for now.")
-
-/mob/living/simple_mob/slime/xenobio/proc/make_adult()
- if(is_adult)
- return
-
- is_adult = TRUE
- melee_damage_lower = round(melee_damage_lower * 2) // 20
- melee_damage_upper = round(melee_damage_upper * 2) // 30
- maxHealth = maxHealth_adult
- amount_grown = 0
- update_icon()
- update_name()
-
-/mob/living/simple_mob/slime/xenobio/proc/update_name()
- if(harmless) // Docile slimes are generally named, so we shouldn't mess with it.
- return
- name = "[slime_color] [is_adult ? "adult" : "baby"] [initial(name)] ([number])"
- real_name = name
-
-/mob/living/simple_mob/slime/xenobio/update_mood()
- var/old_mood = mood
- if(incapacitated(INCAPACITATION_DISABLED))
- mood = "sad"
- else if(harmless)
- mood = ":33"
- else if(has_AI())
- var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
- if(AI.rabid)
- mood = "angry"
- else if(AI.target)
- mood = "mischevous"
- else if(AI.discipline)
- mood = "pout"
- else
- mood = ":3"
- else
- mood = ":3"
-
- if(old_mood != mood)
- update_icon()
-
-/mob/living/simple_mob/slime/xenobio/proc/enrage()
- if(harmless)
- return
- if(has_AI())
- var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
- AI.enrage()
-
-/mob/living/simple_mob/slime/xenobio/proc/pacify()
- harmless = TRUE
- if(has_AI())
- var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
- AI.pacify()
-
- faction = "neutral"
-
- // If for whatever reason the mob AI (or player) decides to try to attack something anyways.
- melee_damage_upper = 0
- melee_damage_lower = 0
-
- update_mood()
-
-
-// These are verbs so that player slimes can evolve/split.
-/mob/living/simple_mob/slime/xenobio/verb/evolve()
- set category = "Slime"
- set desc = "This will let you evolve from baby to adult slime."
-
- if(stat)
- to_chat(src, span("warning", "I must be conscious to do this..."))
- return
-
- if(harmless)
- to_chat(src, span("warning", "I have been pacified. I cannot evolve..."))
- return
-
- if(!is_adult)
- if(amount_grown >= 10)
- make_adult()
- else
- to_chat(src, span("warning", "I am not ready to evolve yet..."))
- else
- to_chat(src, span("warning", "I have already evolved..."))
-
-
-/mob/living/simple_mob/slime/xenobio/verb/reproduce()
- set category = "Slime"
- set desc = "This will make you split into four new slimes."
-
- if(stat)
- to_chat(src, span("warning", "I must be conscious to do this..."))
- return
-
- if(harmless)
- to_chat(src, span("warning", "I have been pacified. I cannot reproduce..."))
- return
-
- if(is_adult)
- if(amount_grown >= 10)
- // Check if there's enough 'room' to split.
- var/list/nearby_things = orange(1, src)
- var/free_tiles = 0
- for(var/turf/T in nearby_things)
- var/free = TRUE
- if(T.density) // No walls.
- continue
- for(var/atom/movable/AM in T)
- if(AM.density)
- free = FALSE
- break
-
- if(free)
- free_tiles++
-
- if(free_tiles < 3) // Three free tiles are needed, as four slimes are made and the 4th tile is from the center tile that the current slime occupies.
- to_chat(src, span("warning", "It is too cramped here to reproduce..."))
- return
-
- var/list/babies = list()
- for(var/i = 1 to 4)
- babies.Add(make_new_slime())
-
- var/mob/living/simple_mob/slime/new_slime = pick(babies)
- new_slime.universal_speak = universal_speak
- if(src.mind)
- src.mind.transfer_to(new_slime)
- else
- new_slime.key = src.key
- qdel(src)
- else
- to_chat(src, span("warning", "I am not ready to reproduce yet..."))
- else
- to_chat(src, span("warning", "I have not evolved enough to reproduce yet..."))
-
-// Used when reproducing or dying.
-/mob/living/simple_mob/slime/xenobio/proc/make_new_slime(var/desired_type)
- var/t = src.type
- if(desired_type)
- t = desired_type
- if(prob(mutation_chance / 10))
- t = /mob/living/simple_mob/slime/xenobio/rainbow
- else if(prob(mutation_chance) && slime_mutation.len)
- t = slime_mutation[rand(1, slime_mutation.len)]
- var/mob/living/simple_mob/slime/xenobio/baby = new t(loc, src)
-
- // Handle 'inheriting' from parent slime.
- baby.mutation_chance = mutation_chance
- baby.power_charge = round(power_charge / 4)
-
- if(!istype(baby, /mob/living/simple_mob/slime/xenobio/rainbow))
- baby.unity = unity
- baby.faction = faction
- baby.friends = friends.Copy()
-
- step_away(baby, src)
- return baby
-
-/mob/living/simple_mob/slime/xenobio/get_description_interaction()
- var/list/results = list()
-
- if(!stat)
- results += "[desc_panel_image("slimebaton")]to stun the slime, if it's being bad."
-
- results += ..()
-
- return results
-
-/mob/living/simple_mob/slime/xenobio/get_description_info()
- var/list/lines = list()
- var/intro_line = "Slimes are generally the test subjects of Xenobiology, with different colors having different properties. \
- They can be extremely dangerous if not handled properly."
- lines.Add(intro_line)
- lines.Add(null) // To pad the line breaks.
-
- var/list/rewards = list()
- for(var/potential_color in slime_mutation)
- var/mob/living/simple_mob/slime/S = potential_color
- rewards.Add(initial(S.slime_color))
- var/reward_line = "This color of slime can mutate into [english_list(rewards)] colors, when it reproduces. It will do so when it has eatten enough."
- lines.Add(reward_line)
- lines.Add(null)
-
- lines.Add(description_info)
- return lines.Join("\n")
+// These slimes have the mechanics xenobiologists care about, such as reproduction, mutating into new colors, and being able to submit through fear.
+
+/mob/living/simple_mob/slime/xenobio
+ desc = "The most basic of slimes. The grey slime has no remarkable qualities, however it remains one of the most useful colors for scientists."
+ layer = MOB_LAYER + 1 // Need them on top of other mobs or it looks weird when consuming something.
+ ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime // This should never be changed for xenobio slimes.
+ var/is_adult = FALSE // Slimes turn into adults when fed enough. Adult slimes are somewhat stronger, and can reproduce if fed enough.
+ var/maxHealth_adult = 200
+ var/power_charge = 0 // Disarm attacks can shock someone if high/lucky enough.
+ var/mob/living/victim = null // the person the slime is currently feeding on
+ var/rainbow_core_candidate = TRUE // If false, rainbow cores cannot make this type randomly.
+ var/mutation_chance = 25 // Odds of spawning as a new color when reproducing. Can be modified by certain xenobio products. Carried across generations of slimes.
+ var/list/slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/orange,
+ /mob/living/simple_mob/slime/xenobio/metal,
+ /mob/living/simple_mob/slime/xenobio/blue,
+ /mob/living/simple_mob/slime/xenobio/purple
+ )
+ var/amount_grown = 0 // controls how long the slime has been overfed, if 10, grows or reproduces
+ var/number = 0 // This is used to make the slime semi-unique for indentification.
+ var/harmless = FALSE // Set to true when pacified. Makes the slime harmless, not get hungry, and not be able to grow/reproduce.
+
+/mob/living/simple_mob/slime/xenobio/Initialize(mapload, var/mob/living/simple_mob/slime/xenobio/my_predecessor)
+ ASSERT(ispath(ai_holder_type, /datum/ai_holder/simple_mob/xenobio_slime))
+ number = rand(1, 1000)
+ update_name()
+
+ . = ..() // This will make the AI and do the other mob constructor things. It will also return the default hint at the end.
+
+ if(my_predecessor)
+ inherit_information(my_predecessor)
+
+
+/mob/living/simple_mob/slime/xenobio/Destroy()
+ if(victim)
+ stop_consumption() // Unbuckle us from our victim.
+ return ..()
+
+// Called when a slime makes another slime by splitting. The predecessor slime will be deleted shortly afterwards.
+/mob/living/simple_mob/slime/xenobio/proc/inherit_information(var/mob/living/simple_mob/slime/xenobio/predecessor)
+ if(!predecessor)
+ return
+
+ var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
+ var/datum/ai_holder/simple_mob/xenobio_slime/previous_AI = predecessor.ai_holder
+ ASSERT(istype(AI))
+ ASSERT(istype(previous_AI))
+
+ // Now to transfer the information.
+ // Newly made slimes are bit more rebellious than their predecessors, but they also somewhat forget the atrocities the xenobiologist may have done.
+ AI.discipline = max(previous_AI.discipline - 1, 0)
+ AI.obedience = max(previous_AI.obedience - 1, 0)
+ AI.resentment = max(previous_AI.resentment - 1, 0)
+ AI.rabid = previous_AI.rabid
+
+
+/mob/living/simple_mob/slime/xenobio/update_icon()
+ icon_living = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_adult ? "adult" : "baby"][victim ? " eating" : ""]"
+ icon_dead = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_adult ? "adult" : "baby"] dead"
+ icon_rest = icon_dead
+ ..() // This will apply the correct icon_state and do the other overlay-related things.
+
+
+/mob/living/simple_mob/slime/xenobio/handle_special()
+ if(stat != DEAD)
+ handle_nutrition()
+
+ if(victim)
+ handle_consumption()
+
+ handle_stuttering() // ??
+
+ ..()
+
+/mob/living/simple_mob/slime/xenobio/examine(mob/user)
+ ..()
+ if(hat)
+ to_chat(user, "It is wearing \a [hat].")
+
+ if(stat == DEAD)
+ to_chat(user, "It appears to be dead.")
+ else if(incapacitated(INCAPACITATION_DISABLED))
+ to_chat(user, "It appears to be incapacitated.")
+ else if(harmless)
+ to_chat(user, "It appears to have been pacified.")
+ else
+ if(has_AI())
+ var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
+ if(AI.rabid)
+ to_chat(user, "It seems very, very angry and upset.")
+ else if(AI.obedience >= 5)
+ to_chat(user, "It looks rather obedient.")
+ else if(AI.discipline)
+ to_chat(user, "It has been subjugated by force, at least for now.")
+
+/mob/living/simple_mob/slime/xenobio/proc/make_adult()
+ if(is_adult)
+ return
+
+ is_adult = TRUE
+ melee_damage_lower = round(melee_damage_lower * 2) // 20
+ melee_damage_upper = round(melee_damage_upper * 2) // 30
+ maxHealth = maxHealth_adult
+ amount_grown = 0
+ update_icon()
+ update_name()
+
+/mob/living/simple_mob/slime/xenobio/proc/update_name()
+ if(harmless) // Docile slimes are generally named, so we shouldn't mess with it.
+ return
+ name = "[slime_color] [is_adult ? "adult" : "baby"] [initial(name)] ([number])"
+ real_name = name
+
+/mob/living/simple_mob/slime/xenobio/update_mood()
+ var/old_mood = mood
+ if(incapacitated(INCAPACITATION_DISABLED))
+ mood = "sad"
+ else if(harmless)
+ mood = ":33"
+ else if(has_AI())
+ var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
+ if(AI.rabid)
+ mood = "angry"
+ else if(AI.target)
+ mood = "mischevous"
+ else if(AI.discipline)
+ mood = "pout"
+ else
+ mood = ":3"
+ else
+ mood = ":3"
+
+ if(old_mood != mood)
+ update_icon()
+
+/mob/living/simple_mob/slime/xenobio/proc/enrage()
+ if(harmless)
+ return
+ if(has_AI())
+ var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
+ AI.enrage()
+
+/mob/living/simple_mob/slime/xenobio/proc/pacify()
+ harmless = TRUE
+ if(has_AI())
+ var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
+ AI.pacify()
+
+ faction = "neutral"
+
+ // If for whatever reason the mob AI (or player) decides to try to attack something anyways.
+ melee_damage_upper = 0
+ melee_damage_lower = 0
+
+ update_mood()
+
+
+// These are verbs so that player slimes can evolve/split.
+/mob/living/simple_mob/slime/xenobio/verb/evolve()
+ set category = "Slime"
+ set desc = "This will let you evolve from baby to adult slime."
+
+ if(stat)
+ to_chat(src, span("warning", "I must be conscious to do this..."))
+ return
+
+ if(harmless)
+ to_chat(src, span("warning", "I have been pacified. I cannot evolve..."))
+ return
+
+ if(!is_adult)
+ if(amount_grown >= 10)
+ make_adult()
+ else
+ to_chat(src, span("warning", "I am not ready to evolve yet..."))
+ else
+ to_chat(src, span("warning", "I have already evolved..."))
+
+
+/mob/living/simple_mob/slime/xenobio/verb/reproduce()
+ set category = "Slime"
+ set desc = "This will make you split into four new slimes."
+
+ if(stat)
+ to_chat(src, span("warning", "I must be conscious to do this..."))
+ return
+
+ if(harmless)
+ to_chat(src, span("warning", "I have been pacified. I cannot reproduce..."))
+ return
+
+ if(is_adult)
+ if(amount_grown >= 10)
+ // Check if there's enough 'room' to split.
+ var/list/nearby_things = orange(1, src)
+ var/free_tiles = 0
+ for(var/turf/T in nearby_things)
+ var/free = TRUE
+ if(T.density) // No walls.
+ continue
+ for(var/atom/movable/AM in T)
+ if(AM.density)
+ free = FALSE
+ break
+
+ if(free)
+ free_tiles++
+
+ if(free_tiles < 3) // Three free tiles are needed, as four slimes are made and the 4th tile is from the center tile that the current slime occupies.
+ to_chat(src, span("warning", "It is too cramped here to reproduce..."))
+ return
+
+ var/list/babies = list()
+ for(var/i = 1 to 4)
+ babies.Add(make_new_slime())
+
+ var/mob/living/simple_mob/slime/new_slime = pick(babies)
+ new_slime.universal_speak = universal_speak
+ if(src.mind)
+ src.mind.transfer_to(new_slime)
+ else
+ new_slime.key = src.key
+ qdel(src)
+ else
+ to_chat(src, span("warning", "I am not ready to reproduce yet..."))
+ else
+ to_chat(src, span("warning", "I have not evolved enough to reproduce yet..."))
+
+// Used when reproducing or dying.
+/mob/living/simple_mob/slime/xenobio/proc/make_new_slime(var/desired_type)
+ var/t = src.type
+ if(desired_type)
+ t = desired_type
+ if(prob(mutation_chance / 10))
+ t = /mob/living/simple_mob/slime/xenobio/rainbow
+ else if(prob(mutation_chance) && slime_mutation.len)
+ t = slime_mutation[rand(1, slime_mutation.len)]
+ var/mob/living/simple_mob/slime/xenobio/baby = new t(loc, src)
+
+ // Handle 'inheriting' from parent slime.
+ baby.mutation_chance = mutation_chance
+ baby.power_charge = round(power_charge / 4)
+
+ if(!istype(baby, /mob/living/simple_mob/slime/xenobio/rainbow))
+ baby.unity = unity
+ baby.faction = faction
+ baby.friends = friends.Copy()
+
+ step_away(baby, src)
+ return baby
+
+/mob/living/simple_mob/slime/xenobio/get_description_interaction()
+ var/list/results = list()
+
+ if(!stat)
+ results += "[desc_panel_image("slimebaton")]to stun the slime, if it's being bad."
+
+ results += ..()
+
+ return results
+
+/mob/living/simple_mob/slime/xenobio/get_description_info()
+ var/list/lines = list()
+ var/intro_line = "Slimes are generally the test subjects of Xenobiology, with different colors having different properties. \
+ They can be extremely dangerous if not handled properly."
+ lines.Add(intro_line)
+ lines.Add(null) // To pad the line breaks.
+
+ var/list/rewards = list()
+ for(var/potential_color in slime_mutation)
+ var/mob/living/simple_mob/slime/S = potential_color
+ rewards.Add(initial(S.slime_color))
+ var/reward_line = "This color of slime can mutate into [english_list(rewards)] colors, when it reproduces. It will do so when it has eatten enough."
+ lines.Add(reward_line)
+ lines.Add(null)
+
+ lines.Add(description_info)
+ return lines.Join("\n")
diff --git a/code/modules/mob/new_player/login.dm b/code/modules/mob/new_player/login.dm
index 34a540ac45..aef78c28ec 100644
--- a/code/modules/mob/new_player/login.dm
+++ b/code/modules/mob/new_player/login.dm
@@ -7,7 +7,7 @@ var/obj/effect/lobby_image = new /obj/effect/lobby_image
desc = "How are you reading this?"
screen_loc = "1,1"
-/obj/effect/lobby_image/initialize()
+/obj/effect/lobby_image/Initialize()
icon = using_map.lobby_icon
var/known_icon_states = icon_states(icon)
for(var/lobby_screen in using_map.lobby_screens)
diff --git a/code/modules/multiz/hoist.dm b/code/modules/multiz/hoist.dm
index a1df9389ab..32e2ed9bb7 100644
--- a/code/modules/multiz/hoist.dm
+++ b/code/modules/multiz/hoist.dm
@@ -100,7 +100,7 @@
var/obj/effect/hoist_hook/source_hook
description_info = "Click this to raise or lower the hoist, or to switch directions if it can't move any further. It can also be collapsed into a hoist kit."
-/obj/structure/hoist/initialize(mapload, ndir)
+/obj/structure/hoist/Initialize(mapload, ndir)
. = ..()
dir = ndir
var/turf/newloc = get_step(src, dir)
diff --git a/code/modules/multiz/structures.dm b/code/modules/multiz/structures.dm
index 118cb999de..c3f454f69c 100644
--- a/code/modules/multiz/structures.dm
+++ b/code/modules/multiz/structures.dm
@@ -17,7 +17,7 @@
var/const/climb_time = 2 SECONDS
-/obj/structure/ladder/initialize()
+/obj/structure/ladder/Initialize()
. = ..()
// the upper will connect to the lower
if(allowed_directions & DOWN) //we only want to do the top one, as it will initialize the ones before it.
@@ -132,7 +132,7 @@
anchored = 1
layer = 2.4 // Above turf, but they're sort of the floor, so below objects.
-/obj/structure/stairs/initialize()
+/obj/structure/stairs/Initialize()
. = ..()
for(var/turf/turf in locs)
var/turf/simulated/open/above = GetAbove(turf)
diff --git a/code/modules/multiz/turf.dm b/code/modules/multiz/turf.dm
index e2fd3381e4..b3ea2c17ff 100644
--- a/code/modules/multiz/turf.dm
+++ b/code/modules/multiz/turf.dm
@@ -34,7 +34,7 @@
..()
update()
-/turf/simulated/open/initialize()
+/turf/simulated/open/Initialize()
. = ..()
ASSERT(HasBelow(z))
update()
diff --git a/code/modules/overmap/ships/computers/engine_control.dm b/code/modules/overmap/ships/computers/engine_control.dm
index 265e560399..85ac9cf993 100644
--- a/code/modules/overmap/ships/computers/engine_control.dm
+++ b/code/modules/overmap/ships/computers/engine_control.dm
@@ -8,7 +8,7 @@
var/list/engines = list()
var/obj/effect/map/ship/linked
-/obj/machinery/computer/engines/initialize()
+/obj/machinery/computer/engines/Initialize()
. = ..()
linked = map_sectors["[z]"]
if (linked)
diff --git a/code/modules/overmap/ships/computers/helm.dm b/code/modules/overmap/ships/computers/helm.dm
index 2c198c6a3c..58048bac5f 100644
--- a/code/modules/overmap/ships/computers/helm.dm
+++ b/code/modules/overmap/ships/computers/helm.dm
@@ -10,7 +10,7 @@
var/dx //desitnation
var/dy //coordinates
-/obj/machinery/computer/helm/initialize()
+/obj/machinery/computer/helm/Initialize()
. = ..()
linked = map_sectors["[z]"]
if (linked)
diff --git a/code/modules/overmap/ships/computers/shuttle.dm b/code/modules/overmap/ships/computers/shuttle.dm
index 16303509a8..8d6ecefcc7 100644
--- a/code/modules/overmap/ships/computers/shuttle.dm
+++ b/code/modules/overmap/ships/computers/shuttle.dm
@@ -8,7 +8,7 @@
var/obj/effect/map/destination //current destination
var/obj/effect/map/home //current destination
-/obj/machinery/computer/shuttle_control/explore/initialize()
+/obj/machinery/computer/shuttle_control/explore/Initialize()
. = ..()
home = map_sectors["[z]"]
shuttle_tag = "[shuttle_tag]-[z]"
diff --git a/code/modules/overmap/ships/engines/thermal.dm b/code/modules/overmap/ships/engines/thermal.dm
index 323bc82906..9c4af11cc6 100644
--- a/code/modules/overmap/ships/engines/thermal.dm
+++ b/code/modules/overmap/ships/engines/thermal.dm
@@ -53,7 +53,7 @@
var/effective_pressure = 3000
var/datum/ship_engine/thermal/controller
-/obj/machinery/atmospherics/unary/engine/initialize()
+/obj/machinery/atmospherics/unary/engine/Initialize()
. = ..()
controller = new(src)
diff --git a/code/modules/overmap/ships/ship.dm b/code/modules/overmap/ships/ship.dm
index b7adf7319a..d0761e4011 100644
--- a/code/modules/overmap/ships/ship.dm
+++ b/code/modules/overmap/ships/ship.dm
@@ -14,7 +14,7 @@
var/obj/machinery/computer/helm/nav_control
var/obj/machinery/computer/engines/eng_control
-/obj/effect/map/ship/initialize()
+/obj/effect/map/ship/Initialize()
. = ..()
for(var/obj/machinery/computer/engines/E in machines)
if (E.z == map_z)
diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm
index 44a2d1310b..d1effe7492 100644
--- a/code/modules/paperwork/filingcabinet.dm
+++ b/code/modules/paperwork/filingcabinet.dm
@@ -25,7 +25,7 @@
icon_state = "tallcabinet"
-/obj/structure/filingcabinet/initialize()
+/obj/structure/filingcabinet/Initialize()
for(var/obj/item/I in loc)
if(istype(I, /obj/item/weapon/paper) || istype(I, /obj/item/weapon/folder) || istype(I, /obj/item/weapon/photo) || istype(I, /obj/item/weapon/paper_bundle))
I.loc = src
diff --git a/code/modules/power/breaker_box.dm b/code/modules/power/breaker_box.dm
index 856697e033..cf38607a56 100644
--- a/code/modules/power/breaker_box.dm
+++ b/code/modules/power/breaker_box.dm
@@ -27,7 +27,7 @@
for(var/datum/nano_module/rcon/R in world)
R.FindDevices()
-/obj/machinery/power/breakerbox/initialize()
+/obj/machinery/power/breakerbox/Initialize()
. = ..()
default_apply_parts()
@@ -35,7 +35,7 @@
icon_state = "bbox_on"
// Enabled on server startup. Used in substations to keep them in bypass mode.
-/obj/machinery/power/breakerbox/activated/initialize()
+/obj/machinery/power/breakerbox/activated/Initialize()
. = ..()
set_state(1)
diff --git a/code/modules/power/cells/device_cells.dm b/code/modules/power/cells/device_cells.dm
index 9cacf67073..c7e1309101 100644
--- a/code/modules/power/cells/device_cells.dm
+++ b/code/modules/power/cells/device_cells.dm
@@ -20,7 +20,7 @@
maxcharge = 2400
charge_amount = 20
-/obj/item/weapon/cell/device/weapon/empty/initialize()
+/obj/item/weapon/cell/device/weapon/empty/Initialize()
. = ..()
charge = 0
update_icon()
diff --git a/code/modules/power/cells/power_cells.dm b/code/modules/power/cells/power_cells.dm
index cec7cef512..07eb9996a3 100644
--- a/code/modules/power/cells/power_cells.dm
+++ b/code/modules/power/cells/power_cells.dm
@@ -102,7 +102,7 @@
var/amount = 100
var/used = FALSE
-/obj/item/device/fbp_backup_cell/initialize()
+/obj/item/device/fbp_backup_cell/Initialize()
overlays += image(icon,"[icon_state]1")
/obj/item/device/fbp_backup_cell/attack(mob/living/M as mob, mob/user as mob)
diff --git a/code/modules/power/fusion/core/_core.dm b/code/modules/power/fusion/core/_core.dm
index 329170be44..b66941c915 100644
--- a/code/modules/power/fusion/core/_core.dm
+++ b/code/modules/power/fusion/core/_core.dm
@@ -27,12 +27,12 @@ var/list/fusion_cores = list()
/obj/machinery/power/fusion_core/mapped
anchored = 1
-/obj/machinery/power/fusion_core/initialize()
+/obj/machinery/power/fusion_core/Initialize()
. = ..()
fusion_cores += src
default_apply_parts()
-/obj/machinery/power/fusion_core/mapped/initialize()
+/obj/machinery/power/fusion_core/mapped/Initialize()
. = ..()
connect_to_network()
diff --git a/code/modules/power/fusion/fuel_assembly/fuel_assembly.dm b/code/modules/power/fusion/fuel_assembly/fuel_assembly.dm
index 26537f2bbc..57bf585e5b 100644
--- a/code/modules/power/fusion/fuel_assembly/fuel_assembly.dm
+++ b/code/modules/power/fusion/fuel_assembly/fuel_assembly.dm
@@ -17,7 +17,7 @@
fuel_colour = _colour
..(newloc)
-/obj/item/weapon/fuel_assembly/initialize()
+/obj/item/weapon/fuel_assembly/Initialize()
. = ..()
var/material/material = get_material_by_name(fuel_type)
if(istype(material))
diff --git a/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm b/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm
index 375af68696..d38fd76e86 100644
--- a/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm
+++ b/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm
@@ -7,7 +7,7 @@
circuit = /obj/item/weapon/circuitboard/fusion_fuel_compressor
-/obj/machinery/fusion_fuel_compressor/initialize()
+/obj/machinery/fusion_fuel_compressor/Initialize()
. = ..()
default_apply_parts()
diff --git a/code/modules/power/fusion/fuel_assembly/fuel_injector.dm b/code/modules/power/fusion/fuel_assembly/fuel_injector.dm
index 79794ff069..4711eab171 100644
--- a/code/modules/power/fusion/fuel_assembly/fuel_injector.dm
+++ b/code/modules/power/fusion/fuel_assembly/fuel_injector.dm
@@ -18,7 +18,7 @@ var/list/fuel_injectors = list()
var/injecting = 0
var/obj/item/weapon/fuel_assembly/cur_assembly
-/obj/machinery/fusion_fuel_injector/initialize()
+/obj/machinery/fusion_fuel_injector/Initialize()
. = ..()
fuel_injectors += src
default_apply_parts()
diff --git a/code/modules/power/fusion/gyrotron/gyrotron.dm b/code/modules/power/fusion/gyrotron/gyrotron.dm
index 23697d2449..539e9cbda6 100644
--- a/code/modules/power/fusion/gyrotron/gyrotron.dm
+++ b/code/modules/power/fusion/gyrotron/gyrotron.dm
@@ -20,7 +20,7 @@ var/list/gyrotrons = list()
anchored = 1
state = 2
-/obj/machinery/power/emitter/gyrotron/initialize()
+/obj/machinery/power/emitter/gyrotron/Initialize()
gyrotrons += src
active_power_usage = mega_energy * 50000
default_apply_parts()
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index 35a860ec1b..6563cb7fdb 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -110,7 +110,7 @@
var/temperature = 0 //The current temperature
var/overheating = 0 //if this gets high enough the generator explodes
-/obj/machinery/power/port_gen/pacman/initialize()
+/obj/machinery/power/port_gen/pacman/Initialize()
. = ..()
if(anchored)
connect_to_network()
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index ee9e7057da..3e5a3373ae 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -41,7 +41,7 @@
src.set_dir(turn(src.dir, 90))
return 1
-/obj/machinery/power/emitter/initialize()
+/obj/machinery/power/emitter/Initialize()
. = ..()
if(state == 2 && anchored)
connect_to_network()
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index 24d36506f0..d5cf8ef993 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -25,7 +25,7 @@ GLOBAL_LIST_EMPTY(solars_list)
/obj/machinery/power/solar/drain_power()
return -1
-/obj/machinery/power/solar/initialize(mapload, obj/item/solar_assembly/S)
+/obj/machinery/power/solar/Initialize(mapload, obj/item/solar_assembly/S)
. = ..()
Make(S)
connect_to_network()
@@ -290,7 +290,7 @@ GLOBAL_LIST_EMPTY(solars_list)
var/lastgen = 0
var/track = 0 // 0= off 1=timed 2=auto (tracker)
var/trackrate = 600 // 300-900 seconds
- var/nexttime = 0 // time for a panel to rotate of 1° in manual tracking
+ var/nexttime = 0 // time for a panel to rotate of 1� in manual tracking
var/obj/machinery/power/tracker/connected_tracker = null
var/list/connected_panels = list()
@@ -347,7 +347,7 @@ GLOBAL_LIST_EMPTY(solars_list)
updateDialog()
-/obj/machinery/power/solar_control/initialize()
+/obj/machinery/power/solar_control/Initialize()
. = ..()
if(!powernet) return
set_panels(cdir)
@@ -445,9 +445,9 @@ GLOBAL_LIST_EMPTY(solars_list)
connected_tracker.unset_control()
if(track==1 && trackrate) //manual tracking and set a rotation speed
- if(nexttime <= world.time) //every time we need to increase/decrease the angle by 1°...
+ if(nexttime <= world.time) //every time we need to increase/decrease the angle by 1�...
targetdir = (targetdir + trackrate/abs(trackrate) + 360) % 360 //... do it
- nexttime += 36000/abs(trackrate) //reset the counter for the next 1°
+ nexttime += 36000/abs(trackrate) //reset the counter for the next 1�
updateDialog()
diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm
index 5b614ce629..76029fd66c 100644
--- a/code/modules/power/tesla/coil.dm
+++ b/code/modules/power/tesla/coil.dm
@@ -25,7 +25,7 @@
..()
wires = new(src)
-/obj/machinery/power/tesla_coil/initialize()
+/obj/machinery/power/tesla_coil/Initialize()
. = ..()
default_apply_parts()
diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm
index fd548bdb81..e557bfce5a 100644
--- a/code/modules/power/tesla/energy_ball.dm
+++ b/code/modules/power/tesla/energy_ball.dm
@@ -27,7 +27,7 @@
..()
miniball = is_miniball
-/obj/singularity/energy_ball/initialize()
+/obj/singularity/energy_ball/Initialize()
. = ..()
if(!miniball)
set_light(10, 7, "#EEEEFF")
diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm
index 0a9c8f1a3e..71566d74e8 100644
--- a/code/modules/power/turbine.dm
+++ b/code/modules/power/turbine.dm
@@ -85,7 +85,7 @@
#define COMPFRICTION 5e5
#define COMPSTARTERLOAD 2800
-/obj/machinery/compressor/initialize()
+/obj/machinery/compressor/Initialize()
. = ..()
default_apply_parts()
gas_contained = new()
@@ -194,7 +194,7 @@
#define TURBGENQ 100000
#define TURBGENG 0.8
-/obj/machinery/power/turbine/initialize()
+/obj/machinery/power/turbine/Initialize()
. = ..()
default_apply_parts()
// The outlet is pointed at the direction of the turbine component
@@ -318,7 +318,7 @@
// Turbine Computer
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-/obj/machinery/computer/turbine_computer/initialize()
+/obj/machinery/computer/turbine_computer/Initialize()
. = ..()
return INITIALIZE_HINT_LATELOAD
diff --git a/code/modules/projectiles/projectile/arc.dm b/code/modules/projectiles/projectile/arc.dm
index 5606cbe9d5..ee12f4c8fb 100644
--- a/code/modules/projectiles/projectile/arc.dm
+++ b/code/modules/projectiles/projectile/arc.dm
@@ -15,7 +15,7 @@
var/fired_dir = null // Which direction was the projectile fired towards. Needed to invert the projectile turning based on if facing left or right.
var/obj/effect/projectile_shadow/shadow = null // Visual indicator for the projectile's 'true' position. Needed due to being bound to two dimensions in reality.
-/obj/item/projectile/arc/initialize()
+/obj/item/projectile/arc/Initialize()
shadow = new(get_turf(src))
return ..()
diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm
index d70e6e563d..7cc04c7251 100644
--- a/code/modules/recycling/conveyor2.dm
+++ b/code/modules/recycling/conveyor2.dm
@@ -23,7 +23,7 @@
id = "round_end_belt"
// create a conveyor
-/obj/machinery/conveyor/initialize(mapload, newdir, on = 0)
+/obj/machinery/conveyor/Initialize(mapload, newdir, on = 0)
. = ..()
if(newdir)
set_dir(newdir)
@@ -183,7 +183,7 @@
-/obj/machinery/conveyor_switch/initialize()
+/obj/machinery/conveyor_switch/Initialize()
..()
update()
return INITIALIZE_HINT_LATELOAD
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index 3e8732c423..9ba78291dc 100755
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -113,7 +113,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
S.update_connections()
break
-/obj/machinery/computer/rdconsole/initialize()
+/obj/machinery/computer/rdconsole/Initialize()
SyncRDevices()
. = ..()
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index a1ad322ba4..7e736980db 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -33,7 +33,7 @@
tot_rating += SP.rating
idle_power_usage /= max(1, tot_rating)
-/obj/machinery/r_n_d/server/initialize()
+/obj/machinery/r_n_d/server/Initialize()
. = ..()
if(!files)
files = new /datum/research(src)
diff --git a/code/modules/shieldgen/shield_gen.dm b/code/modules/shieldgen/shield_gen.dm
index de6d535a05..f8c1428310 100644
--- a/code/modules/shieldgen/shield_gen.dm
+++ b/code/modules/shieldgen/shield_gen.dm
@@ -29,7 +29,7 @@
desc = "A machine that generates a field of energy optimized for blocking meteorites when activated. This version comes with a more efficent shield matrix."
energy_conversion_rate = 0.0012
-/obj/machinery/shield_gen/initialize()
+/obj/machinery/shield_gen/Initialize()
if(anchored)
for(var/obj/machinery/shield_capacitor/cap in range(1, src))
if(!cap.anchored)
diff --git a/code/modules/shuttles/escape_pods.dm b/code/modules/shuttles/escape_pods.dm
index 43cb6a5d94..e79f5d9b20 100644
--- a/code/modules/shuttles/escape_pods.dm
+++ b/code/modules/shuttles/escape_pods.dm
@@ -83,7 +83,7 @@
/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth
name = "escape pod berth controller"
-/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/initialize()
+/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/Initialize()
. = ..()
docking_program = new/datum/computer/file/embedded_program/docking/simple/escape_pod(src)
program = docking_program
diff --git a/code/modules/shuttles/shuttles_web.dm b/code/modules/shuttles/shuttles_web.dm
index 0beac59051..c717e51adc 100644
--- a/code/modules/shuttles/shuttles_web.dm
+++ b/code/modules/shuttles/shuttles_web.dm
@@ -162,7 +162,7 @@
var/list/my_doors //Should be list("id_tag" = "Pretty Door Name", ...)
var/list/my_sensors //Should be list("id_tag" = "Pretty Sensor Name", ...)
-/obj/machinery/computer/shuttle_control/web/initialize()
+/obj/machinery/computer/shuttle_control/web/Initialize()
. = ..()
var/area/my_area = get_area(src)
if(my_doors)
@@ -472,7 +472,7 @@
var/shuttle_name //Text name of the shuttle to connect to
var/list/destinations //Make sure this STARTS with a destination that builds a route to one that always exists as an anchor.
-/obj/shuttle_connector/initialize()
+/obj/shuttle_connector/Initialize()
. = ..()
SSshuttles.OnDocksInitialized(CALLBACK(src, .proc/setup_routes))
diff --git a/code/modules/tables/tables.dm b/code/modules/tables/tables.dm
index 6d20b619b0..17d2a8e114 100644
--- a/code/modules/tables/tables.dm
+++ b/code/modules/tables/tables.dm
@@ -59,7 +59,7 @@ var/list/table_icon_cache = list()
/obj/structure/table/blob_act()
take_damage(100)
-/obj/structure/table/initialize()
+/obj/structure/table/Initialize()
. = ..()
// One table per turf.
diff --git a/code/modules/turbolift/turbolift_map.dm b/code/modules/turbolift/turbolift_map.dm
index 02ba328dde..d812f5bf3e 100644
--- a/code/modules/turbolift/turbolift_map.dm
+++ b/code/modules/turbolift/turbolift_map.dm
@@ -22,7 +22,7 @@
turbolifts += src
..()
-/obj/turbolift_map_holder/initialize()
+/obj/turbolift_map_holder/Initialize()
. = ..()
// Create our system controller.
var/datum/turbolift/lift = new()
diff --git a/code/modules/vehicles/train.dm b/code/modules/vehicles/train.dm
index 6db4400f81..c66bfee0c4 100644
--- a/code/modules/vehicles/train.dm
+++ b/code/modules/vehicles/train.dm
@@ -22,7 +22,7 @@
//-------------------------------------------
// Standard procs
//-------------------------------------------
-/obj/vehicle/train/initialize()
+/obj/vehicle/train/Initialize()
. = ..()
for(var/obj/vehicle/train/T in orange(1, src))
latch(T)
diff --git a/code/modules/xenoarcheaology/anomaly_container.dm b/code/modules/xenoarcheaology/anomaly_container.dm
index 6372405300..795cd9d6df 100644
--- a/code/modules/xenoarcheaology/anomaly_container.dm
+++ b/code/modules/xenoarcheaology/anomaly_container.dm
@@ -7,7 +7,7 @@
var/obj/machinery/artifact/contained
-/obj/structure/anomaly_container/initialize()
+/obj/structure/anomaly_container/Initialize()
. = ..()
var/obj/machinery/artifact/A = locate() in loc
diff --git a/code/modules/xenoarcheaology/misc.dm b/code/modules/xenoarcheaology/misc.dm
index b457e98984..2c031fa344 100644
--- a/code/modules/xenoarcheaology/misc.dm
+++ b/code/modules/xenoarcheaology/misc.dm
@@ -41,7 +41,7 @@
/obj/structure/bookcase/manuals/xenoarchaeology
name = "Xenoarchaeology Manuals bookcase"
-/obj/structure/bookcase/manuals/xenoarchaeology/initialize()
+/obj/structure/bookcase/manuals/xenoarchaeology/Initialize()
. = ..()
new /obj/item/weapon/book/manual/excavation(src)
new /obj/item/weapon/book/manual/mass_spectrometry(src)
diff --git a/code/modules/xenoarcheaology/tools/artifact_analyser.dm b/code/modules/xenoarcheaology/tools/artifact_analyser.dm
index e169a62061..b1b0251d7c 100644
--- a/code/modules/xenoarcheaology/tools/artifact_analyser.dm
+++ b/code/modules/xenoarcheaology/tools/artifact_analyser.dm
@@ -14,7 +14,7 @@
var/obj/scanned_object
var/report_num = 0
-/obj/machinery/artifact_analyser/initialize()
+/obj/machinery/artifact_analyser/Initialize()
. = ..()
reconnect_scanner()
diff --git a/code/modules/xenobio/items/weapons.dm b/code/modules/xenobio/items/weapons.dm
index bb735c35f2..b4894e4588 100644
--- a/code/modules/xenobio/items/weapons.dm
+++ b/code/modules/xenobio/items/weapons.dm
@@ -28,8 +28,7 @@
H.apply_damage(agony_to_apply, HALLOSS)
..()
-
-/obj/item/weapon/melee/baton/slime/loaded/initialize()
+/obj/item/weapon/melee/baton/slime/loaded/Initialize()
bcell = new/obj/item/weapon/cell/device(src)
update_icon()
return ..()
diff --git a/maps/southern_cross/structures/closets/engineering.dm b/maps/southern_cross/structures/closets/engineering.dm
index a80fa8eec8..0c757ad011 100644
--- a/maps/southern_cross/structures/closets/engineering.dm
+++ b/maps/southern_cross/structures/closets/engineering.dm
@@ -27,7 +27,7 @@
/obj/item/taperoll/engineering,
/obj/item/clothing/suit/storage/hooded/wintercoat/engineering)
-/obj/structure/closet/secure_closet/engineering_chief_wardrobe/initialize()
+/obj/structure/closet/secure_closet/engineering_chief_wardrobe/Initialize()
if(prob(50))
starts_with += /obj/item/weapon/storage/backpack/industrial
else
diff --git a/maps/southern_cross/structures/closets/medical.dm b/maps/southern_cross/structures/closets/medical.dm
index 2b59597d33..0ea515d974 100644
--- a/maps/southern_cross/structures/closets/medical.dm
+++ b/maps/southern_cross/structures/closets/medical.dm
@@ -25,7 +25,7 @@
/obj/item/clothing/suit/storage/hooded/wintercoat/medical,
/obj/item/clothing/shoes/white)
-/obj/structure/closet/secure_closet/CMO_wardrobe/initialize()
+/obj/structure/closet/secure_closet/CMO_wardrobe/Initialize()
if(prob(50))
starts_with += /obj/item/weapon/storage/backpack/medic
else
diff --git a/maps/southern_cross/structures/closets/misc.dm b/maps/southern_cross/structures/closets/misc.dm
index 82b2bd65cb..bad3976c18 100644
--- a/maps/southern_cross/structures/closets/misc.dm
+++ b/maps/southern_cross/structures/closets/misc.dm
@@ -16,7 +16,7 @@
/obj/item/ammo_magazine/clip/c762/hunter = 9,
/obj/item/weapon/gun/projectile/shotgun/pump/rifle = 2)
-/obj/structure/closet/secure_closet/guncabinet/rifle/initialize()
+/obj/structure/closet/secure_closet/guncabinet/rifle/Initialize()
if(prob(85))
starts_with += /obj/item/weapon/gun/projectile/shotgun/pump/rifle
else
@@ -53,7 +53,7 @@
/obj/item/device/radio,
/obj/item/stack/marker_beacon/thirty)
-/obj/structure/closet/secure_closet/explorer/initialize()
+/obj/structure/closet/secure_closet/explorer/Initialize()
if(prob(50))
starts_with += /obj/item/weapon/storage/backpack
else
@@ -129,7 +129,7 @@
/obj/item/weapon/cell/device,
/obj/item/device/radio)
-/obj/structure/closet/secure_closet/pilot/initialize()
+/obj/structure/closet/secure_closet/pilot/Initialize()
if(prob(50))
starts_with += /obj/item/weapon/storage/backpack
else
diff --git a/maps/southern_cross/structures/closets/security.dm b/maps/southern_cross/structures/closets/security.dm
index 314e5a07b9..1bde2d7a34 100644
--- a/maps/southern_cross/structures/closets/security.dm
+++ b/maps/southern_cross/structures/closets/security.dm
@@ -27,7 +27,7 @@
/obj/item/clothing/head/beret/sec/corporate/hos,
/obj/item/clothing/mask/gas/half)
-/obj/structure/closet/secure_closet/hos_wardrobe/initialize()
+/obj/structure/closet/secure_closet/hos_wardrobe/Initialize()
if(prob(50))
starts_with += /obj/item/weapon/storage/backpack/security
else