mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-24 13:30:42 +01:00
Portable Ladders (#2434)
Add portable ladders as items. Deploy on floors that have an open space above them, and in open spaces that have floors beneath them. Fold them, to reuse them. Need item,structure base and structure body sprites. Probably an in hand sprite too.
This commit is contained in:
@@ -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))
|
||||
|
||||
@@ -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 << "<span class='notice'>Why would you do that?! There is only infinite space there...</span>"
|
||||
return
|
||||
user.visible_message("<span class='warning'>[user] begins to lower \the [src] into \the [A].</span>")
|
||||
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 << "<span class='notice'>There is something above. You can't deploy!</span>"
|
||||
return
|
||||
user.visible_message("<span class='warning'>[user] begins deploying \the [src] on \the [A].</span>")
|
||||
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
|
||||
@@ -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."
|
||||
|
||||
Reference in New Issue
Block a user