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