| [gang_name("B")] Gang: [(ticker.mode.gang_points ? "[ticker.mode.gang_points.B] Influence, " : "")][round((ticker.mode.B_territory.len/start_state.num_territories)*100, 1)]% Control | |
"
for(var/datum/mind/N in ticker.mode.B_bosses)
var/mob/M = N.current
if(!M)
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index e97ee1077e4..b77f5bd6afe 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -690,7 +690,7 @@ var/global/list/g_fancy_list_of_types = null
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/thunderdome(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/destroyer(M), slot_r_hand)
- M.equip_to_slot_or_del(new /obj/item/weapon/kitchenknife(M), slot_l_hand)
+ M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/grenade/smokebomb(M), slot_r_store)
@@ -712,9 +712,9 @@ var/global/list/g_fancy_list_of_types = null
M.equip_to_slot_or_del(new /obj/item/clothing/head/chefhat(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/rollingpin(M), slot_r_hand)
- M.equip_to_slot_or_del(new /obj/item/weapon/kitchenknife(M), slot_l_hand)
- M.equip_to_slot_or_del(new /obj/item/weapon/kitchenknife(M), slot_r_store)
- M.equip_to_slot_or_del(new /obj/item/weapon/kitchenknife(M), slot_s_store)
+ M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_hand)
+ M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_r_store)
+ M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_s_store)
if ("tournament janitor")
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/janitor(M), slot_w_uniform)
@@ -807,7 +807,7 @@ var/global/list/g_fancy_list_of_types = null
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/apron(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/weapon/kitchenknife(M), slot_l_store)
+ M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/scalpel(M), slot_r_store)
var/obj/item/weapon/twohanded/fireaxe/fire_axe = new(M)
@@ -1276,4 +1276,4 @@ var/global/list/g_fancy_list_of_types = null
W.assignment = "Centcom Official"
W.registered_name = M.real_name
W.update_label()
- M.equip_to_slot_or_del(W, slot_wear_id)
\ No newline at end of file
+ M.equip_to_slot_or_del(W, slot_wear_id)
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index bd3044071c4..201dde00b62 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -62,6 +62,7 @@ datum/preferences
var/eye_color = "000" //Eye color
var/datum/species/pref_species = new /datum/species/human() //Mutant race
var/mutant_color = "FFF" //Mutant race skin color
+ var/list/custom_names = list("clown", "mime", "ai", "cyborg", "religion", "deity")
//Mob preview
var/icon/preview_icon_front = null
@@ -94,6 +95,10 @@ datum/preferences
/datum/preferences/New(client/C)
blood_type = random_blood_type()
ooccolor = normal_ooc_colour
+ custom_names["ai"] = pick(ai_names)
+ custom_names["cyborg"] = pick(ai_names)
+ custom_names["clown"] = pick(clown_names)
+ custom_names["mime"] = pick(mime_names)
if(istype(C))
if(!IsGuestKey(C.key))
load_path(C.ckey)
@@ -158,10 +163,18 @@ datum/preferences
dat += "[real_name]
"
dat += "Gender: [gender == MALE ? "Male" : "Female"]
"
- dat += "Age: [age]"
+ dat += "Age: [age]
"
+
+ dat += "Special Names:
"
+ dat += "Clown: [custom_names["clown"]] "
+ dat += "Mime:[custom_names["mime"]]
"
+ dat += "AI: [custom_names["ai"]] "
+ dat += "Cyborg: [custom_names["cyborg"]]
"
+ dat += "Chaplain religion: [custom_names["religion"]] "
+ dat += "Chaplain deity: [custom_names["deity"]]
"
- dat += ""
+ dat += " | "
dat += ""
@@ -182,11 +195,11 @@ datum/preferences
dat += "Underwear: [underwear] "
dat += "Undershirt: [undershirt] "
dat += "Socks: [socks] "
- dat += "Backpack: [backbaglist[backbag]] "
+ dat += "Backpack: [backbaglist[backbag]]
| "
if(pref_species.use_skintones)
- dat += ""
+ dat += " | "
dat += "Skin Tone"
@@ -304,7 +317,7 @@ datum/preferences
dat += ""
//user << browse(dat, "window=preferences;size=560x560")
- var/datum/browser/popup = new(user, "preferences", "Character Setup ", 640, 680)
+ var/datum/browser/popup = new(user, "preferences", "Character Setup ", 640, 750)
popup.set_content(dat)
popup.open(0)
@@ -752,6 +765,50 @@ datum/preferences
var/new_backbag = input(user, "Choose your character's style of bag:", "Character Preference") as null|anything in backbaglist
if(new_backbag)
backbag = backbaglist.Find(new_backbag)
+
+ if("clown_name")
+ var/new_clown_name = reject_bad_name( input(user, "Choose your character's clown name:", "Character Preference") as text|null )
+ if(new_clown_name)
+ custom_names["clown"] = new_clown_name
+ else
+ user << "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and ."
+
+ if("mime_name")
+ var/new_mime_name = reject_bad_name( input(user, "Choose your character's mime name:", "Character Preference") as text|null )
+ if(new_mime_name)
+ custom_names["mime"] = new_mime_name
+ else
+ user << "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and ."
+
+ if("ai_name")
+ var/new_ai_name = reject_bad_name( input(user, "Choose your character's AI name:", "Character Preference") as text|null, 1 )
+ if(new_ai_name)
+ custom_names["ai"] = new_ai_name
+ else
+ user << "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, 0-9, -, ' and ."
+
+ if("cyborg_name")
+ var/new_cyborg_name = reject_bad_name( input(user, "Choose your character's cyborg name:", "Character Preference") as text|null, 1 )
+ if(new_cyborg_name)
+ custom_names["cyborg"] = new_cyborg_name
+ else
+ user << "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, 0-9, -, ' and ."
+
+ if("religion_name")
+ var/new_religion_name = reject_bad_name( input(user, "Choose your character's mime name:", "Character Preference") as text|null )
+ if(new_religion_name)
+ custom_names["religion"] = new_religion_name
+ else
+ user << "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and ."
+
+ if("deity_name")
+ var/new_deity_name = reject_bad_name( input(user, "Choose your character's mime name:", "Character Preference") as text|null )
+ if(new_deity_name)
+ custom_names["deity"] = new_deity_name
+ else
+ user << "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and ."
+
+
else
switch(href_list["preference"])
if("publicity")
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 604bbd57069..f2da84ddd52 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -187,6 +187,12 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["socks"] >> socks
S["backbag"] >> backbag
S["mutant_color"] >> mutant_color
+ S["clown_name"] >> custom_names["clown"]
+ S["mime_name"] >> custom_names["mime"]
+ S["ai_name"] >> custom_names["ai"]
+ S["cyborg_name"] >> custom_names["cyborg"]
+ S["religion_name"] >> custom_names["religion"]
+ S["deity_name"] >> custom_names["deity"]
//Jobs
S["userandomjob"] >> userandomjob
@@ -274,6 +280,12 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["backbag"] << backbag
S["species"] << pref_species.name
S["mutant_color"] << mutant_color
+ S["clown_name"] << custom_names["clown"]
+ S["mime_name"] << custom_names["mime"]
+ S["ai_name"] << custom_names["ai"]
+ S["cyborg_name"] << custom_names["cyborg"]
+ S["religion_name"] << custom_names["religion"]
+ S["deity_name"] << custom_names["deity"]
//Jobs
S["userandomjob"] << userandomjob
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
index cd9c96ae388..3675ba81ded 100644
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ b/code/modules/clothing/shoes/miscellaneous.dm
@@ -1,7 +1,7 @@
/obj/item/clothing/shoes/proc/step_action() //this was made to rewrite clown shoes squeaking
-/obj/item/clothing/shoes/syndigaloshes
- desc = "A pair of brown shoes. They seem to have extra grip."
+/obj/item/clothing/shoes/sneakers/syndigaloshes
+ desc = "A pair of brown shoes."
name = "brown shoes"
icon_state = "brown"
item_state = "brown"
diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm
index c59e0ef4c62..04679faa2c5 100644
--- a/code/modules/clothing/spacesuits/chronosuit.dm
+++ b/code/modules/clothing/spacesuits/chronosuit.dm
@@ -25,6 +25,7 @@
action_button_name = "Toggle Chronosuit"
slowdown = 2
armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 30, bio = 90, rad = 90)
+ var/list/chronosafe_items = list(/obj/item/weapon/chrono_eraser, /obj/item/weapon/gun/energy/chrono_gun)
var/obj/item/clothing/head/helmet/space/chronos/helmet = null
var/obj/effect/chronos_cam/camera = null
var/activating = 0
@@ -74,6 +75,13 @@
var/turf/to_turf = from_turf
var/atom/movable/overlay/phaseanim = new(from_turf)
var/obj/holder = new(camera)
+
+ var/list/nonsafe_slots = list(slot_belt, slot_back, slot_l_hand, slot_r_hand)
+ for(var/slot in nonsafe_slots)
+ var/obj/item/slot_item = user.get_item_by_slot(slot)
+ if(slot_item && !(slot_item.type in chronosafe_items) && user.unEquip(slot_item))
+ user << "Your [slot_item.name] got left behind."
+
phaseanim.name = "phasing [user.name]"
phaseanim.icon = 'icons/mob/mob.dmi'
phaseanim.icon_state = "chronostuck"
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index b9ecf892582..512d464f7cb 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -60,7 +60,7 @@
gas_transfer_coefficient = 0.90
permeability_coefficient = 0.50
body_parts_covered = CHEST|GROIN|ARMS
- allowed = list(/obj/item/weapon/kitchenknife)
+ allowed = list(/obj/item/weapon/kitchen)
togglename = "sleeves"
//Cook
@@ -71,7 +71,7 @@
item_state = "apronchef"
blood_overlay_type = "armor"
body_parts_covered = CHEST|GROIN
- allowed = list(/obj/item/weapon/kitchenknife)
+ allowed = list(/obj/item/weapon/kitchen)
//Detective
/obj/item/clothing/suit/det_suit
diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm
index e4ec5e8fd5a..b3f8c13c50c 100644
--- a/code/modules/events/spacevine.dm
+++ b/code/modules/events/spacevine.dm
@@ -344,7 +344,8 @@
qdel(src)
/obj/effect/spacevine/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
- if (!W || !user || !W.type) return
+ if (!W || !user || !W.type)
+ return
user.changeNext_move(CLICK_CD_MELEE)
var/override = 0
@@ -356,33 +357,22 @@
..()
return
- switch(W.type)
- if(/obj/item/weapon/circular_saw) qdel(src)
- if(/obj/item/weapon/kitchen/utensil/knife) qdel(src)
- if(/obj/item/weapon/scalpel) qdel(src)
- if(/obj/item/weapon/twohanded/fireaxe) qdel(src)
- if(/obj/item/weapon/hatchet) qdel(src)
- if(/obj/item/weapon/melee/energy) qdel(src)
- if(/obj/item/weapon/scythe)
- for(var/obj/effect/spacevine/B in orange(src,1))
- if(prob(80))
- qdel(B)
+ if(istype(W, /obj/item/weapon/scythe))
+ for(var/obj/effect/spacevine/B in orange(src,1))
+ if(prob(80))
+ qdel(B)
+ qdel(src)
+
+ else if(is_sharp(W))
+ qdel(src)
+
+ else if(istype(W, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = W
+ if(WT.remove_fuel(0, user))
qdel(src)
-
- //less effective weapons
- if(/obj/item/weapon/wirecutters)
- if(prob(25)) qdel(src)
- if(/obj/item/weapon/shard)
- if(prob(25)) qdel(src)
-
- else //weapons with subtypes
- if(istype(W, /obj/item/weapon/melee/energy/sword)) qdel(src)
- else if(istype(W, /obj/item/weapon/weldingtool))
- var/obj/item/weapon/weldingtool/WT = W
- if(WT.remove_fuel(0, user)) qdel(src)
- else
- user_unbuckle_mob(user,user)
- return
+ else
+ user_unbuckle_mob(user,user)
+ return
//Plant-b-gone damage is handled in its entry in chemistry-reagents.dm
..()
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index 1327d56fac9..6ca06a27ee7 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -345,7 +345,7 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/ite
/obj/item/weapon/gun/energy/kinetic_accelerator/crossbow, /obj/item/weapon/melee/energy/sword/saber,\
/obj/item/weapon/storage/box/syndicate, /obj/item/weapon/storage/box/emps,\
/obj/item/weapon/cartridge/syndicate, /obj/item/clothing/under/chameleon,\
- /obj/item/clothing/shoes/syndigaloshes, /obj/item/weapon/card/id/syndicate,\
+ /obj/item/clothing/shoes/sneakers/syndigaloshes, /obj/item/weapon/card/id/syndicate,\
/obj/item/clothing/mask/gas/voice, /obj/item/clothing/glasses/thermal,\
/obj/item/device/chameleon, /obj/item/weapon/card/emag,\
/obj/item/weapon/storage/toolbox/syndicate, /obj/item/weapon/aiModule,\
diff --git a/code/modules/food&drinks/food/snacks_egg.dm b/code/modules/food&drinks/food/snacks_egg.dm
index 608064ed01b..08e3076e190 100644
--- a/code/modules/food&drinks/food/snacks_egg.dm
+++ b/code/modules/food&drinks/food/snacks_egg.dm
@@ -98,18 +98,20 @@
w_class = 3
/obj/item/weapon/reagent_containers/food/snacks/omelette/attackby(obj/item/weapon/W, mob/user, params)
- if(istype(W,/obj/item/weapon/kitchen/utensil/fork))
- if(W.icon_state == "forkloaded")
+ if(istype(W,/obj/item/weapon/kitchen/fork))
+ var/obj/item/weapon/kitchen/fork/F = W
+ if(F.forkload)
user << "You already have omelette on your fork!"
- return
- W.icon_state = "forkloaded"
- user.visible_message( \
- "[user] takes a piece of omelette with their fork!", \
- "You take a piece of omelette with your fork." \
- )
- reagents.remove_reagent("nutriment", 1)
- if(reagents.total_volume <= 0)
- qdel(src)
+ else
+ F.icon_state = "forkloaded"
+ user.visible_message("[user] takes a piece of omelette with their fork!", \
+ "You take a piece of omelette with your fork.")
+
+ var/datum/reagent/R = pick(reagents.reagent_list)
+ reagents.remove_reagent(R.id, 1)
+ F.forkload = R
+ if(reagents.total_volume <= 0)
+ qdel(src)
return
..()
diff --git a/code/modules/food&drinks/recipes/drinks_recipes.dm b/code/modules/food&drinks/recipes/drinks_recipes.dm
index 6af179bf2f1..36b21ba2d4b 100644
--- a/code/modules/food&drinks/recipes/drinks_recipes.dm
+++ b/code/modules/food&drinks/recipes/drinks_recipes.dm
@@ -206,7 +206,8 @@
name = "Hooch"
id = "hooch"
result = "hooch"
- required_reagents = list ("sugar" = 1, "ethanol" = 2, "fuel" = 1)
+ required_reagents = list ("ethanol" = 2, "fuel" = 1)
+ required_catalysts = list("enzyme" = 1)
result_amount = 3
/datum/chemical_reaction/irish_coffee
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index 361fe6843b0..3ae3ad8741f 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -824,7 +824,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob, p
break
else //If the player has ghosted from his corpse before blood was drawn, his ckey is no longer attached to the mob, so we need to match up the cloned player through the mind key
for(var/mob/M in player_list)
- if(ckey(M.mind.key) == ckey(mind.key) && M.ckey && M.client && M.stat == 2 && !M.suiciding)
+ if(mind && M.mind && ckey(M.mind.key) == ckey(mind.key) && M.ckey && M.client && M.stat == 2 && !M.suiciding)
if(istype(M, /mob/dead/observer))
var/mob/dead/observer/O = M
if(!O.can_reenter_corpse)
diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm
index 1b0fc3f450d..b22c6d40087 100644
--- a/code/modules/library/lib_items.dm
+++ b/code/modules/library/lib_items.dm
@@ -250,7 +250,7 @@
scanner.computer.inventory.Add(src)
user << "[I]'s screen flashes: 'Book stored in buffer. Title added to general inventory.'"
- else if(istype(I, /obj/item/weapon/kitchenknife) || istype(I, /obj/item/weapon/wirecutters))
+ else if(istype(I, /obj/item/weapon/kitchen/knife) || istype(I, /obj/item/weapon/wirecutters))
user << "You begin to carve out [title]..."
if(do_after(user, 30))
user << "You carve out the pages from [title]! You didn't want to read it anyway."
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index e03f3c5464d..2c7083a8206 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -63,17 +63,7 @@ var/list/ai_list = list()
var/apc_override = 0 //hack for letting the AI use its APC even when visionless
/mob/living/silicon/ai/New(loc, var/datum/ai_laws/L, var/obj/item/device/mmi/B, var/safety = 0)
- var/list/possibleNames = ai_names
-
- var/pickedName = null
- while(!pickedName)
- pickedName = pick(ai_names)
- for (var/mob/living/silicon/ai/A in mob_list)
- if (A.real_name == pickedName && possibleNames.len > 1) //fixing the theoretically possible infinite loop
- possibleNames -= pickedName
- pickedName = null
-
- real_name = pickedName
+ rename_self("ai", 1)
name = real_name
anchored = 1
canmove = 0
diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
index 750e20450f8..3eced450fed 100644
--- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
+++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
@@ -25,7 +25,6 @@
name = "giant spider"
desc = "Furry and black, it makes you shudder to look at it. This one has deep red eyes."
icon_state = "guard"
- var/butcher_state = 8 // Icon state for dead spider icons
icon_living = "guard"
icon_dead = "guard_dead"
speak_emote = list("chitters")
@@ -95,18 +94,11 @@
stop_automated_movement = 0
walk(src,0)
-// Chops off each leg with a 50/50 chance of harvesting one, until finally calling
-// default harvest action
-/mob/living/simple_animal/hostile/poison/giant_spider/harvest(mob/living/user, sharpness = 1)
- if(butcher_state > 0)
- butcher_state--
- icon_state = icon_dead + "[butcher_state]"
-
- if(prob(50))
- new /obj/item/weapon/reagent_containers/food/snacks/spiderleg(src.loc)
- return
- else
- return ..()
+/mob/living/simple_animal/hostile/poison/giant_spider/harvest(mob/living/user)
+ var/leg_amount = rand(4,8)
+ for(var/i=0, iYou begin to butcher [src]..."
+ playsound(loc, 'sound/weapons/slice.ogg', 50, 1, -1)
+ if(do_mob(user, src, 80/sharpness))
+ harvest(user)
return
..()
@@ -461,13 +464,9 @@
new childtype(loc)
// Harvest an animal's delicious byproducts
-/mob/living/simple_animal/proc/harvest(mob/living/user, sharpness = 1)
- user << "You begin to butcher [src]..."
- playsound(loc, 'sound/weapons/slice.ogg', 50, 1, -1)
- if(do_mob(user, src, 80/sharpness))
- visible_message("[user] butchers [src].")
- gib()
- return
+/mob/living/simple_animal/proc/harvest(mob/living/user)
+ visible_message("[user] butchers [src].")
+ gib()
/mob/living/simple_animal/stripPanelUnequip(obj/item/what, mob/who, where, child_override)
if(!child_override)
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index c9d1843bf78..3b8a4401cbd 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -308,9 +308,6 @@
var/mob/living/silicon/robot/O = new /mob/living/silicon/robot( loc )
- if (config.rename_cyborg)
- O.rename_self("cyborg", 1)
-
// cyborgs produced by Robotize get an automatic power cell
O.cell = new(O)
O.cell.maxcharge = 7500
@@ -330,6 +327,9 @@
O.update_pipe_vision()
+ if (config.rename_cyborg)
+ O.rename_self("cyborg", 1)
+
O.loc = loc
O.job = "Cyborg"
O.notify_ai(1)
diff --git a/code/modules/nano/nanomanager.dm b/code/modules/nano/nanomanager.dm
index 07a6a4570dc..09b8a4796be 100644
--- a/code/modules/nano/nanomanager.dm
+++ b/code/modules/nano/nanomanager.dm
@@ -141,7 +141,8 @@
return 0 // wasn't open
processing_uis.Remove(ui)
- ui.user.open_uis.Remove(ui)
+ if(ui.user) // Sanity check in case a user has been deleted (say a blown up borg watching the alarm interface)
+ ui.user.open_uis.Remove(ui)
var/list/uis = open_uis[src_object_key][ui.ui_key]
return uis.Remove(ui)
diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm
index 68bf7c270b0..9875876172b 100644
--- a/code/modules/power/cell.dm
+++ b/code/modules/power/cell.dm
@@ -125,30 +125,7 @@
ex_act(1)
/obj/item/weapon/stock_parts/cell/proc/get_electrocute_damage()
- switch (charge)
-/* if (9000 to INFINITY)
- return min(rand(90,150),rand(90,150))
- if (2500 to 9000-1)
- return min(rand(70,145),rand(70,145))
- if (1750 to 2500-1)
- return min(rand(35,110),rand(35,110))
- if (1500 to 1750-1)
- return min(rand(30,100),rand(30,100))
- if (750 to 1500-1)
- return min(rand(25,90),rand(25,90))
- if (250 to 750-1)
- return min(rand(20,80),rand(20,80))
- if (100 to 250-1)
- return min(rand(20,65),rand(20,65))*/
- if (1000000 to INFINITY)
- return min(rand(50,160),rand(50,160))
- if (200000 to 1000000-1)
- return min(rand(25,80),rand(25,80))
- if (100000 to 200000-1)//Ave powernet
- return min(rand(20,60),rand(20,60))
- if (50000 to 100000-1)
- return min(rand(15,40),rand(15,40))
- if (1000 to 50000-1)
- return min(rand(10,20),rand(10,20))
- else
- return 0
+ if(charge >= 1000)
+ return Clamp(round(charge/10000), 10, 90) + rand(-5,5)
+ else
+ return 0
\ No newline at end of file
diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm
index 36936dfdc80..da4cfbc7225 100644
--- a/code/modules/power/power.dm
+++ b/code/modules/power/power.dm
@@ -426,35 +426,10 @@
newavail = 0
/datum/powernet/proc/get_electrocute_damage()
- switch(avail)/*
- if (1300000 to INFINITY)
- return min(rand(70,150),rand(70,150))
- if (750000 to 1300000)
- return min(rand(50,115),rand(50,115))
- if (100000 to 750000-1)
- return min(rand(35,101),rand(35,101))
- if (75000 to 100000-1)
- return min(rand(30,95),rand(30,95))
- if (50000 to 75000-1)
- return min(rand(25,80),rand(25,80))
- if (25000 to 50000-1)
- return min(rand(20,70),rand(20,70))
- if (10000 to 25000-1)
- return min(rand(20,65),rand(20,65))
- if (1000 to 10000-1)
- return min(rand(10,20),rand(10,20))*/
- if (1000000 to INFINITY)
- return min(rand(50,160),rand(50,160))
- if (200000 to 1000000)
- return min(rand(25,80),rand(25,80))
- if (100000 to 200000)//Ave powernet
- return min(rand(20,60),rand(20,60))
- if (50000 to 100000)
- return min(rand(15,40),rand(15,40))
- if (1000 to 50000)
- return min(rand(10,20),rand(10,20))
- else
- return 0
+ if(avail >= 1000)
+ return Clamp(round(avail/10000), 10, 90) + rand(-5,5)
+ else
+ return 0
////////////////////////////////////////////////
// Misc.
diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm
index 010b3686cc6..fdec6f437b9 100644
--- a/code/modules/projectiles/guns/projectile/automatic.dm
+++ b/code/modules/projectiles/guns/projectile/automatic.dm
@@ -177,23 +177,19 @@
burst_size = 3
fire_delay = 2
pin = /obj/item/device/firing_pin/implant/pindicate
-
/obj/item/weapon/gun/projectile/automatic/m90/unrestricted
pin = /obj/item/device/firing_pin
-
/obj/item/weapon/gun/projectile/automatic/m90/New()
..()
underbarrel = new /obj/item/weapon/gun/projectile/revolver/grenadelauncher(src)
update_icon()
return
-
/obj/item/weapon/gun/projectile/automatic/m90/afterattack(var/atom/target, var/mob/living/user, flag, params)
if(select == 2)
underbarrel.afterattack(target, user, flag, params)
else
..()
return
-
/obj/item/weapon/gun/projectile/automatic/m90/attackby(var/obj/item/A, mob/user, params)
if(istype(A, /obj/item/ammo_casing))
if(istype(A, underbarrel.magazine.ammo_type))
@@ -201,7 +197,6 @@
underbarrel.attackby(A, user, params)
else
..()
-
/obj/item/weapon/gun/projectile/automatic/m90/update_icon()
..()
overlays.Cut()
@@ -214,7 +209,6 @@
overlays += "[initial(icon_state)]gren"
icon_state = "[initial(icon_state)][magazine ? "" : "-e"]"
return
-
/obj/item/weapon/gun/projectile/automatic/m90/burst_select()
var/mob/living/carbon/human/user = usr
switch(select)
@@ -246,4 +240,17 @@
fire_sound = 'sound/weapons/Gunshot_smg.ogg'
can_suppress = 0
burst_size = 4
+ fire_delay = 1
+
+/obj/item/weapon/gun/projectile/automatic/ar
+ name = "ARG"
+ desc = "A robust assault rile used by Nanotrasen fighting forces."
+ icon_state = "arg"
+ item_state = "arg"
+ slot_flags = 0
+ origin_tech = "combat=5;materials=1"
+ mag_type = /obj/item/ammo_box/magazine/m556
+ fire_sound = 'sound/weapons/Gunshot_smg.ogg'
+ can_suppress = 0
+ burst_size = 3
fire_delay = 1
\ No newline at end of file
diff --git a/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm b/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm
deleted file mode 100644
index 06a63b7c8cd..00000000000
--- a/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm
+++ /dev/null
@@ -1,373 +0,0 @@
-#define SOLID 1
-#define LIQUID 2
-#define GAS 3
-
-#define REM REAGENTS_EFFECT_MULTIPLIER
-
-datum/reagent/nicotine
- name = "Nicotine"
- id = "nicotine"
- description = "Slightly reduces stun times. If overdosed it will deal toxin and oxygen damage."
- reagent_state = LIQUID
- color = "#60A584" // rgb: 96, 165, 132
- overdose_threshold = 35
- addiction_threshold = 30
-
-datum/reagent/nicotine/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- var/smoke_message = pick("You can just feel your lungs dying!", "You feel relaxed.", "You feel calmed.", "You feel the lung cancer forming.", "You feel the money you wasted.", "You feel like a space cowboy.", "You feel rugged.")
- if(prob(5))
- M << "[smoke_message]"
- M.AdjustStunned(-1)
- M.adjustStaminaLoss(-1*REM)
- ..()
- return
-
-datum/reagent/nicotine/overdose_process(var/mob/living/M as mob)
- if(prob(20))
- M << "You feel like you've smoked too much."
- M.adjustToxLoss(1*REM)
- M.adjustOxyLoss(1*REM)
- ..()
- return
-
-datum/reagent/crank
- name = "Crank"
- id = "crank"
- description = "Reduces stun times by about 200%. If overdosed or addicted it will deal significant Toxin, Brute and Brain damage."
- reagent_state = LIQUID
- color = "#60A584" // rgb: 96, 165, 132
- overdose_threshold = 20
- addiction_threshold = 10
-
-datum/reagent/crank/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- var/high_message = pick("You feel jittery.", "You feel like you gotta go fast.", "You feel like you need to step it up.")
- if(prob(5))
- M << "[high_message]"
- M.AdjustParalysis(-2)
- M.AdjustStunned(-2)
- M.AdjustWeakened(-2)
- ..()
- return
-datum/reagent/crank/overdose_process(var/mob/living/M as mob)
- M.adjustBrainLoss(rand(1,10)*REM)
- M.adjustToxLoss(rand(1,10)*REM)
- M.adjustBruteLoss(rand(1,10)*REM)
- ..()
- return
-
-datum/reagent/crank/addiction_act_stage1(var/mob/living/M as mob)
- M.adjustBrainLoss(rand(1,10)*REM)
- ..()
- return
-datum/reagent/crank/addiction_act_stage2(var/mob/living/M as mob)
- M.adjustToxLoss(rand(1,10)*REM)
- ..()
- return
-datum/reagent/crank/addiction_act_stage3(var/mob/living/M as mob)
- M.adjustBruteLoss(rand(1,10)*REM)
- ..()
- return
-datum/reagent/crank/addiction_act_stage4(var/mob/living/M as mob)
- M.adjustBrainLoss(rand(1,10)*REM)
- M.adjustToxLoss(rand(1,10)*REM)
- M.adjustBruteLoss(rand(1,10)*REM)
- ..()
- return
-/datum/chemical_reaction/crank
- name = "Crank"
- id = "crank"
- result = "crank"
- required_reagents = list("diphenhydramine" = 1, "ammonia" = 1, "lithium" = 1, "sacid" = 1, "fuel" = 1)
- result_amount = 5
- mix_message = "The mixture violently reacts, leaving behind a few crystalline shards."
- required_temp = 390
-
-/datum/reagent/krokodil
- name = "Krokodil"
- id = "krokodil"
- description = "Cools and calms you down. If overdosed it will deal significant Brain and Toxin damage. If addicted it will begin to deal fatal amounts of Brute damage as the subject's skin falls off."
- reagent_state = LIQUID
- color = "#60A584" // rgb: 96, 165, 132
- overdose_threshold = 20
- addiction_threshold = 15
-
-
-/datum/reagent/krokodil/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- var/high_message = pick("You feel calm.", "You feel collected.", "You feel like you need to relax.")
- if(prob(5))
- M << "[high_message]"
- ..()
- return
-
-/datum/reagent/krokodil/overdose_process(var/mob/living/M as mob)
- if(prob(10))
- M.adjustBrainLoss(rand(1,5)*REM)
- M.adjustToxLoss(rand(1,5)*REM)
- ..()
- return
-
-
-/datum/reagent/krokodil/addiction_act_stage1(var/mob/living/M as mob)
- M.adjustBrainLoss(rand(1,5)*REM)
- M.adjustToxLoss(rand(1,5)*REM)
- ..()
- return
-/datum/reagent/krokodil/addiction_act_stage2(var/mob/living/M as mob)
- if(prob(25))
- M << "Your skin feels loose..."
- ..()
- return
-/datum/reagent/krokodil/addiction_act_stage3(var/mob/living/M as mob)
- if(prob(25))
- M << "Your skin starts to peel away..."
- M.adjustBruteLoss(3*REM)
- ..()
- return
-
-/datum/reagent/krokodil/addiction_act_stage4(var/mob/living/carbon/human/M as mob)
- if(!istype(M.dna.species, /datum/species/cosmetic_zombie))
- M << "Your skin falls off easily!"
- M.adjustBruteLoss(rand(50,80)*REM) // holy shit your skin just FELL THE FUCK OFF
- hardset_dna(M, null, null, null, null, /datum/species/cosmetic_zombie)
- else
- M.adjustBruteLoss(5*REM)
- ..()
- return
-/datum/chemical_reaction/krokodil
- name = "Krokodil"
- id = "krokodil"
- result = "krokodil"
- required_reagents = list("diphenhydramine" = 1, "morphine" = 1, "cleaner" = 1, "potassium" = 1, "phosphorus" = 1, "fuel" = 1)
- result_amount = 6
- mix_message = "The mixture dries into a pale blue powder."
- required_temp = 380
-
-/datum/reagent/methamphetamine
- name = "Methamphetamine"
- id = "methamphetamine"
- description = "Reduces stun times by about 300%, speeds the user up, and allows the user to quickly recover stamina while dealing a small amount of Brain damage. If overdosed the subject will move randomly, laugh randomly, drop items and suffer from Toxin and Brain damage. If addicted the subject will constantly jitter and drool, before becoming dizzy and losing motor control and eventually suffer heavy toxin damage."
- reagent_state = LIQUID
- color = "#60A584" // rgb: 96, 165, 132
- overdose_threshold = 20
- addiction_threshold = 10
- metabolization_rate = 0.6
-
-/datum/reagent/methamphetamine/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- var/high_message = pick("You feel hyper.", "You feel like you need to go faster.", "You feel like you can run the world.")
- if(prob(5))
- M << "[high_message]"
- M.AdjustParalysis(-3)
- M.AdjustStunned(-3)
- M.AdjustWeakened(-3)
- M.adjustStaminaLoss(-3)
- M.status_flags |= GOTTAGOREALLYFAST
- M.Jitter(3)
- M.adjustBrainLoss(0.5)
- if(prob(5))
- M.emote(pick("twitch", "shiver"))
- ..()
- return
-
-/datum/reagent/methamphetamine/overdose_process(var/mob/living/M as mob)
- if(M.canmove && !istype(M.loc, /atom/movable))
- for(var/i = 0, i < 4, i++)
- step(M, pick(cardinal))
- if(prob(20))
- M.emote("laugh")
- if(prob(33))
- M.visible_message("[M]'s hands flip out and flail everywhere!")
- var/obj/item/I = M.get_active_hand()
- if(I)
- M.drop_item()
- ..()
- if(prob(20))
- M.adjustToxLoss(5)
- M.adjustBrainLoss(pick(0.5, 0.6, 0.7, 0.8, 0.9, 1))
- return
-
-/datum/reagent/methamphetamine/addiction_act_stage1(var/mob/living/M as mob)
- M.Jitter(5)
- if(prob(20))
- M.emote(pick("twitch","drool","moan"))
- ..()
- return
-/datum/reagent/methamphetamine/addiction_act_stage2(var/mob/living/M as mob)
- M.Jitter(10)
- M.Dizzy(10)
- if(prob(30))
- M.emote(pick("twitch","drool","moan"))
- ..()
- return
-/datum/reagent/methamphetamine/addiction_act_stage3(var/mob/living/M as mob)
- if(M.canmove && !istype(M.loc, /atom/movable))
- for(var/i = 0, i < 4, i++)
- step(M, pick(cardinal))
- M.Jitter(15)
- M.Dizzy(15)
- if(prob(40))
- M.emote(pick("twitch","drool","moan"))
- ..()
- return
-/datum/reagent/methamphetamine/addiction_act_stage4(var/mob/living/carbon/human/M as mob)
- if(M.canmove && !istype(M.loc, /atom/movable))
- for(var/i = 0, i < 8, i++)
- step(M, pick(cardinal))
- M.Jitter(20)
- M.Dizzy(20)
- M.adjustToxLoss(5)
- if(prob(50))
- M.emote(pick("twitch","drool","moan"))
- ..()
- return
-
-/datum/chemical_reaction/methamphetamine
- name = "methamphetamine"
- id = "methamphetamine"
- result = "methamphetamine"
- required_reagents = list("ephedrine" = 1, "iodine" = 1, "phosphorus" = 1, "hydrogen" = 1)
- result_amount = 4
- required_temp = 374
-
-/datum/chemical_reaction/saltpetre
- name = "saltpetre"
- id = "saltpetre"
- result = "saltpetre"
- required_reagents = list("potassium" = 1, "nitrogen" = 1, "oxygen" = 3)
- result_amount = 3
-
-/datum/reagent/saltpetre
- name = "Saltpetre"
- id = "saltpetre"
- description = "Volatile."
- reagent_state = LIQUID
- color = "#60A584" // rgb: 96, 165, 132
-
-/datum/reagent/bath_salts
- name = "Bath Salts"
- id = "bath_salts"
- description = "Makes you nearly impervious to stuns and grants a stamina regeneration buff, but you will be a nearly uncontrollable tramp-bearded raving lunatic."
- reagent_state = LIQUID
- color = "#60A584" // rgb: 96, 165, 132
- overdose_threshold = 20
- addiction_threshold = 10
-
-
-/datum/reagent/bath_salts/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- var/high_message = pick("You feel amped up.", "You feel ready.", "You feel like you can push it to the limit.")
- if(prob(5))
- M << "[high_message]"
- M.AdjustParalysis(-5)
- M.AdjustStunned(-5)
- M.AdjustWeakened(-5)
- M.adjustStaminaLoss(-10)
- M.adjustBrainLoss(1)
- M.adjustToxLoss(0.1)
- M.hallucination += 10
- if(M.canmove && !istype(M.loc, /atom/movable))
- step(M, pick(cardinal))
- step(M, pick(cardinal))
- ..()
- return
-
-/datum/chemical_reaction/bath_salts
- name = "bath_salts"
- id = "bath_salts"
- result = "bath_salts"
- required_reagents = list("????" = 1, "saltpetre" = 1, "nutriment" = 1, "cleaner" = 1, "enzyme" = 1, "tea" = 1, "mercury" = 1)
- result_amount = 7
- required_temp = 374
-
-/datum/reagent/bath_salts/overdose_process(var/mob/living/M as mob)
- M.hallucination += 10
- if(M.canmove && !istype(M.loc, /atom/movable))
- for(var/i = 0, i < 8, i++)
- step(M, pick(cardinal))
- if(prob(20))
- M.emote(pick("twitch","drool","moan"))
- if(prob(33))
- var/obj/item/I = M.get_active_hand()
- if(I)
- M.drop_item()
- ..()
- return
-
-/datum/reagent/bath_salts/addiction_act_stage1(var/mob/living/M as mob)
- M.hallucination += 10
- if(M.canmove && !istype(M.loc, /atom/movable))
- for(var/i = 0, i < 8, i++)
- step(M, pick(cardinal))
- M.Jitter(5)
- M.adjustBrainLoss(10)
- if(prob(20))
- M.emote(pick("twitch","drool","moan"))
- ..()
- return
-/datum/reagent/bath_salts/addiction_act_stage2(var/mob/living/M as mob)
- M.hallucination += 20
- if(M.canmove && !istype(M.loc, /atom/movable))
- for(var/i = 0, i < 8, i++)
- step(M, pick(cardinal))
- M.Jitter(10)
- M.Dizzy(10)
- M.adjustBrainLoss(10)
- if(prob(30))
- M.emote(pick("twitch","drool","moan"))
- ..()
- return
-/datum/reagent/bath_salts/addiction_act_stage3(var/mob/living/M as mob)
- M.hallucination += 30
- if(M.canmove && !istype(M.loc, /atom/movable))
- for(var/i = 0, i < 12, i++)
- step(M, pick(cardinal))
- M.Jitter(15)
- M.Dizzy(15)
- M.adjustBrainLoss(10)
- if(prob(40))
- M.emote(pick("twitch","drool","moan"))
- ..()
- return
-/datum/reagent/bath_salts/addiction_act_stage4(var/mob/living/carbon/human/M as mob)
- M.hallucination += 40
- if(M.canmove && !istype(M.loc, /atom/movable))
- for(var/i = 0, i < 16, i++)
- step(M, pick(cardinal))
- M.Jitter(50)
- M.Dizzy(50)
- M.adjustToxLoss(5)
- M.adjustBrainLoss(10)
- if(prob(50))
- M.emote(pick("twitch","drool","moan"))
- ..()
- return
-
-/datum/chemical_reaction/aranesp
- name = "aranesp"
- id = "aranesp"
- result = "aranesp"
- required_reagents = list("epinephrine" = 1, "atropine" = 1, "morphine" = 1)
- result_amount = 3
-
-/datum/reagent/aranesp
- name = "Aranesp"
- id = "aranesp"
- description = "Amps you up and gets you going, fixes all stamina damage you might have but can cause toxin and oxygen damage.."
- reagent_state = LIQUID
- color = "#60A584" // rgb: 96, 165, 132
-
-/datum/reagent/aranesp/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- var/high_message = pick("You feel amped up.", "You feel ready.", "You feel like you can push it to the limit.")
- if(prob(5))
- M << "[high_message]"
- M.adjustStaminaLoss(-35)
- M.adjustToxLoss(1)
- if(prob(50))
- M.losebreath++
- M.adjustOxyLoss(20)
- ..()
- return
diff --git a/code/modules/reagents/Chemistry-Goon-Medicine.dm b/code/modules/reagents/Chemistry-Goon-Medicine.dm
deleted file mode 100644
index 2659fed7197..00000000000
--- a/code/modules/reagents/Chemistry-Goon-Medicine.dm
+++ /dev/null
@@ -1,831 +0,0 @@
-#define SOLID 1
-#define LIQUID 2
-#define GAS 3
-
-#define REM REAGENTS_EFFECT_MULTIPLIER
-
-datum/reagent/silver_sulfadiazine
- name = "Silver Sulfadiazine"
- id = "silver_sulfadiazine"
- description = "On touch, quickly heals burn damage. Basic anti-burn healing drug. On ingestion, deals minor toxin damage."
- reagent_state = LIQUID
- color = "#C8A5DC"
- metabolization_rate = 2
-
-datum/reagent/silver_sulfadiazine/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume, var/show_message = 1)
- if(iscarbon(M))
- if(method == TOUCH)
- M.adjustFireLoss(-volume)
- if(show_message)
- M << "You feel your burns healing!"
- M.emote("scream")
- if(method == INGEST)
- M.adjustToxLoss(0.5*volume)
- if(show_message)
- M << "You probably shouldn't have eaten that. Maybe you should of splashed it on, or applied a patch?"
- ..()
- return
-
-datum/reagent/silver_sulfadiazine/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustFireLoss(-2*REM)
- ..()
- return
-
-datum/reagent/styptic_powder
- name = "Styptic Powder"
- id = "styptic_powder"
- description = "On touch, quickly heals brute damage. Basic anti-brute healing drug. On ingestion, deals minor toxin damage."
- reagent_state = LIQUID
- color = "#C8A5DC"
- metabolization_rate = 2
-
-datum/reagent/styptic_powder/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume, var/show_message = 1)
- if(iscarbon(M))
- if(method == TOUCH)
- M.adjustBruteLoss(-volume)
- if(show_message)
- M << "You feel your wounds knitting back together!"
- M.emote("scream")
- if(method == INGEST)
- M.adjustToxLoss(0.5*volume)
- if(show_message)
- M << "You probably shouldn't have eaten that. Maybe you should of splashed it on, or applied a patch?"
- ..()
- return
-
-datum/reagent/styptic_powder/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(prob(55))
- M.adjustBruteLoss(-8*REM)
- ..()
- return
-
-datum/reagent/salglu_solution
- name = "Saline-Glucose Solution"
- id = "salglu_solution"
- description = "Has a 33% chance per metabolism cycle to heal brute and burn damage."
- reagent_state = LIQUID
- color = "#C8A5DC"
-
-datum/reagent/salglu_solution/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(prob(33))
- M.adjustBruteLoss(-1*REM)
- M.adjustFireLoss(-1*REM)
- ..()
- return
-
-datum/reagent/synthflesh
- name = "Synthflesh"
- id = "synthflesh"
- description = "Has a 100% chance of instantly healing brute and burn damage. One unit of the chemical will heal one point of damage. Touch application only."
- reagent_state = LIQUID
- color = "#C8A5DC"
-
-datum/reagent/synthflesh/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume,var/show_message = 1)
- if(!M) M = holder.my_atom
- if(iscarbon(M))
- if(method == TOUCH)
- M.adjustBruteLoss(-1.5*volume)
- M.adjustFireLoss(-1.5*volume)
- if(show_message)
- M << "You feel your burns healing and your flesh knitting together!"
- ..()
- return
-
-datum/reagent/charcoal
- name = "Charcoal"
- id = "charcoal"
- description = "Heals toxin damage, and will also slowly remove any other chemicals."
- reagent_state = LIQUID
- color = "#C8A5DC"
-
-datum/reagent/charcoal/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustToxLoss(-3*REM)
- for(var/datum/reagent/R in M.reagents.reagent_list)
- if(R != src)
- M.reagents.remove_reagent(R.id,1)
- ..()
- return
-
-/datum/chemical_reaction/charcoal
- name = "Charcoal"
- id = "charcoal"
- result = "charcoal"
- required_reagents = list("ash" = 1, "sodiumchloride" = 1)
- result_amount = 2
- mix_message = "The mixture yields a fine black powder."
- required_temp = 380
-
-/datum/chemical_reaction/silver_sulfadiazine
- name = "Silver Sulfadiazine"
- id = "silver_sulfadiazine"
- result = "silver_sulfadiazine"
- required_reagents = list("ammonia" = 1, "silver" = 1, "sulfur" = 1, "oxygen" = 1, "chlorine" = 1)
- result_amount = 5
-
-/datum/chemical_reaction/salglu_solution
- name = "Saline-Glucose Solution"
- id = "salglu_solution"
- result = "salglu_solution"
- required_reagents = list("sodiumchloride" = 1, "water" = 1, "sugar" = 1)
- result_amount = 3
-
-/datum/chemical_reaction/synthflesh
- name = "Synthflesh"
- id = "synthflesh"
- result = "synthflesh"
- required_reagents = list("blood" = 1, "carbon" = 1, "styptic_powder" = 1)
- result_amount = 3
-
-/datum/chemical_reaction/styptic_powder
- name = "Styptic Powder"
- id = "styptic_powder"
- result = "styptic_powder"
- required_reagents = list("aluminium" = 1, "hydrogen" = 1, "oxygen" = 1, "sacid" = 1)
- result_amount = 4
- mix_message = "The solution yields an astringent powder."
-
-datum/reagent/omnizine
- name = "Omnizine"
- id = "omnizine"
- description = "Heals 1 of each damage type a cycle. If overdosed it will deal significant amounts of each damage type."
- reagent_state = LIQUID
- color = "#C8A5DC"
- metabolization_rate = 0.2
- overdose_threshold = 30
-
-datum/reagent/omnizine/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustToxLoss(-1*REM)
- M.adjustOxyLoss(-1*REM)
- M.adjustBruteLoss(-1*REM)
- M.adjustFireLoss(-1*REM)
- ..()
- return
-
-datum/reagent/omnizine/overdose_process(var/mob/living/M as mob)
- M.adjustToxLoss(3*REM)
- M.adjustOxyLoss(3*REM)
- M.adjustBruteLoss(3*REM)
- M.adjustFireLoss(3*REM)
- ..()
- return
-
-datum/reagent/calomel
- name = "Calomel"
- id = "calomel"
- description = "Quickly purges the body of all chemicals. If your health is above 20, toxin damage is dealt. When you hit 20 health or lower, the damage will cease."
- reagent_state = LIQUID
- color = "#C8A5DC"
-
-datum/reagent/calomel/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- for(var/datum/reagent/R in M.reagents.reagent_list)
- if(R != src)
- M.reagents.remove_reagent(R.id,5)
- if(M.health > 20)
- M.adjustToxLoss(5*REM)
- ..()
- return
-
-/datum/chemical_reaction/calomel
- name = "Calomel"
- id = "calomel"
- result = "calomel"
- required_reagents = list("mercury" = 1, "chlorine" = 1)
- result_amount = 2
- required_temp = 374
-
-datum/reagent/potass_iodide
- name = "Potassium Iodide"
- id = "potass_iodide"
- description = "Reduces low radiation damage very effectively."
- reagent_state = LIQUID
- color = "#C8A5DC"
-
-datum/reagent/potass_iodide/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(M.radiation > 0)
- if(prob(80))
- M.radiation--
- if(M.radiation < 0)
- M.radiation = 0
- ..()
- return
-
-/datum/chemical_reaction/potass_iodide
- name = "Potassium Iodide"
- id = "potass_iodide"
- result = "potass_iodide"
- required_reagents = list("potassium" = 1, "iodine" = 1)
- result_amount = 2
-
-datum/reagent/pen_acid
- name = "Pentetic Acid"
- id = "pen_acid"
- description = "Reduces massive amounts of radiation and toxin damage while purging other chemicals from the body. Has a chance of dealing brute damage."
- reagent_state = LIQUID
- color = "#C8A5DC"
-
-datum/reagent/pen_acid/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(M.radiation > 0)
- M.radiation -= 7
- M.adjustToxLoss(-4*REM)
- if(prob(33))
- M.adjustBruteLoss(1*REM)
- if(M.radiation < 0)
- M.radiation = 0
- for(var/datum/reagent/R in M.reagents.reagent_list)
- if(R != src)
- M.reagents.remove_reagent(R.id,4)
- ..()
- return
-
-/datum/chemical_reaction/pen_acid
- name = "Pentetic Acid"
- id = "pen_acid"
- result = "pen_acid"
- required_reagents = list("fuel" = 1, "chlorine" = 1, "ammonia" = 1, "formaldehyde" = 1, "sodium" = 1, "cyanide" = 1)
- result_amount = 6
-
-datum/reagent/sal_acid
- name = "Salicyclic Acid"
- id = "sal_acid"
- description = "If you have less than 50 brute damage, there is a 50% chance to heal one unit. If overdosed it will have a 50% chance to deal 2 brute damage if the patient has less than 50 brute damage already."
- reagent_state = LIQUID
- color = "#C8A5DC"
- overdose_threshold = 25
-
-datum/reagent/sal_acid/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(M.getBruteLoss() < 50)
- if(prob(50))
- M.adjustBruteLoss(-1*REM)
- ..()
- return
-
-datum/reagent/sal_acid/overdose_process(var/mob/living/M as mob)
- if(M.getBruteLoss() < 50)
- if(prob(50))
- M.adjustBruteLoss(2*REM)
- ..()
- return
-
-/datum/chemical_reaction/sal_acid
- name = "Salicyclic Acid"
- id = "sal_acid"
- result = "sal_acid"
- required_reagents = list("sodium" = 1, "phenol" = 1, "carbon" = 1, "oxygen" = 1, "sacid" = 1)
- result_amount = 5
-
-datum/reagent/salbutamol
- name = "Salbutamol"
- id = "salbutamol"
- description = "Quickly heals oxygen damage while slowing down suffocation. Great for stabilizing critical patients!"
- reagent_state = LIQUID
- color = "#C8A5DC"
- metabolization_rate = 0.2
-
-datum/reagent/salbutamol/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustOxyLoss(-6*REM)
- if(M.losebreath >= 4)
- M.losebreath -= 4
- ..()
- return
-
-/datum/chemical_reaction/salbutamol
- name = "Salbutamol"
- id = "salbutamol"
- result = "salbutamol"
- required_reagents = list("sal_acid" = 1, "lithium" = 1, "aluminium" = 1, "bromine" = 1, "ammonia" = 1)
- result_amount = 5
-
-datum/reagent/perfluorodecalin
- name = "Perfluorodecalin"
- id = "perfluorodecalin"
- description = "Heals suffocation damage so quickly that you could have a spacewalk, but it mutes your voice. Has a 33% chance of healing brute and burn damage per cycle as well."
- reagent_state = LIQUID
- color = "#C8A5DC"
- metabolization_rate = 0.2
-
-datum/reagent/perfluorodecalin/on_mob_life(var/mob/living/carbon/human/M as mob)
- if(!M) M = holder.my_atom
- M.adjustOxyLoss(-25*REM)
- M.silent = max(M.silent, 5)
- if(prob(33))
- M.adjustBruteLoss(-1*REM)
- M.adjustFireLoss(-1*REM)
- ..()
- return
-
-/datum/chemical_reaction/perfluorodecalin
- name = "Perfluorodecalin"
- id = "perfluorodecalin"
- result = "perfluorodecalin"
- required_reagents = list("hydrogen" = 1, "fluorine" = 1, "oil" = 1)
- result_amount = 3
- required_temp = 370
- mix_message = "The mixture rapidly turns into a dense pink liquid."
-
-datum/reagent/ephedrine
- name = "Ephedrine"
- id = "ephedrine"
- description = "Reduces stun times, increases run speed. If overdosed it will deal toxin and oxyloss damage."
- reagent_state = LIQUID
- color = "#C8A5DC"
- metabolization_rate = 0.3
- overdose_threshold = 45
- addiction_threshold = 30
-
-datum/reagent/ephedrine/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.status_flags |= IGNORESLOWDOWN
- M.AdjustParalysis(-1)
- M.AdjustStunned(-1)
- M.AdjustWeakened(-1)
- M.adjustStaminaLoss(-1*REM)
- ..()
- return
-
-datum/reagent/ephedrine/overdose_process(var/mob/living/M as mob)
- if(prob(33))
- M.adjustToxLoss(1*REM)
- M.losebreath++
- ..()
- return
-
-datum/reagent/ephedrine/addiction_act_stage1(var/mob/living/M as mob)
- if(prob(33))
- M.adjustToxLoss(2*REM)
- M.losebreath += 2
- ..()
- return
-datum/reagent/ephedrine/addiction_act_stage2(var/mob/living/M as mob)
- if(prob(33))
- M.adjustToxLoss(3*REM)
- M.losebreath += 3
- ..()
- return
-datum/reagent/ephedrine/addiction_act_stage3(var/mob/living/M as mob)
- if(prob(33))
- M.adjustToxLoss(4*REM)
- M.losebreath += 4
- ..()
- return
-datum/reagent/ephedrine/addiction_act_stage4(var/mob/living/M as mob)
- if(prob(33))
- M.adjustToxLoss(5*REM)
- M.losebreath += 5
- ..()
- return
-
-/datum/chemical_reaction/ephedrine
- name = "Ephedrine"
- id = "ephedrine"
- result = "ephedrine"
- required_reagents = list("sugar" = 1, "oil" = 1, "hydrogen" = 1, "diethylamine" = 1)
- result_amount = 4
- mix_message = "The solution fizzes and gives off toxic fumes."
-
-datum/reagent/diphenhydramine
- name = "Diphenhydramine"
- id = "diphenhydramine"
- description = "Purges body of lethal Histamine and reduces jitteriness while causing minor drowsiness."
- reagent_state = LIQUID
- color = "#C8A5DC"
-datum/reagent/diphenhydramine/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.drowsyness += 1
- M.jitteriness -= 1
- M.reagents.remove_reagent("histamine",3)
- ..()
- return
-
-/datum/chemical_reaction/diphenhydramine
- name = "Diphenhydramine"
- id = "diphenhydramine"
- result = "diphenhydramine"
- required_reagents = list("oil" = 1, "carbon" = 1, "bromine" = 1, "diethylamine" = 1, "ethanol" = 1)
- result_amount = 4
- mix_message = "The mixture dries into a pale blue powder."
-
-datum/reagent/morphine
- name = "Morphine"
- id = "morphine"
- description = "Will allow you to ignore slowdown from equipment and damage. Will eventually knock you out if you take too much. If overdosed it will cause jitteriness, dizziness, force the victim to drop items in their hands and eventually deal toxin damage."
- reagent_state = LIQUID
- color = "#C8A5DC"
- var/cycle_count = 0
- overdose_threshold = 30
- addiction_threshold = 25
-
-
-datum/reagent/morphine/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.status_flags |= IGNORESLOWDOWN
- if(cycle_count >= 36)
- M.sleeping += 3
- cycle_count++
- ..()
- return
-
-datum/reagent/morphine/overdose_process(var/mob/living/M as mob)
- if(prob(33))
- var/obj/item/I = M.get_active_hand()
- if(I)
- M.drop_item()
- M.Dizzy(1)
- M.Jitter(1)
- ..()
- return
-
-datum/reagent/morphine/addiction_act_stage1(var/mob/living/M as mob)
- if(prob(33))
- var/obj/item/I = M.get_active_hand()
- if(I)
- M.drop_item()
- M.Dizzy(2)
- M.Jitter(2)
- ..()
- return
-datum/reagent/morphine/addiction_act_stage2(var/mob/living/M as mob)
- if(prob(33))
- var/obj/item/I = M.get_active_hand()
- if(I)
- M.drop_item()
- M.adjustToxLoss(1*REM)
- M.Dizzy(3)
- M.Jitter(3)
- ..()
- return
-datum/reagent/morphine/addiction_act_stage3(var/mob/living/M as mob)
- if(prob(33))
- var/obj/item/I = M.get_active_hand()
- if(I)
- M.drop_item()
- M.adjustToxLoss(2*REM)
- M.Dizzy(4)
- M.Jitter(4)
- ..()
- return
-datum/reagent/morphine/addiction_act_stage4(var/mob/living/M as mob)
- if(prob(33))
- var/obj/item/I = M.get_active_hand()
- if(I)
- M.drop_item()
- M.adjustToxLoss(3*REM)
- M.Dizzy(5)
- M.Jitter(5)
- ..()
- return
-
-datum/reagent/oculine/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- cycle_amount++
- if(M.eye_blind > 0 && cycle_amount > 20)
- if(prob(30))
- M.eye_blind = 0
- else if(prob(80))
- M.eye_blind = 0
- M.eye_blurry = 1
- if(M.eye_blurry > 0)
- if(prob(80))
- M.eye_blurry = 0
- ..()
- return
-
-/datum/chemical_reaction/oculine
- name = "Oculine"
- id = "oculine"
- result = "oculine"
- required_reagents = list("charcoal" = 1, "carbon" = 1, "hydrogen" = 1)
- result_amount = 3
- mix_message = "The mixture sputters loudly and becomes a pale pink color."
-
-datum/reagent/oculine
- name = "Oculine"
- id = "oculine"
- description = "Cures blindness and heals eye damage over time."
- reagent_state = LIQUID
- color = "#C8A5DC"
- metabolization_rate = 0.4
- var/cycle_amount = 0
-
-datum/reagent/atropine
- name = "Atropine"
- id = "atropine"
- description = "If patients health is below -25 it will heal 3 brute and burn damage per cycle, as well as stop any oxyloss. Good for stabilising critical patients."
- reagent_state = LIQUID
- color = "#C8A5DC"
- metabolization_rate = 0.2
- overdose_threshold = 35
-
-datum/reagent/atropine/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(M.health > -60)
- M.adjustToxLoss(1*REM)
- if(M.health < -25)
- M.adjustBruteLoss(-3*REM)
- M.adjustFireLoss(-3*REM)
- if(M.oxyloss > 65)
- M.setOxyLoss(65)
- if(M.losebreath > 5)
- M.losebreath = 5
- if(prob(30))
- M.Dizzy(5)
- M.Jitter(5)
- ..()
- return
-
-datum/reagent/atropine/overdose_process(var/mob/living/M as mob)
- if(prob(50))
- M.adjustToxLoss(2*REM)
- M.Dizzy(1)
- M.Jitter(1)
- ..()
- return
-
-/datum/chemical_reaction/atropine
- name = "Atropine"
- id = "atropine"
- result = "atropine"
- required_reagents = list("ethanol" = 1, "acetone" = 1, "diethylamine" = 1, "phenol" = 1, "sacid" = 1)
- result_amount = 5
-
-datum/reagent/epinephrine
- name = "Epinephrine"
- id = "epinephrine"
- description = "mReduces most of the knockout/stun effects, minor stamina regeneration buff. Attempts to stop you taking too much oxygen damage. If the patient is in low to severe crit, heals toxins, brute, and burn very effectively. Will not heal patients who are almost dead. If overdosed will stun and deal toxin damage"
- reagent_state = LIQUID
- color = "#C8A5DC"
- metabolization_rate = 0.2
- overdose_threshold = 30
-
-datum/reagent/epinephrine/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(M.health < -10 && M.health > -65)
- M.adjustToxLoss(-1*REM)
- M.adjustBruteLoss(-1*REM)
- M.adjustFireLoss(-1*REM)
- if(M.oxyloss > 35)
- M.setOxyLoss(35)
- if(M.losebreath >= 4)
- M.losebreath -= 4
- if(M.losebreath < 0)
- M.losebreath = 0
- M.adjustStaminaLoss(-1*REM)
- if(prob(30))
- M.AdjustParalysis(-1)
- M.AdjustStunned(-1)
- M.AdjustWeakened(-1)
- ..()
- return
-
-datum/reagent/epinephrine/overdose_process(var/mob/living/M as mob)
- if(prob(33))
- M.adjustStaminaLoss(5*REM)
- M.adjustToxLoss(2*REM)
- M.losebreath++
- ..()
- return
-
-/datum/chemical_reaction/epinephrine
- name = "Epinephrine"
- id = "epinephrine"
- result = "epinephrine"
- required_reagents = list("phenol" = 1, "acetone" = 1, "diethylamine" = 1, "oxygen" = 1, "chlorine" = 1, "hydrogen" = 1)
- result_amount = 6
-
-datum/reagent/strange_reagent
- name = "Strange Reagent"
- id = "strange_reagent"
- description = "A miracle drug that can bring a dead body back to life! If the corpse has suffered too much damage, however, no change will occur to the body. If used on a living person it will deal Brute and Burn damage."
- reagent_state = LIQUID
- color = "#C8A5DC"
-
-datum/reagent/strange_reagent/reaction_mob(var/mob/living/carbon/human/M as mob, var/method=TOUCH, var/volume)
- if(M.stat == DEAD)
- if(M.getBruteLoss() >= 100 || M.getFireLoss() >= 100)
- M.visible_message("[M]'s body convulses a bit, and then falls still once more.")
- return
- var/mob/dead/observer/ghost = M.get_ghost()
- M.visible_message("[M]'s body convulses a bit.")
- if(!M.suiciding && !ghost && !(NOCLONE in M.mutations))
- M.stat = 1
- M.adjustOxyLoss(-20)
- M.adjustToxLoss(-20)
- dead_mob_list -= M
- living_mob_list |= list(M)
- M.emote("gasp")
- add_logs(M, M, "revived", object="strange reagent")
- ..()
- return
-datum/reagent/strange_reagent/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(prob(50))
- M.adjustBruteLoss(2*REM)
- M.adjustFireLoss(2*REM)
- ..()
- return
-
-/datum/chemical_reaction/strange_reagent
- name = "Strange Reagent"
- id = "strange_reagent"
- result = "strange_reagent"
- required_reagents = list("omnizine" = 1, "holywater" = 1, "mutagen" = 1)
- result_amount = 3
-
-datum/reagent/life
- name = "Life"
- id = "life"
- description = "Can create a life form, however it is not guaranteed to be friendly. May want to have Security on hot standby."
- reagent_state = LIQUID
- color = "#C8A5DC"
- metabolization_rate = 0.2
-
-/datum/chemical_reaction/life
- name = "Life"
- id = "life"
- result = "life"
- required_reagents = list("strange_reagent" = 1, "synthflesh" = 1, "blood" = 1)
- result_amount = 3
- required_temp = 374
-
-/datum/chemical_reaction/life/on_reaction(var/datum/reagents/holder, var/created_volume)
- chemical_mob_spawn(holder, 1, "Life")
-
-proc/chemical_mob_spawn(var/datum/reagents/holder, var/amount_to_spawn, var/reaction_name, var/mob_faction = "chemicalsummon")
- if(holder && holder.my_atom)
- var/blocked = list(/mob/living/simple_animal/hostile,
- /mob/living/simple_animal/hostile/pirate,
- /mob/living/simple_animal/hostile/pirate/ranged,
- /mob/living/simple_animal/hostile/russian,
- /mob/living/simple_animal/hostile/russian/ranged,
- /mob/living/simple_animal/hostile/syndicate,
- /mob/living/simple_animal/hostile/syndicate/melee,
- /mob/living/simple_animal/hostile/syndicate/melee/space,
- /mob/living/simple_animal/hostile/syndicate/ranged,
- /mob/living/simple_animal/hostile/syndicate/ranged/space,
- /mob/living/simple_animal/hostile/alien/queen/large,
- /mob/living/simple_animal/hostile/retaliate,
- /mob/living/simple_animal/hostile/retaliate/clown,
- /mob/living/simple_animal/hostile/mushroom,
- /mob/living/simple_animal/hostile/asteroid,
- /mob/living/simple_animal/hostile/asteroid/basilisk,
- /mob/living/simple_animal/hostile/asteroid/goldgrub,
- /mob/living/simple_animal/hostile/asteroid/goliath,
- /mob/living/simple_animal/hostile/asteroid/hivelord,
- /mob/living/simple_animal/hostile/asteroid/hivelordbrood,
- /mob/living/simple_animal/hostile/carp/holocarp,
- /mob/living/simple_animal/hostile/mining_drone,
- /mob/living/simple_animal/hostile/poison,
- /mob/living/simple_animal/hostile/blob,
- /mob/living/simple_animal/ascendant_shadowling
- )//exclusion list for things you don't want the reaction to create.
- var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
- var/atom/A = holder.my_atom
- var/turf/T = get_turf(A)
- var/area/my_area = get_area(T)
- var/message = "A [reaction_name] reaction has occured in [my_area.name]. (JMP)"
- message += " (VV)"
-
- var/mob/M = get(A, /mob)
- if(M)
- message += " - Carried By: [M.real_name] ([M.key]) (PP) (?)"
- else
- message += " - Last Fingerprint: [(A.fingerprintslast ? A.fingerprintslast : "N/A")]"
-
- message_admins(message, 0, 1)
-
- playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
-
- for(var/mob/living/carbon/human/H in viewers(get_turf(holder.my_atom), null))
- H.flash_eyes()
- for(var/i = 1, i <= amount_to_spawn, i++)
- var/chosen = pick(critters)
- var/mob/living/simple_animal/hostile/C = new chosen
- C.faction |= mob_faction
- C.loc = get_turf(holder.my_atom)
- if(prob(50))
- for(var/j = 1, j <= rand(1, 3), j++)
- step(C, pick(NORTH,SOUTH,EAST,WEST))
-
-/datum/reagent/mannitol/on_mob_life(mob/living/M as mob)
- M.adjustBrainLoss(-3)
- ..()
- return
-
-/datum/chemical_reaction/mannitol
- name = "Mannitol"
- id = "mannitol"
- result = "mannitol"
- required_reagents = list("sugar" = 1, "hydrogen" = 1, "water" = 1)
- result_amount = 3
- mix_message = "The solution slightly bubbles, becoming thicker."
-
-/datum/reagent/mannitol
- name = "Mannitol"
- id = "mannitol"
- description = "Heals brain damage effectively. Use it in cyro tubes alongside Cryoxadone."
- color = "#C8A5DC"
-
-/datum/reagent/mutadone/on_mob_life(var/mob/living/carbon/human/M as mob)
- M.jitteriness = 0
- if(istype(M) && M.dna)
- M.dna.remove_all_mutations()
- ..()
- return
-
-/datum/chemical_reaction/mutadone
- name = "Mutadone"
- id = "mutadone"
- result = "mutadone"
- required_reagents = list("mutagen" = 1, "acetone" = 1, "bromine" = 1)
- result_amount = 3
-
-
-/datum/reagent/mutadone
- name = "Mutadone"
- id = "mutadone"
- description = "Heals your genetic defects."
- color = "#C8A5DC"
-
-datum/reagent/antihol
- name = "Antihol"
- id = "antihol"
- description = "Helps remove Alcohol from someone's body, as well as eliminating its side effects."
- color = "#C8A5DC"
-
-datum/reagent/antihol/on_mob_life(var/mob/living/M as mob)
- M.dizziness = 0
- M.drowsyness = 0
- M.slurring = 0
- M.confused = 0
- M.reagents.remove_reagent("ethanol", 8)
- M.adjustToxLoss(-0.2*REM)
- ..()
-
-/datum/chemical_reaction/antihol
- name = "antihol"
- id = "antihol"
- result = "antihol"
- required_reagents = list("ethanol" = 1, "charcoal" = 1)
- result_amount = 2
-
-/datum/chemical_reaction/cryoxadone
- name = "Cryoxadone"
- id = "cryoxadone"
- result = "cryoxadone"
- required_reagents = list("stable_plasma" = 1, "acetone" = 1, "mutagen" = 1)
- result_amount = 3
-
-/datum/reagent/stimulants
- name = "Stimulants"
- id = "stimulants"
- description = "Increases run speed and eliminates stuns, can heal minor damage. If overdosed it will deal toxin damage and stun."
- color = "#C8A5DC"
- metabolization_rate = 0.4
- overdose_threshold = 60
-
-datum/reagent/stimulants/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.status_flags |= IGNORESLOWDOWN
- if(M.health < 50 && M.health > 0)
- if(prob(50))
- M.adjustOxyLoss(-5*REM)
- M.adjustToxLoss(-5*REM)
- M.adjustBruteLoss(-5*REM)
- M.adjustFireLoss(-5*REM)
- M.adjustFireLoss(-3*REM)
- M.AdjustParalysis(-1)
- M.AdjustStunned(-1)
- M.AdjustWeakened(-1)
- M.adjustStaminaLoss(-3*REM)
- ..()
-
-datum/reagent/stimulants/overdose_process(var/mob/living/M as mob)
- if(prob(33))
- M.adjustStaminaLoss(5*REM)
- M.adjustToxLoss(2*REM)
- M.losebreath++
- ..()
- return
-
-datum/reagent/insulin
- name = "Insulin"
- id = "insulin"
- description = "Increases sugar depletion rates."
- reagent_state = LIQUID
- color = "#C8A5DC"
-datum/reagent/insulin/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(M.sleeping)
- M.sleeping--
- M.reagents.remove_reagent("sugar", 5)
- ..()
- return
diff --git a/code/modules/reagents/Chemistry-Goon-Other.dm b/code/modules/reagents/Chemistry-Goon-Other.dm
deleted file mode 100644
index bda6a4441d8..00000000000
--- a/code/modules/reagents/Chemistry-Goon-Other.dm
+++ /dev/null
@@ -1,286 +0,0 @@
-#define SOLID 1
-#define LIQUID 2
-#define GAS 3
-#define REM REAGENTS_EFFECT_MULTIPLIER
-
-var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d11141","#00b159","#00aedb","#f37735","#ffc425","#008744","#0057e7","#d62d20","#ffa700")
-
-datum/reagent/oil
- name = "Oil"
- id = "oil"
- description = "Burns in a small smoky fire, mostly used to get Ash."
- reagent_state = LIQUID
- color = "#C8A5DC"
-
-datum/reagent/stable_plasma
- name = "Stable Plasma"
- id = "stable_plasma"
- description = "Non-flammable plasma locked into a liquid form that cannot ignite or become gaseous/solid."
- reagent_state = LIQUID
- color = "#C8A5DC"
-
-datum/reagent/iodine
- name = "Iodine"
- id = "iodine"
- description = "A slippery solution."
- reagent_state = LIQUID
- color = "#C8A5DC"
-
-datum/reagent/fluorine
- name = "Fluorine"
- id = "fluorine"
- description = "A slippery solution."
- reagent_state = LIQUID
- color = "#C8A5DC"
-
-datum/reagent/carpet
- name = "Carpet"
- id = "carpet"
- description = "A slippery solution."
- reagent_state = LIQUID
- color = "#C8A5DC"
-
-/datum/reagent/carpet/reaction_turf(var/turf/simulated/T, var/volume)
- if(istype(T, /turf/simulated/floor/plating) || istype(T, /turf/simulated/floor/plasteel))
- var/turf/simulated/floor/F = T
- F.ChangeTurf(/turf/simulated/floor/fancy/carpet)
- ..()
- return
-
-datum/reagent/bromine
- name = "Bromine"
- id = "bromine"
- description = "A slippery solution."
- reagent_state = LIQUID
- color = "#C8A5DC"
-
-datum/reagent/phenol
- name = "Phenol"
- id = "phenol"
- description = "Used for certain medical recipes."
- reagent_state = LIQUID
- color = "#C8A5DC"
-
-datum/reagent/ash
- name = "Ash"
- id = "ash"
- description = "Basic ingredient in a couple of recipes."
- reagent_state = LIQUID
- color = "#C8A5DC"
-
-datum/reagent/acetone
- name = "Acetone"
- id = "acetone"
- description = "Common ingredient in other recipes."
- reagent_state = LIQUID
- color = "#C8A5DC"
-
-/datum/chemical_reaction/acetone
- name = "acetone"
- id = "acetone"
- result = "acetone"
- required_reagents = list("oil" = 1, "fuel" = 1, "oxygen" = 1)
- result_amount = 3
-
-/datum/chemical_reaction/carpet
- name = "carpet"
- id = "carpet"
- result = "carpet"
- required_reagents = list("space_drugs" = 1, "blood" = 1)
- result_amount = 2
-
-
-/datum/chemical_reaction/oil
- name = "Oil"
- id = "oil"
- result = "oil"
- required_reagents = list("fuel" = 1, "carbon" = 1, "hydrogen" = 1)
- result_amount = 3
-
-/datum/chemical_reaction/phenol
- name = "phenol"
- id = "phenol"
- result = "phenol"
- required_reagents = list("water" = 1, "chlorine" = 1, "oil" = 1)
- result_amount = 3
-
-/datum/chemical_reaction/ash
- name = "Ash"
- id = "ash"
- result = "ash"
- required_reagents = list("oil" = 1)
- result_amount = 1
- required_temp = 480
-
-datum/reagent/colorful_reagent
- name = "Colorful Reagent"
- id = "colorful_reagent"
- description = "A solution."
- reagent_state = LIQUID
- color = "#C8A5DC"
-
-/datum/chemical_reaction/colorful_reagent
- name = "colorful_reagent"
- id = "colorful_reagent"
- result = "colorful_reagent"
- required_reagents = list("stable_plasma" = 1, "radium" = 1, "space_drugs" = 1, "cryoxadone" = 1, "triple_citrus" = 1)
- result_amount = 5
-
-datum/reagent/colorful_reagent/on_mob_life(var/mob/living/M as mob)
- if(M && isliving(M))
- M.color = pick(random_color_list)
- ..()
- return
-
-datum/reagent/colorful_reagent/reaction_mob(var/mob/living/M, var/volume)
- if(M && isliving(M))
- M.color = pick(random_color_list)
- ..()
- return
-datum/reagent/colorful_reagent/reaction_obj(var/obj/O, var/volume)
- if(O)
- O.color = pick(random_color_list)
- ..()
- return
-datum/reagent/colorful_reagent/reaction_turf(var/turf/T, var/volume)
- if(T)
- T.color = pick(random_color_list)
- ..()
- return
-
-
-datum/reagent/triple_citrus
- name = "Triple Citrus"
- id = "triple_citrus"
- description = "A solution."
- reagent_state = LIQUID
- color = "#C8A5DC"
-
-/datum/chemical_reaction/triple_citrus
- name = "triple_citrus"
- id = "triple_citrus"
- result = "triple_citrus"
- required_reagents = list("lemonjuice" = 1, "limejuice" = 1, "orangejuice" = 1)
- result_amount = 5
-
-datum/reagent/corn_starch
- name = "Corn Starch"
- id = "corn_starch"
- description = "A slippery solution."
- reagent_state = LIQUID
- color = "#C8A5DC"
-
-/datum/chemical_reaction/corn_syrup
- name = "corn_syrup"
- id = "corn_syrup"
- result = "corn_syrup"
- required_reagents = list("corn_starch" = 1, "sacid" = 1)
- result_amount = 5
- required_temp = 374
-
-datum/reagent/corn_syrup
- name = "Corn Syrup"
- id = "corn_syrup"
- description = "Decays into sugar."
- reagent_state = LIQUID
- color = "#C8A5DC"
-
-datum/reagent/corn_syrup/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.reagents.add_reagent("sugar", 3)
- M.reagents.remove_reagent("corn_syrup", 1)
- ..()
- return
-
-/datum/chemical_reaction/corgium
- name = "corgium"
- id = "corgium"
- result = "corgium"
- required_reagents = list("nutriment" = 1, "colorful_reagent" = 1, "strange_reagent" = 1, "blood" = 1)
- result_amount = 3
- required_temp = 374
-
-datum/reagent/corgium
- name = "Corgium"
- id = "corgium"
- description = "Creates a corgi at the reaction location."
- reagent_state = LIQUID
- color = "#C8A5DC"
-
-/datum/chemical_reaction/corgium/on_reaction(var/datum/reagents/holder, var/created_volume)
- var/location = get_turf(holder.my_atom)
- new /mob/living/simple_animal/pet/corgi(location)
- ..()
- return
-
-datum/reagent/hair_dye
- name = "Quantum Hair Dye"
- id = "hair_dye"
- description = "A solution."
- reagent_state = LIQUID
- color = "#C8A5DC"
- var/list/potential_colors = list("0ad","a0f","f73","d14","d14","0b5","0ad","f73","fc2","084","05e","d22","fa0") // fucking hair code
-
-/datum/chemical_reaction/hair_dye
- name = "hair_dye"
- id = "hair_dye"
- result = "hair_dye"
- required_reagents = list("colorful_reagent" = 1, "radium" = 1, "space_drugs" = 1)
- result_amount = 5
-
-datum/reagent/hair_dye/reaction_mob(var/mob/living/M, var/volume)
- if(M && ishuman(M))
- var/mob/living/carbon/human/H = M
- H.hair_color = pick(potential_colors)
- H.facial_hair_color = pick(potential_colors)
- H.update_hair()
- ..()
- return
-
-datum/reagent/barbers_aid
- name = "Barber's Aid"
- id = "barbers_aid"
- description = "A solution to hair loss across the world."
- reagent_state = LIQUID
- color = "#C8A5DC"
-
-/datum/chemical_reaction/barbers_aid
- name = "barbers_aid"
- id = "barbers_aid"
- result = "barbers_aid"
- required_reagents = list("carpet" = 1, "radium" = 1, "space_drugs" = 1)
- result_amount = 5
-
-datum/reagent/barbers_aid/reaction_mob(var/mob/living/M, var/volume)
- if(M && ishuman(M))
- var/mob/living/carbon/human/H = M
- var/datum/sprite_accessory/hair/picked_hair = pick(hair_styles_list)
- var/datum/sprite_accessory/facial_hair/picked_beard = pick(facial_hair_styles_list)
- H.hair_style = picked_hair
- H.facial_hair_style = picked_beard
- H.update_hair()
- ..()
- return
-
-datum/reagent/concentrated_barbers_aid
- name = "Concentrated Barber's Aid"
- id = "concentrated_barbers_aid"
- description = "A concentrated solution to hair loss across the world."
- reagent_state = LIQUID
- color = "#C8A5DC"
-
-/datum/chemical_reaction/concentrated_barbers_aid
- name = "concentrated_barbers_aid"
- id = "concentrated_barbers_aid"
- result = "concentrated_barbers_aid"
- required_reagents = list("barbers_aid" = 1, "mutagen" = 1)
- result_amount = 2
-
-datum/reagent/concentrated_barbers_aid/reaction_mob(var/mob/living/M, var/volume)
- if(M && ishuman(M))
- var/mob/living/carbon/human/H = M
- H.hair_style = "Very Long Hair"
- H.facial_hair_style = "Very Long Beard"
- H.update_hair()
- ..()
- return
\ No newline at end of file
diff --git a/code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm b/code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm
deleted file mode 100644
index 0e3b34e44cb..00000000000
--- a/code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm
+++ /dev/null
@@ -1,486 +0,0 @@
-#define SOLID 1
-#define LIQUID 2
-#define GAS 3
-
-#define REM REAGENTS_EFFECT_MULTIPLIER
-
-/datum/reagent/stabilizing_agent
- name = "Stabilizing Agent"
- id = "stabilizing_agent"
- description = "Keeps unstable chemicals stable. This does not work on everything."
- reagent_state = LIQUID
- color = "#FFFFFF"
-
-/datum/chemical_reaction/stabilizing_agent
- name = "stabilizing_agent"
- id = "stabilizing_agent"
- result = "stabilizing_agent"
- required_reagents = list("iron" = 1, "oxygen" = 1, "hydrogen" = 1)
- result_amount = 3
-
-/datum/reagent/clf3
- name = "Chlorine Trifluoride"
- id = "clf3"
- description = "Makes a temporary 3x3 fireball when it comes into existence, so be careful when mixing. ClF3 applied to a surface burns things that wouldn't otherwise burn, sometimes through the very floors of the station and exposing it to the vacuum of space."
- reagent_state = LIQUID
- color = "#FF0000"
- metabolization_rate = 4
-
-/datum/chemical_reaction/clf3
- name = "Chlorine Trifluoride"
- id = "clf3"
- result = "clf3"
- required_reagents = list("chlorine" = 1, "fluorine" = 3)
- result_amount = 4
- required_temp = 424
-
-/datum/reagent/clf3/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjust_fire_stacks(4)
- M.adjustFireLoss(0.35*M.fire_stacks)
- ..()
- return
-
-/datum/chemical_reaction/clf3/on_reaction(var/datum/reagents/holder, var/created_volume)
- var/turf/T = get_turf(holder.my_atom)
- for(var/turf/turf in range(1,T))
- new /obj/effect/hotspot(turf)
- holder.chem_temp = 1000 // hot as shit
- return
-
-/datum/reagent/clf3/reaction_turf(var/turf/simulated/T, var/volume)
- if(istype(T, /turf/simulated/floor/plating))
- var/turf/simulated/floor/plating/F = T
- if(prob(1))
- F.ChangeTurf(/turf/space)
- if(istype(T, /turf/simulated/floor/))
- var/turf/simulated/floor/F = T
- if(prob(volume/10))
- F.make_plating()
- if(istype(F, /turf/simulated/floor/))
- new /obj/effect/hotspot(F)
- if(istype(T, /turf/simulated/wall/))
- var/turf/simulated/wall/W = T
- if(prob(volume/10))
- W.ChangeTurf(/turf/simulated/floor)
- return
-
-/datum/reagent/clf3/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
- if(method == TOUCH && isliving(M))
- M.adjust_fire_stacks(5)
- M.IgniteMob()
- new /obj/effect/hotspot(M.loc)
- return
-
-/datum/reagent/sorium
- name = "Sorium"
- id = "sorium"
- description = "Sends everything flying from the detonation point."
- reagent_state = LIQUID
- color = "#FFA500"
-
-/datum/chemical_reaction/sorium
- name = "Sorium"
- id = "sorium"
- result = "sorium"
- required_reagents = list("mercury" = 1, "oxygen" = 1, "nitrogen" = 1, "carbon" = 1)
- result_amount = 4
-
-/datum/chemical_reaction/sorium_vortex
- name = "sorium_vortex"
- id = "sorium_vortex"
- result = null
- required_reagents = list("sorium" = 1)
- required_temp = 474
-
-/datum/chemical_reaction/sorium_vortex/on_reaction(var/datum/reagents/holder, var/created_volume)
- var/turf/simulated/T = get_turf(holder.my_atom)
- goonchem_vortex(T, 1, 5, 6)
-
-/datum/chemical_reaction/sorium/on_reaction(var/datum/reagents/holder, var/created_volume)
- if(holder.has_reagent("stabilizing_agent"))
- return
- holder.remove_reagent("sorium", created_volume)
- var/turf/simulated/T = get_turf(holder.my_atom)
- goonchem_vortex(T, 1, 5, 6)
-
-/datum/reagent/liquid_dark_matter
- name = "Liquid Dark Matter"
- id = "liquid_dark_matter"
- description = "Sucks everything into the detonation point."
- reagent_state = LIQUID
- color = "#800080"
-
-/datum/chemical_reaction/liquid_dark_matter
- name = "Liquid Dark Matter"
- id = "liquid_dark_matter"
- result = "liquid_dark_matter"
- required_reagents = list("stable_plasma" = 1, "radium" = 1, "carbon" = 1)
- result_amount = 3
-
-/datum/chemical_reaction/ldm_vortex
- name = "LDM Vortex"
- id = "ldm_vortex"
- result = null
- required_reagents = list("liquid_dark_matter" = 1)
- required_temp = 474
-
-/datum/chemical_reaction/ldm_vortex/on_reaction(var/datum/reagents/holder, var/created_volume)
- var/turf/simulated/T = get_turf(holder.my_atom)
- goonchem_vortex(T, 0, 5, 6)
- return
-/datum/chemical_reaction/liquid_dark_matter/on_reaction(var/datum/reagents/holder, var/created_volume)
- if(holder.has_reagent("stabilizing_agent"))
- return
- holder.remove_reagent("liquid_dark_matter", created_volume)
- var/turf/simulated/T = get_turf(holder.my_atom)
- goonchem_vortex(T, 0, 5, 6)
- return
-
-/proc/goonchem_vortex(var/turf/simulated/T, var/setting_type, var/range, var/pull_times)
- for(var/atom/movable/X in orange(range, T))
- if(istype(X, /obj/effect))
- continue //stop pulling smoke and hotspots please
- if(istype(X, /atom/movable))
- if((X) && !X.anchored)
- if(setting_type)
- for(var/i = 0, i < pull_times, i++)
- step_away(X,T)
- else
- for(var/i = 0, i < pull_times, i++)
- step_towards(X,T)
-
-/datum/reagent/blackpowder
- name = "Black Powder"
- id = "blackpowder"
- description = "Explodes. Violently."
- reagent_state = LIQUID
- color = "#000000"
- metabolization_rate = 0.05
-
-/datum/chemical_reaction/blackpowder
- name = "Black Powder"
- id = "blackpowder"
- result = "blackpowder"
- required_reagents = list("saltpetre" = 1, "charcoal" = 1, "sulfur" = 1)
- result_amount = 3
-
-/datum/chemical_reaction/blackpowder_explosion
- name = "Black Powder Kaboom"
- id = "blackpowder_explosion"
- result = null
- required_reagents = list("blackpowder" = 1)
- result_amount = 1
- required_temp = 474
- mix_message = "Sparks start flying around the black powder!"
-
-/datum/chemical_reaction/blackpowder_explosion/on_reaction(var/datum/reagents/holder, var/created_volume)
- sleep(rand(50,100))
- blackpowder_detonate(holder, created_volume)
- return
-
-/datum/reagent/blackpowder/on_ex_act()
- blackpowder_detonate(holder, volume)
- return
-
-/proc/blackpowder_detonate(var/datum/reagents/holder, var/created_volume)
- var/turf/simulated/T = get_turf(holder.my_atom)
- var/ex_severe = round(created_volume / 100)
- var/ex_heavy = round(created_volume / 42)
- var/ex_light = round(created_volume / 21)
- var/ex_flash = round(created_volume / 8)
- explosion(T,ex_severe,ex_heavy,ex_light,ex_flash, 1)
- return
-/datum/reagent/flash_powder
- name = "Flash Powder"
- id = "flash_powder"
- description = "Makes a very bright flash."
- reagent_state = LIQUID
- color = "#FFFF00"
-
-/datum/chemical_reaction/flash_powder
- name = "Flash powder"
- id = "flash_powder"
- result = "flash_powder"
- required_reagents = list("aluminium" = 1, "potassium" = 1, "sulfur" = 1 )
- result_amount = 3
-
-/datum/chemical_reaction/flash_powder_flash
- name = "Flash powder activation"
- id = "flash_powder_flash"
- result = null
- required_reagents = list("flash_powder" = 1)
- required_temp = 374
-
-/datum/chemical_reaction/flash_powder_flash/on_reaction(var/datum/reagents/holder, var/created_volume)
- var/location = get_turf(holder.my_atom)
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(2, 1, location)
- s.start()
- for(var/mob/living/carbon/C in get_hearers_in_view(created_volume/10, location))
- if(C.check_eye_prot())
- continue
- flick("e_flash", C.flash)
- if(get_dist(C, location) < 4)
- C.Weaken(5)
- continue
- C.Stun(5)
-
-/datum/chemical_reaction/flash_powder/on_reaction(var/datum/reagents/holder, var/created_volume)
- if(holder.has_reagent("stabilizing_agent"))
- return
- var/location = get_turf(holder.my_atom)
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(2, 1, location)
- s.start()
- for(var/mob/living/carbon/C in get_hearers_in_view(created_volume/10, location))
- if(C.check_eye_prot())
- continue
- flick("e_flash", C.flash)
- if(get_dist(C, location) < 4)
- C.Weaken(5)
- continue
- C.Stun(5)
- holder.remove_reagent("flash_powder", created_volume)
-
-/datum/reagent/smoke_powder
- name = "Smoke Powder"
- id = "smoke_powder"
- description = "Makes a large cloud of smoke that can carry reagents."
- reagent_state = LIQUID
- color = "#808080"
-
-/datum/chemical_reaction/smoke_powder
- name = "smoke_powder"
- id = "smoke_powder"
- result = "smoke_powder"
- required_reagents = list("potassium" = 1, "sugar" = 1, "phosphorus" = 1)
- result_amount = 3
-
-
-/datum/chemical_reaction/smoke_powder_smoke
- name = "smoke_powder_smoke"
- id = "smoke_powder_smoke"
- result = null
- required_reagents = list("smoke_powder" = 1)
- required_temp = 374
- secondary = 1
- mob_react = 1
-
-/datum/chemical_reaction/smoke_powder_smoke/on_reaction(var/datum/reagents/holder, var/created_volume)
- var/location = get_turf(holder.my_atom)
- var/datum/effect/effect/system/chem_smoke_spread/S = new /datum/effect/effect/system/chem_smoke_spread
- S.attach(location)
- playsound(location, 'sound/effects/smoke.ogg', 50, 1, -3)
- spawn(0)
- if(S)
- S.set_up(holder, 10, 0, location)
- S.start()
- sleep(10)
- S.start()
- if(holder && holder.my_atom)
- holder.clear_reagents()
- return
-
-/datum/chemical_reaction/smoke_powder/on_reaction(var/datum/reagents/holder, var/created_volume)
- if(holder.has_reagent("stabilizing_agent"))
- return
- holder.remove_reagent("smoke_powder", created_volume)
- var/location = get_turf(holder.my_atom)
- var/datum/effect/effect/system/chem_smoke_spread/S = new /datum/effect/effect/system/chem_smoke_spread
- S.attach(location)
- playsound(location, 'sound/effects/smoke.ogg', 50, 1, -3)
- spawn(0)
- if(S)
- S.set_up(holder, 10, 0, location)
- S.start()
- sleep(10)
- S.start()
- if(holder && holder.my_atom)
- holder.clear_reagents()
- return
-
-/datum/reagent/sonic_powder
- name = "Sonic Powder"
- id = "sonic_powder"
- description = "Makes a deafening noise."
- reagent_state = LIQUID
- color = "#0000FF"
-
-/datum/chemical_reaction/sonic_powder
- name = "sonic_powder"
- id = "sonic_powder"
- result = "sonic_powder"
- required_reagents = list("oxygen" = 1, "cola" = 1, "phosphorus" = 1)
- result_amount = 3
-
-
-/datum/chemical_reaction/sonic_powder_deafen
- name = "sonic_powder_deafen"
- id = "sonic_powder_deafen"
- result = null
- required_reagents = list("sonic_powder" = 1)
- required_temp = 374
-
-/datum/chemical_reaction/sonic_powder_deafen/on_reaction(var/datum/reagents/holder, var/created_volume)
- var/location = get_turf(holder.my_atom)
- playsound(location, 'sound/effects/bang.ogg', 25, 1)
- for(var/mob/living/carbon/C in get_hearers_in_view(created_volume/10, location))
- if(ishuman(C))
- var/mob/living/carbon/human/H = C
- if((H.ears && (H.ears.flags & EARBANGPROTECT)) || (H.head && (H.head.flags & HEADBANGPROTECT)))
- continue
- C.show_message("BANG", 2)
- C.Stun(5)
- C.Weaken(5)
- C.setEarDamage(C.ear_damage + rand(0, 5), max(C.ear_deaf,15))
- if(C.ear_damage >= 15)
- C << "Your ears start to ring badly!"
- else if(C.ear_damage >= 5)
- C << "Your ears start to ring!"
-
-/datum/chemical_reaction/sonic_powder/on_reaction(var/datum/reagents/holder, var/created_volume)
- if(holder.has_reagent("stabilizing_agent"))
- return
- holder.remove_reagent("sonic_powder", created_volume)
- var/location = get_turf(holder.my_atom)
- playsound(location, 'sound/effects/bang.ogg', 25, 1)
- for(var/mob/living/carbon/C in get_hearers_in_view(created_volume/10, location))
- if(ishuman(C))
- var/mob/living/carbon/human/H = C
- if((H.ears && (H.ears.flags & EARBANGPROTECT)) || (H.head && (H.head.flags & HEADBANGPROTECT)))
- continue
- C.show_message("BANG", 2)
- C.Stun(5)
- C.Weaken(5)
- C.setEarDamage(C.ear_damage + rand(0, 5), max(C.ear_deaf,15))
- if(C.ear_damage >= 15)
- C << "Your ears start to ring badly!"
- else if(C.ear_damage >= 5)
- C << "Your ears start to ring!"
-
-/datum/reagent/phlogiston
- name = "Phlogiston"
- id = "phlogiston"
- description = "Catches you on fire and makes you ignite."
- reagent_state = LIQUID
- color = "#FF9999"
-
-/datum/chemical_reaction/phlogiston
- name = "phlogiston"
- id = "phlogiston"
- result = "phlogiston"
- required_reagents = list("phosphorus" = 1, "sacid" = 1, "stable_plasma" = 1)
- result_amount = 3
-
-/datum/chemical_reaction/phlogiston/on_reaction(var/datum/reagents/holder, var/created_volume)
- if(holder.has_reagent("stabilizing_agent"))
- return
- var/turf/simulated/T = get_turf(holder.my_atom)
- if(istype(T))
- T.atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, created_volume)
- return
-
-/datum/reagent/phlogiston/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjust_fire_stacks(1)
- M.IgniteMob()
- M.adjustFireLoss(0.2*M.fire_stacks)
- ..()
- return
-
-/datum/reagent/napalm
- name = "Napalm"
- id = "napalm"
- description = "Very flammable."
- reagent_state = LIQUID
- color = "#FF9999"
-
-/datum/reagent/napalm/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjust_fire_stacks(1)
- ..()
- return
-
-/datum/reagent/napalm/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
- if(method == TOUCH && isliving(M))
- M.adjust_fire_stacks(7)
- return
-
-/datum/chemical_reaction/napalm
- name = "Napalm"
- id = "napalm"
- result = "napalm"
- required_reagents = list("sugar" = 1, "fuel" = 1, "ethanol" = 1 )
- result_amount = 3
-
-datum/reagent/cryostylane
- name = "Cryostylane"
- id = "cryostylane"
- description = "Comes into existence at 20K. As long as there is sufficient oxygen for it to react with, Cryostylane slowly cools all other reagents in the mob down to 0K."
- color = "#B2B2FF" // rgb: 139, 166, 233
-
-/datum/chemical_reaction/cryostylane
- name = "cryostylane"
- id = "cryostylane"
- result = "cryostylane"
- required_reagents = list("water" = 1, "stable_plasma" = 1, "nitrogen" = 1)
- result_amount = 3
-
-/datum/chemical_reaction/cryostylane/on_reaction(var/datum/reagents/holder, var/created_volume)
- holder.chem_temp = 20 // cools the fuck down
- return
-
-
-datum/reagent/cryostylane/on_mob_life(var/mob/living/M as mob) //TODO: code freezing into an ice cube
- if(M.reagents.has_reagent("oxygen"))
- M.reagents.remove_reagent("oxygen", 1)
- M.bodytemperature -= 30
- ..()
- return
-
-datum/reagent/cryostylane/on_tick()
- if(holder.has_reagent("oxygen"))
- holder.remove_reagent("oxygen", 1)
- holder.chem_temp -= 10
- holder.handle_reactions()
- ..()
- return
-
-
-datum/reagent/cryostylane/reaction_turf(var/turf/simulated/T, var/volume)
- if(volume >= 5)
- for(var/mob/living/simple_animal/slime/M in T)
- M.adjustToxLoss(rand(15,30))
-
-datum/reagent/pyrosium
- name = "Pyrosium"
- id = "pyrosium"
- description = "Comes into existence at 20K. As long as there is sufficient oxygen for it to react with, Pyrosium slowly cools all other reagents in the mob down to 0K."
- color = "#B20000" // rgb: 139, 166, 233
-
-/datum/chemical_reaction/pyrosium
- name = "pyrosium"
- id = "pyrosium"
- result = "pyrosium"
- required_reagents = list("stable_plasma" = 1, "radium" = 1, "phosphorus" = 1)
- result_amount = 3
-
-/datum/chemical_reaction/pyrosium/on_reaction(var/datum/reagents/holder, var/created_volume)
- holder.chem_temp = 20 // also cools the fuck down
- return
-
-datum/reagent/pyrosium/on_mob_life(var/mob/living/M as mob)
- if(M.reagents.has_reagent("oxygen"))
- M.reagents.remove_reagent("oxygen", 1)
- M.bodytemperature += 30
- ..()
- return
-
-datum/reagent/pyrosium/on_tick()
- if(holder.has_reagent("oxygen"))
- holder.remove_reagent("oxygen", 1)
- holder.chem_temp += 10
- holder.handle_reactions()
- ..()
- return
diff --git a/code/modules/reagents/Chemistry-Goon-Readme.dm b/code/modules/reagents/Chemistry-Goon-Readme.dm
deleted file mode 100644
index 0731e28ba93..00000000000
--- a/code/modules/reagents/Chemistry-Goon-Readme.dm
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- Credit goes to Cogwerks, and all the other goonstation coders
- for the original idea and implementation of this over at goonstation.
-
- THE REQUESTED DON'T PORT LIST: IF YOU PORT THESE THE GOONS WILL MURDER US IN OUR SLEEP SO PLEASE DON'T KTHX - Iamgoofball
- Any of the Secret Chems
- Goon in-joke chems (Eg. Cat Drugs, Hairgrownium)
- Liquid Electricity
- Rajajajah
-
-
-/datum/reagent/blankgoonchembase
- name = "blank goonchem base"
- id = "blankgoonchembase"
- description = "A blank chem"
- reagent_state = LIQUID
- color = "#60A584" // rgb: 96, 165, 132
-
-
-/datum/reagent/blankgoonchembase/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- ..()
- return
-
-/datum/chemical_reaction/blankgoonchembase
- name = "blank goonchem base"
- id = "blankgoonchembase"
- result = "blankgoonchembase"
- required_reagents = list("diphenhydramine" = 1, "morphine" = 1, "cleaner" = 1)
- result_amount = 3
- mix_message = "The mixture dries into a pale blue powder."
- required_temp = 420
-
-*/
\ No newline at end of file
diff --git a/code/modules/reagents/Chemistry-Goon-Toxins.dm b/code/modules/reagents/Chemistry-Goon-Toxins.dm
deleted file mode 100644
index b8ebe016012..00000000000
--- a/code/modules/reagents/Chemistry-Goon-Toxins.dm
+++ /dev/null
@@ -1,369 +0,0 @@
-#define SOLID 1
-#define LIQUID 2
-#define GAS 3
-
-#define REM REAGENTS_EFFECT_MULTIPLIER
-
-datum/reagent/polonium
- name = "Polonium"
- id = "polonium"
- description = "Cause significant Radiation damage over time."
- reagent_state = LIQUID
- color = "#CF3600"
- metabolization_rate = 0.1
-
-datum/reagent/polonium/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.radiation += 8
- ..()
- return
-
-
-datum/reagent/histamine
- name = "Histamine"
- id = "histamine"
- description = "A dose-dependent toxin, ranges from annoying to incredibly lethal."
- reagent_state = LIQUID
- color = "#CF3600"
- metabolization_rate = 0.2
- overdose_threshold = 30
-
-datum/reagent/histamine/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- switch(pick(1, 2, 3, 4))
- if(1)
- M << "You can barely see!"
- M.eye_blurry = 3
- if(2)
- M.emote("cough")
- if(3)
- M.emote("sneeze")
- if(4)
- if(prob(75))
- M << "You scratch at an itch."
- M.adjustBruteLoss(2*REM)
- ..()
- return
-datum/reagent/histamine/overdose_process(var/mob/living/M as mob)
- M.adjustOxyLoss(pick(1,3)*REM)
- M.adjustBruteLoss(pick(1,3)*REM)
- M.adjustToxLoss(pick(1,3)*REM)
- ..()
- return
-
-datum/reagent/formaldehyde
- name = "Formaldehyde"
- id = "formaldehyde"
- description = "Deals a moderate amount of Toxin damage over time. 10% chance to decay into 10-15 histamine."
- reagent_state = LIQUID
- color = "#CF3600"
-
-datum/reagent/formaldehyde/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustToxLoss(1*REM)
- if(prob(10))
- M.reagents.add_reagent("histamine",pick(5,15))
- M.reagents.remove_reagent("formaldehyde",1)
- ..()
- return
-
-/datum/chemical_reaction/formaldehyde
- name = "formaldehyde"
- id = "Formaldehyde"
- result = "formaldehyde"
- required_reagents = list("ethanol" = 1, "oxygen" = 1, "silver" = 1)
- result_amount = 3
- required_temp = 420
-
-datum/reagent/venom
- name = "Venom"
- id = "venom"
- description = "Will deal scaling amounts of Toxin and Brute damage over time. 25% chance to decay into 5-10 histamine."
- reagent_state = LIQUID
- color = "#CF3600"
- metabolization_rate = 0.2
-datum/reagent/venom/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustToxLoss((0.1*volume)*REM)
- M.adjustBruteLoss((0.1*volume)*REM)
- if(prob(25))
- M.reagents.add_reagent("histamine",pick(5,10))
- M.reagents.remove_reagent("venom",1)
- ..()
- return
-
-datum/reagent/neurotoxin2
- name = "Neurotoxin"
- id = "neurotoxin2"
- description = "Deals toxin and brain damage up to 60 before it slows down, causing confusion and a knockout after 17 elapsed cycles."
- reagent_state = LIQUID
- color = "#CF3600"
- var/cycle_count = 0
- metabolization_rate = 1
-
-datum/reagent/neurotoxin2/on_mob_life(var/mob/living/M as mob)
- cycle_count++
- if(M.brainloss + M.toxloss <= 60)
- M.adjustBrainLoss(1*REM)
- M.adjustToxLoss(1*REM)
- if(cycle_count == 17)
- M.sleeping += 10 // buffed so it works
- ..()
- return
-
-/datum/chemical_reaction/neurotoxin2
- name = "neurotoxin2"
- id = "neurotoxin2"
- result = "neurotoxin2"
- required_reagents = list("space_drugs" = 1)
- result_amount = 1
- required_temp = 674
-
-datum/reagent/cyanide
- name = "Cyanide"
- id = "cyanide"
- description = "Deals toxin damage, alongside some oxygen loss. 8% chance of stun and some extra toxin damage."
- reagent_state = LIQUID
- color = "#CF3600"
- metabolization_rate = 0.1
-
-datum/reagent/cyanide/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustToxLoss(1.5*REM)
- if(prob(10))
- M.losebreath += 1
- if(prob(8))
- M << "You feel horrendously weak!"
- M.Stun(2)
- M.adjustToxLoss(2*REM)
- ..()
- return
-
-/datum/chemical_reaction/cyanide
- name = "Cyanide"
- id = "cyanide"
- result = "cyanide"
- required_reagents = list("oil" = 1, "ammonia" = 1, "oxygen" = 1)
- result_amount = 3
- required_temp = 380
-
-/datum/reagent/questionmark // food poisoning
- name = "Bad Food"
- id = "????"
- description = "????"
- reagent_state = LIQUID
- color = "#CF3600"
- metabolization_rate = 0.2
-
-datum/reagent/questionmark/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustToxLoss(1*REM)
- ..()
- return
-
-datum/reagent/itching_powder
- name = "Itching Powder"
- id = "itching_powder"
- description = "Lots of annoying random effects, chances to do some brute damage from scratching. 6% chance to decay into 1-3 units of histamine."
- reagent_state = LIQUID
- color = "#CF3600"
- metabolization_rate = 0.3
-
-/datum/reagent/itching_powder/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
- if(method == TOUCH)
- M.reagents.add_reagent("itching_powder", volume)
- return
-
-datum/reagent/itching_powder/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(prob(27))
- M << "You scratch at your head."
- M.adjustBruteLoss(0.2*REM)
- if(prob(27))
- M << "You scratch at your leg."
- M.adjustBruteLoss(0.2*REM)
- if(prob(27))
- M << "You scratch at your arm."
- M.adjustBruteLoss(0.2*REM)
- if(prob(6))
- M.reagents.add_reagent("histamine",rand(1,3))
- M.reagents.remove_reagent("itching_powder",1)
- ..()
- return
-
-/datum/chemical_reaction/itching_powder
- name = "Itching Powder"
- id = "itching_powder"
- result = "itching_powder"
- required_reagents = list("fuel" = 1, "ammonia" = 1, "charcoal" = 1)
- result_amount = 3
-
-/datum/chemical_reaction/facid
- name = "Fluorosulfuric acid"
- id = "facid"
- result = "facid"
- required_reagents = list("sacid" = 1, "fluorine" = 1, "hydrogen" = 1, "potassium" = 1)
- result_amount = 4
- required_temp = 380
-
-datum/reagent/initropidril
- name = "Initropidril"
- id = "initropidril"
- description = "33% chance to hit with a random amount of toxin damage, 5-10% chances to cause stunning, suffocation, or immediate heart failure."
- reagent_state = LIQUID
- color = "#CF3600"
- metabolization_rate = 0.4
-
-datum/reagent/initropidril/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(prob(33))
- M.adjustToxLoss(rand(5,25))
- if(prob(7))
- var/picked_option = rand(1,3)
- switch(picked_option)
- if(1)
- M.Stun(3)
- M.Weaken(3)
- if(2)
- M.losebreath += 10
- M.adjustOxyLoss(rand(5,25))
- if(3)
- var/mob/living/carbon/human/H = M
- if(!H.heart_attack)
- H.visible_message("[H] clutches at their chest as if their heart stopped!", "You clutch at your chest as if your heart stopped!")
- H.heart_attack = 1 // rip in pepperoni
- else
- H.losebreath += 10
- H.adjustOxyLoss(rand(5,25))
- ..()
- return
-
-datum/reagent/pancuronium
- name = "Pancuronium"
- id = "pancuronium"
- description = "Knocks you out after 30 seconds, 7% chance to cause some oxygen loss."
- reagent_state = LIQUID
- color = "#CF3600"
- metabolization_rate = 0.2
-
-datum/reagent/pancuronium/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(current_cycle >= 10)
- M.SetParalysis(3)
- if(prob(7))
- M.losebreath += rand(3,5)
- ..()
- return
-
-datum/reagent/sodium_thiopental
- name = "Sodium Thiopental"
- id = "sodium_thiopental"
- description = "Puts you to sleep after 30 seconds, along with some major stamina loss."
- reagent_state = LIQUID
- color = "#CF3600"
- metabolization_rate = 0.7
-
-datum/reagent/sodium_thiopental/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(current_cycle >= 10)
- M.sleeping += 3
- M.adjustStaminaLoss(10)
- ..()
- return
-
-datum/reagent/sulfonal
- name = "Sulfonal"
- id = "sulfonal"
- description = "Deals some toxin damage, and puts you to sleep after 66 seconds."
- reagent_state = LIQUID
- color = "#CF3600"
- metabolization_rate = 0.1
-
-/datum/chemical_reaction/sulfonal
- name = "sulfonal"
- id = "sulfonal"
- result = "sulfonal"
- required_reagents = list("acetone" = 1, "diethylamine" = 1, "sulfur" = 1)
- result_amount = 3
-
-datum/reagent/sulfonal/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(current_cycle >= 22)
- M.sleeping += 3
- M.adjustToxLoss(1)
- ..()
- return
-
-datum/reagent/amanitin
- name = "Amanitin"
- id = "amanitin"
- description = "On the last second that it's in you, it hits you with a stack of toxin damage based on how long it's been in you. The more you use, the longer it takes before anything happens, but the harder it hits when it does."
- reagent_state = LIQUID
- color = "#CF3600"
-
-datum/reagent/amanitin/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- ..()
- return
-
-datum/reagent/amanitin/on_mob_delete(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustToxLoss(current_cycle*rand(2,4))
- ..()
-
-datum/reagent/lipolicide
- name = "Lipolicide"
- id = "lipolicide"
- description = "Deals some toxin damage unless they keep eating food. Will reduce nutrition values."
- reagent_state = LIQUID
- color = "#CF3600"
-
-/datum/chemical_reaction/lipolicide
- name = "lipolicide"
- id = "lipolicide"
- result = "lipolicide"
- required_reagents = list("mercury" = 1, "diethylamine" = 1, "ephedrine" = 1)
- result_amount = 3
-
-datum/reagent/lipolicide/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(!holder.has_reagent("nutriment"))
- M.adjustToxLoss(1)
- M.nutrition -= 10 * REAGENTS_METABOLISM
- M.overeatduration = 0
- if(M.nutrition < 0)//Prevent from going into negatives.
- M.nutrition = 0
- ..()
- return
-
-datum/reagent/coniine
- name = "Coniine"
- id = "coniine"
- description = "Does moderate toxin damage and oxygen loss."
- reagent_state = LIQUID
- color = "#CF3600"
- metabolization_rate = 0.05
-
-datum/reagent/coniine/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.losebreath += 5
- M.adjustToxLoss(2)
- ..()
- return
-
-datum/reagent/curare
- name = "Curare"
- id = "curare"
- description = "Does some oxygen and toxin damage, weakens you after 33 seconds."
- reagent_state = LIQUID
- color = "#CF3600"
- metabolization_rate = 0.1
-
-datum/reagent/curare/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(current_cycle >= 11)
- M.Weaken(3)
- M.adjustToxLoss(1)
- M.adjustOxyLoss(1)
- ..()
- return
\ No newline at end of file
diff --git a/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm
index 02c41c45711..e6cf3d2eca2 100644
--- a/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm
@@ -73,20 +73,6 @@ datum/reagent/blob/lung_destroying_toxin/reaction_mob(var/mob/living/M as mob, v
M << "The blob strikes you, and your lungs feel heavy and weak!"
// Special Reagents
-datum/reagent/blob/acid
- name = "Acidic Liquid"
- id = "blob_acid"
- description = ""
- color = "#BD80F4"
-
-datum/reagent/blob/acid/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume, var/show_message = 1)
- if(method == TOUCH)
- if(prob(50))
- M.acid_act(5,1,5)
- if(show_message)
- M << "The blob's tendrils melt through your equipment!"
- M.apply_damage(10, BRUTE)
-
datum/reagent/blob/radioactive_liquid
name = "Radioactive Liquid"
id = "radioactive_liquid"
@@ -187,7 +173,7 @@ datum/reagent/blob/spacedrugs/reaction_mob(var/mob/living/M as mob, var/method=T
/proc/reagent_vortex(var/mob/living/M as mob, var/setting_type)
var/turf/pull = get_turf(M)
- for(var/atom/movable/X in orange(4,pull))
+ for(var/atom/movable/X in range(4,pull))
if(istype(X, /atom/movable))
if((X) && !X.anchored)
if(setting_type)
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm
deleted file mode 100644
index d86016f96ab..00000000000
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm
+++ /dev/null
@@ -1,956 +0,0 @@
-#define SOLID 1
-#define LIQUID 2
-#define GAS 3
-
-#define REM REAGENTS_EFFECT_MULTIPLIER
-
-//The reaction procs must ALWAYS set src = null, this detaches the proc from the object (the reagent)
-//so that it can continue working when the reagent is deleted while the proc is still active.
-
-
-//Various reagents
-//Toxin & acid reagents
-//Hydroponics stuff
-
-datum/reagent
- var/name = "Reagent"
- var/id = "reagent"
- var/description = ""
- var/datum/reagents/holder = null
- var/reagent_state = LIQUID
- var/list/data
- var/current_cycle = 0
- var/volume = 0
- var/color = "#000000" // rgb: 0, 0, 0
- var/can_synth = 1
- var/metabolization_rate = REAGENTS_METABOLISM
- var/overrides_metab = 0
- var/overdose_threshold = 0
- var/addiction_threshold = 0
- var/addiction_stage = 0
- var/overdosed = 0 // You fucked up and this is now triggering it's overdose effects, purge that shit quick.
-
-datum/reagent/Destroy() // This should only be called by the holder, so it's already handled clearing its references
- ..()
- holder = null
-
-datum/reagent/proc/reaction_mob(var/mob/M, var/method=TOUCH, var/volume, var/show_message = 1) //By default we have a chance to transfer some
- if(!istype(M, /mob/living))
- return 0
- var/datum/reagent/self = src
- src = null //of the reagent to the mob on TOUCHING it.
-
- if(!istype(self.holder.my_atom, /obj/effect/effect/chem_smoke))
- // If the chemicals are in a smoke cloud, do not try to let the chemicals "penetrate" into the mob's system (balance station 13) -- Doohl
-
- if(method == TOUCH)
-
- var/chance = 1
- var/block = 0
-
- for(var/obj/item/clothing/C in M.get_equipped_items())
- if(C.permeability_coefficient < chance) chance = C.permeability_coefficient
- if(istype(C, /obj/item/clothing/suit/bio_suit))
- // bio suits are just about completely fool-proof - Doohl
- // kind of a hacky way of making bio suits more resistant to chemicals but w/e
- if(prob(75))
- block = 1
-
- if(istype(C, /obj/item/clothing/head/bio_hood))
- if(prob(75))
- block = 1
-
- chance = chance * 100
-
- if(prob(chance) && !block)
- if(M.reagents)
- M.reagents.add_reagent(self.id,self.volume/2)
- return 1
-
-datum/reagent/proc/reaction_obj(var/obj/O, var/volume) //By default we transfer a small part of the reagent to the object
- src = null //if it can hold reagents. nope!
- //if(O.reagents)
- // O.reagents.add_reagent(id,volume/3)
- return
-
-datum/reagent/proc/reaction_turf(var/turf/T, var/volume)
- src = null
- return
-
-datum/reagent/proc/on_mob_life(var/mob/living/M as mob)
- current_cycle++
- if(!istype(M, /mob/living))
- return //Noticed runtime errors from facid trying to damage ghosts, this should fix. --NEO
- holder.remove_reagent(src.id, metabolization_rate * M.metabolism_efficiency) //By default it slowly disappears.
- return
-
-// Called when this reagent is removed while inside a mob
-datum/reagent/proc/on_mob_delete(mob/M)
- return
-
-datum/reagent/proc/on_move(var/mob/M)
- return
-
-// Called after add_reagents creates a new reagent.
-datum/reagent/proc/on_new(var/data)
- return
-
-// Called when two reagents of the same are mixing.
-datum/reagent/proc/on_merge(var/data)
- return
-
-datum/reagent/proc/on_update(var/atom/A)
- return
-
-// Called every time reagent containers process.
-datum/reagent/proc/on_tick(var/data)
- return
-
-// Called when the reagent container is hit by an explosion
-datum/reagent/proc/on_ex_act(var/severity)
- return
-
-// Called if the reagent has passed the overdose threshold and is set to be triggering overdose effects
-datum/reagent/proc/overdose_process(var/mob/living/M as mob)
- return
-
-datum/reagent/proc/overdose_start(var/mob/living/M as mob)
- return
-
-datum/reagent/proc/addiction_act_stage1(var/mob/living/M as mob)
- if(prob(30))
- M << "You feel like some [name] right about now."
- return
-
-datum/reagent/proc/addiction_act_stage2(var/mob/living/M as mob)
- if(prob(30))
- M << "You feel like you need [name]. You just can't get enough."
- return
-
-datum/reagent/proc/addiction_act_stage3(var/mob/living/M as mob)
- if(prob(30))
- M << "You have an intense craving for [name]."
- return
-
-datum/reagent/proc/addiction_act_stage4(var/mob/living/M as mob)
- if(prob(30))
- M << "You're not feeling good at all! You really need some [name]."
- return
-
-datum/reagent/blood
- data = list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null)
- name = "Blood"
- id = "blood"
- color = "#C80000" // rgb: 200, 0, 0
-
-datum/reagent/blood/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- var/datum/reagent/blood/self = src
- src = null
- if(self.data && self.data["viruses"])
- for(var/datum/disease/D in self.data["viruses"])
-
- if(D.spread_flags & SPECIAL || D.spread_flags & NON_CONTAGIOUS)
- continue
-
- if(method == TOUCH)
- M.ContractDisease(D)
- else //injected
- M.ForceContractDisease(D)
-
-datum/reagent/blood/on_new(var/list/data)
- if(istype(data))
- SetViruses(src, data)
-
-datum/reagent/blood/on_merge(var/list/data)
- if(src.data && data)
- src.data["cloneable"] = 0 //On mix, consider the genetic sampling unviable for pod cloning, or else we won't know who's even getting cloned, etc
- if(src.data["viruses"] || data["viruses"])
-
- var/list/mix1 = src.data["viruses"]
- var/list/mix2 = data["viruses"]
-
- // Stop issues with the list changing during mixing.
- var/list/to_mix = list()
-
- for(var/datum/disease/advance/AD in mix1)
- to_mix += AD
- for(var/datum/disease/advance/AD in mix2)
- to_mix += AD
-
- var/datum/disease/advance/AD = Advance_Mix(to_mix)
- if(AD)
- var/list/preserve = list(AD)
- for(var/D in src.data["viruses"])
- if(!istype(D, /datum/disease/advance))
- preserve += D
- src.data["viruses"] = preserve
- return 1
-
-datum/reagent/blood/reaction_turf(var/turf/simulated/T, var/volume)//splash the blood all over the place
- if(!istype(T)) return
- var/datum/reagent/blood/self = src
- src = null
- if(!(volume >= 3)) return
- //var/datum/disease/D = self.data["virus"]
- if(!self.data["donor"] || istype(self.data["donor"], /mob/living/carbon/human))
- var/obj/effect/decal/cleanable/blood/blood_prop = locate() in T //find some blood here
- if(!blood_prop) //first blood!
- blood_prop = new(T)
- blood_prop.blood_DNA[self.data["blood_DNA"]] = self.data["blood_type"]
-
- for(var/datum/disease/D in self.data["viruses"])
- var/datum/disease/newVirus = D.Copy(1)
- blood_prop.viruses += newVirus
- newVirus.holder = blood_prop
-
-
- else if(istype(self.data["donor"], /mob/living/carbon/monkey))
- var/obj/effect/decal/cleanable/blood/blood_prop = locate() in T
- if(!blood_prop)
- blood_prop = new(T)
- blood_prop.blood_DNA["Non-Human DNA"] = "A+"
- for(var/datum/disease/D in self.data["viruses"])
- var/datum/disease/newVirus = D.Copy(1)
- blood_prop.viruses += newVirus
- newVirus.holder = blood_prop
-
- else if(istype(self.data["donor"], /mob/living/carbon/alien))
- var/obj/effect/decal/cleanable/xenoblood/blood_prop = locate() in T
- if(!blood_prop)
- blood_prop = new(T)
- blood_prop.blood_DNA["UNKNOWN DNA STRUCTURE"] = "X*"
- for(var/datum/disease/D in self.data["viruses"])
- var/datum/disease/newVirus = D.Copy(1)
- blood_prop.viruses += newVirus
- newVirus.holder = blood_prop
- return
-
-datum/reagent/vaccine
- //data must contain virus type
- name = "Vaccine"
- id = "vaccine"
- color = "#C81040" // rgb: 200, 16, 64
-
-datum/reagent/vaccine/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- var/datum/reagent/vaccine/self = src
- src = null
- if(islist(self.data) && method == INGEST)
- for(var/datum/disease/D in M.viruses)
- if(D.GetDiseaseID() in self.data)
- D.cure()
- M.resistances |= self.data
- return
-
-datum/reagent/vaccine/on_merge(var/list/data)
- if(istype(data))
- src.data |= data.Copy()
-
-
-datum/reagent/water
- name = "Water"
- id = "water"
- description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen."
- color = "#AAAAAA77" // rgb: 170, 170, 170, 77 (alpha)
- var/cooling_temperature = 2
-
-/*
- * Water reaction to turf
- */
-
-datum/reagent/water/reaction_turf(var/turf/simulated/T, var/volume)
- if (!istype(T)) return
- var/CT = cooling_temperature
- src = null
- if(volume >= 10)
- T.MakeSlippery()
-
- for(var/mob/living/simple_animal/slime/M in T)
- M.apply_water()
-
- var/hotspot = (locate(/obj/effect/hotspot) in T)
- if(hotspot && !istype(T, /turf/space))
- if(T.air)
- var/datum/gas_mixture/G = T.air
- G.temperature = max(min(G.temperature-(CT*1000),G.temperature/CT),0)
- G.react()
- qdel(hotspot)
- return
-
-/*
- * Water reaction to an object
- */
-
-datum/reagent/water/reaction_obj(var/obj/O, var/volume)
- src = null
- // Monkey cube
- if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/monkeycube))
- var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O
- if(!cube.wrapped)
- cube.Expand()
-
- // Dehydrated carp
- if(istype(O,/obj/item/toy/carpplushie/dehy_carp))
- var/obj/item/toy/carpplushie/dehy_carp/dehy = O
- dehy.Swell() // Makes a carp
-
- return
-
-/*
- * Water reaction to a mob
- */
-
-datum/reagent/water/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with water can help put them out!
- if(!istype(M, /mob/living))
- return
- if(method == TOUCH)
- M.adjust_fire_stacks(-(volume / 10))
- if(M.fire_stacks <= 0)
- M.ExtinguishMob()
- return
-
-datum/reagent/water/holywater
- name = "Holy Water"
- id = "holywater"
- description = "Water blessed by some deity."
- color = "#E0E8EF" // rgb: 224, 232, 239
-
-datum/reagent/water/holywater/on_mob_life(var/mob/living/M as mob)
- if(!data) data = 1
- data++
- M.jitteriness = max(M.jitteriness-5,0)
- if(data >= 30) // 12 units, 54 seconds @ metabolism 0.4 units & tick rate 1.8 sec
- if (!M.stuttering) M.stuttering = 1
- M.stuttering += 4
- M.Dizzy(5)
- if(iscultist(M) && prob(5))
- M.say(pick("Av'te Nar'sie","Pa'lid Mors","INO INO ORA ANA","SAT ANA!","Daim'niodeis Arc'iai Le'eones","Egkau'haom'nai en Chaous","Ho Diak'nos tou Ap'iron","R'ge Na'sie","Diabo us Vo'iscum","Si gn'um Co'nu"))
- if(data >= 75 && prob(33)) // 30 units, 135 seconds
- if (!M.confused) M.confused = 1
- M.confused += 3
- if(iscultist(M))
- ticker.mode.remove_cultist(M.mind)
- holder.remove_reagent(src.id, src.volume) // maybe this is a little too perfect and a max() cap on the statuses would be better??
- M.jitteriness = 0
- M.stuttering = 0
- M.confused = 0
- holder.remove_reagent(src.id, 0.4) //fixed consumption to prevent balancing going out of whack
- return
-
-datum/reagent/water/holywater/reaction_turf(var/turf/simulated/T, var/volume)
- ..()
- if(!istype(T)) return
- if(volume>=10)
- for(var/obj/effect/rune/R in T)
- qdel(R)
- T.Bless()
-
-datum/reagent/fuel/unholywater //if you somehow managed to extract this from someone, dont splash it on yourself and have a smoke
- name = "Unholy Water"
- id = "unholywater"
- description = "Something that shouldn't exist on this plane of existance."
-
-datum/reagent/fuel/unholywater/on_mob_life(var/mob/living/M as mob)
- M.adjustBrainLoss(3)
- if(iscultist(M))
- M.status_flags |= GOTTAGOFAST
- M.drowsyness = max(M.drowsyness-5, 0)
- M.AdjustParalysis(-2)
- M.AdjustStunned(-2)
- M.AdjustWeakened(-2)
- else
- M.adjustToxLoss(2)
- M.adjustFireLoss(2)
- M.adjustOxyLoss(2)
- M.adjustBruteLoss(2)
- holder.remove_reagent(src.id, 1)
-
-datum/reagent/hellwater //if someone has this in their system they've really pissed off an eldrich god
- name = "Hell Water"
- id = "hell_water"
- description = "YOUR FLESH! IT BURNS!"
-
-datum/reagent/hellwater/on_mob_life(var/mob/living/M as mob)
- M.fire_stacks = min(5,M.fire_stacks + 3)
- M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire
- M.adjustToxLoss(1)
- M.adjustFireLoss(1) //Hence the other damages... ain't I a bastard?
- M.adjustBrainLoss(5)
- holder.remove_reagent(src.id, 1)
-
-datum/reagent/lube
- name = "Space Lube"
- id = "lube"
- description = "Lubricant is a substance introduced between two moving surfaces to reduce the friction and wear between them. giggity."
- color = "#009CA8" // rgb: 0, 156, 168
-
-datum/reagent/lube/reaction_turf(var/turf/simulated/T, var/volume)
- if (!istype(T)) return
- src = null
- if(volume >= 1)
- T.MakeSlippery(2)
-
-datum/reagent/slimetoxin
- name = "Mutation Toxin"
- id = "mutationtoxin"
- description = "A corruptive toxin produced by slimes."
- color = "#13BC5E" // rgb: 19, 188, 94
-
-datum/reagent/unstableslimetoxin
- name = "Unstable Mutation Toxin"
- id = "unstablemutationtoxin"
- description = "An unstable and unpredictable corruptive toxin produced by slimes."
- color = "#5EFF3B" //RGB: 94, 255, 59
- metabolization_rate = INFINITY //So it instantly removes all of itself
-
-datum/reagent/unstableslimetoxin/on_mob_life(var/mob/living/carbon/human/H as mob)
- ..()
- H << "You crumple in agony as your flesh wildly morphs into new forms!"
- H.visible_message("[H] falls to the ground and screams as their skin bubbles and froths!") //'froths' sounds painful when used with SKIN.
- H.Weaken(3)
- sleep(30)
- var/list/blacklisted_species = list(/datum/species/zombie, /datum/species/skeleton, /datum/species/human, /datum/species/golem, /datum/species/golem/adamantine, /datum/species/shadow)
- var/list/possible_morphs = typesof(/datum/species/) - blacklisted_species
- var/datum/species/mutation = pick(possible_morphs)
- if(prob(90) && mutation && H.dna.species != /datum/species/golem && H.dna.species != /datum/species/golem/adamantine)
- H << "The pain subsides. You feel... different."
- H.dna.species = new mutation()
- H.regenerate_icons()
- if(mutation == /datum/species/slime)
- H.faction |= "slime"
- else
- H.faction -= "slime"
- else
- H << "The pain vanishes suddenly. You feel no different."
- return 1
-
-datum/reagent/aslimetoxin
- name = "Advanced Mutation Toxin"
- id = "amutationtoxin"
- description = "An advanced corruptive toxin produced by slimes."
- color = "#13BC5E" // rgb: 19, 188, 94
-
-datum/reagent/aslimetoxin/reaction_mob(var/mob/M, var/volume)
- src = null
- M.ForceContractDisease(new /datum/disease/transformation/slime(0))
-
-datum/reagent/space_drugs
- name = "Space drugs"
- id = "space_drugs"
- description = "An illegal chemical compound used as drug."
- color = "#60A584" // rgb: 96, 165, 132
- metabolization_rate = 0.5 * REAGENTS_METABOLISM
-
-datum/reagent/space_drugs/on_mob_life(var/mob/living/M as mob)
- M.druggy = max(M.druggy, 15)
- if(isturf(M.loc) && !istype(M.loc, /turf/space))
- if(M.canmove)
- if(prob(10)) step(M, pick(cardinal))
- if(prob(7)) M.emote(pick("twitch","drool","moan","giggle"))
- ..()
- return
-
-datum/reagent/serotrotium
- name = "Serotrotium"
- id = "serotrotium"
- description = "A chemical compound that promotes concentrated production of the serotonin neurotransmitter in humans."
- color = "#202040" // rgb: 20, 20, 40
- metabolization_rate = 0.25 * REAGENTS_METABOLISM
-
-datum/reagent/serotrotium/on_mob_life(var/mob/living/M as mob)
- if(ishuman(M))
- if(prob(7)) M.emote(pick("twitch","drool","moan","gasp"))
- ..()
- return
-
-datum/reagent/oxygen
- name = "Oxygen"
- id = "oxygen"
- description = "A colorless, odorless gas."
- reagent_state = GAS
- color = "#808080" // rgb: 128, 128, 128
-
-datum/reagent/copper
- name = "Copper"
- id = "copper"
- description = "A highly ductile metal."
- reagent_state = SOLID
- color = "#6E3B08" // rgb: 110, 59, 8
-
-datum/reagent/nitrogen
- name = "Nitrogen"
- id = "nitrogen"
- description = "A colorless, odorless, tasteless gas."
- reagent_state = GAS
- color = "#808080" // rgb: 128, 128, 128
-
-datum/reagent/hydrogen
- name = "Hydrogen"
- id = "hydrogen"
- description = "A colorless, odorless, nonmetallic, tasteless, highly combustible diatomic gas."
- reagent_state = GAS
- color = "#808080" // rgb: 128, 128, 128
-
-datum/reagent/potassium
- name = "Potassium"
- id = "potassium"
- description = "A soft, low-melting solid that can easily be cut with a knife. Reacts violently with water."
- reagent_state = SOLID
- color = "#A0A0A0" // rgb: 160, 160, 160
-
-datum/reagent/mercury
- name = "Mercury"
- id = "mercury"
- description = "A chemical element."
- color = "#484848" // rgb: 72, 72, 72
-
-datum/reagent/mercury/on_mob_life(var/mob/living/M as mob)
- if(M.canmove && istype(M.loc, /turf/space))
- step(M, pick(cardinal))
- if(prob(5))
- M.emote(pick("twitch","drool","moan"))
- M.adjustBrainLoss(2)
- ..()
- return
-
-datum/reagent/sulfur
- name = "Sulfur"
- id = "sulfur"
- description = "A chemical element."
- reagent_state = SOLID
- color = "#BF8C00" // rgb: 191, 140, 0
-
-datum/reagent/carbon
- name = "Carbon"
- id = "carbon"
- description = "A chemical element."
- reagent_state = SOLID
- color = "#1C1300" // rgb: 30, 20, 0
-
-datum/reagent/carbon/reaction_turf(var/turf/T, var/volume)
- src = null
- if(!istype(T, /turf/space))
- new /obj/effect/decal/cleanable/dirt(T)
-
-datum/reagent/chlorine
- name = "Chlorine"
- id = "chlorine"
- description = "A chemical element."
- reagent_state = GAS
- color = "#808080" // rgb: 128, 128, 128
-
-datum/reagent/chlorine/on_mob_life(var/mob/living/M as mob)
- M.take_organ_damage(1*REM, 0)
- ..()
- return
-
-datum/reagent/fluorine
- name = "Fluorine"
- id = "fluorine"
- description = "A highly-reactive chemical element."
- reagent_state = GAS
- color = "#808080" // rgb: 128, 128, 128
-
-datum/reagent/fluorine/on_mob_life(var/mob/living/M as mob)
- M.adjustToxLoss(1*REM)
- ..()
- return
-
-datum/reagent/sodium
- name = "Sodium"
- id = "sodium"
- description = "A chemical element."
- reagent_state = SOLID
- color = "#808080" // rgb: 128, 128, 128
-
-datum/reagent/phosphorus
- name = "Phosphorus"
- id = "phosphorus"
- description = "A chemical element."
- reagent_state = SOLID
- color = "#832828" // rgb: 131, 40, 40
-
-datum/reagent/lithium
- name = "Lithium"
- id = "lithium"
- description = "A chemical element."
- reagent_state = SOLID
- color = "#808080" // rgb: 128, 128, 128
-
-datum/reagent/lithium/on_mob_life(var/mob/living/M as mob)
- if(M.canmove && istype(M.loc, /turf/space))
- step(M, pick(cardinal))
- if(prob(5))
- M.emote(pick("twitch","drool","moan"))
- ..()
- return
-
-datum/reagent/glycerol
- name = "Glycerol"
- id = "glycerol"
- description = "Glycerol is a simple polyol compound. Glycerol is sweet-tasting and of low toxicity."
- color = "#808080" // rgb: 128, 128, 128
-
-datum/reagent/nitroglycerin
- name = "Nitroglycerin"
- id = "nitroglycerin"
- description = "Nitroglycerin is a heavy, colorless, oily, explosive liquid obtained by nitrating glycerol."
- color = "#808080" // rgb: 128, 128, 128
-
-datum/reagent/radium
- name = "Radium"
- id = "radium"
- description = "Radium is an alkaline earth metal. It is extremely radioactive."
- reagent_state = SOLID
- color = "#C7C7C7" // rgb: 199,199,199
-
-datum/reagent/radium/on_mob_life(var/mob/living/M as mob)
- M.apply_effect(2*REM/M.metabolism_efficiency,IRRADIATE,0)
- ..()
- return
-
-datum/reagent/radium/reaction_turf(var/turf/T, var/volume)
- src = null
- if(volume >= 3)
- if(!istype(T, /turf/space))
- var/obj/effect/decal/cleanable/reagentdecal = new/obj/effect/decal/cleanable/greenglow(T)
- reagentdecal.reagents.add_reagent("uranium", volume)
-
-datum/reagent/thermite
- name = "Thermite"
- id = "thermite"
- description = "Thermite produces an aluminothermic reaction known as a thermite reaction. Can be used to melt walls."
- reagent_state = SOLID
- color = "#673910" // rgb: 103, 57, 16
-
-datum/reagent/thermite/reaction_turf(var/turf/T, var/volume)
- src = null
- if(volume >= 1 && istype(T, /turf/simulated/wall))
- var/turf/simulated/wall/Wall = T
- if(istype(Wall, /turf/simulated/wall/r_wall))
- Wall.thermite = Wall.thermite+(volume*2.5)
- else
- Wall.thermite = Wall.thermite+(volume*10)
- Wall.overlays = list()
- Wall.overlays += image('icons/effects/effects.dmi',"thermite")
- return
-
-datum/reagent/thermite/on_mob_life(var/mob/living/M as mob)
- M.adjustFireLoss(1)
- ..()
- return
-
-datum/reagent/sterilizine
- name = "Sterilizine"
- id = "sterilizine"
- description = "Sterilizes wounds in preparation for surgery."
- color = "#C8A5DC" // rgb: 200, 165, 220
-
-datum/reagent/iron
- name = "Iron"
- id = "iron"
- description = "Pure iron is a metal."
- reagent_state = SOLID
- color = "#C8A5DC" // rgb: 200, 165, 220
-
-datum/reagent/gold
- name = "Gold"
- id = "gold"
- description = "Gold is a dense, soft, shiny metal and the most malleable and ductile metal known."
- reagent_state = SOLID
- color = "#F7C430" // rgb: 247, 196, 48
-
-datum/reagent/silver
- name = "Silver"
- id = "silver"
- description = "A soft, white, lustrous transition metal, it has the highest electrical conductivity of any element and the highest thermal conductivity of any metal."
- reagent_state = SOLID
- color = "#D0D0D0" // rgb: 208, 208, 208
-
-datum/reagent/uranium
- name ="Uranium"
- id = "uranium"
- description = "A silvery-white metallic chemical element in the actinide series, weakly radioactive."
- reagent_state = SOLID
- color = "#B8B8C0" // rgb: 184, 184, 192
-
-datum/reagent/uranium/on_mob_life(var/mob/living/M as mob)
- M.apply_effect(1/M.metabolism_efficiency,IRRADIATE,0)
- ..()
- return
-
-
-datum/reagent/uranium/reaction_turf(var/turf/T, var/volume)
- src = null
- if(volume >= 3)
- if(!istype(T, /turf/space))
- var/obj/effect/decal/cleanable/reagentdecal = new/obj/effect/decal/cleanable/greenglow(T)
- reagentdecal.reagents.add_reagent("uranium", volume)
-
-datum/reagent/aluminium
- name = "Aluminium"
- id = "aluminium"
- description = "A silvery white and ductile member of the boron group of chemical elements."
- reagent_state = SOLID
- color = "#A8A8A8" // rgb: 168, 168, 168
-
-datum/reagent/silicon
- name = "Silicon"
- id = "silicon"
- description = "A tetravalent metalloid, silicon is less reactive than its chemical analog carbon."
- reagent_state = SOLID
- color = "#A8A8A8" // rgb: 168, 168, 168
-
-datum/reagent/fuel
- name = "Welding fuel"
- id = "fuel"
- description = "Required for welders. Flamable."
- color = "#660000" // rgb: 102, 0, 0
-
-datum/reagent/fuel/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with welding fuel to make them easy to ignite!
- if(!istype(M, /mob/living))
- return
- if(method == TOUCH)
- M.adjust_fire_stacks(volume / 10)
- return
-
-datum/reagent/fuel/on_mob_life(var/mob/living/M as mob)
- M.adjustToxLoss(1)
- ..()
- return
-
-datum/reagent/space_cleaner
- name = "Space cleaner"
- id = "cleaner"
- description = "A compound used to clean things. Now with 50% more sodium hypochlorite!"
- color = "#A5F0EE" // rgb: 165, 240, 238
-
-datum/reagent/space_cleaner/reaction_obj(var/obj/O, var/volume)
- if(istype(O,/obj/effect/decal/cleanable))
- qdel(O)
- else
- if(O)
- O.clean_blood()
-
-datum/reagent/space_cleaner/reaction_turf(var/turf/T, var/volume)
- if(volume >= 1)
- T.clean_blood()
- for(var/obj/effect/decal/cleanable/C in T)
- qdel(C)
-
- for(var/mob/living/simple_animal/slime/M in T)
- M.adjustToxLoss(rand(5,10))
- if(istype(T, /turf/simulated/floor))
- var/turf/simulated/floor/F = T
- if(volume >= 1)
- F.dirt = 0
-
-datum/reagent/space_cleaner/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- if(iscarbon(M))
- var/mob/living/carbon/C = M
- if(istype(M,/mob/living/carbon/human))
- var/mob/living/carbon/human/H = M
- if(H.lip_style)
- H.lip_style = null
- H.update_body()
- if(C.r_hand)
- C.r_hand.clean_blood()
- if(C.l_hand)
- C.l_hand.clean_blood()
- if(C.wear_mask)
- if(C.wear_mask.clean_blood())
- C.update_inv_wear_mask(0)
- if(ishuman(M))
- var/mob/living/carbon/human/H = C
- if(H.head)
- if(H.head.clean_blood())
- H.update_inv_head(0)
- if(H.wear_suit)
- if(H.wear_suit.clean_blood())
- H.update_inv_wear_suit(0)
- else if(H.w_uniform)
- if(H.w_uniform.clean_blood())
- H.update_inv_w_uniform(0)
- if(H.shoes)
- if(H.shoes.clean_blood())
- H.update_inv_shoes(0)
- M.clean_blood()
-
-datum/reagent/cryptobiolin
- name = "Cryptobiolin"
- id = "cryptobiolin"
- description = "Cryptobiolin causes confusion and dizzyness."
- color = "#C8A5DC" // rgb: 200, 165, 220
- metabolization_rate = 1.5 * REAGENTS_METABOLISM
-
-datum/reagent/cryptobiolin/on_mob_life(var/mob/living/M as mob)
- M.Dizzy(1)
- if(!M.confused)
- M.confused = 1
- M.confused = max(M.confused, 20)
- ..()
- return
-
-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."
- color = "#C8A5DC" // rgb: 200, 165, 220
-
-datum/reagent/impedrezene/on_mob_life(var/mob/living/M as mob)
- M.jitteriness = max(M.jitteriness-5,0)
- if(prob(80)) M.adjustBrainLoss(1*REM)
- if(prob(50)) M.drowsyness = max(M.drowsyness, 3)
- if(prob(10)) M.emote("drool")
- ..()
- return
-
-datum/reagent/nanites
- name = "Nanomachines"
- id = "nanomachines"
- description = "Microscopic construction robots."
- color = "#535E66" // rgb: 83, 94, 102
-
-datum/reagent/nanites/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- src = null
- if( (prob(10) && method==TOUCH) || method==INGEST)
- M.ForceContractDisease(new /datum/disease/transformation/robot(0))
-
-datum/reagent/xenomicrobes
- name = "Xenomicrobes"
- id = "xenomicrobes"
- description = "Microbes with an entirely alien cellular structure."
- color = "#535E66" // rgb: 83, 94, 102
-
-datum/reagent/xenomicrobes/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- src = null
- if( (prob(10) && method==TOUCH) || method==INGEST)
- M.ContractDisease(new /datum/disease/transformation/xeno(0))
-
-datum/reagent/fluorosurfactant//foam precursor
- name = "Fluorosurfactant"
- id = "fluorosurfactant"
- description = "A perfluoronated sulfonic acid that forms a foam when mixed with water."
- color = "#9E6B38" // rgb: 158, 107, 56
-
-datum/reagent/foaming_agent// Metal foaming agent. This is lithium hydride. Add other recipes (e.g. LiH + H2O -> LiOH + H2) eventually.
- name = "Foaming agent"
- id = "foaming_agent"
- description = "A agent that yields metallic foam when mixed with light metal and a strong acid."
- reagent_state = SOLID
- color = "#664B63" // rgb: 102, 75, 99
-
-datum/reagent/ammonia
- name = "Ammonia"
- id = "ammonia"
- description = "A caustic substance commonly used in fertilizer or household cleaners."
- reagent_state = GAS
- color = "#404030" // rgb: 64, 64, 48
-
-datum/reagent/diethylamine
- name = "Diethylamine"
- id = "diethylamine"
- description = "A secondary amine, mildly corrosive."
- color = "#604030" // rgb: 96, 64, 48
-
-
-
-/////////////////////////Coloured Crayon Powder////////////////////////////
-//For colouring in /proc/mix_color_from_reagents
-
-
-datum/reagent/crayonpowder
- name = "Crayon Powder"
- id = "crayon powder"
- var/colorname = "none"
- description = "A powder made by grinding down crayons, good for colouring chemical reagents."
- reagent_state = SOLID
- color = "#FFFFFF" // rgb: 207, 54, 0
-
-datum/reagent/crayonpowder/New()
- description = "\an [colorname] powder made by grinding down crayons, good for colouring chemical reagents."
-
-
-datum/reagent/crayonpowder/red
- name = "Red Crayon Powder"
- id = "redcrayonpowder"
- colorname = "red"
-
-datum/reagent/crayonpowder/orange
- name = "Orange Crayon Powder"
- id = "orangecrayonpowder"
- colorname = "orange"
- color = "#FF9300" // orange
-
-datum/reagent/crayonpowder/yellow
- name = "Yellow Crayon Powder"
- id = "yellowcrayonpowder"
- colorname = "yellow"
- color = "#FFF200" // yellow
-
-datum/reagent/crayonpowder/green
- name = "Green Crayon Powder"
- id = "greencrayonpowder"
- colorname = "green"
- color = "#A8E61D" // green
-
-datum/reagent/crayonpowder/blue
- name = "Blue Crayon Powder"
- id = "bluecrayonpowder"
- colorname = "blue"
- color = "#00B7EF" // blue
-
-datum/reagent/crayonpowder/purple
- name = "Purple Crayon Powder"
- id = "purplecrayonpowder"
- colorname = "purple"
- color = "#DA00FF" // purple
-
-datum/reagent/crayonpowder/invisible
- name = "Invisible Crayon Powder"
- id = "invisiblecrayonpowder"
- colorname = "invisible"
- color = "#FFFFFF00" // white + no alpha
-
-
-
-
-//////////////////////////////////Hydroponics stuff///////////////////////////////
-
-datum/reagent/plantnutriment
- name = "Generic nutriment"
- id = "plantnutriment"
- description = "Some kind of nutriment. You can't really tell what it is. You should probably report it, along with how you obtained it."
- color = "#000000" // RBG: 0, 0, 0
- var/tox_prob = 0
-
-datum/reagent/plantnutriment/on_mob_life(var/mob/living/M as mob)
- if(prob(tox_prob))
- M.adjustToxLoss(1*REM)
- ..()
- return
-
-datum/reagent/plantnutriment/eznutriment
- name = "E-Z-Nutrient"
- id = "eznutriment"
- description = "Cheap and extremely common type of plant nutriment."
- color = "#376400" // RBG: 50, 100, 0
- tox_prob = 10
-
-datum/reagent/plantnutriment/left4zednutriment
- name = "Left 4 Zed"
- id = "left4zednutriment"
- description = "Unstable nutriment that makes plants mutate more often than usual."
- color = "#1A1E4D" // RBG: 26, 30, 77
- tox_prob = 25
-
-datum/reagent/plantnutriment/robustharvestnutriment
- name = "Robust Harvest"
- id = "robustharvestnutriment"
- description = "Very potent nutriment that prevents plants from mutating."
- color = "#9D9D00" // RBG: 157, 157, 0
- tox_prob = 15
-
-
-
-// Undefine the alias for REAGENTS_EFFECT_MULTIPLER
-#undef REM
diff --git a/code/modules/reagents/Chemistry-Recipes/Slime_extracts.dm b/code/modules/reagents/Chemistry-Recipes/Slime_extracts.dm
index 732d6c39b48..cf323dd09e8 100644
--- a/code/modules/reagents/Chemistry-Recipes/Slime_extracts.dm
+++ b/code/modules/reagents/Chemistry-Recipes/Slime_extracts.dm
@@ -151,7 +151,7 @@
/obj/item/weapon/reagent_containers/food/snacks/meat,
/obj/item/weapon/reagent_containers/food/snacks/soup,
/obj/item/weapon/reagent_containers/food/snacks/grown,
- /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom
+ /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom,
)
blocked |= typesof(/obj/item/weapon/reagent_containers/food/snacks/customizable)
@@ -185,8 +185,9 @@
/datum/chemical_reaction/slimebork2/on_reaction(var/datum/reagents/holder)
feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
+ var/list/blocked = list(/obj/item/weapon/reagent_containers/food/drinks)
- var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/drinks) - /obj/item/weapon/reagent_containers/food/drinks
+ var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/drinks) - blocked
// BORK BORK BORK
playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
diff --git a/code/modules/reagents/grenade_launcher.dm b/code/modules/reagents/grenade_launcher.dm
deleted file mode 100644
index f3bd6bbea87..00000000000
--- a/code/modules/reagents/grenade_launcher.dm
+++ /dev/null
@@ -1,61 +0,0 @@
-/obj/item/weapon/gun/grenadelauncher
- name = "grenade launcher"
- desc = "a terrible, terrible thing. it's really awful!"
- icon = 'icons/obj/guns/projectile.dmi'
- icon_state = "riotgun"
- item_state = "riotgun"
- w_class = 4.0
- throw_speed = 2
- throw_range = 7
- force = 5.0
- var/list/grenades = new/list()
- var/max_grenades = 3
- m_amt = 2000
-
-/obj/item/weapon/gun/grenadelauncher/examine(mob/user)
- ..()
- user << "[grenades] / [max_grenades] grenades loaded."
-
-/obj/item/weapon/gun/grenadelauncher/attackby(obj/item/I as obj, mob/user as mob, params)
-
- if((istype(I, /obj/item/weapon/grenade)))
- if(grenades.len < max_grenades)
- user.drop_item()
- I.loc = src
- grenades += I
- user << "You put the grenade in the grenade launcher."
- user << "[grenades.len] / [max_grenades] Grenades."
- else
- usr << "The grenade launcher cannot hold more grenades!"
-
-/obj/item/weapon/gun/grenadelauncher/afterattack(obj/target, mob/user , flag)
-
- if (istype(target, /obj/item/weapon/storage/backpack ))
- return
-
- else if (locate (/obj/structure/table, src.loc))
- return
-
- else if(target == user)
- return
-
- if(grenades.len)
- spawn(0) fire_grenade(target,user)
- else
- usr << "The grenade launcher is empty!"
-
-/obj/item/weapon/gun/grenadelauncher/proc/fire_grenade(atom/target, mob/user)
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("[] fired a grenade!", user), 1)
- user << "You fire the grenade launcher!"
- var/obj/item/weapon/grenade/chem_grenade/F = grenades[1] //Now with less copypasta!
- grenades -= F
- F.loc = user.loc
- F.throw_at(target, 30, 2)
- message_admins("[key_name_admin(user)] fired a grenade ([F.name]) from a grenade launcher ([src.name]).")
- log_game("[key_name(user)] fired a grenade ([F.name]) from a grenade launcher ([src.name]).")
- F.active = 1
- F.icon_state = initial(icon_state) + "_active"
- playsound(user.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
- spawn(15)
- F.prime()
diff --git a/code/modules/reagents/syringe_gun.dm b/code/modules/reagents/syringe_gun.dm
deleted file mode 100644
index 5c6327abcfa..00000000000
--- a/code/modules/reagents/syringe_gun.dm
+++ /dev/null
@@ -1,77 +0,0 @@
-/obj/item/weapon/gun/syringe
- name = "syringe gun"
- desc = "A spring loaded rifle designed to fit syringes, used to incapacitate unruly patients from a distance."
- icon_state = "syringegun"
- item_state = "syringegun"
- w_class = 3
- throw_speed = 3
- throw_range = 7
- force = 4
- m_amt = 2000
- clumsy_check = 0
- fire_sound = 'sound/items/syringeproj.ogg'
- var/list/syringes = list()
- var/max_syringes = 1
-
-/obj/item/weapon/gun/syringe/New()
- ..()
- chambered = new /obj/item/ammo_casing/syringegun(src)
-
-/obj/item/weapon/gun/syringe/proc/newshot()
- if(!syringes.len) return
-
- var/obj/item/weapon/reagent_containers/syringe/S = syringes[1]
-
- if(!S) return
-
- chambered.BB = new /obj/item/projectile/bullet/dart/syringe(src)
- S.reagents.trans_to(chambered.BB, S.reagents.total_volume)
- chambered.BB.name = S.name
- syringes.Remove(S)
-
- qdel(S)
- return
-
-/obj/item/weapon/gun/syringe/process_chamber()
- return
-
-/obj/item/weapon/gun/syringe/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, params)
- newshot()
- ..()
-
-/obj/item/weapon/gun/syringe/examine(mob/user)
- ..()
- user << "Can hold [max_syringes] syringe\s. Has [syringes.len] syringe\s remaining."
-
-/obj/item/weapon/gun/syringe/attack_self(mob/living/user as mob)
- if(!syringes.len)
- user << "[src] is empty."
- return 0
-
- var/obj/item/weapon/reagent_containers/syringe/S = syringes[syringes.len]
-
- if(!S) return 0
- S.loc = user.loc
-
- syringes.Remove(S)
- user << "You unload [S] from \the [src]."
-
- return 1
-
-/obj/item/weapon/gun/syringe/attackby(var/obj/item/A as obj, mob/user as mob, params, var/show_msg = 1)
- if(istype(A, /obj/item/weapon/reagent_containers/syringe))
- if(syringes.len < max_syringes)
- user.drop_item()
- user << "You load [A] into \the [src]."
- syringes.Add(A)
- A.loc = src
- return 1
- else
- usr << "[src] cannot hold more syringes!"
- return 0
-
-/obj/item/weapon/gun/syringe/rapidsyringe
- name = "rapid syringe gun"
- desc = "A modification of the syringe gun design, using a rotating cylinder to store up to six syringes."
- icon_state = "rapidsyringegun"
- max_syringes = 6
diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm
index b8e4560a26a..1827184ab1e 100644
--- a/code/modules/research/designs/autolathe_designs.dm
+++ b/code/modules/research/designs/autolathe_designs.dm
@@ -191,7 +191,7 @@
id = "kitchen_knife"
build_type = AUTOLATHE
materials = list("$metal" = 12000)
- build_path = /obj/item/weapon/kitchenknife
+ build_path = /obj/item/weapon/kitchen/knife
category = list("initial","Misc")
/datum/design/scalpel
diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm
index 26e29741279..8f14875b616 100644
--- a/code/modules/research/designs/mechfabricator_designs.dm
+++ b/code/modules/research/designs/mechfabricator_designs.dm
@@ -608,7 +608,7 @@
/////////////////////////////////////////
/datum/design/borg_upgrade_reset
- name = "Cyborg Upgrade (Reset Module)"
+ name = "Cyborg Upgrade (Module Reset Board)"
id = "borg_upgrade_reset"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/reset
@@ -617,7 +617,7 @@
category = list("Cyborg Upgrade Modules")
/datum/design/borg_upgrade_rename
- name = "Cyborg Upgrade (Rename Module)"
+ name = "Cyborg Upgrade (Rename Board)"
id = "borg_upgrade_rename"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/rename
@@ -626,7 +626,7 @@
category = list("Cyborg Upgrade Modules")
/datum/design/borg_upgrade_restart
- name = "Cyborg Upgrade (Restart Module)"
+ name = "Cyborg Upgrade (Emergency Reboot Board)"
id = "borg_upgrade_restart"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/restart
diff --git a/code/modules/surgery/generic_steps.dm b/code/modules/surgery/generic_steps.dm
index b31ec1afe24..a4ea6e51ba2 100644
--- a/code/modules/surgery/generic_steps.dm
+++ b/code/modules/surgery/generic_steps.dm
@@ -1,7 +1,7 @@
//make incision
/datum/surgery_step/incise
- implements = list(/obj/item/weapon/scalpel = 100, /obj/item/weapon/kitchenknife = 65, /obj/item/weapon/shard = 45)
+ implements = list(/obj/item/weapon/scalpel = 100, /obj/item/weapon/kitchen/knife = 65, /obj/item/weapon/shard = 45)
time = 24
/datum/surgery_step/incise/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
@@ -58,7 +58,7 @@
//saw bone
/datum/surgery_step/saw
- implements = list(/obj/item/weapon/circular_saw = 100, /obj/item/weapon/melee/arm_blade = 75, /obj/item/weapon/hatchet = 35, /obj/item/weapon/kitchenknife/butcher = 25)
+ implements = list(/obj/item/weapon/circular_saw = 100, /obj/item/weapon/melee/arm_blade = 75, /obj/item/weapon/hatchet = 35, /obj/item/weapon/kitchen/knife/butcher = 25)
time = 64
/datum/surgery_step/saw/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
diff --git a/code/modules/surgery/lipoplasty.dm b/code/modules/surgery/lipoplasty.dm
index 88f2cd2f4d1..532e90e1e9e 100644
--- a/code/modules/surgery/lipoplasty.dm
+++ b/code/modules/surgery/lipoplasty.dm
@@ -9,7 +9,7 @@
//cut fat
/datum/surgery_step/cut_fat
- implements = list(/obj/item/weapon/circular_saw = 100, /obj/item/weapon/hatchet = 35, /obj/item/weapon/kitchenknife/butcher = 25)
+ implements = list(/obj/item/weapon/circular_saw = 100, /obj/item/weapon/hatchet = 35, /obj/item/weapon/kitchen/knife/butcher = 25)
time = 64
/datum/surgery_step/cut_fat/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
diff --git a/code/modules/surgery/plastic_surgery.dm b/code/modules/surgery/plastic_surgery.dm
index e0a4dc96c76..52695210d1c 100644
--- a/code/modules/surgery/plastic_surgery.dm
+++ b/code/modules/surgery/plastic_surgery.dm
@@ -6,7 +6,7 @@
//reshape_face
/datum/surgery_step/reshape_face
- implements = list(/obj/item/weapon/scalpel = 100, /obj/item/weapon/kitchenknife = 50, /obj/item/weapon/wirecutters = 35)
+ implements = list(/obj/item/weapon/scalpel = 100, /obj/item/weapon/kitchen/knife = 50, /obj/item/weapon/wirecutters = 35)
time = 64
/datum/surgery_step/reshape_face/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
diff --git a/config/admins.txt b/config/admins.txt
index 7ee8062dcb0..81c120f06e7 100644
--- a/config/admins.txt
+++ b/config/admins.txt
@@ -8,6 +8,7 @@
# NOTE: syntax was changed to allow hyphenation of ranknames, since spaces are stripped. #
###############################################################################################
MrStonedOne = Host
+microscopics = Game Master
Gun Hog = Game Master
razharas = Game Master
Niknakflak = Game Master
diff --git a/config/game_options.txt b/config/game_options.txt
index ae06f1b3675..cc2a9c13d1d 100644
--- a/config/game_options.txt
+++ b/config/game_options.txt
@@ -100,20 +100,46 @@ PROBABILITY SANDBOX 0
## Toggles for continuous modes.
## Modes that aren't continuous will end the instant all antagonists are dead.
-## Unlisted modes are not currently supported for noncontinous play
+CONTINUOUS TRAITOR
+CONTINUOUS TRAITORCHAN
+CONTINUOUS DOUBLE_AGENTS
+#CONTINUOUS NUCLEAR
#CONTINUOUS REVOLUTION
+#CONTINUOUS SHADOWLING
+#CONTINUOUS GANG
+CONTINUOUS CULT
+CONTINUOUS CHANGELING
CONTINUOUS WIZARD
CONTINUOUS MALFUNCTION
CONTINUOUS BLOB
+#CONTINUOUS RAGINMAGES
+#CONTINUOUS MONKEY
+
+##Note: do not toggle continuous off for these modes, as they have no antagonists and would thus end immediately!
+
+CONTINUOUS METEOR
+CONTINUOUS EXTENDED
+
## Toggles for allowing midround antagonists (aka mulligan antagonists).
## In modes that are continuous, if all antagonists should die then a new set of antagonists will be created.
-## Only the listed modes are currently supported for this system
+MIDROUND_ANTAG TRAITOR
+MIDROUND_ANTAG TRAITORCHAN
+MIDROUND_ANTAG DOUBLE_AGENTS
+#MIDROUND_ANTAG NUCLEAR
+#MIDROUND_ANTAG REVOLUTION
+#MIDROUND_ANTAG SHADOWLING
+#MIDROUND_ANTAG GANG
+MIDROUND_ANTAG CULT
+MIDROUND_ANTAG CHANGELING
MIDROUND_ANTAG WIZARD
MIDROUND_ANTAG MALFUNCTION
MIDROUND_ANTAG BLOB
+#MIDROUND_ANTAG RAGINMAGES
+#MIDROUND_ANTAG MONKEY
+
## The amount of time it takes for the emergency shuttle to be called, from round start.
SHUTTLE_REFUEL_DELAY 12000
diff --git a/config/names/mime.txt b/config/names/mime.txt
new file mode 100644
index 00000000000..14845a89b40
--- /dev/null
+++ b/config/names/mime.txt
@@ -0,0 +1,24 @@
+Mr. Beret
+Mime
+Mr. Mime
+Mr. Mute
+Silence
+Silencio
+Quiet
+Silent Sorrow
+Silent Knight
+Silent Night
+Untouchable
+Unspeakable
+Mute
+Marcel Mime
+Marcel
+Pantomime
+Omerta
+Lemon Mime
+Invisible Man
+Transparency
+Quiet Riot
+Silent Majority
+Wall Runner
+Oui Oui
\ No newline at end of file
diff --git a/html/changelog.html b/html/changelog.html
index 1b28e0f192c..8ba799e8ebd 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -55,6 +55,64 @@
-->
+ 29 April 2015
+ AndroidSFV updated:
+
+ - Dehydrated carp now are friendly to both the imprinter of the plushie as well as any coded-in allies (I.E. Nuke Ops team), and unfriendly to carp of other origin othan than yourself or your coded-in allies. Dehydrated carp that are not imprinted will still have the same behavior as regular carp.
+
+ AnturK updated:
+
+ - Advanced cameras now have all functionality of the abductor consoles.
+ - Pinpoint teleportation takes 8 seconds and spawns a flashy silhouette at the target location. Can be used as distraction since it appears even if teleporter is empty.
+ - Abductors are now immune to viruses.
+ - Dissection surgery ignores clothes.
+ - Non-abductors can escape the ship by fiddling with consoles enough.
+ - Three new negative glands.
+ - Bloody glands spray blood everywhere and injure the host.
+ - Bodysnatch glands turn the host into a cocoon that hatches doppelgangers.
+ - Plasma glands cause the host to explode into a cloud of plasma.
+
+ GoonOnMoon updated:
+
+ - Added a new assault rifle to the game for use by Nanotrasen fighting forces in special events. Also happens to be available in the Liberation Station vending machine and the summon guns spell usable by the wizard and badminnery.
+
+ Iamgoofball updated:
+
+ - Acid blob has been removed.
+ - Charcoal and Silver Sulf are more powerful now.
+ - Styptic power and Silver Sulf metabolize at the default rate.
+
+ Ikarrus updated:
+
+ - Spraycans and crayons can now draw Poseur Tags, aka Fake Gang Tags, as grafiti.
+ - Gangs Capture goal reduced to 60%
+ - Influence income changed to provide weaker gangs a bigger boost, while slowing down stronger gangs to promote opportunity for comebacks.
+ - Gangs only earn influence on territories they have held on to since the previous Status Report (the income calculation every 5 minutes). This places more significance on defending your existing territory.
+ - You must be in the territory physically to tag it now. So no more tagging everything from maint.
+ - Gang income delay reduced to 3 minutes intervals.
+ - Gang Capture goal reduced to 50%
+ - Gang spraycan use increased to 20
+ - Gang Boss icon is now a red [G] icon to make it stand out better from regular gang icons
+
+ JJRcop updated:
+
+ - TED's kill duration has been halved.
+ - Escaping from the TED's field no longer kills you.
+
+ RemieRichards updated:
+
+ - Adds Easels and canvases for custom drawings.
+ - Place a canvas on an easel and draw on it with crayons, clean one pixel with a rag or soap and activate it in-hand to erase the whole canvas.
+ - Ports VG's Ventcrawling overhaul!
+ - Crawling through vents is no longer instant, you now have to move and navigate manually
+ - While inside pipes and other atmos machinery, you now see pipe vision
+
+ phil235 updated:
+
+ - Podplants are no longer unharvestable.
+ - Choosing your clown, mime, cyborg and AI name as well as religion and deity is now done in the preferences window. As a chaplain , your bible's icon is now chosen by clicking the bible.
+
+
25 April 2015
Boggart updated:
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index a14052090dd..813ddd15b61 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -2325,3 +2325,61 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
machines.
- tweak: You can no longer overdose on nicotine but you can get addicted (very mild
effects).
+2015-04-29:
+ AndroidSFV:
+ - tweak: Dehydrated carp now are friendly to both the imprinter of the plushie as
+ well as any coded-in allies (I.E. Nuke Ops team), and unfriendly to carp of
+ other origin othan than yourself or your coded-in allies. Dehydrated carp that
+ are not imprinted will still have the same behavior as regular carp.
+ AnturK:
+ - rscadd: Advanced cameras now have all functionality of the abductor consoles.
+ - tweak: Pinpoint teleportation takes 8 seconds and spawns a flashy silhouette at
+ the target location. Can be used as distraction since it appears even if teleporter
+ is empty.
+ - bugfix: Abductors are now immune to viruses.
+ - bugfix: Dissection surgery ignores clothes.
+ - bugfix: Non-abductors can escape the ship by fiddling with consoles enough.
+ - rscadd: Three new negative glands.
+ - rscadd: Bloody glands spray blood everywhere and injure the host.
+ - rscadd: Bodysnatch glands turn the host into a cocoon that hatches doppelgangers.
+ - rscadd: Plasma glands cause the host to explode into a cloud of plasma.
+ GoonOnMoon:
+ - rscadd: Added a new assault rifle to the game for use by Nanotrasen fighting forces
+ in special events. Also happens to be available in the Liberation Station vending
+ machine and the summon guns spell usable by the wizard and badminnery.
+ Iamgoofball:
+ - rscdel: Acid blob has been removed.
+ - tweak: Charcoal and Silver Sulf are more powerful now.
+ - tweak: Styptic power and Silver Sulf metabolize at the default rate.
+ Ikarrus:
+ - rscadd: Spraycans and crayons can now draw Poseur Tags, aka Fake Gang Tags, as
+ grafiti.
+ - tweak: Gangs Capture goal reduced to 60%
+ - tweak: Influence income changed to provide weaker gangs a bigger boost, while
+ slowing down stronger gangs to promote opportunity for comebacks.
+ - tweak: Gangs only earn influence on territories they have held on to since the
+ previous Status Report (the income calculation every 5 minutes). This places
+ more significance on defending your existing territory.
+ - bugfix: You must be in the territory physically to tag it now. So no more tagging
+ everything from maint.
+ - tweak: Gang income delay reduced to 3 minutes intervals.
+ - tweak: Gang Capture goal reduced to 50%
+ - tweak: Gang spraycan use increased to 20
+ - tweak: Gang Boss icon is now a red [G] icon to make it stand out better from regular
+ gang icons
+ JJRcop:
+ - tweak: TED's kill duration has been halved.
+ - tweak: Escaping from the TED's field no longer kills you.
+ RemieRichards:
+ - rscadd: Adds Easels and canvases for custom drawings.
+ - imageadd: Place a canvas on an easel and draw on it with crayons, clean one pixel
+ with a rag or soap and activate it in-hand to erase the whole canvas.
+ - rscadd: Ports VG's Ventcrawling overhaul!
+ - tweak: Crawling through vents is no longer instant, you now have to move and navigate
+ manually
+ - rscadd: While inside pipes and other atmos machinery, you now see pipe vision
+ phil235:
+ - bugfix: Podplants are no longer unharvestable.
+ - tweak: Choosing your clown, mime, cyborg and AI name as well as religion and deity
+ is now done in the preferences window. As a chaplain , your bible's icon is
+ now chosen by clicking the bible.
diff --git a/html/changelogs/Fayrik-TheNanoing.yml b/html/changelogs/Fayrik-TheNanoing.yml
new file mode 100644
index 00000000000..556f54168d2
--- /dev/null
+++ b/html/changelogs/Fayrik-TheNanoing.yml
@@ -0,0 +1,6 @@
+author: Fayrik
+
+delete-after: True
+
+changes:
+- rscadd: "Ported NanoUI to most atmospherics equipment."
\ No newline at end of file
diff --git a/html/changelogs/Ikarrus-gang5.yml b/html/changelogs/Ikarrus-gang5.yml
deleted file mode 100644
index 9716bc9d8a5..00000000000
--- a/html/changelogs/Ikarrus-gang5.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-author: Ikarrus
-
-delete-after: True
-
-changes:
- - rscadd: "Spraycans and crayons can now draw Poseur Tags, aka Fake Gang Tags, as grafiti."
- - tweak: "Gangs Capture goal reduced to 60%"
- - tweak: "Influence income changed to provide weaker gangs a bigger boost, while slowing down stronger gangs to promote opportunity for comebacks."
- - tweak: "Gangs only earn influence on territories they have held on to since the previous Status Report (the income calculation every 5 minutes). This places more significance on defending your existing territory."
- - bugfix: "You must be in the territory physically to tag it now. So no more tagging everything from maint."
\ No newline at end of file
diff --git a/html/changelogs/RemieRichards-PR-9090.yml b/html/changelogs/RemieRichards-PR-9090.yml
deleted file mode 100644
index 7fc9dbe8c21..00000000000
--- a/html/changelogs/RemieRichards-PR-9090.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-author: RemieRichards
-delete-after: True
-changes:
- - rscadd: "Ports VG's Ventcrawling overhaul!"
- - tweak: "Crawling through vents is no longer instant, you now have to move and navigate manually"
- - rscadd: "While inside pipes and other atmos machinery, you now see pipe vision"
diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi
index 0997a3676f5..0518872ccf8 100644
Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ
diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi
index 84ed7d9fc07..a8e2032719a 100644
Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ
diff --git a/icons/mob/inhands/guns_lefthand.dmi b/icons/mob/inhands/guns_lefthand.dmi
index 25337a3ae20..062adfa003d 100644
Binary files a/icons/mob/inhands/guns_lefthand.dmi and b/icons/mob/inhands/guns_lefthand.dmi differ
diff --git a/icons/mob/inhands/guns_righthand.dmi b/icons/mob/inhands/guns_righthand.dmi
index 470c1756985..09a3bc50d40 100644
Binary files a/icons/mob/inhands/guns_righthand.dmi and b/icons/mob/inhands/guns_righthand.dmi differ
diff --git a/icons/obj/artstuff.dmi b/icons/obj/artstuff.dmi
new file mode 100644
index 00000000000..a11d1a81d0e
Binary files /dev/null and b/icons/obj/artstuff.dmi differ
diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi
index 39b46c7806e..c613bee4949 100644
Binary files a/icons/obj/guns/projectile.dmi and b/icons/obj/guns/projectile.dmi differ
diff --git a/nano/css/shared.css b/nano/css/shared.css
index 8f7110ee152..a2fa3507d55 100644
--- a/nano/css/shared.css
+++ b/nano/css/shared.css
@@ -29,9 +29,18 @@ a, a:link, a:visited, a:active, .link, .linkOn, .linkOff, .selected, .disabled
.link
{
- float: left;
- min-width: 40px;
- height: 16px;
+ float: left;
+ min-width: 15px;
+ height: 16px;
+ text-align: center;
+ color: #ffffff;
+ text-decoration: none;
+ background: #40628a;
+ border: 1px solid #161616;
+ padding: 0px 4px 4px 4px;
+ margin: 0 2px 2px 0;
+ cursor: default;
+ white-space: nowrap;
}
a:hover, .linkActive:hover
@@ -218,6 +227,10 @@ h4
font-weight: bold;
}
+.redButton {
+ background: #ea0000;
+}
+
.highlight
{
color: #8BA5C4;
@@ -228,6 +241,15 @@ h4
color: #272727;
}
+.noticePlaceholder {
+ position: relative;
+ font-size: 12px;
+ font-style: italic;
+ font-weight: bold;
+ padding: 3px 4px 3px 4px;
+ margin: 4px 0 4px 0;
+}
+
.notice
{
background: url(uiNoticeBackground.jpg) 0 0 repeat;
diff --git a/nano/templates/air_alarm.tmpl b/nano/templates/air_alarm.tmpl
new file mode 100644
index 00000000000..f3a64d9efd8
--- /dev/null
+++ b/nano/templates/air_alarm.tmpl
@@ -0,0 +1,199 @@
+
+
+ {{if siliconUser}}
+
+ Interface Lock:
+
+
+ {{:~link('Engaged', 'locked', {'toggleaccess' : 1}, locked ? 'selected' : null)}}{{:~link('Disengaged', 'unlocked', {'toggleaccess' : 1}, (locked ? null : 'selected'))}}
+
+ {{else}}
+ {{if locked}}
+ Swipe an ID card to unlock this interface.
+ {{else}}
+ Swipe an ID card to lock this interface.
+ {{/if}}
+ {{/if}}
+
+
+Air Status
+{{if environment_data}}
+ {{for environment_data}}
+ {{:name}}
+ {{if danger_level == 2}}
+
+ {{else danger_level == 1}}
+
+ {{else}}
+
+ {{/if}}
+ {{:~round(value*100)/100}}
+ {{:unit}}
+ {{/for}}
+ Local Status: {{if danger_level == 2}}
+ DANGER: Internals Required
+ {{else danger_level == 1}}
+ Caution
+ {{else}}
+ Optimal
+ {{/if}}
+
+ Area Status: {{if atmos_alarm}}Atmosphere alert in area{{else fire_alarm}}Fire alarm in area{{else}}No alerts{{/if}}
+{{else}}
+ Warning: Cannot obtain air sample for analysis.
+{{/if}}
+{{if dangerous}}
+ NOTICE: Safety measures nonfunctional. Device may exhibit abnormal behavior.
+{{/if}}
+
+{{if (!locked || siliconUser)}}
+ {{if screen != 1}}
+ {{:~link('Main Menu', null, { 'screen' : 1})}}
+ {{/if}}
+ {{if screen == 1}}
+
+ {{if atmos_alarm}}
+ {{:~link('Reset - Area Atmospheric Alarm', null, { 'atmos_reset' : 1})}}
+ {{else}}
+ {{:~link('Activate - Area Atmospheric Alarm', null, { 'atmos_alarm' : 1})}}
+ {{/if}}
+
+
+
+ {{:~link('Scrubbers Control', null, { 'screen' : 3})}}
+
+
+ {{:~link('Vents Control', null, { 'screen' : 2})}}
+
+
+ {{:~link('Set Environmental Mode', null, { 'screen' : 4})}}
+
+
+ {{:~link('Sensor Settings', null, { 'screen' : 5})}}
+
+
+ {{if mode==3}}
+ {{:~link('PANIC SIPHON ACTIVE - Turn siphoning off', null, { 'mode' : 1}, null, 'redButton')}}
+ {{else}}
+ {{:~link('ACTIVATE PANIC SIPHON IN AREA', null, { 'mode' : 3}, null, 'yellowButton')}}
+ {{/if}}
+ {{else screen == 2}}
+ {{for vents}}
+ {{:long_name}}
+
+
+ Operating:
+
+
+ {{:~link(power ? 'On' : 'Off', null, { 'id_tag' : id_tag, 'command' : 'power', 'val' : power ? 0 : 1}, null, power ? null : 'redButton')}}
+
+
+
+
+ Mode:
+
+
+ {{:direction == "siphon" ? 'Siphoning' : 'Pressurizing'}}
+
+
+
+
+ Pressure Checks:
+
+
+ {{:~link('External', null, { 'id_tag' : id_tag, 'command' : 'excheck', 'val' : checks}, null, excheck ? 'selected' : null)}}
+ {{:~link('Internal', null, { 'id_tag' : id_tag, 'command' : 'incheck', 'val' : checks}, null, incheck ? 'selected' : null)}}
+
+
+
+
+ External Pressure Bound:
+
+
+ {{:~link(~round(external*100)/100, null, { 'id_tag' : id_tag, 'command' : 'set_external_pressure'})}}
+ {{:~link('Reset', null, { 'id_tag' : id_tag, 'command' : 'reset_external_pressure'})}}
+
+
+
+ {{/for}}
+ {{if !vents.length}}
+ No vents connected.
+ {{/if}}
+ {{else screen == 3}}
+ {{for scrubbers}}
+ {{:long_name}}
+
+
+ Operating:
+
+
+ {{:~link(power ? 'On' : 'Off', null, { 'id_tag' : id_tag, 'command' : 'power', 'val' : power ? 0 : 1}, null, power ? null : 'redButton')}}
+
+
+
+
+ Mode:
+
+
+ {{:~link(scrubbing ? 'Scrubbing' : 'Siphoning', null, { 'id_tag' : id_tag, 'command' : 'scrubbing', 'val' : scrubbing ? 0 : 1}, null, scrubbing ? null : 'redButton')}}
+
+
+
+
+ Filters:
+
+
+ {{:~link("Carbon Dioxide", null, { 'id_tag' : id_tag, 'command' : "co2_scrub", 'val' : filter_co2 ? 0 : 1}, null, filter_co2 ? 'selected' : null)}}
+ {{:~link("Plasma", null, { 'id_tag' : id_tag, 'command' : "tox_scrub", 'val' : filter_toxins ? 0 : 1}, null, filter_toxins ? 'selected' : null)}}
+ {{:~link("Nitrous Oxide", null, { 'id_tag' : id_tag, 'command' : "n2o_scrub", 'val' : filter_n2o ? 0 : 1}, null, filter_n2o ? 'selected' : null)}}
+
+
+
+ {{/for}}
+ {{if !scrubbers.length}}
+ No scrubbers connected.
+ {{/if}}
+ {{else screen == 4}}
+ Environmental Modes
+ {{for modes}}
+
+ {{:~link(name, null, { 'mode' : mode }, null, selected ? (danger ? 'redButton' : 'selected') : (danger ? 'bad' : null))}}
+
+ {{/for}}
+ {{else screen == 5}}
+ Alarm Threshold
+ Partial pressure for gases.
+
+
+ | min2 | min1 | max1 | max2 |
+
+ {{for thresholds}}
+
+ | {{:name}} |
+ {{for settings}}
+
+ {{:~link(selected >= 0 ? ~round(selected*100)/100 : "Off", null, { 'command' : 'set_threshold', 'env' : env, 'var' : val })}}
+ |
+ {{/for}}
+
+ {{/for}}
+
+ {{/if}}
+{{/if}}
\ No newline at end of file
diff --git a/nano/templates/atmos_filter.tmpl b/nano/templates/atmos_filter.tmpl
new file mode 100644
index 00000000000..24ee5c8c75f
--- /dev/null
+++ b/nano/templates/atmos_filter.tmpl
@@ -0,0 +1,51 @@
+
+
+ Power:
+
+
+ {{:~link(on? 'On' : 'Off', null, {'power' : 1})}}
+
+
+
+
+ Output pressure:
+
+
+
+ {{:~link('MAX', null, {'set_press' : 'max'}, null)}}
+ {{:~link('SET', null, {'set_press' : 'set'}, null)}}
+ {{:(pressure_set/100)}} kPa
+
+
+
+Filter Type
+
+
+ {{:~link('Plasma', null, {'filterset' : 0}, (filter_type == 0)? 'selected' : null)}}
+
+
+
+
+ {{:~link('Oxygen', null, {'filterset' : 1}, (filter_type == 1)? 'selected' : null)}}
+
+
+
+
+ {{:~link('Nitrogen', null, {'filterset' : 2}, (filter_type == 2)? 'selected' : null)}}
+
+
+
+
+ {{:~link('Carbon Dioxide', null, {'filterset' : 3}, (filter_type == 3)? 'selected' : null)}}
+
+
+
+
+ {{:~link('Nitrous Oxide', null, {'filterset' : 4}, (filter_type == 4)? 'selected' : null)}}
+
+
+
+
+ {{:~link('Nothing', null, {'filterset' : -1}, (filter_type == -1)? 'selected' : null)}}
+
+
\ No newline at end of file
diff --git a/nano/templates/atmos_gas_pump.tmpl b/nano/templates/atmos_gas_pump.tmpl
new file mode 100644
index 00000000000..833bc7046cb
--- /dev/null
+++ b/nano/templates/atmos_gas_pump.tmpl
@@ -0,0 +1,36 @@
+
+
+ Power:
+
+
+ {{:~link(on? 'On' : 'Off', null, {'power' : 1})}}
+
+
+
+{{if max_rate}}
+
+
+ Transfer rate:
+
+
+
+ {{:~link('MAX', null, {'set_transfer_rate' : 'max'}, null)}}
+ {{:~link('SET', null, {'set_transfer_rate' : 'set'}, null)}}
+ {{:(transfer_rate/100)}} L/s
+
+
+
+{{else}}
+
+
+ Output pressure:
+
+
+
+ {{:~link('MAX', null, {'set_press' : 'max'}, null)}}
+ {{:~link('SET', null, {'set_press' : 'set'}, null)}}
+ {{:(pressure_set/100)}} kPa
+
+
+
+{{/if}}
\ No newline at end of file
diff --git a/nano/templates/atmos_mixer.tmpl b/nano/templates/atmos_mixer.tmpl
new file mode 100644
index 00000000000..efc98565b90
--- /dev/null
+++ b/nano/templates/atmos_mixer.tmpl
@@ -0,0 +1,51 @@
+
+
+ Power:
+
+
+ {{:~link(on? 'On' : 'Off', null, {'power' : 1})}}
+
+
+
+
+
+ Output pressure:
+
+
+
+ {{:~link('MAX', null, {'set_press' : 'max'}, null)}}
+ {{:~link('SET', null, {'set_press' : 'set'}, null)}}
+ {{:(pressure_set/100)}} kPa
+
+
+
+
+
+
+ Node 1 Concentration:
+
+
+
+ {{:~link('-', null, {'node1_c' : '-0.1'}, null)}}
+ {{:~link('-', null, {'node1_c' : '-0.01'}, null)}}
+ {{:node1_concentration}} %
+ {{:~link('+', null, {'node1_c' : '0.01'}, null)}}
+ {{:~link('+', null, {'node1_c' : '0.1'}, null)}}
+
+
+
+
+
+
+ Node 2 Concentration:
+
+
+
+ {{:~link('-', null, {'node2_c' : '-0.1'}, null)}}
+ {{:~link('-', null, {'node2_c' : '-0.01'}, null)}}
+ {{:node2_concentration}} %
+ {{:~link('+', null, {'node2_c' : '0.01'}, null)}}
+ {{:~link('+', null, {'node2_c' : '0.1'}, null)}}
+
+
+
\ No newline at end of file
diff --git a/nano/templates/canister.tmpl b/nano/templates/canister.tmpl
new file mode 100644
index 00000000000..1f67d608e5b
--- /dev/null
+++ b/nano/templates/canister.tmpl
@@ -0,0 +1,83 @@
+Tank Status
+
+
+ Tank Label:
+
+
+ {{:name}} {{:~link('Relabel', 'pencil', {'relabel' : 1}, canLabel ? null : 'disabled')}}
+
+
+
+
+
+ Tank Pressure:
+
+
+ {{:tankPressure}} kPa
+
+
+
+
+
+ Port Status:
+
+
+ {{:portConnected ? 'Connected' : 'Disconnected'}}
+
+
+
+Holding Tank Status
+{{if hasHoldingTank}}
+
+
+ Tank Label:
+
+
+ {{:holdingTank.name}} {{:~link('Eject', 'eject', {'remove_tank' : 1})}}
+
+
+
+
+
+ Tank Pressure:
+
+
+ {{:holdingTank.tankPressure}} kPa
+
+
+{{else}}
+ No holding tank inserted.
+
+{{/if}}
+
+
+Release Valve Status
+
+
+ Release Pressure:
+
+
+ {{:~displayBar(releasePressure, minReleasePressure, maxReleasePressure)}}
+
+ {{:~link('-', null, {'pressure_adj' : -1000}, (releasePressure > minReleasePressure) ? null : 'disabled')}}
+ {{:~link('-', null, {'pressure_adj' : -100}, (releasePressure > minReleasePressure) ? null : 'disabled')}}
+ {{:~link('-', null, {'pressure_adj' : -10}, (releasePressure > minReleasePressure) ? null : 'disabled')}}
+ {{:~link('-', null, {'pressure_adj' : -1}, (releasePressure > minReleasePressure) ? null : 'disabled')}}
+ {{:releasePressure}} kPa
+ {{:~link('+', null, {'pressure_adj' : 1}, (releasePressure < maxReleasePressure) ? null : 'disabled')}}
+ {{:~link('+', null, {'pressure_adj' : 10}, (releasePressure < maxReleasePressure) ? null : 'disabled')}}
+ {{:~link('+', null, {'pressure_adj' : 100}, (releasePressure < maxReleasePressure) ? null : 'disabled')}}
+ {{:~link('+', null, {'pressure_adj' : 1000}, (releasePressure < maxReleasePressure) ? null : 'disabled')}}
+
+
+
+
+
+
+ Release Valve:
+
+
+ {{:~link('Open', 'unlocked', {'toggle' : 1}, valveOpen ? 'selected' : null)}}{{:~link('Close', 'locked', {'toggle' : 1}, valveOpen ? null : 'selected')}}
+
+
+
diff --git a/nano/templates/tanks.tmpl b/nano/templates/tanks.tmpl
new file mode 100644
index 00000000000..6aa259fd145
--- /dev/null
+++ b/nano/templates/tanks.tmpl
@@ -0,0 +1,47 @@
+{{if maskConnected}}
+ This tank is connected to a mask.
+{{else}}
+ This tank is NOT connected to a mask.
+{{/if}}
+
+
+
+ Tank Pressure:
+
+
+ {{:~displayBar(tankPressure, 0, 1013, (tankPressure > 200) ? 'good' : ((tankPressure > 100) ? 'average' : 'bad'))}}
+
+ {{:tankPressure}} kPa
+
+
+
+
+
+
+
+
+ Mask Release Pressure:
+
+
+ {{:~displayBar(releasePressure, 0, maxReleasePressure, (releasePressure >= 23) ? null : ((releasePressure >= 17) ? 'average' : 'bad'))}}
+
+ {{:~link('-', null, {'dist_p' : -5}, (releasePressure > 0) ? null : 'disabled')}}
+ {{:~link('-', null, {'dist_p' : -1}, (releasePressure > 0) ? null : 'disabled')}}
+ {{:releasePressure}} kPa
+ {{:~link('+', null, {'dist_p' : 1}, (releasePressure < maxReleasePressure) ? null : 'disabled')}}
+ {{:~link('+', null, {'dist_p' : 5}, (releasePressure < maxReleasePressure) ? null : 'disabled')}}
+ {{:~link('Max', null, {'dist_p' : 'max'}, (releasePressure < maxReleasePressure) ? null : 'disabled')}}
+ {{:~link('Reset', null, {'dist_p' : 'reset'}, (releasePressure != defaultReleasePressure) ? null : 'disabled')}}
+
+
+
+
+
+
+ Mask Release Valve:
+
+
+ {{:~link('Open', 'unlocked', {'stat' : 1}, (!maskConnected) ? 'disabled' : (valveOpen ? 'selected' : null))}}{{:~link('Close', 'locked', {'stat' : 1}, valveOpen ? null : 'selected')}}
+
+
+
diff --git a/tgstation.dme b/tgstation.dme
index 5ff1207a086..33764a17413 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -694,6 +694,7 @@
#include "code\game\objects\items\weapons\tanks\tank_types.dm"
#include "code\game\objects\items\weapons\tanks\tanks.dm"
#include "code\game\objects\items\weapons\tanks\watertank.dm"
+#include "code\game\objects\structures\artstuff.dm"
#include "code\game\objects\structures\barsigns.dm"
#include "code\game\objects\structures\bedsheet_bin.dm"
#include "code\game\objects\structures\displaycase.dm"
|