diff --git a/code/controllers/master/admin.dm b/code/controllers/master/admin.dm
index 76e39a915c6..6c15259edd4 100644
--- a/code/controllers/master/admin.dm
+++ b/code/controllers/master/admin.dm
@@ -70,7 +70,9 @@ var/list/panic_targets = list(
"Garbage" = /datum/controller/subsystem/garbage_collector,
"Air" = /datum/controller/subsystem/air,
"Explosives" = /datum/controller/subsystem/explosives,
- "Game Ticker" = /datum/controller/subsystem/ticker
+ "Game Ticker" = /datum/controller/subsystem/ticker,
+ "Timer" = /datum/controller/subsystem/timer,
+ "Effects Master" = /datum/controller/subsystem/effects
)
// Subsystems that might do funny things or lose data if hard-restarted.
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 3b4c37c893e..8417f4990f5 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -354,8 +354,6 @@ BLIND // can't see anything
var/cache_key = "[light_overlay][H ? "_[H.species.get_bodytype()]" : ""]"
if(!SSicon_cache.light_overlay_cache[cache_key])
var/use_icon = 'icons/mob/light_overlays.dmi'
- if(H && sprite_sheets && sprite_sheets[H.species.get_bodytype()])
- use_icon = sprite_sheets[H.species.get_bodytype()]
SSicon_cache.light_overlay_cache[cache_key] = image("icon" = use_icon, "icon_state" = "[light_overlay]")
if(H)
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index 5f0c6d0a06b..dddda9dbdc8 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -273,21 +273,23 @@
emp_act(severity)
if(istype(src.loc, /mob/living/carbon/human))
var/mob/living/carbon/human/M = src.loc
- M << "The Optical Thermal Scanner overloads and blinds you!"
+ M << "\The [src] overloads and blinds you!"
if(M.glasses == src)
M.eye_blind = 3
M.eye_blurry = 5
// Don't cure being nearsighted
if(!(M.disabilities & NEARSIGHTED))
M.disabilities |= NEARSIGHTED
- spawn(100)
- M.disabilities &= ~NEARSIGHTED
+ addtimer(CALLBACK(M, /mob/living/carbon/human/.proc/thermal_reset_blindness), 100)
..()
/obj/item/clothing/glasses/thermal/Initialize()
. = ..()
overlay = global_hud.thermal
+/mob/living/carbon/human/proc/thermal_reset_blindness()
+ disabilities &= ~NEARSIGHTED
+
/obj/item/clothing/glasses/thermal/syndi //These are now a traitor item, concealed as mesons. -Pete
name = "optical meson scanner"
desc = "Used for seeing walls, floors, and stuff through anything."
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index 1658992c68f..ad4b07534ba 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -77,7 +77,7 @@ var/list/possible_cable_coil_colours = list(
/obj/structure/cable/white
color = COLOR_WHITE
-/obj/structure/cable/New()
+/obj/structure/cable/Initialize()
. = ..()
// ensure d1 & d2 reflect the icon_state for entering and exiting cable
@@ -89,9 +89,10 @@ var/list/possible_cable_coil_colours = list(
d2 = text2num( copytext( icon_state, dash+1 ) )
var/turf/T = src.loc // hide if turf is not intact
- if(level==1) hide(!T.is_plating())
- SSpower.all_cables += src //add it to the global cable list
+ if(level == 1)
+ hide(!T.is_plating())
+ SSpower.all_cables += src //add it to the global cable list
/obj/structure/cable/Destroy() // called when a cable is deleted
if(powernet)
@@ -855,8 +856,8 @@ obj/structure/cable/proc/cableColor(var/colorC)
/obj/item/stack/cable_coil/cut
item_state = "coil2"
-/obj/item/stack/cable_coil/cut/New(loc)
- ..()
+/obj/item/stack/cable_coil/cut/Initialize(mapload)
+ . = ..()
src.amount = rand(1,2)
pixel_x = rand(-2,2)
pixel_y = rand(-2,2)
@@ -884,9 +885,9 @@ obj/structure/cable/proc/cableColor(var/colorC)
/obj/item/stack/cable_coil/white
color = COLOR_WHITE
-/obj/item/stack/cable_coil/random/New()
+/obj/item/stack/cable_coil/random/Initialize()
color = pick(COLOR_RED, COLOR_BLUE, COLOR_LIME, COLOR_WHITE, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN)
- ..()
+ . = ..()
//nooses - all catbeast/ligger/squiggers/synths must hang
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index b78d406dd96..7b696750d3f 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -373,7 +373,7 @@
if (!isturf(T))
return 0
- if ((locate(/obj/machinery/containment_field) in T) || (locate(/obj/machinery/shieldwall) in T))
+ if ((locate(/obj/machinery/containment_field) in T) || (locate(/obj/shieldwall) in T))
return 0
else if (locate(/obj/machinery/field_generator) in T)
var/obj/machinery/field_generator/G = locate(/obj/machinery/field_generator) in T
diff --git a/code/modules/shieldgen/sheldwallgen.dm b/code/modules/shieldgen/sheldwallgen.dm
index 088545373c5..b40c0b7d70a 100644
--- a/code/modules/shieldgen/sheldwallgen.dm
+++ b/code/modules/shieldgen/sheldwallgen.dm
@@ -95,14 +95,10 @@
if(!src.state == 1)
src.active = 0
return
- spawn(1)
- setup_field(1)
- spawn(2)
- setup_field(2)
- spawn(3)
- setup_field(4)
- spawn(4)
- setup_field(8)
+ addtimer(CALLBACK(src, .proc/setup_field, 1), 1)
+ addtimer(CALLBACK(src, .proc/setup_field, 2), 2)
+ addtimer(CALLBACK(src, .proc/setup_field, 3), 4)
+ addtimer(CALLBACK(src, .proc/setup_field, 4), 8)
src.active = 2
if(src.active >= 1)
if(src.power == 0)
@@ -110,7 +106,8 @@
"You hear heavy droning fade out")
icon_state = "Shield_Gen"
src.active = 0
- for(var/dir in list(1,2,4,8)) src.cleanup(dir)
+ for(var/dir in list(1,2,4,8))
+ cleanup(dir)
/obj/machinery/shieldwallgen/proc/setup_field(var/NSEW = 0)
var/turf/T = src.loc
@@ -152,8 +149,7 @@
var/field_dir = get_dir(T2,get_step(T2, NSEW))
T = get_step(T2, NSEW)
T2 = T
- var/obj/machinery/shieldwall/CF = new/obj/machinery/shieldwall/(src, G) //(ref to this gen, ref to connected gen)
- CF.loc = T
+ var/obj/shieldwall/CF = new/obj/shieldwall/(T, src, G) //(ref to this gen, ref to connected gen)
CF.set_dir(field_dir)
@@ -189,7 +185,7 @@
visible_message("The [src.name] has been hit with \the [W.name] by [user.name]!")
/obj/machinery/shieldwallgen/proc/cleanup(var/NSEW)
- var/obj/machinery/shieldwall/F
+ var/obj/shieldwall/F
var/obj/machinery/shieldwallgen/G
var/turf/T = src.loc
var/turf/T2 = src.loc
@@ -197,8 +193,8 @@
for(var/dist = 0, dist <= 9, dist += 1) // checks out to 8 tiles away for fields
T = get_step(T2, NSEW)
T2 = T
- if(locate(/obj/machinery/shieldwall) in T)
- F = (locate(/obj/machinery/shieldwall) in T)
+ if(locate(/obj/shieldwall) in T)
+ F = (locate(/obj/shieldwall) in T)
qdel(F)
if(locate(/obj/machinery/shieldwallgen) in T)
@@ -220,8 +216,8 @@
//////////////Containment Field START
-/obj/machinery/shieldwall
- name = "Shield"
+/obj/shieldwall
+ name = "shield"
desc = "An energy shield."
icon = 'icons/effects/effects.dmi'
icon_state = "shieldwall"
@@ -229,6 +225,7 @@
density = 1
unacidable = 1
light_range = 3
+ light_color = LIGHT_COLOR_BLUE
var/needs_power = 0
var/active = 1
// var/power = 10
@@ -240,45 +237,41 @@
var/power_usage = 2500 //how much power it takes to sustain the shield
var/generate_power_usage = 7500 //how much power it takes to start up the shield
-/obj/machinery/shieldwall/New(var/obj/machinery/shieldwallgen/A, var/obj/machinery/shieldwallgen/B)
- ..()
+/obj/shieldwall/Initialize(mapload, var/obj/machinery/shieldwallgen/A, var/obj/machinery/shieldwallgen/B)
+ . = ..()
update_nearby_tiles()
- src.gen_primary = A
- src.gen_secondary = B
+ gen_primary = A
+ gen_secondary = B
if(A && B && A.active && B.active)
needs_power = 1
- if(prob(50))
- A.storedpower -= generate_power_usage
- else
- B.storedpower -= generate_power_usage
+ A.storedpower -= generate_power_usage/2
+ B.storedpower -= generate_power_usage/2
+ START_PROCESSING(SSprocessing, src)
else
qdel(src) //need at least two generator posts
-/obj/machinery/shieldwall/Destroy()
+/obj/shieldwall/Destroy()
update_nearby_tiles()
+ STOP_PROCESSING(SSprocessing, src)
return ..()
-/obj/machinery/shieldwall/attack_hand(mob/user as mob)
+/obj/shieldwall/attack_hand(mob/user as mob)
return
-
-/obj/machinery/shieldwall/process()
+/obj/shieldwall/process()
if(needs_power)
- if(isnull(gen_primary)||isnull(gen_secondary))
+ if(!gen_primary || !gen_secondary)
qdel(src)
return
- if(!(gen_primary.active)||!(gen_secondary.active))
+ if(!(gen_primary.active) || !(gen_secondary.active))
qdel(src)
return
- if(prob(50))
- gen_primary.storedpower -= power_usage
- else
- gen_secondary.storedpower -= power_usage
+ gen_primary.storedpower -= power_usage/2
+ gen_secondary.storedpower -= power_usage/2
-
-/obj/machinery/shieldwall/bullet_act(var/obj/item/projectile/Proj)
+/obj/shieldwall/bullet_act(var/obj/item/projectile/Proj)
if(needs_power)
var/obj/machinery/shieldwallgen/G
if(prob(50))
@@ -290,7 +283,7 @@
return
-/obj/machinery/shieldwall/ex_act(severity)
+/obj/shieldwall/ex_act(severity)
if(needs_power)
var/obj/machinery/shieldwallgen/G
switch(severity)
@@ -317,7 +310,7 @@
return
-/obj/machinery/shieldwall/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
+/obj/shieldwall/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group || (height==0)) return 1
if(istype(mover) && mover.checkpass(PASSGLASS))