diff --git a/code/datums/beam.dm b/code/datums/beam.dm
index 3276a5f5b9..252a305af2 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 e41acb421a..ab47f1af55 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 e8cba1a39d..f3de8d04a8 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 a3465fac05..6e6704a68c 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 988c00b2f5..194747cefc 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 cbfe5d043c..50076e0919 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 51ffdd9e10..4f6485310b 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 2dcaf23bc6..440dfaede6 100644
--- a/code/game/gamemodes/cult/cult_structures.dm
+++ b/code/game/gamemodes/cult/cult_structures.dm
@@ -240,3 +240,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 3007ec51ba..cd50f52d5f 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 5ba643e943..5e17ee9e89 100644
--- a/code/game/objects/effects/bump_teleporter.dm
+++ b/code/game/objects/effects/bump_teleporter.dm
@@ -7,6 +7,7 @@
invisibility = INVISIBILITY_ABSTRACT //nope, can't see this
anchored = TRUE
density = TRUE
+<<<<<<< HEAD
opacity = 0
var/static/list/AllTeleporters
@@ -19,6 +20,27 @@
LAZYREMOVE(AllTeleporters, src)
return ..()
+=======
+ opacity = 0
+
+ var/static/list/AllTeleporters
+
+/obj/effect/bump_teleporter/New()
+ ..()
+ LAZYADD(AllTeleporters, src)
+
+/obj/effect/bump_teleporter/Destroy()
+ LAZYREMOVE(AllTeleporters, src)
+ return ..()
+
+
+/obj/effect/bump_teleporter/singularity_act()
+ return
+
+/obj/effect/bump_teleporter/singularity_pull()
+ return
+
+>>>>>>> f912b6e... Fixes Lord Singuloth hungering for more than he should (#33025)
/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 f4b67b7df2..8448e2a7e7 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 d5f8e28d2a..2b456b2ed7 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 024fb4b4ea..edf7b4f519 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 cadee92161..d7d36acde1 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 f932ec9830..427e9eefe2 100644
--- a/code/game/objects/effects/portals.dm
+++ b/code/game/objects/effects/portals.dm
@@ -75,6 +75,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 93faacbf68..229dfc56de 100644
--- a/code/game/objects/effects/step_triggers.dm
+++ b/code/game/objects/effects/step_triggers.dm
@@ -6,6 +6,7 @@
var/mobs_only = FALSE
invisibility = INVISIBILITY_ABSTRACT // nope cant see this shit
anchored = TRUE
+<<<<<<< HEAD
/obj/effect/step_trigger/proc/Trigger(atom/movable/A)
return 0
@@ -192,3 +193,198 @@
if(happens_once)
qdel(src)
+=======
+
+/obj/effect/step_trigger/proc/Trigger(atom/movable/A)
+ return 0
+
+/obj/effect/step_trigger/Crossed(H as mob|obj)
+ ..()
+ if(!H)
+ return
+ if(isobserver(H) && !affect_ghosts)
+ return
+ if(!ismob(H) && mobs_only)
+ 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
+ var/message //the message to give to the mob
+ var/once = 1
+ mobs_only = TRUE
+
+/obj/effect/step_trigger/message/Trigger(mob/M)
+ if(M.client)
+ to_chat(M, "[message]")
+ if(once)
+ qdel(src)
+
+/* Tosses things in a certain direction */
+
+/obj/effect/step_trigger/thrower
+ var/direction = SOUTH // the direction of throw
+ var/tiles = 3 // if 0: forever until atom hits a stopper
+ var/immobilize = 1 // if nonzero: prevents mobs from moving while they're being flung
+ var/speed = 1 // delay of movement
+ var/facedir = 0 // if 1: atom faces the direction of movement
+ var/nostop = 0 // if 1: will only be stopped by teleporters
+ var/list/affecting = list()
+
+/obj/effect/step_trigger/thrower/Trigger(atom/A)
+ if(!A || !ismovableatom(A))
+ return
+ var/atom/movable/AM = A
+ var/curtiles = 0
+ var/stopthrow = 0
+ for(var/obj/effect/step_trigger/thrower/T in orange(2, src))
+ if(AM in T.affecting)
+ return
+
+ if(ismob(AM))
+ var/mob/M = AM
+ if(immobilize)
+ M.canmove = 0
+
+ affecting.Add(AM)
+ while(AM && !stopthrow)
+ if(tiles)
+ if(curtiles >= tiles)
+ break
+ if(AM.z != src.z)
+ break
+
+ curtiles++
+
+ sleep(speed)
+
+ // Calculate if we should stop the process
+ if(!nostop)
+ for(var/obj/effect/step_trigger/T in get_step(AM, direction))
+ if(T.stopper && T != src)
+ stopthrow = 1
+ else
+ for(var/obj/effect/step_trigger/teleporter/T in get_step(AM, direction))
+ if(T.stopper)
+ stopthrow = 1
+
+ if(AM)
+ var/predir = AM.dir
+ step(AM, direction)
+ if(!facedir)
+ AM.setDir(predir)
+
+
+
+ affecting.Remove(AM)
+
+ if(ismob(AM))
+ var/mob/M = AM
+ if(immobilize)
+ M.canmove = 1
+
+/* Stops things thrown by a thrower, doesn't do anything */
+
+/obj/effect/step_trigger/stopper
+
+/* Instant teleporter */
+
+/obj/effect/step_trigger/teleporter
+ var/teleport_x = 0 // teleportation coordinates (if one is null, then no teleport!)
+ var/teleport_y = 0
+ var/teleport_z = 0
+
+/obj/effect/step_trigger/teleporter/Trigger(atom/movable/A)
+ if(teleport_x && teleport_y && teleport_z)
+
+ A.x = teleport_x
+ A.y = teleport_y
+ A.z = teleport_z
+
+/* Random teleporter, teleports atoms to locations ranging from teleport_x - teleport_x_offset, etc */
+
+/obj/effect/step_trigger/teleporter/random
+ var/teleport_x_offset = 0
+ var/teleport_y_offset = 0
+ var/teleport_z_offset = 0
+
+/obj/effect/step_trigger/teleporter/random/Trigger(atom/movable/A)
+ if(teleport_x && teleport_y && teleport_z)
+ if(teleport_x_offset && teleport_y_offset && teleport_z_offset)
+
+ A.x = rand(teleport_x, teleport_x_offset)
+ A.y = rand(teleport_y, teleport_y_offset)
+ A.z = rand(teleport_z, teleport_z_offset)
+
+/* Fancy teleporter, creates sparks and smokes when used */
+
+/obj/effect/step_trigger/teleport_fancy
+ var/locationx
+ var/locationy
+ var/uses = 1 //0 for infinite uses
+ var/entersparks = 0
+ var/exitsparks = 0
+ var/entersmoke = 0
+ var/exitsmoke = 0
+
+/obj/effect/step_trigger/teleport_fancy/Trigger(mob/M)
+ var/dest = locate(locationx, locationy, z)
+ M.Move(dest)
+
+ if(entersparks)
+ var/datum/effect_system/spark_spread/s = new
+ s.set_up(4, 1, src)
+ s.start()
+ if(exitsparks)
+ var/datum/effect_system/spark_spread/s = new
+ s.set_up(4, 1, dest)
+ s.start()
+
+ if(entersmoke)
+ var/datum/effect_system/smoke_spread/s = new
+ s.set_up(4, 1, src, 0)
+ s.start()
+ if(exitsmoke)
+ var/datum/effect_system/smoke_spread/s = new
+ s.set_up(4, 1, dest, 0)
+ s.start()
+
+ uses--
+ if(uses == 0)
+ qdel(src)
+
+/* Simple sound player, Mapper friendly! */
+
+/obj/effect/step_trigger/sound_effect
+ var/sound //eg. path to the sound, inside '' eg: 'growl.ogg'
+ var/volume = 100
+ var/freq_vary = 1 //Should the frequency of the sound vary?
+ var/extra_range = 0 // eg World.view = 7, extra_range = 1, 7+1 = 8, 8 turfs radius
+ var/happens_once = 0
+ var/triggerer_only = 0 //Whether the triggerer is the only person who hears this
+
+
+/obj/effect/step_trigger/sound_effect/Trigger(atom/movable/A)
+ var/turf/T = get_turf(A)
+
+ if(!T)
+ return
+
+ if(triggerer_only && ismob(A))
+ var/mob/B = A
+ B.playsound_local(T, sound, volume, freq_vary)
+ else
+ playsound(T, sound, volume, freq_vary, extra_range)
+
+ if(happens_once)
+ qdel(src)
+
+>>>>>>> f912b6e... Fixes Lord Singuloth hungering for more than he should (#33025)
diff --git a/code/game/objects/items/chrono_eraser.dm b/code/game/objects/items/chrono_eraser.dm
index 6f1ab39013..d65ef6fc2a 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 129c6c92c8..b7ec8c36b5 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 ca234308d8..d0c0979366 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 c5a4f3a58a..a2b5a864c4 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 3b0cb1921a..b933e566be 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 749b98c09a..866b763fe6 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 ecbd8a4135..743e84aca4 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 d7fca5c84f..18eb52c8f8 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -366,7 +366,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 9625a47cf8..8d36922bdf 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 e3792d40ba..ccec94bea8 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 f04c61426b..2756d879d1 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 f2d99bc849..a88e271056 100644
--- a/code/modules/projectiles/guns/beam_rifle.dm
+++ b/code/modules/projectiles/guns/beam_rifle.dm
@@ -772,3 +772,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 4bf6ea43b1..d19079d563 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 e8d65cae9f..85956b0c6d 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 25b170745f..ed6abe1410 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)]"