diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm
index d3c043dcb0b..4ac86e45fad 100644
--- a/code/modules/mob/mob_movement.dm
+++ b/code/modules/mob/mob_movement.dm
@@ -481,24 +481,25 @@
/mob/proc/Check_Dense_Object() //checks for anything to push off in the vicinity. also handles magboots on gravity-less floors tiles
-
var/shoegrip = Check_Shoegrip()
for(var/turf/simulated/T in RANGE_TURFS(1,src)) //we only care for non-space turfs
if(T.density) //walls work
- return 1
+ return TRUE
else
var/area/A = T.loc
if(A.has_gravity() || shoegrip)
- return 1
+ return TRUE
for(var/obj/O in orange(1, src))
if(istype(O, /obj/structure/lattice))
- return 1
+ return TRUE
+ if(istype(O, /obj/structure/ladder))
+ return TRUE
if(O && O.density && O.anchored)
- return 1
+ return TRUE
- return 0
+ return FALSE
/mob/proc/Check_Shoegrip()
return 0
diff --git a/code/modules/multiz/mobile_ladders.dm b/code/modules/multiz/mobile_ladders.dm
index 6a5503639fc..94e3c5e6276 100644
--- a/code/modules/multiz/mobile_ladders.dm
+++ b/code/modules/multiz/mobile_ladders.dm
@@ -46,20 +46,20 @@
new /obj/structure/ladder/mobile(upper_loc)
- user.drop_from_inventory(src,get_turf(src))
+ user.drop_from_inventory(src, get_turf(src))
qdel(src)
/obj/item/ladder_mobile/afterattack(atom/A, mob/user,proximity)
- if (!proximity)
+ if(!proximity)
return
place_ladder(A,user)
/obj/item/ladder_mobile/proc/handle_action(atom/A, mob/user)
- if (!do_after(user, 30, act_target = user))
- to_chat(user, "Can't place ladder! You were interrupted!")
+ if(!do_after(user, 30, act_target = user))
+ to_chat(user, SPAN_WARNING("You were interrupted while placing the ladder!"))
return FALSE
- if (!A || QDELETED(src) || QDELETED(user))
+ if(!A || QDELETED(src) || QDELETED(user))
// Shit was deleted during delay, call is no longer valid.
return FALSE
return TRUE
@@ -67,35 +67,42 @@
/obj/structure/ladder/mobile
base_icon = "mobile_ladder"
+/obj/structure/ladder/mobile/AltClick(mob/user)
+ fold_up(user)
+
/obj/structure/ladder/mobile/verb/fold()
set name = "Fold Ladder"
set category = "Object"
set src in oview(1)
- if (usr.incapacitated() || !usr.IsAdvancedToolUser() || !ishuman(usr))
- to_chat(usr, "You can't do that right now!")
+ fold_up(usr)
+
+/obj/structure/ladder/mobile/proc/fold_up(var/mob/user)
+ if(!istype(user))
+ return
+ if(use_check_and_message(user))
return
- var/mob/living/carbon/human/H = usr
- H.visible_message("[H] starts folding up [src].",
- "You start folding up [src].")
+ user.visible_message(SPAN_NOTICE("\The [user] starts folding up \the [src]."),
+ SPAN_NOTICE("You start folding up \the [src]."))
- if (!do_after(H, 30, act_target = src))
- to_chat(H, "You are interrupted!")
+ if(!do_after(user, 30, act_target = src))
+ to_chat(user, SPAN_WARNING("You are interrupted!"))
return
- if (QDELETED(src))
+ if(QDELETED(src))
return
- var/obj/item/ladder_mobile/R = new(get_turf(H))
+ var/obj/item/ladder_mobile/R = new /obj/item/ladder_mobile(get_turf(user))
transfer_fingerprints_to(R)
+ user.put_in_hands(R)
- H.visible_message("[H] folds [src] up into [R]!",
- "You fold [src] up into [R]!")
+ user.visible_message(SPAN_NOTICE("\The [user] folds \the [src] up into \the [R]!"),
+ SPAN_NOTICE("You fold \the [src] up into \the [R]!"))
if(target_down)
QDEL_NULL(target_down)
qdel(src)
else
QDEL_NULL(target_up)
- qdel(src)
+ qdel(src)
\ No newline at end of file
diff --git a/html/changelogs/geeves-ladder_grip.yml b/html/changelogs/geeves-ladder_grip.yml
new file mode 100644
index 00000000000..3a414839586
--- /dev/null
+++ b/html/changelogs/geeves-ladder_grip.yml
@@ -0,0 +1,7 @@
+author: Geeves
+
+delete-after: True
+
+changes:
+ - rscadd: "Ladders can now be used to grip to prevent floating away, when there isn't gravity or when in space."
+ - rscadd: "Mobile ladders can now be alt-clicked to be taken down. Mobile ladders now go into your hands when successfully folded."
\ No newline at end of file