diff --git a/code/datums/beam.dm b/code/datums/beam.dm
index 3276a5f5b90..252a305af27 100644
--- a/code/datums/beam.dm
+++ b/code/datums/beam.dm
@@ -149,6 +149,11 @@
owner = null
return ..()
+/obj/effect/ebeam/singularity_pull()
+ return
+/obj/effect/ebeam/singularity_act()
+ return
+
/atom/proc/Beam(atom/BeamTarget,icon_state="b_beam",icon='icons/effects/beam.dmi',time=50, maxdistance=10,beam_type=/obj/effect/ebeam,beam_sleep_time = 3)
var/datum/beam/newbeam = new(src,BeamTarget,icon,icon_state,time,maxdistance,beam_type,beam_sleep_time)
INVOKE_ASYNC(newbeam, /datum/beam/.proc/Start)
diff --git a/code/game/gamemodes/clock_cult/clock_effects/city_of_cogs_rift.dm b/code/game/gamemodes/clock_cult/clock_effects/city_of_cogs_rift.dm
index e41acb421a6..ab47f1af55d 100644
--- a/code/game/gamemodes/clock_cult/clock_effects/city_of_cogs_rift.dm
+++ b/code/game/gamemodes/clock_cult/clock_effects/city_of_cogs_rift.dm
@@ -10,6 +10,13 @@
light_power = 3
light_color = "#6A4D2F"
+
+/obj/effect/clockwork/city_of_cogs_rift/singularity_act()
+ return
+
+/obj/effect/clockwork/city_of_cogs_rift/singularity_pull()
+ return
+
/obj/effect/clockwork/city_of_cogs_rift/Initialize()
. = ..()
visible_message("The air above [loc] shimmers and pops as a [name] forms there!")
diff --git a/code/game/gamemodes/clock_cult/clock_effects/clock_overlay.dm b/code/game/gamemodes/clock_cult/clock_effects/clock_overlay.dm
index e8cba1a39d2..f3de8d04a81 100644
--- a/code/game/gamemodes/clock_cult/clock_effects/clock_overlay.dm
+++ b/code/game/gamemodes/clock_cult/clock_effects/clock_overlay.dm
@@ -10,6 +10,11 @@
/obj/effect/clockwork/overlay/ex_act()
return FALSE
+/obj/effect/clockwork/overlay/singularity_act()
+ return
+/obj/effect/clockwork/overlay/singularity_pull()
+ return
+
/obj/effect/clockwork/overlay/singularity_pull(S, current_size)
return
diff --git a/code/game/gamemodes/clock_cult/clock_effects/general_markers.dm b/code/game/gamemodes/clock_cult/clock_effects/general_markers.dm
index a3465fac053..6e6704a68c4 100644
--- a/code/game/gamemodes/clock_cult/clock_effects/general_markers.dm
+++ b/code/game/gamemodes/clock_cult/clock_effects/general_markers.dm
@@ -11,6 +11,12 @@
animate(src, alpha = 0, time = 10)
QDEL_IN(src, 10)
+/obj/effect/clockwork/general_marker/singularity_act()
+ return
+
+/obj/effect/clockwork/general_marker/singularity_pull()
+ return
+
/obj/effect/clockwork/general_marker/inathneq
name = "Inath-neq, the Resonant Cogwheel"
desc = "A humanoid form blazing with blue fire. It radiates an aura of kindness and caring."
diff --git a/code/game/gamemodes/clock_cult/clock_effects/servant_blocker.dm b/code/game/gamemodes/clock_cult/clock_effects/servant_blocker.dm
index 988c00b2f58..194747cefcd 100644
--- a/code/game/gamemodes/clock_cult/clock_effects/servant_blocker.dm
+++ b/code/game/gamemodes/clock_cult/clock_effects/servant_blocker.dm
@@ -18,3 +18,9 @@
to_chat(L, "The space beyond here can't be accessed by you or other servants.")
return
return TRUE
+
+/obj/effect/clockwork/servant_blocker/singularity_act()
+ return
+
+/obj/effect/clockwork/servant_blocker/singularity_pull()
+ return
diff --git a/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm b/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm
index a438f64448c..895c38c94a3 100644
--- a/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm
+++ b/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm
@@ -109,6 +109,14 @@
return TRUE
return FALSE
+
+/obj/effect/clockwork/spatial_gateway/singularity_act()
+ return
+
+/obj/effect/clockwork/spatial_gateway/singularity_pull()
+ return
+
+
/obj/effect/clockwork/spatial_gateway/CollidedWith(atom/movable/AM)
..()
if(!QDELETED(AM))
diff --git a/code/game/gamemodes/clock_cult/clock_items/judicial_visor.dm b/code/game/gamemodes/clock_cult/clock_items/judicial_visor.dm
index 51ffdd9e10c..4f6485310bf 100644
--- a/code/game/gamemodes/clock_cult/clock_items/judicial_visor.dm
+++ b/code/game/gamemodes/clock_cult/clock_items/judicial_visor.dm
@@ -162,6 +162,12 @@
user = caster
INVOKE_ASYNC(src, .proc/judicialblast)
+/obj/effect/clockwork/judicial_marker/singularity_act()
+ return
+
+/obj/effect/clockwork/judicial_marker/singularity_pull()
+ return
+
/obj/effect/clockwork/judicial_marker/proc/judicialblast()
playsound(src, 'sound/magic/magic_missile.ogg', 50, 1, 1, 1)
flick("judicial_marker", src)
diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm
index 8140dffe53e..89f93841404 100644
--- a/code/game/gamemodes/cult/cult_structures.dm
+++ b/code/game/gamemodes/cult/cult_structures.dm
@@ -236,3 +236,9 @@
icon_state = "hole"
density = TRUE
anchored = TRUE
+
+/obj/effect/gateway/singularity_act()
+ return
+
+/obj/effect/gateway/singularity_pull()
+ return
diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm
index 865734d4d95..9f292b14376 100644
--- a/code/game/gamemodes/wizard/artefact.dm
+++ b/code/game/gamemodes/wizard/artefact.dm
@@ -66,6 +66,12 @@
else
return ..()
+/obj/effect/rend/singularity_pull()
+ return
+
+/obj/effect/rend/singularity_pull()
+ return
+
/obj/item/veilrender/vealrender
name = "veal render"
desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast farm."
diff --git a/code/game/objects/effects/bump_teleporter.dm b/code/game/objects/effects/bump_teleporter.dm
index 027959212b5..42f59cc5358 100644
--- a/code/game/objects/effects/bump_teleporter.dm
+++ b/code/game/objects/effects/bump_teleporter.dm
@@ -19,6 +19,13 @@
LAZYREMOVE(AllTeleporters, src)
return ..()
+
+/obj/effect/bump_teleporter/singularity_act()
+ return
+
+/obj/effect/bump_teleporter/singularity_pull()
+ return
+
/obj/effect/bump_teleporter/CollidedWith(atom/movable/AM)
if(!ismob(AM))
return
diff --git a/code/game/objects/effects/countdown.dm b/code/game/objects/effects/countdown.dm
index f4b67b7df2b..8448e2a7e7e 100644
--- a/code/game/objects/effects/countdown.dm
+++ b/code/game/objects/effects/countdown.dm
@@ -154,3 +154,9 @@
else
var/time_left = max(0, (A.death_time - world.time) / 10)
return round(time_left)
+
+/obj/effect/countdown/singularity_pull()
+ return
+
+/obj/effect/countdown/singularity_act()
+ return
diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm
index d5f8e28d2af..2b456b2ed7e 100644
--- a/code/game/objects/effects/effects.dm
+++ b/code/game/objects/effects/effects.dm
@@ -56,3 +56,9 @@
/obj/effect/abstract/singularity_act()
return
+
+/obj/effect/dummy/singularity_pull()
+ return
+
+/obj/effect/dummy/singularity_act()
+ return
diff --git a/code/game/objects/effects/forcefields.dm b/code/game/objects/effects/forcefields.dm
index 024fb4b4ea5..edf7b4f5194 100644
--- a/code/game/objects/effects/forcefields.dm
+++ b/code/game/objects/effects/forcefields.dm
@@ -7,6 +7,9 @@
density = TRUE
CanAtmosPass = ATMOS_PASS_DENSITY
+/obj/effect/forcefield/singularity_pull()
+ return
+
/obj/effect/forcefield/cult
desc = "An unholy shield that blocks all attacks."
name = "glowing wall"
diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm
index 0d0fb2cafe4..1178cd43f82 100644
--- a/code/game/objects/effects/misc.dm
+++ b/code/game/objects/effects/misc.dm
@@ -12,6 +12,12 @@
var/def_zone
pass_flags = PASSTABLE
+/obj/effect/beam/singularity_act()
+ return
+
+/obj/effect/beam/singularity_pull()
+ return
+
/obj/effect/spawner
name = "object spawner"
diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm
index 25977dcf21a..8b6bf70588d 100644
--- a/code/game/objects/effects/portals.dm
+++ b/code/game/objects/effects/portals.dm
@@ -76,6 +76,12 @@
if(isturf(hard_target_override))
hard_target = hard_target_override
+/obj/effect/portal/singularity_pull()
+ return
+
+/obj/effect/portal/singularity_act()
+ return
+
/obj/effect/portal/proc/link_portal(obj/effect/portal/newlink)
linked = newlink
if(atmos_link)
diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm
index 597b37cc808..bfed048effc 100644
--- a/code/game/objects/effects/step_triggers.dm
+++ b/code/game/objects/effects/step_triggers.dm
@@ -20,6 +20,13 @@
return
Trigger(H)
+
+/obj/effect/step_trigger/singularity_act()
+ return
+
+/obj/effect/step_trigger/singularity_pull()
+ return
+
/* Sends a message to mob when triggered*/
/obj/effect/step_trigger/message
diff --git a/code/game/objects/items/chrono_eraser.dm b/code/game/objects/items/chrono_eraser.dm
index 6f1ab39013c..d65ef6fc2ab 100644
--- a/code/game/objects/items/chrono_eraser.dm
+++ b/code/game/objects/items/chrono_eraser.dm
@@ -252,6 +252,9 @@
/obj/effect/chrono_field/singularity_act()
return
+/obj/effect/chrono_field/singularity_pull()
+ return
+
/obj/effect/chrono_field/ex_act()
return
diff --git a/code/modules/admin/sound_emitter.dm b/code/modules/admin/sound_emitter.dm
index 129c6c92c87..b7ec8c36b52 100644
--- a/code/modules/admin/sound_emitter.dm
+++ b/code/modules/admin/sound_emitter.dm
@@ -30,6 +30,9 @@
/obj/effect/sound_emitter/singularity_act()
return
+/obj/effect/sound_emitter/singularity_pull()
+ return
+
/obj/effect/sound_emitter/examine(mob/user)
..()
if(!isobserver(user))
diff --git a/code/modules/atmospherics/environmental/LINDA_fire.dm b/code/modules/atmospherics/environmental/LINDA_fire.dm
index ca234308d8d..d0c0979366e 100644
--- a/code/modules/atmospherics/environmental/LINDA_fire.dm
+++ b/code/modules/atmospherics/environmental/LINDA_fire.dm
@@ -179,6 +179,9 @@
var/mob/living/L = AM
L.fire_act(temperature, volume)
+/obj/effect/hotspot/singularity_pull()
+ return
+
/obj/effect/dummy/fire
name = "fire"
desc = "OWWWWWW. IT BURNS. Tell a coder if you're seeing this."
diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm
index c5a4f3a58a3..a2b5a864c48 100644
--- a/code/modules/clothing/spacesuits/chronosuit.dm
+++ b/code/modules/clothing/spacesuits/chronosuit.dm
@@ -252,6 +252,12 @@
var/obj/screen/chronos_target/target_ui = null
var/obj/item/clothing/suit/space/chronos/chronosuit
+/obj/effect/chronos_cam/singularity_act()
+ return
+
+/obj/effect/chronos_cam/singularity_pull()
+ return
+
/obj/effect/chronos_cam/proc/create_target_ui()
if(holder && holder.client && chronosuit)
if(target_ui)
diff --git a/code/modules/events/immovable_rod.dm b/code/modules/events/immovable_rod.dm
index 3b0cb1921a7..b933e566be3 100644
--- a/code/modules/events/immovable_rod.dm
+++ b/code/modules/events/immovable_rod.dm
@@ -68,6 +68,12 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
/obj/effect/immovablerod/ex_act(severity, target)
return 0
+/obj/effect/immovablerod/singularity_act()
+ return
+
+/obj/effect/immovablerod/singularity_pull()
+ return
+
/obj/effect/immovablerod/Collide(atom/clong)
if(prob(10))
playsound(src, 'sound/effects/bang.ogg', 50, 1)
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index 749b98c09ae..866b763fe65 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -98,6 +98,12 @@ GLOBAL_LIST_INIT(hallucinations_major, list(
var/image_layer = MOB_LAYER
var/active = TRUE //qdelery
+/obj/effect/hallucination/singularity_pull()
+ return
+
+/obj/effect/hallucination/singularity_act()
+ return
+
/obj/effect/hallucination/simple/Initialize(mapload, var/mob/living/carbon/T)
. = ..()
target = T
diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm
index ecbd8a41359..743e84aca4f 100644
--- a/code/modules/mining/fulton.dm
+++ b/code/modules/mining/fulton.dm
@@ -183,3 +183,9 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons)
if(L.stat != DEAD)
return 1
return 0
+
+/obj/effect/extraction_holder/singularity_pull()
+ return
+
+/obj/effect/extraction_holder/singularity_pull()
+ return
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index c1309e50a2c..421c129936f 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -365,7 +365,7 @@
return
/obj/effect/immortality_talisman/singularity_pull()
- return 0
+ return
/obj/effect/immortality_talisman/Destroy(force)
if(!can_destroy && !force)
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index f3553762b93..8d3f62f18d2 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -12,6 +12,12 @@
. = ..()
set_light(set_luminosity, set_cap)
+/obj/effect/light_emitter/singularity_pull()
+ return
+
+/obj/effect/light_emitter/singularity_act()
+ return
+
/**********************Miner Lockers**************************/
/obj/structure/closet/wardrobe/miner
diff --git a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm b/code/modules/mob/living/simple_animal/guardian/types/ranged.dm
index e3792d40bae..ccec94bea8b 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/ranged.dm
@@ -117,3 +117,9 @@
var/list/guardians = spawner.summoner.hasparasites()
for(var/para in guardians)
to_chat(para, "[AM] has crossed surveillance snare, [name].")
+
+/obj/effect/snare/singularity_act()
+ return
+
+/obj/effect/snare/singularity_pull()
+ return
diff --git a/code/modules/power/singularity/particle_accelerator/particle.dm b/code/modules/power/singularity/particle_accelerator/particle.dm
index f04c61426bf..2756d879d1d 100644
--- a/code/modules/power/singularity/particle_accelerator/particle.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle.dm
@@ -51,6 +51,9 @@
/obj/effect/accelerated_particle/ex_act(severity, target)
qdel(src)
+/obj/effect/accelerated_particle/singularity_pull()
+ return
+
/obj/effect/accelerated_particle/proc/toxmob(mob/living/M)
M.rad_act(energy*6)
diff --git a/code/modules/projectiles/guns/beam_rifle.dm b/code/modules/projectiles/guns/beam_rifle.dm
index 276d953bb77..19cd2762884 100644
--- a/code/modules/projectiles/guns/beam_rifle.dm
+++ b/code/modules/projectiles/guns/beam_rifle.dm
@@ -769,3 +769,9 @@
icon_icon = 'icons/mob/actions/actions_items.dmi'
button_icon_state = "zoom_mode"
background_icon_state = "bg_tech"
+
+/obj/effect/projectile_beam/singularity_pull()
+ return
+
+/obj/effect/projectile_beam/singularity_act()
+ return
diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm
index 4bf6ea43b18..d19079d5631 100644
--- a/code/modules/projectiles/projectile/energy.dm
+++ b/code/modules/projectiles/projectile/energy.dm
@@ -86,6 +86,12 @@
qdel(src)
+/obj/effect/nettingportal/singularity_act()
+ return
+
+/obj/effect/nettingportal/singularity_pull()
+ return
+
/obj/item/projectile/energy/trap
name = "energy snare"
diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm
index f68fe4adce6..316dde05df2 100644
--- a/code/modules/spells/spell.dm
+++ b/code/modules/spells/spell.dm
@@ -38,6 +38,12 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th
remove_ranged_ability()
return ..()
+/obj/effect/proc_holder/singularity_act()
+ return
+
+/obj/effect/proc_holder/singularity_pull()
+ return
+
/obj/effect/proc_holder/proc/InterceptClickOn(mob/living/caller, params, atom/A)
if(caller.ranged_ability != src || ranged_ability_user != caller) //I'm not actually sure how these would trigger, but, uh, safety, I guess?
to_chat(caller, "[caller.ranged_ability.name] has been disabled.")
diff --git a/code/modules/spells/spell_types/spacetime_distortion.dm b/code/modules/spells/spell_types/spacetime_distortion.dm
index 25b170745fc..ed6abe1410d 100644
--- a/code/modules/spells/spell_types/spacetime_distortion.dm
+++ b/code/modules/spells/spell_types/spacetime_distortion.dm
@@ -73,6 +73,12 @@
var/sound
var/walks_left = 50 //prevents the game from hanging in extreme cases (such as minigun fire)
+/obj/effect/cross_action/singularity_act()
+ return
+
+/obj/effect/cross_action/singularity_pull()
+ return
+
/obj/effect/cross_action/spacetime_dist/Initialize(mapload)
. = ..()
sound = "sound/guitar/[safepick(GLOB.guitar_notes)]"