Ports wheelchairs from Hippiestation (#42401)

* Ports wheelchairs from Hippiestation

* Apply suggestions from code review

Thanks Cyberboss!

Co-Authored-By: 81Denton <32391752+81Denton@users.noreply.github.com>

* Removes unneccessary vars+attackby(), uses obj_destruction()

* Uses overlay SS and moved()

* removes redundant else, GetComponent(), moves has_buckled_mobs() to Destroy(), etc.

* Apply suggestions from code review

Co-Authored-By: 81Denton <32391752+81Denton@users.noreply.github.com>

* Removes unneeded has_buckled_mobs()
This commit is contained in:
81Denton
2019-01-24 15:25:23 +01:00
committed by Jordan Brown
parent 01b5b4f289
commit 21fd1b2cea
5 changed files with 124 additions and 0 deletions
+8
View File
@@ -382,6 +382,14 @@
/obj/item/stack/rods = 12)
category = CAT_MISC
/datum/crafting_recipe/wheelchair
name = "Wheelchair"
result = /obj/vehicle/ridden/wheelchair
reqs = list(/obj/item/stack/sheet/metal = 4,
/obj/item/stack/rods = 6)
time = 100
category = CAT_MISC
/datum/crafting_recipe/mousetrap
name = "Mouse Trap"
result = /obj/item/assembly/mousetrap
+13
View File
@@ -31,6 +31,19 @@
occupant_actions = list()
generate_actions()
/obj/vehicle/examine(mob/user)
..()
if(resistance_flags & ON_FIRE)
to_chat(user, "<span class='warning'>It's on fire!</span>")
var/healthpercent = obj_integrity/max_integrity * 100
switch(healthpercent)
if(50 to 99)
to_chat(user, "It looks slightly damaged.")
if(25 to 50)
to_chat(user, "It appears heavily damaged.")
if(0 to 25)
to_chat(user, "<span class='warning'>It's falling apart!</span>")
/obj/vehicle/proc/is_key(obj/item/I)
return I? (key_type_exact? (I.type == key_type) : istype(I, key_type)) : FALSE
+102
View File
@@ -0,0 +1,102 @@
/obj/vehicle/ridden/wheelchair //ported from Hippiestation (by Jujumatic)
name = "wheelchair"
desc = "A chair with big wheels. It looks like you can move in this on your own."
icon = 'icons/obj/vehicles.dmi'
icon_state = "wheelchair"
layer = OBJ_LAYER
max_integrity = 100
armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 30) //Wheelchairs aren't super tough yo
legs_required = 0 //You'll probably be using this if you don't have legs
canmove = TRUE
density = FALSE //Thought I couldn't fix this one easily, phew
/obj/vehicle/ridden/wheelchair/Initialize()
. = ..()
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
D.vehicle_move_delay = 0
D.set_vehicle_dir_layer(SOUTH, OBJ_LAYER)
D.set_vehicle_dir_layer(NORTH, ABOVE_MOB_LAYER)
D.set_vehicle_dir_layer(EAST, OBJ_LAYER)
D.set_vehicle_dir_layer(WEST, OBJ_LAYER)
/obj/vehicle/ridden/wheelchair/ComponentInitialize() //Since it's technically a chair I want it to have chair properties
. = ..()
AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE, CALLBACK(src, .proc/can_user_rotate),CALLBACK(src, .proc/can_be_rotated),null)
/obj/vehicle/ridden/wheelchair/obj_destruction(damage_flag)
new /obj/item/stack/rods(drop_location(), 1)
new /obj/item/stack/sheet/metal(drop_location(), 1)
..()
/obj/vehicle/ridden/wheelchair/Destroy()
if(has_buckled_mobs())
var/mob/living/carbon/H = buckled_mobs[1]
unbuckle_mob(H)
return ..()
/obj/vehicle/ridden/wheelchair/driver_move(mob/living/user, direction)
var/mob/living/carbon/human/H = user
if(istype(H))
if(!H.get_num_arms() && canmove)
to_chat(H, "<span class='warning'>You can't move the wheels without arms!</span>")
canmove = FALSE
addtimer(VARSET_CALLBACK(src, canmove , TRUE), 20)
return FALSE
var/datum/component/riding/D = GetComponent(/datum/component/riding)
D.vehicle_move_delay = 10/H.get_num_arms()
..()
/obj/vehicle/ridden/wheelchair/Moved()
. = ..()
cut_overlays()
playsound(src, 'sound/effects/roll.ogg', 75, 1)
if(has_buckled_mobs())
handle_rotation_overlayed()
/obj/vehicle/ridden/wheelchair/post_buckle_mob(mob/living/user)
. = ..()
handle_rotation_overlayed()
/obj/vehicle/ridden/wheelchair/post_unbuckle_mob()
. = ..()
cut_overlays()
/obj/vehicle/ridden/wheelchair/setDir(newdir)
..()
handle_rotation(newdir)
/obj/vehicle/ridden/wheelchair/wrench_act(mob/living/user, obj/item/I) //Attackby should stop it attacking the wheelchair after moving away during decon
to_chat(user, "<span class='notice'>You begin to detach the wheels...</span>")
if(I.use_tool(src, user, 40, volume=50))
to_chat(user, "<span class='notice'>You detach the wheels and deconstruct the chair.</span>")
new /obj/item/stack/rods(drop_location(), 6)
new /obj/item/stack/sheet/metal(drop_location(), 4)
qdel(src)
return TRUE
/obj/vehicle/ridden/wheelchair/proc/handle_rotation(direction)
if(has_buckled_mobs())
handle_rotation_overlayed()
for(var/m in buckled_mobs)
var/mob/living/buckled_mob = m
buckled_mob.setDir(direction)
/obj/vehicle/ridden/wheelchair/proc/handle_rotation_overlayed()
cut_overlays()
var/image/V = image(icon = icon, icon_state = "wheelchair_overlay", layer = FLY_LAYER, dir = src.dir)
add_overlay(V)
/obj/vehicle/ridden/wheelchair/proc/can_be_rotated(mob/living/user)
return TRUE
/obj/vehicle/ridden/wheelchair/proc/can_user_rotate(mob/living/user)
var/mob/living/L = user
if(istype(L))
if(!user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
return FALSE
if(isobserver(user) && CONFIG_GET(flag/ghost_interaction))
return TRUE
return FALSE