diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index b8ebb213788b..50d9e54ecd0a 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -110,7 +110,7 @@ /obj/structure/proc/do_climb(mob/living/user, mods) if(!can_climb(user)) - return + return FALSE var/list/climbdata = list("climb_delay" = climb_delay) SEND_SIGNAL(user, COMSIG_LIVING_CLIMB_STRUCTURE, climbdata) @@ -120,10 +120,10 @@ user.visible_message(SPAN_WARNING("[user] starts [flags_atom & ON_BORDER ? "leaping over" : climb_over_string] \the [src]!")) if(!do_after(user, final_climb_delay, INTERRUPT_NO_NEEDHAND, BUSY_ICON_GENERIC, numticks = 2)) - return + return FALSE if(!can_climb(user)) - return + return FALSE var/turf/TT = get_turf(src) if(flags_atom & ON_BORDER) @@ -145,6 +145,7 @@ user.forceMove(TT) for(var/atom/movable/thing as anything in grabbed_things) // grabbed things aren't moved to the tile immediately to: make the animation better, preserve the grab thing.forceMove(TT) + return TRUE /obj/structure/proc/structure_shaken() diff --git a/code/game/objects/structures/barricade/handrail.dm b/code/game/objects/structures/barricade/handrail.dm index 9fed4009eec2..9a200f0ea7b3 100644 --- a/code/game/objects/structures/barricade/handrail.dm +++ b/code/game/objects/structures/barricade/handrail.dm @@ -18,6 +18,7 @@ var/build_state = BARRICADE_BSTATE_SECURED var/reinforced = FALSE //Reinforced to be a cade or not var/can_be_reinforced = TRUE //can we even reinforce this handrail or not? + var/autoclimb = TRUE /obj/structure/barricade/handrail/update_icon() overlays.Cut() @@ -40,6 +41,29 @@ if(E.icon_path && E.obj_icon_state_path) overlays += image(E.icon_path, icon_state = E.obj_icon_state_path) +/obj/structure/barricade/handrail/Collided(atom/movable/movable) + if(istype(movable,/mob/living/carbon/xenomorph/ravager) || istype(movable,/mob/living/carbon/xenomorph/crusher)) + var/mob/living/carbon/xenomorph/xenomorph = movable + if(!xenomorph.stat) + visible_message(SPAN_DANGER("[xenomorph] plows straight through [src]!")) + deconstruct(FALSE) + return + else + if(ismob(movable) && autoclimb) + var/mob/living/climber = movable + if(climber.a_intent == INTENT_HARM) + climber.client?.move_delay += 3 DECISECONDS + var/climbed = do_climb(climber) + if(climbed) + if(prob(25)) + if(ishuman(climber)) + var/mob/living/carbon/human/human = climber + human.apply_damage(5,BRUTE,no_limb_loss = TRUE) + else + climber.apply_damage(5,BRUTE) + climber.visible_message(SPAN_WARNING("You hit yourself as you vault over the [src]")) + ..() + /obj/structure/barricade/handrail/get_examine_text(mob/user) . = ..() switch(build_state)