diff --git a/baystation12.dme b/baystation12.dme index ba5f2823c2d..ecda588124e 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1705,6 +1705,7 @@ #include "code\modules\multiz\_stubs.dm" #include "code\modules\multiz\basic.dm" #include "code\modules\multiz\movement.dm" +#include "code\modules\multiz\mz_items.dm" #include "code\modules\multiz\openspace.dm" #include "code\modules\multiz\pipes.dm" #include "code\modules\multiz\structures.dm" diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm index 9a50a2c0dd3..38b76aa17ff 100644 --- a/code/modules/multiz/movement.dm +++ b/code/modules/multiz/movement.dm @@ -188,6 +188,10 @@ // Lattices and stairs stop things from falling. if(locate(/obj/structure/lattice, dest) || locate(/obj/structure/stairs, dest)) return FALSE + //Ladders too + if(below && locate(/obj/structure/ladder) in below) + return FALSE + // The var/climbers API is implemented here. if (LAZYLEN(dest.climbers) && (src in dest.climbers)) diff --git a/code/modules/multiz/mz_items.dm b/code/modules/multiz/mz_items.dm new file mode 100644 index 00000000000..10892bfca4b --- /dev/null +++ b/code/modules/multiz/mz_items.dm @@ -0,0 +1,60 @@ +/obj/item/weapon/ladder_mobile + name = "mobile ladder" + desc = "A lightweight deployable ladder, which you can use to move up or down. Or alternatively, you can bash some faces in." + icon_state = "ladder01" + icon = 'icons/obj/structures.dmi' + throw_range = 3 + force = 10 + w_class = 4.0 + slot_flags = SLOT_BACK + +/obj/item/weapon/ladder_mobile/proc/place_ladder(atom/A,mob/user) + + if(istype(A, /turf/simulated/open)) //Place into open space + var/turf/below_loc = GetBelow(A) + if (!below_loc || (istype(/turf/space,below_loc))) + user << "Why would you do that?! There is only infinite space there..." + return + user.visible_message("[user] begins to lower \the [src] into \the [A].") + if(!handle_action(A,user)) + return + var/obj/structure/ladder/mobile/body/R = new(A) + var/obj/structure/ladder/mobile/base/D = new(A) + D.forceMove(below_loc) + R.target_down = D + D.target_up = R + + user.drop_item() + qdel(src) + + if(istype(A, /turf/simulated/floor)) //Place onto Floor + var/turf/upper_loc = GetAbove(A) + if (!upper_loc || !istype(upper_loc,/turf/simulated/open)) + user << "There is something above. You can't deploy!" + return + user.visible_message("[user] begins deploying \the [src] on \the [A].") + if(!handle_action(A,user)) + return + var/obj/structure/ladder/mobile/base/R = new(A) + var/obj/structure/ladder/mobile/body/D = new(A) + D.forceMove(upper_loc) // moves A up to upper_loc. + R.target_up = D + D.target_down = R + + user.drop_item() + qdel(src) + +/obj/item/weapon/ladder_mobile/afterattack(atom/A, mob/user,proximity) + if(!proximity) + return + //addtimer(CALLBACK(src, .proc/place_ladder, A, user), 5000) + place_ladder(A,user) + +/obj/item/weapon/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!") + return FALSE + if (!A || QDELETED(src) || QDELETED(user)) + // Shit was deleted during delay, call is no longer valid. + return FALSE + return TRUE \ No newline at end of file diff --git a/code/modules/multiz/structures.dm b/code/modules/multiz/structures.dm index a5dc5b0cf31..6140df5696d 100644 --- a/code/modules/multiz/structures.dm +++ b/code/modules/multiz/structures.dm @@ -123,6 +123,27 @@ allowed_directions = UP|DOWN icon_state = "ladder11" +/obj/structure/ladder/mobile/base + allowed_directions = UP + icon_state = "ladder11" +/obj/structure/ladder/mobile/body + allowed_directions = DOWN + icon_state = "ladder11" + +/obj/structure/ladder/mobile/verb/fold() + set name = "Fold Ladder" + set category = "Object" + set src in oview(1) + var/obj/item/weapon/ladder_mobile/R = new(src.loc) + src.transfer_fingerprints_to(R) + + if(src.target_down == null) + QDEL_NULL(src.target_up) + qdel(src) + else + QDEL_NULL(src.target_down) + qdel(src) + /obj/structure/stairs name = "Stairs" desc = "Stairs leading to another deck. Not too useful if the gravity goes out."