diff --git a/code/__defines/dcs/signals.dm b/code/__defines/dcs/signals.dm
index 3561178d6be..a72788d41a8 100644
--- a/code/__defines/dcs/signals.dm
+++ b/code/__defines/dcs/signals.dm
@@ -236,11 +236,6 @@
#define COMSIG_MOVABLE_CROSSED "movable_crossed"
///when we cross over something (calling Crossed() on that atom)
#define COMSIG_CROSSED_MOVABLE "crossed_movable"
-///from base of atom/movable/Uncross(): (/atom/movable)
-#define COMSIG_MOVABLE_UNCROSS "movable_uncross"
- #define COMPONENT_MOVABLE_BLOCK_UNCROSS (1<<0)
-///from base of atom/movable/Uncrossed(): (/atom/movable)
-#define COMSIG_MOVABLE_UNCROSSED "movable_uncrossed"
///from base of atom/movable/Bump(): (/atom)
#define COMSIG_MOVABLE_BUMP "movable_bump"
///from base of atom/movable/throw_impact(): (/atom/hit_atom, /datum/thrownthing/throwingdatum)
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 07c1ed38510..183cbf4ca8a 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -140,9 +140,6 @@
return flags & INSERT_CONTAINER
*/
-/atom/proc/CheckExit()
- return 1
-
// Used to be for the PROXMOVE flag, but that was terrible, so instead it's just here as a stub for
// all the atoms that still have the proc, but get events other ways.
/atom/proc/HasProximity(turf/T, atom/movable/AM, old_loc)
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 9dfba6c423f..9d61505cc64 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -260,11 +260,6 @@
/atom/movable/Crossed(atom/movable/AM, oldloc)
return
-/atom/movable/Uncross(atom/movable/AM, atom/newloc)
- . = ..()
- if(isturf(newloc) && !CheckExit(AM, newloc))
- return FALSE
-
/atom/movable/Bump(atom/A)
if(!A)
CRASH("Bump was called with no argument.")
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index 9d54018e7d7..28afc5e9ff4 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -86,7 +86,14 @@
/obj/machinery/door/window/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSGLASS))
return TRUE
- if(get_dir(mover, loc) == turn(dir, 180)) //Make sure looking at appropriate border
+ if(get_dir(mover, target) == reverse_dir[dir]) // From elsewhere to here, can't move against our dir
+ return !density
+ return TRUE
+
+/obj/machinery/door/window/Uncross(atom/movable/mover, turf/target)
+ if(istype(mover) && mover.checkpass(PASSGLASS))
+ return TRUE
+ if(get_dir(mover, target) == dir) // From here to elsewhere, can't move in our dir
return !density
return TRUE
@@ -97,14 +104,6 @@
return !density // Air can flow if open (density == FALSE).
return TRUE // Windoors don't block if not facing the right way.
-/obj/machinery/door/window/CheckExit(atom/movable/mover as mob|obj, turf/target as turf)
- if(istype(mover) && mover.checkpass(PASSGLASS))
- return 1
- if(get_dir(loc, target) == dir)
- return !density
- else
- return 1
-
/obj/machinery/door/window/open()
if (operating == 1 || !density) //doors can still open when emag-disabled
return 0
diff --git a/code/game/objects/structures/fitness_vr.dm b/code/game/objects/structures/fitness_vr.dm
index 960becca412..d6ef4b71924 100644
--- a/code/game/objects/structures/fitness_vr.dm
+++ b/code/game/objects/structures/fitness_vr.dm
@@ -9,18 +9,20 @@
layer = WINDOW_LAYER
anchored = TRUE
flags = ON_BORDER
-/obj/structure/fitness/boxing_ropes/CanPass(atom/movable/mover, turf/target) //sets it so that players can enter turf from all directions except the main direction.
+
+/obj/structure/fitness/boxing_ropes/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSTABLE))
return TRUE
- if(get_dir(mover, target) == turn(dir, 180))
+ if(get_dir(mover, target) == reverse_dir[dir]) // From elsewhere to here, can't move against our dir
+ return !density
+ return TRUE
+
+/obj/structure/fitness/boxing_ropes/Uncross(atom/movable/mover, turf/target)
+ if(istype(mover) && mover.checkpass(PASSTABLE))
+ return TRUE
+ if(get_dir(mover, target) == dir) // From here to elsewhere, can't move in our dir
return !density
return TRUE
-/obj/structure/fitness/boxing_ropes/CheckExit(atom/movable/O as mob|obj, target as turf) // Sets it so that players can't leave the truf from the set direction.
- if(istype(O) && O.checkpass(PASSTABLE))
- return 1
- if(get_dir(O.loc, target) == dir)
- return 0
- return 1
/obj/structure/fitness/boxing_ropes/do_climb(var/mob/living/user) //Sets it so that players can climb *over* the turf and will enter the the turf **this** turf is facing.
if(!can_climb(user))
return
@@ -73,12 +75,6 @@
if(get_dir(mover, target) == turn(dir, 180))
return !density
return TRUE
-/obj/structure/fitness/boxing_ropes_bottom/CheckExit(atom/movable/O as mob|obj, target as turf)
- if(istype(O) && O.checkpass(PASSTABLE))
- return 1
- if(get_dir(O.loc, target) == dir)
- return 0
- return 1
/obj/structure/fitness/boxing_ropes_bottom/do_climb(var/mob/living/user)
if(!can_climb(user))
return
@@ -132,12 +128,6 @@
if(get_dir(mover, target) == turn(dir, 180))
return !density
return TRUE
-/obj/structure/fitness/boxing_turnbuckle/CheckExit(atom/movable/O as mob|obj, target as turf)
- if(istype(O) && O.checkpass(PASSTABLE))
- return 1
- if(get_dir(O.loc, target) == dir)
- return 0
- return 1
/obj/structure/fitness/boxing_turnbuckle/do_climb(var/mob/living/user)
if(!can_climb(user))
return
diff --git a/code/game/objects/structures/gravemarker.dm b/code/game/objects/structures/gravemarker.dm
index af5c1708999..e53fcdeb203 100644
--- a/code/game/objects/structures/gravemarker.dm
+++ b/code/game/objects/structures/gravemarker.dm
@@ -39,16 +39,16 @@
/obj/structure/gravemarker/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSTABLE))
return TRUE
- if(get_dir(loc, target) & dir)
+ if(get_dir(mover, target) == reverse_dir[dir]) // From elsewhere to here, can't move against our dir
return !density
return TRUE
-/obj/structure/gravemarker/CheckExit(atom/movable/O as mob|obj, target as turf)
- if(istype(O) && O.checkpass(PASSTABLE))
- return 1
- if(get_dir(O.loc, target) == dir)
- return 0
- return 1
+/obj/structure/gravemarker/Uncross(atom/movable/mover, turf/target)
+ if(istype(mover) && mover.checkpass(PASSTABLE))
+ return TRUE
+ if(get_dir(mover, target) == dir) // From here to elsewhere, can't move in our dir
+ return !density
+ return TRUE
/obj/structure/gravemarker/attackby(obj/item/weapon/W, mob/user as mob)
if(W.is_screwdriver())
diff --git a/code/game/objects/structures/ledges.dm b/code/game/objects/structures/ledges.dm
index b90e406cb2e..819395f2c3f 100644
--- a/code/game/objects/structures/ledges.dm
+++ b/code/game/objects/structures/ledges.dm
@@ -39,16 +39,16 @@
/obj/structure/ledge/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSTABLE))
return TRUE
- if(solidledge && get_dir(mover, target) == turn(dir, 180))
+ if(solidledge && get_dir(mover, target) == reverse_dir[dir]) // From elsewhere to here, can't move against our dir
return !density
return TRUE
-/obj/structure/ledge/CheckExit(atom/movable/O as mob|obj, target as turf)
- if(istype(O) && O.checkpass(PASSTABLE))
- return 1
- if(solidledge && get_dir(O.loc, target) == dir)
- return 0
- return 1
+/obj/structure/ledge/Uncross(atom/movable/mover, turf/target)
+ if(istype(mover) && mover.checkpass(PASSTABLE))
+ return TRUE
+ if(solidledge && get_dir(mover, target) == dir) // From here to elsewhere, can't move in our dir
+ return FALSE
+ return TRUE
/obj/structure/ledge/do_climb(var/mob/living/user)
if(!can_climb(user))
diff --git a/code/game/objects/structures/railing.dm b/code/game/objects/structures/railing.dm
index a4a8e83887c..2f07cff6bff 100644
--- a/code/game/objects/structures/railing.dm
+++ b/code/game/objects/structures/railing.dm
@@ -44,7 +44,14 @@
/obj/structure/railing/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSTABLE))
return TRUE
- if(get_dir(mover, target) == turn(dir, 180))
+ if(get_dir(mover, target) == reverse_dir[dir]) // From elsewhere to here, can't move against our dir
+ return !density
+ return TRUE
+
+/obj/structure/railing/Uncross(atom/movable/mover, turf/target)
+ if(istype(mover) && mover.checkpass(PASSTABLE))
+ return TRUE
+ if(get_dir(mover, target) == dir) // From here to elsewhere, can't move in our dir
return !density
return TRUE
@@ -193,13 +200,6 @@
update_icon()
return
-/obj/structure/railing/CheckExit(atom/movable/O as mob|obj, target as turf)
- if(istype(O) && O.checkpass(PASSTABLE))
- return 1
- if(get_dir(O.loc, target) == dir)
- return 0
- return 1
-
/obj/structure/railing/attackby(obj/item/W as obj, mob/user as mob)
// Dismantle
if(W.is_wrench() && !anchored)
diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index 0677c6a09d7..28e54a4062b 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -57,17 +57,17 @@
/obj/structure/windoor_assembly/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSGLASS))
return TRUE
- if(get_dir(loc, target) == dir) //Make sure looking at appropriate border
+ if(get_dir(mover, target) == reverse_dir[dir]) // From elsewhere to here, can't move against our dir
return !density
return TRUE
-/obj/structure/windoor_assembly/CheckExit(atom/movable/mover as mob|obj, turf/target as turf)
+/obj/structure/windoor_assembly/Uncross(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSGLASS))
- return 1
- if(get_dir(loc, target) == dir)
+ return TRUE
+ if(get_dir(mover, target) == dir) // From here to elsewhere, can't move in our dir
return !density
else
- return 1
+ return TRUE
/obj/structure/windoor_assembly/proc/rename_door(mob/living/user)
var/t = sanitizeSafe(input(user, "Enter the name for the windoor.", src.name, src.created_name), MAX_NAME_LEN)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index a6f334a2f83..ab52208b25e 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -138,24 +138,24 @@
return TRUE
if(is_fulltile())
return FALSE //full tile window, you can't move into it!
- if((get_dir(loc, target) & dir) || (get_dir(mover, target) == turn(dir, 180)))
+ if(get_dir(mover, target) == reverse_dir[dir]) // From elsewhere to here, can't move against our dir
return !density
else
return TRUE
+/obj/structure/window/Uncross(atom/movable/mover, turf/target)
+ if(istype(mover) && mover.checkpass(PASSGLASS))
+ return TRUE
+ if(get_dir(mover, target) == dir) // From here to elsewhere, can't move in our dir
+ return !density
+ else
+ return TRUE
/obj/structure/window/CanZASPass(turf/T, is_zone)
if(is_fulltile() || get_dir(T, loc) == turn(dir, 180)) // Make sure we're handling the border correctly.
return !anchored // If it's anchored, it'll block air.
return TRUE // Don't stop airflow from the other sides.
-/obj/structure/window/CheckExit(atom/movable/O as mob|obj, target as turf)
- if(istype(O) && O.checkpass(PASSGLASS))
- return 1
- if(get_dir(O.loc, target) == dir)
- return 0
- return 1
-
/obj/structure/window/hitby(AM as mob|obj)
..()
visible_message("[src] was hit by [AM].")
diff --git a/code/modules/holomap/station_holomap.dm b/code/modules/holomap/station_holomap.dm
index 8c88102f06f..b997948a5ac 100644
--- a/code/modules/holomap/station_holomap.dm
+++ b/code/modules/holomap/station_holomap.dm
@@ -82,16 +82,10 @@
if(!watching_mob && isliving(AM) && AM.loc == loc)
startWatching(AM)
-// In order to actually get Bumped() we need to block movement. We're (visually) on a wall, so people
-// couldn't really walk into us anyway. But in reality we are on the turf in front of the wall, so bumping
-// against where we seem is actually trying to *exit* our real loc
-/obj/machinery/station_map/CheckExit(atom/movable/mover as mob|obj, turf/target as turf)
- // log_debug("[src] (dir=[dir]) CheckExit([mover], [target]) get_dir() = [get_dir(target, loc)]")
- if(get_dir(target, loc) == dir) // Opposite of "normal" since we are visually in the next turf over
+/obj/machinery/station_map/Uncross(atom/movable/mover, turf/target)
+ if(get_dir(mover, target) == reverse_dir[dir])
return FALSE
- else
- return TRUE
-
+ return TRUE
/obj/machinery/station_map/proc/startWatching(var/mob/user)
// Okay, does this belong on a screen thing or what?
// One argument is that this is an "in game" object becuase its in the world.
diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm
index 5095405e88a..5d5637ae937 100644
--- a/code/modules/multiz/movement.dm
+++ b/code/modules/multiz/movement.dm
@@ -105,13 +105,6 @@
to_chat(src, "Gravity stops you from moving upward.")
return 0
- //VOREStation Addition Start
- for(var/atom/A in start)
- if(!A.CheckExit(src, destination))
- to_chat(src, "\The [A] blocks you.")
- return 0
- //VOREStation Addition End
-
for(var/atom/A in destination)
if(!A.CanPass(src, start, 1.5, 0))
to_chat(src, "\The [A] blocks you.")
diff --git a/code/modules/tables/interactions.dm b/code/modules/tables/interactions.dm
index 238942595ea..aeb899cf820 100644
--- a/code/modules/tables/interactions.dm
+++ b/code/modules/tables/interactions.dm
@@ -2,12 +2,7 @@
if(istype(mover,/obj/item/projectile))
return (check_cover(mover,target))
if (flipped)
- var/move_dir = get_dir(mover, target)
- // Moving from back to front, gotta climb
- if(move_dir == dir && target != loc)
- return !density
- // Moving from front to back, gotta climb
- if(move_dir == reverse_dir[dir])
+ if(get_dir(mover, target) == reverse_dir[dir]) // From elsewhere to here, can't move against our dir
return !density
return TRUE
if(istype(mover) && mover.checkpass(PASSTABLE))
@@ -27,6 +22,11 @@
return ..()
+/obj/structure/table/Uncross(atom/movable/mover, turf/target)
+ if(flipped && (get_dir(mover, target) == dir)) // From here to elsewhere, can't move in our dir
+ return !density
+ return TRUE
+
//checks if projectile 'P' from turf 'from' can hit whatever is behind the table. Returns 1 if it can, 0 if bullet stops.
/obj/structure/table/proc/check_cover(obj/item/projectile/P, turf/from)
var/turf/cover
@@ -60,17 +60,6 @@
return 1
return 1
-/obj/structure/table/CheckExit(atom/movable/O as mob|obj, target as turf)
- if(istype(O) && O.checkpass(PASSTABLE))
- return 1
- if (flipped==1)
- if (get_dir(loc, target) == dir)
- return !density
- else
- return 1
- return 1
-
-
/obj/structure/table/MouseDrop_T(obj/O as obj, mob/user as mob)
if ((!( istype(O, /obj/item/weapon) ) || user.get_active_hand() != O))
diff --git a/maps/tether/tether_things.dm b/maps/tether/tether_things.dm
index ff00798ba7a..99aae29ffd5 100644
--- a/maps/tether/tether_things.dm
+++ b/maps/tether/tether_things.dm
@@ -140,15 +140,21 @@
/obj/effect/ceiling
invisibility = 101 // nope cant see this
anchored = 1
+ can_atmos_pass = ATMOS_PASS_PROC
-/obj/effect/ceiling/CheckExit(atom/movable/O as mob|obj, turf/target as turf)
- if(target && target.z > src.z)
- return FALSE // Block exit from our turf to above
+/obj/effect/ceiling/CanZASPass(turf/T, is_zone)
+ if(T == GetAbove(src))
+ return FALSE // Keep your air up there, buddy
return TRUE
-/obj/effect/ceiling/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
- if(mover && mover.z > src.z)
- return FALSE // Block entry from above to our turf
+/obj/effect/ceiling/CanPass(atom/movable/mover, turf/target)
+ if(target == GetAbove(src))
+ return FALSE
+ return TRUE
+
+/obj/effect/ceiling/Uncross(atom/movable/mover, turf/target)
+ if(target == GetAbove(src))
+ return FALSE
return TRUE
//