From 8e4f05baed05219fb2228d8b89fe81cd2f467b7c Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Tue, 27 Jul 2021 19:59:29 -0400 Subject: [PATCH] Tables behave better for flipping purposes --- code/ZAS/Atom.dm | 6 ------ code/game/objects/structures.dm | 9 +++++++-- code/modules/tables/flipping.dm | 4 ++-- code/modules/tables/interactions.dm | 20 ++++++++++++++++---- 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/code/ZAS/Atom.dm b/code/ZAS/Atom.dm index 06305182b37..0057d18ca02 100644 --- a/code/ZAS/Atom.dm +++ b/code/ZAS/Atom.dm @@ -30,12 +30,6 @@ else CRASH("Invalid can_atmos_pass = [can_atmos_pass] on [src] ([type])") -/turf/CanPass(atom/movable/mover, turf/target) - if(!target) return FALSE - - if(istype(mover)) // turf/Enter(...) will perform more advanced checks - return !density - /turf/CanZASPass(turf/T, is_zone) if(T.blocks_air || src.blocks_air) return FALSE diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 67d76a8c893..fb9a4a0e8bc 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -89,7 +89,9 @@ /obj/structure/proc/turf_is_crowded() var/turf/T = get_turf(src) if(!T || !istype(T)) - return 0 + return "empty void" + if(T.density) + return T for(var/obj/O in T.contents) if(istype(O,/obj/structure)) var/obj/structure/S = O @@ -113,12 +115,15 @@ LAZYREMOVE(climbers, user) return - usr.forceMove(get_turf(src)) + usr.forceMove(climb_to(user)) if (get_turf(user) == get_turf(src)) usr.visible_message("[user] climbs onto \the [src]!") LAZYREMOVE(climbers, user) +/obj/structure/proc/climb_to(var/mob/living/user) + return get_turf(src) + /obj/structure/proc/structure_shaken() for(var/mob/living/M in climbers) M.Weaken(1) diff --git a/code/modules/tables/flipping.dm b/code/modules/tables/flipping.dm index cc6be3352b8..23d862d66da 100644 --- a/code/modules/tables/flipping.dm +++ b/code/modules/tables/flipping.dm @@ -86,7 +86,7 @@ if(dir != NORTH) plane = MOB_PLANE layer = ABOVE_MOB_LAYER - climbable = FALSE //flipping tables allows them to be used as makeshift barriers + //climbable = FALSE //flipping tables allows them to be used as makeshift barriers flipped = 1 flags |= ON_BORDER for(var/D in list(turn(direction, 90), turn(direction, -90))) @@ -105,7 +105,7 @@ reset_plane_and_layer() flipped = 0 - climbable = initial(climbable) + //climbable = initial(climbable) flags &= ~ON_BORDER for(var/D in list(turn(dir, 90), turn(dir, -90))) var/obj/structure/table/T = locate() in get_step(src.loc,D) diff --git a/code/modules/tables/interactions.dm b/code/modules/tables/interactions.dm index 349624eb786..238942595ea 100644 --- a/code/modules/tables/interactions.dm +++ b/code/modules/tables/interactions.dm @@ -1,11 +1,15 @@ /obj/structure/table/CanPass(atom/movable/mover, turf/target) if(istype(mover,/obj/item/projectile)) return (check_cover(mover,target)) - if (flipped == 1) - if (get_dir(loc, target) == dir) + if (flipped) + var/move_dir = get_dir(mover, target) + // Moving from back to front, gotta climb + if(move_dir == dir && target != loc) return !density - else - return TRUE + // Moving from front to back, gotta climb + if(move_dir == reverse_dir[dir]) + return !density + return TRUE if(istype(mover) && mover.checkpass(PASSTABLE)) return TRUE if(locate(/obj/structure/table/bench) in get_turf(mover)) @@ -15,6 +19,14 @@ return TRUE return FALSE +/obj/structure/table/climb_to(mob/living/mover) + if(flipped && mover.loc == loc) + var/turf/T = get_step(src, dir) + if(T.Enter(mover)) + return T + + return ..() + //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