From 68dd51121cc0a91e380b0f0c269191995d01972b Mon Sep 17 00:00:00 2001 From: MarinaGryphon Date: Fri, 26 Jul 2019 03:57:05 -0500 Subject: [PATCH] Makeshift Chemistry and Medical (#6618) Skull is fucking CRYING right now. --- aurorastation.dme | 2 + code/__defines/chemistry.dm | 3 + code/datums/disease.dm | 4 +- code/datums/diseases/advance/advance.dm | 2 +- code/datums/diseases/cold.dm | 4 +- code/datums/diseases/cold9.dm | 4 +- code/datums/diseases/flu.dm | 4 +- code/datums/diseases/fluspanish.dm | 4 +- code/game/jobs/job/medical.dm | 1 + code/game/machinery/adv_med.dm | 21 +- code/game/machinery/autolathe_datums.dm | 5 + code/game/machinery/vending_types.dm | 7 +- code/game/objects/items/contraband.dm | 24 +- code/game/objects/items/glassjar.dm | 1 + .../objects/items/weapons/extinguisher.dm | 13 +- .../items/weapons/implants/implanter.dm | 13 + .../objects/items/weapons/storage/belt.dm | 86 ++- .../objects/items/weapons/storage/bible.dm | 14 +- .../objects/items/weapons/storage/boxes.dm | 599 +++------------ .../objects/items/weapons/storage/fancy.dm | 36 +- .../objects/items/weapons/storage/firstaid.dm | 293 ++----- .../objects/items/weapons/storage/lockbox.dm | 44 +- .../objects/items/weapons/storage/misc.dm | 37 +- .../objects/items/weapons/storage/secure.dm | 6 +- .../objects/items/weapons/storage/storage.dm | 8 + .../objects/items/weapons/storage/toolbox.dm | 78 +- .../items/weapons/storage/uplink_kits.dm | 136 +--- code/game/objects/random/random.dm | 1 + .../crates_lockers/closets/gimmick.dm | 2 +- .../crates_lockers/closets/secure/medical.dm | 2 +- .../crates_lockers/closets/secure/security.dm | 4 +- .../structures/crates_lockers/crates.dm | 4 +- code/modules/cargo/exports/large_objects.dm | 2 +- code/modules/cargo/random_stock/t1_common.dm | 9 +- .../spacesuits/rig/modules/utility.dm | 6 +- code/modules/detectivework/tools/rag.dm | 59 +- code/modules/hydroponics/trays/tray.dm | 46 +- code/modules/item_worth/reagents.dm | 8 +- code/modules/makeshift/makeshift_reagents.dm | 255 +++++++ code/modules/materials/material_sheets.dm | 11 + code/modules/mob/living/bot/medbot.dm | 2 +- code/modules/mob/mob_grab_specials.dm | 2 +- code/modules/organs/organ.dm | 4 +- code/modules/organs/organ_external.dm | 6 +- code/modules/organs/organ_internal.dm | 9 +- code/modules/organs/wound.dm | 264 +++---- code/modules/reagents/Chemistry-Holder.dm | 18 + code/modules/reagents/Chemistry-Machinery.dm | 37 +- code/modules/reagents/Chemistry-Reagents.dm | 4 +- .../Chemistry-Reagents-Core.dm | 2 + .../Chemistry-Reagents-Dispenser.dm | 16 + .../Chemistry-Reagents-Drugs.dm | 326 ++++++++ .../Chemistry-Reagents-Food-Drinks.dm | 44 +- .../Chemistry-Reagents-Medicine.dm | 117 ++- .../Chemistry-Reagents-Other.dm | 6 + .../Chemistry-Reagents-Toxins.dm | 135 +--- code/modules/reagents/Chemistry-Recipes.dm | 94 ++- .../reagents/dispenser/cartridge_presets.dm | 5 +- .../reagents/dispenser/dispenser_presets.dm | 5 +- .../reagents/reagent_containers/borghydro.dm | 4 +- .../reagent_containers/food/drinks.dm | 39 + .../reagent_containers/glass/bottle.dm | 11 + .../reagents/reagent_containers/hypospray.dm | 38 +- .../reagents/reagent_containers/inhaler.dm | 8 + .../reagent_containers/inhaler_advanced.dm | 11 +- .../reagents/reagent_containers/pill.dm | 11 +- .../reagents/reagent_containers/syringes.dm | 161 +++- code/modules/reagents/reagent_dispenser.dm | 49 +- code/modules/tables/tables.dm | 6 + code/modules/virus2/disease2.dm | 4 +- code/modules/virus2/effect.dm | 6 + code/modules/virus2/helpers.dm | 2 +- html/changelogs/MDP-chemrevamp.yml | 69 ++ icons/obj/chemical.dmi | Bin 42886 -> 43024 bytes icons/obj/makeshift_workstation.dmi | Bin 0 -> 2085 bytes icons/obj/reagentfillings.dmi | Bin 2509 -> 2657 bytes icons/obj/storage.dmi | Bin 81671 -> 82155 bytes icons/obj/syringe.dmi | Bin 5386 -> 4853 bytes icons/obj/syringefilling.dmi | Bin 2684 -> 0 bytes maps/aurora/aurora-1_centcomm.dmm | 296 ++++---- maps/aurora/aurora-3_sublevel.dmm | 412 +++++----- maps/aurora/aurora-4_mainlevel.dmm | 712 ++++++++---------- maps/exodus/exodus-1_station.dmm | 4 +- maps/exodus/exodus-2_centcomm.dmm | 4 +- maps/space_ruins/crashed_freighter.dmm | 2 +- maps/space_ruins/derelict.dmm | 2 +- maps/space_ruins/nt_cloneship.dmm | 2 +- maps/space_ruins/tcfl_frigate.dmm | 2 +- 88 files changed, 2612 insertions(+), 2197 deletions(-) create mode 100644 code/modules/makeshift/makeshift_reagents.dm create mode 100644 code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Drugs.dm create mode 100644 html/changelogs/MDP-chemrevamp.yml create mode 100644 icons/obj/makeshift_workstation.dmi delete mode 100644 icons/obj/syringefilling.dmi diff --git a/aurorastation.dme b/aurorastation.dme index 839227f8e03..1100ded2a28 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -1570,6 +1570,7 @@ #include "code\modules\lock\key.dm" #include "code\modules\lock\lock.dm" #include "code\modules\lock\lock_construct.dm" +#include "code\modules\makeshift\makeshift_reagents.dm" #include "code\modules\maps\dmm_suite.dm" #include "code\modules\maps\map_template.dm" #include "code\modules\maps\reader.dm" @@ -2172,6 +2173,7 @@ #include "code\modules\reagents\reagent_dispenser.dm" #include "code\modules\reagents\Chemistry-Reagents\Chemistry-Reagents-Core.dm" #include "code\modules\reagents\Chemistry-Reagents\Chemistry-Reagents-Dispenser.dm" +#include "code\modules\reagents\Chemistry-Reagents\Chemistry-Reagents-Drugs.dm" #include "code\modules\reagents\Chemistry-Reagents\Chemistry-Reagents-Food-Drinks.dm" #include "code\modules\reagents\Chemistry-Reagents\Chemistry-Reagents-Medicine.dm" #include "code\modules\reagents\Chemistry-Reagents\Chemistry-Reagents-Other.dm" diff --git a/code/__defines/chemistry.dm b/code/__defines/chemistry.dm index 682e55b81b1..a4e41ab4ce5 100644 --- a/code/__defines/chemistry.dm +++ b/code/__defines/chemistry.dm @@ -15,6 +15,9 @@ #define LIQUID 2 #define GAS 3 +#define REAGENTS_PER_SHEET 20 +#define MAX_PILL_SPRITE 20 //max icon state of the pill sprites + #define REAGENTS_OVERDOSE 30 #define REAGENTS_BURNING_TEMP_HIGH T0C + 65 //Temperature at which high temperature burns occur diff --git a/code/datums/disease.dm b/code/datums/disease.dm index c44d139ba70..b0172bb5396 100644 --- a/code/datums/disease.dm +++ b/code/datums/disease.dm @@ -128,8 +128,8 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease if(affected_mob.reagents != null) if(affected_mob) - if(affected_mob.reagents.has_reagent("spaceacillin")) - return // Don't spread if we have spaceacillin in our system. + if(affected_mob.reagents.has_reagent("deltamivir")) + return // Don't spread if we have deltamivir in our system. var/check_range = airborne_range//defaults to airborne - range 2 diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 0b26ad1edc1..92872177fd1 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -14,7 +14,7 @@ var/list/archive_diseases = list() // The order goes from easy to cure to hard to cure. var/list/advance_cures = list( "nutriment", "sugar", "orangejuice", - "spaceacillin", "kelotane", "ethanol", + "deltamivir", "kelotane", "ethanol", "leporazine", "synaptizine", "lipozine", "silver", "gold", "phoron" ) diff --git a/code/datums/diseases/cold.dm b/code/datums/diseases/cold.dm index d46f351a024..9a93a4dc137 100644 --- a/code/datums/diseases/cold.dm +++ b/code/datums/diseases/cold.dm @@ -2,8 +2,8 @@ name = "The Cold" max_stages = 3 spread = "Airborne" - cure = "Rest & Spaceacillin" - cure_id = "spaceacillin" + cure = "Rest & Deltamivir" + cure_id = "deltamivir" agent = "XY-rhinovirus" affected_species = list("Human", "Monkey") permeability_mod = 0.5 diff --git a/code/datums/diseases/cold9.dm b/code/datums/diseases/cold9.dm index d3a5c3ed4b2..5ef32f5ca83 100644 --- a/code/datums/diseases/cold9.dm +++ b/code/datums/diseases/cold9.dm @@ -3,8 +3,8 @@ max_stages = 3 spread = "On contact" spread_type = CONTACT_GENERAL - cure = "Common Cold Anti-bodies & Spaceacillin" - cure_id = "spaceacillin" + cure = "Common Cold Anti-bodies & Deltamivir" + cure_id = "deltamivir" agent = "ICE9-rhinovirus" affected_species = list("Human") desc = "If left untreated the subject will slow, as if partly frozen." diff --git a/code/datums/diseases/flu.dm b/code/datums/diseases/flu.dm index ca4fc9faa42..3691751ceaa 100644 --- a/code/datums/diseases/flu.dm +++ b/code/datums/diseases/flu.dm @@ -2,8 +2,8 @@ name = "The Flu" max_stages = 3 spread = "Airborne" - cure = "Spaceacillin" - cure_id = "spaceacillin" + cure = "Deltamivir" + cure_id = "deltamivir" cure_chance = 10 agent = "H13N1 flu virion" affected_species = list("Human", "Monkey") diff --git a/code/datums/diseases/fluspanish.dm b/code/datums/diseases/fluspanish.dm index 92180c28a86..b95e8aa6c93 100644 --- a/code/datums/diseases/fluspanish.dm +++ b/code/datums/diseases/fluspanish.dm @@ -2,8 +2,8 @@ name = "Spanish inquisition Flu" max_stages = 3 spread = "Airborne" - cure = "Spaceacillin & Anti-bodies to the common flu" - cure_id = "spaceacillin" + cure = "Deltamivir & Anti-bodies to the common flu" + cure_id = "deltamivir" cure_chance = 10 agent = "1nqu1s1t10n flu virion" affected_species = list("Human") diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 117d5cb36e9..2ed592f0471 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -212,6 +212,7 @@ shoes = /obj/item/clothing/shoes/jackboots l_ear = /obj/item/device/radio/headset/headset_med l_hand = /obj/item/weapon/storage/firstaid/adv + r_hand = /obj/item/weapon/reagent_containers/hypospray belt = /obj/item/weapon/storage/belt/medical/emt pda = /obj/item/device/pda/medical diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 68b41e4c58c..31ebfb3bdb2 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -247,6 +247,7 @@ var/obj/machinery/bodyscanner/connected var/known_implants = list(/obj/item/weapon/implant/chem, /obj/item/weapon/implant/death_alarm, /obj/item/weapon/implant/loyalty, /obj/item/weapon/implant/tracking) var/collapse_desc = "" + var/broken_desc = "" name = "Body Scanner Console" desc = "A control panel for some kind of medical device." icon = 'icons/obj/sleeper.dmi' @@ -270,17 +271,26 @@ else icon_state = initial(icon_state) -/obj/machinery/body_scanconsole/proc/get_lung_desc() +/obj/machinery/body_scanconsole/proc/get_collapsed_lung_desc() if (!src.connected || !src.connected.occupant) return if (src.connected.occupant.name != src.connected.last_occupant_name || !collapse_desc) - var/ldesc = pick("Contains fluid.", "Shows symptoms of collapse.", "Collapsed.", "Shows symptoms of rupture.", "Is ruptured.") + var/ldesc = pick("Shows symptoms of collapse.", "Collapsed.", "Pneumothorax detected.") collapse_desc = ldesc src.connected.last_occupant_name = src.connected.occupant.name - return ldesc return collapse_desc +/obj/machinery/body_scanconsole/proc/get_broken_lung_desc() + if (!src.connected || !src.connected.occupant) + return + if (src.connected.occupant.name != src.connected.last_occupant_name || !broken_desc) + var/ldesc = pick("Shows symptoms of rupture.", "Ruptured.", "Extensive damage detected.") + broken_desc = ldesc + src.connected.last_occupant_name = src.connected.occupant.name + + return broken_desc + /obj/machinery/body_scanconsole/Initialize() . = ..() for(var/obj/machinery/bodyscanner/C in orange(1,src)) @@ -391,7 +401,10 @@ data["bruteDmg"] = 0 if (istype(O, /obj/item/organ/lungs) && H.is_lung_ruptured()) - wounds += get_lung_desc() + if (O.is_broken()) + wounds += get_broken_lung_desc() + else + wounds += get_collapsed_lung_desc() if (istype(O, /obj/item/organ/brain) && H.has_brain_worms()) wounds += "Has an abnormal growth." diff --git a/code/game/machinery/autolathe_datums.dm b/code/game/machinery/autolathe_datums.dm index d3680edd80a..7246b3d58d8 100644 --- a/code/game/machinery/autolathe_datums.dm +++ b/code/game/machinery/autolathe_datums.dm @@ -56,6 +56,11 @@ path = /obj/item/glass_jar category = "General" +/datum/autolathe/recipe/bowl + name = "bowl" + path = /obj/item/weapon/reagent_containers/glass/beaker/bowl + category = "General" + /datum/autolathe/recipe/crowbar name = "crowbar" path = /obj/item/weapon/crowbar diff --git a/code/game/machinery/vending_types.dm b/code/game/machinery/vending_types.dm index cb539a01fd1..703df8cf721 100644 --- a/code/game/machinery/vending_types.dm +++ b/code/game/machinery/vending_types.dm @@ -301,7 +301,7 @@ /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline = 4, /obj/item/weapon/reagent_containers/glass/bottle/stoxin = 4, /obj/item/weapon/reagent_containers/glass/bottle/toxin = 4, - /obj/item/weapon/reagent_containers/syringe/antiviral = 4, + /obj/item/weapon/reagent_containers/glass/bottle/coughsyrup = 4, /obj/item/weapon/reagent_containers/syringe = 12, /obj/item/device/healthanalyzer = 5, /obj/item/device/breath_analyzer = 2, @@ -310,7 +310,10 @@ /obj/item/stack/medical/advanced/bruise_pack = 3, /obj/item/stack/medical/advanced/ointment = 3, /obj/item/stack/medical/splint = 2, - /obj/item/weapon/reagent_containers/pill/antitox = 6 + /obj/item/weapon/reagent_containers/pill/antitox = 6, + /obj/item/weapon/reagent_containers/pill/antihistamine = 6, + /obj/item/weapon/reagent_containers/pill/paracetamol = 6, + /obj/item/weapon/reagent_containers/food/drinks/medcup = 4 ) contraband = list( /obj/item/weapon/reagent_containers/pill/tox = 3, diff --git a/code/game/objects/items/contraband.dm b/code/game/objects/items/contraband.dm index 0dcbc668a06..baea2d79cac 100644 --- a/code/game/objects/items/contraband.dm +++ b/code/game/objects/items/contraband.dm @@ -4,30 +4,12 @@ /obj/item/weapon/storage/pill_bottle/happy name = "bottle of Happy pills" desc = "Highly illegal drug. When you want to see the rainbow." - -/obj/item/weapon/storage/pill_bottle/happy/fill() - ..() - new /obj/item/weapon/reagent_containers/pill/happy( src ) - new /obj/item/weapon/reagent_containers/pill/happy( src ) - new /obj/item/weapon/reagent_containers/pill/happy( src ) - new /obj/item/weapon/reagent_containers/pill/happy( src ) - new /obj/item/weapon/reagent_containers/pill/happy( src ) - new /obj/item/weapon/reagent_containers/pill/happy( src ) - new /obj/item/weapon/reagent_containers/pill/happy( src ) + starts_with = list(/obj/item/weapon/reagent_containers/pill/happy = 7) /obj/item/weapon/storage/pill_bottle/zoom name = "bottle of Zoom pills" desc = "Highly illegal drug. Trade brain for speed." - -/obj/item/weapon/storage/pill_bottle/zoom/fill() - ..() - new /obj/item/weapon/reagent_containers/pill/zoom( src ) - new /obj/item/weapon/reagent_containers/pill/zoom( src ) - new /obj/item/weapon/reagent_containers/pill/zoom( src ) - new /obj/item/weapon/reagent_containers/pill/zoom( src ) - new /obj/item/weapon/reagent_containers/pill/zoom( src ) - new /obj/item/weapon/reagent_containers/pill/zoom( src ) - new /obj/item/weapon/reagent_containers/pill/zoom( src ) + starts_with = list(/obj/item/weapon/reagent_containers/pill/zoom = 7) /obj/item/weapon/reagent_containers/glass/beaker/vial/random flags = 0 @@ -66,4 +48,4 @@ flags ^= OPENCONTAINER reagents.add_reagent("venenum",volume) desc = "Contains venenum." - update_icon() \ No newline at end of file + update_icon() diff --git a/code/game/objects/items/glassjar.dm b/code/game/objects/items/glassjar.dm index 78616e741ef..cab2799f55e 100644 --- a/code/game/objects/items/glassjar.dm +++ b/code/game/objects/items/glassjar.dm @@ -66,6 +66,7 @@ return if(0) to_chat(user, "You remove the lid from \the [src].") + user.drop_from_inventory(src) user.put_in_hands(new /obj/item/weapon/reagent_containers/glass/beaker/jar) //found in jar.dm qdel(src) return diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index 561324929dd..76e9aa7dd90 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -40,13 +40,20 @@ if(is_open_container()) if(reagents && reagents.reagent_list.len) to_chat(user,"With a quick twist of the cartridge's lid, you secure the reagents inside \the [src].") - flags ^= OPENCONTAINER + flags &= ~OPENCONTAINER else to_chat(user,"You can't secure the cartridge without putting reagents in!") else to_chat(user,"\The reagents inside [src] are already secured!") return +/obj/item/weapon/reagent_containers/extinguisher_refill/attackby(obj/item/weapon/W, mob/user) + if(W.isscrewdriver() && !is_open_container()) + to_chat(user,"Using \the [W], you unsecure the extinguisher refill cartridge's lid.") // it locks shut after being secured + flags |= OPENCONTAINER + return + . = ..() + /obj/item/weapon/reagent_containers/extinguisher_refill/examine(var/mob/user) //Copied from inhalers. if(!..(user, 2)) return @@ -64,7 +71,7 @@ /obj/item/weapon/reagent_containers/extinguisher_refill/filled name = "extinguisher refiller (monoammonium phosphate)" - desc = "A one time use extinguisher refiller that allows fire extinguishers to be refilled with an aerosol mix. This one is contains monoammonium phosphate." + desc = "A one time use extinguisher refiller that allows fire extinguishers to be refilled with an aerosol mix. This one contains monoammonium phosphate." /obj/item/weapon/reagent_containers/extinguisher_refill/filled/Initialize() . =..() @@ -120,7 +127,7 @@ /obj/item/weapon/extinguisher/examine(mob/user) if(..(user, 0)) - to_chat(user,"The [src] contains [src.reagents.total_volume] units of reagents.") + to_chat(user,"\The [src] contains [src.reagents.total_volume] units of reagents.") to_chat(user,"The safety is [safety ? "on" : "off"].") return diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm index fe4da73cae1..ed2fe08814c 100644 --- a/code/game/objects/items/weapons/implants/implanter.dm +++ b/code/game/objects/items/weapons/implants/implanter.dm @@ -136,6 +136,19 @@ A.loc.contents.Remove(A) update() +/obj/item/weapon/implanter/freedom/Initialize() + imp = new /obj/item/weapon/implant/freedom( src ) + ..() + update() + +/obj/item/weapon/implanter/uplink + name = "implanter (U)" + +/obj/item/weapon/implanter/uplink/Initialize() + imp = new /obj/item/weapon/implant/uplink( src ) + ..() + update() + /obj/item/weapon/implanter/ipc_tag name = "IPC/Shell tag implanter" desc = "A special implanter used for implanting synthetics with a special tag." diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index f82dffd765c..3a378d8aecf 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -57,24 +57,26 @@ ) -/obj/item/weapon/storage/belt/utility/full/fill() - ..() - new /obj/item/weapon/screwdriver(src) - new /obj/item/weapon/wrench(src) - new /obj/item/weapon/weldingtool(src) - new /obj/item/weapon/crowbar(src) - new /obj/item/weapon/wirecutters(src) - new /obj/item/stack/cable_coil(src,30,pick("red","yellow","orange")) +/obj/item/weapon/storage/belt/utility/full/ + starts_with = list( + /obj/item/weapon/screwdriver = 1, + /obj/item/weapon/wrench = 1, + /obj/item/weapon/weldingtool = 1, + /obj/item/weapon/crowbar = 1, + /obj/item/weapon/wirecutters = 1, + /obj/item/stack/cable_coil/random = 1 + ) -/obj/item/weapon/storage/belt/utility/atmostech/fill() - ..() - new /obj/item/weapon/screwdriver(src) - new /obj/item/weapon/wrench(src) - new /obj/item/weapon/weldingtool(src) - new /obj/item/weapon/crowbar(src) - new /obj/item/weapon/wirecutters(src) - new /obj/item/device/t_scanner(src) +/obj/item/weapon/storage/belt/utility/atmostech/ + starts_with = list( + /obj/item/weapon/screwdriver = 1, + /obj/item/weapon/wrench = 1, + /obj/item/weapon/weldingtool = 1, + /obj/item/weapon/crowbar = 1, + /obj/item/weapon/wirecutters = 1, + /obj/item/device/t_scanner = 1 + ) @@ -161,14 +163,8 @@ /obj/item/device/soulstone ) -/obj/item/weapon/storage/belt/soulstone/full/fill() - ..() - new /obj/item/device/soulstone(src) - new /obj/item/device/soulstone(src) - new /obj/item/device/soulstone(src) - new /obj/item/device/soulstone(src) - new /obj/item/device/soulstone(src) - new /obj/item/device/soulstone(src) +/obj/item/weapon/storage/belt/soulstone/full + starts_with = list(/obj/item/device/soulstone = 6) /obj/item/weapon/storage/belt/champion name = "championship belt" @@ -258,15 +254,16 @@ max_storage_space = 28 can_hold = list( /obj/item/weapon/gun/energy/wand - ) + ) -/obj/item/weapon/storage/belt/wands/full/fill() - ..() - new /obj/item/weapon/gun/energy/wand/fire(src) - new /obj/item/weapon/gun/energy/wand/polymorph(src) - new /obj/item/weapon/gun/energy/wand/teleport(src) - new /obj/item/weapon/gun/energy/wand/force(src) - new /obj/item/weapon/gun/energy/wand/animation(src) +/obj/item/weapon/storage/belt/wands/full + starts_with = list( + /obj/item/weapon/gun/energy/wand/fire = 1, + /obj/item/weapon/gun/energy/wand/polymorph = 1, + /obj/item/weapon/gun/energy/wand/teleport = 1, + /obj/item/weapon/gun/energy/wand/force = 1, + /obj/item/weapon/gun/energy/wand/animation = 1 + ) /obj/item/weapon/storage/belt/mining name = "explorer's belt" @@ -340,19 +337,20 @@ /obj/item/weapon/reagent_containers/spray, //includes if you ever wish to get a spraybottle full of other chemicals, Like water /obj/item/device/analyzer/plant_analyzer, /obj/item/clothing/gloves/botanic_leather, - ) + ) -/obj/item/weapon/storage/belt/hydro/full/fill() - ..() - new /obj/item/weapon/plantspray/pests(src) - new /obj/item/weapon/material/minihoe(src) - new /obj/item/weapon/storage/bag/plants(src) - new /obj/item/clothing/gloves/botanic_leather(src) - new /obj/item/device/analyzer/plant_analyzer(src) - new /obj/item/weapon/material/hatchet(src) - new /obj/item/weapon/reagent_containers/glass/fertilizer/rh(src) - new /obj/item/weapon/reagent_containers/spray/plantbgone(src) - new /obj/item/weapon/wirecutters/clippers(src) +/obj/item/weapon/storage/belt/hydro + starts_with = list( + /obj/item/weapon/plantspray/pests = 1, + /obj/item/weapon/material/minihoe = 1, + /obj/item/weapon/storage/bag/plants = 1, + /obj/item/clothing/gloves/botanic_leather = 1, + /obj/item/device/analyzer/plant_analyzer = 1, + /obj/item/weapon/material/hatchet = 1, + /obj/item/weapon/reagent_containers/glass/fertilizer/rh = 1, + /obj/item/weapon/reagent_containers/spray/plantbgone = 1, + /obj/item/weapon/wirecutters/clippers = 1 + ) /obj/item/weapon/storage/belt/fannypack name = "leather fannypack" diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm index ececc32ce4a..4c0c4846c03 100644 --- a/code/game/objects/items/weapons/storage/bible.dm +++ b/code/game/objects/items/weapons/storage/bible.dm @@ -13,15 +13,11 @@ /obj/item/weapon/storage/bible/booze name = "bible" desc = "To be applied to the head repeatedly." - icon_state ="bible" - -/obj/item/weapon/storage/bible/booze/fill() - ..() - new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer(src) - new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer(src) - new /obj/item/weapon/spacecash(src) - new /obj/item/weapon/spacecash(src) - new /obj/item/weapon/spacecash(src) + icon_state = "bible" + starts_with = list( + /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer = 2, + /obj/item/weapon/spacecash = 3 + ) /obj/item/weapon/storage/bible/afterattack(atom/A, mob/user as mob, proximity) if(!proximity) return diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 8e5407fba16..9cf6e4ecf9a 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -30,6 +30,7 @@ var/maxHealth = 20 //health is already defined use_sound = 'sound/items/storage/box.ogg' drop_sound = 'sound/items/drop/box.ogg' + var/chewable = TRUE /obj/item/weapon/storage/box/Initialize() . = ..() @@ -44,11 +45,15 @@ qdel(src) /obj/item/weapon/storage/box/attack_generic(var/mob/user) - + if(!chewable) + return if (istype(user, /mob/living)) var/mob/living/L = user if (istype(L, /mob/living/carbon/alien/diona) || istype(L, /mob/living/simple_animal) || istype(L, /mob/living/carbon/human))//Monkey-like things do attack_generic, not crew + if(contents.len && !locate(/obj/item/weapon/reagent_containers/food) in src) // you can tear open empty boxes for nesting material, or for food + to_chat(user, span("warning", "There's no food in that box!")) + return var/damage if (!L.mob_size) damage = 3//A safety incase i forgot to set a mob_size on something @@ -109,36 +114,31 @@ /obj/item/weapon/storage/box/survival autodrobe_no_remove = 1 + starts_with = list(/obj/item/clothing/mask/breath = 1, /obj/item/weapon/tank/emergency_oxygen = 1) /obj/item/weapon/storage/box/survival/fill() ..() - new /obj/item/clothing/mask/breath( src ) - new /obj/item/weapon/tank/emergency_oxygen(src) for(var/obj/item/thing in contents) thing.autodrobe_no_remove = 1 -/obj/item/weapon/storage/box/vox/fill() - ..() - new /obj/item/clothing/mask/breath( src ) - new /obj/item/weapon/tank/emergency_nitrogen( src ) +/obj/item/weapon/storage/box/vox + starts_with = list(/obj/item/clothing/mask/breath = 1, /obj/item/weapon/tank/emergency_nitrogen = 1) /obj/item/weapon/storage/box/engineer autodrobe_no_remove = 1 + starts_with = list(/obj/item/clothing/mask/breath = 1, /obj/item/weapon/tank/emergency_oxygen/engi = 1) /obj/item/weapon/storage/box/engineer/fill() ..() - new /obj/item/clothing/mask/breath( src ) - new /obj/item/weapon/tank/emergency_oxygen/engi( src ) for(var/obj/item/thing in contents) thing.autodrobe_no_remove = 1 /obj/item/weapon/storage/box/vaurca autodrobe_no_remove = 1 + starts_with = list(/obj/item/clothing/mask/breath = 1, /obj/item/weapon/reagent_containers/inhaler/phoron_special = 1) /obj/item/weapon/storage/box/vaurca/fill() ..() - new /obj/item/clothing/mask/breath( src ) - new /obj/item/weapon/reagent_containers/inhaler/phoron_special(src) for(var/obj/item/thing in contents) thing.autodrobe_no_remove = 1 @@ -146,245 +146,120 @@ name = "box of sterile gloves" desc = "Contains sterile gloves." icon_state = "latex" - -/obj/item/weapon/storage/box/gloves/fill() - ..() - new /obj/item/clothing/gloves/latex(src) - new /obj/item/clothing/gloves/latex(src) - new /obj/item/clothing/gloves/latex(src) - new /obj/item/clothing/gloves/latex(src) - new /obj/item/clothing/gloves/latex/nitrile(src) - new /obj/item/clothing/gloves/latex/nitrile(src) - new /obj/item/clothing/gloves/latex/nitrile(src) + starts_with = list(/obj/item/clothing/gloves/latex = 4, /obj/item/clothing/gloves/latex/nitrile = 3) /obj/item/weapon/storage/box/masks name = "box of sterile masks" desc = "This box contains masks of sterility." icon_state = "sterile" - -/obj/item/weapon/storage/box/masks/fill() - ..() - new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) + starts_with = list(/obj/item/clothing/mask/surgical = 7) /obj/item/weapon/storage/box/syringes name = "box of syringes" desc = "A box full of syringes." icon_state = "syringe" - -/obj/item/weapon/storage/box/syringes/fill() - ..() - new /obj/item/weapon/reagent_containers/syringe( src ) - new /obj/item/weapon/reagent_containers/syringe( src ) - new /obj/item/weapon/reagent_containers/syringe( src ) - new /obj/item/weapon/reagent_containers/syringe( src ) - new /obj/item/weapon/reagent_containers/syringe( src ) - new /obj/item/weapon/reagent_containers/syringe( src ) - new /obj/item/weapon/reagent_containers/syringe( src ) + starts_with = list(/obj/item/weapon/reagent_containers/syringe = 20) /obj/item/weapon/storage/box/syringegun name = "box of syringe gun cartridges" desc = "A box full of compressed gas cartridges." icon_state = "syringe" - -/obj/item/weapon/storage/box/syringegun/fill() - ..() - new /obj/item/weapon/syringe_cartridge( src ) - new /obj/item/weapon/syringe_cartridge( src ) - new /obj/item/weapon/syringe_cartridge( src ) - new /obj/item/weapon/syringe_cartridge( src ) - new /obj/item/weapon/syringe_cartridge( src ) - new /obj/item/weapon/syringe_cartridge( src ) - new /obj/item/weapon/syringe_cartridge( src ) - + starts_with = list(/obj/item/weapon/syringe_cartridge = 7) /obj/item/weapon/storage/box/beakers name = "box of beakers" icon_state = "beaker" - -/obj/item/weapon/storage/box/beakers/fill() - ..() - new /obj/item/weapon/reagent_containers/glass/beaker( src ) - new /obj/item/weapon/reagent_containers/glass/beaker( src ) - new /obj/item/weapon/reagent_containers/glass/beaker( src ) - new /obj/item/weapon/reagent_containers/glass/beaker( src ) - new /obj/item/weapon/reagent_containers/glass/beaker( src ) - new /obj/item/weapon/reagent_containers/glass/beaker( src ) - new /obj/item/weapon/reagent_containers/glass/beaker( src ) + starts_with = list(/obj/item/weapon/reagent_containers/glass/beaker = 7) /obj/item/weapon/storage/box/injectors name = "box of DNA injectors" desc = "This box contains injectors it seems." - -/obj/item/weapon/storage/box/injectors/fill() - ..() - new /obj/item/weapon/dnainjector/h2m(src) - new /obj/item/weapon/dnainjector/h2m(src) - new /obj/item/weapon/dnainjector/h2m(src) - new /obj/item/weapon/dnainjector/m2h(src) - new /obj/item/weapon/dnainjector/m2h(src) - new /obj/item/weapon/dnainjector/m2h(src) + starts_with = list(/obj/item/weapon/dnainjector/h2m = 3, /obj/item/weapon/dnainjector/m2h = 3) /obj/item/weapon/storage/box/blanks name = "box of blank shells" desc = "It has a picture of a shotgun shell and several warning symbols on the front." icon_state = "blankshot_box" - -/obj/item/weapon/storage/box/blanks/fill() - ..() - for(var/i in 1 to 8) - new /obj/item/ammo_casing/shotgun/blank(src) + starts_with = list(/obj/item/ammo_casing/shotgun/blank = 8) /obj/item/weapon/storage/box/beanbags name = "box of beanbag shells" desc = "It has a picture of a shotgun shell and several warning symbols on the front.
WARNING: Live ammunition. Misuse may result in serious injury or death." icon_state = "beanshot_box" - -/obj/item/weapon/storage/box/beanbags/fill() - ..() - for(var/i in 1 to 8) - new /obj/item/ammo_casing/shotgun/beanbag(src) + starts_with = list(/obj/item/ammo_casing/shotgun/beanbag = 8) /obj/item/weapon/storage/box/shotgunammo name = "box of shotgun slugs" desc = "It has a picture of a shotgun shell and several warning symbols on the front.
WARNING: Live ammunition. Misuse may result in serious injury or death." icon_state = "lethalslug_box" - -/obj/item/weapon/storage/box/shotgunammo/fill() - ..() - for(var/i in 1 to 8) - new /obj/item/ammo_casing/shotgun(src) + starts_with = list(/obj/item/ammo_casing/shotgun = 8) /obj/item/weapon/storage/box/shotgunshells name = "box of shotgun shells" desc = "It has a picture of a shotgun shell and several warning symbols on the front.
WARNING: Live ammunition. Misuse may result in serious injury or death." icon_state = "lethalshell_box" - -/obj/item/weapon/storage/box/shotgunshells/fill() - ..() - for(var/i in 1 to 8) - new /obj/item/ammo_casing/shotgun/pellet(src) + starts_with = list(/obj/item/ammo_casing/shotgun/pellet = 8) /obj/item/weapon/storage/box/flashshells name = "box of illumination shells" desc = "It has a picture of a shotgun shell and several warning symbols on the front.
WARNING: Live ammunition. Misuse may result in serious injury or death." icon_state = "illumshot_box" - -/obj/item/weapon/storage/box/flashshells/fill() - ..() - for(var/i in 1 to 8) - new /obj/item/ammo_casing/shotgun/flash(src) + starts_with = list(/obj/item/ammo_casing/shotgun/flash = 8) /obj/item/weapon/storage/box/stunshells name = "box of stun shells" desc = "It has a picture of a shotgun shell and several warning symbols on the front.
WARNING: Live ammunition. Misuse may result in serious injury or death." icon_state = "stunshot_box" - -/obj/item/weapon/storage/box/stunshells/fill() - ..() - for(var/i in 1 to 8) - new /obj/item/ammo_casing/shotgun/stunshell(src) + starts_with = list(/obj/item/ammo_casing/shotgun/stunshell = 8) /obj/item/weapon/storage/box/practiceshells name = "box of practice shells" desc = "It has a picture of a shotgun shell and several warning symbols on the front.
WARNING: Live ammunition. Misuse may result in serious injury or death." icon_state = "blankshot_box" - -/obj/item/weapon/storage/box/practiceshells/fill() - ..() - for(var/i in 1 to 8) - new /obj/item/ammo_casing/shotgun/practice(src) + starts_with = list(/obj/item/ammo_casing/shotgun/practice = 8) /obj/item/weapon/storage/box/haywireshells name = "box of haywire shells" desc = "It has a picture of a shotgun shell and several warning symbols on the front.
WARNING: Live ammunition. Misuse may result in serious injury or death." icon_state = "empshot_box" - -/obj/item/weapon/storage/box/haywireshells/fill() - ..() - for(var/i in 1 to 8) - new /obj/item/ammo_casing/shotgun/emp(src) + starts_with = list(/obj/item/ammo_casing/shotgun/emp = 8) /obj/item/weapon/storage/box/incendiaryshells name = "box of incendiary shells" desc = "It has a picture of a shotgun shell and several warning symbols on the front.
WARNING: Live ammunition. Misuse may result in serious injury or death." icon_state = "incendiaryshot_box" - -/obj/item/weapon/storage/box/incendiaryshells/fill() - ..() - for(var/i in 1 to 8) - new /obj/item/ammo_casing/shotgun/incendiary(src) + starts_with = list(/obj/item/ammo_casing/shotgun/incendiary = 8) /obj/item/weapon/storage/box/sniperammo name = "box of 14.5mm shells" desc = "It has a picture of a gun and several warning symbols on the front.
WARNING: Live ammunition. Misuse may result in serious injury or death." - -/obj/item/weapon/storage/box/sniperammo/fill() - ..() - for(var/i in 1 to 7) - new /obj/item/ammo_casing/a145(src) + starts_with = list(/obj/item/ammo_casing/a145 = 7) /obj/item/weapon/storage/box/ammo10mm name = "box of 10mm shells" desc = "It has a picture of a gun and several warning symbols on the front.
WARNING: Live ammunition. Misuse may result in serious injury or death." - -/obj/item/weapon/storage/box/ammo10mm/fill() - ..() - for(var/i in 1 to 10) - new /obj/item/ammo_casing/c10mm(src) + starts_with = list(/obj/item/ammo_casing/c10mm = 10) /obj/item/weapon/storage/box/flashbangs name = "box of flashbangs" desc = "A box containing 7 antipersonnel flashbang grenades.
WARNING: These devices are extremely dangerous and can cause blindness or deafness in repeated use." icon_state = "flashbang" - -/obj/item/weapon/storage/box/flashbangs/fill() - ..() - new /obj/item/weapon/grenade/flashbang(src) - new /obj/item/weapon/grenade/flashbang(src) - new /obj/item/weapon/grenade/flashbang(src) - new /obj/item/weapon/grenade/flashbang(src) - new /obj/item/weapon/grenade/flashbang(src) - new /obj/item/weapon/grenade/flashbang(src) - new /obj/item/weapon/grenade/flashbang(src) + starts_with = list(/obj/item/weapon/grenade/flashbang = 7) /obj/item/weapon/storage/box/firingpins name = "box of firing pins" desc = "A box of NT brand Firearm authentication pins; Needed to operate most weapons." - -/obj/item/weapon/storage/box/firingpins/fill() - ..() - new /obj/item/device/firing_pin(src) - new /obj/item/device/firing_pin(src) - new /obj/item/device/firing_pin(src) - new /obj/item/device/firing_pin(src) - new /obj/item/device/firing_pin(src) - new /obj/item/device/firing_pin(src) - new /obj/item/device/firing_pin(src) + starts_with = list(/obj/item/device/firing_pin = 7) /obj/item/weapon/storage/box/testpins name = "box of firing pins" desc = "A box of NT brand Testing Authentication pins; allows guns to fire in designated firing ranges." - -/obj/item/weapon/storage/box/testpins/fill() - ..() - new /obj/item/device/firing_pin/test_range(src) - new /obj/item/device/firing_pin/test_range(src) - new /obj/item/device/firing_pin/test_range(src) - new /obj/item/device/firing_pin/test_range(src) - new /obj/item/device/firing_pin/test_range(src) - new /obj/item/device/firing_pin/test_range(src) - new /obj/item/device/firing_pin/test_range(src) - new /obj/item/device/firing_pin/test_range(src) + starts_with = list(/obj/item/device/firing_pin/test_range = 7) /obj/item/weapon/storage/box/loyaltypins name = "box of firing pins" desc = "A box of specialised \"loyalty\" authentication pins produced by Nanotrasen; these check to see if the user of the gun it's installed in has been implanted with a loyalty implant. Often used in ERTs." + starts_with = list(/obj/item/device/firing_pin/implant/loyalty = 7) /obj/item/weapon/storage/box/loyaltypins/fill() ..() @@ -396,118 +271,56 @@ /obj/item/weapon/storage/box/firingpinsRD name = "box of assorted firing pins" desc = "A box of varied assortment of firing pins. Appears to have R&D stickers on all sides of the box. Also seems to have a smiley face sticker on the top of it." - -/obj/item/weapon/storage/box/firingpinsRD/fill() - ..() - new /obj/item/device/firing_pin(src) - new /obj/item/device/firing_pin(src) - new /obj/item/device/firing_pin/access(src) - new /obj/item/device/firing_pin/access(src) - new /obj/item/device/firing_pin/implant/loyalty(src) - new /obj/item/device/firing_pin/implant/loyalty(src) - new /obj/item/device/firing_pin/clown(src) - new /obj/item/device/firing_pin/dna(src) + starts_with = list(/obj/item/device/firing_pin = 2, /obj/item/device/firing_pin/access = 2, /obj/item/device/firing_pin/implant/loyalty = 2, /obj/item/device/firing_pin/clown = 1, /obj/item/device/firing_pin/dna = 1) /obj/item/weapon/storage/box/teargas name = "box of pepperspray grenades" desc = "A box containing 7 tear gas grenades. A gas mask is printed on the label.
WARNING: Exposure carries risk of serious injury or death. Keep away from persons with lung conditions." icon_state = "flashbang" - -/obj/item/weapon/storage/box/teargas/fill() - ..() - new /obj/item/weapon/grenade/chem_grenade/teargas(src) - new /obj/item/weapon/grenade/chem_grenade/teargas(src) - new /obj/item/weapon/grenade/chem_grenade/teargas(src) - new /obj/item/weapon/grenade/chem_grenade/teargas(src) - new /obj/item/weapon/grenade/chem_grenade/teargas(src) - new /obj/item/weapon/grenade/chem_grenade/teargas(src) + starts_with = list(/obj/item/weapon/grenade/chem_grenade/teargas = 6) /obj/item/weapon/storage/box/smokebombs name = "box of smoke grenades" desc = "A box full of smoke grenades, used by special law enforcement teams and military organisations. Provides cover, confusion, and distraction." icon_state = "flashbang" - -/obj/item/weapon/storage/box/smokebombs/fill() - ..() - new /obj/item/weapon/grenade/smokebomb(src) - new /obj/item/weapon/grenade/smokebomb(src) - new /obj/item/weapon/grenade/smokebomb(src) - new /obj/item/weapon/grenade/smokebomb(src) - new /obj/item/weapon/grenade/smokebomb(src) - new /obj/item/weapon/grenade/smokebomb(src) - new /obj/item/weapon/grenade/smokebomb(src) + starts_with = list(/obj/item/weapon/grenade/smokebomb = 7) /obj/item/weapon/storage/box/emps name = "box of emp grenades" desc = "A box containing 5 military grade EMP grenades.
WARNING: Do not use near unshielded electronics or biomechanical augmentations, death or permanent paralysis may occur." icon_state = "flashbang" - -/obj/item/weapon/storage/box/emps/fill() - ..() - new /obj/item/weapon/grenade/empgrenade(src) - new /obj/item/weapon/grenade/empgrenade(src) - new /obj/item/weapon/grenade/empgrenade(src) - new /obj/item/weapon/grenade/empgrenade(src) - new /obj/item/weapon/grenade/empgrenade(src) + starts_with = list(/obj/item/weapon/grenade/empgrenade = 5) /obj/item/weapon/storage/box/smokes name = "box of smoke bombs" desc = "A box containing 5 smoke bombs." icon_state = "flashbang" - -/obj/item/weapon/storage/box/smokes/fill() - ..() - new /obj/item/weapon/grenade/smokebomb(src) - new /obj/item/weapon/grenade/smokebomb(src) - new /obj/item/weapon/grenade/smokebomb(src) - new /obj/item/weapon/grenade/smokebomb(src) - new /obj/item/weapon/grenade/smokebomb(src) + starts_with = list(/obj/item/weapon/grenade/smokebomb = 5) /obj/item/weapon/storage/box/anti_photons name = "box of anti-photon grenades" desc = "A box containing 5 experimental photon disruption grenades." icon_state = "flashbang" - -/obj/item/weapon/storage/box/anti_photons/fill() - ..() - new /obj/item/weapon/grenade/anti_photon(src) - new /obj/item/weapon/grenade/anti_photon(src) - new /obj/item/weapon/grenade/anti_photon(src) - new /obj/item/weapon/grenade/anti_photon(src) - new /obj/item/weapon/grenade/anti_photon(src) + starts_with = list(/obj/item/weapon/grenade/anti_photon = 5) /obj/item/weapon/storage/box/frags name = "box of frag grenades" desc = "A box containing 5 military grade fragmentation grenades.
WARNING: Live explosives. Misuse may result in serious injury or death." icon_state = "flashbang" - -/obj/item/weapon/storage/box/frags/fill() - ..() - new /obj/item/weapon/grenade/frag(src) - new /obj/item/weapon/grenade/frag(src) - new /obj/item/weapon/grenade/frag(src) - new /obj/item/weapon/grenade/frag(src) - new /obj/item/weapon/grenade/frag(src) + starts_with = list(/obj/item/weapon/grenade/frag = 5) /obj/item/weapon/storage/box/trackimp name = "boxed tracking implant kit" desc = "Box full of scum-bag tracking utensils." icon_state = "implant" + starts_with = list(/obj/item/weapon/implantcase/tracking = 4, /obj/item/weapon/implanter = 1, /obj/item/weapon/implantpad = 1, /obj/item/weapon/locator = 1) -/obj/item/weapon/storage/box/trackimp/fill() - ..() - new /obj/item/weapon/implantcase/tracking(src) - new /obj/item/weapon/implantcase/tracking(src) - new /obj/item/weapon/implantcase/tracking(src) - new /obj/item/weapon/implantcase/tracking(src) - new /obj/item/weapon/implanter(src) - new /obj/item/weapon/implantpad(src) - new /obj/item/weapon/locator(src) /obj/item/weapon/storage/box/chemimp name = "boxed chemical implant kit" desc = "Box of stuff used to implant chemicals." icon_state = "implant" + starts_with = list(/obj/item/weapon/implantcase/chem = 4, /obj/item/weapon/implanter = 1, /obj/item/weapon/implantpad = 1) /obj/item/weapon/storage/box/chemimp/fill() ..() @@ -523,100 +336,41 @@ name = "box of prescription glasses" desc = "This box contains nerd glasses." icon_state = "glasses" - -/obj/item/weapon/storage/box/rxglasses/fill() - ..() - new /obj/item/clothing/glasses/regular(src) - new /obj/item/clothing/glasses/regular(src) - new /obj/item/clothing/glasses/regular(src) - new /obj/item/clothing/glasses/regular(src) - new /obj/item/clothing/glasses/regular(src) - new /obj/item/clothing/glasses/regular(src) - new /obj/item/clothing/glasses/regular(src) + starts_with = list(/obj/item/clothing/glasses/regular = 7) /obj/item/weapon/storage/box/drinkingglasses name = "box of drinking glasses" desc = "It has a picture of drinking glasses on it." - -/obj/item/weapon/storage/box/drinkingglasses/fill() - ..() - new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src) - new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src) - new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src) - new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src) - new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src) - new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src) + starts_with = list(/obj/item/weapon/reagent_containers/food/drinks/drinkingglass = 6) /obj/item/weapon/storage/box/cdeathalarm_kit name = "death alarm kit" desc = "Box of stuff used to implant death alarms." icon_state = "implant" item_state = "syringe_kit" - -/obj/item/weapon/storage/box/cdeathalarm_kit/fill() - ..() - new /obj/item/weapon/implanter(src) - new /obj/item/weapon/implantcase/death_alarm(src) - new /obj/item/weapon/implantcase/death_alarm(src) - new /obj/item/weapon/implantcase/death_alarm(src) - new /obj/item/weapon/implantcase/death_alarm(src) - new /obj/item/weapon/implantcase/death_alarm(src) - new /obj/item/weapon/implantcase/death_alarm(src) + starts_with = list(/obj/item/weapon/implanter = 1, /obj/item/weapon/implantcase/death_alarm = 6) /obj/item/weapon/storage/box/condimentbottles name = "box of condiment bottles" desc = "It has a large ketchup smear on it." - -/obj/item/weapon/storage/box/condimentbottles/fill() - ..() - new /obj/item/weapon/reagent_containers/food/condiment(src) - new /obj/item/weapon/reagent_containers/food/condiment(src) - new /obj/item/weapon/reagent_containers/food/condiment(src) - new /obj/item/weapon/reagent_containers/food/condiment(src) - new /obj/item/weapon/reagent_containers/food/condiment(src) - new /obj/item/weapon/reagent_containers/food/condiment(src) + starts_with = list(/obj/item/weapon/reagent_containers/food/condiment = 6) /obj/item/weapon/storage/box/cups name = "box of paper cups" desc = "It has pictures of paper cups on the front." - -/obj/item/weapon/storage/box/cups/fill() - ..() - new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src ) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src ) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src ) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src ) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src ) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src ) - new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src ) + starts_with = list(/obj/item/weapon/reagent_containers/food/drinks/sillycup = 7) /obj/item/weapon/storage/box/donkpockets name = "box of donk-pockets" desc = "Instructions: Heat in microwave. Product will cool if not eaten within seven minutes." icon_state = "donk_kit" - -/obj/item/weapon/storage/box/donkpockets/fill() - ..() - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src) - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src) - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src) - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src) - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src) - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src) + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/donkpocket = 6) /obj/item/weapon/storage/box/sinpockets name = "box of sin-pockets" desc = "Instructions: Crush bottom of package to initiate chemical heating. Wait for 20 seconds before consumption. Product will cool if not eaten within seven minutes." icon_state = "donk_kit" - -/obj/item/weapon/storage/box/sinpockets/fill() - ..() - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src) - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src) - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src) - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src) - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src) - new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src) + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket = 6) /obj/item/weapon/storage/box/monkeycubes name = "monkey cube box" @@ -624,151 +378,69 @@ icon = 'icons/obj/food.dmi' icon_state = "monkeycubebox" can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube) + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped = 5) -/obj/item/weapon/storage/box/monkeycubes/fill() - ..() - if(src.type == /obj/item/weapon/storage/box/monkeycubes) - for(var/i = 1; i <= 5; i++) - new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped(src) /obj/item/weapon/storage/box/monkeycubes/farwacubes name = "farwa cube box" desc = "Drymate brand farwa cubes, shipped from Adhomai. Just add water!" - -/obj/item/weapon/storage/box/monkeycubes/farwacubes/fill() - ..() - for(var/i = 1; i <= 5; i++) - new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/farwacube(src) + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/farwacube = 5) /obj/item/weapon/storage/box/monkeycubes/stokcubes name = "stok cube box" desc = "Drymate brand stok cubes, shipped from Moghes. Just add water!" - -/obj/item/weapon/storage/box/monkeycubes/stokcubes/fill() - ..() - for(var/i = 1; i <= 5; i++) - new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/stokcube(src) + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/stokcube = 5) /obj/item/weapon/storage/box/monkeycubes/neaeracubes name = "neaera cube box" desc = "Drymate brand neaera cubes, shipped from Jargon 4. Just add water!" - -/obj/item/weapon/storage/box/monkeycubes/neaeracubes/fill() - ..() - for(var/i = 1; i <= 5; i++) - new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/neaeracube(src) + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/neaeracube = 5) /obj/item/weapon/storage/box/monkeycubes/vkrexicubes name = "vkrexi cube box" desc = "Drymate brand vkrexi cubes. Just add water!" - -/obj/item/weapon/storage/box/monkeycubes/vkrexicubes/fill() - ..() - for(var/i = 1; i <= 5; i++) - new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/vkrexicube(src) + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/vkrexicube = 5) /obj/item/weapon/storage/box/ids name = "box of spare IDs" desc = "Has so many empty IDs." icon_state = "id" - -/obj/item/weapon/storage/box/ids/fill() - ..() - new /obj/item/weapon/card/id(src) - new /obj/item/weapon/card/id(src) - new /obj/item/weapon/card/id(src) - new /obj/item/weapon/card/id(src) - new /obj/item/weapon/card/id(src) - new /obj/item/weapon/card/id(src) - new /obj/item/weapon/card/id(src) + starts_with = list(/obj/item/weapon/card/id = 7) /obj/item/weapon/storage/box/seccarts name = "box of spare R.O.B.U.S.T. Cartridges" desc = "A box full of R.O.B.U.S.T. Cartridges, used by Security." icon_state = "pda" - -/obj/item/weapon/storage/box/seccarts/fill() - ..() - new /obj/item/weapon/cartridge/security(src) - new /obj/item/weapon/cartridge/security(src) - new /obj/item/weapon/cartridge/security(src) - new /obj/item/weapon/cartridge/security(src) - new /obj/item/weapon/cartridge/security(src) - new /obj/item/weapon/cartridge/security(src) - new /obj/item/weapon/cartridge/security(src) + starts_with = list(/obj/item/weapon/cartridge/security = 7) /obj/item/weapon/storage/box/handcuffs name = "box of spare handcuffs" desc = "A box full of handcuffs." icon_state = "handcuff" - -/obj/item/weapon/storage/box/handcuffs/fill() - ..() - new /obj/item/weapon/handcuffs(src) - new /obj/item/weapon/handcuffs(src) - new /obj/item/weapon/handcuffs(src) - new /obj/item/weapon/handcuffs(src) - new /obj/item/weapon/handcuffs(src) - new /obj/item/weapon/handcuffs(src) - new /obj/item/weapon/handcuffs(src) + starts_with = list(/obj/item/weapon/handcuffs = 7) /obj/item/weapon/storage/box/zipties name = "box of zipties" desc = "A box full of zipties." icon_state = "handcuff" - -/obj/item/weapon/storage/box/zipties/fill() - ..() - new /obj/item/weapon/handcuffs/ziptie(src) - new /obj/item/weapon/handcuffs/ziptie(src) - new /obj/item/weapon/handcuffs/ziptie(src) - new /obj/item/weapon/handcuffs/ziptie(src) - new /obj/item/weapon/handcuffs/ziptie(src) - new /obj/item/weapon/handcuffs/ziptie(src) - new /obj/item/weapon/handcuffs/ziptie(src) + starts_with = list(/obj/item/weapon/handcuffs/ziptie = 7) /obj/item/weapon/storage/box/mousetraps name = "box of Pest-B-Gon mousetraps" desc = "WARNING: Keep out of reach of children." icon_state = "mousetraps" - -/obj/item/weapon/storage/box/mousetraps/fill() - ..() - new /obj/item/device/assembly/mousetrap( src ) - new /obj/item/device/assembly/mousetrap( src ) - new /obj/item/device/assembly/mousetrap( src ) - new /obj/item/device/assembly/mousetrap( src ) - new /obj/item/device/assembly/mousetrap( src ) - new /obj/item/device/assembly/mousetrap( src ) + starts_with = list(/obj/item/device/assembly/mousetrap = 6) /obj/item/weapon/storage/box/pillbottles name = "box of pill bottles" desc = "It has pictures of pill bottles on its front." icon_state = "pillbox" - -/obj/item/weapon/storage/box/pillbottles/fill() - ..() - new /obj/item/weapon/storage/pill_bottle( src ) - new /obj/item/weapon/storage/pill_bottle( src ) - new /obj/item/weapon/storage/pill_bottle( src ) - new /obj/item/weapon/storage/pill_bottle( src ) - new /obj/item/weapon/storage/pill_bottle( src ) - new /obj/item/weapon/storage/pill_bottle( src ) - new /obj/item/weapon/storage/pill_bottle( src ) + starts_with = list(/obj/item/weapon/storage/pill_bottle = 7) /obj/item/weapon/storage/box/spraybottles name = "box of spray bottles" desc = "It has pictures of spray bottles on its front." - -/obj/item/weapon/storage/box/spraybottles/fill() - ..() - new /obj/item/weapon/reagent_containers/spray( src ) - new /obj/item/weapon/reagent_containers/spray( src ) - new /obj/item/weapon/reagent_containers/spray( src ) - new /obj/item/weapon/reagent_containers/spray( src ) - new /obj/item/weapon/reagent_containers/spray( src ) - new /obj/item/weapon/reagent_containers/spray( src ) - new /obj/item/weapon/reagent_containers/spray( src ) + starts_with = list(/obj/item/weapon/reagent_containers/spray = 7) /obj/item/weapon/storage/box/snappops name = "snap pop box" @@ -776,11 +448,7 @@ icon = 'icons/obj/toy.dmi' icon_state = "spbox" can_hold = list(/obj/item/toy/snappop) - -/obj/item/weapon/storage/box/snappops/fill() - ..() - for(var/i=1; i <= 8; i++) - new /obj/item/toy/snappop(src) + starts_with = list(/obj/item/toy/snappop = 8) /obj/item/weapon/storage/box/matches name = "matchbox" @@ -791,11 +459,7 @@ w_class = 1 slot_flags = SLOT_BELT can_hold = list(/obj/item/weapon/flame/match) - -/obj/item/weapon/storage/box/matches/fill() - ..() - for(var/i=1; i <= 10; i++) - new /obj/item/weapon/flame/match(src) + starts_with = list(/obj/item/weapon/flame/match = 10) /obj/item/weapon/storage/box/matches/attackby(obj/item/weapon/flame/match/W as obj, mob/user as mob) if(istype(W) && !W.lit && !W.burnt) @@ -816,11 +480,7 @@ name = "box of empty injectors" desc = "Contains empty autoinjectors." icon_state = "syringe" - -/obj/item/weapon/storage/box/autoinjectors/fill() - ..() - for (var/i; i < 7; i++) - new /obj/item/weapon/reagent_containers/hypospray/autoinjector(src) + starts_with = list(/obj/item/weapon/reagent_containers/hypospray/autoinjector = 7) /obj/item/weapon/storage/box/lights name = "box of replacement bulbs" @@ -834,36 +494,24 @@ . = ..() make_exact_fit() -/obj/item/weapon/storage/box/lights/bulbs/fill() - ..() - for(var/i = 0; i < 21; i++) - new /obj/item/weapon/light/bulb(src) +/obj/item/weapon/storage/box/lights/bulbs + starts_with = list(/obj/item/weapon/light/bulb = 21) /obj/item/weapon/storage/box/lights/tubes name = "box of replacement tubes" icon_state = "lighttube" - -/obj/item/weapon/storage/box/lights/tubes/fill() - ..() - for(var/i = 0; i < 21; i++) - new /obj/item/weapon/light/tube(src) + starts_with = list(/obj/item/weapon/light/tube = 21) /obj/item/weapon/storage/box/lights/mixed name = "box of replacement lights" icon_state = "lightmixed" - -/obj/item/weapon/storage/box/lights/mixed/fill() - ..() - for(var/i = 0; i < 14; i++) - new /obj/item/weapon/light/tube(src) - for(var/i = 0; i < 7; i++) - new /obj/item/weapon/light/bulb(src) + starts_with = list(/obj/item/weapon/light/tube = 14, /obj/item/weapon/light/bulb = 7) /obj/item/weapon/storage/box/lights/coloredmixed name = "box of colored lights" icon_state = "lightmixed" -/obj/item/weapon/storage/box/lights/coloredmixed/fill() +/obj/item/weapon/storage/box/lights/coloredmixed/fill() // too lazy for this one ..() var/static/list/tube_colors = list( /obj/item/weapon/light/tube/colored/red, @@ -891,68 +539,32 @@ /obj/item/weapon/storage/box/lights/colored/red name = "box of red lights" icon_state = "lightmixed" - -/obj/item/weapon/storage/box/lights/colored/red/fill() - ..() - for(var/i = 0, i < 14, i++) - new /obj/item/weapon/light/tube/colored/red(src) - for(var/i = 0, i < 7, i++) - new /obj/item/weapon/light/bulb/colored/red(src) + starts_with = list(/obj/item/weapon/light/tube/colored/red = 14, /obj/item/weapon/light/bulb/colored/red = 7) /obj/item/weapon/storage/box/lights/colored/green name = "box of green lights" icon_state = "lightmixed" - -/obj/item/weapon/storage/box/lights/colored/green/fill() - ..() - for(var/i = 0, i < 14, i++) - new /obj/item/weapon/light/tube/colored/green(src) - for(var/i = 0, i < 7, i++) - new /obj/item/weapon/light/bulb/colored/green(src) + starts_with = list(/obj/item/weapon/light/tube/colored/green = 14, /obj/item/weapon/light/bulb/colored/green = 7) /obj/item/weapon/storage/box/lights/colored/blue name = "box of blue lights" icon_state = "lightmixed" - -/obj/item/weapon/storage/box/lights/colored/blue/fill() - ..() - for(var/i = 0, i < 14, i++) - new /obj/item/weapon/light/tube/colored/blue(src) - for(var/i = 0, i < 7, i++) - new /obj/item/weapon/light/bulb/colored/blue(src) + starts_with = list(/obj/item/weapon/light/tube/colored/blue = 14, /obj/item/weapon/light/bulb/colored/blue = 7) /obj/item/weapon/storage/box/lights/colored/cyan name = "box of cyan lights" icon_state = "lightmixed" - -/obj/item/weapon/storage/box/lights/colored/cyan/fill() - ..() - for(var/i = 0, i < 14, i++) - new /obj/item/weapon/light/tube/colored/cyan(src) - for(var/i = 0, i < 7, i++) - new /obj/item/weapon/light/bulb/colored/cyan(src) + starts_with = list(/obj/item/weapon/light/tube/colored/cyan = 14, /obj/item/weapon/light/bulb/colored/cyan = 7) /obj/item/weapon/storage/box/lights/colored/yellow name = "box of yellow lights" icon_state = "lightmixed" - -/obj/item/weapon/storage/box/lights/colored/yellow/fill() - ..() - for(var/i = 0, i < 14, i++) - new /obj/item/weapon/light/tube/colored/yellow(src) - for(var/i = 0, i < 7, i++) - new /obj/item/weapon/light/bulb/colored/yellow(src) + starts_with = list(/obj/item/weapon/light/tube/colored/yellow = 14, /obj/item/weapon/light/bulb/colored/yellow = 7) /obj/item/weapon/storage/box/lights/colored/magenta name = "box of magenta lights" icon_state = "lightmixed" - -/obj/item/weapon/storage/box/lights/colored/magenta/fill() - ..() - for(var/i = 0, i < 14, i++) - new /obj/item/weapon/light/tube/colored/magenta(src) - for(var/i = 0, i < 7, i++) - new /obj/item/weapon/light/bulb/colored/magenta(src) + starts_with = list(/obj/item/weapon/light/tube/colored/magenta = 14, /obj/item/weapon/light/bulb/colored/magenta = 7) /obj/item/weapon/storage/box/freezer name = "portable freezer" @@ -964,6 +576,7 @@ can_hold = list(/obj/item/organ, /obj/item/weapon/reagent_containers/food, /obj/item/weapon/reagent_containers/glass) max_storage_space = 21 use_to_pickup = 1 // for picking up broken bulbs, not that most people will try + chewable = FALSE /obj/item/weapon/storage/box/kitchen name = "kitchen supplies" @@ -1023,64 +636,39 @@ name = "stimpack value kit" desc = "A box with several stimpack medipens for the economical miner." icon_state = "syringe" - -/obj/item/weapon/storage/box/stims/fill() - for(var/i in 1 to 4) - new /obj/item/weapon/reagent_containers/hypospray/autoinjector/stimpack(src) + starts_with = list(/obj/item/weapon/reagent_containers/hypospray/autoinjector/stimpack = 4) /obj/item/weapon/storage/box/inhalers name = "inhaler kit" desc = "A box filled with several inhalers and empty inhaler cartridges." icon_state = "box_inhalers" - -/obj/item/weapon/storage/box/inhalers/fill() - for(var/i in 1 to 2) - new /obj/item/weapon/personal_inhaler(src) - - for(var/i in 1 to 6) - new /obj/item/weapon/reagent_containers/personal_inhaler_cartridge(src) + starts_with = list(/obj/item/weapon/personal_inhaler = 2, /obj/item/weapon/reagent_containers/personal_inhaler_cartridge = 6) /obj/item/weapon/storage/box/inhalers_large name = "combat inhaler kit" desc = "A box filled with a combat inhaler and several large empty inhaler cartridges." icon_state = "box_inhalers" - -/obj/item/weapon/storage/box/inhalers_large/fill() - - new /obj/item/weapon/personal_inhaler/combat(src) - - for(var/i in 1 to 6) - new /obj/item/weapon/reagent_containers/personal_inhaler_cartridge/large(src) + starts_with = list(/obj/item/weapon/personal_inhaler/combat = 1, /obj/item/weapon/reagent_containers/personal_inhaler_cartridge/large = 6) /obj/item/weapon/storage/box/inhalers_auto name = "autoinhaler kit" desc = "A box filled with a combat inhaler and several large empty inhaler cartridges." icon_state = "box_inhalers" - -/obj/item/weapon/storage/box/inhalers_auto/fill() - for(var/i in 1 to 8) - new /obj/item/weapon/reagent_containers/inhaler(src) + starts_with = list(/obj/item/weapon/reagent_containers/inhaler = 8) /obj/item/weapon/storage/box/clams name = "box of Ras'val clam" desc = "A box filled with clams from the Ras'val sea, imported by Njadra'Akhar Enterprises." - -/obj/item/weapon/storage/box/clams/fill() - ..() - new /obj/item/weapon/reagent_containers/food/snacks/clam(src) - new /obj/item/weapon/reagent_containers/food/snacks/clam(src) - new /obj/item/weapon/reagent_containers/food/snacks/clam(src) - new /obj/item/weapon/reagent_containers/food/snacks/clam(src) - new /obj/item/weapon/reagent_containers/food/snacks/clam(src) + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/clam = 5) /obj/item/weapon/storage/box/produce name = "produce box" desc = "A large box of random, leftover produce." icon_state = "largebox" + starts_with = list(/obj/random_produce = 12) /obj/item/weapon/storage/box/produce/fill() - for(var/i in 1 to 12) - new /obj/random_produce(src) + . = ..() make_exact_fit() @@ -1113,24 +701,13 @@ /obj/item/weapon/storage/box/crabmeat name = "box of crab legs" desc = "A box filled with high-quality crab legs. Shipped to Aurora by popular demand!" - -/obj/item/weapon/storage/box/crabmeat/fill() - ..() - new /obj/item/weapon/reagent_containers/food/snacks/crabmeat(src) - new /obj/item/weapon/reagent_containers/food/snacks/crabmeat(src) - new /obj/item/weapon/reagent_containers/food/snacks/crabmeat(src) - new /obj/item/weapon/reagent_containers/food/snacks/crabmeat(src) - new /obj/item/weapon/reagent_containers/food/snacks/crabmeat(src) + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/crabmeat = 5) /obj/item/weapon/storage/box/tranquilizer name = "box of tranquilizer darts" desc = "It has a picture of a tranquilizer dart and several warning symbols on the front.
WARNING: Live ammunition. Misuse may result in serious injury or death." icon_state = "incendiaryshot_box" - -/obj/item/weapon/storage/box/tranquilizer/fill() - ..() - for(var/i in 1 to 8) - new /obj/item/ammo_casing/tranq(src) + starts_with = list(/obj/item/ammo_casing/tranq = 8) /obj/item/weapon/storage/box/toothpaste can_hold = list(/obj/item/weapon/reagent_containers/toothpaste, @@ -1209,4 +786,10 @@ new /obj/item/pra_manifesto(src) new /obj/item/pra_manifesto(src) new /obj/item/pra_manifesto(src) - new /obj/item/pra_manifesto(src) \ No newline at end of file + new /obj/item/pra_manifesto(src) + +/obj/item/weapon/storage/box/sharps + name = "sharps disposal box" + desc = "A plastic box for disposal of used needles and other sharp, potentially-contaminated tools. There is a large biohazard sign on the front." + icon_state = "sharpsbox" + chewable = FALSE \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index 121a21162fc..b9a9d641a3e 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -51,11 +51,7 @@ /obj/item/weapon/reagent_containers/food/snacks/egg, /obj/item/weapon/reagent_containers/food/snacks/boiledegg ) - -/obj/item/weapon/storage/fancy/egg_box/fill() - for(var/i=1; i <= storage_slots; i++) - new /obj/item/weapon/reagent_containers/food/snacks/egg(src) - + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/egg = 12) /* * Candle Box */ @@ -70,10 +66,7 @@ throwforce = 2 slot_flags = SLOT_BELT max_storage_space = 5 - -/obj/item/weapon/storage/fancy/candle_box/fill() - for(var/i=1; i <= 5; i++) - new /obj/item/weapon/flame/candle(src) + starts_with = list(/obj/item/weapon/flame/candle = 5) /* * Crayon Box @@ -89,15 +82,17 @@ can_hold = list( /obj/item/weapon/pen/crayon ) + starts_with = list( + /obj/item/weapon/pen/crayon/red = 1, + /obj/item/weapon/pen/crayon/orange = 1, + /obj/item/weapon/pen/crayon/yellow = 1, + /obj/item/weapon/pen/crayon/green = 1, + /obj/item/weapon/pen/crayon/blue = 1, + /obj/item/weapon/pen/crayon/purple = 1 + ) /obj/item/weapon/storage/fancy/crayons/fill() - ..() - new /obj/item/weapon/pen/crayon/red(src) - new /obj/item/weapon/pen/crayon/orange(src) - new /obj/item/weapon/pen/crayon/yellow(src) - new /obj/item/weapon/pen/crayon/green(src) - new /obj/item/weapon/pen/crayon/blue(src) - new /obj/item/weapon/pen/crayon/purple(src) + . = ..() update_icon() /obj/item/weapon/storage/fancy/crayons/update_icon() @@ -260,12 +255,7 @@ name = "vial storage box" storage_slots = 6 can_hold = list(/obj/item/weapon/reagent_containers/glass/beaker/vial) - - -/obj/item/weapon/storage/fancy/vials/fill() - ..() - for(var/i=1; i <= storage_slots; i++) - new /obj/item/weapon/reagent_containers/glass/beaker/vial(src) + starts_with = list(/obj/item/weapon/reagent_containers/glass/beaker/vial = 6) /obj/item/weapon/storage/lockbox/vials name = "secure vial storage box" @@ -307,8 +297,8 @@ can_hold = list( /obj/item/weapon/reagent_containers/food/snacks/truffle/random ) + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/truffle/random = 8) /obj/item/weapon/storage/fancy/chocolate_box/fill() for(var/i=1; i <= storage_slots; i++) new /obj/item/weapon/reagent_containers/food/snacks/truffle/random(src) - diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index 483b8f50c0d..6ffeecde848 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -16,114 +16,87 @@ var/empty = 0 drop_sound = 'sound/items/drop/box.ogg' +/obj/item/weapon/storage/firstaid/fill() + if (empty) return + . = ..() /obj/item/weapon/storage/firstaid/fire name = "fire first-aid kit" desc = "It's an emergency medical kit for when the toxins lab -spontaneously- burns down." icon_state = "ointment" item_state = "firstaid-ointment" + starts_with = list( + /obj/item/weapon/reagent_containers/pill/kelotane = 3, + /obj/item/stack/medical/ointment = 2, + /obj/item/device/healthanalyzer = 1, + /obj/item/weapon/reagent_containers/hypospray/autoinjector/inaprovaline = 1 + ) - fill() - ..() - if (empty) return - icon_state = pick("ointment","firefirstaid") - new /obj/item/weapon/reagent_containers/pill/kelotane( src ) - new /obj/item/weapon/reagent_containers/pill/kelotane( src ) - new /obj/item/weapon/reagent_containers/pill/kelotane( src ) - new /obj/item/stack/medical/ointment( src ) - new /obj/item/stack/medical/ointment( src ) - new /obj/item/device/healthanalyzer( src ) - new /obj/item/weapon/reagent_containers/hypospray/autoinjector/inaprovaline( src ) - return - +/obj/item/weapon/storage/firstaid/fire/fill() + . = ..() + icon_state = pick("ointment","firefirstaid") /obj/item/weapon/storage/firstaid/regular icon_state = "firstaid" - - fill() - ..() - if (empty) return - new /obj/item/stack/medical/bruise_pack(src) - new /obj/item/stack/medical/bruise_pack(src) - new /obj/item/stack/medical/bruise_pack(src) - new /obj/item/stack/medical/ointment(src) - new /obj/item/stack/medical/ointment(src) - new /obj/item/device/healthanalyzer(src) - new /obj/item/weapon/reagent_containers/hypospray/autoinjector/inaprovaline( src ) - return + starts_with = list( + /obj/item/stack/medical/bruise_pack = 3, + /obj/item/stack/medical/ointment = 2, + /obj/item/device/healthanalyzer = 1, + /obj/item/weapon/reagent_containers/hypospray/autoinjector/inaprovaline = 1 + ) /obj/item/weapon/storage/firstaid/toxin name = "toxin first aid" desc = "Used to treat when you have a high amount of toxins in your body." icon_state = "antitoxin" item_state = "firstaid-toxin" + starts_with = list( + /obj/item/weapon/reagent_containers/syringe/antitoxin = 3, + /obj/item/weapon/reagent_containers/pill/antitox = 3, + /obj/item/device/healthanalyzer = 1 + ) - fill() - ..() - if (empty) return - icon_state = pick("antitoxin","antitoxfirstaid","antitoxfirstaid2","antitoxfirstaid3") - new /obj/item/weapon/reagent_containers/syringe/antitoxin( src ) - new /obj/item/weapon/reagent_containers/syringe/antitoxin( src ) - new /obj/item/weapon/reagent_containers/syringe/antitoxin( src ) - new /obj/item/weapon/reagent_containers/pill/antitox( src ) - new /obj/item/weapon/reagent_containers/pill/antitox( src ) - new /obj/item/weapon/reagent_containers/pill/antitox( src ) - new /obj/item/device/healthanalyzer( src ) - return +/obj/item/weapon/storage/firstaid/toxin/fill() + . = ..() + icon_state = pick("antitoxin","antitoxfirstaid","antitoxfirstaid2","antitoxfirstaid3") /obj/item/weapon/storage/firstaid/o2 name = "oxygen deprivation kit" desc = "A box full of oxygen related goodies." icon_state = "o2" item_state = "firstaid-o2" - - fill() - ..() - if (empty) return - new /obj/item/weapon/reagent_containers/inhaler/dexalin( src ) - new /obj/item/weapon/reagent_containers/inhaler/dexalin( src ) - new /obj/item/weapon/reagent_containers/inhaler/dexalin( src ) - new /obj/item/weapon/reagent_containers/inhaler/dexalin( src ) - new /obj/item/weapon/reagent_containers/hypospray/autoinjector/inaprovaline( src ) - new /obj/item/weapon/reagent_containers/hypospray/autoinjector/inaprovaline( src ) - new /obj/item/device/breath_analyzer( src ) - return + starts_with = list( + /obj/item/weapon/reagent_containers/inhaler/dexalin = 4, + /obj/item/weapon/reagent_containers/hypospray/autoinjector/inaprovaline = 2, + /obj/item/device/breath_analyzer = 1 + ) /obj/item/weapon/storage/firstaid/adv name = "advanced first-aid kit" desc = "Contains advanced medical treatments." icon_state = "advfirstaid" item_state = "firstaid-advanced" - -/obj/item/weapon/storage/firstaid/adv/fill() - ..() - if (empty) return - new /obj/item/weapon/reagent_containers/hypospray/autoinjector/inaprovaline( src ) - new /obj/item/stack/medical/advanced/bruise_pack(src) - new /obj/item/stack/medical/advanced/bruise_pack(src) - new /obj/item/stack/medical/advanced/bruise_pack(src) - new /obj/item/stack/medical/advanced/ointment(src) - new /obj/item/stack/medical/advanced/ointment(src) - new /obj/item/stack/medical/splint(src) - return + starts_with = list( + /obj/item/weapon/reagent_containers/hypospray/autoinjector/inaprovaline = 1, + /obj/item/stack/medical/advanced/bruise_pack = 3, + /obj/item/stack/medical/advanced/ointment = 2, + /obj/item/stack/medical/splint = 1 + ) /obj/item/weapon/storage/firstaid/combat name = "combat medical kit" desc = "Contains advanced medical treatments." icon_state = "bezerk" item_state = "firstaid-advanced" - -/obj/item/weapon/storage/firstaid/combat/fill() - ..() - if (empty) return - new /obj/item/weapon/storage/pill_bottle/bicaridine(src) - new /obj/item/weapon/storage/pill_bottle/dermaline(src) - new /obj/item/weapon/storage/pill_bottle/dexalin_plus(src) - new /obj/item/weapon/storage/pill_bottle/dylovene(src) - new /obj/item/weapon/storage/pill_bottle/tramadol(src) - new /obj/item/weapon/reagent_containers/inhaler/hyperzine(src) - new /obj/item/stack/medical/splint(src) - return + starts_with = list( + /obj/item/weapon/storage/pill_bottle/bicaridine = 1, + /obj/item/weapon/storage/pill_bottle/dermaline = 1, + /obj/item/weapon/storage/pill_bottle/dexalin_plus = 1, + /obj/item/weapon/storage/pill_bottle/dylovene = 1, + /obj/item/weapon/storage/pill_bottle/tramadol = 1, + /obj/item/weapon/reagent_containers/inhaler/hyperzine = 1, + /obj/item/stack/medical/splint = 1 + ) /obj/item/weapon/storage/firstaid/surgery name = "surgery kit" @@ -131,39 +104,33 @@ icon_state = "purplefirstaid" item_state = "firstaid-advanced" use_sound = 'sound/items/storage/briefcase.ogg' + starts_with = list( + /obj/item/weapon/bonesetter = 1, + /obj/item/weapon/cautery = 1, + /obj/item/weapon/circular_saw = 1, + /obj/item/weapon/hemostat = 1, + /obj/item/weapon/retractor = 1, + /obj/item/weapon/scalpel = 1, + /obj/item/weapon/surgicaldrill = 1, + /obj/item/weapon/bonegel = 1, + /obj/item/weapon/FixOVein = 1, + /obj/item/stack/medical/advanced/bruise_pack = 1, + /obj/item/weapon/reagent_containers/inhaler/soporific = 2 + ) /obj/item/weapon/storage/firstaid/surgery/fill() ..() - if (empty) return - new /obj/item/weapon/bonesetter(src) - new /obj/item/weapon/cautery(src) - new /obj/item/weapon/circular_saw(src) - new /obj/item/weapon/hemostat(src) - new /obj/item/weapon/retractor(src) - new /obj/item/weapon/scalpel(src) - new /obj/item/weapon/surgicaldrill(src) - new /obj/item/weapon/bonegel(src) - new /obj/item/weapon/FixOVein(src) - new /obj/item/stack/medical/advanced/bruise_pack(src) - new /obj/item/weapon/reagent_containers/inhaler/soporific(src) - new /obj/item/weapon/reagent_containers/inhaler/soporific(src) - make_exact_fit() + if (!empty) + make_exact_fit() /obj/item/weapon/storage/firstaid/brute name = "brute aid kit" desc = "A NanoTrasen care package for moderately injured miners." icon_state = "brute" - -/obj/item/weapon/storage/firstaid/brute/fill() - ..() - if (empty) return - new /obj/item/stack/medical/bruise_pack(src) - new /obj/item/stack/medical/bruise_pack(src) - new /obj/item/stack/medical/bruise_pack(src) - new /obj/item/stack/medical/bruise_pack(src) - new /obj/item/stack/medical/advanced/bruise_pack(src) - new /obj/item/stack/medical/advanced/bruise_pack(src) - return + starts_with = list( + /obj/item/stack/medical/bruise_pack = 4, + /obj/item/stack/medical/advanced/bruise_pack = 2 + ) /* * Pill Bottles @@ -185,153 +152,59 @@ /obj/item/weapon/storage/pill_bottle/antitox name = "bottle of Dylovene pills" desc = "Contains pills used to counter toxins." - - fill() - ..() - new /obj/item/weapon/reagent_containers/pill/antitox( src ) - new /obj/item/weapon/reagent_containers/pill/antitox( src ) - new /obj/item/weapon/reagent_containers/pill/antitox( src ) - new /obj/item/weapon/reagent_containers/pill/antitox( src ) - new /obj/item/weapon/reagent_containers/pill/antitox( src ) - new /obj/item/weapon/reagent_containers/pill/antitox( src ) - new /obj/item/weapon/reagent_containers/pill/antitox( src ) + starts_with = list(/obj/item/weapon/reagent_containers/pill/antitox = 7) /obj/item/weapon/storage/pill_bottle/bicaridine name = "bottle of Bicaridine pills" desc = "Contains pills used to stabilize the severely injured." - -/obj/item/weapon/storage/pill_bottle/bicaridine/fill() - ..() - new /obj/item/weapon/reagent_containers/pill/bicaridine(src) - new /obj/item/weapon/reagent_containers/pill/bicaridine(src) - new /obj/item/weapon/reagent_containers/pill/bicaridine(src) - new /obj/item/weapon/reagent_containers/pill/bicaridine(src) - new /obj/item/weapon/reagent_containers/pill/bicaridine(src) - new /obj/item/weapon/reagent_containers/pill/bicaridine(src) - new /obj/item/weapon/reagent_containers/pill/bicaridine(src) + starts_with = list(/obj/item/weapon/reagent_containers/pill/bicaridine = 7) /obj/item/weapon/storage/pill_bottle/dexalin_plus name = "bottle of Dexalin Plus pills" desc = "Contains pills used to treat extreme cases of oxygen deprivation." - -/obj/item/weapon/storage/pill_bottle/dexalin_plus/fill() - ..() - new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src) - new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src) - new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src) - new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src) - new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src) - new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src) - new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src) + starts_with = list(/obj/item/weapon/reagent_containers/pill/dexalin_plus = 7) /obj/item/weapon/storage/pill_bottle/dermaline name = "bottle of Dermaline pills" desc = "Contains pills used to treat burn wounds." - -/obj/item/weapon/storage/pill_bottle/dermaline/fill() - ..() - new /obj/item/weapon/reagent_containers/pill/dermaline(src) - new /obj/item/weapon/reagent_containers/pill/dermaline(src) - new /obj/item/weapon/reagent_containers/pill/dermaline(src) - new /obj/item/weapon/reagent_containers/pill/dermaline(src) - new /obj/item/weapon/reagent_containers/pill/dermaline(src) - new /obj/item/weapon/reagent_containers/pill/dermaline(src) - new /obj/item/weapon/reagent_containers/pill/dermaline(src) + starts_with = list(/obj/item/weapon/reagent_containers/pill/dermaline = 7) /obj/item/weapon/storage/pill_bottle/dylovene name = "bottle of Dylovene pills" desc = "Contains pills used to treat toxic substances in the blood." - -/obj/item/weapon/storage/pill_bottle/dylovene/fill() - ..() - new /obj/item/weapon/reagent_containers/pill/dylovene(src) - new /obj/item/weapon/reagent_containers/pill/dylovene(src) - new /obj/item/weapon/reagent_containers/pill/dylovene(src) - new /obj/item/weapon/reagent_containers/pill/dylovene(src) - new /obj/item/weapon/reagent_containers/pill/dylovene(src) - new /obj/item/weapon/reagent_containers/pill/dylovene(src) - new /obj/item/weapon/reagent_containers/pill/dylovene(src) + starts_with = list(/obj/item/weapon/reagent_containers/pill/dylovene = 7) /obj/item/weapon/storage/pill_bottle/inaprovaline name = "bottle of Inaprovaline pills" desc = "Contains pills used to stabilize patients." - - fill() - ..() - new /obj/item/weapon/reagent_containers/pill/inaprovaline( src ) - new /obj/item/weapon/reagent_containers/pill/inaprovaline( src ) - new /obj/item/weapon/reagent_containers/pill/inaprovaline( src ) - new /obj/item/weapon/reagent_containers/pill/inaprovaline( src ) - new /obj/item/weapon/reagent_containers/pill/inaprovaline( src ) - new /obj/item/weapon/reagent_containers/pill/inaprovaline( src ) - new /obj/item/weapon/reagent_containers/pill/inaprovaline( src ) + starts_with = list(/obj/item/weapon/reagent_containers/pill/inaprovaline = 7) /obj/item/weapon/storage/pill_bottle/kelotane name = "bottle of kelotane pills" desc = "Contains pills used to treat burns." + starts_with = list(/obj/item/weapon/reagent_containers/pill/kelotane = 7) - fill() - ..() - new /obj/item/weapon/reagent_containers/pill/kelotane( src ) - new /obj/item/weapon/reagent_containers/pill/kelotane( src ) - new /obj/item/weapon/reagent_containers/pill/kelotane( src ) - new /obj/item/weapon/reagent_containers/pill/kelotane( src ) - new /obj/item/weapon/reagent_containers/pill/kelotane( src ) - new /obj/item/weapon/reagent_containers/pill/kelotane( src ) - new /obj/item/weapon/reagent_containers/pill/kelotane( src ) - -/obj/item/weapon/storage/pill_bottle/spaceacillin - name = "bottle of Spaceacillin pills" - desc = "A theta-lactam antibiotic. Effective against many diseases likely to be encountered in space." - -/obj/item/weapon/storage/pill_bottle/spaceacillin/fill() - ..() - new /obj/item/weapon/reagent_containers/pill/spaceacillin(src) - new /obj/item/weapon/reagent_containers/pill/spaceacillin(src) - new /obj/item/weapon/reagent_containers/pill/spaceacillin(src) - new /obj/item/weapon/reagent_containers/pill/spaceacillin(src) - new /obj/item/weapon/reagent_containers/pill/spaceacillin(src) - new /obj/item/weapon/reagent_containers/pill/spaceacillin(src) - new /obj/item/weapon/reagent_containers/pill/spaceacillin(src) +/obj/item/weapon/storage/pill_bottle/antihistamine + name = "bottle of diphenhydramine pills" + desc = "Diphenhydramine, a common antihistamine used to reduce symptoms of allergies. Helps with sneezing." + starts_with = list(/obj/item/weapon/reagent_containers/pill/antihistamine = 7) /obj/item/weapon/storage/pill_bottle/tramadol name = "bottle of Tramadol pills" desc = "Contains pills used to relieve pain." + starts_with = list(/obj/item/weapon/reagent_containers/pill/tramadol = 7) - fill() - ..() - new /obj/item/weapon/reagent_containers/pill/tramadol( src ) - new /obj/item/weapon/reagent_containers/pill/tramadol( src ) - new /obj/item/weapon/reagent_containers/pill/tramadol( src ) - new /obj/item/weapon/reagent_containers/pill/tramadol( src ) - new /obj/item/weapon/reagent_containers/pill/tramadol( src ) - new /obj/item/weapon/reagent_containers/pill/tramadol( src ) - new /obj/item/weapon/reagent_containers/pill/tramadol( src ) +/obj/item/weapon/storage/pill_bottle/paracetamol + name = "bottle of paracetamol pills" + desc = "Contains pills used to relieve pain and reduce fevers." + starts_with = list(/obj/item/weapon/reagent_containers/pill/paracetamol = 7) /obj/item/weapon/storage/pill_bottle/escitalopram name = "bottle of Escitalopram pills" desc = "Contains pills used to stabilize a patient's mood." - - fill() - ..() - new /obj/item/weapon/reagent_containers/pill/escitalopram( src ) - new /obj/item/weapon/reagent_containers/pill/escitalopram( src ) - new /obj/item/weapon/reagent_containers/pill/escitalopram( src ) - new /obj/item/weapon/reagent_containers/pill/escitalopram( src ) - new /obj/item/weapon/reagent_containers/pill/escitalopram( src ) - new /obj/item/weapon/reagent_containers/pill/escitalopram( src ) - new /obj/item/weapon/reagent_containers/pill/escitalopram( src ) + starts_with = list(/obj/item/weapon/reagent_containers/pill/escitalopram = 7) /obj/item/weapon/storage/pill_bottle/rmt name = "bottle of RMT pills" desc = "Contains pills used to remedy the effects of prolonged zero-gravity adaptations." - -/obj/item/weapon/storage/pill_bottle/rmt/fill() - ..() - new /obj/item/weapon/reagent_containers/pill/rmt(src) - new /obj/item/weapon/reagent_containers/pill/rmt(src) - new /obj/item/weapon/reagent_containers/pill/rmt(src) - new /obj/item/weapon/reagent_containers/pill/rmt(src) - new /obj/item/weapon/reagent_containers/pill/rmt(src) - new /obj/item/weapon/reagent_containers/pill/rmt(src) - new /obj/item/weapon/reagent_containers/pill/rmt(src) \ No newline at end of file + starts_with = list(/obj/item/weapon/reagent_containers/pill/rmt = 7) diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm index 2efa2d1b008..55cd436668f 100644 --- a/code/game/objects/items/weapons/storage/lockbox.dm +++ b/code/game/objects/items/weapons/storage/lockbox.dm @@ -73,31 +73,22 @@ /obj/item/weapon/storage/lockbox/loyalty name = "lockbox of loyalty implants" req_access = list(access_security) - - New() - ..() - new /obj/item/weapon/implantcase/loyalty(src) - new /obj/item/weapon/implantcase/loyalty(src) - new /obj/item/weapon/implantcase/loyalty(src) - new /obj/item/weapon/implanter/loyalty(src) + starts_with = list( + /obj/item/weapon/implantcase/loyalty = 3, + /obj/item/weapon/implanter/loyalty = 1 + ) /obj/item/weapon/storage/lockbox/clusterbang name = "lockbox of clusterbangs" desc = "You have a bad feeling about opening this." req_access = list(access_security) - - New() - ..() - new /obj/item/weapon/grenade/flashbang/clusterbang(src) + starts_with = list(/obj/item/weapon/grenade/flashbang/clusterbang = 1) /obj/item/weapon/storage/lockbox/lawgiver name = "Weapons lockbox" desc = "A high security weapons lockbox" req_access = list(access_armory) - - New() - ..() - new /obj/item/weapon/gun/energy/lawgiver(src) + starts_with = list(/obj/item/weapon/gun/energy/lawgiver = 1) /obj/item/weapon/storage/lockbox/medal name = "medal box" @@ -110,18 +101,11 @@ icon_locked = "medalbox+l" icon_closed = "medalbox" icon_broken = "medalbox+b" - -/obj/item/weapon/storage/lockbox/medal/fill() - ..() - new /obj/item/clothing/accessory/medal/conduct(src) - new /obj/item/clothing/accessory/medal/conduct(src) - new /obj/item/clothing/accessory/medal/conduct(src) - new /obj/item/clothing/accessory/medal/bronze_heart(src) - new /obj/item/clothing/accessory/medal/bronze_heart(src) - new /obj/item/clothing/accessory/medal/nobel_science(src) - new /obj/item/clothing/accessory/medal/nobel_science(src) - new /obj/item/clothing/accessory/medal/iron/merit(src) - new /obj/item/clothing/accessory/medal/iron/merit(src) - new /obj/item/clothing/accessory/medal/silver/valor(src) - new /obj/item/clothing/accessory/medal/silver/security(src) - new /obj/item/clothing/accessory/medal/silver/security(src) + starts_with = list( + /obj/item/clothing/accessory/medal/conduct = 3, + /obj/item/clothing/accessory/medal/bronze_heart = 2, + /obj/item/clothing/accessory/medal/nobel_science = 2, + /obj/item/clothing/accessory/medal/iron/merit = 2, + /obj/item/clothing/accessory/medal/silver/valor = 1, + /obj/item/clothing/accessory/medal/silver/security = 2 + ) diff --git a/code/game/objects/items/weapons/storage/misc.dm b/code/game/objects/items/weapons/storage/misc.dm index 006e9282c16..3526e933643 100644 --- a/code/game/objects/items/weapons/storage/misc.dm +++ b/code/game/objects/items/weapons/storage/misc.dm @@ -5,24 +5,22 @@ icon_state = "dicebag" use_sound = "rustle" drop_sound = 'sound/items/drop/hat.ogg' - -/obj/item/weapon/storage/pill_bottle/dice/fill() - ..() - new /obj/item/weapon/dice( src ) - new /obj/item/weapon/dice/d20( src ) + starts_with = list( + /obj/item/weapon/dice = 1, + /obj/item/weapon/dice/d20 = 1 + ) /obj/item/weapon/storage/pill_bottle/dice/gaming name = "pack of gaming dice" desc = "It's a small container with gaming dice inside." icon_state = "magicdicebag" - -/obj/item/weapon/storage/pill_bottle/dice/gaming/fill() - ..() - new /obj/item/weapon/dice/d4(src) - new /obj/item/weapon/dice/d8(src) - new /obj/item/weapon/dice/d10(src) - new /obj/item/weapon/dice/d12(src) - new /obj/item/weapon/dice/d100(src) + starts_with = list( + /obj/item/weapon/dice/d4 = 1, + /obj/item/weapon/dice/d8 = 1, + /obj/item/weapon/dice/d10 = 1, + /obj/item/weapon/dice/d12 = 1, + /obj/item/weapon/dice/d100 = 1 + ) /* * Donut Box @@ -32,14 +30,12 @@ icon = 'icons/obj/food.dmi' icon_state = "donutbox" name = "donut box" - var/startswith = 6 can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/donut) foldable = /obj/item/stack/material/cardboard + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/donut/normal = 6) /obj/item/weapon/storage/box/donut/fill() - ..() - for(var/i=1; i <= startswith; i++) - new /obj/item/weapon/reagent_containers/food/snacks/donut/normal(src) + . = ..() update_icon() /obj/item/weapon/storage/box/donut/update_icon() @@ -50,17 +46,16 @@ i++ /obj/item/weapon/storage/box/donut/empty - startswith = 0 + starts_with = null max_storage_space = 12 /obj/item/weapon/storage/box/pineapple icon = 'icons/obj/storage.dmi' icon_state = "pineapple_rings" name = "can of pineapple rings" - var/startswith = 6 + starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/pineapple_ring = 6) can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/pineapple_ring) /obj/item/weapon/storage/box/pineapple/fill() - for(var/i=1; i <= startswith; i++) - new /obj/item/weapon/reagent_containers/food/snacks/pineapple_ring(src) + . = ..() update_icon() diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index b1471d6e719..4a9d0c3a5eb 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -180,11 +180,7 @@ anchored = 1.0 density = 0 cant_hold = list(/obj/item/weapon/storage/secure/briefcase) - - New() - ..() - new /obj/item/weapon/paper(src) - new /obj/item/weapon/pen(src) + starts_with = list(/obj/item/weapon/paper = 1, /obj/item/weapon/pen = 1) attack_hand(mob/user as mob) return attack_self(user) diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 84ba1e32e86..a62ea66cc2c 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -36,6 +36,7 @@ var/allow_quick_gather //Set this variable to allow the object to have the 'toggle mode' verb, which quickly collects all items from a tile. var/collection_mode = 1 //0 = pick one at a time, 1 = pick all on tile var/use_sound = "rustle" //sound played when used. null for no sound. + var/list/starts_with // for pre-filled items /obj/item/weapon/storage/Destroy() close_all() @@ -574,6 +575,13 @@ // Override this to fill the storage object with stuff. /obj/item/weapon/storage/proc/fill() + if(LAZYLEN(starts_with)) + for(var/t in starts_with) + if(!ispath(t)) + crash_with("[t] in [src]'s starts_with list is not a path!") + continue + for(var/i=0, i\The [user] hits [target] with [src]!",) user.do_attack_animation(src) M.IgniteMob() - else if(reagents.total_volume) - if(user.zone_sel.selecting == "mouth" && !(M.wear_mask && M.wear_mask.item_flags & AIRTIGHT)) - user.do_attack_animation(src) - user.visible_message( - "\The [user] smothers [target] with [src]!", - "You smother [target] with [src]!", - "You hear some struggling and muffled cries of surprise" - ) + else if(ishuman(M)) + var/mob/living/carbon/human/H = M + var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) + if(LAZYLEN(affecting.wounds)) + for (var/datum/wound/W in affecting.wounds) + if (W.internal) + continue + if(W.bandaged || W.clamped) + continue + to_chat(user, span("notice", "You begin to bandage \a [W.desc] on [M]'s [affecting.name] with a rag.")) + if(!do_mob(user, M, W.damage/10)) // takes twice as long as a normal bandage + to_chat(user, span("notice","You must stand still to bandage wounds.")) + break + for(var/datum/reagent/R in reagents.reagent_list) + var/strength = R.germ_adjust * R.volume/4 + if(istype(R, /datum/reagent/alcohol)) + var/datum/reagent/alcohol/A = R + strength = strength * (A.strength/100) + W.germ_level -= min(strength, W.germ_level)//Clean the wound a bit. + if (W.germ_level <= 0) + W.disinfected = 1//The wound becomes disinfected if fully cleaned + break + reagents.trans_to_mob(H, reagents.total_volume*0.75, CHEM_TOUCH) // most of it gets on the skin + reagents.trans_to_mob(H, reagents.total_volume*0.25, CHEM_BLOOD) // some gets in the wound + user.visible_message(span("notice", "\The [user] bandages \a [W.desc] on [M]'s [affecting.name] with a rag, tying it in place."), \ + span("notice", "You bandage \a [W.desc] on [M]'s [affecting.name] with a rag, tying it in place.")) + W.bandage() + qdel(src) // the rag is used up, it'll be all bloody and useless after + break // we can only do one at a time + else if(reagents.total_volume) + if(user.zone_sel.selecting == "mouth" && !(M.wear_mask && M.wear_mask.item_flags & AIRTIGHT)) + user.do_attack_animation(src) + user.visible_message( + span("danger","\The [user] smothers [target] with [src]!"), + span("warning","You smother [target] with [src]!"), + "You hear some struggling and muffled cries of surprise." + ) - //it's inhaled, so... maybe CHEM_BLOOD doesn't make a whole lot of sense but it's the best we can do for now - //^HA HA HA - reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_BREATHE) - update_name() - else - wipe_down(target, user) - return + //it's inhaled, so... maybe CHEM_BLOOD doesn't make a whole lot of sense but it's the best we can do for now + //^HA HA HA + reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_BREATHE) + update_name() + else + wipe_down(target, user) + return return ..() diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index 06ceb6a4350..12c60d235c0 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -51,30 +51,32 @@ // Reagent information for process(), consider moving this to a controller along // with cycle information under 'mechanical concerns' at some point. var/global/list/toxic_reagents = list( - "anti_toxin" = -2, - "toxin" = 2, - "hydrazine" = 2.5, - "acetone" = 1, - "sacid" = 1.5, - "hclacid" = 1.5, - "pacid" = 3, - "plantbgone" = 3, - "cryoxadone" = -3, - "radium" = 2 + "anti_toxin" = -2, + "toxin" = 2, + "hydrazine" = 2.5, + "acetone" = 1, + "sacid" = 1.5, + "hclacid" = 1.5, + "pacid" = 3, + "plantbgone" = 3, + "cryoxadone" = -3, + "radium" = 2, + "raskara_dust" = 2.5 ) var/global/list/nutrient_reagents = list( - "milk" = 0.1, - "beer" = 0.25, - "phosphorus" = 0.1, - "sugar" = 0.1, - "sodawater" = 0.1, - "ammonia" = 1, - "diethylamine" = 2, - "nutriment" = 1, - "adminordrazine" = 1, - "eznutrient" = 1, - "robustharvest" = 1, - "left4zed" = 1 + "milk" = 0.1, + "beer" = 0.25, + "phosphorus" = 0.1, + "sugar" = 0.1, + "sodawater" = 0.1, + "ammonia" = 1, + "diethylamine" = 2, + "nutriment" = 1, + "adminordrazine" = 1, + "eznutrient" = 1, + "robustharvest" = 1, + "left4zed" = 1, + "monoammoniumphosphate" = 1 ) var/global/list/weedkiller_reagents = list( "hydrazine" = -4, diff --git a/code/modules/item_worth/reagents.dm b/code/modules/item_worth/reagents.dm index 72135b96bf0..78031030006 100644 --- a/code/modules/item_worth/reagents.dm +++ b/code/modules/item_worth/reagents.dm @@ -558,9 +558,15 @@ /datum/reagent/arithrazine value = 2.7 -/datum/reagent/spaceacillin +/datum/reagent/deltamivir value = 2.5 +/datum/reagent/thetamycin + value = 2.5 + +/datum/reagent/coughsyrup + value = 1.5 + /datum/reagent/sterilizine value = 2.2 diff --git a/code/modules/makeshift/makeshift_reagents.dm b/code/modules/makeshift/makeshift_reagents.dm new file mode 100644 index 00000000000..b497e421cac --- /dev/null +++ b/code/modules/makeshift/makeshift_reagents.dm @@ -0,0 +1,255 @@ +/obj/structure/chemkit + name = "makeshift workstation" + icon = 'icons/obj/makeshift_workstation.dmi' + icon_state = "workstation" + desc = "It's a makeshift workstation for grinding, chopping, and heating." + density = 1 + + anchored = 1 + throwpass = 1 + + var/obj/item/device/analyzer/analyzer + var/transfer_out = 0 + var/phase_filter + + var/list/forbidden = list(/obj/item/weapon/reagent_containers/inhaler, /obj/item/weapon/reagent_containers/hypospray, /obj/item/weapon/reagent_containers/glass, /obj/item/weapon/extinguisher) + // duplicate from blender code, since it's not really worth a define. also, it has fewer things. + var/list/sheet_reagents = list( //have a number of reagents which is a factor of REAGENTS_PER_SHEET (default 20) unless you like decimals + /obj/item/stack/material/iron = list("iron"), + /obj/item/stack/material/uranium = list("uranium"), + /obj/item/stack/material/phoron = list("phoron"), + /obj/item/stack/material/gold = list("gold"), + /obj/item/stack/material/silver = list("silver"), + /obj/item/stack/material/steel = list("iron", "carbon"), + /obj/item/stack/material/sandstone = list("silicon", "acetone"), + /obj/item/stack/material/glass = list("silicate"), + ) // removed borosilicate glass, platinum, and plasteel, too tough. just steal a grinder if you need it + +/obj/structure/chemkit/Initialize() + . = ..() + create_reagents(180) + +/obj/structure/chemkit/examine(mob/user) + . = ..() + if(analyzer) + to_chat(user, span("notice", "The analyzer displays that the temperature is [round(reagents.get_temperature() - T0C,0.1)]C.")) + +/obj/structure/chemkit/verb/phase_filter() + set name = "Set Phase Filter" + set category = "Object" + set src in view(1) + if(use_check_and_message(usr)) + return 0 + phase_filter = input("Which phase do you want to filter?", "Phase Filter", null) as null|anything in list("solid", "liquid", "gas", "none") + if(phase_filter) + to_chat(usr, span("notice", "You switch to a [phase_filter] filter.")) + if(phase_filter == "none") + phase_filter = FALSE + +/obj/structure/chemkit/verb/eject_contents() + set name = "Remove Contents" + set category = "Object" + set src in view(1) + if (use_check_and_message(usr)) + return + for(var/atom/movable/A in contents) + if(A == analyzer) + continue + A.forceMove(loc) + +/obj/structure/chemkit/attack_hand(mob/user) + transfer_out = !transfer_out + to_chat(user, span("notice", "You are now [transfer_out ? "removing from" : "adding to"] \the [src].")) + +/obj/structure/chemkit/proc/heat_item(obj/item/weapon/W, mob/user) + var/joules = 0 + if(istype(W, /obj/item/weapon/flame)) + joules = 1000 // 1 kJ per match, and we're assuming lighters give as much per use + else if(W.iswelder()) + joules = 10000 // we'll just have it be ten times stronger + else if(istype(W, /obj/item/device/assembly/igniter)) + joules = 5000 // half as strong as a welder; this thing has to set off bombs and such + else + joules = 500 // we're assuming it's some kind of novelty toy like lunea's gloves, etc; not exactly a match but it still works + reagents.add_thermal_energy(joules) + user.visible_message(span("warning", "[user] holds \the [W] up to \the [src]!"), span("notice", "You use \the [W] to heat \the [src]'s contents."), span("notice", "You hear something sizzle.")) + user.setClickCooldown(joules/5000) // two seconds for welder, 1/5 second for matches but they run out + +/obj/structure/chemkit/proc/trans_item(obj/item/I, mob/user) + if(transfer_out) + var/amt = 0 + switch(phase_filter) + if("solid") + amt = reagents.trans_ids_to(I.reagents, reagents.get_ids_by_phase(SOLID), reagents.get_free_space()) + if("liquid") + amt = reagents.trans_ids_to(I.reagents, reagents.get_ids_by_phase(LIQUID), reagents.get_free_space()) + if("gas") + amt = reagents.trans_ids_to(I.reagents, reagents.get_ids_by_phase(GAS), reagents.get_free_space()) + else + amt = reagents.trans_to_holder(I.reagents, reagents.get_free_space()) + if(amt) + to_chat(user, span("notice", "You fill \the [I] with [amt] units from \the [src].")) + else if(I.reagents && I.reagents.total_volume) + var/amt = I.reagents.trans_to_holder(reagents, I.reagents.total_volume) // just pour it if you can + to_chat(user, span("notice", "You pour [amt] units from \the [I] into \the [src].")) + +/obj/structure/chemkit/proc/smash_sheet(obj/item/stack/stack, mob/user) + if(!istype(stack)) + return + var/list/sheet_components = sheet_reagents[stack.type] + var/amount_to_take = max(0,min(stack.amount,round(reagents.get_free_space()/REAGENTS_PER_SHEET))) + if(!amount_to_take) + return + stack.use(amount_to_take) + if(islist(sheet_components)) + amount_to_take = (amount_to_take/(sheet_components.len)) + for(var/n in sheet_components) + reagents.add_reagent(n, (amount_to_take*REAGENTS_PER_SHEET)*rand(6,8)/10) + else + reagents.add_reagent(sheet_components, (amount_to_take*REAGENTS_PER_SHEET)*rand(6,8)/10) // 60% to 80% efficiency when crushing sheets + to_chat(user, span("notice", "You [pick("crush","smash","grind")] [stack] into a fine powder.")) + return + +/obj/structure/chemkit/proc/smash(obj/item/I, mob/user) + if(sheet_reagents[I.type]) + smash_sheet(I, user) + return + to_chat(user, span("notice", "You [pick("crush","smash","grind")] [I] into a fine [pick("paste","powder","pulp")].")) + I.reagents.trans_to_holder(reagents, I.reagents.total_volume, rand(7, 10)/10) // 70% to 100% from smashing, since it's pretty thorough + qdel(I) + +/obj/structure/chemkit/proc/chop(obj/item/I, mob/user) + to_chat(user, span("notice", "You [pick("chop","cut","slice")] [I] into [pick("small","tiny")] [pick("pieces","chunks","bits","slices")].")) + I.reagents.trans_to_holder(reagents, I.reagents.total_volume, rand(4, 8)/10) // 40% to 80% from chopping, since it's not very efficient + qdel(I) + +/obj/structure/chemkit/proc/dismantle() + new /obj/structure/table(loc) + new /obj/item/weapon/reagent_containers/glass/beaker/bowl(loc) + if(analyzer) + analyzer.forceMove(loc) + analyzer = null + qdel(src) + +/obj/structure/chemkit/attackby(obj/item/weapon/W, mob/user) + if(W.iscrowbar()) + dismantle() + return + if(!istype(W, /obj/item/weapon/reagent_containers/food/snacks) && W.is_open_container()) + trans_item(W, user) + return + if(isflamesource(W)) + heat_item(W, user) + return + if(istype(W) && W.force >= 5 && !has_edge(W) && LAZYLEN(contents - analyzer)) + var/obj/item/smashed = pick(contents - analyzer) + if(!smashed.reagents && !sheet_reagents[smashed.type]) + return // should never happen anyway, but still + to_chat(user, span("notice", "You begin to [pick("crush","smash","grind")] [smashed].")) + if(!do_after(user, 15 SECONDS)) + return + smash(smashed, user) + return + if(has_edge(W) && LAZYLEN(contents - analyzer)) + var/obj/item/chopped = pick(contents - analyzer) + if(!chopped.reagents) + return + if(!do_after(user, 5 SECONDS)) + return + chop(chopped, user) + return + if(!analyzer && istype(W, /obj/item/device/analyzer)) + user.drop_from_inventory(W) + analyzer = W + W.forceMove(src) + return + if(!is_type_in_list(W, forbidden) && (W.w_class <= 3.0) && (W.reagents || sheet_reagents[W.type])) + user.drop_from_inventory(W) + W.forceMove(src) + return + . = ..() + +/* Makeshift Still */ +/obj/structure/distillery + name = "makeshift still" + icon = 'icons/obj/makeshift_workstation.dmi' + icon_state = "distillery-empty" + desc = "It's a makeshift still for purifying alcohol." + density = 1 + + anchored = 1 + + // we don't have it as an opencontainer because it's handled directly + + var/transfer_out = FALSE + var/obj/item/weapon/weldingtool/welder + +/obj/structure/distillery/proc/dismantle() + var/obj/structure/reagent_dispensers/keg/keg = new (loc) + if (src.reagents && src.reagents.total_volume) + src.reagents.trans_to_holder(keg.reagents, src.reagents.total_volume) + new /obj/item/stack/rods(get_turf(src), 3) + if(welder) + welder.forceMove(loc) + welder = null + qdel(src) + +/obj/structure/distillery/proc/trans_item(obj/item/weapon/W, mob/user) + if(transfer_out) + if(!reagents.total_volume) + to_chat(user, span("notice", "\The [src] is empty.")) + return + var/amt = reagents.trans_to_holder(W.reagents, reagents.total_volume) + to_chat(user, span("notice", "You fill \the [W] with [amt] units from \the [src].")) + return + else + if(!W.reagents || !W.reagents.total_volume) + to_chat(user, span("notice", "\The [W] is empty.")) + return + var/amt = min(10, W.reagents.total_volume) + W.reagents.trans_to_holder(src.reagents, amt) // just pour it if you can + to_chat(user, span("notice", "You pour [amt] units from \the [W] into \the [src].")) + return + +/obj/structure/distillery/proc/distill() + if(!reagents || !reagents.total_volume) // can't distill nothing + return + for(var/datum/reagent/R in src.reagents.reagent_list) + if(!istype(R, /datum/reagent/alcohol)) + return + var/datum/reagent/alcohol/AR = R + reagents.add_reagent("water", (1-(AR.strength/100))*AR.volume) + if(istype(AR, /datum/reagent/alcohol/ethanol)) + reagents.add_reagent("ethanol", (AR.strength/100)*AR.volume) + if(istype(AR, /datum/reagent/alcohol/butanol)) + reagents.add_reagent("butanol", (AR.strength/100)*AR.volume) + reagents.remove_reagent(AR.id, AR.volume) + src.icon_state = "distillery-off" + +/obj/structure/distillery/attackby(obj/item/weapon/W, mob/user) + if(W.iscrowbar()) + dismantle() + return + if(!welder && istype(W, /obj/item/weapon/weldingtool)) + user.drop_from_inventory(W) + src.welder = W + W.forceMove(src) + icon_state = "distillery-off" + return + if(!istype(W, /obj/item/weapon/reagent_containers/food/snacks) && W.is_open_container()) + trans_item(W, user) + return + if(W.isscrewdriver()) + transfer_out = !transfer_out + to_chat(user, span("notice", "You [transfer_out ? "open" : "close"] the spigot on the keg, ready to [transfer_out ? "remove" : "add"] reagents.")) + return + if(isflamesource(W) && istype(welder)) + to_chat(user, span("notice", "You light \the [src] and begin the distillation process.")) + addtimer(CALLBACK(src, .proc/distill), 60 SECONDS) + src.icon_state = "distillery-active" + return + . = ..() + +/obj/structure/distillery/Initialize() + . = ..() + create_reagents(1000) // same as a keg diff --git a/code/modules/materials/material_sheets.dm b/code/modules/materials/material_sheets.dm index 33e6a5f22b8..0fdc729aa96 100644 --- a/code/modules/materials/material_sheets.dm +++ b/code/modules/materials/material_sheets.dm @@ -190,6 +190,17 @@ icon_has_variants = TRUE drop_sound = 'sound/items/drop/clothing.ogg' +/obj/item/stack/material/cloth/attackby(obj/item/I, mob/user) + if(is_sharp(I)) + user.visible_message("\The [user] begins cutting up [src] with [I].", "You begin cutting up [src] with [I].") + if(do_after(user, 20)) // takes less time than bedsheets, a second per rag produced on average + to_chat(user, "You cut [src] into pieces!") + for(var/i in 1 to rand(1,3)) // average of 2 per + new /obj/item/weapon/reagent_containers/glass/rag(get_turf(src)) + use(1) + return + ..() + /obj/item/stack/material/cardboard name = "cardboard" icon_state = "sheet-card" diff --git a/code/modules/mob/living/bot/medbot.dm b/code/modules/mob/living/bot/medbot.dm index e6ac674e0c0..b44995a0906 100644 --- a/code/modules/mob/living/bot/medbot.dm +++ b/code/modules/mob/living/bot/medbot.dm @@ -25,7 +25,7 @@ var/treatment_oxy = "tricordrazine" var/treatment_fire = "tricordrazine" var/treatment_tox = "tricordrazine" - var/treatment_virus = "spaceacillin" + var/treatment_virus = "deltamivir" var/treatment_emag = "toxin" var/declare_treatment = 0 //When attempting to treat a patient, should it notify everyone wearing medhuds? diff --git a/code/modules/mob/mob_grab_specials.dm b/code/modules/mob/mob_grab_specials.dm index af37bf5aec6..491462e8d5e 100644 --- a/code/modules/mob/mob_grab_specials.dm +++ b/code/modules/mob/mob_grab_specials.dm @@ -33,7 +33,7 @@ to_chat(user, "[H] has an unhealthy skin discoloration.") bad = 1 if(H.getOxyLoss() >= 20) - to_chat(user, "[H]'s skin is unusaly pale.") + to_chat(user, "[H]'s skin is unusually pale.") bad = 1 if(E.status & ORGAN_DEAD) to_chat(user, "[E] is decaying!") diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index 7a1dce36257..b99a218b3cb 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -178,7 +178,7 @@ /obj/item/organ/proc/handle_germ_effects() //** Handle the effects of infections - var/antibiotics = owner.reagents.get_reagent_amount("spaceacillin") + var/antibiotics = owner.reagents.get_reagent_amount("thetamycin") if (germ_level > 0 && germ_level < INFECTION_LEVEL_ONE/2 && prob(30)) germ_level-- @@ -239,7 +239,7 @@ //Germs /obj/item/organ/proc/handle_antibiotics() - var/antibiotics = owner.reagents.get_reagent_amount("spaceacillin") + var/antibiotics = owner.reagents.get_reagent_amount("thetamycin") if (!germ_level || antibiotics < 5) return diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 8318ecef7ab..4db61c088f7 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -514,7 +514,7 @@ the actual time is dependent on RNG. INFECTION_LEVEL_ONE below this germ level nothing happens, and the infection doesn't grow INFECTION_LEVEL_TWO above this germ level the infection will start to spread to internal and adjacent organs INFECTION_LEVEL_THREE above this germ level the player will take additional toxin damage per second, and will die in minutes without - antitox. also, above this germ level you will need to overdose on spaceacillin to reduce the germ_level. + antitox. also, above this germ level you will need to overdose on thetamycin to reduce the germ_level. Note that amputating the affected organ does in fact remove the infection from the player's body. */ @@ -535,7 +535,7 @@ Note that amputating the affected organ does in fact remove the infection from t handle_germ_effects() /obj/item/organ/external/proc/handle_germ_sync() - var/antibiotics = owner.reagents.get_reagent_amount("spaceacillin") + var/antibiotics = owner.reagents.get_reagent_amount("thetamycin") for(var/datum/wound/W in wounds) //Open wounds can become infected if (owner.germ_level > W.germ_level && W.infection_check()) @@ -553,7 +553,7 @@ Note that amputating the affected organ does in fact remove the infection from t if(germ_level < INFECTION_LEVEL_TWO) return ..() - var/antibiotics = owner.reagents.get_reagent_amount("spaceacillin") + var/antibiotics = owner.reagents.get_reagent_amount("thetamycin") if(germ_level >= INFECTION_LEVEL_TWO) //spread the infection to internal organs diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm index 10c6e7f6cb3..f4ef04280e3 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -23,6 +23,7 @@ parent_organ = "chest" robotic_name = "gas exchange system" robotic_sprite = "heart-prosthetic" + var/rescued = FALSE // whether or not a collapsed lung has been rescued with a syringe /obj/item/organ/lungs/process() ..() @@ -34,7 +35,7 @@ if(prob(5)) owner.emote("cough") //Respiratory tract infection - if(is_bruised()) + if(is_broken() || (is_bruised() && !rescued)) // a thoracostomy can only help with a collapsed lung, not a mangled one if(prob(2)) spawn owner.emote("me", 1, "coughs up blood!") owner.drip(10) @@ -42,6 +43,12 @@ spawn owner.emote("me", 1, "gasps for air!") owner.losebreath += 15 + if(is_bruised() && rescued) + if(prob(4)) + to_chat(owner, span("warning", "It feels hard to breathe...")) + if (owner.losebreath < 5) + owner.losebreath = min(owner.losebreath + 1, 5) // it's still not good, but it's much better than an untreated collapsed lung + /obj/item/organ/kidneys name = "kidneys" icon_state = "kidneys" diff --git a/code/modules/organs/wound.dm b/code/modules/organs/wound.dm index 02b73a0bc8a..05f2bafcfb2 100644 --- a/code/modules/organs/wound.dm +++ b/code/modules/organs/wound.dm @@ -52,178 +52,178 @@ var/tmp/list/desc_list = list() var/tmp/list/damage_list = list() - New(var/damage) +/datum/wound/New(var/damage) - created = world.time + created = world.time - // reading from a list("stage" = damage) is pretty difficult, so build two separate - // lists from them instead - for(var/V in stages) - desc_list += V - damage_list += stages[V] + // reading from a list("stage" = damage) is pretty difficult, so build two separate + // lists from them instead + for(var/V in stages) + desc_list += V + damage_list += stages[V] - src.damage = damage + src.damage = damage - // initialize with the appropriate stage - src.init_stage(damage) + // initialize with the appropriate stage + src.init_stage(damage) - bleed_timer += damage + bleed_timer += damage // returns 1 if there's a next stage, 0 otherwise - proc/init_stage(var/initial_damage) - current_stage = stages.len +/datum/wound/proc/init_stage(var/initial_damage) + current_stage = stages.len - while(src.current_stage > 1 && src.damage_list[current_stage-1] <= initial_damage / src.amount) - src.current_stage-- + while(src.current_stage > 1 && src.damage_list[current_stage-1] <= initial_damage / src.amount) + src.current_stage-- - src.min_damage = damage_list[current_stage] - src.desc = desc_list[current_stage] + src.min_damage = damage_list[current_stage] + src.desc = desc_list[current_stage] // the amount of damage per wound - proc/wound_damage() - return src.damage / src.amount +/datum/wound/proc/wound_damage() + return src.damage / src.amount - proc/can_autoheal() - if(src.wound_damage() <= autoheal_cutoff) - return 1 - - return is_treated() - - // checks whether the wound has been appropriately treated - proc/is_treated() - switch(damage_type) - if(BRUISE, CUT, PIERCE) - return bandaged - if(BURN) - return salved - - // Checks whether other other can be merged into src. - proc/can_merge(var/datum/wound/other) - if (other.type != src.type) return 0 - if (other.current_stage != src.current_stage) return 0 - if (other.damage_type != src.damage_type) return 0 - if (!(other.can_autoheal()) != !(src.can_autoheal())) return 0 - if (!(other.bandaged) != !(src.bandaged)) return 0 - if (!(other.clamped) != !(src.clamped)) return 0 - if (!(other.salved) != !(src.salved)) return 0 - if (!(other.disinfected) != !(src.disinfected)) return 0 - //if (other.germ_level != src.germ_level) return 0 +/datum/wound/proc/can_autoheal() + if(src.wound_damage() <= autoheal_cutoff) return 1 - proc/merge_wound(var/datum/wound/other) - src.damage += other.damage - src.amount += other.amount - src.bleed_timer += other.bleed_timer - src.germ_level = max(src.germ_level, other.germ_level) - src.created = max(src.created, other.created) //take the newer created time + return is_treated() - // checks if wound is considered open for external infections - // untreated cuts (and bleeding bruises) and burns are possibly infectable, chance higher if wound is bigger - proc/infection_check() - if (damage < 10) //small cuts, tiny bruises, and moderate burns shouldn't be infectable. - return 0 - if (is_treated() && damage < 25) //anything less than a flesh wound (or equivalent) isn't infectable if treated properly - return 0 - if (disinfected) - germ_level = 0 //reset this, just in case - return 0 +// checks whether the wound has been appropriately treated +/datum/wound/proc/is_treated() + switch(damage_type) + if(BRUISE, CUT, PIERCE) + return bandaged + if(BURN) + return salved - if (damage_type == BRUISE && !bleeding()) //bruises only infectable if bleeding - return 0 +// Checks whether other other can be merged into src. +/datum/wound/proc/can_merge(var/datum/wound/other) + if (other.type != src.type) return 0 + if (other.current_stage != src.current_stage) return 0 + if (other.damage_type != src.damage_type) return 0 + if (!(other.can_autoheal()) != !(src.can_autoheal())) return 0 + if (!(other.bandaged) != !(src.bandaged)) return 0 + if (!(other.clamped) != !(src.clamped)) return 0 + if (!(other.salved) != !(src.salved)) return 0 + if (!(other.disinfected) != !(src.disinfected)) return 0 + //if (other.germ_level != src.germ_level) return 0 + return 1 - var/dam_coef = round(damage/10) - switch (damage_type) - if (BRUISE) - return prob(dam_coef*5) - if (BURN) - return prob(dam_coef*10) - if (CUT) - return prob(dam_coef*20) +/datum/wound/proc/merge_wound(var/datum/wound/other) + src.damage += other.damage + src.amount += other.amount + src.bleed_timer += other.bleed_timer + src.germ_level = (src.germ_level + other.germ_level)/2 + src.created = max(src.created, other.created) //take the newer created time +// checks if wound is considered open for external infections +// untreated cuts (and bleeding bruises) and burns are possibly infectable, chance higher if wound is bigger +/datum/wound/proc/infection_check() + if (damage < 10) //small cuts, tiny bruises, and moderate burns shouldn't be infectable. + return 0 + if (is_treated() && damage < 25) //anything less than a flesh wound (or equivalent) isn't infectable if treated properly + return 0 + if (disinfected) + germ_level = 0 //reset this, just in case return 0 - proc/bandage() - bandaged = 1 + if (damage_type == BRUISE && !bleeding()) //bruises only infectable if bleeding + return 0 - proc/salve() - salved = 1 + var/dam_coef = round(damage/10) + switch (damage_type) + if (BRUISE) + return prob(dam_coef*5) + if (BURN) + return prob(dam_coef*10) + if (CUT) + return prob(dam_coef*20) - proc/disinfect() - disinfected = 1 + return 0 - // heal the given amount of damage, and if the given amount of damage was more - // than what needed to be healed, return how much heal was left - // set @heals_internal to also heal internal organ damage - proc/heal_damage(amount, heals_internal = 0) - if(src.internal && !heals_internal) - // heal nothing - return amount +/datum/wound/proc/bandage() + bandaged = 1 - var/healed_damage = min(src.damage, amount) - amount -= healed_damage - src.damage -= healed_damage +/datum/wound/proc/salve() + salved = 1 - while(src.wound_damage() < damage_list[current_stage] && current_stage < src.desc_list.len) - current_stage++ - desc = desc_list[current_stage] - src.min_damage = damage_list[current_stage] +/datum/wound/proc/disinfect() + disinfected = 1 - //Internal wounds should vanish if damage reaches 0 - if (internal && damage <= 0) - //Wounds can't clean themselves up. Instead we'll set vars that will make the organ delete us - internal = 0 - bleed_timer = 0 - damage = 0 - created = -6000//Wounds only disappear after 10 mins - //These vars will cause this wound to be removed and GC'd next tick - - - // return amount of healing still leftover, can be used for other wounds +// heal the given amount of damage, and if the given amount of damage was more +// than what needed to be healed, return how much heal was left +// set @heals_internal to also heal internal organ damage +/datum/wound/proc/heal_damage(amount, heals_internal = 0) + if(src.internal && !heals_internal) + // heal nothing return amount + var/healed_damage = min(src.damage, amount) + amount -= healed_damage + src.damage -= healed_damage + + while(src.wound_damage() < damage_list[current_stage] && current_stage < src.desc_list.len) + current_stage++ + desc = desc_list[current_stage] + src.min_damage = damage_list[current_stage] + + //Internal wounds should vanish if damage reaches 0 + if (internal && damage <= 0) + //Wounds can't clean themselves up. Instead we'll set vars that will make the organ delete us + internal = 0 + bleed_timer = 0 + damage = 0 + created = -6000//Wounds only disappear after 10 mins + //These vars will cause this wound to be removed and GC'd next tick + + + // return amount of healing still leftover, can be used for other wounds + return amount + // opens the wound again - proc/open_wound(damage) - src.damage += damage - bleed_timer += damage +/datum/wound/proc/open_wound(damage) + src.damage += damage + bleed_timer += damage - while(src.current_stage > 1 && src.damage_list[current_stage-1] <= src.damage / src.amount) - src.current_stage-- + while(src.current_stage > 1 && src.damage_list[current_stage-1] <= src.damage / src.amount) + src.current_stage-- - src.desc = desc_list[current_stage] - src.min_damage = damage_list[current_stage] + src.desc = desc_list[current_stage] + src.min_damage = damage_list[current_stage] - // returns whether this wound can absorb the given amount of damage. - // this will prevent large amounts of damage being trapped in less severe wound types - proc/can_worsen(damage_type, damage) - if (src.damage_type != damage_type) - return 0 //incompatible damage types +// returns whether this wound can absorb the given amount of damage. +// this will prevent large amounts of damage being trapped in less severe wound types +/datum/wound/proc/can_worsen(damage_type, damage) + if (src.damage_type != damage_type) + return 0 //incompatible damage types - if (src.amount > 1) - return 0 + if (src.amount > 1) + return 0 - //with 1.5*, a shallow cut will be able to carry at most 30 damage, - //37.5 for a deep cut - //52.5 for a flesh wound, etc. - var/max_wound_damage = 1.5*src.damage_list[1] - if (src.damage + damage > max_wound_damage) - return 0 + //with 1.5*, a shallow cut will be able to carry at most 30 damage, + //37.5 for a deep cut + //52.5 for a flesh wound, etc. + var/max_wound_damage = 1.5*src.damage_list[1] + if (src.damage + damage > max_wound_damage) + return 0 - return 1 + return 1 - proc/bleeding() - if (src.internal) - return 0 // internal wounds don't bleed in the sense of this function +/datum/wound/proc/bleeding() + if (src.internal) + return 0 // internal wounds don't bleed in the sense of this function - if (current_stage > max_bleeding_stage) - return 0 + if (current_stage > max_bleeding_stage) + return 0 - if (bandaged||clamped) - return 0 + if (bandaged||clamped) + return 0 - if (bleed_timer <= 0 && wound_damage() <= bleed_threshold) - return 0 //Bleed timer has run out. Once a wound is big enough though, you'll need a bandage to stop it + if (bleed_timer <= 0 && wound_damage() <= bleed_threshold) + return 0 //Bleed timer has run out. Once a wound is big enough though, you'll need a bandage to stop it - return 1 + return 1 /** WOUND DEFINITIONS **/ diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index 8b45b6580f0..d395b38cc74 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -6,6 +6,8 @@ var/maximum_volume = 100 var/atom/my_atom = null + var/temperature = T20C + /datum/reagents/New(var/max = 100, atom/A = null) ..() maximum_volume = max @@ -248,6 +250,12 @@ . += "[current.id] ([current.volume])" return english_list(., "EMPTY", "", ", ", ", ") +/datum/reagents/proc/get_ids_by_phase(var/phase) // this proc will probably need to be changed if you can have one reagent in multiple states at the same time + . = list() + for(var/datum/reagent/current in reagent_list) + if(phase == current.reagent_state) + . += current.id + /* Holder-to-holder and similar procs */ /datum/reagents/proc/remove_any(var/amount = 1) // Removes up to [amount] of reagents from [src]. Returns actual amount removed. @@ -351,6 +359,16 @@ else if (istype(target, /datum/reagents)) return F.trans_to_holder(target, amount) +/datum/reagents/proc/trans_ids_to(var/target, var/list/ids, var/amount = 1) // amount is distributed equally over all reagents + if(!target) + return + if(!LAZYLEN(ids)) // it's always going to be defined but, you know, good practice and all + return + var/amounteach = amount / ids.len + . = 0 + for(var/id in ids) + . += src.trans_id_to(target, id, amounteach) + // When applying reagents to an atom externally, touch() is called to trigger any on-touch effects of the reagent. // This does not handle transferring reagents to things. // For example, splashing someone with water will get them wet and extinguish them if they are on fire, diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 2bf87a5a999..26e74f8952d 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -1,11 +1,5 @@ -#define SOLID 1 -#define LIQUID 2 -#define GAS 3 - // Update asset_cache.dm if you change these. #define BOTTLE_SPRITES list("bottle-1", "bottle-2", "bottle-3", "bottle-4") //list of available bottle sprites -#define REAGENTS_PER_SHEET 20 -#define MAX_PILL_SPRITE 20 //max icon state of the pill sprites ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -553,14 +547,19 @@ var/obj/item/weapon/reagent_containers/beaker = null var/limit = 10 var/list/holdingitems = list() - var/list/sheet_reagents = list( - /obj/item/stack/material/iron = "iron", - /obj/item/stack/material/uranium = "uranium", - /obj/item/stack/material/phoron = "phoron", - /obj/item/stack/material/platinum = "platinum", - /obj/item/stack/material/gold = "gold", - /obj/item/stack/material/silver = "silver", - /obj/item/stack/material/mhydrogen = "hydrazine" //doesn't really make much sense but thank Bay + var/list/sheet_reagents = list( //have a number of reagents which is a factor of REAGENTS_PER_SHEET (default 20) unless you like decimals + /obj/item/stack/material/iron = list("iron"), + /obj/item/stack/material/uranium = list("uranium"), + /obj/item/stack/material/phoron = list("phoron"), + /obj/item/stack/material/gold = list("gold"), + /obj/item/stack/material/silver = list("silver"), + /obj/item/stack/material/platinum = list("platinum"), + /obj/item/stack/material/mhydrogen = list("hydrazine"), // i guess + /obj/item/stack/material/steel = list("iron", "carbon"), + /obj/item/stack/material/plasteel = list("iron", "iron", "carbon", "carbon", "platinum"), //8 iron, 8 carbon, 4 platinum, + /obj/item/stack/material/sandstone = list("silicon", "acetone"), + /obj/item/stack/material/glass = list("silicate"), + /obj/item/stack/material/glass/phoronglass = list("platinum", "silicate", "silicate", "silicate"), //5 platinum, 15 silicate, ) /obj/machinery/reagentgrinder/Initialize() @@ -753,12 +752,18 @@ if(sheet_reagents[O.type]) var/obj/item/stack/stack = O if(istype(stack)) + var/list/sheet_components = sheet_reagents[stack.type] var/amount_to_take = max(0,min(stack.amount,round(remaining_volume/REAGENTS_PER_SHEET))) if(amount_to_take) stack.use(amount_to_take) if(QDELETED(stack)) holdingitems -= stack - beaker.reagents.add_reagent(sheet_reagents[stack.type], (amount_to_take*REAGENTS_PER_SHEET)) + if(islist(sheet_components)) + amount_to_take = (amount_to_take/(sheet_components.len)) + for(var/i in sheet_components) + beaker.reagents.add_reagent(i, (amount_to_take*REAGENTS_PER_SHEET)) + else + beaker.reagents.add_reagent(sheet_components, (amount_to_take*REAGENTS_PER_SHEET)) continue if(O.reagents) @@ -769,8 +774,6 @@ if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) break -#undef REAGENTS_PER_SHEET - /obj/machinery/reagentgrinder/MouseDrop_T(mob/living/carbon/human/target as mob, mob/user as mob) if (!istype(target) || target.buckled || get_dist(user, src) > 1 || get_dist(user, target) > 1 || user.stat || istype(user, /mob/living/silicon/ai)) return diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index acbf6777eb7..2915dc46a31 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -32,10 +32,12 @@ var/default_temperature = T0C + 20 //This is it's default spawning temperature, if none is provided. var/thermal_energy = 0 //Internal value, should never change. - var/specific_heat = -1 //The higher, the more difficult it is to change its difficult. 0 or lower values indicate that the specific heat has yet to be assigned. + var/specific_heat = -1 //The higher, the more difficult it is to change its temperature. 0 or lower values indicate that the specific heat has yet to be assigned. var/fallback_specific_heat = -1 //Setting this value above 0 will set the specific heat to this value only if the system could not find an appropriate specific heat to assign using the recipe system. //Never ever ever ever change this value for datum/reagent. This should only be used for massive, yet specific things like drinks or food where it is infeasible to assign a specific heat value. + var/germ_adjust = 0 // for makeshift bandages/disinfectant + /datum/reagent/proc/initialize_data(var/newdata) // Called when the reagent is created. if(!isnull(newdata)) data = newdata diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm index 990394cd6e5..d1481b96f93 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm @@ -186,6 +186,8 @@ specific_heat = 1.541 + germ_adjust = 0.05 // i mean, i guess you could try... + /datum/reagent/water/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) if(!istype(M)) return diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm index d9f09ae7ac4..954f79c3f70 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm @@ -118,6 +118,9 @@ var/flammability_divisor = 10 + var/distillation_point = T0C + 100 + germ_adjust = 20 // as good as sterilizine, but only if you have pure ethanol. or rubbing alcohol if we get that eventually + unaffected_species = IS_MACHINE taste_description = "mistakes" @@ -140,6 +143,8 @@ L.adjust_fire_stacks((amount / (flammability_divisor || 1)) * (strength / 100)) /datum/reagent/alcohol/affect_blood(mob/living/carbon/M, alien, removed) + if(prob(10*(strength/100))) + to_chat(M, span("danger","Your insides are burning!")) // it would be quite painful to inject alcohol or otherwise get it in your bloodstream directly, without metabolising any M.adjustToxLoss(removed * blood_to_ingest_scale * (strength/100) ) affect_ingest(M,alien,removed * blood_to_ingest_scale) return @@ -177,6 +182,8 @@ fallback_specific_heat = 0.605 + distillation_point = T0C + 78.37 + /datum/reagent/alcohol/ethanol/affect_ingest(var/mob/living/carbon/human/M, var/alien, var/removed) if(!istype(M)) return @@ -229,6 +236,8 @@ fallback_specific_heat = 0.549 + distillation_point = T0C + 117.7 + /datum/reagent/alcohol/butanol/affect_ingest(var/mob/living/carbon/human/M, var/alien, var/removed) if(!istype(M)) return @@ -268,6 +277,13 @@ remove_self(volume) return +/datum/reagent/hydrazine/affect_breathe(var/mob/living/carbon/human/H, var/alien, var/removed) + . = ..() + if(istype(H)) + var/obj/item/organ/L = H.internal_organs_by_name["lungs"] + if(istype(L)) + L.take_damage(removed * 0.5) + /datum/reagent/iron name = "Iron" id = "iron" diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Drugs.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Drugs.dm new file mode 100644 index 00000000000..cc319a57b65 --- /dev/null +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Drugs.dm @@ -0,0 +1,326 @@ +/datum/reagent/space_drugs + name = "Space drugs" + id = "space_drugs" + description = "Mercury Monolithium Sucrose, or space drugs, is a potent relaxant commonly found in Ambrosia plants. Lasts twice as long when inhaled." + reagent_state = LIQUID + color = "#60A584" + metabolism = REM * 0.5 + overdose = REAGENTS_OVERDOSE + taste_description = "bitterness" + taste_mult = 0.4 + breathe_met = REM * 0.5 * 0.5 + +/datum/reagent/space_drugs/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + var/mob/living/carbon/human/H = M + if(istype(H) && (H.species.flags & NO_BLOOD)) + return + + var/power = (dose + volume)/2 //Larger the dose and volume, the more affected you are by the chemical. + + M.druggy = max(M.druggy, power) + M.add_chemical_effect(CE_PAINKILLER, 5 + round(power,5)) + + if(power > 5) + M.drowsyness = min(20,max(M.drowsyness,power - 5)) + + if(power > 10) + var/nutrition_percent = M.nutrition/M.max_nutrition + M.adjustNutritionLoss(power*removed*nutrition_percent) + var/hunger_strength = 1 - nutrition_percent + if(prob( round(hunger_strength*removed) )) + to_chat(M,span("notice",pick("You could really go for some munchies.","You feel the need to eat more.","You crave chips for some reason.","You kind of really want pizza."))) + + if(power > 20) + var/probmod = 5 + (power-20) + if(prob(probmod) && isturf(M.loc) && !istype(M.loc, /turf/space) && M.canmove && !M.restrained()) + step(M, pick(cardinal)) + + if(prob(3)) + var/list/current_emotes = list("smile" = 0, "giggle" = 5, "moan" = 10, "yawn" = 15, "laugh" = 20, "drool" = 20, "twitch" = 20) + var/list/usable_emotes + for(var/key in current_emotes) + var/value = current_emotes[key] + if(value >= power) + usable_emotes += key + + M.emote(pick(usable_emotes)) + +/datum/reagent/space_drugs/overdose(var/mob/living/carbon/M, var/alien, var/removed = 0, var/scale = 1) + . = ..() + M.hallucination = max(M.hallucination, 30 * scale) + +/datum/reagent/serotrotium + name = "Serotrotium" + id = "serotrotium" + description = "A chemical compound that promotes concentrated production of the serotonin neurotransmitter in humans." + reagent_state = LIQUID + color = "#202040" + metabolism = REM * 0.25 + overdose = REAGENTS_OVERDOSE + taste_description = "bitterness" + fallback_specific_heat = 1.2 + +/datum/reagent/serotrotium/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + var/mob/living/carbon/human/H = M + if(istype(H) && (H.species.flags & NO_BLOOD)) + return + if(prob(7)) + M.emote(pick("twitch", "drool", "moan", "gasp")) + return + +/datum/reagent/cryptobiolin + name = "Cryptobiolin" + id = "cryptobiolin" + description = "Cryptobiolin causes confusion and dizzyness." + reagent_state = LIQUID + color = "#000055" + metabolism = REM * 0.5 + overdose = REAGENTS_OVERDOSE + taste_description = "sourness" + +/datum/reagent/cryptobiolin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + var/mob/living/carbon/human/H = M + if(istype(H) && (H.species.flags & NO_BLOOD)) + return + M.dizziness = max(150, M.dizziness)//Setting dizziness directly works as long as the make_dizzy proc is called after to spawn the process + M.make_dizzy(4) + + M.confused = max(M.confused, 20) + +/datum/reagent/impedrezene + name = "Impedrezene" + id = "impedrezene" + description = "Impedrezene is a narcotic that impedes one's ability by slowing down the higher brain cell functions." + reagent_state = LIQUID + color = "#C8A5DC" + overdose = REAGENTS_OVERDOSE + taste_description = "numbness" + +/datum/reagent/impedrezene/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + M.jitteriness = max(M.jitteriness - 5, 0) + if(prob(80)) + M.adjustBrainLoss(3 * removed) + if(prob(50)) + M.drowsyness = max(M.drowsyness, 3) + if(prob(10)) + M.emote("drool") + +/datum/reagent/mindbreaker + name = "Mindbreaker Toxin" + id = "mindbreaker" + description = "A powerful hallucinogen, it can cause fatal effects in users." + reagent_state = LIQUID + color = "#B31008" + metabolism = REM * 0.25 + overdose = REAGENTS_OVERDOSE + taste_description = "sourness" + +/datum/reagent/mindbreaker/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + M.hallucination = max(M.hallucination, 100) + +/datum/reagent/psilocybin + name = "Psilocybin" + id = "psilocybin" + description = "A strong psycotropic derived from certain species of mushroom." + color = "#E700E7" + overdose = REAGENTS_OVERDOSE + metabolism = REM * 0.5 + taste_description = "mushroom" + fallback_specific_heat = 1.2 + +/datum/reagent/psilocybin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + var/mob/living/carbon/human/H = M + if(istype(H) && (H.species.flags & NO_BLOOD)) + return + M.druggy = max(M.druggy, 30) + if(dose < 1) + M.apply_effect(3, STUTTER) + M.make_dizzy(5) + if(prob(5)) + M.emote(pick("twitch", "giggle")) + else if(dose < 2) + M.apply_effect(3, STUTTER) + M.make_jittery(5) + M.dizziness = max(150, M.dizziness) + M.make_dizzy(5) + M.druggy = max(M.druggy, 35) + if(prob(10)) + M.emote(pick("twitch", "giggle")) + else + M.apply_effect(3, STUTTER) + M.make_jittery(10) + M.dizziness = max(150, M.dizziness) + M.make_dizzy(10) + M.druggy = max(M.druggy, 40) + if(prob(15)) + M.emote(pick("twitch", "giggle")) + +/datum/reagent/raskara_dust + name = "Raskara Dust" + id = "raskara_dust" + description = "A powdery narcotic found in the gang-ridden slums of Biesel and Sol. Known for it's relaxing poperties that cause trance-like states when inhaled. Casual users tend to snort or inhale, while hardcore users inject." + reagent_state = SOLID + color = "#AABBAA" + overdose = REAGENTS_OVERDOSE + taste_description = "baking soda" + metabolism = REM * 0.1 + breathe_met = REM * 0.2 + ingest_met = REM * 0.3 + +/datum/reagent/raskara_dust/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + M.add_chemical_effect(CE_PAINKILLER, 10) + M.drowsyness += 1 * removed + +/datum/reagent/raskara_dust/affect_breathe(var/mob/living/carbon/M, var/alien, var/removed) + M.add_chemical_effect(CE_PAINKILLER, 25) + M.drowsyness += 2 * removed + if(prob(5)) + M.emote("cough") + +/datum/reagent/raskara_dust/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + M.add_chemical_effect(CE_PAINKILLER, 50) + M.drowsyness += 3 * removed + if(prob(5)) + M.emote("twitch") + +/datum/reagent/night_juice + name = "Nightlife" + id = "night_juice" + description = "A liquid narcotic commonly used by the more wealthy drug-abusing citizens of the Eridani Federation. Works as a potent stimulant that causes extreme awakefulness. Lethal in high doses." + reagent_state = LIQUID + color = "#FFFF44" + taste_description = "salted sugar" + metabolism = REM * 0.2 + breathe_met = REM * 0.1 + breathe_mul = 0.5 + ingest_mul = 0.125 + var/special_counter = 0 + +/datum/reagent/night_juice/affect_blood(var/mob/living/carbon/human/M, var/alien, var/removed) + if(!istype(M)) + return + + special_counter += (volume/10)*removed + + M.make_jittery(5 + special_counter) + M.drowsyness = max(0,M.drowsyness - (1 + special_counter*0.1)) + if(special_counter > 5) + M.add_chemical_effect(CE_SPEEDBOOST, 1) + M.apply_effect(1 + special_counter*0.25, STUTTER) + M.druggy = max(M.druggy, special_counter*0.25) + M.hallucination = max(M.hallucination, special_counter*5 - 100) + M.make_jittery(special_counter) + if(prob(special_counter)) + M.emote("twitch") + var/obj/item/organ/H = M.internal_organs_by_name["heart"] + H.take_damage(special_counter * removed * 0.025) + +/datum/reagent/guwan_painkillers + name = "Tremble" + id = "guwan_painkillers" + description = "An ancient tribal Unathi narcotic based on the outer gel layer of the seeds of a poisonous flower. The chemical itself acts as a very potent omni-healer when consumed, however as the chemical metabolizes, it causes immense and cripling pain." + reagent_state = LIQUID + color = "#FFFF44" + taste_description = "sunflower seeds" + metabolism = REM * 0.25 + overdose = 10 + fallback_specific_heat = 1 + +/datum/reagent/guwan_painkillers/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + affect_ingest(M,alien,removed*0.5) + +/datum/reagent/guwan_painkillers/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + if(dose > 5 && volume <= 3) + M.adjustHalLoss(removed*300) //So oxycodone can't be used with it. + else + if(dose > 5) + M.add_chemical_effect(CE_PAINKILLER, 50) + M.heal_organ_damage(5 * removed,5 * removed) + else + M.add_chemical_effect(CE_PAINKILLER, 10) + M.heal_organ_damage(2 * removed,2 * removed) + +/datum/reagent/toxin/stimm //Homemade Hyperzine, ported from Polaris + name = "Stimm" + id = "stimm" + description = "A homemade stimulant with some serious side-effects." + taste_description = "sweetness" + taste_mult = 1.8 + color = "#d0583a" + var/datum/modifier = null + metabolism = REM * 3 + overdose = 10 + strength = 3 + +/datum/reagent/toxin/stimm/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + if(alien == IS_TAJARA) + removed *= 1.25 + ..() + if(prob(15)) + M.emote(pick("twitch", "blink_r", "shiver")) + if(prob(5)) // average of 6 brute every 20 seconds. + M.visible_message("[M] shudders violently.", "You shudder uncontrollably, it hurts.") + M.take_organ_damage(6 * removed, 0) + M.add_chemical_effect(CE_SPEEDBOOST, 1) + if (!modifier) + modifier = M.add_modifier(/datum/modifier/stimulant, MODIFIER_REAGENT, src, _strength = 1, override = MODIFIER_OVERRIDE_STRENGTHEN) + +/datum/reagent/toxin/stimm/Destroy() + QDEL_NULL(modifier) + return ..() + +/datum/reagent/toxin/lean + name = "Lean" + id = "lean" + description = "A mixture of cough syrup, space-up, and sugar." + taste_description = "sickly-sweet soda" + taste_mult = 1.5 + color = "#600060" + metabolism = REM // twice as fast as space drugs + overdose = 10 + strength = 1.5 // makes up for it with slight suffocation damage + + glass_name = "glass of purple drank" + glass_desc = "Bottoms up." + +/datum/reagent/toxin/lean/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + M.hallucination = max(M.hallucination, 40) + M.add_chemical_effect(CE_PAINKILLER, 40) // basically like paracetamol, but a bit worse + // doesn't make you vomit, though + if(prob(7)) + M.emote(pick("twitch", "drool", "moan", "giggle")) + M.adjustOxyLoss(0.5 * removed) // poor man's lexorin + if(M.losebreath < 15) + M.losebreath++ + if(prob(50)) + M.drowsyness = max(M.drowsyness, 3) + +/datum/reagent/toxin/krok/ + name = "Krok Juice" + id = "krok" + description = "An Eridanian variant of krokodil, known for causing prosthetic malfunctions." + strength = 3 + metabolism = REM + overdose = 15 + +/datum/reagent/toxin/krok/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + var/mob/living/carbon/human/H = M + if(!istype(H)) + return + var/robo = FALSE + for (var/obj/item/organ/external/E in H.organs) + if(!E || !(E.status & ORGAN_ROBOT)) + continue + robo = TRUE + if(prob(80)) // 20% chance of making robot limbs malfuction + continue + switch(E.body_part) + if(HAND_LEFT, ARM_LEFT) + H.drop_l_hand() + if(HAND_RIGHT, ARM_RIGHT) + H.drop_r_hand() + if(robo) + H.add_chemical_effect(CE_PAINKILLER, 80) // equivalent to tramadol + var/obj/item/organ/eyes/eyes = H.internal_organs_by_name[H.species.vision_organ || "eyes"] + if(eyes.status & ORGAN_ROBOT) + M.hallucination = max(M.hallucination, 40) \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm index dff44519846..cd77a642e1c 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm @@ -374,6 +374,7 @@ nutriment_factor = 10 color = "#FFFF00" taste_description = "honey" + germ_adjust = 5 /datum/reagent/nutriment/flour name = "flour" @@ -794,7 +795,8 @@ /datum/reagent/drink/carrotjuice/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() - M.reagents.add_reagent("imidazoline", removed * 0.2) + if(alien != IS_DIONA) + M.reagents.add_reagent("imidazoline", removed * 0.2) /datum/reagent/drink/grapejuice name = "Grape Juice" @@ -830,6 +832,11 @@ glass_name = "glass of lime juice" glass_desc = "A glass of sweet-sour lime juice" +/datum/reagent/drink/limejuice/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + ..() + if(alien != IS_DIONA) + M.adjustToxLoss(-0.5 * removed) + /datum/reagent/drink/orangejuice name = "Orange juice" id = "orangejuice" @@ -881,6 +888,10 @@ glass_name = "glass of tomato juice" glass_desc = "Are you sure this is tomato juice?" +/datum/reagent/drink/tomatojuice/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + ..() + M.heal_organ_damage(0, 0.1 * removed) + /datum/reagent/drink/watermelonjuice name = "Watermelon Juice" id = "watermelonjuice" @@ -925,6 +936,8 @@ glass_name = "glass of garlic juice" glass_desc = "Who would even drink juice from garlic?" + germ_adjust = 7.5 // has allicin, an antibiotic + /datum/reagent/drink/juice/onion name = "Onion Juice" id = "onionjuice" @@ -993,6 +1006,7 @@ /datum/reagent/drink/milk/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() if(alien != IS_DIONA) + M.heal_organ_damage(0.1 * removed, 0) holder.remove_reagent("capsaicin", 10 * removed) /datum/reagent/drink/milk/cream @@ -1066,6 +1080,21 @@ var/last_taste_time = -100 +/datum/reagent/drink/tea/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + ..() + M.adjustToxLoss(-0.1 * removed) + + +/datum/reagent/drink/tea/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + if(alien == IS_DIONA) + if(last_taste_time + 800 < world.time) // Not to spam message + to_chat(M, "Your body withers as you feel slight pain throughout.") + last_taste_time = world.time + metabolism = REM * 0.33 + M.adjustToxLoss(1.5 * removed) + else + M.adjustToxLoss(-0.1 * removed) + /datum/reagent/drink/tea/icetea name = "Iced Tea" id = "icetea" @@ -1136,6 +1165,10 @@ glass_desc = "A nice and refrshing beverage while you are reading." glass_center_of_mass = list("x"=15, "y"=9) +/datum/reagent/drink/coffee/soy_latte/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + ..() + M.heal_organ_damage(0.1 * removed, 0) + /datum/reagent/drink/coffee/cafe_latte name = "Cafe Latte" id = "cafe_latte" @@ -1148,6 +1181,10 @@ glass_desc = "A nice, strong and refreshing beverage while you are reading." glass_center_of_mass = list("x"=15, "y"=9) +/datum/reagent/drink/coffee/cafe_latte/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + ..() + M.heal_organ_damage(0.1 * removed, 0) + /datum/reagent/drink/coffee/espresso name = "Espresso" id = "espresso" @@ -1208,6 +1245,10 @@ glass_desc = "A nice, strong and refreshing beverage while you are reading." glass_center_of_mass = list("x"=15, "y"=9) +/datum/reagent/drink/coffee/latte/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + ..() + M.heal_organ_damage(0.1 * removed, 0) + /datum/reagent/drink/coffee/cappuccino name = "Cappuccino" id = "cappuccino" @@ -1566,6 +1607,7 @@ if(alien != IS_DIONA) M.adjustOxyLoss(-4 * removed) M.heal_organ_damage(2 * removed, 2 * removed) + M.adjustToxLoss(-2 * removed) if(M.dizziness) M.dizziness = max(0, M.dizziness - 15) if(M.confused) diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm index dacd2a708ed..066be10843c 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm @@ -303,13 +303,17 @@ color = "#C8A5DC" overdose = 60 scannable = 1 - metabolism = 0.02 + metabolism = REM/10 // same as before when in blood, 0.02 units per tick + ingest_met = REM * 2 // .4 units per tick + breathe_met = REM * 4 // .8 units per tick taste_description = "sickness" metabolism_min = 0.005 breathe_mul = 0 /datum/reagent/paracetamol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) M.add_chemical_effect(CE_PAINKILLER, 50) + if(M.bodytemperature > 310) + M.bodytemperature = max(310, M.bodytemperature - (40 * TEMPERATURE_DAMAGE_COEFFICIENT)) // reduces fever /datum/reagent/paracetamol/overdose(var/mob/living/carbon/M, var/alien) ..() @@ -323,7 +327,9 @@ color = "#CB68FC" overdose = 30 scannable = 1 - metabolism = 0.02 + metabolism = REM/10 // same as before when in blood, 0.02 units per tick + ingest_met = REM * 2 // .4 units per tick + breathe_met = REM * 4 // .8 units per tick taste_description = "sourness" metabolism_min = 0.005 breathe_mul = 0 @@ -342,7 +348,9 @@ reagent_state = LIQUID color = "#800080" overdose = 20 - metabolism = 0.02 + metabolism = REM/10 // same as before when in blood, 0.02 units per tick + ingest_met = REM * 2 // .4 units per tick + breathe_met = REM * 4 // .8 units per tick taste_description = "bitterness" metabolism_min = 0.005 breathe_mul = 0 @@ -595,16 +603,102 @@ if(prob(60)) M.take_organ_damage(4 * removed, 0) -/datum/reagent/spaceacillin - name = "Spaceacillin" - id = "spaceacillin" - description = "An all-purpose antiviral agent." +/datum/reagent/deltamivir + name = "Deltamivir" + id = "deltamivir" + description = "An interferon-delta type III antiviral agent." reagent_state = LIQUID color = "#C1C1C1" - metabolism = REM * 0.05 + metabolism = REM * 0.05 // only performs its effects while in blood + ingest_met = REM // .2 units per tick + breathe_met = REM * 2 // .4 units per tick + // touch is slow overdose = REAGENTS_OVERDOSE scannable = 1 taste_description = "bitterness" + fallback_specific_heat = 0.605 // assuming it's ethanol-based + +/datum/reagent/deltamivir/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + if(prob(dose/4)) + to_chat(M, span("warning", "Your muscles feel sore...")) + M.adjustHalLoss(15) // side effects of antivirals include fever, muscle aches and fatigue + if(prob(dose/4)) + to_chat(M, span("warning", "You feel tired...")) + M.drowsyness += 1 + if(prob(dose/4)) + to_chat(M, span("warning", "You feel cold and lethargic...")) + M.bodytemperature = max(M.bodytemperature, min(310+5, M.bodytemperature+5)) + +/datum/reagent/thetamycin + name = "Thetamycin" + id = "thetamycin" + description = "A theta-lactam antibiotic, effective against wound and organ bacterial infections." + reagent_state = LIQUID + color = "#41C141" + metabolism = REM * 0.05 // only performs its effects while in blood + ingest_met = REM // .2 units per tick + breathe_met = REM * 2 // .4 units per tick + // touch is slow + overdose = REAGENTS_OVERDOSE + scannable = 1 + taste_description = "bitter gauze" + fallback_specific_heat = 0.605 // assuming it's ethanol-based + +/datum/reagent/thetamycin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + if(prob(dose/4)) + to_chat(M, span("warning", "You feel sick to your stomach...")) // side effects of antibiotics + if(prob(25)) + M.vomit() + +/datum/reagent/coughsyrup + name = "Cough Syrup" + id = "coughsyrup" + description = "A chemical that is used as a cough suppressant in low doses, and in higher doses it can be recreationally (ab)used." + scannable = 1 + reagent_state = LIQUID + taste_description = "bitterness" + color = "#402060" + fallback_specific_heat = 0.605 // assuming it's ethanol-based + metabolism = REM * 0.05 // only performs its effects while in blood + ingest_met = REM // .2 units per tick + breathe_met = REM * 2 // .4 units per tick + // touch is slow + + glass_name = "glass of cough syrup" + glass_desc = "You'd better not." + +/datum/reagent/coughsyrup/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + M.add_chemical_effect(CE_PAINKILLER, 5) // very slight painkiller effect at low doses + +/datum/reagent/coughsyrup/overdose(var/mob/living/carbon/M, var/alien, var/removed) // effects based loosely on DXM + M.hallucination = max(M.hallucination, 40) + M.add_chemical_effect(CE_PAINKILLER, 20) // stronger at higher doses + if(prob(dose)) + M.vomit() + if(prob(7)) + M.emote(pick("twitch", "drool", "moan", "giggle")) + if(prob(7)) + M.adjustBrainLoss(3 * removed) // not great for your brain + if(prob(50)) + M.drowsyness = max(M.drowsyness, 3) + +/datum/reagent/antihistamine + name = "Diphenhydramine" + id = "diphenhydramine" + description = "A common antihistamine medication, also known as Benadryl. Known for causing drowsiness in larger doses." + scannable = 1 + reagent_state = LIQUID + taste_description = "bitterness" + metabolism = REM * 0.05 // only performs its effects while in blood + ingest_met = REM // .2 units per tick + breathe_met = REM * 2 // .4 units per tick + // touch is slow + ingest_mul = 1 + fallback_specific_heat = 0.605 // assuming it's ethanol-based + +/datum/reagent/antihistamine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + if(prob(dose/2)) + M.drowsyness += 2 /datum/reagent/sterilizine name = "Sterilizine" @@ -614,6 +708,7 @@ color = "#C8A5DC" touch_met = 5 taste_description = "bitterness" + germ_adjust = 20 /datum/reagent/sterilizine/affect_touch(var/mob/living/carbon/M, var/alien, var/removed) M.germ_level -= min(removed*20, M.germ_level) @@ -624,7 +719,7 @@ var/mob/living/carbon/human/H = M for (var/obj/item/organ/external/E in H.organs)//For each external bodypart for (var/datum/wound/W in E.wounds)//We check each wound on that bodypart - W.germ_level -= min(removed*20, W.germ_level)//Clean the wound a bit. Note we only clean wounds on the part, not the part itself. + W.germ_level -= min(removed*germ_adjust, W.germ_level)//Clean the wound a bit. Note we only clean wounds on the part, not the part itself. if (W.germ_level <= 0) W.disinfected = 1//The wound becomes disinfected if fully cleaned @@ -642,7 +737,7 @@ /datum/reagent/leporazine name = "Leporazine" id = "leporazine" - description = "Leporazine can be use to stabilize an individuals body temperature." + description = "Leporazine can be use to stabilize an individual's body temperature." reagent_state = LIQUID color = "#C8A5DC" overdose = REAGENTS_OVERDOSE @@ -1395,4 +1490,4 @@ color = "#AA8866" metabolism = 0.5 * REM taste_description = "sourness" - fallback_specific_heat = 1 \ No newline at end of file + fallback_specific_heat = 1 diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm index ed989a02185..165d5651c0b 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm @@ -325,6 +325,7 @@ color = "#A5F0EE" touch_met = REM * 10 taste_description = "sourness" + germ_adjust = 10 /datum/reagent/space_cleaner/touch_obj(var/obj/O) O.clean_blood() @@ -377,6 +378,11 @@ /datum/reagent/space_cleaner/affect_ingest(var/mob/living/carbon/human/M, var/alien, var/removed) M.adjustToxLoss(2 * removed) +/datum/reagent/space_cleaner/affect_blood(var/mob/living/carbon/human/M, var/alien, var/removed) + if(prob(10)) + to_chat(M, span("danger","Your insides are burning!")) + M.adjustToxLoss(3 * removed) + /datum/reagent/lube name = "Space Lube" id = "lube" diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm index d9283ecf58b..57cb94db99c 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm @@ -507,137 +507,6 @@ fallback_specific_heat = 1.2 -/* Drugs */ - -/datum/reagent/space_drugs - name = "Space drugs" - id = "space_drugs" - description = "An illegal chemical compound used as drug. Lasts twice as long when inhaled." - reagent_state = LIQUID - color = "#60A584" - metabolism = REM * 0.5 - overdose = REAGENTS_OVERDOSE - taste_description = "bitterness" - taste_mult = 0.4 - breathe_mul = 2 - breathe_met = REM * 0.5 * 0.5 - -/datum/reagent/space_drugs/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - var/mob/living/carbon/human/H = M - if(istype(H) && (H.species.flags & NO_BLOOD)) - return - M.druggy = max(M.druggy, 15) - if(prob(10) && isturf(M.loc) && !istype(M.loc, /turf/space) && M.canmove && !M.restrained()) - step(M, pick(cardinal)) - if(prob(7)) - M.emote(pick("twitch", "drool", "moan", "giggle")) - -/datum/reagent/serotrotium - name = "Serotrotium" - id = "serotrotium" - description = "A chemical compound that promotes concentrated production of the serotonin neurotransmitter in humans." - reagent_state = LIQUID - color = "#202040" - metabolism = REM * 0.25 - overdose = REAGENTS_OVERDOSE - taste_description = "bitterness" - fallback_specific_heat = 1.2 - -/datum/reagent/serotrotium/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - var/mob/living/carbon/human/H = M - if(istype(H) && (H.species.flags & NO_BLOOD)) - return - if(prob(7)) - M.emote(pick("twitch", "drool", "moan", "gasp")) - return - -/datum/reagent/cryptobiolin - name = "Cryptobiolin" - id = "cryptobiolin" - description = "Cryptobiolin causes confusion and dizzyness." - reagent_state = LIQUID - color = "#000055" - metabolism = REM * 0.5 - overdose = REAGENTS_OVERDOSE - taste_description = "sourness" - -/datum/reagent/cryptobiolin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - var/mob/living/carbon/human/H = M - if(istype(H) && (H.species.flags & NO_BLOOD)) - return - M.dizziness = max(150, M.dizziness)//Setting dizziness directly works as long as the make_dizzy proc is called after to spawn the process - M.make_dizzy(4) - - M.confused = max(M.confused, 20) - -/datum/reagent/impedrezene - name = "Impedrezene" - id = "impedrezene" - description = "Impedrezene is a narcotic that impedes one's ability by slowing down the higher brain cell functions." - reagent_state = LIQUID - color = "#C8A5DC" - overdose = REAGENTS_OVERDOSE - taste_description = "numbness" - -/datum/reagent/impedrezene/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - M.jitteriness = max(M.jitteriness - 5, 0) - if(prob(80)) - M.adjustBrainLoss(3 * removed) - if(prob(50)) - M.drowsyness = max(M.drowsyness, 3) - if(prob(10)) - M.emote("drool") - -/datum/reagent/mindbreaker - name = "Mindbreaker Toxin" - id = "mindbreaker" - description = "A powerful hallucinogen, it can cause fatal effects in users." - reagent_state = LIQUID - color = "#B31008" - metabolism = REM * 0.25 - overdose = REAGENTS_OVERDOSE - taste_description = "sourness" - -/datum/reagent/mindbreaker/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - M.hallucination = max(M.hallucination, 100) - -/datum/reagent/psilocybin - name = "Psilocybin" - id = "psilocybin" - description = "A strong psycotropic derived from certain species of mushroom." - color = "#E700E7" - overdose = REAGENTS_OVERDOSE - metabolism = REM * 0.5 - taste_description = "mushroom" - fallback_specific_heat = 1.2 - -/datum/reagent/psilocybin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - var/mob/living/carbon/human/H = M - if(istype(H) && (H.species.flags & NO_BLOOD)) - return - M.druggy = max(M.druggy, 30) - if(dose < 1) - M.apply_effect(3, STUTTER) - M.make_dizzy(5) - if(prob(5)) - M.emote(pick("twitch", "giggle")) - else if(dose < 2) - M.apply_effect(3, STUTTER) - M.make_jittery(5) - M.dizziness = max(150, M.dizziness) - M.make_dizzy(5) - M.druggy = max(M.druggy, 35) - if(prob(10)) - M.emote(pick("twitch", "giggle")) - else - M.apply_effect(3, STUTTER) - M.make_jittery(10) - M.dizziness = max(150, M.dizziness) - M.make_dizzy(10) - M.druggy = max(M.druggy, 40) - if(prob(15)) - M.emote(pick("twitch", "giggle")) - /* Transformations */ /datum/reagent/slimetoxin @@ -811,7 +680,7 @@ if(istype(M,/mob/living/carbon/human)) var/mob/living/carbon/human/H = M - if(H.reagents.has_reagent("spaceacillin", 15)) + if(H.reagents.has_reagent("deltamivir", 15)) return if(!H.internal_organs_by_name["zombie"] && prob(15)) @@ -832,4 +701,4 @@ H.set_species("Zombie") H.revive() playsound(H.loc, 'sound/hallucinations/far_noise.ogg', 50, 1) - to_chat(H,"You return back to life as the undead, all that is left is the hunger to consume the living and the will to spread the infection.") + to_chat(H,"You return back to life as the undead, all that is left is the hunger to consume the living and the will to spread the infection.") \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index 94aea729a2d..82921ddeab7 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -363,13 +363,26 @@ catalysts = list("phoron" = 5) result_amount = 2 -/datum/chemical_reaction/spaceacillin - name = "Spaceacillin" - id = "spaceacillin" - result = "spaceacillin" - required_reagents = list("cryptobiolin" = 1, "inaprovaline" = 1) +/datum/chemical_reaction/deltamivir + name = "Deltamivir" + id = "deltamivir" + result = "deltamivir" + required_reagents = list("cryptobiolin" = 1, "tricordrazine" = 1) result_amount = 2 +/datum/chemical_reaction/thetamycin + name = "Thetamycin" + id = "thetamycin" + result = "thetamycin" + required_reagents = list("cryptobiolin" = 1, "anti_toxin" = 1) + result_amount = 2 + +/datum/chemical_reaction/antihistamine + name = "Diphenhydramine" + id = "diphenhydramine" + result = "diphenhydramine" + required_reagents = list("cryptobiolin" = 1, "inaprovaline" = 1) + /datum/chemical_reaction/imidazoline name = "imidazoline" id = "imidazoline" @@ -487,8 +500,25 @@ name = "Glycerol" id = "glycerol" result = "glycerol" - required_reagents = list("cornoil" = 3, "sacid" = 1) - result_amount = 1 + required_reagents = list("triglyceride" = 1, "ethanol" = 2) // transesterification of triglycerides into butanol and glycerol + catalysts = list("sacid" = 5) // using acid as a catalyst + result_amount = 3 //each triglyceride has 3 glycerin chains. + +/datum/chemical_reaction/glycerol/butanol + name = "Glycerol" + id = "glycerol-butane" + result = "glycerol" + required_reagents = list("triglyceride" = 1, "butanol" = 2) + +/datum/chemical_reaction/glycerol/on_reaction(var/datum/reagents/holder, var/created_volume) + holder.add_reagent("acetone", 2 * created_volume / 3) // closest we can get to biofuel, sorry + +/datum/chemical_reaction/glucose + name = "Glucose" + id = "glucose" + result = "glucose" + required_reagents = list("nutriment" = 5) // thank you, Gottlieb Kirchhoff + catalysts = list("sacid" = 5 )//starch into sugar with sulfuric acid catalyst /datum/chemical_reaction/sodiumchloride name = "Sodium Chloride" @@ -605,6 +635,13 @@ required_reagents = list("atropine" = 1, "phoron" = 0.1, "inaprovaline" = 1 ) result_amount = 2 +/datum/chemical_reaction/coughsyrup + name = "Cough Syrup" + id = "coughsyrup" + result = "coughsyrup" + required_reagents = list("carbon" = 1, "ammonia" = 1, "water" = 1) + result_amount = 3 + //Mental Medication /datum/chemical_reaction/methylphenidate @@ -698,6 +735,45 @@ required_reagents = list("psilocybin" = 1, "moonshine" = 1) result_amount = 1 +/* Makeshift Chemicals and Drugs */ + +/datum/chemical_reaction/stimm + name = "Stimm" + id = "stimm" + result = "stimm" + required_reagents = list("fuel" = 1, "rewriter" = 5) + result_amount = 6 + +/datum/chemical_reaction/lean + name = "Lean" + id = "lean" + result = "lean" + required_reagents = list("space_up" = 2, "coughsyrup" = 2, "sugar" = 1) + result_amount = 5 + +/datum/chemical_reaction/krokjuice + name = "Krok Juice" + id = "krok" + result = "krok" + required_reagents = list("orangejuice" = 2, "fuel" = 1, "iron" = 1) + result_amount = 4 + +/datum/chemical_reaction/raskara_dust + name = "Raskara Dust" + id = "raskara_dust" + result = "raskara_dust" + required_reagents = list("monoammoniumphosphate" = 1, "cleaner" = 1, "sodiumchloride" = 2) // extinguisher, cleaner, salt + required_temperatures_min = list("monoammoniumphosphate" = 400, "cleaner" = 400, "sodiumchloride" = 400) // barely over boiling point of water + result_amount = 2 + +/datum/chemical_reaction/nightjuice + name = "Nightlife" + id = "night_juice" + result = "night_juice" + required_reagents = list("methylphenidate" = 1, "epinephrine" = 1, "synaptizine" = 1) + required_temperatures_min = list("methylphenidate" = T0C+300, "epinephrine" = T0C+300, "synaptizine" = T0C+300) + result_amount = 1 // doesn't make a lot + /* Solidification */ /datum/chemical_reaction/phoronsolidification @@ -1627,7 +1703,7 @@ name = "Garlic Sauce" id = "garlicsauce" result = "garlicsauce" - required_reagents = list("garlicjuice" = 1, "cornoil" = 1,) + required_reagents = list("garlicjuice" = 1, "cornoil" = 1) result_amount = 2 /datum/chemical_reaction/cheesewheel @@ -3218,4 +3294,4 @@ result = "adhomai_milk" required_reagents = list("fatshouter_milk" = 1) catalysts = list("enzyme" = 5) - result_amount = 1 \ No newline at end of file + result_amount = 1 diff --git a/code/modules/reagents/dispenser/cartridge_presets.dm b/code/modules/reagents/dispenser/cartridge_presets.dm index cf66fb2f0fa..84ada7442e4 100644 --- a/code/modules/reagents/dispenser/cartridge_presets.dm +++ b/code/modules/reagents/dispenser/cartridge_presets.dm @@ -94,7 +94,10 @@ bicaridine spawn_reagent = "bicaridine" hyperzine spawn_reagent = "hyperzine" rezadone spawn_reagent = "rezadone" - spaceacillin spawn_reagent = "spaceacillin" + deltamivir spawn_reagent = "deltamivir" + thetamycin spawn_reagent = "thetamycin" + coughsyrup spawn_reagent = "coughsyrup" + benadryl spawn_reagent = "diphenhydramine" ethylredox spawn_reagent = "ethylredoxrazine" sleeptox spawn_reagent = "stoxin" chloral spawn_reagent = "chloralhydrate" diff --git a/code/modules/reagents/dispenser/dispenser_presets.dm b/code/modules/reagents/dispenser/dispenser_presets.dm index 3d7f1af8500..4b74deee443 100644 --- a/code/modules/reagents/dispenser/dispenser_presets.dm +++ b/code/modules/reagents/dispenser/dispenser_presets.dm @@ -45,7 +45,10 @@ /obj/item/weapon/reagent_containers/chem_disp_cartridge/imidazoline, /obj/item/weapon/reagent_containers/chem_disp_cartridge/peridaxon, /obj/item/weapon/reagent_containers/chem_disp_cartridge/bicaridine, - /obj/item/weapon/reagent_containers/chem_disp_cartridge/spaceacillin, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/deltamivir, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/thetamycin, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/coughsyrup, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/benadryl, /obj/item/weapon/reagent_containers/chem_disp_cartridge/ethylredox, /obj/item/weapon/reagent_containers/chem_disp_cartridge/sleeptox, /obj/item/weapon/reagent_containers/chem_disp_cartridge/chloral, diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm index c5993db9066..2b11de19b9b 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghydro.dm @@ -13,14 +13,14 @@ var/charge_tick = 0 var/recharge_time = 5 //Time it takes for shots to recharge (in seconds) - var/list/reagent_ids = list("tricordrazine", "inaprovaline", "spaceacillin") + var/list/reagent_ids = list("tricordrazine", "inaprovaline", "deltamivir") var/list/reagent_volumes = list() var/list/reagent_names = list() center_of_mass = null /obj/item/weapon/reagent_containers/borghypo/medical - reagent_ids = list("bicaridine", "kelotane", "anti_toxin", "dexalin", "inaprovaline", "tramadol", "spaceacillin") + reagent_ids = list("bicaridine", "kelotane", "anti_toxin", "dexalin", "inaprovaline", "tramadol", "deltamivir", "thetamycin") /obj/item/weapon/reagent_containers/borghypo/rescue reagent_ids = list("tricordrazine", "inaprovaline", "tramadol") diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm index 9e358d207db..acfd566d08a 100644 --- a/code/modules/reagents/reagent_containers/food/drinks.dm +++ b/code/modules/reagents/reagent_containers/food/drinks.dm @@ -202,6 +202,45 @@ else icon_state = "water_cup_e" +/obj/item/weapon/reagent_containers/food/drinks/medcup + name = "medicine cup" + desc = "A plastic medicine cup. Like a shot glass for medicine." + icon = 'icons/obj/chemical.dmi' + icon_state = "medcup" + drop_sound = 'sound/items/drop/glass.ogg' + possible_transfer_amounts = null + volume = 15 + +/obj/item/weapon/reagent_containers/food/drinks/medcup/on_reagent_change() + update_icon() + +/obj/item/weapon/reagent_containers/food/drinks/medcup/pickup(mob/user) + ..() + update_icon() + +/obj/item/weapon/reagent_containers/food/drinks/medcup/dropped(mob/user) + ..() + update_icon() + +/obj/item/weapon/reagent_containers/food/drinks/medcup/update_icon() + cut_overlays() + + if(reagents.total_volume) + var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]25") + + var/percent = round((reagents.total_volume / volume) * 100) + switch(percent) // offset by about 12.5 so it seems more gradual + if(0 to 37) + filling.icon_state = "[icon_state]25" + if(38 to 62) + filling.icon_state = "[icon_state]50" + if(63 to 87) + filling.icon_state = "[icon_state]75" + if(87 to INFINITY) + filling.icon_state = "[icon_state]100" + + filling.color = reagents.get_color() + add_overlay(filling) //////////////////////////drinkingglass and shaker// //Note by Darem: This code handles the mixing of drinks. New drinks go in three places: In Chemistry-Reagents.dm (for the drink diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/reagents/reagent_containers/glass/bottle.dm index de289b9e6b4..1c313f91073 100644 --- a/code/modules/reagents/reagent_containers/glass/bottle.dm +++ b/code/modules/reagents/reagent_containers/glass/bottle.dm @@ -404,4 +404,15 @@ Initialize() . = ..() reagents.add_reagent("phoron_salt", 60) + update_icon() + +/obj/item/weapon/reagent_containers/glass/bottle/coughsyrup + name = "cough syrup bottle" + desc = "A small bottle of cough syrup. Don't take too much!" + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle-3" + + Initialize() + . = ..() + reagents.add_reagent("coughsyrup", 60) update_icon() \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 7e6f6d962b3..93ae8096e33 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -4,29 +4,36 @@ /obj/item/weapon/reagent_containers/hypospray name = "hypospray" - desc = "The DeForest Medical Corporation hypospray is a sterile, air-needle autoinjector for rapid administration of drugs to patients." + desc = "The DeForest Medical Corporation hypospray is a sterile, air-needle autoinjector for administration of drugs to patients." icon = 'icons/obj/syringe.dmi' item_state = "hypo" icon_state = "hypo" amount_per_transfer_from_this = 5 unacidable = 1 - volume = 30 + volume = 15 possible_transfer_amounts = null flags = OPENCONTAINER slot_flags = SLOT_BELT center_of_mass = null var/armorcheck = 1 + var/time = 3 SECONDS + +/obj/item/weapon/reagent_containers/hypospray/cmo + name = "premium hypospray" + desc = "The DeForest Medical Corporation premium hypospray is a cutting-edge, sterile, air-needle autoinjector for rapid administration of drugs to patients." + volume = 30 + time = 0 /obj/item/weapon/reagent_containers/hypospray/attack(var/mob/M, var/mob/user, target_zone) - . = ..() - var/mob/living/carbon/human/H = M if(istype(H)) user.visible_message("\The [user] is trying to inject \the [M] with \the [src]!","You are trying to inject \the [M] with \the [src].") + var/inj_time = time if(armorcheck && H.run_armor_check(target_zone,"melee",0,"Your armor slows down the injection!","Your armor slows down the injection!")) - if(!do_mob(user, M, 60)) - return 1 + inj_time += 6 SECONDS + if(!do_mob(user, M, inj_time)) + return 1 /obj/item/weapon/reagent_containers/hypospray/afterattack(var/mob/M, var/mob/user, proximity) @@ -65,17 +72,13 @@ flags = OPENCONTAINER amount_per_transfer_from_this = 5 volume = 5 - var/used = FALSE + time = 0 /obj/item/weapon/reagent_containers/hypospray/autoinjector/Initialize() . =..() icon_state = empty_state update_icon() -/obj/item/weapon/reagent_containers/hypospray/autoinjector/afterattack(var/mob/M, var/mob/user, proximity) - if(..()) - used = TRUE - /obj/item/weapon/reagent_containers/hypospray/autoinjector/attack(var/mob/M, var/mob/user, target_zone) if(is_open_container()) to_chat(user,"You must secure the reagents inside \the [src] before using it!") @@ -94,6 +97,14 @@ to_chat(user,"The reagents inside \the [src] are already secured.") return +/obj/item/weapon/reagent_containers/hypospray/autoinjector/attackby(obj/item/weapon/W, mob/user) + if(W.isscrewdriver() && !is_open_container()) + to_chat(user,"Using \the [W], you unsecure the autoinjector's lid.") // it locks shut after being secured + flags |= OPENCONTAINER + update_icon() + return + . = ..() + /obj/item/weapon/reagent_containers/hypospray/autoinjector/update_icon() if(reagents.total_volume > 0 && !is_open_container()) icon_state = initial(icon_state) @@ -102,10 +113,8 @@ /obj/item/weapon/reagent_containers/hypospray/autoinjector/examine(mob/user) ..(user) - if(reagents && reagents.reagent_list.len && !used) + if(reagents && reagents.reagent_list.len) to_chat(user, "It is currently loaded.") - else if(used) - to_chat(user, "It is spent.") else to_chat(user, "It is empty.") @@ -157,6 +166,7 @@ icon_state = "combat_hypo" volume = 20 armorcheck = 0 + time = 0 /obj/item/weapon/reagent_containers/hypospray/combat/Initialize() . = ..() diff --git a/code/modules/reagents/reagent_containers/inhaler.dm b/code/modules/reagents/reagent_containers/inhaler.dm index 06320401589..b255ce2a2e4 100644 --- a/code/modules/reagents/reagent_containers/inhaler.dm +++ b/code/modules/reagents/reagent_containers/inhaler.dm @@ -103,6 +103,14 @@ to_chat(user,"The reagents inside \the [src] are already secured.") return +/obj/item/weapon/reagent_containers/inhaler/attackby(obj/item/weapon/W, mob/user) + if(W.isscrewdriver() && !is_open_container()) + to_chat(user,"Using \the [W], you unsecure the inhaler's lid.") // it locks shut after being secured + flags |= OPENCONTAINER + update_icon() + return + . = ..() + /obj/item/weapon/reagent_containers/inhaler/update_icon() if(reagents.total_volume > 0 && !is_open_container()) icon_state = initial(icon_state) diff --git a/code/modules/reagents/reagent_containers/inhaler_advanced.dm b/code/modules/reagents/reagent_containers/inhaler_advanced.dm index 7fbdd932468..bc79e45bb45 100644 --- a/code/modules/reagents/reagent_containers/inhaler_advanced.dm +++ b/code/modules/reagents/reagent_containers/inhaler_advanced.dm @@ -3,7 +3,7 @@ /obj/item/weapon/reagent_containers/personal_inhaler_cartridge name = "small inhaler cartridge" - desc = "Fill this when chemicals and attach this to personal inhalers. Contains enough areosol for 15u of reagents. The container must be activated for aerosol reagents to mix for the use in inhalers." + desc = "Fill this when chemicals and attach this to personal inhalers. Contains enough aerosol for 15u of reagents. The container must be activated for aerosol reagents to mix for the use in inhalers." icon = 'icons/obj/syringe.dmi' item_state = "buildpipe" icon_state = "pi_cart_small" @@ -37,13 +37,20 @@ if(is_open_container()) if(reagents && reagents.reagent_list.len) to_chat(user,"With a quick twist of \the [src]'s lid, you secure the reagents inside.") - flags ^= OPENCONTAINER + flags &= ~OPENCONTAINER else to_chat(user,"You can't secure \the [src] without putting reagents in!") else to_chat(user,"The reagents inside \the [src] are already secured.") return +/obj/item/weapon/reagent_containers/personal_inhaler_cartridge/attackby(obj/item/weapon/W, mob/user) + if(W.isscrewdriver() && !is_open_container()) + to_chat(user,"Using \the [W], you unsecure the inhaler cartridge's lid.") // it locks shut after being secured + flags |= OPENCONTAINER + return + . = ..() + /obj/item/weapon/reagent_containers/personal_inhaler_cartridge/large name = "large inhaler cartridge" desc = "A large inhaler cartridge. It contains enough aerosol for 30 units of reagents. The container must be activated for aerosol to mix with reagents." diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 88cc6f7498b..cb7e3d095e3 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -270,4 +270,13 @@ /obj/item/weapon/reagent_containers/pill/rmt/Initialize() . = ..() - reagents.add_reagent("rmt", 15) \ No newline at end of file + reagents.add_reagent("rmt", 15) + +/obj/item/weapon/reagent_containers/pill/antihistamine + name = "antihistamine" + desc = "Contains diphenhydramine, also known as Benadryl. Helps with sneezing, can cause drowsiness." + icon_state = "pill19" + +/obj/item/weapon/reagent_containers/pill/antihistamine/Initialize() + . = ..() + reagents.add_reagent("diphenhydramine", 5) \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index d1f67c37714..44354bada2c 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -4,6 +4,7 @@ #define SYRINGE_DRAW 0 #define SYRINGE_INJECT 1 #define SYRINGE_BROKEN 2 +#define SYRINGE_CAPPED 3 /obj/item/weapon/reagent_containers/syringe name = "syringe" @@ -20,13 +21,66 @@ sharp = 1 noslice = 1 unacidable = 1 //glass - var/mode = SYRINGE_DRAW + var/mode = SYRINGE_CAPPED + var/used = FALSE + var/dirtiness = 0 + var/list/targets + var/list/datum/disease2/disease/viruses var/image/filling //holds a reference to the current filling overlay var/visible_name = "a syringe" var/time = 30 center_of_mass = null drop_sound = 'sound/items/drop/glass.ogg' +/obj/item/weapon/reagent_containers/syringe/Initialize() + . = ..() + update_icon() + +/obj/item/weapon/reagent_containers/syringe/Destroy() + LAZYCLEARLIST(viruses) + LAZYCLEARLIST(targets) + return ..() + +/obj/item/weapon/reagent_containers/syringe/process() // this only happens once it's used + if(prob(75)) // sorry, had to nerf this. + return + dirtiness = min(dirtiness + LAZYLEN(targets), 75) + if(dirtiness >= 75) + STOP_PROCESSING(SSprocessing, src) + return 1 + +/obj/item/weapon/reagent_containers/syringe/proc/infect_limb(var/obj/item/organ/external/eo) + eo.germ_level += dirtiness // only 75% of the way to an infection at max + +/obj/item/weapon/reagent_containers/syringe/proc/dirty(var/mob/living/carbon/human/target, var/obj/item/organ/external/eo) + LAZYINITLIST(targets) + + //Just once! + targets |= WEAKREF(target) + + //Grab any viruses they have + var/datum/disease2/disease/virus + if(LAZYLEN(target.virus2.len)) + LAZYINITLIST(viruses) + virus = pick(target.virus2.len) + viruses += virus.getcopy() + + //Dirtiness should be very low if you're the first injectee. If you're spam-injecting 4 people in a row around you though, + //This gives the last one a 30% chance of infection. + if(prob(dirtiness+(targets.len-1)*10)) + log_and_message_admins("[loc] infected [target]'s [eo.name] with \the [src].") + addtimer(CALLBACK(src, .proc/infect_limb), rand(5 MINUTES, 10 MINUTES)) + + //75% chance to spread a virus if we have one + if(LAZYLEN(viruses) && prob(75)) + var/newvir = pick(viruses - virus) + var/datum/disease2/disease/newvirus = viruses[newvir] + infect_virus2(target,newvirus.getcopy()) + + if(!used) + START_PROCESSING(SSprocessing, src) + used = TRUE + /obj/item/weapon/reagent_containers/syringe/on_reagent_change() update_icon() @@ -40,6 +94,9 @@ /obj/item/weapon/reagent_containers/syringe/attack_self(mob/user as mob) switch(mode) + if(SYRINGE_CAPPED) + mode = SYRINGE_DRAW + to_chat(user, span("notice", "You uncap the syringe.")) if(SYRINGE_DRAW) mode = SYRINGE_INJECT if(SYRINGE_INJECT) @@ -59,9 +116,28 @@ if(!proximity || !target.reagents) return - if(mode == SYRINGE_BROKEN) - to_chat(user, "This syringe is broken!") + if(mode == SYRINGE_CAPPED) + to_chat(user, span("notice", "This syringe is capped!")) return + if(mode == SYRINGE_BROKEN) + to_chat(user, span("warning", "This syringe is broken!")) + return + + if(user.a_intent == I_GRAB && ishuman(user) && ishuman(target)) // we could add other things here eventually. trepanation maybe + var/mob/living/carbon/human/H = target + if (check_zone(user.zone_sel.selecting, target) == "chest") // impromptu needle thoracostomy, re-inflate a collapsed lung + user.visible_message(span("danger", "[user] aims \the [src] between [(user == target) ? "their" : (target + "\'s")] ribs!")) + if(!do_mob(user, target, 1.5 SECONDS)) + return + user.visible_message(span("warning", "[user] jabs [(user == target) ? "themselves" : target] between the ribs with \the [src]!")) + if(H.is_lung_ruptured()) + var/obj/item/organ/lungs/L = H.internal_organs_by_name["lungs"] + if(!L.rescued) + L.rescued = TRUE + else + L.rescued = FALSE + L.take_damage(3) + return if(user.a_intent == I_HURT && ishuman(user)) if((user.is_clumsy()) && prob(50)) @@ -147,8 +223,9 @@ return var/mob/living/carbon/human/H = target + var/obj/item/organ/external/affected if(istype(H)) - var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) + affected = H.get_organ(user.zone_sel.selecting) if(!affected) to_chat(user, "\The [H] is missing that limb!") return @@ -195,6 +272,7 @@ if(ismob(target)) var/contained = reagentlist() trans = reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_BLOOD) + dirty(target, affected) admin_inject_log(user, target, src, contained, reagents.get_temperature(), trans) else trans = reagents.trans_to(target, amount_per_transfer_from_this) @@ -208,10 +286,20 @@ /obj/item/weapon/reagent_containers/syringe/update_icon() cut_overlays() + var/matrix/tf = matrix() + if(istype(loc, /obj/item/weapon/storage)) + tf.Turn(-90) //Vertical for storing compactly + tf.Translate(-3,0) //Could do this with pixel_x but let's just update the appearance once. + transform = tf + if(mode == SYRINGE_BROKEN) icon_state = "broken" return + if(mode == SYRINGE_CAPPED) + icon_state = "capped" + return + var/rounded_vol = round(reagents.total_volume, round(reagents.maximum_volume / 3)) if(ismob(loc)) var/injoverlay @@ -225,7 +313,7 @@ item_state = "syringe_[rounded_vol]" if(reagents.total_volume) - filling = image('icons/obj/reagentfillings.dmi', src, "syringe10") + filling = image('icons/obj/syringe.dmi', src, "syringe10") filling.icon_state = "syringe[rounded_vol]" @@ -233,11 +321,14 @@ add_overlay(filling) /obj/item/weapon/reagent_containers/syringe/proc/syringestab(mob/living/carbon/target as mob, mob/living/carbon/user as mob) + if(mode == SYRINGE_CAPPED) + to_chat(user, span("danger", "You can't stab someone with a capped syringe!")) + if(istype(target, /mob/living/carbon/human)) var/mob/living/carbon/human/H = target - var/target_zone = ran_zone(check_zone(user.zone_sel.selecting, target)) + var/target_zone = ran_zone(check_zone(user.zone_sel.selecting), 70) var/obj/item/organ/external/affecting = H.get_organ(target_zone) if (!affecting || affecting.is_stump()) @@ -325,37 +416,49 @@ update_icon() /obj/item/weapon/reagent_containers/syringe/antiviral - name = "Syringe (spaceacillin)" + name = "Syringe (deltamivir)" desc = "Contains antiviral agents." - Initialize() - . = ..() - reagents.add_reagent("spaceacillin", 15) - mode = SYRINGE_INJECT - update_icon() + +/obj/item/weapon/reagent_containers/syringe/antiviral/Initialize() + . = ..() + reagents.add_reagent("deltamivir", 15) + mode = SYRINGE_INJECT + update_icon() + +/obj/item/weapon/reagent_containers/syringe/antibiotic + name = "Syringe (thetamycin)" + desc = "Contains antibiotics." + +/obj/item/weapon/reagent_containers/syringe/antibiotic/Initialize() + . = ..() + reagents.add_reagent("thetamycin", 15) + mode = SYRINGE_INJECT + update_icon() /obj/item/weapon/reagent_containers/syringe/drugs name = "Syringe (drugs)" desc = "Contains aggressive drugs meant for torture." - Initialize() - . = ..() - reagents.add_reagent("panotoxin", 5) - reagents.add_reagent("mindbreaker", 10) - mode = SYRINGE_INJECT - update_icon() + +/obj/item/weapon/reagent_containers/syringe/drugs/Initialize() + . = ..() + reagents.add_reagent("panotoxin", 5) + reagents.add_reagent("mindbreaker", 10) + mode = SYRINGE_INJECT + update_icon() /obj/item/weapon/reagent_containers/syringe/calomel name = "Syringe (calomel)" desc = "Contains purging medicine." - Initialize() - . = ..() - reagents.add_reagent("calomel", 15) - mode = SYRINGE_INJECT - update_icon() + +/obj/item/weapon/reagent_containers/syringe/calomel/Initialize() + . = ..() + reagents.add_reagent("calomel", 15) + mode = SYRINGE_INJECT + update_icon() -/obj/item/weapon/reagent_containers/syringe/ld50_syringe/choral - Initialize() - . = ..() - reagents.add_reagent("chloralhydrate", 60) - mode = SYRINGE_INJECT - update_icon() +/obj/item/weapon/reagent_containers/syringe/ld50_syringe/chloral/Initialize() + . = ..() + reagents.add_reagent("chloralhydrate", 60) + mode = SYRINGE_INJECT + update_icon() diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index cd9cbe4312b..80617c00410 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -300,25 +300,50 @@ //Beer Kegs -/obj/structure/reagent_dispensers/beerkeg - name = "beer keg" - desc = "A beer keg" +/obj/structure/reagent_dispensers/keg + name = "keg" + desc = "An empty keg." icon_state = "beertankTEMP" amount_per_transfer_from_this = 10 + var/reagentid = "beer" + var/filled = FALSE -/obj/structure/reagent_dispensers/beerkeg/Initialize() +/obj/structure/reagent_dispensers/keg/Initialize() . = ..() - reagents.add_reagent("beer",capacity) + if(filled) + reagents.add_reagent(src.reagentid,capacity) -/obj/structure/reagent_dispensers/xuizikeg +/obj/structure/reagent_dispensers/keg/attackby(obj/item/weapon/W as obj, mob/user as mob) + if (istype(W, /obj/item/stack/rods)) + var/obj/item/stack/rods/R = W + if(!R.can_use(3)) // like a tripod + to_chat(user, span("notice", "You need three rods to make a still!")) + return + if(do_after(user, 20)) + if (QDELETED(src)) + return + R.use(3) + new /obj/structure/distillery(src.loc) + if(reagents) + to_chat(user, span("notice", "As you prop the still up on the rods, the reagents inside are spilled. However, you successfully make the still.")) + reagents.trans_to_turf(get_turf(src), reagents.total_volume) + else + to_chat(user, span("notice", "You successfully build a still.")) + qdel(src) + return + . = ..() + +/obj/structure/reagent_dispensers/keg/beerkeg + name = "beer keg" + desc = "A beer keg" + filled = TRUE + +/obj/structure/reagent_dispensers/keg/xuizikeg name = "xuizi juice keg" desc = "A keg full of Xuizi juice, blended flower buds from the Moghean Xuizi cactus. The export stamp of the Arizi Guild is imprinted on the side." icon_state = "keg_xuizi" - amount_per_transfer_from_this = 10 - -/obj/structure/reagent_dispensers/xuizikeg/Initialize() - . = ..() - reagents.add_reagent("xuizijuice",capacity) + reagentid = "xuizijuice" + filled = TRUE //Cooking oil tank /obj/structure/reagent_dispensers/cookingoil @@ -370,4 +395,4 @@ env.temperature = 0 else if (reagents.total_volume > 500) env.temperature -= 100 - QDEL_IN(src, 10) \ No newline at end of file + QDEL_IN(src, 10) diff --git a/code/modules/tables/tables.dm b/code/modules/tables/tables.dm index e825a42e405..44a1d6a5ec7 100644 --- a/code/modules/tables/tables.dm +++ b/code/modules/tables/tables.dm @@ -166,6 +166,12 @@ update_material() return 1 + if(!material && can_plate && istype(W, /obj/item/weapon/reagent_containers/glass/beaker/bowl)) + new /obj/structure/chemkit(loc) + qdel(W) + qdel(src) + return 1 + return ..() /obj/structure/table/MouseDrop_T(obj/item/stack/material/what) diff --git a/code/modules/virus2/disease2.dm b/code/modules/virus2/disease2.dm index 7b76c58cf04..2019fe06371 100644 --- a/code/modules/virus2/disease2.dm +++ b/code/modules/virus2/disease2.dm @@ -79,8 +79,8 @@ if(prob(1)) majormutate() - //Space antibiotics stop disease completely - if(mob.reagents.has_reagent("spaceacillin")) + //Space antivirals stop disease completely + if(mob.reagents.has_reagent("deltamivir")) if(stage == 1 && prob(20)) src.cure(mob) return diff --git a/code/modules/virus2/effect.dm b/code/modules/virus2/effect.dm index 9d6b622425f..2eb58d2b3a4 100644 --- a/code/modules/virus2/effect.dm +++ b/code/modules/virus2/effect.dm @@ -345,6 +345,9 @@ stage = 2 /datum/disease2/effect/cough/activate(var/mob/living/carbon/mob,var/multiplier) + if(mob.reagents.has_reagent("coughsyrup")) + to_chat(mob, span("notice", "You faintly feel the urge to cough, but manage to suppress it.")) + return mob.say("*cough") for(var/mob/living/carbon/M in oview(2,mob)) mob.spread_disease_to(M) @@ -399,6 +402,9 @@ /datum/disease2/effect/sneeze/activate(var/mob/living/carbon/mob, var/multiplier) if (prob(30)) to_chat(mob, "You feel like you are about to sneeze!") + if(mob.reagents.has_reagent("diphenhydramine")) + to_chat(mob, span("notice", "You faintly feel the urge to sneeze, but manage to suppress it.")) + return addtimer(CALLBACK(src, .proc/do_sneeze, mob, multiplier), 5) /datum/disease2/effect/sneeze/proc/do_sneeze(mob/living/carbon/mob, multiplier) diff --git a/code/modules/virus2/helpers.dm b/code/modules/virus2/helpers.dm index adb75d25ddb..563a43a2106 100644 --- a/code/modules/virus2/helpers.dm +++ b/code/modules/virus2/helpers.dm @@ -82,7 +82,7 @@ proc/airborne_can_reach(turf/source, turf/target) var/list/antibodies_in_common = M.antibodies & disease.antigen if(antibodies_in_common.len) return - if(M.reagents.has_reagent("spaceacillin")) + if(M.reagents.has_reagent("deltamivir")) return if(!disease.affected_species.len) diff --git a/html/changelogs/MDP-chemrevamp.yml b/html/changelogs/MDP-chemrevamp.yml new file mode 100644 index 00000000000..9159a57a945 --- /dev/null +++ b/html/changelogs/MDP-chemrevamp.yml @@ -0,0 +1,69 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: MoondancerPony + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Makes it so that you can create a makeshift chemistry workstation allowing for crushing, chopping, and heating reagents. You can add an analyser to it to view the temperature of the reagents." + - rscadd: "Adds a distillery to turn booze into pure(r) ethanol/butanol and a little bit of water." + - rscadd: "Adds lean, made from cough syrup, sugar, and space-up. Adds krok juice, made from iron and orange juice. Adds several other drugs coded by BurgerBB in a previous closed PR." + - rscadd: "Adds cough syrup which prevents coughing from viruses (and spreading viruses via coughing) when in your system." + - rscadd: "Adds recipes for aforementioned drugs, some using cough syrup." + - rscadd: "Adds the ability to stop wounds from bleeding using rags." + - rscadd: "Rags can now be cut from cloth sheets using any sharp object." + - rscadd: "Rags soaked in reagents will transfer 75% of their reagents as touching and 25% in blood." + - rscadd: "Alcohol gives pain messages if it's in your blood. This only happens if injected or if it goes through wounds." + - rscadd: "Certain reagents, like any kind of alcohol, space cleaner, sterilizine, honey, and to a very, VERY small extent water, will disinfect wounds when used on rags." + - rscadd: "Deflated lungs can be treated, in an emergency, by clicking someone with a syringe with the chest targeted and grab intent enabled. Doing so again will damage the lungs and reverse the treatment." + - maptweak: "An empty keg has been added to maintenance." + - rscadd: "Mixing bowls can be printed from the autolathe." + - refactor: "Spaceacillin has been refactored into several new chemicals. Cough syrup, allergy medicine, antivirals, antibiotics, and paracetamol can do the exact same spaceacillin once could." + - rscadd: "Antibiotics (thetamycin) are now available for bacterial infections. They have a small chance of causing side effects such as nausea and vomiting." + - rscadd: "Antivirals (deltamivir) have replaced spaceacillin and do mostly the same thing, save for bacterial wound infections. They have a small chance of causing side effects such as fever, muscle pain, and fatigue." + - rscadd: "Cough syrup, allergy medication, paracetamol, and medicine cups are now available in NanoMed vendors." + - tweak: "Some drinks now heal damage as they did before, though at reduced levels." + - tweak: "Paracetamol now reduces fevers." + - maptweak: "Medical's supplies have been reduced to a less-excessive level, making chemists less redundant." + - tweak: "Syringes now begin capped. After use, syringes get dirty and can also transfer viruses between successive uses (on humans); it's recommended to throw them away in the new sharps bins. If they are only used to transfer reagents, they can be used indefinitely. Ported from Virgo." + - maptweak: "Medical, Virology, and Xenobiology all have sharps bins for disposal of biohazardous glassware." + - tweak: "There are now three hyposprays in the Medical sublevel, which are equivalent to syringes prior to this update. They take the same amount of time to inject, and have a capacity of 15 units, but are reusable." + - backend: "Accidentally refactored (almost) all storage items to use the starts_with var instead of overriding fill(). This should make it a lot less complicated to add new storage boxes." + - imageadd: "Modifies sprites for syringes, done by Geeves." + - rscadd: "Adds medicine cups to take medicine by mouth in a dignified manner." + - tweak: "Changes the glycerol recipe. One unit of triglycerides (can be obtained from meat) and two units of any pure alcohol will produce three units of glycerol and two units of acetone. Sulfuric acid is required as a catalyst." + - rscadd: "Adds a recipe for glucose. Nutriment can be catalysed into glucose by adding sulfuric acid." + - tweak: "Rats and other simplemobs can now only chew empty boxes or boxes with food in them." diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi index 16ad973ab48930b7f3c27427356c5a59fb7cad68..0347ab765af5d83930d52c7e52a00526676afae7 100644 GIT binary patch delta 2456 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 P00000NkvXXu0mjf_@(_N literal 0 HcmV?d00001 diff --git a/icons/obj/reagentfillings.dmi b/icons/obj/reagentfillings.dmi index 56a8cff6abb12e7e6f400e55d0fbd7bb6df474d5..2c659daa8312424219a634f24d39974f4c6ef3cf 100644 GIT binary patch delta 2234 zcmX|?dpy(oAIHD5A(!Z8sENucPI3uJE<;3Nsk!#Ewosi^gxRFocPLJ$4waJJ=A1%P zXL2aH>>`~y{g{<&(k``(ktWOapAMeNK@qWA?pU3<0em!5G4`=O%b=Pb` zY<6TUKJa)(V*06b_*1DV0FYIAtF#H#?YydB;**v;!AzN(q<^-i7RFs<4@j=iq(H%-WJkzw@wf>EO-f(E~SPUG?r0NaX-R()hNefP? zEw`1&x+l;78!wI=>Ijcp@cp&nP-Yz1xvhOxsVcna&(QDk+4FUE)whd<{;xt_xun=1 zPItI_414`XV(gK7pDcEn+j|zscxbvvM4XFxIoZi8NuA|_=Wsxa1meT z7m{mmvE{a3NTvZyR%#?qrCR&tS;7K(ZLTHiY0iI&wnF`pT#Qjb(beBJ0559M0I-6w zKhQrit8#|tlDc8kvf$03YtfEyb^`j(w9hX%0PV>JV#@n_MsvtKynVl}!YcqUhdeKe z0(Q}j-E{_cUjjDE>i#Zr5#Q)HcCYODZ~@h9bZ0nttdnbXc#U*uX6CGJ(o&Sf3%I$Z z#2;n{k}*pr>`J%r<`fOsJW5*rCK8E?gTA~rG60(UF%-;$q2xK;*pW=4dQcR+2{7(= z<779FMrLBn#~^YJ^{_;dxQ22^;>e~yw{p%=TflHN8CfQ8eP<8M_=#^k*W{5}M>e7G5<9F*Vw3zzu7vde=8JnYv8w+b%UUZX<13RdQX=yTnG< z5IjNLxvH(aPSGxnyssUlLEdE{fl>I?M<_3=!(2;4ch@(|ZO7X)>b1E`M$N5ITSA@L5CQaYbh2=wQZ>aM@5CyAcFZ-xb z04iC+2U&@jX-fNW69kqG&;~H z5u2}`K3%#zfH`wt4bb0?Mhfs%MzB3ev<2;8)xLNgtXcF zolF>zX8<6MJ+yl22Emm&9*30fTEGjjm7)CdIT9X+$k&OO^2YZayb!6>>hY>5Z(_k) zmx9xAMpr{!3r6*77If@;8$d|Tvi|*(A(WIP}x2Iraw5co=bfYrz@oC zK8ceTDLzUXmC`fXo86Lm7>2 zh-ST_JsaQa*dEeuh;srxl*y2f)W<>(a*!_$#Q?Qfl{=EC{%sWPz#K}JiE26W%{H+4 z<9;PbSOD1d9p!r)=Fb3-GTNfQFtE;;7X%WC^3P|Nd>vuJ5IBx*e^5X9NMxjIwC`o62a^ z$M);s6`LIL{vXV7L^0ayTvU{RAY5d2E|9^`>I(Ug@2=_!%L`_UDXtRaPNHm zHD6YP0Y{VMRp+qgD0otH_Bgh($eyT8riFT9Q}>gicCKZ$vHFO^Kjj0kqLkEgfE z2|Q=KxyYh@-ZbaSm$OB2#s@uHCQW$ao8JqGV(!!f;ARsqWh93%^5wy-hlj_IOeV8y zdY95Vy}Z0U)m>-`GEy{>f%@dO_;Nua6L{T2=uj;V-sPHj59fmdrLUG9mDmW#&$PaZ zNkmR^kSY>{f+Hg=v_6Hc1y*bYR)qmJWgf8HJU$D=;+fn3U(=dQ+o}U}ku1+qc&#tr zxet4FJ&Qb{7@(k8JEFC$B=X_lkri1ei4zGaaL;iO!>LhxGUeCfo%KV_;z|&xNp@CN zS+@GKm8^;a&wkSHC8TQRMv?_e+RbX@R)L}S-tYlsi&TW(!R|LzE`0wLEPqtR4=5Er zBgp3m&uI;Kmkzw}roJcH)e`|!rf-`f0@Y}(*Zyh#&4e?xCu*rMH(TQ-tgSBgy{(9^ z8->+O-{=dbib#&Z5&$9FjFaeRFOe*+XubU3h5zRjg)Lh<{DOs>*!<}QXk&j6Dv%z4 G%lii`B47{z delta 2108 zcmYjQdpy&7AOG1Ut1;q1yfB@U=;$$th+HZwdOok$=kxvN^Lo8M-}goIw|>LYZD3$l zXe80+G$A1^={zwBp9%mMDsSI;lKj#^|8nA|9X^hoJvR?@Uf6+pb#M_Ckrr0_Xk+gI z8eZ7Fs|ck4D|FGt^Q-u8Z7Yg}JylER&BLbm6|Dv>k9f?5%8lMlKgh;iPqsH#(fYiO z-G9-+ugG|4CutqUg%VJiLtXQsa6CjQ<_E9vW_nC=Om79=@|e71aGK|6 z_Vu=H_GOy&o2q!im8Xf3!i2Y^oRxPXapszlp1wm{>8IT()rH$4pw{}(r}T>k`bTwd zI=Wd|6a%Hr`+&KyR!{L4EwE;Q+}zzx1c<5TkUI~18$m! z<8xpnU|Vg6&q{OKIfck+M&wFIColbLLjP=@2mlcK{CxI@UZ|WCY|R*rw0s>;;tf@P z?|=;26yQ_*xS#;GzDM<0pM8#=jtP*-O9k)0Ov%!7z=&`& zppGI0e%uBfRr1F#Q<1}T!4<2AJgyFab|43QHzIHqWUe2 z^0V8K*|_zi?i`Cg_60rcW4nC!Z)+y^*v>W0fWOJdoCv^Lg6}V`tE(I0Y1#G&VTI(M z;I?Ee+*H#W5;&V$aH};dK=O2CJ^Z6APaNb-d66l6uY0tIKpz3wKrSKzJo_+BxT0oxge~3n8Z}?sf zmM&=cD=vEmeWx=V0(6_}yr4&qk|=J>jwKcIx|^l>UmDWs8W}ZXR+jL>BnqI2F^`v2 zdoz&?N8G68Y=`GCDR<`g;yZbmk-x*_e6A7aFvWOu$bDRiOqKpeTqiexCWPLu0{z}Q zeaK^DoPSr9D)BMWjX{FKF<2pXUW;4?Gu9Z*^p6H3Y1ys@IHcyFvl1j;dh8c}p3ooy zxR#d0k4dw!_W)DOQ61lD!0qSK1!aOZ&+4T{B`F5o>Iq(r*1C2cSH~<~uA!AY3Z}Bd z>o;+tkc_5J50H$d&4c3R<)7zo9)fdFXIaWo#}!LXOA#ydV!w;pQi4(3`}CGKm7AAZn^)8kG)NiG*pc*UL6eeMkY(=P&`$=1uM?&^`x z*2cm-wwjP47ig$p=_1G=%=S+ntUk^LZzv!Vs&uUYyANH6%HCV|*)vosRhZj1z%K#< zPicuyEE20z!`o&;>fV3gT9$BUMIsRelyym_PF0urTk4YZ?TA&eO3WD~0)mxb-SRz-850aX%FN;gE zkOR$wG(&%in}uRTWnIf_rsHBDdb`eiA@T4{$8tJ_8S0dnY|k}r^wlZm;4L zsKZ_EU$$ie^|Q@h^2hEA(JP>s&-yyxD|B%K2-J|&^;{mi*rI(3@?3#Zx$}}xH4w%t z`CvaNR3gFk>FMc-$@EUacN9)ZNr?%1Rq=@rsUpTWG|yCjKQ9a-ZB9@oJ$TW6X)#CPP)xpO<@5sDb#jqAPO z;;o%2YJ1h>WP)O0!6Bd_xbD4ZdYZPfIQ!!fKHm*y*!p;%Tp*% zF~N2Mdr@cC8A=G}?3zh}a14_r$9u&AR(H|bm$8~O!GMB|0L&0Th@ty8t*Vp+X`Q!2 z#2<0Cx(j$aXyyO4q}(%(kf2LQsZAjTMYM*+IxWh2WP`>q$2>vftX}z-WxzJcS<6PV`7_RGi5h~kYwMG!R#~|pl{5CU5iBydl>)fv)E@PZNGT*IpWT+Y#dy7*2&Tn;y zugrjALG8f?l<2xG{^c&Nqm)=pH z=&q$4FC8DhOQ6~LdPxnX3Ip77l5#J$5k0e{N{F`~ITd2xGSF8%x`^{eZ2x~o)KG5y W_U^FG=r4e#{Iq?8eVPtn3;qp8@gx`k diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 2b2e03df2da319daf648e49b8603dfd0e442026a..98b90edf05f0fee5eb74d9c9939d0ecd94454a7e 100644 GIT binary patch delta 22355 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
  • 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 literal 5386 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 Y4A{+k<{|4(f8zwqj4h1Hufn4K3thijiU0rr diff --git a/icons/obj/syringefilling.dmi b/icons/obj/syringefilling.dmi deleted file mode 100644 index 5c5cac840e999247cfe9fb09e7c0695e4921ffa1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2684 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 Yf@N~{ho>d&)k%=^Y4=l&C$FUa7v0}RD*ylh diff --git a/maps/aurora/aurora-1_centcomm.dmm b/maps/aurora/aurora-1_centcomm.dmm index c1f70dbae0c..7750747b005 100644 --- a/maps/aurora/aurora-1_centcomm.dmm +++ b/maps/aurora/aurora-1_centcomm.dmm @@ -11680,10 +11680,10 @@ /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline, /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline, /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline, -/obj/item/weapon/reagent_containers/hypospray, -/obj/item/weapon/reagent_containers/hypospray, -/obj/item/weapon/reagent_containers/hypospray, /obj/item/weapon/storage/box/syringes, +/obj/item/weapon/reagent_containers/hypospray/cmo, +/obj/item/weapon/reagent_containers/hypospray/cmo, +/obj/item/weapon/reagent_containers/hypospray/cmo, /turf/unsimulated/floor{ icon_state = "vault"; dir = 1 @@ -11697,11 +11697,11 @@ /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline, /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline, /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline, -/obj/item/weapon/reagent_containers/hypospray, -/obj/item/weapon/reagent_containers/hypospray, -/obj/item/weapon/reagent_containers/hypospray, /obj/item/weapon/storage/box/syringes, /obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/hypospray/cmo, +/obj/item/weapon/reagent_containers/hypospray/cmo, +/obj/item/weapon/reagent_containers/hypospray/cmo, /turf/unsimulated/floor{ icon_state = "vault"; dir = 1 @@ -14213,7 +14213,7 @@ }, /area/syndicate_mothership/raider_base) "aGk" = ( -/obj/structure/reagent_dispensers/beerkeg, +/obj/structure/reagent_dispensers/keg/beerkeg, /turf/unsimulated/floor{ dir = 8; icon_state = "wood" @@ -20294,7 +20294,7 @@ }, /area/tdome/tdomeobserve) "aTk" = ( -/obj/structure/reagent_dispensers/beerkeg, +/obj/structure/reagent_dispensers/keg/beerkeg, /turf/unsimulated/floor{ icon_state = "redbluefull"; dir = 8 @@ -24236,25 +24236,11 @@ icon_state = "carpetside" }, /area/centcom/living) -"bwi" = ( -/obj/machinery/door/airlock/centcom{ - name = "Representative Office"; - req_access = list(38) - }, -/turf/unsimulated/floor{ - icon_state = "floor" - }, -/area/centcom/ferry) -"bwn" = ( -/obj/structure/bed/chair/office/dark{ - dir = 4 - }, -/obj/effect/landmark/start{ - name = "Corporate Liaison" - }, -/obj/effect/landmark{ - name = "LateJoinCorporate Liaison" - }, +"bPG" = ( +/obj/structure/table/wood, +/obj/item/weapon/material/ashtray/glass, +/obj/item/weapon/storage/fancy/cigarettes/dromedaryco, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, /turf/unsimulated/floor{ icon_state = "floor" }, @@ -24270,6 +24256,14 @@ icon_state = "wood" }, /area/centcom/living) +"doP" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon_state = "floor" + }, +/area/centcom/ferry) "duC" = ( /obj/machinery/door/airlock/centcom{ name = "Cmdt Office"; @@ -24325,12 +24319,9 @@ icon_state = "floor" }, /area/centcom/checkpoint/aft) -"egt" = ( -/obj/machinery/computer/cryopod{ - pixel_y = 32 - }, -/obj/machinery/light{ - dir = 1 +"dUW" = ( +/obj/machinery/cryopod{ + dir = 4 }, /turf/simulated/floor/tiled, /area/centcom/ferry) @@ -24343,12 +24334,6 @@ }, /turf/simulated/floor/carpet/blue, /area/centcom/legion) -"elZ" = ( -/obj/structure/bed/chair/comfy/black, -/turf/unsimulated/floor{ - icon_state = "floor" - }, -/area/centcom/ferry) "epB" = ( /obj/machinery/light/small{ dir = 4; @@ -24361,6 +24346,18 @@ icon_state = "floor" }, /area/centcom/evac) +"ewG" = ( +/obj/machinery/light/spot{ + icon_state = "tube1"; + dir = 4 + }, +/obj/structure/bed/chair/comfy/black{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon_state = "floor" + }, +/area/centcom/ferry) "eyw" = ( /obj/machinery/telecomms/processor/preset_cent, /turf/unsimulated/floor{ @@ -24368,12 +24365,6 @@ dir = 4 }, /area/centcom/living) -"eJf" = ( -/obj/structure/filingcabinet/chestdrawer, -/turf/unsimulated/floor{ - icon_state = "floor" - }, -/area/centcom/ferry) "eSC" = ( /obj/machinery/atm{ pixel_x = -26 @@ -24428,19 +24419,18 @@ dir = 8 }, /area/centcom/living) -"haj" = ( -/obj/machinery/chem_master, -/turf/simulated/floor/tiled/dark, -/area/centcom/legion) -"hfV" = ( -/obj/machinery/light/spot{ - icon_state = "tube1"; - dir = 1 - }, +"gXE" = ( +/obj/structure/table/wood, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen, /turf/unsimulated/floor{ icon_state = "floor" }, /area/centcom/ferry) +"haj" = ( +/obj/machinery/chem_master, +/turf/simulated/floor/tiled/dark, +/area/centcom/legion) "hDK" = ( /obj/structure/bed/chair/office/dark{ dir = 1 @@ -24474,6 +24464,12 @@ dir = 8 }, /area/centcom/living) +"hHP" = ( +/obj/effect/wingrille_spawn/reinforced/crescent, +/turf/unsimulated/floor{ + name = "plating" + }, +/area/centcom/ferry) "hKG" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/northleft{ @@ -24542,12 +24538,6 @@ "ifh" = ( /turf/unsimulated/wall/riveted, /area/centcom/evac) -"ikd" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/centcom/ferry) "ioS" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/southright, @@ -24560,6 +24550,13 @@ icon_state = "floor" }, /area/centcom/checkpoint/fore) +"iIs" = ( +/obj/structure/table/wood, +/obj/machinery/computer/skills, +/turf/unsimulated/floor{ + icon_state = "floor" + }, +/area/centcom/ferry) "iVE" = ( /obj/structure/table/rack, /obj/item/weapon/gun/energy/rifle, @@ -24690,11 +24687,11 @@ dir = 4 }, /area/centcom/living) -"kBw" = ( -/obj/structure/table/wood, -/obj/item/weapon/material/ashtray/glass, -/obj/item/weapon/storage/fancy/cigarettes/dromedaryco, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, +"kEn" = ( +/obj/machinery/light/spot{ + icon_state = "tube1"; + dir = 1 + }, /turf/unsimulated/floor{ icon_state = "floor" }, @@ -24736,18 +24733,6 @@ icon_state = "floor" }, /area/centcom/checkpoint/fore) -"lil" = ( -/obj/machinery/light/spot{ - icon_state = "tube1"; - dir = 4 - }, -/obj/structure/bed/chair/comfy/black{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "floor" - }, -/area/centcom/ferry) "lkF" = ( /obj/effect/wingrille_spawn/reinforced/crescent, /turf/unsimulated/wall/riveted, @@ -24827,6 +24812,10 @@ icon_state = "floor" }, /area/centcom/checkpoint/fore) +"mVG" = ( +/obj/structure/cryofeed, +/turf/simulated/floor/tiled, +/area/centcom/ferry) "nhD" = ( /turf/unsimulated/wall/riveted, /area/centcom/checkpoint/fore) @@ -24874,6 +24863,11 @@ icon_state = "floor" }, /area/centcom/checkpoint/fore) +"otY" = ( +/turf/unsimulated/floor{ + icon_state = "floor" + }, +/area/centcom/ferry) "ouU" = ( /obj/machinery/door/blast/regular{ density = 0; @@ -24908,11 +24902,6 @@ dir = 8 }, /area/centcom/living) -"oQj" = ( -/turf/unsimulated/floor{ - icon_state = "floor" - }, -/area/centcom/ferry) "oQu" = ( /obj/effect/wingrille_spawn/reinforced/crescent, /turf/unsimulated/wall/riveted, @@ -25012,6 +25001,26 @@ dir = 6 }, /area/space) +"qNk" = ( +/obj/structure/bed/chair/comfy/black, +/turf/unsimulated/floor{ + icon_state = "floor" + }, +/area/centcom/ferry) +"raM" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/obj/effect/landmark/start{ + name = "Corporate Liaison" + }, +/obj/effect/landmark{ + name = "LateJoinCorporate Liaison" + }, +/turf/unsimulated/floor{ + icon_state = "floor" + }, +/area/centcom/ferry) "rlk" = ( /obj/machinery/door/airlock/external{ frequency = 1380; @@ -25044,6 +25053,15 @@ /obj/item/device/flashlight/lamp, /turf/simulated/floor/carpet/blue, /area/centcom/legion) +"sfa" = ( +/obj/machinery/door/airlock/centcom{ + name = "Cryo Storage"; + req_access = list(38) + }, +/turf/unsimulated/floor{ + icon_state = "floor" + }, +/area/centcom/ferry) "srl" = ( /obj/effect/wingrille_spawn/reinforced/crescent, /turf/unsimulated/floor{ @@ -25164,6 +25182,12 @@ icon_state = "floor" }, /area/centcom/checkpoint/aft) +"vjK" = ( +/obj/structure/filingcabinet/chestdrawer, +/turf/unsimulated/floor{ + icon_state = "floor" + }, +/area/centcom/ferry) "vyG" = ( /obj/structure/bed/chair/comfy/beige{ dir = 8 @@ -25173,13 +25197,6 @@ icon_state = "wood" }, /area/centcom/living) -"vzi" = ( -/obj/structure/table/wood, -/obj/machinery/computer/skills, -/turf/unsimulated/floor{ - icon_state = "floor" - }, -/area/centcom/ferry) "vUd" = ( /obj/structure/window/reinforced/crescent, /obj/structure/window/reinforced/crescent{ @@ -25271,10 +25288,6 @@ dir = 1 }, /area/centcom/living) -"wyZ" = ( -/obj/structure/cryofeed, -/turf/simulated/floor/tiled, -/area/centcom/ferry) "wEJ" = ( /obj/structure/window/reinforced/crescent, /obj/structure/window/reinforced/crescent{ @@ -25304,13 +25317,14 @@ icon_state = "green" }, /area/centcom/living) -"wLU" = ( -/obj/structure/table/wood, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen, -/turf/unsimulated/floor{ - icon_state = "floor" +"xhq" = ( +/obj/machinery/computer/cryopod{ + pixel_y = 32 }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled, /area/centcom/ferry) "xjq" = ( /obj/machinery/light, @@ -25320,20 +25334,6 @@ dir = 2 }, /area/centcom/spawning) -"xpI" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, -/turf/unsimulated/floor{ - name = "plating" - }, -/area/centcom/ferry) -"xKn" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/turf/unsimulated/floor{ - icon_state = "floor" - }, -/area/centcom/ferry) "xLe" = ( /obj/machinery/door/airlock/centcom{ name = "Cmdt Office"; @@ -25345,9 +25345,9 @@ }, /turf/simulated/floor/tiled/dark, /area/centcom/legion) -"yjD" = ( +"yhL" = ( /obj/machinery/door/airlock/centcom{ - name = "Cryo Storage"; + name = "Representative Office"; req_access = list(38) }, /turf/unsimulated/floor{ @@ -52263,7 +52263,7 @@ aaM aaM aaM aDM -wyZ +mVG aDM aaM aaM @@ -52520,7 +52520,7 @@ aaM aaM aaM aDM -ikd +dUW aDM aaM aaM @@ -52777,7 +52777,7 @@ aaM aaM aaM aDM -egt +xhq aDM aaM aaM @@ -53034,7 +53034,7 @@ aaM aDM aDM aDM -yjD +sfa aDM aaM aaM @@ -53288,11 +53288,11 @@ aaM aaM aaM aaM -xpI -eJf -bwn -oQj -xpI +hHP +vjK +raM +otY +hHP aaM aaM aaM @@ -53545,11 +53545,11 @@ aaM aaM aaM aaM -xpI -vzi -wLU -oQj -xpI +hHP +iIs +gXE +otY +hHP aaM aaM aaM @@ -53803,9 +53803,9 @@ aaM aaM aaM aDM -hfV -xKn -oQj +kEn +doP +otY aDM aaM aaM @@ -54060,9 +54060,9 @@ aaM aaM aaM aDM -oQj -oQj -oQj +otY +otY +otY aDM aaM aaM @@ -54316,11 +54316,11 @@ aaM aaM aaM aaM -xpI -elZ -oQj -oQj -xpI +hHP +qNk +otY +otY +hHP aaM aaM aaM @@ -54573,11 +54573,11 @@ aaM aaM aaM aaM -xpI -kBw -lil -oQj -xpI +hHP +bPG +ewG +otY +hHP aaM aaM aaM @@ -54833,7 +54833,7 @@ aCb ave ave ave -oQj +otY aDM aaM aaM @@ -55090,7 +55090,7 @@ aCc aCc aCc ave -oQj +otY aDM aaM aaM @@ -55347,7 +55347,7 @@ aCT aCc aDB aDM -bwi +yhL aDM aEj aEj diff --git a/maps/aurora/aurora-3_sublevel.dmm b/maps/aurora/aurora-3_sublevel.dmm index 018fe8b3cf8..bbeaac0644b 100644 --- a/maps/aurora/aurora-3_sublevel.dmm +++ b/maps/aurora/aurora-3_sublevel.dmm @@ -14307,6 +14307,7 @@ /obj/item/weapon/reagent_containers/dropper{ pixel_y = 9 }, +/obj/item/weapon/storage/box/sharps, /turf/simulated/floor/tiled/white, /area/medical/virologytesting) "aBN" = ( @@ -22358,6 +22359,7 @@ /obj/structure/closet/secure_closet/medical3, /obj/item/clothing/gloves/latex/tajara, /obj/item/clothing/gloves/latex/unathi, +/obj/item/weapon/reagent_containers/hypospray, /turf/simulated/floor/tiled, /area/medical/medbay4) "aSM" = ( @@ -22934,6 +22936,7 @@ }, /obj/item/clothing/gloves/latex/tajara, /obj/item/clothing/gloves/latex/unathi, +/obj/item/weapon/reagent_containers/hypospray, /turf/simulated/floor/tiled, /area/medical/medbay4) "aUE" = ( @@ -24649,13 +24652,8 @@ /turf/simulated/floor/tiled/white, /area/medical/patient_wing) "bbF" = ( -/obj/structure/table/standard, -/obj/item/weapon/storage/firstaid/toxin{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/weapon/storage/firstaid/o2, /obj/effect/floor_decal/corner/white/diagonal, +/obj/structure/filingcabinet/chestdrawer, /turf/simulated/floor/tiled, /area/medical/patient_wing_post2) "bbG" = ( @@ -27392,19 +27390,6 @@ /obj/effect/decal/cleanable/generic, /turf/simulated/floor/tiled/dark, /area/rnd/test_range) -"bsp" = ( -/obj/machinery/ringer{ - department = "Engineering"; - id = "engie_ringer"; - pixel_x = 30; - pixel_y = 0; - req_access = list(10) - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/outpost/engineering/hallway) "bvB" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /obj/effect/floor_decal/corner/lime{ @@ -27676,17 +27661,6 @@ }, /turf/simulated/floor/grass, /area/medical/patient_wing_picnic) -"cEg" = ( -/obj/machinery/light/small/emergency{ - icon_state = "bulb1"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/universal, -/obj/machinery/meter{ - name = "Scrubbers" - }, -/turf/simulated/floor/plating, -/area/maintenance/medsublevel) "cFw" = ( /turf/simulated/wall, /area/medical/patient_wing_post2) @@ -27742,6 +27716,21 @@ }, /turf/simulated/floor/tiled/dark, /area/engineering/backup_SMES) +"cQm" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal{ + dir = 4 + }, +/obj/machinery/meter{ + name = "Scrubbers" + }, +/turf/simulated/floor/plating, +/area/maintenance/scisublevel) +"cQJ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/outpost/engineering/hallway) "cVf" = ( /obj/effect/floor_decal/corner/red{ icon_state = "corner_white"; @@ -28044,12 +28033,8 @@ /area/rnd/xenoarch_atrium) "dxk" = ( /obj/structure/table/standard, -/obj/item/weapon/storage/firstaid/adv{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/weapon/storage/firstaid/fire, /obj/effect/floor_decal/corner/white/diagonal, +/obj/item/weapon/storage/firstaid/adv, /turf/simulated/floor/tiled, /area/medical/patient_wing_post2) "dyi" = ( @@ -28161,14 +28146,6 @@ /obj/structure/target_stake, /turf/simulated/floor/tiled/dark, /area/rnd/test_range) -"dOI" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/backup_SMES) "dOP" = ( /obj/machinery/door/firedoor, /obj/structure/window/reinforced, @@ -28439,9 +28416,6 @@ }, /turf/simulated/floor/wood, /area/medical/patient_wing_picnic) -"ejR" = ( -/turf/simulated/floor/tiled/dark, -/area/engineering/backup_SMES) "ejU" = ( /obj/effect/floor_decal/corner/white/diagonal, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -28449,18 +28423,6 @@ }, /turf/simulated/floor/tiled/white, /area/medical/patient_wing_gym) -"ekg" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; - icon_state = "radiation"; - name = "RADIOACTIVE AREA"; - pixel_x = 32; - pixel_y = -32 - }, -/turf/simulated/floor{ - icon_state = "plating" - }, -/area/engineering/gravity_gen) "emk" = ( /obj/structure/table/standard, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -28557,12 +28519,6 @@ /obj/effect/floor_decal/corner/grey/diagonal, /turf/simulated/floor/tiled/white, /area/medical/patient_wing_hallway) -"eDx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/scisublevel) "eDK" = ( /obj/structure/grille, /obj/structure/window/phoronreinforced{ @@ -28578,19 +28534,6 @@ icon_state = "plating" }, /area/rnd/mixing) -"eEo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/medsublevel) "eEq" = ( /obj/machinery/door/firedoor, /obj/structure/grille, @@ -29114,6 +29057,14 @@ /obj/random/soap, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/sleep/medical) +"gkl" = ( +/obj/machinery/alarm{ + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 + }, +/turf/simulated/floor/tiled, +/area/outpost/engineering/hallway) "gll" = ( /turf/simulated/wall, /area/medical/patient_wing_library) @@ -29266,6 +29217,9 @@ }, /turf/simulated/floor/tiled/white, /area/medical/quarantine) +"gHk" = ( +/turf/simulated/floor/tiled/dark, +/area/engineering/backup_SMES) "gHy" = ( /obj/machinery/door/firedoor{ dir = 2 @@ -29371,6 +29325,13 @@ }, /turf/simulated/floor/plating, /area/outpost/engineering/power) +"hmF" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 2 + }, +/turf/simulated/floor/tiled, +/area/outpost/engineering/hallway) "hob" = ( /obj/machinery/door/firedoor{ dir = 2 @@ -29429,6 +29390,19 @@ /obj/item/device/flashlight/lamp, /turf/simulated/floor/tiled/dark, /area/rnd/xenoarch_atrium) +"hrG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/maintenance/medsublevel) "hwN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -29704,14 +29678,6 @@ /obj/machinery/power/port_gen/pacman, /turf/simulated/floor/tiled/dark, /area/engineering/backup_SMES) -"inq" = ( -/obj/machinery/alarm{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 - }, -/turf/simulated/floor/tiled, -/area/outpost/engineering/hallway) "ipg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/hologram/holopad, @@ -29815,16 +29781,6 @@ /obj/structure/bed/chair/comfy/brown, /turf/simulated/floor/wood, /area/medical/patient_d) -"iTr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - icon_state = "map-scrubbers"; - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/engineering/atmos) "iTE" = ( /obj/structure/table/rack, /obj/item/weapon/storage/toolbox/emergency, @@ -30067,15 +30023,6 @@ /obj/machinery/computer/med_data/laptop, /turf/simulated/floor/tiled, /area/medical/patient_wing_post2) -"jlD" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal{ - dir = 4 - }, -/obj/machinery/meter{ - name = "Scrubbers" - }, -/turf/simulated/floor/plating, -/area/maintenance/scisublevel) "jlY" = ( /obj/machinery/floodlight, /turf/simulated/floor/airless{ @@ -30990,6 +30937,14 @@ }, /turf/simulated/floor/plating, /area/medical/virologytesting) +"mCk" = ( +/obj/machinery/alarm{ + dir = 4; + icon_state = "alarm0"; + pixel_x = -22 + }, +/turf/simulated/floor/tiled, +/area/outpost/engineering/hallway) "mDh" = ( /obj/structure/window/reinforced{ dir = 1 @@ -31311,12 +31266,6 @@ }, /turf/simulated/floor/tiled, /area/rnd/eva) -"nrq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/medsublevel) "nsu" = ( /obj/structure/disposalpipe/segment{ dir = 1; @@ -31805,6 +31754,12 @@ }, /turf/simulated/floor/grass, /area/medical/patient_wing_picnic) +"oIX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/maintenance/scisublevel) "oLA" = ( /obj/machinery/door/firedoor, /obj/structure/grille, @@ -31966,13 +31921,6 @@ icon_state = "plating" }, /area/rnd/mixing) -"pfM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/dark, -/area/engineering/backup_SMES) "piW" = ( /obj/effect/floor_decal/corner/mauve{ icon_state = "corner_white"; @@ -32030,12 +31978,6 @@ }, /turf/simulated/floor/tiled/white, /area/rnd/xenobiology/xenoflora_hazard) -"pyD" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/outpost/engineering/hallway) "pCk" = ( /obj/machinery/door/firedoor, /obj/structure/grille, @@ -32084,6 +32026,14 @@ /obj/machinery/recharge_station, /turf/simulated/floor/tiled, /area/rnd/eva) +"pFW" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/engineering/backup_SMES) "pHE" = ( /obj/effect/floor_decal/industrial/warning/dust{ icon_state = "warning_dust"; @@ -32208,6 +32158,12 @@ }, /turf/simulated/floor/tiled/white, /area/medical/patient_wing_hallway) +"pRY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/maintenance/medsublevel) "pUK" = ( /obj/effect/floor_decal/corner/red/full{ icon_state = "corner_white_full"; @@ -32439,6 +32395,19 @@ /obj/machinery/botany/extractor, /turf/simulated/floor/tiled/white, /area/rnd/xenobiology/xenoflora) +"qEk" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/obj/machinery/meter{ + name = "Air supply" + }, +/turf/simulated/floor/plating, +/area/maintenance/medsublevel) "qFM" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ dir = 4; @@ -32649,19 +32618,6 @@ }, /turf/simulated/wall/r_wall, /area/engineering/backup_SMES) -"rdW" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/visible/universal, -/obj/machinery/meter{ - name = "Air supply" - }, -/turf/simulated/floor/plating, -/area/maintenance/medsublevel) "rfa" = ( /turf/simulated/wall, /area/maintenance/scisublevel) @@ -33025,13 +32981,6 @@ icon_state = "asteroidplating" }, /area/mine/unexplored) -"slJ" = ( -/obj/machinery/light{ - icon_state = "tube1"; - dir = 2 - }, -/turf/simulated/floor/tiled, -/area/outpost/engineering/hallway) "smA" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ dir = 1; @@ -33194,12 +33143,6 @@ }, /turf/simulated/floor/tiled, /area/outpost/engineering/hallway) -"sRC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plating, -/area/maintenance/medsublevel) "sRQ" = ( /obj/effect/floor_decal/industrial/warning{ icon_state = "warning"; @@ -33323,12 +33266,6 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/reinforced, /area/rnd/isolation_a) -"tit" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/scisublevel) "tkc" = ( /obj/machinery/atmospherics/portables_connector{ dir = 8 @@ -33427,6 +33364,13 @@ /obj/item/target, /turf/simulated/floor/tiled/dark, /area/rnd/test_range) +"trp" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled, +/area/outpost/engineering/hallway) "tsX" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -33442,6 +33386,17 @@ }, /turf/simulated/floor/tiled, /area/outpost/engineering/hallway) +"ttx" = ( +/obj/machinery/light/small/emergency{ + icon_state = "bulb1"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/obj/machinery/meter{ + name = "Scrubbers" + }, +/turf/simulated/floor/plating, +/area/maintenance/medsublevel) "ttF" = ( /obj/machinery/power/emitter{ anchored = 1; @@ -33472,6 +33427,12 @@ }, /turf/unsimulated/floor/asteroid/ash/rocky, /area/mine/unexplored) +"tyC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/maintenance/medsublevel) "tzO" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ dir = 4; @@ -33957,6 +33918,12 @@ }, /turf/simulated/floor/wood, /area/medical/patient_wing_library) +"uEu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/maintenance/scisublevel) "uGd" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -34122,6 +34089,18 @@ /obj/machinery/atmospherics/pipe/simple/visible/yellow, /turf/simulated/floor/tiled, /area/rnd/xenoarch_atrium) +"vaz" = ( +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'RADIOACTIVE AREA'"; + icon_state = "radiation"; + name = "RADIOACTIVE AREA"; + pixel_x = 32; + pixel_y = -32 + }, +/turf/simulated/floor{ + icon_state = "plating" + }, +/area/engineering/gravity_gen) "vdr" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -34144,13 +34123,6 @@ "vgD" = ( /turf/simulated/floor/tiled/white, /area/rnd/xenobiology/xenoflora_hazard) -"vhy" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/outpost/engineering/hallway) "vjP" = ( /obj/effect/floor_decal/corner/grey/diagonal, /obj/machinery/door/firedoor, @@ -34629,6 +34601,13 @@ /obj/structure/closet/crate, /turf/simulated/floor/plating, /area/maintenance/scisublevel) +"woY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/dark, +/area/engineering/backup_SMES) "wqz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -34859,6 +34838,16 @@ "wNU" = ( /turf/simulated/floor/tiled/dark, /area/outpost/research/anomaly_harvest) +"wNZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/engineering/atmos) "wRu" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/white, @@ -34916,6 +34905,23 @@ }, /turf/simulated/floor/bluegrid, /area/rnd/isolation_a) +"xco" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/maintenance/scisublevel) "xex" = ( /turf/simulated/wall/r_wall, /area/maintenance/substation/research_sublevel) @@ -35050,14 +35056,6 @@ }, /turf/simulated/wall/r_wall, /area/medical/quarantine) -"xqa" = ( -/obj/machinery/alarm{ - dir = 4; - icon_state = "alarm0"; - pixel_x = -22 - }, -/turf/simulated/floor/tiled, -/area/outpost/engineering/hallway) "xqG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -35112,6 +35110,19 @@ /obj/structure/table/reinforced/steel, /turf/simulated/floor/tiled/dark, /area/outpost/research/anomaly_storage) +"xvi" = ( +/obj/machinery/ringer{ + department = "Engineering"; + id = "engie_ringer"; + pixel_x = 30; + pixel_y = 0; + req_access = list(10) + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/outpost/engineering/hallway) "xyq" = ( /obj/machinery/power/apc{ dir = 8; @@ -35424,23 +35435,6 @@ /obj/structure/bed, /turf/simulated/floor/tiled/white, /area/medical/virologytesting) -"yay" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/scisublevel) "ybR" = ( /obj/structure/cable/green{ d1 = 4; @@ -51568,7 +51562,7 @@ alT aiQ uwP uwP -ejR +gHk vEg pCR uwP @@ -51827,7 +51821,7 @@ uwP cOT nBU lsl -dOI +pFW rrO uwP uwP @@ -52342,7 +52336,7 @@ xrs vZr cqC cwx -pfM +woY igE uwP aaa @@ -52592,13 +52586,13 @@ akQ alt alI als -ekg +vaz aiQ uwP soJ -ejR +gHk lhL -ejR +gHk tvF uwP uwP @@ -53626,7 +53620,7 @@ alJ agQ ahg xXX -inq +gkl agQ aaa aaa @@ -54905,9 +54899,9 @@ ahg ahg ahg ahg -xqa +mCk ahg -pyD +cQJ ahg ahg xXX @@ -55168,7 +55162,7 @@ fIm bhR bhR amo -slJ +hmF agQ aaa aaa @@ -55417,9 +55411,9 @@ tSs tLV akY ahg -bsp +xvi ahg -vhy +trp ahg ahg ahg @@ -56700,7 +56694,7 @@ aiY ajJ akc abo -iTr +wNZ alA aaO aaa @@ -57783,7 +57777,7 @@ avX aBd wbr aHG -eDx +uEu aJO wbr aLJ @@ -58040,7 +58034,7 @@ avX avX wbr aHH -jlD +cQm aJP wbr aLK @@ -58297,8 +58291,8 @@ rgE tTI wbr aHI -tit -yay +oIX +xco wbr aLL aMM @@ -76018,8 +76012,8 @@ sXz sXz ayI azg -eEo -rdW +hrG +qEk aAY azg hwN @@ -76275,9 +76269,9 @@ aaa sXz sXz sXz -nrq -cEg -sRC +tyC +ttx +pRY sXz sXz vPb diff --git a/maps/aurora/aurora-4_mainlevel.dmm b/maps/aurora/aurora-4_mainlevel.dmm index b8c1d78dafb..a3219145665 100644 --- a/maps/aurora/aurora-4_mainlevel.dmm +++ b/maps/aurora/aurora-4_mainlevel.dmm @@ -5894,7 +5894,7 @@ /obj/structure/fireaxecabinet{ pixel_x = -32 }, -/obj/structure/closet/crate/extinguisher_catridges, +/obj/structure/closet/crate/extinguisher_cartridges, /turf/simulated/floor/tiled, /area/engineering/atmos/storage) "alv" = ( @@ -16214,6 +16214,23 @@ }, /turf/simulated/floor/wood, /area/lawoffice) +"aCU" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/wood, +/area/lawoffice) "aCV" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -17314,6 +17331,14 @@ }, /turf/simulated/floor/wood, /area/lawoffice) +"aEN" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood, +/area/lawoffice) "aEO" = ( /obj/structure/table/wood, /obj/item/weapon/folder{ @@ -32260,7 +32285,7 @@ /area/medical/icu) "bdH" = ( /turf/simulated/wall, -/area/medical/biostorage{ +/area/medical/exam_room{ name = "\improper Medical - Exam Room 2" }) "bdI" = ( @@ -32286,7 +32311,7 @@ opacity = 0 }, /turf/simulated/floor/plating, -/area/medical/biostorage{ +/area/medical/exam_room{ name = "\improper Medical - Exam Room 2" }) "bdJ" = ( @@ -32308,7 +32333,7 @@ opacity = 0 }, /turf/simulated/floor/plating, -/area/medical/biostorage{ +/area/medical/exam_room{ name = "\improper Medical - Exam Room 2" }) "bdK" = ( @@ -32334,7 +32359,7 @@ opacity = 0 }, /turf/simulated/floor/plating, -/area/medical/biostorage{ +/area/medical/exam_room{ name = "\improper Medical - Exam Room 2" }) "bdL" = ( @@ -33124,7 +33149,7 @@ /obj/structure/table/standard, /obj/machinery/computer/med_data/laptop, /turf/simulated/floor/carpet/blue, -/area/medical/biostorage{ +/area/medical/exam_room{ name = "\improper Medical - Exam Room 2" }) "bfg" = ( @@ -33142,20 +33167,20 @@ pixel_y = -4 }, /turf/simulated/floor/carpet/blue, -/area/medical/biostorage{ +/area/medical/exam_room{ name = "\improper Medical - Exam Room 2" }) "bfh" = ( /obj/effect/floor_decal/corner/grey/diagonal, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/tiled/white, -/area/medical/biostorage{ +/area/medical/exam_room{ name = "\improper Medical - Exam Room 2" }) "bfi" = ( /obj/effect/floor_decal/corner/grey/diagonal, /turf/simulated/floor/tiled/white, -/area/medical/biostorage{ +/area/medical/exam_room{ name = "\improper Medical - Exam Room 2" }) "bfj" = ( @@ -33175,7 +33200,7 @@ req_one_access = list(5) }, /turf/simulated/floor/tiled/white, -/area/medical/biostorage{ +/area/medical/exam_room{ name = "\improper Medical - Exam Room 2" }) "bfk" = ( @@ -33885,7 +33910,7 @@ icon_state = "0-4" }, /turf/simulated/floor/carpet/blue, -/area/medical/biostorage{ +/area/medical/exam_room{ name = "\improper Medical - Exam Room 2" }) "bgu" = ( @@ -33898,7 +33923,7 @@ icon_state = "2-8" }, /turf/simulated/floor/carpet/blue, -/area/medical/biostorage{ +/area/medical/exam_room{ name = "\improper Medical - Exam Room 2" }) "bgv" = ( @@ -33908,7 +33933,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/white, -/area/medical/biostorage{ +/area/medical/exam_room{ name = "\improper Medical - Exam Room 2" }) "bgw" = ( @@ -33938,7 +33963,7 @@ opacity = 0 }, /turf/simulated/floor/plating, -/area/medical/biostorage{ +/area/medical/exam_room{ name = "\improper Medical - Exam Room 2" }) "bgx" = ( @@ -34774,7 +34799,7 @@ dir = 8 }, /turf/simulated/floor/carpet/blue, -/area/medical/biostorage{ +/area/medical/exam_room{ name = "\improper Medical - Exam Room 2" }) "bhP" = ( @@ -34789,7 +34814,7 @@ icon_state = "1-2" }, /turf/simulated/floor/carpet/blue, -/area/medical/biostorage{ +/area/medical/exam_room{ name = "\improper Medical - Exam Room 2" }) "bhQ" = ( @@ -34800,7 +34825,7 @@ }, /obj/machinery/hologram/holopad, /turf/simulated/floor/tiled/white, -/area/medical/biostorage{ +/area/medical/exam_room{ name = "\improper Medical - Exam Room 2" }) "bhR" = ( @@ -34810,7 +34835,7 @@ dir = 8 }, /turf/simulated/floor/tiled/white, -/area/medical/biostorage{ +/area/medical/exam_room{ name = "\improper Medical - Exam Room 2" }) "bhS" = ( @@ -35508,25 +35533,6 @@ }, /turf/simulated/floor/tiled/white, /area/medical/icu) -"bjc" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/structure/closet/secure_closet/medical_wall{ - name = "Medication Closet"; - pixel_x = -32; - pixel_y = 0 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/item/weapon/reagent_containers/glass/bottle/antitoxin, -/obj/item/weapon/storage/pill_bottle/dermaline, -/obj/item/weapon/storage/pill_bottle/tramadol, -/obj/item/weapon/storage/pill_bottle/dylovene, -/obj/item/weapon/storage/pill_bottle/dylovene, -/obj/item/weapon/reagent_containers/syringe/antiviral, -/obj/item/weapon/reagent_containers/syringe/antiviral, -/turf/simulated/floor/tiled/white, -/area/medical/biostorage{ - name = "\improper Medical - Exam Room 2" - }) "bjd" = ( /obj/effect/floor_decal/corner/grey/diagonal, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -35542,7 +35548,7 @@ icon_state = "1-2" }, /turf/simulated/floor/tiled/white, -/area/medical/biostorage{ +/area/medical/exam_room{ name = "\improper Medical - Exam Room 2" }) "bje" = ( @@ -35554,7 +35560,7 @@ dir = 9 }, /turf/simulated/floor/tiled/white, -/area/medical/biostorage{ +/area/medical/exam_room{ name = "\improper Medical - Exam Room 2" }) "bjf" = ( @@ -35562,7 +35568,7 @@ /obj/structure/bed, /obj/item/weapon/bedsheet/medical, /turf/simulated/floor/tiled/white, -/area/medical/biostorage{ +/area/medical/exam_room{ name = "\improper Medical - Exam Room 2" }) "bjg" = ( @@ -36112,8 +36118,8 @@ /obj/item/weapon/storage/pill_bottle/tramadol, /obj/item/weapon/storage/pill_bottle/dylovene, /obj/item/weapon/storage/pill_bottle/dylovene, -/obj/item/weapon/reagent_containers/syringe/antiviral, -/obj/item/weapon/reagent_containers/syringe/antiviral, +/obj/item/weapon/reagent_containers/syringe/antibiotic, +/obj/item/weapon/reagent_containers/syringe/antibiotic, /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/white, /area/medical/medbay) @@ -36253,7 +36259,7 @@ id = "ExamR2" }, /turf/simulated/floor/plating, -/area/medical/biostorage{ +/area/medical/exam_room{ name = "\improper Medical - Exam Room 2" }) "bkn" = ( @@ -36271,27 +36277,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/white, -/area/medical/biostorage{ - name = "\improper Medical - Exam Room 2" - }) -"bko" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/structure/closet/secure_closet/medical_wall{ - name = "Medication Closet"; - pixel_x = -32; - pixel_y = 0 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/item/weapon/reagent_containers/glass/bottle/antitoxin, -/obj/item/weapon/storage/pill_bottle/dermaline, -/obj/item/weapon/storage/pill_bottle/tramadol, -/obj/item/weapon/storage/pill_bottle/dylovene, -/obj/item/weapon/storage/pill_bottle/dylovene, -/obj/item/weapon/reagent_containers/syringe/antiviral, -/obj/item/weapon/reagent_containers/syringe/antiviral, -/turf/simulated/floor/tiled/white, /area/medical/exam_room{ - name = "\improper Medical - Exam Room 1" + name = "\improper Medical - Exam Room 2" }) "bkp" = ( /obj/machinery/hologram/holopad, @@ -39101,25 +39088,20 @@ /area/crew_quarters/heads/cmo) "boH" = ( /obj/structure/table/standard, -/obj/item/weapon/storage/firstaid/o2{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/weapon/storage/firstaid/o2, /obj/effect/floor_decal/corner/lime/full{ icon_state = "corner_white_full"; dir = 8 }, /obj/machinery/firealarm/north, +/obj/item/weapon/storage/firstaid/adv{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/weapon/storage/firstaid/adv, /turf/simulated/floor/tiled/white, /area/medical/main_storage) "boI" = ( /obj/structure/table/standard, -/obj/item/weapon/storage/firstaid/toxin{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/weapon/storage/firstaid/toxin, /obj/effect/floor_decal/corner/lime{ icon_state = "corner_white"; dir = 5 @@ -39135,15 +39117,12 @@ d2 = 2; icon_state = "0-2" }, +/obj/item/weapon/storage/box/syringes, +/obj/item/weapon/storage/firstaid/o2, /turf/simulated/floor/tiled/white, /area/medical/main_storage) "boJ" = ( /obj/structure/table/standard, -/obj/item/weapon/storage/firstaid/fire{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/weapon/storage/firstaid/fire, /obj/effect/floor_decal/corner/lime{ icon_state = "corner_white"; dir = 5 @@ -39156,15 +39135,20 @@ pixel_x = 0; pixel_y = 32 }, +/obj/item/weapon/storage/firstaid/regular{ + empty = 1; + name = "First-Aid (empty)"; + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/weapon/storage/firstaid/regular{ + empty = 1; + name = "First-Aid (empty)" + }, /turf/simulated/floor/tiled/white, /area/medical/main_storage) "boK" = ( /obj/structure/table/standard, -/obj/item/weapon/storage/firstaid/adv{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/weapon/storage/firstaid/adv, /obj/effect/floor_decal/corner/lime/full{ icon_state = "corner_white_full"; dir = 1 @@ -39172,6 +39156,12 @@ /obj/item/device/radio/intercom{ pixel_y = 27 }, +/obj/machinery/camera/network/medbay{ + c_tag = "Medical - Main Storage"; + dir = 8; + icon_state = "camera" + }, +/obj/item/weapon/storage/box/sharps, /turf/simulated/floor/tiled/white, /area/medical/main_storage) "boL" = ( @@ -41027,6 +41017,8 @@ icon_state = "tube1"; pixel_x = 0 }, +/obj/item/weapon/storage/box/sharps, +/obj/structure/table/standard, /turf/simulated/floor/tiled, /area/medical/gen_treatment) "brR" = ( @@ -43324,6 +43316,7 @@ /obj/item/roller{ pixel_y = 4 }, +/obj/item/weapon/storage/box/syringes, /turf/simulated/floor/tiled/white, /area/medical/medbay) "bvr" = ( @@ -44816,8 +44809,8 @@ /obj/item/weapon/storage/pill_bottle/tramadol, /obj/item/weapon/storage/pill_bottle/dylovene, /obj/item/weapon/storage/pill_bottle/dylovene, -/obj/item/weapon/reagent_containers/syringe/antiviral, -/obj/item/weapon/reagent_containers/syringe/antiviral, +/obj/item/weapon/reagent_containers/syringe/antibiotic, +/obj/item/weapon/reagent_containers/syringe/antibiotic, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, @@ -46328,10 +46321,6 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, -/obj/machinery/vending/medical{ - density = 0; - pixel_x = 32 - }, /turf/simulated/floor/tiled/white, /area/medical/medbay) "bAg" = ( @@ -47334,8 +47323,6 @@ }, /obj/item/weapon/reagent_containers/blood/OMinus, /obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, /turf/simulated/floor/tiled/freezer{ name = "cold storage tiles"; temperature = 278 @@ -48255,29 +48242,6 @@ /obj/effect/floor_decal/corner/paleblue/diagonal, /turf/simulated/floor/tiled/white, /area/medical/surgerywing) -"bDQ" = ( -/obj/structure/closet/crate/freezer{ - name = "Various Blood Packs" - }, -/obj/item/weapon/reagent_containers/blood/AMinus, -/obj/item/weapon/reagent_containers/blood/AMinus, -/obj/item/weapon/reagent_containers/blood/APlus, -/obj/item/weapon/reagent_containers/blood/APlus, -/obj/item/weapon/reagent_containers/blood/BMinus, -/obj/item/weapon/reagent_containers/blood/BMinus, -/obj/item/weapon/reagent_containers/blood/BPlus, -/obj/item/weapon/reagent_containers/blood/BPlus, -/obj/item/weapon/reagent_containers/blood/OPlus, -/obj/item/weapon/reagent_containers/blood/OPlus, -/obj/machinery/camera/network/medbay{ - c_tag = "Medical - Cold Storage"; - dir = 4 - }, -/turf/simulated/floor/tiled/freezer{ - name = "cold storage tiles"; - temperature = 278 - }, -/area/medical/surgerywing) "bDR" = ( /obj/structure/table/standard, /obj/item/weapon/storage/box/bloodpacks, @@ -52126,10 +52090,6 @@ /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/tiled/freezer, /area/maintenance/medbay) -"bLf" = ( -/obj/machinery/light/small/emergency, -/turf/simulated/floor/plating, -/area/maintenance/research_port) "bLg" = ( /obj/structure/cable{ d1 = 1; @@ -53845,6 +53805,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/machinery/iv_drip, +/obj/random/firstaid, /turf/simulated/floor/tiled, /area/maintenance/medbay) "bOB" = ( @@ -55973,7 +55934,7 @@ /obj/machinery/alarm{ pixel_y = 22 }, -/obj/structure/reagent_dispensers/beerkeg, +/obj/structure/reagent_dispensers/keg/beerkeg, /turf/simulated/floor/wood, /area/crew_quarters/bar) "bTp" = ( @@ -64260,22 +64221,13 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled, /area/maintenance/atmos_control) -"cng" = ( -/obj/structure/disposalpipe/segment{ +"cmN" = ( +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + icon_state = "rwindow"; dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/wood, +/turf/simulated/floor/carpet, /area/lawoffice) "cnM" = ( /obj/structure/closet{ @@ -64309,6 +64261,13 @@ /obj/item/weapon/bedsheet/medical, /turf/simulated/floor/tiled/white, /area/maintenance/medbay) +"cxh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/obj/machinery/meter{ + name = "Scrubbers" + }, +/turf/simulated/floor/plating, +/area/maintenance/security_starboard) "cyq" = ( /obj/machinery/door/firedoor, /obj/structure/window/reinforced{ @@ -64337,17 +64296,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, /area/maintenance/research_port) -"cFV" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1"; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/dark{ - name = "cooled dark floor"; - temperature = 278 - }, -/area/medical/temp_morgue) "cGg" = ( /obj/machinery/light/small/emergency{ dir = 8 @@ -64394,20 +64342,6 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/bridge) -"cUp" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/plating, -/area/maintenance/research_port) "cVy" = ( /turf/simulated/floor/tiled, /area/maintenance/cargo) @@ -64756,11 +64690,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/civ) -"evJ" = ( -/obj/structure/table/wood, -/obj/item/device/flashlight/lamp, -/turf/simulated/floor/carpet, -/area/lawoffice) "eye" = ( /obj/structure/window/reinforced{ dir = 8 @@ -64774,6 +64703,14 @@ /obj/random/loot, /turf/simulated/floor/plating, /area/maintenance/atmos_control) +"eJC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9; + pixel_y = 0 + }, +/turf/simulated/floor/plating, +/area/maintenance/security_starboard) "eJM" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -64845,20 +64782,6 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/library) -"eXN" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible/universal{ - dir = 4 - }, -/obj/machinery/meter{ - name = "Scrubbers" - }, -/turf/simulated/floor/plating, -/area/maintenance/research_port) "feo" = ( /obj/structure/grille/broken, /obj/machinery/door/firedoor, @@ -64889,16 +64812,10 @@ }, /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) -"foD" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/dark{ - name = "cooled dark floor"; - temperature = 278 - }, -/area/medical/temp_morgue) +"fnQ" = ( +/obj/structure/banner, +/turf/simulated/floor/wood, +/area/lawoffice) "fpD" = ( /obj/effect/floor_decal/corner/mauve{ icon_state = "corner_white"; @@ -64954,14 +64871,6 @@ /obj/random/junk, /turf/simulated/floor/plating, /area/maintenance/bar) -"fDm" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/wood, -/area/lawoffice) "fFb" = ( /obj/item/ammo_casing/c45/rubber, /turf/simulated/floor/plating, @@ -65068,23 +64977,6 @@ /obj/machinery/atmospherics/pipe/manifold4w/visible/black, /turf/simulated/floor/plating, /area/engineering/engine_waste) -"fWV" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/wood, -/area/lawoffice) "fXR" = ( /obj/structure/table/standard, /obj/item/clothing/head/beret/sec{ @@ -65099,14 +64991,6 @@ /obj/item/weapon/storage/toolbox/mechanical, /turf/simulated/floor/plating, /area/maintenance/maintcentral) -"gaq" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/starboard) "gcr" = ( /obj/structure/table/standard, /obj/structure/cable/green{ @@ -65165,12 +65049,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/medbay) -"gyw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/plating, -/area/maintenance/research_port) "gBP" = ( /obj/structure/closet{ name = "Patient's Closet" @@ -65206,6 +65084,7 @@ /obj/item/clothing/gloves/latex, /obj/item/clothing/mask/surgical, /obj/random/medical, +/obj/random/medical, /turf/simulated/floor/carpet/blue, /area/maintenance/medbay) "gIs" = ( @@ -65222,10 +65101,6 @@ /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/white, /area/medical/medbay2) -"gMu" = ( -/obj/structure/banner, -/turf/simulated/floor/wood, -/area/lawoffice) "gNU" = ( /obj/structure/table/wood, /obj/item/weapon/flame/candle{ @@ -65351,15 +65226,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/reinforced, /area/maintenance/research_port) -"hoz" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal{ - dir = 4 - }, -/obj/machinery/meter{ - name = "Air supply" - }, -/turf/simulated/floor/plating, -/area/maintenance/research_port) "hqy" = ( /obj/structure/grille, /obj/machinery/door/firedoor, @@ -65416,6 +65282,14 @@ /obj/structure/table/standard, /turf/simulated/floor/tiled/white, /area/rnd/misc_lab) +"hxj" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/starboard) "hxQ" = ( /obj/structure/cable/green{ d1 = 4; @@ -65625,27 +65499,38 @@ /obj/machinery/portable_atmospherics/canister/empty, /turf/simulated/floor/plating, /area/maintenance/engineering) +"icZ" = ( +/obj/structure/table/standard, +/obj/effect/decal/cleanable/dirt, +/obj/random/junk, +/obj/random/medical, +/turf/simulated/floor/tiled/white, +/area/maintenance/medbay) "ifx" = ( -/obj/structure/closet/crate/freezer{ - name = "O- Blood Packs" - }, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/item/weapon/reagent_containers/blood/OMinus, -/obj/effect/floor_decal/industrial/hatch/red, /turf/simulated/floor/tiled/white, /area/medical/main_storage) -"inu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 +"ihp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/maintenance/research_port) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/starboard) "ipL" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -65668,6 +65553,14 @@ }, /turf/simulated/floor/tiled/white, /area/medical/medbay2) +"ism" = ( +/obj/structure/table/wood, +/obj/machinery/photocopier/faxmachine{ + anchored = 0; + department = "Representative's Office" + }, +/turf/simulated/floor/carpet, +/area/lawoffice) "izC" = ( /obj/structure/cable{ d1 = 1; @@ -65926,13 +65819,16 @@ /obj/effect/floor_decal/corner/lime/full, /turf/simulated/floor/tiled/white, /area/medical/medbay2) -"jKE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/machinery/meter{ - name = "Scrubbers" +"jMF" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" }, -/turf/simulated/floor/plating, -/area/maintenance/security_starboard) +/turf/simulated/floor/tiled/dark{ + name = "cooled dark floor"; + temperature = 278 + }, +/area/medical/temp_morgue) "jOm" = ( /obj/machinery/door/firedoor, /obj/effect/decal/cleanable/dirt, @@ -65970,14 +65866,6 @@ }, /turf/simulated/floor/tiled/white, /area/maintenance/medbay) -"kaT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/turf/simulated/floor/plating, -/area/maintenance/security_starboard) "kbF" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/alarm{ @@ -66036,20 +65924,6 @@ /obj/structure/curtain/medical, /turf/simulated/floor/tiled/white, /area/maintenance/medbay) -"kgo" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/research_port) "khX" = ( /obj/random/junk, /obj/effect/decal/cleanable/dirt, @@ -66152,12 +66026,6 @@ }, /turf/simulated/floor/tiled/dark, /area/crew_quarters/medbreak) -"kKm" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/lawoffice) "kMO" = ( /obj/structure/grille, /obj/machinery/door/firedoor, @@ -66233,6 +66101,20 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/carpet/blue, /area/maintenance/medbay) +"lhb" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "lhs" = ( /obj/structure/window/phoronreinforced, /obj/structure/grille/broken, @@ -66267,14 +66149,6 @@ }, /turf/simulated/floor/plating, /area/engineering/engine_waste) -"lmc" = ( -/obj/structure/table/wood, -/obj/machinery/photocopier/faxmachine{ - anchored = 0; - department = "Representative's Office" - }, -/turf/simulated/floor/carpet, -/area/lawoffice) "lmd" = ( /obj/machinery/atmospherics/portables_connector, /obj/machinery/portable_atmospherics/canister/air/airlock, @@ -66323,6 +66197,20 @@ /obj/structure/reagent_dispensers/fueltank, /turf/simulated/floor/tiled, /area/maintenance/cargo) +"luW" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/universal{ + dir = 4 + }, +/obj/machinery/meter{ + name = "Scrubbers" + }, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "lyh" = ( /obj/machinery/camera/network/engineering{ c_tag = "Maintenance - Atmospherics" @@ -66660,14 +66548,6 @@ roof_type = null }, /area/maintenance/maintcentral) -"mGX" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - icon_state = "rwindow"; - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/lawoffice) "mIZ" = ( /obj/machinery/atmospherics/pipe/manifold/hidden, /turf/simulated/floor/plating, @@ -66694,6 +66574,20 @@ }, /turf/simulated/floor/plating, /area/maintenance/library) +"mJV" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "mKz" = ( /turf/simulated/wall, /area/maintenance/library) @@ -66751,6 +66645,7 @@ /obj/structure/table/standard, /obj/effect/decal/cleanable/dirt, /obj/item/weapon/towel/random, +/obj/random/medical, /turf/simulated/floor/tiled/white, /area/maintenance/medbay) "ndP" = ( @@ -67257,6 +67152,13 @@ }, /turf/simulated/floor/plating, /area/rnd/chemistry) +"pTa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9; + pixel_y = 0 + }, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "pUs" = ( /obj/structure/cable{ d1 = 1; @@ -67270,6 +67172,23 @@ }, /turf/simulated/floor/plating, /area/maintenance/medbay) +"pYv" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood, +/area/lawoffice) "pZo" = ( /obj/structure/cable{ d1 = 4; @@ -67299,6 +67218,17 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/engineering) +"qqL" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube1"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/dark{ + name = "cooled dark floor"; + temperature = 278 + }, +/area/medical/temp_morgue) "qrJ" = ( /obj/structure/grille, /obj/machinery/door/firedoor, @@ -67313,28 +67243,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/medbay) -"qto" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/starboard) "qtu" = ( /obj/structure/cable{ d1 = 4; @@ -67377,17 +67285,6 @@ /obj/structure/grille, /turf/simulated/floor/plating, /area/rnd/misc_lab) -"qzi" = ( -/obj/machinery/door/firedoor{ - enable_smart_generation = 0 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/starboard) "qzz" = ( /obj/item/weapon/clipboard, /obj/item/stack/packageWrap, @@ -67508,6 +67405,13 @@ /obj/structure/reagent_dispensers/watertank, /turf/simulated/floor/tiled, /area/maintenance/engineering) +"raK" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Maintenance Access"; + req_access = list(38) + }, +/turf/simulated/floor/wood, +/area/lawoffice) "rcu" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -67720,6 +67624,11 @@ }, /turf/simulated/floor/plating, /area/maintenance/research_port) +"rTr" = ( +/obj/structure/table/wood, +/obj/item/device/flashlight/lamp, +/turf/simulated/floor/carpet, +/area/lawoffice) "rUQ" = ( /obj/effect/floor_decal/corner/grey{ icon_state = "corner_white"; @@ -67876,13 +67785,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/research_port) -"sOz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, -/turf/simulated/floor/plating, -/area/maintenance/research_port) "sQW" = ( /obj/machinery/power/apc{ dir = 1; @@ -67923,6 +67825,18 @@ /obj/effect/decal/cleanable/flour, /turf/simulated/floor/plating, /area/maintenance/civ) +"tdO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "tjF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/red, /obj/machinery/hologram/holopad, @@ -68513,6 +68427,17 @@ }, /turf/simulated/floor/tiled/white, /area/maintenance/medbay) +"vKT" = ( +/obj/machinery/door/firedoor{ + enable_smart_generation = 0 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/starboard) "vMv" = ( /obj/effect/floor_decal/industrial/warning/dust{ icon_state = "warning_dust"; @@ -68535,6 +68460,10 @@ icon_state = "asteroidplating" }, /area/mine/unexplored) +"vNa" = ( +/obj/machinery/light/small/emergency, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "vNh" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -68550,6 +68479,12 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled, /area/maintenance/atmos_control) +"vOH" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/lawoffice) "vPm" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -68586,6 +68521,15 @@ /obj/structure/reagent_dispensers/watertank, /turf/simulated/floor/plating, /area/maintenance/library) +"waD" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal{ + dir = 4 + }, +/obj/machinery/meter{ + name = "Air supply" + }, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "wbf" = ( /obj/structure/cable{ d1 = 1; @@ -68600,13 +68544,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/medbay) -"wfO" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Maintenance Access"; - req_access = list(38) - }, -/turf/simulated/floor/wood, -/area/lawoffice) "whu" = ( /obj/structure/disposalpipe/trunk{ dir = 4 @@ -68621,6 +68558,11 @@ }, /turf/simulated/floor/tiled/white, /area/rnd/lab) +"whL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/keg, +/turf/simulated/floor/plating, +/area/maintenance/civ) "wkb" = ( /obj/machinery/vending/snack, /turf/simulated/floor/tiled, @@ -68945,6 +68887,12 @@ /obj/item/weapon/reagent_containers/blood/empty, /turf/simulated/floor/tiled/freezer, /area/maintenance/medbay) +"xIw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "xJi" = ( /obj/machinery/embedded_controller/radio/airlock/airlock_controller{ frequency = 1379; @@ -83826,11 +83774,11 @@ aHx asw aKU aMF -kgo +mJV aQb aRP aUW -inu +tdO aVY aXH aYT @@ -87207,7 +87155,7 @@ bbs beC bbs aOv -gyw +xIw bcY bbs bbs @@ -87463,9 +87411,9 @@ beC bbs bcY bbs -eXN -hoz -bLf +luW +waD +vNa bbs bMw bNh @@ -87720,8 +87668,8 @@ bcY bbs bcY bcY -cUp -sOz +lhb +pTa bcY bbs bMx @@ -101779,8 +101727,8 @@ aaO aaT abk abH -kaT -jKE +eJC +cxh acy aah aaD @@ -104400,7 +104348,7 @@ bdH bff bgt bhO -bjc +bfi bkm bln bmM @@ -105659,13 +105607,13 @@ agy agy arY atr -lmc +ism auY ayo azQ awB aEJ -gMu +fnQ awE atr aKb @@ -105686,7 +105634,7 @@ bfk bgx bhT bjg -bko +bjh bjh bmR bor @@ -105918,7 +105866,7 @@ arZ atr hGy auY -evJ +rTr awC ayp aCV @@ -106169,7 +106117,7 @@ alc xoy acV adk -adk +whL acU arZ atr @@ -106177,7 +106125,7 @@ auZ awD awD azS -mGX +cmN aCV awE aGI @@ -106217,7 +106165,7 @@ bAn bvz bCb bCc -bDQ +bCc bvz bAn bzl @@ -106429,7 +106377,7 @@ acV apy acU arZ -wfO +raK awE awE ayr @@ -106691,9 +106639,9 @@ avb awF ays awE -kKm -fWV -fDm +vOH +aCU +aEN aGK atr aKd @@ -106949,7 +106897,7 @@ awG ayt azU aBq -cng +pYv aEO aGL atr @@ -107977,12 +107925,12 @@ awK awK awK aBu -gaq +hxj aNS aNS -qzi +vKT aNS -qto +ihp awK aPy aRe @@ -109818,7 +109766,7 @@ uVs blN nJe ohn -ujU +icZ bHG nug rcu @@ -110836,7 +110784,7 @@ bsj bng buD bvI -cFV +qqL byb buC bAv @@ -111606,7 +111554,7 @@ brh bsm bng buG -foD +jMF xhC byb buC diff --git a/maps/exodus/exodus-1_station.dmm b/maps/exodus/exodus-1_station.dmm index 1ac1133693b..6218925086f 100644 --- a/maps/exodus/exodus-1_station.dmm +++ b/maps/exodus/exodus-1_station.dmm @@ -2486,7 +2486,7 @@ /obj/item/clothing/mask/balaclava, /obj/effect/decal/cleanable/cobweb2, /obj/item/clothing/mask/muzzle, -/obj/item/weapon/reagent_containers/syringe/ld50_syringe/choral, +/obj/item/weapon/reagent_containers/syringe/ld50_syringe/chloral, /obj/effect/landmark{ name = "blobstart" }, @@ -20819,7 +20819,7 @@ /turf/simulated/floor/lino, /area/crew_quarters/bar) "aLU" = ( -/obj/structure/reagent_dispensers/beerkeg, +/obj/structure/reagent_dispensers/keg/beerkeg, /obj/machinery/requests_console{ announcementConsole = 0; department = "Bar"; diff --git a/maps/exodus/exodus-2_centcomm.dmm b/maps/exodus/exodus-2_centcomm.dmm index 7486b5ecd51..ee7282de62b 100644 --- a/maps/exodus/exodus-2_centcomm.dmm +++ b/maps/exodus/exodus-2_centcomm.dmm @@ -8872,7 +8872,7 @@ name = "\improper Raider Base" }) "azH" = ( -/obj/structure/reagent_dispensers/beerkeg, +/obj/structure/reagent_dispensers/keg/beerkeg, /turf/unsimulated/floor{ dir = 8; icon_state = "wood" @@ -21024,7 +21024,7 @@ }, /area/centcom/holding) "rQV" = ( -/obj/structure/reagent_dispensers/beerkeg, +/obj/structure/reagent_dispensers/keg/beerkeg, /turf/unsimulated/floor{ icon_state = "redbluefull"; dir = 8 diff --git a/maps/space_ruins/crashed_freighter.dmm b/maps/space_ruins/crashed_freighter.dmm index 77d685f7052..d4177be93fb 100644 --- a/maps/space_ruins/crashed_freighter.dmm +++ b/maps/space_ruins/crashed_freighter.dmm @@ -1196,7 +1196,7 @@ /area/derelict/ship) "eb" = ( /obj/effect/floor_decal/industrial/outline, -/obj/structure/reagent_dispensers/xuizikeg, +/obj/structure/reagent_dispensers/keg/xuizikeg, /turf/simulated/floor/tiled/dark, /area/derelict/ship) "ec" = ( diff --git a/maps/space_ruins/derelict.dmm b/maps/space_ruins/derelict.dmm index b0540b5443c..2b2fe483084 100644 --- a/maps/space_ruins/derelict.dmm +++ b/maps/space_ruins/derelict.dmm @@ -3665,7 +3665,7 @@ /turf/simulated/floor/wood, /area/derelict/hallway/southwest) "lB" = ( -/obj/structure/reagent_dispensers/beerkeg, +/obj/structure/reagent_dispensers/keg/beerkeg, /turf/template_noop, /area/template_noop) "lC" = ( diff --git a/maps/space_ruins/nt_cloneship.dmm b/maps/space_ruins/nt_cloneship.dmm index a68f549555f..8df1a18888a 100644 --- a/maps/space_ruins/nt_cloneship.dmm +++ b/maps/space_ruins/nt_cloneship.dmm @@ -3540,7 +3540,7 @@ /turf/simulated/floor/tiled, /area/derelict/ship) "iX" = ( -/obj/structure/reagent_dispensers/beerkeg, +/obj/structure/reagent_dispensers/keg/beerkeg, /turf/simulated/floor/tiled/freezer, /area/derelict/ship) "iY" = ( diff --git a/maps/space_ruins/tcfl_frigate.dmm b/maps/space_ruins/tcfl_frigate.dmm index e21944c5a00..9e9fd20e63e 100644 --- a/maps/space_ruins/tcfl_frigate.dmm +++ b/maps/space_ruins/tcfl_frigate.dmm @@ -2673,7 +2673,7 @@ /turf/simulated/floor/tiled/dark, /area/derelict/arrival) "id" = ( -/obj/structure/reagent_dispensers/beerkeg, +/obj/structure/reagent_dispensers/keg/beerkeg, /obj/effect/floor_decal/corner/black/diagonal, /turf/simulated/floor/tiled/white, /area/derelict/arrival)