From 727ed8f024dfeaf06278c82534ad4ff22a10f5b7 Mon Sep 17 00:00:00 2001
From: Kashargul <144968721+Kashargul@users.noreply.github.com>
Date: Sun, 17 Dec 2023 01:03:43 +0100
Subject: [PATCH] continue pulling on map edges / map portals
---
.../objects/effects/map_effects/portal.dm | 4 ++--
code/game/turfs/space/space.dm | 15 +++++++++++--
code/modules/mob/mob.dm | 22 ++++++++++++++++++-
3 files changed, 36 insertions(+), 5 deletions(-)
diff --git a/code/game/objects/effects/map_effects/portal.dm b/code/game/objects/effects/map_effects/portal.dm
index ede5cbdacac..769c4bcc90e 100644
--- a/code/game/objects/effects/map_effects/portal.dm
+++ b/code/game/objects/effects/map_effects/portal.dm
@@ -51,7 +51,7 @@ when portals are shortly lived, or when portals are made to be obvious with spec
plane = TURF_PLANE
layer = ABOVE_TURF_LAYER
appearance_flags = NONE
-
+
var/obj/effect/map_effect/portal/counterpart = null // The portal line or master that this is connected to, on the 'other side'.
// Information used to apply `pixel_[x|y]` offsets so that the visuals line up.
@@ -93,7 +93,7 @@ when portals are shortly lived, or when portals are made to be obvious with spec
// pulled.forceMove(get_turf(counterpart))
pulled.forceMove(counterpart.get_focused_turf())
L.forceMove(counterpart.get_focused_turf())
- L.start_pulling(pulled)
+ L.continue_pulling(pulled)
else
L.forceMove(counterpart.get_focused_turf())
else
diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm
index 4986701fccf..a997ed9a663 100644
--- a/code/game/turfs/space/space.dm
+++ b/code/game/turfs/space/space.dm
@@ -41,7 +41,7 @@
/turf/space/proc/toggle_transit(var/direction)
if(edge) //Not a great way to do this yet. Maybe we'll come up with one. We could pre-make sprites... or tile the overlay over it?
return
-
+
if(!direction) //Stopping our transit
appearance = SSskybox.dust_cache["[((x + y) ^ ~(x * y) + z) % 25]"]
else if(direction & (NORTH|SOUTH)) //Starting transit vertically
@@ -137,7 +137,18 @@
. = ..()
if(edge && ticker?.mode && !density) // !density so 'fake' space turfs don't fling ghosts everywhere
- A?.touch_map_edge()
+ if(isliving(A))
+ var/mob/living/L = A
+ if(L.pulling)
+ var/atom/movable/pulled = L.pulling
+ L.stop_pulling()
+ A?.touch_map_edge()
+ pulled.forceMove(L.loc)
+ L.continue_pulling(pulled)
+ else
+ A?.touch_map_edge()
+ else
+ A?.touch_map_edge()
/turf/space/proc/Sandbox_Spacemove(atom/movable/A as mob|obj)
var/cur_x
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index a8b4d14a396..71fabe29a73 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -70,7 +70,7 @@
to_chat(src, "... You can almost hear someone talking ...")
else
if(client && client.prefs.chat_timestamp)
- msg = replacetext(msg, new/regex("^(]*)?>)((?:.|\\n)*)", ""), "$1[time] $2")
+ msg = replacetext(msg, new/regex("^(]*)?>)((?:.|\\n)*)", ""), "$1[time] $2")
to_chat(src,msg)
else if(teleop)
to_chat(teleop, create_text_tag("body", "BODY:", teleop.client) + "[msg]")
@@ -616,6 +616,26 @@
var/mob/pulled = AM
pulled.inertia_dir = 0
+// We have pulled something before, so we should be able to safely continue pulling it. This proc is only for portals!
+/mob/proc/continue_pulling(var/atom/movable/AM)
+
+ if ( !AM || src==AM || !isturf(src.loc) ) //if there's no person pulling OR the person is pulling themself OR the object being pulled is inside something: abort!
+ return
+
+ if (AM.anchored)
+ return
+
+ src.pulling = AM
+ AM.pulledby = src
+
+ if(pullin)
+ pullin.icon_state = "pull1"
+
+ //Attempted fix for people flying away through space when cuffed and dragged.
+ if(ismob(AM))
+ var/mob/pulled = AM
+ pulled.inertia_dir = 0
+
/mob/proc/can_use_hands()
return