From 6cc36acccb0a397e6ded948c791bede121ecd617 Mon Sep 17 00:00:00 2001 From: Ketrai Date: Fri, 5 Jul 2019 17:03:51 +0200 Subject: [PATCH] makes ledges work, kinda. --- code/game/objects/structures/ledges.dm | 71 ++++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 4 deletions(-) diff --git a/code/game/objects/structures/ledges.dm b/code/game/objects/structures/ledges.dm index 03497b8e29..1afa2efb01 100644 --- a/code/game/objects/structures/ledges.dm +++ b/code/game/objects/structures/ledges.dm @@ -2,21 +2,84 @@ name = "rock ledge" desc = "An easily scaleable rocky ledge." icon = 'icons/obj/ledges.dmi' - density = 0 + density = 1 throwpass = 1 - climbable = 0 - layer = WINDOW_LAYER + climbable = 1 anchored = 1 + var/solidledge = 1 + flags = ON_BORDER + layer = STAIRS_LAYER icon_state = "ledge" -/obj/structure/ledge/ledge_corner +/obj/structure/ledge_corner icon_state = "ledge-corner" + flags = 0 + name = "rock ledge" + desc = "An easily scaleable rocky ledge." + icon = 'icons/obj/ledges.dmi' + density = 1 + throwpass = 1 + climbable = 1 + anchored = 1 + layer = STAIRS_LAYER /obj/structure/ledge/ledge_nub desc = "Part of a rocky ledge." icon_state = "ledge-nub" + density = 0 + solidledge = 0 /obj/structure/ledge/ledge_stairs name = "rock stairs" desc = "A colorful set of rocky stairs" icon_state = "ledge-stairs" + density = 0 + solidledge = 0 + +/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)) + 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/do_climb(var/mob/living/user) + if(!can_climb(user)) + return + + usr.visible_message("[user] starts climbing onto \the [src]!") + climbers |= user + + if(!do_after(user,(issmall(user) ? 20 : 34))) + climbers -= user + return + + if(!can_climb(user, post_climb_check=1)) + climbers -= user + return + + if(get_turf(user) == get_turf(src)) + usr.forceMove(get_step(src, src.dir)) + else + usr.forceMove(get_turf(src)) + + usr.visible_message("[user] climbed over \the [src]!") + climbers -= user + +/obj/structure/ledge/can_climb(var/mob/living/user, post_climb_check=0) + if(!..()) + return 0 + + if(get_turf(user) == get_turf(src)) + var/obj/occupied = neighbor_turf_impassable() + if(occupied) + to_chat(user, "You can't climb there, there's \a [occupied] in the way.") + return 0 + return 1 \ No newline at end of file