diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index 772987185b..feb28ed3c5 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -181,6 +181,8 @@ GLOBAL_LIST_INIT(glass_sheet_types, typecacheof(list(
#define is_glass_sheet(O) (is_type_in_typecache(O, GLOB.glass_sheet_types))
+#define iseffect(O) (is_type_in_typecache(O, GLOB.typecache_effect))
+
#define isblobmonster(O) (istype(O, /mob/living/simple_animal/hostile/blob))
#define isshuttleturf(T) (length(T.baseturfs) && (/turf/baseturf_skipover/shuttle in T.baseturfs))
diff --git a/code/_globalvars/lists/typecache.dm b/code/_globalvars/lists/typecache.dm
index f4e73f2994..ee4635f910 100644
--- a/code/_globalvars/lists/typecache.dm
+++ b/code/_globalvars/lists/typecache.dm
@@ -12,3 +12,5 @@ GLOBAL_LIST_INIT(typecache_machine_or_structure, typecacheof(list(/obj/machinery
GLOBAL_LIST_INIT(typecache_shuttle_area, typecacheof(/area/shuttle))
GLOBAL_LIST_INIT(typecache_clothing, typecacheof(/obj/item/clothing))
+
+GLOBAL_LIST_INIT(typecache_effect, typecacheof(/obj/effect))
diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm
index 3f25cbdb9e..ce5f5df1d9 100644
--- a/code/datums/helper_datums/teleport.dm
+++ b/code/datums/helper_datums/teleport.dm
@@ -48,7 +48,7 @@
//must succeed in most cases
/datum/teleport/proc/setTeleatom(atom/movable/ateleatom)
- if(istype(ateleatom, /obj/effect) && !istype(ateleatom, /obj/effect/dummy/chameleon))
+ if(iseffect(ateleatom) && !istype(ateleatom, /obj/effect/dummy/chameleon))
qdel(ateleatom)
return 0
if(istype(ateleatom))
diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm
index 8ac0d578ad..65e216fd4c 100644
--- a/code/game/objects/effects/portals.dm
+++ b/code/game/objects/effects/portals.dm
@@ -145,7 +145,7 @@
return ..()
/obj/effect/portal/proc/teleport(atom/movable/M, force = FALSE)
- if(!force && (!istype(M) || istype(M, /obj/effect) || (ismecha(M) && !mech_sized) || (!isobj(M) && !ismob(M)))) //Things that shouldn't teleport.
+ if(!force && (!istype(M) || iseffect(M) || (ismecha(M) && !mech_sized) || (!isobj(M) && !ismob(M)))) //Things that shouldn't teleport.
return
var/turf/real_target = get_link_target_turf()
if(!istype(real_target))
@@ -175,4 +175,3 @@
else
real_target = get_turf(linked)
return real_target
-
diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm
index d5d025619c..13e309b79d 100644
--- a/code/game/objects/items/devices/chameleonproj.dm
+++ b/code/game/objects/items/devices/chameleonproj.dm
@@ -40,7 +40,7 @@
if(!check_sprite(target))
return
if(!active_dummy)
- if(!(isturf(target) || istype(target, /obj/structure/falsewall) || ismob(target))) //NOT any of these
+ if(!(isturf(target) || ismob(target) || istype(target, /obj/structure/falsewall) || istype(target, /obj/effect))) //NOT any of these
playsound(get_turf(src), 'sound/weapons/flash.ogg', 100, 1, -6)
to_chat(user, "Scanned [target].")
var/obj/temp = new/obj()
diff --git a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm
index dda73a7025..2b1d9d5f02 100644
--- a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm
@@ -100,8 +100,8 @@
R.time *= 2 //Building walls becomes slower when the Ark activates
mass_recall()
recalls_remaining++ //So it doesn't use up a charge
-
- var/turf/T = get_turf(src)
+
+ var/turf/T = get_turf(src)
var/list/open_turfs = list()
for(var/turf/open/OT in orange(1, T))
if(!is_blocked_turf(OT, TRUE))
@@ -283,7 +283,7 @@
for(var/turf/closed/wall/W in RANGE_TURFS(2, src))
W.dismantle_wall()
for(var/obj/O in orange(1, src))
- if(!O.pulledby && !istype(O, /obj/effect) && O.density)
+ if(!O.pulledby && !iseffect(O) && O.density)
if(!step_away(O, src, 2) || get_dist(O, src) < 2)
O.take_damage(50, BURN, "bomb")
O.update_icon()
diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm
index 3a25df10d4..412e54878a 100644
--- a/code/modules/events/wormholes.dm
+++ b/code/modules/events/wormholes.dm
@@ -50,7 +50,7 @@
mech_sized = TRUE
/obj/effect/portal/wormhole/teleport(atom/movable/M)
- if(istype(M, /obj/effect)) //sparks don't teleport
+ if(iseffect(M)) //sparks don't teleport
return
if(M.anchored)
if(!(ismecha(M) && mech_sized))
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index bfe3e1a63b..15a40d0876 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -239,10 +239,10 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
if(final_countdown) // We're already doing it go away
return
final_countdown = TRUE
-
+
var/image/causality_field = image(icon, null, "causality_field")
add_overlay(causality_field, TRUE)
-
+
var/speaking = "[emergency_alert] The supermatter has reached critical integrity failure. Emergency causality destabilization field has been activated."
radio.talk_into(src, speaking, common_channel, get_spans(), get_default_language())
for(var/i in SUPERMATTER_COUNTDOWN_TIME to 0 step -10)
@@ -260,7 +260,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
speaking = "[i/10]..."
radio.talk_into(src, speaking, common_channel, get_spans(), get_default_language())
sleep(10)
-
+
explode()
/obj/machinery/power/supermatter_crystal/proc/explode()
@@ -273,7 +273,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
H.hallucination += max(50, min(300, DETONATION_HALLUCINATION * sqrt(1 / (get_dist(mob, src) + 1)) ) )
var/rads = DETONATION_RADS * sqrt( 1 / (get_dist(L, src) + 1) )
L.rad_act(rads)
-
+
var/turf/T = get_turf(src)
for(var/mob/M in GLOB.player_list)
if(M.z == z)
@@ -598,7 +598,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
AM.visible_message("\The [AM] slams into \the [src] inducing a resonance... [AM.p_their()] body starts to glow and catch flame before flashing into ash.",\
"You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"",\
"You hear an unearthly noise as a wave of heat washes over you.")
- else if(isobj(AM) && !istype(AM, /obj/effect))
+ else if(isobj(AM) && !iseffect(AM))
AM.visible_message("\The [AM] smacks into \the [src] and rapidly flashes to ash.", null,\
"You hear a loud crack as you are washed with a wave of heat.")
else
@@ -620,10 +620,10 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
else if(istype(AM, /obj/singularity))
return
else if(isobj(AM))
- if(!istype(AM, /obj/effect))
+ if(!iseffect(AM))
investigate_log("has consumed [AM].", INVESTIGATE_SUPERMATTER)
qdel(AM)
- if(!istype(AM, /obj/effect))
+ if(!iseffect(AM))
matter_power += 200
//Some poor sod got eaten, go ahead and irradiate people nearby.
diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm
index eb0f6fc207..51fda371c1 100644
--- a/code/modules/reagents/chemistry/recipes.dm
+++ b/code/modules/reagents/chemistry/recipes.dm
@@ -50,7 +50,7 @@
/datum/chemical_reaction/proc/goonchem_vortex(turf/T, setting_type, range)
for(var/atom/movable/X in orange(range, T))
- if(istype(X, /obj/effect))
+ if(iseffect(X))
continue
if(!X.anchored)
var/distance = get_dist(X, T)