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 16ad973ab48..0347ab765af 100644
Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ
diff --git a/icons/obj/makeshift_workstation.dmi b/icons/obj/makeshift_workstation.dmi
new file mode 100644
index 00000000000..ef450e0eeb2
Binary files /dev/null and b/icons/obj/makeshift_workstation.dmi differ
diff --git a/icons/obj/reagentfillings.dmi b/icons/obj/reagentfillings.dmi
index 56a8cff6abb..2c659daa831 100644
Binary files a/icons/obj/reagentfillings.dmi and b/icons/obj/reagentfillings.dmi differ
diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi
index 2b2e03df2da..98b90edf05f 100644
Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ
diff --git a/icons/obj/syringe.dmi b/icons/obj/syringe.dmi
index 66b7d60306a..26a3e8313d5 100644
Binary files a/icons/obj/syringe.dmi and b/icons/obj/syringe.dmi differ
diff --git a/icons/obj/syringefilling.dmi b/icons/obj/syringefilling.dmi
deleted file mode 100644
index 5c5cac840e9..00000000000
Binary files a/icons/obj/syringefilling.dmi and /dev/null differ
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)