/obj/structure
icon = 'icons/obj/structures.dmi'
pressure_resistance = 8
obj_integrity = 300
max_integrity = 300
var/climb_time = 20
var/climb_stun = 2
var/climbable = FALSE
var/mob/structureclimber
var/broken = 0 //similar to machinery's stat BROKEN
/obj/structure/New()
if (!armor)
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50)
..()
if(smooth)
queue_smooth(src)
queue_smooth_neighbors(src)
icon_state = ""
if(ticker)
cameranet.updateVisibility(src)
/obj/structure/Destroy()
if(ticker)
cameranet.updateVisibility(src)
if(opacity)
UpdateAffectingLights()
if(smooth)
queue_smooth_neighbors(src)
return ..()
/obj/structure/attack_hand(mob/user)
. = ..()
add_fingerprint(user)
if(structureclimber && structureclimber != user)
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
structureclimber.Weaken(2)
structureclimber.visible_message("[structureclimber.name] has been knocked off the [src]", "You're knocked off the [src]!", "You see [structureclimber.name] get knocked off the [src]")
interact(user)
/obj/structure/interact(mob/user)
ui_interact(user)
/obj/structure/ui_act(action, params)
..()
add_fingerprint(usr)
/obj/structure/MouseDrop_T(atom/movable/O, mob/user)
. = ..()
if(!climbable)
return
if(ismob(O) && user == O && iscarbon(user))
if(user.canmove)
climb_structure(user)
return
if ((!( istype(O, /obj/item/weapon) ) || user.get_active_held_item() != O))
return
if(iscyborg(user))
return
if(!user.drop_item())
return
if (O.loc != src.loc)
step(O, get_dir(O, src))
return
/obj/structure/proc/climb_structure(mob/user)
src.add_fingerprint(user)
user.visible_message("[user] starts climbing onto [src].", \
"You start climbing onto [src]...")
var/adjusted_climb_time = climb_time
if(user.restrained()) //climbing takes twice as long when restrained.
adjusted_climb_time *= 2
if(isalien(user))
adjusted_climb_time *= 0.25 //aliens are terrifyingly fast
structureclimber = user
if(do_mob(user, user, adjusted_climb_time))
if(src.loc) //Checking if structure has been destroyed
density = 0
if(step(user,get_dir(user,src.loc)))
user.visible_message("[user] climbs onto [src].", \
"You climb onto [src].")
add_logs(user, src, "climbed onto")
user.Stun(climb_stun)
. = 1
else
user << "You fail to climb onto [src]."
density = 1
structureclimber = null
/obj/structure/examine(mob/user)
..()
if(!(resistance_flags & INDESTRUCTIBLE))
if(resistance_flags & ON_FIRE)
user << "It's on fire!"
if(broken)
user << "It looks broken."
var/examine_status = examine_status()
if(examine_status)
user << examine_status
/obj/structure/proc/examine_status() //An overridable proc, mostly for falsewalls.
var/healthpercent = (obj_integrity/max_integrity) * 100
switch(healthpercent)
if(100 to INFINITY)
return "It seems pristine and undamaged."
if(50 to 100)
return "It looks slightly damaged."
if(25 to 50)
return "It appears heavily damaged."
if(0 to 25)
return "It's falling apart!"