diff --git a/code/game/objects/structures/medkit.dm b/code/game/objects/structures/medkit.dm new file mode 100644 index 00000000..4d063031 --- /dev/null +++ b/code/game/objects/structures/medkit.dm @@ -0,0 +1,164 @@ +///Reuses fire extinguisher cabinet wall mount code to create an equivalent for medkits. Honestly not sure how most of this works beyond that it does work. + +//structure code +/obj/structure/medkit_cabinet + name = "Medkit Cabinet" + desc = "A small wall mounted cabinet designed to hold a medical kit." + icon = 'icons/obj/wallmounts.dmi' + icon_state = "medkit_closed" + anchored = TRUE + density = FALSE + max_integrity = 200 + integrity_failure = 50 + var/obj/item/storage/firstaid/regular/stored_medkit + var/opened = FALSE + +//initilization stuff for when map is loading, think it spawns medkits possibly. Honestly not sure what it does. +/obj/structure/medkit_cabinet/Initialize(mapload, ndir, building) + . = ..() + if(building) + setDir(ndir) + pixel_x = (dir & 3)? 0 : (dir == 4 ? -27 : 27) + pixel_y = (dir & 3)? (dir ==1 ? -30 : 30) : 0 + opened = TRUE + icon_state = "medkit_empty" + else + stored_medkit = new /obj/item/storage/firstaid/regular(src) + +/obj/structure/medkit_cabinet/examine(mob/user) + ..() + to_chat(user, "Alt-click to [opened ? "close":"open"] it.") + +/obj/structure/medkit_cabinet/Destroy() + if(stored_medkit) + qdel(stored_medkit) + stored_medkit = null + return ..() + +//code from fire extinguishers, doesn't apply here so far as I can tell so commented out. +obj/structure/medkit_cabinet/contents_explosion(severity, target) + if(stored_medkit) + stored_medkit.ex_act(severity, target) + +/obj/structure/medkit_cabinet/handle_atom_del(atom/A) + if(A == stored_medkit) + stored_medkit = null + update_icon() + +//disassembly code +/obj/structure/medkit_cabinet/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/wrench) && !stored_medkit) + to_chat(user, "You start unsecuring [name]...") + I.play_tool_sound(src) + if(I.use_tool(src, user, 60)) + playsound(loc, 'sound/items/deconstruct.ogg', 50, 1) + to_chat(user, "You unsecure [name].") + deconstruct(TRUE) + return + + if(iscyborg(user) || isalien(user)) + return + if(istype(I, /obj/item/storage/firstaid)) + if(!stored_medkit && opened) + if(!user.transferItemToLoc(I, src)) + return + stored_medkit = I + to_chat(user, "You place [I] in [src].") + update_icon() + return TRUE + else + toggle_cabinet(user) + else if(user.a_intent != INTENT_HARM) + toggle_cabinet(user) + else + return ..() + +//storing and removing medkits. +/obj/structure/medkit_cabinet/attack_hand(mob/user) + . = ..() + if(.) + return + if(iscyborg(user) || isalien(user)) + return + if(stored_medkit) + user.put_in_hands(stored_medkit) + to_chat(user, "You take [stored_medkit] from [src].") + stored_medkit = null + if(!opened) + opened = 1 + playsound(loc, 'sound/machines/click.ogg', 15, 1, -3) + update_icon() + else + toggle_cabinet(user) + + +/obj/structure/medkit_cabinet/attack_tk(mob/user) + if(stored_medkit) + stored_medkit.forceMove(loc) + to_chat(user, "You telekinetically remove [stored_medkit] from [src].") + stored_medkit = null + opened = 1 + playsound(loc, 'sound/machines/click.ogg', 15, 1, -3) + update_icon() + else + toggle_cabinet(user) + + +/obj/structure/medkit_cabinet/attack_paw(mob/user) + return attack_hand(user) + +//closes it +/obj/structure/medkit_cabinet/AltClick(mob/living/user) + if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) + return + toggle_cabinet(user) + +/obj/structure/medkit_cabinet/proc/toggle_cabinet(mob/user) + if(opened && broken) + to_chat(user, "[src] is broken open.") + else + playsound(loc, 'sound/machines/click.ogg', 15, 1, -3) + opened = !opened + update_icon() + +//sprite code +/obj/structure/medkit_cabinet/update_icon() + if(!opened) + icon_state = "medkit_closed" + return + if(stored_medkit) + if(istype(stored_medkit, /obj/item/storage/firstaid)) + icon_state = "medkit_white" + else + icon_state = "medkit_white" + else + icon_state = "medkit_empty" + +//drops medkit when busted +/obj/structure/medkit_cabinet/obj_break(damage_flag) + if(!broken && !(flags_1 & NODECONSTRUCT_1)) + broken = 1 + opened = 1 + if(stored_medkit) + stored_medkit.forceMove(loc) + stored_medkit = null + update_icon() + +//I think this is the code to determine mats you get out of it? +/obj/structure/medkit_cabinet/deconstruct(disassembled = TRUE) + if(!(flags_1 & NODECONSTRUCT_1)) + if(disassembled) + new /obj/item/wallframe/medkit_cabinet(loc) + else + new /obj/item/stack/sheet/metal (loc, 2) + if(stored_medkit) + stored_medkit.forceMove(loc) + stored_medkit = null + qdel(src) + +//wall mount to put it on a wall +/obj/item/wallframe/medkit_cabinet + name = "Medkit wall frame." + desc = "Used for building wall-mounted medkit cabinets." + icon_state = "medkit" + result_path = /obj/structure/medkit_cabinet diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 9bbe7914..e3d2e14a 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -339,7 +339,7 @@ death() -/mob/living/incapacitated(ignore_restraints, ignore_grab, ignore_stasis) +/mob/living/incapacitated(ignore_restraints, ignore_grab) if(stat || IsUnconscious() || IsStun() || IsKnockdown() || recoveringstam || (!ignore_restraints && restrained(ignore_grab))) // CIT CHANGE - adds recoveringstam check here return TRUE @@ -603,7 +603,7 @@ ..(pressure_difference, direction, pressure_resistance_prob_delta) /mob/living/can_resist() - return !((next_move > world.time) || incapacitated(ignore_restraints = TRUE, ignore_stasis= TRUE)) + return !((next_move > world.time) || incapacitated(ignore_restraints = TRUE)) /mob/living/verb/resist() set name = "Resist" @@ -1011,8 +1011,6 @@ var/has_legs = get_num_legs() var/has_arms = get_num_arms() var/ignore_legs = get_leg_ignore() - var/in_stasis = IsInStasis() - var/canmove = !buckled && (pulledby) && !chokehold && !IsFrozen() && !in_stasis && (has_arms || ignore_legs || has_legs) var/pinned = resting && pulledby && pulledby.grab_state >= GRAB_AGGRESSIVE // Cit change - adds pinning for aggressive-grabbing people on the ground if(ko || move_and_fall || IsStun() || chokehold) // Cit change - makes resting not force you to drop everything drop_all_held_items() diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_medical_and_dinnerware.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_medical_and_dinnerware.dm index 27852b27..273ff526 100644 --- a/code/modules/research/designs/autolathe_desings/autolathe_designs_medical_and_dinnerware.dm +++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_medical_and_dinnerware.dm @@ -65,6 +65,15 @@ ///Medical// //////////// + +/datum/design/medkit + name = "Medkit Cabinent" + id = "medkit_cabinet" + build_type = AUTOLATHE | PROTOLATHE + materials = list(MAT_METAL = 4000) + build_path = /obj/item/wallframe/medkit_cabinet + category = list("initial", "Medical") + /datum/design/scalpel name = "Scalpel" id = "scalpel" diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 389a5650..c82f46fe 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -11,7 +11,7 @@ design_ids = list("basic_matter_bin", "basic_cell", "basic_scanning", "basic_capacitor", "basic_micro_laser", "micro_mani", "destructive_analyzer", "circuit_imprinter", "experimentor", "rdconsole", "design_disk", "tech_disk", "rdserver", "rdservercontrol", "mechfab", "space_heater", "xlarge_beaker", "sec_rshot", "sec_bshot", "sec_slug", "sec_Islug", "sec_dart", "sec_38", "sec_38lethal", - "rglass","plasteel","plastitanium","plasmaglass","plasmareinforcedglass","titaniumglass","plastitaniumglass","chem_pack") + "rglass","plasteel","plastitanium","plasmaglass","plasmareinforcedglass","titaniumglass","plastitaniumglass","chem_pack","medkit_cabinet") /datum/techweb_node/mmi id = "mmi" diff --git a/icons/obj/wallframe.dmi b/icons/obj/wallframe.dmi index 70149901..58170d0c 100644 Binary files a/icons/obj/wallframe.dmi and b/icons/obj/wallframe.dmi differ diff --git a/icons/obj/wallmounts.dmi b/icons/obj/wallmounts.dmi index 67d05103..5cbaf8de 100644 Binary files a/icons/obj/wallmounts.dmi and b/icons/obj/wallmounts.dmi differ diff --git a/tgstation.dme b/tgstation.dme index c80bb0fb..6d9a2168 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -994,6 +994,7 @@ #include "code\game\objects\structures\life_candle.dm" #include "code\game\objects\structures\loom.dm" #include "code\game\objects\structures\manned_turret.dm" +#include "code\game\objects\structures\medkit.dm" #include "code\game\objects\structures\memorial.dm" #include "code\game\objects\structures\mineral_doors.dm" #include "code\game\objects\structures\mirror.dm"