diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 6cf7baf6232..4167d3c0f5a 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -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 diff --git a/code/modules/vehicles/_vehicle.dm b/code/modules/vehicles/_vehicle.dm index 33a361eae1f..46bb9c203b8 100644 --- a/code/modules/vehicles/_vehicle.dm +++ b/code/modules/vehicles/_vehicle.dm @@ -31,6 +31,19 @@ occupant_actions = list() generate_actions() +/obj/vehicle/examine(mob/user) + ..() + if(resistance_flags & ON_FIRE) + to_chat(user, "It's on fire!") + 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, "It's falling apart!") + /obj/vehicle/proc/is_key(obj/item/I) return I? (key_type_exact? (I.type == key_type) : istype(I, key_type)) : FALSE diff --git a/code/modules/vehicles/wheelchair.dm b/code/modules/vehicles/wheelchair.dm new file mode 100644 index 00000000000..c9ca220d50f --- /dev/null +++ b/code/modules/vehicles/wheelchair.dm @@ -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, "You can't move the wheels without arms!") + 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, "You begin to detach the wheels...") + if(I.use_tool(src, user, 40, volume=50)) + to_chat(user, "You detach the wheels and deconstruct the chair.") + 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 diff --git a/icons/obj/vehicles.dmi b/icons/obj/vehicles.dmi index 495aa229012..9bcacc3ad39 100644 Binary files a/icons/obj/vehicles.dmi and b/icons/obj/vehicles.dmi differ diff --git a/tgstation.dme b/tgstation.dme index cd769112ca9..606fd1dcbd3 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -2709,6 +2709,7 @@ #include "code\modules\vehicles\speedbike.dm" #include "code\modules\vehicles\vehicle_actions.dm" #include "code\modules\vehicles\vehicle_key.dm" +#include "code\modules\vehicles\wheelchair.dm" #include "code\modules\vehicles\cars\car.dm" #include "code\modules\vehicles\cars\clowncar.dm" #include "code\modules\vending\_vending.dm"