Merge branch 'master' into Biodegradable-Darts

This commit is contained in:
Zna12
2018-03-06 21:57:23 -06:00
committed by GitHub
182 changed files with 12518 additions and 21404 deletions
@@ -0,0 +1,41 @@
/obj/structure/reagent_dispensers/keg
name = "keg"
desc = "A keg."
icon = 'modular_citadel/icons/obj/objects.dmi'
icon_state = "keg"
reagent_id = "water"
/obj/structure/reagent_dispensers/keg/mead
name = "keg of mead"
desc = "A keg of mead."
icon_state = "orangekeg"
reagent_id = "mead"
/obj/structure/reagent_dispensers/keg/aphro
name = "keg of aphrodisiac"
desc = "A keg of aphrodisiac."
icon_state = "pinkkeg"
reagent_id = "aphro"
/obj/structure/reagent_dispensers/keg/aphro/strong
name = "keg of strong aphrodisiac"
desc = "A keg of strong and addictive aphrodisiac."
reagent_id = "aphro+"
/obj/structure/reagent_dispensers/keg/milk
name = "keg of milk"
desc = "It's not quite what you were hoping for."
icon_state = "whitekeg"
reagent_id = "milk"
/obj/structure/reagent_dispensers/keg/semen
name = "keg of semen"
desc = "Dear lord, where did this even come from?"
icon_state = "whitekeg"
reagent_id = "semen"
/obj/structure/reagent_dispensers/keg/gargle
name = "keg of pan galactic gargleblaster"
desc = "A keg of... wow that's a long name."
icon_state = "bluekeg"
reagent_id = "gargleblaster"
@@ -0,0 +1,223 @@
#define HYPO_SPRAY 0
#define HYPO_INJECT 1
//A vial-loaded hypospray. Cartridge-based!
/obj/item/reagent_containers/hypospray/mkii
name = "hypospray mk.II"
icon = 'modular_citadel/icons/obj/hypospraymkii.dmi'
icon_state = "hypo2"
var/list/allowed_containers = list(/obj/item/reagent_containers/glass/bottle/vial/small)
desc = "A new development from DeForest Medical, this new hypospray takes 30-unit vials as the drug supply for easy swapping."
volume = 0
amount_per_transfer_from_this = 5
possible_transfer_amounts = list(5,10,15)
var/mode = HYPO_INJECT
var/obj/item/reagent_containers/glass/bottle/vial/vial
var/loaded_vial = /obj/item/reagent_containers/glass/bottle/vial/small
var/spawnwithvial = TRUE
var/start_vial = null
/obj/item/reagent_containers/hypospray/mkii/CMO
name = "hypospray mk.II deluxe"
allowed_containers = list(/obj/item/reagent_containers/glass/bottle/vial/small, /obj/item/reagent_containers/glass/bottle/vial/large)
icon_state = "cmo2"
ignore_flags = 1
desc = "The Chief Medical Officer's hypospray is identically functional to the base model, excepting that it can take larger vials in addition to regular sized. It is also able to penetrate harder materials and deliver more reagents per spray."
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
loaded_vial = /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/CMO
possible_transfer_amounts = list(5,10,15,30,60) //cmo hypo should be able to dump lots into it
/obj/item/reagent_containers/hypospray/mkii/Initialize()
. = ..()
if(!spawnwithvial)
update_icon()
return
if (!start_vial)
start_vial = new loaded_vial(src)
vial = start_vial
update_icon()
/obj/item/reagent_containers/hypospray/mkii/update_icon()
..()
icon_state = "[initial(icon_state)][vial ? "" : "-e"]"
if(ismob(loc))
var/mob/M = loc
M.update_inv_hands()
return
/obj/item/reagent_containers/hypospray/mkii/examine(mob/user)
. = ..()
to_chat(user, "[src] is set to [mode ? "Inject" : "Spray"] contents on application.")
/obj/item/reagent_containers/hypospray/mkii/proc/unload_hypo(obj/item/I, mob/user)
if((istype(I, /obj/item/reagent_containers/glass/bottle/vial)))
var/obj/item/reagent_containers/glass/bottle/vial/V = I
reagents.trans_to(V, reagents.total_volume)
reagents.maximum_volume = 0
V.forceMove(user.loc)
user.put_in_hands(V)
to_chat(user, "<span class='notice'>You remove the vial from the [src].</span>")
vial = null
update_icon()
playsound(loc, 'sound/weapons/empty.ogg', 50, 1)
else
to_chat(user, "<span class='notice'>This hypo isn't loaded!</span>")
return
/obj/item/reagent_containers/hypospray/mkii/attackby(obj/item/I, mob/living/user)
if((istype(I, /obj/item/reagent_containers/glass/bottle/vial) && vial != null))
to_chat(user, "<span class='warning'>[src] can not hold more than one vial!</span>")
return FALSE
if((istype(I, /obj/item/reagent_containers/glass/bottle/vial)))
var/obj/item/reagent_containers/glass/bottle/vial/V = I
if(!is_type_in_list(V, allowed_containers))
to_chat(user, "<span class='notice'>\The [src] doesn't accept this vial.</span>")
return
vial = V
reagents.maximum_volume = V.volume
V.reagents.trans_to(src, V.reagents.total_volume)
if(!user.transferItemToLoc(V,src))
return
user.visible_message("<span class='notice'>[user] has loads vial into \the [src].</span>","<span class='notice'>You have loaded [vial] into \the [src].</span>")
update_icon()
playsound(loc, 'sound/weapons/autoguninsert.ogg', 50, 1)
return TRUE
else
to_chat(user, "<span class='notice'>This doesn't fit in \the [src].</span>")
return FALSE
return FALSE
/obj/item/reagent_containers/hypospray/mkii/attack(obj/item/I, mob/user, params)
return
/obj/item/reagent_containers/hypospray/mkii/afterattack(atom/target, mob/user, proximity)
if(!proximity)
return
if(!ismob(target))
return
var/mob/living/L
if(isliving(target))
L = target
if(!L.can_inject(user, 1))
return
if(!L && !target.is_injectable()) //only checks on non-living mobs, due to how can_inject() handles
to_chat(user, "<span class='warning'>You cannot directly fill [target]!</span>")
return
if(target.reagents.total_volume >= target.reagents.maximum_volume)
to_chat(user, "<span class='notice'>[target] is full.</span>")
return
if(ishuman(L))
var/obj/item/bodypart/affecting = L.get_bodypart(check_zone(user.zone_selected))
if(!affecting)
to_chat(user, "<span class='warning'>The limb is missing!</span>")
return
if(affecting.status != BODYPART_ORGANIC)
to_chat(user, "<span class='notice'>Medicine won't work on a robotic limb!</span>")
return
var/contained = reagents.log_list()
add_logs(user, L, "attemped to inject", src, addition="which had [contained]")
//Always log attemped injections for admins
if(vial != null)
switch(mode)
if(HYPO_INJECT)
if(L) //living mob
if(!L.can_inject(user, TRUE))
return
if(L != user)
L.visible_message("<span class='danger'>[user] is trying to inject [L] with [src]!</span>", \
"<span class='userdanger'>[user] is trying to inject [L] with the [src]!</span>")
if(!do_mob(user, L, extra_checks=CALLBACK(L, /mob/living/proc/can_inject,user,1)))
return
if(!reagents.total_volume)
return
if(L.reagents.total_volume >= L.reagents.maximum_volume)
return
L.visible_message("<span class='danger'>[user] uses the [src] on [L]!</span>", \
"<span class='userdanger'>[user] uses the [src] on [L]!</span>")
else
if(!do_mob(user, L, extra_checks=CALLBACK(L, /mob/living/proc/can_inject,user,1)))
return
if(!reagents.total_volume)
return
if(L.reagents.total_volume >= L.reagents.maximum_volume)
return
log_attack("<font color='red'>[user.name] ([user.ckey]) applied [src] to [L.name] ([L.ckey]), which had [contained] (INTENT: [uppertext(user.a_intent)]) (MODE: [src.mode])</font>")
L.log_message("<font color='orange'>applied [src] to themselves ([contained]).</font>", INDIVIDUAL_ATTACK_LOG)
var/fraction = min(amount_per_transfer_from_this/reagents.total_volume, 1)
reagents.reaction(L, INJECT, fraction)
reagents.trans_to(target, amount_per_transfer_from_this)
if(amount_per_transfer_from_this >= 15)
playsound(loc,'sound/items/hypospray_long.ogg',50, 1, -1)
if(amount_per_transfer_from_this < 15)
playsound(loc, pick('sound/items/hypospray.ogg','sound/items/hypospray2.ogg'), 50, 1, -1)
to_chat(user, "<span class='notice'>You inject [amount_per_transfer_from_this] units of the solution. The hypospray's cartridge now contains [reagents.total_volume] units.</span>")
if(HYPO_SPRAY)
if(L) //living mob
if(!L.can_inject(user, TRUE))
return
if(L != user)
L.visible_message("<span class='danger'>[user] is trying to inject [L] with [src]!</span>", \
"<span class='userdanger'>[user] is trying to inject [L] with the [src]!</span>")
if(!do_mob(user, L, extra_checks=CALLBACK(L, /mob/living/proc/can_inject,user,1)))
return
if(!reagents.total_volume)
return
if(L.reagents.total_volume >= L.reagents.maximum_volume)
return
L.visible_message("<span class='danger'>[user] uses the [src] on [L]!</span>", \
"<span class='userdanger'>[user] uses the [src] on [L]!</span>")
else
if(!do_mob(user, L, extra_checks=CALLBACK(L, /mob/living/proc/can_inject,user,1)))
return
if(!reagents.total_volume)
return
if(L.reagents.total_volume >= L.reagents.maximum_volume)
return
log_attack("<font color='red'>[user.name] ([user.ckey]) applied [src] to [L.name] ([L.ckey]), which had [contained] (INTENT: [uppertext(user.a_intent)]) (MODE: [src.mode])</font>")
L.log_message("<font color='orange'>applied [src] to themselves ([contained]).</font>", INDIVIDUAL_ATTACK_LOG)
var/fraction = min(amount_per_transfer_from_this/reagents.total_volume, 1)
reagents.reaction(L, PATCH, fraction)
reagents.trans_to(target, amount_per_transfer_from_this)
if(amount_per_transfer_from_this >= 15)
playsound(loc,'sound/items/hypospray_long.ogg',50, 1, -1)
if(amount_per_transfer_from_this < 15)
playsound(loc, pick('sound/items/hypospray.ogg','sound/items/hypospray2.ogg'), 50, 1, -1)
to_chat(user, "<span class='notice'>You spray [amount_per_transfer_from_this] units of the solution. The hypospray's cartridge now contains [reagents.total_volume] units.</span>")
else
to_chat(user, "<span class='notice'>[src] doesn't work here!</span>")
return
/obj/item/reagent_containers/hypospray/mkii/AltClick(mob/living/user)
if(user)
if(user.incapacitated())
return
else if(!contents)
to_chat(user, "This Hypo needs to be loaded first!")
return
else
for(var/obj/item/I in contents)
unload_hypo(I,user)
/obj/item/reagent_containers/hypospray/mkii/verb/modes()
set name = "Change Application Method"
set category = "Object"
set src in usr
var/mob/M = usr
var/choice = alert(M, "Which application mode should this be? Current mode is: [mode ? "Spray" : "Inject"]", "", "Spray", "Cancel", "Inject")
switch(choice)
if("Cancel")
return
if("Inject")
mode = HYPO_INJECT
to_chat(M, "[src] is now set to inject contents on application.")
if("Spray")
mode = HYPO_SPRAY
to_chat(M, "[src] is now set to spray contents on application.")
@@ -0,0 +1,116 @@
/obj/item/reagent_containers/glass/bottle/vial
name = "hypospray vial"
desc = "This is a vial suitable for loading into mk II hyposprays."
icon = 'modular_citadel/icons/obj/vial.dmi'
icon_state = "hypovial"
spillable = FALSE
var/comes_with = list() //Easy way of doing this.
volume = 10
obj_flags = UNIQUE_RENAME
unique_reskin = list("Hypospray vial" = "hypovial",
"Red hypospray vial" = "hypovial-b",
"Blue hypospray vial" = "hypovial-d",
"Green hypospray vial" = "hypovial-a",
"Orange hypospray vial" = "hypovial-k",
"Purple hypospray vial" = "hypovial-p",
"Black hypospray vial" = "hypovial-t"
)
/obj/item/reagent_containers/glass/bottle/vial/Initialize()
. = ..()
if(!icon_state)
icon_state = "hypovial"
update_icon()
for(var/R in comes_with)
reagents.add_reagent(R,comes_with[R])
/obj/item/reagent_containers/glass/bottle/vial/on_reagent_change()
update_icon()
/obj/item/reagent_containers/glass/bottle/vial/update_icon()
cut_overlays()
if(reagents.total_volume)
var/mutable_appearance/filling = mutable_appearance('modular_citadel/icons/obj/vial.dmi', "[icon_state]10")
var/percent = round((reagents.total_volume / volume) * 100)
switch(percent)
if(0 to 9)
filling.icon_state = "[icon_state]10"
if(10 to 29)
filling.icon_state = "[icon_state]25"
if(30 to 49)
filling.icon_state = "[icon_state]50"
if(50 to 69)
filling.icon_state = "[icon_state]75"
if(70 to INFINITY)
filling.icon_state = "[icon_state]100"
filling.color = mix_color_from_reagents(reagents.reagent_list)
add_overlay(filling)
/obj/item/reagent_containers/glass/bottle/vial/small
volume = 30
/obj/item/reagent_containers/glass/bottle/vial/large
name = "large hypospray vial"
desc = "This is a vial suitable for loading into the Chief Medical Officer's Hypospray mk II."
icon_state = "hypoviallarge"
volume = 60
unique_reskin = list("Large hypospray vial" = "hypoviallarge",
"Red hypospray vial" = "hypoviallarge-b",
"Blue hypospray vial" = "hypoviallarge-d",
"Green hypospray vial" = "hypoviallarge-a",
"Orange hypospray vial" = "hypoviallarge-k",
"Purple hypospray vial" = "hypoviallarge-p",
"Black hypospray vial" = "hypoviallarge-t"
)
/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/bicaridine
name = "vial (bicaridine)"
icon_state = "hypovial-b"
comes_with = list("bicaridine" = 30)
/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/antitoxin
name = "vial (Anti-Tox)"
icon_state = "hypovial-a"
comes_with = list("antitoxin" = 30)
/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/kelotane
name = "vial (kelotane)"
icon_state = "hypovial-k"
comes_with = list("kelotane" = 30)
/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/dexalin
name = "vial (dexalin)"
icon_state = "hypovial-d"
comes_with = list("dexalin" = 30)
/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/tricordrazine
name = "vial (tricordrazine)"
icon_state = "hypovial"
comes_with = list("tricordrazine" = 30)
/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/CMO
name = "large vial (CMO Special)"
icon_state = "hypoviallarge-cmos"
comes_with = list("epinephrine" = 15, "kelotane" = 15, "charcoal" = 15, "bicaridine" = 15)
/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/bicaridine
name = "large vial (bicaridine)"
icon_state = "hypoviallarge-b"
comes_with = list("bicaridine" = 60)
/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/antitoxin
name = "large vial (Anti-Tox)"
icon_state = "hypoviallarge-a"
comes_with = list("antitoxin" = 60)
/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/kelotane
name = "large vial (kelotane)"
icon_state = "hypoviallarge-k"
comes_with = list("kelotane" = 60)
/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/dexalin
name = "large vial (dexalin)"
icon_state = "hypoviallarge-d"
comes_with = list("dexalin" = 60)
@@ -0,0 +1,274 @@
//body bluids
/datum/reagent/consumable/semen
name = "Semen"
id = "semen"
description = "Sperm from some animal. Useless for anything but insemination, really."
taste_description = "something salty"
taste_mult = 2 //Not very overpowering flavor
data = list("donor"=null,"viruses"=null,"donor_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null)
reagent_state = LIQUID
color = "#FFFFFF" // rgb: 255, 255, 255
nutriment_factor = 0.5 * REAGENTS_METABOLISM
/datum/reagent/consumable/semen/reaction_turf(turf/T, reac_volume)
if(!istype(T))
return
if(reac_volume < 3)
return
var/obj/effect/decal/cleanable/semen/S = locate() in T
if(!S)
S = new(T)
S.reagents.add_reagent("semen", reac_volume)
if(data["blood_DNA"])
S.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"]))
/obj/effect/decal/cleanable/semen
name = "semen"
desc = null
gender = PLURAL
density = 0
layer = ABOVE_NORMAL_TURF_LAYER
icon = 'modular_citadel/icons/obj/genitals/effects.dmi'
icon_state = "semen1"
random_icon_states = list("semen1", "semen2", "semen3", "semen4")
/obj/effect/decal/cleanable/semen/New()
..()
dir = pick(1,2,4,8)
/datum/reagent/consumable/semen/reaction_turf(turf/T, reac_volume)
if(!isspaceturf(T))
var/obj/effect/decal/cleanable/reagentdecal = new/obj/effect/decal/cleanable/semen(T)
reagentdecal.reagents.add_reagent("semen", reac_volume)
/datum/reagent/consumable/femcum
name = "Female Ejaculate"
id = "femcum"
description = "Vaginal lubricant found in most mammals and other animals of similar nature. Where you found this is your own business."
taste_description = "something with a tang" // wew coders who haven't eaten out a girl.
taste_mult = 2
data = list("donor"=null,"viruses"=null,"donor_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null)
reagent_state = LIQUID
color = "#AAAAAA77"
nutriment_factor = 0.5 * REAGENTS_METABOLISM
/obj/effect/decal/cleanable/femcum
name = "female ejaculate"
desc = null
gender = PLURAL
density = 0
layer = ABOVE_NORMAL_TURF_LAYER
icon = 'modular_citadel/icons/obj/genitals/effects.dmi'
icon_state = "fem1"
random_icon_states = list("fem1", "fem2", "fem3", "fem4")
blood_state = null
bloodiness = null
/obj/effect/decal/cleanable/femcum/New()
..()
dir = pick(1,2,4,8)
add_blood_DNA(list("Non-human DNA" = "A+"))
/obj/effect/decal/cleanable/femcum/replace_decal(obj/effect/decal/cleanable/femcum/F)
F.add_blood_DNA(return_blood_DNA())
..()
/datum/reagent/consumable/femcum/reaction_turf(turf/T, reac_volume)
if(!istype(T))
return
if(reac_volume < 3)
return
var/obj/effect/decal/cleanable/femcum/S = locate() in T
if(!S)
S = new(T)
S.reagents.add_reagent("femcum", reac_volume)
if(data["blood_DNA"])
S.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"]))
//aphrodisiac & anaphrodisiac
/datum/reagent/drug/aphrodisiac
name = "Crocin"
id = "aphro"
description = "Naturally found in the crocus and gardenia flowers, this drug acts as a natural and safe aphrodisiac."
taste_description = "strawberry roofies"
taste_mult = 2 //Hide the roofies in stronger flavors
color = "#FFADFF"//PINK, rgb(255, 173, 255)
/datum/reagent/drug/aphrodisiac/on_mob_life(mob/living/M)
if(M && M.canbearoused)
if(prob(33))
M.adjustArousalLoss(2)
if(prob(5))
M.emote(pick("moan","blush"))
if(prob(5))
var/aroused_message = pick("You feel frisky.", "You're having trouble suppressing your urges.", "You feel in the mood.")
to_chat(M, "<span class='love'>[aroused_message]</span>")
..()
/datum/reagent/drug/aphrodisiacplus
name = "Hexacrocin"
id = "aphro+"
description = "Chemically condensed form of basic crocin. This aphrodisiac is extremely powerful and addictive in most animals.\
Addiction withdrawals can cause brain damage and shortness of breath. Overdosage can lead to brain damage and a\
permanent increase in libido (commonly referred to as 'bimbofication')."
taste_description = "liquid desire"
color = "#FF2BFF"//dark pink
addiction_threshold = 20
overdose_threshold = 20
/datum/reagent/drug/aphrodisiacplus/on_mob_life(mob/living/M)
if(M && M.canbearoused)
if(prob(33))
M.adjustArousalLoss(6)//not quite six times as powerful, but still considerably more powerful.
if(prob(5))
if(M.getArousalLoss() > 75)
M.say(pick("Hnnnnngghh...", "Ohh...", "Mmnnn..."))
else
M.emote(pick("moan","blush"))
if(prob(5))
var/aroused_message
if(M.getArousalLoss() > 90)
aroused_message = pick("You need to fuck someone!", "You're bursting with sexual tension!", "You can't get sex off your mind!")
else
aroused_message = pick("You feel a bit hot.", "You feel strong sexual urges.", "You feel in the mood.", "You're ready to go down on someone.")
to_chat(M, "<span class='love'>[aroused_message]</span>")
..()
/datum/reagent/drug/aphrodisiacplus/addiction_act_stage2(mob/living/M)
if(prob(30))
M.adjustBrainLoss(2)
..()
/datum/reagent/drug/aphrodisiacplus/addiction_act_stage3(mob/living/M)
if(prob(30))
M.adjustBrainLoss(3)
..()
/datum/reagent/drug/aphrodisiacplus/addiction_act_stage4(mob/living/M)
if(prob(30))
M.adjustBrainLoss(4)
..()
/datum/reagent/drug/aphrodisiacplus/overdose_process(mob/living/M)
if(M && M.canbearoused && prob(33))
if(M.getArousalLoss() >= 100 && ishuman(M) && M.has_dna())
var/mob/living/carbon/human/H = M
if(prob(50)) //Less spam
to_chat(H, "<span class='love'>Your libido is going haywire!</span>")
H.mob_climax(forced_climax=TRUE)
if(M.min_arousal < 50)
M.min_arousal += 1
if(M.min_arousal < M.max_arousal)
M.min_arousal += 1
M.adjustArousalLoss(2)
..()
/datum/reagent/drug/anaphrodisiac
name = "Camphor"
id = "anaphro"
description = "Naturally found in some species of evergreen trees, camphor is a waxy substance. When injested by most animals, it acts as an anaphrodisiac\
, reducing libido and calming them. Non-habit forming and not addictive."
taste_description = "dull bitterness"
taste_mult = 2
color = "#D9D9D9"//rgb(217, 217, 217)
reagent_state = SOLID
/datum/reagent/drug/anaphrodisiac/on_mob_life(mob/living/M)
if(M && M.canbearoused && prob(33))
M.adjustArousalLoss(-2)
..()
/datum/reagent/drug/anaphrodisiacplus
name = "Hexacamphor"
id = "anaphro+"
description = "Chemically condensed camphor. Causes an extreme reduction in libido and a permanent one if overdosed. Non-addictive."
taste_description = "tranquil celibacy"
color = "#D9D9D9"//rgb(217, 217, 217)
reagent_state = SOLID
overdose_threshold = 20
/datum/reagent/drug/anaphrodisiacplus/on_mob_life(mob/living/M)
if(M && M.canbearoused && prob(33))
M.adjustArousalLoss(-4)
..()
/datum/reagent/drug/anaphrodisiacplus/overdose_process(mob/living/M)
if(M && M.canbearoused && prob(33))
if(M.min_arousal > 0)
M.min_arousal -= 1
if(M.min_arousal > 50)
M.min_arousal -= 1
M.adjustArousalLoss(-2)
..()
//recipes
/datum/chemical_reaction/aphro
name = "crocin"
id = "aphro"
results = list("aphro" = 6)
required_reagents = list("carbon" = 2, "hydrogen" = 2, "oxygen" = 2, "water" = 1)
required_temp = 400
mix_message = "The mixture boils off a pink vapor..."//The water boils off, leaving the crocin
/datum/chemical_reaction/aphroplus
name = "hexacrocin"
id = "aphro+"
results = list("aphro+" = 1)
required_reagents = list("aphro" = 6, "phenol" = 1)
required_temp = 400
mix_message = "The mixture rapidly condenses and darkens in color..."
/datum/chemical_reaction/anaphro
name = "camphor"
id = "anaphro"
results = list("anaphro" = 6)
required_reagents = list("carbon" = 2, "hydrogen" = 2, "oxygen" = 2, "sulfur" = 1)
required_temp = 400
mix_message = "The mixture boils off a yellow, smelly vapor..."//Sulfur burns off, leaving the camphor
/datum/chemical_reaction/anaphroplus
name = "pentacamphor"
id = "anaphro+"
results = list("anaphro+" = 1)
required_reagents = list("anaphro" = 5, "acetone" = 1)
required_temp = 300
mix_message = "The mixture thickens and heats up slighty..."
//=========Drinks and Stuff!============//
/datum/reagent/consumable/ethanol/sake
name = "Sake"
id = "sake"
description = "A sweet rice wine of questionable legality and extreme potency."
color = "#DDDDDD"
boozepwr = 70
taste_description = "sweet rice wine"
glass_icon_state = "sakecup"
glass_name = "glass of sake"
glass_desc = "A traditional cup of sake."
/datum/chemical_reaction/sake
name = "sake"
id = "sake"
results = list("sake" = 20)
required_reagents = list("rice" = 15, "sugar" = 5)
required_temp = 400
mix_message = "The rice grains ferment with the sugar into a clear, sweet-smelling liquid."
/obj/item/reagent_containers/food/drinks/bottle/sake
name = "Traditional Sake"
desc = "Sweet as can be, and burns like foxfire going down."
icon = 'modular_citadel/icons/obj/drinks.dmi'
icon_state = "sakebottle"
list_reagents = list("sake" = 100)
/obj/item/reagent_containers/food/drinks/bottle/sake/Initialize()
. = ..()
if(prob(30))
name = "Tetravulpine Sake"
desc += " On the bottle is a picture of a kitsune with four tails."
else if(prob(30))
name = "Inubashiri's Home Brew"
desc += " Awoo."