From 95cb6b23f2e7fbc51d9dc829914ccd8f16a9d481 Mon Sep 17 00:00:00 2001 From: Poojawa Date: Tue, 6 Mar 2018 21:16:46 -0600 Subject: [PATCH] controllers, datums, game --- .../configuration/entries/general.dm | 2 +- .../subsystem/processing/traits.dm | 9 ++--- code/controllers/subsystem/ticker.dm | 2 + code/controllers/subsystem/timer.dm | 2 +- code/datums/browser.dm | 38 ++++++++++--------- code/datums/diseases/_MobProcs.dm | 1 + code/datums/traits/_trait.dm | 25 ++++++++++-- code/datums/traits/negative.dm | 2 +- code/game/gamemodes/game_mode.dm | 2 +- code/game/machinery/cloning.dm | 8 +++- code/game/machinery/computer/cloning.dm | 8 +++- code/game/machinery/computer/law.dm | 2 +- code/game/machinery/doors/airlock.dm | 5 ++- code/game/machinery/doors/poddoor.dm | 2 +- .../telecomms/machines/message_server.dm | 1 + code/game/mecha/combat/durand.dm | 1 + code/game/mecha/combat/phazon.dm | 1 + code/game/objects/items/cards_ids.dm | 2 +- .../circuitboards/machine_circuitboards.dm | 1 - code/game/objects/items/defib.dm | 2 +- code/game/objects/items/hot_potato.dm | 1 - code/game/objects/items/storage/boxes.dm | 8 ++++ code/game/objects/items/tools/weldingtool.dm | 4 +- code/game/objects/items/toys.dm | 4 +- .../crates_lockers/closets/fitness.dm | 2 +- .../crates_lockers/closets/secure/medical.dm | 2 + 26 files changed, 93 insertions(+), 44 deletions(-) diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index 1a7e6849d0..91e1330316 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -394,4 +394,4 @@ min_val = 0 /datum/config_entry/string/default_view - config_entry_value = "15x15" \ No newline at end of file + config_entry_value = "15x15" diff --git a/code/controllers/subsystem/processing/traits.dm b/code/controllers/subsystem/processing/traits.dm index 9d536c8131..17eae4bda2 100644 --- a/code/controllers/subsystem/processing/traits.dm +++ b/code/controllers/subsystem/processing/traits.dm @@ -9,7 +9,7 @@ PROCESSING_SUBSYSTEM_DEF(traits) wait = 10 runlevels = RUNLEVEL_GAME - var/list/traits = list() //Assoc. list of all roundstart trait datums; "name" = /path/ + var/list/traits = list() //Assoc. list of all roundstart trait datum types; "name" = /path/ var/list/trait_points = list() //Assoc. list of trait names and their "point cost"; positive numbers are good traits, and negative ones are bad var/list/trait_objects = list() //A list of all trait objects in the game, since some may process @@ -24,11 +24,10 @@ PROCESSING_SUBSYSTEM_DEF(traits) traits[initial(T.name)] = T trait_points[initial(T.name)] = initial(T.value) -/datum/controller/subsystem/processing/traits/proc/AssignTraits(mob/living/user, client/cli) - if(!isnewplayer(user)) - GenerateTraits(cli) +/datum/controller/subsystem/processing/traits/proc/AssignTraits(mob/living/user, client/cli, spawn_effects) + GenerateTraits(cli) for(var/V in cli.prefs.character_traits) - user.add_trait_datum(V) + user.add_trait_datum(V, spawn_effects) /datum/controller/subsystem/processing/traits/proc/GenerateTraits(client/user) if(user.prefs.character_traits.len) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 851dd2e750..62e20c9854 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -387,6 +387,8 @@ SUBSYSTEM_DEF(ticker) captainless=0 if(player.mind.assigned_role != player.mind.special_role) SSjob.EquipRank(N, player.mind.assigned_role, 0) + if(CONFIG_GET(flag/roundstart_traits)) + SStraits.AssignTraits(player, N.client, TRUE) CHECK_TICK if(captainless) for(var/mob/dead/new_player/N in GLOB.player_list) diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm index 2c46621f16..45e2b667cf 100644 --- a/code/controllers/subsystem/timer.dm +++ b/code/controllers/subsystem/timer.dm @@ -458,7 +458,7 @@ SUBSYSTEM_DEF(timer) if (wait >= 1 && callback && callback.object && callback.object != GLOBAL_PROC && QDELETED(callback.object)) stack_trace("addtimer called with a callback assigned to a qdeleted object") - wait = max(wait, world.tick_lag) + wait = max(wait, 0) if(wait >= INFINITY) CRASH("Attempted to create timer with INFINITY delay") diff --git a/code/datums/browser.dm b/code/datums/browser.dm index 9561515840..f1423bcf6e 100644 --- a/code/datums/browser.dm +++ b/code/datums/browser.dm @@ -223,25 +223,27 @@ /datum/browser/modal/listpicker var/valueslist = list() -/datum/browser/modal/listpicker/New(User,Message,Title,Button1="Ok",Button2,Button3,StealFocus = 1, Timeout = FALSE,list/values,inputtype="checkbox") +/datum/browser/modal/listpicker/New(User,Message,Title,Button1="Ok",Button2,Button3,StealFocus = 1, Timeout = FALSE,list/values,inputtype="checkbox", width, height, slidecolor) if (!User) return var/output = {"
"} @@ -252,7 +254,7 @@ output += {""} output += {"
"} - ..(User, ckey("[User]-[Message]-[Title]-[world.time]-[rand(1,10000)]"), Title, 350, 350, src, StealFocus, Timeout) + ..(User, ckey("[User]-[Message]-[Title]-[world.time]-[rand(1,10000)]"), Title, width, height, src, StealFocus, Timeout) set_content(output) /datum/browser/modal/listpicker/Topic(href,href_list) @@ -272,30 +274,32 @@ opentime = 0 close() -/proc/presentpicker(var/mob/User,Message, Title, Button1="Ok", Button2, Button3, StealFocus = 1,Timeout = 6000,list/values, inputtype = "checkbox") +/proc/presentpicker(var/mob/User,Message, Title, Button1="Ok", Button2, Button3, StealFocus = 1,Timeout = 6000,list/values, inputtype = "checkbox", width, height, slidecolor) if (!istype(User)) if (istype(User, /client/)) var/client/C = User User = C.mob else return - var/datum/browser/modal/listpicker/A = new(User, Message, Title, Button1, Button2, Button3, StealFocus,Timeout, values, inputtype) + var/datum/browser/modal/listpicker/A = new(User, Message, Title, Button1, Button2, Button3, StealFocus,Timeout, values, inputtype, width, height, slidecolor) A.open() A.wait() if (A.selectedbutton) return list("button" = A.selectedbutton, "values" = A.valueslist) -/proc/input_bitfield(var/mob/User, title, bitfield, current_value) +/proc/input_bitfield(var/mob/User, title, bitfield, current_value, nwidth = 350, nheight = 350, nslidecolor, allowed_edit_list = null) if (!User || !(bitfield in GLOB.bitfields)) return var/list/pickerlist = list() for (var/i in GLOB.bitfields[bitfield]) + var/can_edit = 1 + if(!isnull(allowed_edit_list) && !(allowed_edit_list & GLOB.bitfields[bitfield][i])) + can_edit = 0 if (current_value & GLOB.bitfields[bitfield][i]) - pickerlist += list(list("checked" = 1, "value" = GLOB.bitfields[bitfield][i], "name" = i)) + pickerlist += list(list("checked" = 1, "value" = GLOB.bitfields[bitfield][i], "name" = i, "allowed_edit" = can_edit)) else - pickerlist += list(list("checked" = 0, "value" = GLOB.bitfields[bitfield][i], "name" = i)) - var/list/result = presentpicker(User, "", title, Button1="Save", Button2 = "Cancel", Timeout=FALSE, values = pickerlist) - + pickerlist += list(list("checked" = 0, "value" = GLOB.bitfields[bitfield][i], "name" = i, "allowed_edit" = can_edit)) + var/list/result = presentpicker(User, "", title, Button1="Save", Button2 = "Cancel", Timeout=FALSE, values = pickerlist, width = nwidth, height = nheight, slidecolor = nslidecolor) if (islist(result)) if (result["button"] == 2) // If the user pressed the cancel button return diff --git a/code/datums/diseases/_MobProcs.dm b/code/datums/diseases/_MobProcs.dm index bc04a67308..c302059324 100644 --- a/code/datums/diseases/_MobProcs.dm +++ b/code/datums/diseases/_MobProcs.dm @@ -109,6 +109,7 @@ return ..() + //Proc to use when you 100% want to try to infect someone (ignoreing protective clothing and such), as long as they aren't immune /mob/living/proc/ForceContractDisease(datum/disease/D, make_copy = TRUE, del_on_fail = FALSE) if(!CanContractDisease(D)) diff --git a/code/datums/traits/_trait.dm b/code/datums/traits/_trait.dm index a6073b5008..b7cf589ef5 100644 --- a/code/datums/traits/_trait.dm +++ b/code/datums/traits/_trait.dm @@ -11,7 +11,7 @@ var/mob_trait //if applicable, apply and remove this mob trait var/mob/living/trait_holder -/datum/trait/New(mob/living/trait_mob) +/datum/trait/New(mob/living/trait_mob, spawn_effects) ..() if(!trait_mob || (human_only && !ishuman(trait_mob)) || trait_mob.has_trait_datum(type)) qdel(src) @@ -23,9 +23,9 @@ trait_holder.add_trait(mob_trait, ROUNDSTART_TRAIT) START_PROCESSING(SStraits, src) add() - if(!SSticker.HasRoundStarted()) //on roundstart or on latejoin; latejoin code is in new_player.dm + if(spawn_effects) on_spawn() - addtimer(CALLBACK(src, .proc/post_add), 30) + addtimer(CALLBACK(src, .proc/post_add), 30) /datum/trait/Destroy() STOP_PROCESSING(SStraits, src) @@ -38,16 +38,25 @@ SStraits.trait_objects -= src return ..() +/datum/trait/proc/transfer_mob(mob/living/to_mob) + trait_holder.roundstart_traits -= src + to_mob.roundstart_traits += src + trait_holder = to_mob + on_transfer() + /datum/trait/proc/add() //special "on add" effects /datum/trait/proc/on_spawn() //these should only trigger when the character is being created for the first time, i.e. roundstart/latejoin /datum/trait/proc/remove() //special "on remove" effects /datum/trait/proc/on_process() //process() has some special checks, so this is the actual process /datum/trait/proc/post_add() //for text, disclaimers etc. given after you spawn in with the trait +/datum/trait/proc/on_transfer() //code called when the trait is transferred to a new mob /datum/trait/process() if(QDELETED(trait_holder)) qdel(src) return + if(trait_holder.stat == DEAD) + return on_process() /mob/living/proc/get_trait_string(medical) //helper string. gets a string of all the traits the mob has @@ -67,6 +76,16 @@ return "None" return dat.Join("
") +/mob/living/proc/cleanse_trait_datums() //removes all trait datums + for(var/V in roundstart_traits) + var/datum/trait/T = V + qdel(T) + +/mob/living/proc/transfer_trait_datums(mob/living/to_mob) + for(var/V in roundstart_traits) + var/datum/trait/T = V + T.transfer_mob(to_mob) + /* Commented version of Nearsighted to help you add your own traits diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index 9fd966eead..c98db62e8b 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -114,7 +114,7 @@ if(trait_holder.reagents.has_reagent("mindbreaker")) trait_holder.hallucination = 0 return - if(prob(1)) //we'll all be mad soon enough + if(prob(2)) //we'll all be mad soon enough madness() /datum/trait/insanity/proc/madness(mad_fools) diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 8738ac96a9..50ad92d44b 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -542,4 +542,4 @@ if(EMERGENCY_ESCAPED_OR_ENDGAMED) SSticker.news_report = STATION_EVACUATED if(SSshuttle.emergency.is_hijacked()) - SSticker.news_report = SHUTTLE_HIJACK \ No newline at end of file + SSticker.news_report = SHUTTLE_HIJACK diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 048cac8326..da253551e0 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -126,7 +126,7 @@ return examine(user) //Start growing a human clone in the pod! -/obj/machinery/clonepod/proc/growclone(ckey, clonename, ui, se, mindref, datum/species/mrace, list/features, factions) +/obj/machinery/clonepod/proc/growclone(ckey, clonename, ui, se, mindref, datum/species/mrace, list/features, factions, list/traits) if(panel_open) return FALSE if(mess || attempting) @@ -198,6 +198,9 @@ if(H) H.faction |= factions + for(var/V in traits) + new V(H) + H.set_cloned_appearance() H.suiciding = FALSE @@ -316,6 +319,7 @@ SPEAK("An emergency ejection of [clonemind.name] has occurred. Survival not guaranteed.") to_chat(user, "You force an emergency ejection. ") go_out() + mob_occupant.apply_vore_prefs() else return ..() @@ -398,6 +402,7 @@ /obj/machinery/clonepod/container_resist(mob/living/user) if(user.stat == CONSCIOUS) go_out() + mob_occupant.apply_vore_prefs() /obj/machinery/clonepod/emp_act(severity) var/mob/living/mob_occupant = occupant @@ -405,6 +410,7 @@ connected_message(Gibberish("EMP-caused Accidental Ejection", 0)) SPEAK(Gibberish("Exposure to electromagnetic fields has caused the ejection of [mob_occupant.real_name] prematurely." ,0)) go_out() + mob_occupant.apply_vore_prefs() ..() /obj/machinery/clonepod/ex_act(severity, target) diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index d6cf184622..40f003ea34 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -71,7 +71,7 @@ if(pod.occupant) continue //how though? - if(pod.growclone(R.fields["ckey"], R.fields["name"], R.fields["UI"], R.fields["SE"], R.fields["mind"], R.fields["mrace"], R.fields["features"], R.fields["factions"])) + if(pod.growclone(R.fields["ckey"], R.fields["name"], R.fields["UI"], R.fields["SE"], R.fields["mind"], R.fields["mrace"], R.fields["features"], R.fields["factions"], R.fields["traits"])) temp = "[R.fields["name"]] => Cloning cycle in progress..." records -= R @@ -409,7 +409,7 @@ else if(pod.occupant) temp = "Cloning cycle already in progress." playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) - else if(pod.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["features"], C.fields["factions"])) + else if(pod.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["features"], C.fields["factions"], C.fields["traits"])) temp = "[C.fields["name"]] => Cloning cycle in progress..." playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) records.Remove(C) @@ -482,6 +482,10 @@ R.fields["blood_type"] = dna.blood_type R.fields["features"] = dna.features R.fields["factions"] = mob_occupant.faction + R.fields["traits"] = list() + for(var/V in mob_occupant.roundstart_traits) + var/datum/trait/T = V + R.fields["traits"] += T.type if (!isnull(mob_occupant.mind)) //Save that mind so traitors can continue traitoring after cloning. R.fields["mind"] = "[REF(mob_occupant.mind)]" diff --git a/code/game/machinery/computer/law.dm b/code/game/machinery/computer/law.dm index 794cdf5b30..356c21d9f3 100644 --- a/code/game/machinery/computer/law.dm +++ b/code/game/machinery/computer/law.dm @@ -75,4 +75,4 @@ return 0 if(B.scrambledcodes || B.emagged) return 0 - return ..() + return ..() \ No newline at end of file diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 83b58fde65..609da46c52 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -101,8 +101,6 @@ /obj/machinery/door/airlock/Initialize() . = ..() wires = new /datum/wires/airlock(src) - if (cyclelinkeddir) - cyclelinkairlock() if(frequency) set_frequency(frequency) @@ -127,6 +125,8 @@ /obj/machinery/door/airlock/LateInitialize() . = ..() + if (cyclelinkeddir) + cyclelinkairlock() if(abandoned) var/outcome = rand(1,100) switch(outcome) @@ -178,6 +178,7 @@ limit-- while(!FoundDoor && limit) if (!FoundDoor) + log_world("### MAP WARNING, [src] at [get_area_name(src, TRUE)] [COORD(src)] failed to find a valid airlock to cyclelink with!") return FoundDoor.cyclelinkedairlock = src cyclelinkedairlock = FoundDoor diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index 2bce3671e0..9e467e8926 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -68,4 +68,4 @@ /obj/machinery/door/poddoor/try_to_crowbar(obj/item/I, mob/user) if(stat & NOPOWER) - open(1) \ No newline at end of file + open(1) diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm index 239bbd5c60..1846eea322 100644 --- a/code/game/machinery/telecomms/machines/message_server.dm +++ b/code/game/machinery/telecomms/machines/message_server.dm @@ -178,3 +178,4 @@ priority = "Extreme" else priority = "Undetermined" + diff --git a/code/game/mecha/combat/durand.dm b/code/game/mecha/combat/durand.dm index caaa3e3a00..7896d7aa35 100644 --- a/code/game/mecha/combat/durand.dm +++ b/code/game/mecha/combat/durand.dm @@ -19,3 +19,4 @@ /obj/mecha/combat/durand/RemoveActions(mob/living/user, human_occupant = 0) ..() defense_action.Remove(user) + diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm index 15b865c1e9..f5f369c2ad 100644 --- a/code/game/mecha/combat/phazon.dm +++ b/code/game/mecha/combat/phazon.dm @@ -27,3 +27,4 @@ ..() switch_damtype_action.Remove(user) phasing_action.Remove(user) + diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index f5d217f0b0..fc2d9f1e3f 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -338,7 +338,7 @@ update_label("John Doe", "Clowny") /obj/item/card/id/mining name = "mining ID" - access = list(ACCESS_MINERAL_STOREROOM) // CITADEL CHANGE removes golem's ability to get on the station willy nilly. + access = list(ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM) /obj/item/card/id/away name = "a perfectly generic identification card" diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 5fc4bf7068..95aaa85b70 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -547,7 +547,6 @@ /obj/item/circuitboard/machine/tesla_coil/Initialize() . = ..() if(build_path) - name = "Tesla Coil (Machine Board)" build_path = PATH_POWERCOIL /obj/item/circuitboard/machine/tesla_coil/attackby(obj/item/I, mob/user, params) diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 800ca21d03..e3194cd1a7 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -648,4 +648,4 @@ item_state = "defibpaddles0" req_defib = FALSE -#undef HALFWAYCRITDEATH \ No newline at end of file +#undef HALFWAYCRITDEATH diff --git a/code/game/objects/items/hot_potato.dm b/code/game/objects/items/hot_potato.dm index 418026aeef..65bfd09f9c 100644 --- a/code/game/objects/items/hot_potato.dm +++ b/code/game/objects/items/hot_potato.dm @@ -1,4 +1,3 @@ - //CREATOR'S NOTE: DO NOT FUCKING GIVE THIS TO BOTANY! /obj/item/hot_potato name = "hot potato" diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index 112caf26c0..ca1e18af1b 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -192,6 +192,14 @@ for(var/i in 1 to 7) new /obj/item/reagent_containers/glass/beaker( src ) +/obj/item/storage/box/medsprays + name = "box of medical sprayers" + desc = "A box full of medical sprayers, with unscrewable caps and precision spray heads." + +/obj/item/storage/box/medsprays/PopulateContents() + for(var/i in 1 to 7) + new /obj/item/reagent_containers/medspray( src ) + /obj/item/storage/box/injectors name = "box of DNA injectors" desc = "This box contains injectors, it seems." diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index 61b44d658e..6bae2af476 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -357,5 +357,5 @@ if(get_fuel() < max_fuel && nextrefueltick < world.time) nextrefueltick = world.time + 10 reagents.add_reagent("welding_fuel", 1) - -#undef WELDER_FUEL_BURN_INTERVAL + +#undef WELDER_FUEL_BURN_INTERVAL \ No newline at end of file diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index cd632032ac..34cdbd646b 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -42,6 +42,7 @@ icon_state = "waterballoon-e" item_state = "balloon-empty" + /obj/item/toy/balloon/New() create_reagents(10) ..() @@ -286,6 +287,7 @@ w_class = WEIGHT_CLASS_SMALL resistance_flags = FLAMMABLE + /obj/item/toy/windupToolbox name = "windup toolbox" desc = "A replica toolbox that rumbles when you turn the key." @@ -332,7 +334,7 @@ /obj/item/toy/katana name = "replica katana" - desc = "Woefully underpowered in D20. Almost has a sharp edge." + desc = "Woefully underpowered in D20." icon = 'icons/obj/items_and_weapons.dmi' icon_state = "katana" item_state = "katana" diff --git a/code/game/objects/structures/crates_lockers/closets/fitness.dm b/code/game/objects/structures/crates_lockers/closets/fitness.dm index 2a17e0038c..ad493dd6f5 100644 --- a/code/game/objects/structures/crates_lockers/closets/fitness.dm +++ b/code/game/objects/structures/crates_lockers/closets/fitness.dm @@ -62,4 +62,4 @@ new /obj/item/gun/energy/laser/bluetag(src) for(var/i in 1 to 3) new /obj/item/clothing/suit/bluetag(src) - new /obj/item/clothing/head/helmet/bluetaghelm(src) \ No newline at end of file + new /obj/item/clothing/head/helmet/bluetaghelm(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index fa9d9e9fd2..d01d4ccaab 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -96,3 +96,5 @@ ..() new /obj/item/storage/box/pillbottles(src) new /obj/item/storage/box/pillbottles(src) + new /obj/item/storage/box/medsprays(src) + new /obj/item/storage/box/medsprays(src) \ No newline at end of file